Dm_ApplyDemoService.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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. 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()
  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 = "Delete")]
  89. public async Task Delete(DeleteDm_ApplyDemoInput input)
  90. {
  91. var entity = await _rep.GetFirstAsync(u => u.Id == input.Id) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
  92. await _rep.FakeDeleteAsync(entity); //假删除
  93. //await _rep.DeleteAsync(entity); //真删除
  94. }
  95. /// <summary>
  96. /// 更新申请示例
  97. /// </summary>
  98. /// <param name="input"></param>
  99. /// <returns></returns>
  100. [HttpPost]
  101. [ApiDescriptionSettings(Name = "Update")]
  102. public async Task Update(UpdateDm_ApplyDemoInput input)
  103. {
  104. var entity = input.Adapt<Dm_ApplyDemo>();
  105. await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
  106. }
  107. /// <summary>
  108. /// 获取申请示例
  109. /// </summary>
  110. /// <param name="input"></param>
  111. /// <returns></returns>
  112. [HttpGet]
  113. [ApiDescriptionSettings(Name = "Detail")]
  114. public async Task<Dm_ApplyDemo> Detail([FromQuery] QueryByIdDm_ApplyDemoInput input)
  115. {
  116. return await _rep.GetFirstAsync(u => u.Id == input.Id);
  117. }
  118. /// <summary>
  119. /// 获取申请示例列表
  120. /// </summary>
  121. /// <param name="input"></param>
  122. /// <returns></returns>
  123. [HttpGet]
  124. [HttpPost]
  125. [ApiDescriptionSettings(Name = "List")]
  126. public async Task<List<Dm_ApplyDemoOutput>> List([FromQuery] Dm_ApplyDemoInput input)
  127. {
  128. ISugarQueryable<Dm_ApplyDemoOutput> query = Query(input).Select<Dm_ApplyDemoOutput>();
  129. return await query.Select<Dm_ApplyDemoOutput>().ToListAsync();
  130. }
  131. /// <summary>
  132. /// 导入数据
  133. /// </summary>
  134. /// <param name="file">Excel文件</param>
  135. /// <returns></returns>
  136. [AllowAnonymous]
  137. public async Task<AdminResult<string>> Import([Required] IFormFile file)
  138. {
  139. if (file == null) throw Oops.Oh(ErrorCodeEnum.D8000);
  140. var Importer = new Magicodes.ExporterAndImporter.Excel.ExcelImporter();
  141. var importResult = await CommonUtil.ImportExcelData<Dm_ApplyDemoInport>(file);
  142. string message=string.Empty;
  143. if (importResult != null)
  144. {
  145. //TODO 自定义校验
  146. int errorCount = 0;
  147. //导入数据转为对象实例
  148. var ysLs = new List<Dm_ApplyDemo>();
  149. var ls = CommonUtil.ParseList<Dm_ApplyDemoInport, Dm_ApplyDemo>(importResult, (source, target) =>
  150. {
  151. if (target.Id == 0)
  152. {
  153. return target;
  154. }
  155. else
  156. {
  157. _rep.Context.Updateable(target).IgnoreColumns(true).ExecuteCommand();
  158. return null;
  159. }
  160. });
  161. if (ls.Count > 0)
  162. {
  163. await _rep.Context.Insertable(ls).UseParameter().ExecuteCommandAsync();
  164. }
  165. _rep.Context.Ado.CommitTran();
  166. message = $"导入总数:{importResult.Count},导入成功:{importResult.Count- errorCount},导入失败:{ errorCount}。";
  167. }
  168. var ret = new AdminResult<string>()
  169. {
  170. Code = 200,
  171. Type = "success",
  172. Message = message,
  173. Result = message
  174. };
  175. return ret;
  176. }
  177. }