如何编写后台API接口? #

通过官方示例脚手架,示例项目已经有例子,

首先在program中启动webapi。

//预加载配置
builder.WebHost.UseMicroService();

// 注入服务
builder.Services.AddMicroService(builder.Configuration, true);


//注入微服务
app.UseMicroService(builder.Configuration);

在Service项目中定义接口

 /// <summary>
    /// Demo服务
    /// </summary>
    [ApiDescriptionSettings(Tag = "Demo服务",Name = "ExchangeRate", Order = 200)]
    [Route("api/Demo/[controller]")]
    public class ExchangeRateService : IExchangeRateService, IDynamicApiController, ITransient, ICapSubscribe
    {
        private readonly ISqlSugarRepository<ExchangeRateEntity> _exchangeRateRepository;
        private readonly ISqlSugarRepository<DbLinkEntity> _dbLinkrepository;
        private readonly IDbLinkService _dbLinkService;
        private readonly IDataBaseService _dataBaseService;
        private readonly SqlSugarScope _db;
        private readonly IUserManager _userManager;
        private readonly ILogger<ExchangeRateService> _logger; //elk可以使用微软的ILogger,已经过滤掉nacos的请求了
        private readonly ICapPublisher _capBus;
        private readonly IExchangeRateApi _exchangeRateApi;
        private readonly IOmsApi _omsApi;
        private readonly ISendService _sendService;

        /// <summary>
        /// 初始化一个<see cref="ExchangeRateService"/>类型的新实例
        /// </summary>
        public ExchangeRateService(
            ISqlSugarRepository<ExchangeRateEntity> exchangeRateRepository,
            IDbLinkService dbLinkService,
            IDataBaseService dataBaseService,
            IUserManager userManager,
            ICapPublisher capBus,
            ISqlSugarRepository<DbLinkEntity> dbLinkrepository,
            IExchangeRateApi exchangeRateApi,
            IOmsApi omsApi,
            ILoggerFactory loggerFactory,
            ILogger<ExchangeRateService> logger,
            ISendService sendService)
        {
            _exchangeRateRepository = exchangeRateRepository;            
            _db = _exchangeRateRepository.Context;
            _dbLinkService = dbLinkService;
            _dataBaseService = dataBaseService;
            _userManager = userManager;
            _dbLinkrepository = dbLinkrepository;
            _logger = logger;
            _capBus = capBus;
            _exchangeRateApi = exchangeRateApi;
            _omsApi = omsApi;
            _sendService = sendService;
        }

        /// <summary>
        /// 获取Demo
        /// </summary>
        /// <param name="id">参数</param>
        /// <returns></returns>
        [HttpGet("{id}")]
        public async Task<dynamic> GetInfo(string id)
        {
            //下面注释的是代码生成的,可以不用写了,直接可以识别所在租户
            /*var dbLink = await _dbLinkService.GetInfoByDbName("mall3s_demo");
            _db.AddConnection(new ConnectionConfig()
            {
                ConfigId = dbLink.Id,
                DbType = _dataBaseService.ToDbType(dbLink.DbType),
                ConnectionString = _dataBaseService.ToConnectionString(dbLink),
                InitKeyType = InitKeyType.Attribute,
                IsAutoCloseConnection = true
            });
            _db.ChangeDatabase(dbLink.Id);*/
            //elk日志写法之一,相当于string.format("日志:{0}","日志1")
            _logger.LogInformation("获取Demo,id:{0}", id);
            var entity = await _db.Queryable<ExchangeRateEntity>().FirstAsync(p => p.Id == id);
            var output = entity.Adapt<ExchangeRateInfoOutput>();
            return output;
        }

        /// <summary>
		/// 获取Demo列表
		/// </summary>
		/// <param name="input">请求参数</param>
		/// <returns></returns>
        [HttpGet("")]
        public async Task<dynamic> GetList([FromQuery] ExchangeRateListQueryInput input)
        {
            _logger.LogInformation("获取Demo列表,参数:{0}", input.ToJson());
            var sidx = input.sidx == null ? "id" : input.sidx;
            List<string> queryExchangeDate = input.exchangeDate != null ? input.exchangeDate.Split(',').ToObeject<List<string>>() : null;
            DateTime? startExchangeDate = queryExchangeDate != null ? Ext.GetDateTime(queryExchangeDate.First()) : null;
            DateTime? endExchangeDate = queryExchangeDate != null ? Ext.GetDateTime(queryExchangeDate.Last()) : null;
            var data = await _db.Queryable<ExchangeRateEntity>()
                .WhereIF(queryExchangeDate != null, p => p.ExchangeDate >= new DateTime(startExchangeDate.ToDate().Year, startExchangeDate.ToDate().Month, startExchangeDate.ToDate().Day, 0, 0, 0))
                .WhereIF(queryExchangeDate != null, p => p.ExchangeDate <= new DateTime(endExchangeDate.ToDate().Year, endExchangeDate.ToDate().Month, endExchangeDate.ToDate().Day, 23, 59, 59))
                .WhereIF(!string.IsNullOrEmpty(input.from), p => p.From.Contains(input.from))
                .WhereIF(!string.IsNullOrEmpty(input.to), p => p.To.Contains(input.to))
                .Select(it=> new ExchangeRateListOutput
                {
                    id = it.Id,
                    exchangeDate=it.ExchangeDate,
                    from=it.From,
                    to=it.To,
                    rate=it.Rate,
                }).MergeTable().OrderBy(sidx+" "+input.sort).ToPagedListAsync(input.currentPage, input.pageSize);
                return PageResult<ExchangeRateListOutput>.SqlSugarPageResult(data);
        }

        /// <summary>
        /// 新建Demo
        /// </summary>
        /// <param name="input">参数</param>
        /// <returns></returns>
        [HttpPost("")]
        public async Task Create([FromBody] ExchangeRateCrInput input)
        {
            _logger.LogInformation("新建Demo,参数:{0}", input.ToJson());
            var userInfo = await _userManager.GetUserInfo();
            var entity = input.Adapt<ExchangeRateEntity>();
            entity.Creator();
            var isOk = await _db.Insertable(entity).IgnoreColumns(ignoreNullColumn: true).ExecuteCommandAsync();
            if (!(isOk > 0)) throw Mall3sException.Oh(ErrorCode.COM1000);
        }

        /// <summary>
		/// 获取Demo无分页列表
		/// </summary>
		/// <param name="input">请求参数</param>
		/// <returns></returns>
        [NonAction]
        public async Task<dynamic> GetNoPagingList([FromQuery] ExchangeRateListQueryInput input)
        {
            _logger.LogInformation("获取Demo无分页列表,参数:{0}", input.ToJson());
            var sidx = input.sidx == null ? "id" : input.sidx;
            List<string> queryExchangeDate = input.exchangeDate != null ? input.exchangeDate.Split(',').ToObeject<List<string>>() : null;
            DateTime? startExchangeDate = queryExchangeDate != null ? Ext.GetDateTime(queryExchangeDate.First()) : null;
            DateTime? endExchangeDate = queryExchangeDate != null ? Ext.GetDateTime(queryExchangeDate.Last()) : null;
            var data = await _db.Queryable<ExchangeRateEntity>()
                .WhereIF(queryExchangeDate != null, p => p.ExchangeDate >= new DateTime(startExchangeDate.ToDate().Year, startExchangeDate.ToDate().Month, startExchangeDate.ToDate().Day, 0, 0, 0))
                .WhereIF(queryExchangeDate != null, p => p.ExchangeDate <= new DateTime(endExchangeDate.ToDate().Year, endExchangeDate.ToDate().Month, endExchangeDate.ToDate().Day, 23, 59, 59))
                .WhereIF(!string.IsNullOrEmpty(input.from), p => p.From.Contains(input.from))
                .WhereIF(!string.IsNullOrEmpty(input.to), p => p.To.Contains(input.to))
                .Select(it=> new ExchangeRateListOutput
                {
                    id = it.Id,
                    exchangeDate=it.ExchangeDate,
                    from=it.From,
                    to=it.To,
                    rate=it.Rate,
                }).MergeTable().OrderBy(sidx+" "+input.sort).ToListAsync();
                return data;
        }
        ....
}

image-20230308230308903

启动项目。

image-20230308230340587

上次更新: 3/8/2023, 4:23:32 PM