using SJZY.Expand.ABP.Core.Common; using SJZY.Track.Application.Dtos.Demo; using SJZY.Track.Domain.Aggregates.DemoAggregate; using SJZY.Track.Domain.Dtos.Demo; namespace SJZY.Track.Application.Services.Demo; /// /// 接口请求完整样例 /// [ApiExplorerSettings(GroupName = "Demo")] public class InterFaceDemoService : ApplicationService { #region 构造函数 private readonly IDemoRepository _demoRepository; public InterFaceDemoService(IDemoRepository demoRepository) { _demoRepository = demoRepository; } #endregion #region 增删改 /// /// 增删改 /// /// /// [HttpPost("InterFace/Edit")] public async Task Edit(DemoInput input) { var res = new LongIdBaseDto(); if (input.Option == OptionType.新增) { var entity = ObjectMapper.Map(input); res.Id = await _demoRepository.InsertReturnIdentityAsync(entity); } else if (input.Option == OptionType.修改 || input.Option == OptionType.删除) { var demoInfo = await _demoRepository.GetById1(input.Id); if (demoInfo == null) { //校验数据是否存在... throw new BusinessException(message: "未找到指定编号下的数据"); } res.Id = demoInfo.Id; if (input.Option == OptionType.删除) { //await _demoRepository.DeleteAsync(demoInfo); //真删除 //软删除 demoInfo.IsDeleted = true; await _demoRepository.UpdateAsync(demoInfo); } else { var entity = ObjectMapper.Map(input, demoInfo); await _demoRepository.UpdateAsync(entity); } } return res; } #endregion #region 局部更新最佳实践 /// /// 局部更新最佳实践 /// /// /// /// [HttpPost("InterFace/UpdatePartColumns")] public async Task UpdatePartColumns(DemoInput input) { var demoInfo = await _demoRepository.GetById1(input.Id); if (demoInfo == null) { //校验数据是否存在... throw new BusinessException(message: "未找到指定编号下的数据"); } //更新同时忽略某几项参数 await _demoRepository.UpdatePartColumns(demoInfo); return new IdBaseDto() { Id = input.Id }; } #endregion #region 分页查询接口 /// /// 分页查询 /// /// /// [HttpPost("InterFace/GetListByPage")] public async Task> GetListByPage(GetDemoListByPageInput input) { //分页时返回值统一用 PageResultDto<> 类型 var list = await _demoRepository.GetListByPage(input.PageSize, input.PageIndex, input.Name); var res = ObjectMapper.Map, UnifyPageResultDto>(list); return res; } #endregion #region 入参转换 /// /// 入参转换 /// /// /// [HttpPost("InterFace/InputToValueObject")] public async Task> InputToValueObject(GetDemoListByPageInput input) { var obj = ObjectMapper.Map(input); var list = await _demoRepository.InputToValueObject(obj); var res = ObjectMapper.Map, List>(list); return res; } #endregion #region 原生sql /// /// 原生sql /// /// /// [HttpPost("InterFace/OriginalSql")] public async Task> OriginalSql(DemoValueObject obj) { var list = await _demoRepository.OriginalSql(obj); return list; } #endregion #region 自定义返回结果格式 /// /// 自定义返回结果格式 /// /// /// [HttpPost("Demo/CustomerResult")] [CustomerResult] public async Task GetListAsync() { /* 说明: 理论上我们有全公司级别的返回值约定,不管是前端调后端,还是后端微服务间的调用,都应完全遵循该规范。 但不排除有些特殊情况下,必须要返回自定义格式的场景。 */ var res = new MyCustomerResultOutput(); res.Code = "200"; res.Message = "这是一个自定义返回结果"; return res; } #endregion #region 约定类型下返回null /// /// 约定类型下返回null /// /// /// [HttpPost("Demo/ReturnNull")] public async Task ReturnNull() { MyCustomerResultOutput res = null; return res; } #endregion #region /// /// 没有返回值 /// /// /// [HttpPost("Demo/WithoutReturnObject")] public async Task WithoutReturnObject() { return null; } #endregion #region 主从关系实体存储 /// /// 主从关系实体存储 /// /// /// [HttpPost("InterFace/EntityRelationSave")] public async Task EntityRelationSave(DemoDetailSaveInput input) { var obj = ObjectMapper.Map(input); var res = await _demoRepository.EntityRelationSave(obj); return new UnifyResultDto(res); } #endregion #region 数据缓存 /// /// 数据缓存 /// /// /// [HttpPost("InterFace/GetDataCache")] public async Task GetDataCache(IdBaseDto input) { var res = await _demoRepository.GetDataCache(input.Id); return res; } #endregion //[HttpPost("InterFace/AAAA")] //public async Task AAAA() //{ // var result = await _httpClientProxy.Service.GetSystemTokenAsync("Track"); // return result; //} }