Dm_ApplyDemoService.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. using Admin.NET.Core.Service;
  2. using Admin.NET.Application.Entity;
  3. using Microsoft.AspNetCore.Http;
  4. using Magicodes.ExporterAndImporter.Core.Models;
  5. using Furion.Logging;
  6. using Yitter.IdGenerator;
  7. namespace Admin.NET.Application;
  8. /// <summary>
  9. /// 申请示例服务
  10. /// </summary>
  11. [ApiDescriptionSettings(ApplicationConst.GroupName, Order = 100)]
  12. public class Dm_ApplyDemoService : IDynamicApiController, ITransient
  13. {
  14. private readonly SqlSugarRepository<Dm_ApplyDemo> _rep;
  15. public Dm_ApplyDemoService(SqlSugarRepository<Dm_ApplyDemo> rep)
  16. {
  17. _rep = rep;
  18. }
  19. /// <summary>
  20. /// 分页查询申请示例
  21. /// </summary>
  22. /// <param name="input"></param>
  23. /// <returns></returns>
  24. [HttpPost]
  25. [ApiDescriptionSettings(Name = "Page")]
  26. public async Task<SqlSugarPagedList<Dm_ApplyDemoOutput>> Page(Dm_ApplyDemoInput input)
  27. {
  28. ISugarQueryable<Dm_ApplyDemoOutput> query = Query(input).Select<Dm_ApplyDemoOutput>();
  29. return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
  30. }
  31. /// <summary>
  32. /// 查询
  33. /// </summary>
  34. /// <param name="input"></param>
  35. /// <returns></returns>
  36. private ISugarQueryable<Dm_ApplyDemo> Query(Dm_ApplyDemoInput input)
  37. {
  38. var query = _rep.AsQueryable().Where(m=>!m.IsDelete)
  39. .WhereIF(!string.IsNullOrWhiteSpace(input.SearchKey), u =>
  40. u.ApplyNO.Contains(input.SearchKey.Trim())
  41. || u.Remark.Contains(input.SearchKey.Trim())
  42. )
  43. .WhereIF(input.OrgType > 0, u => u.OrgType == input.OrgType)
  44. .WhereIF(!string.IsNullOrWhiteSpace(input.ApplyNO), u => u.ApplyNO.Contains(input.ApplyNO.Trim()))
  45. .WhereIF(!string.IsNullOrWhiteSpace(input.Remark), u => u.Remark.Contains(input.Remark.Trim()))
  46. ;
  47. if (input.ApplicatDateRange != null && input.ApplicatDateRange.Count > 0)
  48. {
  49. DateTime? start = input.ApplicatDateRange[0];
  50. query = query.WhereIF(start.HasValue, u => u.ApplicatDate > start);
  51. if (input.ApplicatDateRange.Count > 1 && input.ApplicatDateRange[1].HasValue)
  52. {
  53. var end = input.ApplicatDateRange[1].Value.AddDays(1);
  54. query = query.Where(u => u.ApplicatDate < end);
  55. }
  56. }
  57. return query;
  58. }
  59. /// <summary>
  60. /// 导出查询数据
  61. /// </summary>
  62. /// <returns></returns>
  63. [HttpPost]
  64. public async Task<IActionResult> Export(Dm_ApplyDemoInput input)
  65. {
  66. //如果想速度更快,推荐使用存储过程查询导出;如果想自定义导出样式,推荐使用模板。
  67. return await CommonUtil.ExportExcelData<Dm_ApplyDemo, Dm_ApplyDemoInport>(Query(input));
  68. }
  69. /// <summary>
  70. /// 增加申请示例
  71. /// </summary>
  72. /// <param name="input"></param>
  73. /// <returns></returns>
  74. [HttpPost]
  75. [ApiDescriptionSettings(Name = "Add")]
  76. public async Task<long> Add(AddDm_ApplyDemoInput input)
  77. {
  78. var entity = input.Adapt<Dm_ApplyDemo>();
  79. await _rep.InsertAsync(entity);
  80. return entity.Id;
  81. }
  82. /// <summary>
  83. /// 批量增加申请示例
  84. /// </summary>
  85. /// <param name="input"></param>
  86. /// <returns></returns>
  87. [HttpPost]
  88. [ApiDescriptionSettings(Name = "PatchAdd")]
  89. public async Task<List<PathAddApplyDemoItem>> PatchAdd(List<PathAddApplyDemoItem> input)
  90. {
  91. foreach (var item in input)
  92. {
  93. var entity = item.Adapt<Dm_ApplyDemo>();
  94. entity.Id = YitIdHelper.NextId();
  95. await _rep.InsertAsync(entity);
  96. item.Id= entity.Id;
  97. }
  98. return input;
  99. }
  100. /// <summary>
  101. /// 删除申请示例
  102. /// </summary>
  103. /// <param name="input"></param>
  104. /// <returns></returns>
  105. [HttpPost]
  106. [ApiDescriptionSettings(Name = "Delete")]
  107. public async Task Delete(DeleteDm_ApplyDemoInput input)
  108. {
  109. var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
  110. await _rep.FakeDeleteAsync(entity); //假删除
  111. //await _rep.DeleteAsync(entity); //真删除
  112. }
  113. /// <summary>
  114. /// 更新申请示例
  115. /// </summary>
  116. /// <param name="input"></param>
  117. /// <returns></returns>
  118. [HttpPost]
  119. [ApiDescriptionSettings(Name = "Update")]
  120. public async Task Update(UpdateDm_ApplyDemoInput input)
  121. {
  122. var entity = input.Adapt<Dm_ApplyDemo>();
  123. await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
  124. }
  125. /// <summary>
  126. /// 获取申请示例
  127. /// </summary>
  128. /// <param name="input"></param>
  129. /// <returns></returns>
  130. [HttpGet]
  131. [ApiDescriptionSettings(Name = "Detail")]
  132. public async Task<Dm_ApplyDemo> Detail([FromQuery] QueryByIdDm_ApplyDemoInput input)
  133. {
  134. return await _rep.GetFirstAsync(u => u.Id == input.Id);
  135. }
  136. /// <summary>
  137. /// 获取申请示例列表
  138. /// </summary>
  139. /// <param name="input"></param>
  140. /// <returns></returns>
  141. [HttpGet]
  142. [HttpPost]
  143. [ApiDescriptionSettings(Name = "List")]
  144. public async Task<List<Dm_ApplyDemoOutput>> List([FromQuery] Dm_ApplyDemoInput input)
  145. {
  146. ISugarQueryable<Dm_ApplyDemoOutput> query = Query(input).Select<Dm_ApplyDemoOutput>();
  147. return await query.Select<Dm_ApplyDemoOutput>().ToListAsync();
  148. }
  149. /// <summary>
  150. /// 导入数据
  151. /// </summary>
  152. /// <param name="file">Excel文件</param>
  153. /// <returns></returns>
  154. [AllowAnonymous]
  155. public async Task<AdminResult<string>> Import([Required] IFormFile file)
  156. {
  157. if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000);
  158. var Importer = new Magicodes.ExporterAndImporter.Excel.ExcelImporter();
  159. var importResult = await CommonUtil.ImportExcelData<Dm_ApplyDemoInport>(file);
  160. string message=string.Empty;
  161. if (importResult != null)
  162. {
  163. //TODO 自定义校验
  164. int errorCount = 0;
  165. //导入数据转为对象实例
  166. var ysLs = new List<Dm_ApplyDemo>();
  167. var ls = CommonUtil.ParseList<Dm_ApplyDemoInport, Dm_ApplyDemo>(importResult, (source, target) =>
  168. {
  169. if (target.Id == 0)
  170. {
  171. return target;
  172. }
  173. else
  174. {
  175. _rep.Context.Updateable(target).IgnoreColumns(true).ExecuteCommand();
  176. return null;
  177. }
  178. });
  179. if (ls.Count > 0)
  180. {
  181. await _rep.Context.Insertable(ls).UseParameter().ExecuteCommandAsync();
  182. }
  183. _rep.Context.Ado.CommitTran();
  184. message = $"导入总数:{importResult.Count},导入成功:{importResult.Count- errorCount},导入失败:{ errorCount}。";
  185. }
  186. var ret = new AdminResult<string>()
  187. {
  188. Code = 200,
  189. Type = "success",
  190. Message = message,
  191. Result = message
  192. };
  193. return ret;
  194. }
  195. }