Dm_ApplyDemoService.cs 7.0 KB

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