CityCghjTjpgrwRepository.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. using Microsoft.AspNetCore.Http;
  2. using QM.KJGH.CGGL.IRepository;
  3. using QM.KJGH.CGGL.Model.QxCghj;
  4. using QM.KJGH.Model.Enums;
  5. using QM.KJGH.Model.KJGH;
  6. using QM.OrmSqlSugar;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Data;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Reflection;
  13. using System.Threading.Tasks;
  14. using WS;
  15. using WS.AutoMapper;
  16. using WS.IO;
  17. using WS.IO.Office;
  18. using WS.IO.Upload;
  19. using WS.IO.Zip;
  20. using WS.Orm;
  21. namespace QM.KJGH.CGGL.Repositories
  22. {
  23. /// <summary>
  24. /// 市
  25. /// </summary>
  26. public class CityCghjTjpgrwRepository : SqlSugarRepository<CityCghjTjpgrw>, ICityCghjTjpgrwRepository
  27. {
  28. /// <summary>
  29. /// 分页查询
  30. /// </summary>
  31. /// <param name="input"></param>
  32. /// <returns></returns>
  33. public async Task<PageData> GetPage(CghjQzTjzbPage input)
  34. {
  35. EnumCghjQxtjpgStatus rwzt = EnumCghjQxtjpgStatus.全部;
  36. if (!string.IsNullOrWhiteSpace(input.ZTBM))
  37. {
  38. try
  39. {
  40. rwzt = input.ZTBM.ToInt().ToEnum<EnumCghjQxtjpgStatus>();
  41. }
  42. catch (Exception ex)
  43. {
  44. throw new UseMassageException("状态编码错误");
  45. }
  46. }
  47. var query = DbClient().Queryable<CityCghjTjpgrw>();
  48. query.WhereIF(!string.IsNullOrWhiteSpace(input.XZQDM), t => t.XZQDM == input.XZQDM);
  49. query.WhereIF(!string.IsNullOrWhiteSpace(input.SBNF), t => t.SBNF.ToString() == input.SBNF);
  50. query.WhereIF(rwzt != EnumCghjQxtjpgStatus.全部, t => t.ZTBM == rwzt);
  51. var page = await query.OrderBy(t => t.ZTBM).ToPageAsync(input.page, input.limit);
  52. return page;
  53. }
  54. /// <summary>
  55. /// 任务同步更新(旗县)
  56. /// </summary>
  57. /// <returns></returns>
  58. public async Task<bool> TaskUpdate(List<CghjTjpgrwView> list)
  59. {
  60. if (list == null)
  61. throw new UseMassageException("空数据");
  62. List<CityCghjTjpgrw> update = new List<CityCghjTjpgrw>();
  63. List<CityCghjTjpgrw> add = new List<CityCghjTjpgrw>();
  64. var gxid = list.Select(t => t.id);
  65. var outlist = await GetListAsync(t => gxid.Contains(t.BSM));
  66. List<CghjQxtjpgrwsc> addNode = new List<CghjQxtjpgrwsc>();
  67. foreach (var item in list)
  68. {
  69. var outmodel = outlist.FirstOrDefault(t => t.BSM == item.id);
  70. var newmodel = new CityCghjTjpgrw()
  71. {
  72. BSM = item.id,
  73. XZQDM = item.divisionCode,
  74. XZQMC = item.divisionName,
  75. SBRQ = string.IsNullOrWhiteSpace(item.reportDate) ? null : DateTime.ParseExact(item.reportDate, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture),
  76. SBJSRQ = DateTime.ParseExact(item.reportEndDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture),
  77. SBNF = item.reportYear.ToInt(),
  78. ZTBM = item.status.ToInt().ToEnum<EnumCghjQxtjpgStatus>(),
  79. RWMC = $"{item.divisionName}{item.reportYear}体检评估填报",
  80. ZTMC = item.statusName
  81. };
  82. if (outmodel == null)
  83. {
  84. add.Add(newmodel);
  85. }
  86. else
  87. {
  88. update.Add(newmodel);
  89. }
  90. if(item.auditNodes != null)
  91. {
  92. addNode.AddRange(item.auditNodes.Select(t => {
  93. return new CghjQxtjpgrwsc()
  94. {
  95. BSM = Guid.NewGuid().ToStringN(),
  96. RWBSM = newmodel.BSM,
  97. SBRQ = t.auditTime,
  98. SPJG = t.nodeName,
  99. ZTBM = t.status.ToInt(),
  100. ZTMC = t.statusName
  101. };
  102. }));
  103. }
  104. }
  105. try
  106. {
  107. Db.BeginTran();
  108. if (add.Count > 0) await Db.Insertable(add).ExecuteCommandAsync();
  109. if (update.Count > 0) await Db.Updateable(update).ExecuteCommandAsync();
  110. if (addNode.Count > 0) await Db.Updateable(addNode).ExecuteCommandAsync();
  111. Db.CommitTran();
  112. }
  113. catch (Exception ex)
  114. {
  115. Db.RollbackTran();
  116. WS.Log.RunLog.Error(ex);
  117. throw new UseMassageException(ex.Message);
  118. }
  119. return true;
  120. }
  121. /// <summary>
  122. /// 上报体检评估任务结果(旗县)
  123. /// </summary>
  124. /// <returns></returns>
  125. public async Task<string> Upload(UploadFile zipFile, string id)
  126. {
  127. var rwModel = await GetAsync(t => t.BSM == id);
  128. if (rwModel == null)
  129. throw new UseMassageException("任务不存在");
  130. if (rwModel.ZTBM == EnumCghjQxtjpgStatus.待审查 || rwModel.ZTBM == EnumCghjQxtjpgStatus.审查通过)
  131. throw new UseMassageException($"当前任务已处于{rwModel.ZTBM.Description()}状态,不允许进行修改");
  132. //解压
  133. var cgpath = WinRAR.UnRarOrZip(zipFile.FullPath, true);
  134. //检查Excel
  135. List<string> files = new List<string>();
  136. GetFiles(cgpath, files);
  137. WS.Log.RunLog.Info($"规划目标表开始分析。。。");
  138. #region 规划目标表
  139. var ghmb = files.FirstOrDefault(t => t.Contains("规划目标表.xls"));
  140. if (string.IsNullOrWhiteSpace(ghmb))
  141. throw new UseMassageException("文件“规划目标表.xls”必须上传");
  142. var tableGhmb = ExcelHelper.ReadExcelToDataTable(ghmb, true);
  143. //头
  144. var colDic = typeof(CityCghjTjghmbb).GetProperties()
  145. .Where(t => t.GetCustomAttributes(typeof(ExportAttribute), false).FirstOrDefault() != null)
  146. .ToDictionary(t => (t.GetCustomAttribute(typeof(ExportAttribute)) as ExportAttribute).name, t => t.Name);
  147. foreach (DataColumn col in tableGhmb.Columns)
  148. {
  149. col.ColumnName = colDic[col.ColumnName.Trim()];
  150. }
  151. List<CityCghjTjghmbb> listGhmb = tableGhmb.ToList<CityCghjTjghmbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
  152. #endregion
  153. #region 评估指标表
  154. WS.Log.RunLog.Info($"评估指标表开始分析。。。");
  155. var pbzb = files.FirstOrDefault(t => t.Contains("评估指标表.xls"));
  156. if (string.IsNullOrWhiteSpace(pbzb))
  157. throw new UseMassageException("文件“评估指标表.xls”必须上传");
  158. var tablePbzb = ExcelHelper.ReadExcelToDataTable(pbzb, true);
  159. var colPbzb = typeof(CityCghjTjbgzbb).GetProperties()
  160. .Where(t => t.GetCustomAttributes(typeof(ExportAttribute), false).FirstOrDefault() != null)
  161. .ToDictionary(t => (t.GetCustomAttribute(typeof(ExportAttribute)) as ExportAttribute).name, t => t.Name);
  162. foreach (DataColumn col in tablePbzb.Columns)
  163. {
  164. col.ColumnName = colPbzb[col.ColumnName.Trim()];
  165. }
  166. List<CityCghjTjbgzbb> listPbzb = tablePbzb.ToList<CityCghjTjbgzbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
  167. #endregion
  168. WS.Log.RunLog.Info($"Excel 分析完成。。。");
  169. //评估指标表
  170. var zblist = await Db.Queryable<CghjTjzb>().ToListAsync();//指标验证
  171. List<string> errorMsg = new List<string>();
  172. List<string> errorMsgPg = new List<string>();
  173. List<CityCghjTjghmbb> cgbmAdds = new List<CityCghjTjghmbb>();
  174. List<CityCghjTjbgzbb> pgzbAdds = new List<CityCghjTjbgzbb>();
  175. foreach (var item in zblist)
  176. {
  177. //规划目标表
  178. var cgmb = listGhmb.FirstOrDefault(t => t.ZBMC.Trim() == item.ZBMC && t.XZQDM == rwModel.XZQDM);
  179. if (cgmb == null) errorMsg.Add(item.ZBMC);
  180. else
  181. {
  182. cgmb.BSM = Guid.NewGuid().ToString("N");
  183. cgmb.ZBBH = item.ZBBH;
  184. cgmb.ZBLX = item.ZBLX;
  185. cgmb.XZQMC = rwModel.XZQMC;
  186. cgmb.RWBSM = rwModel.BSM;
  187. cgbmAdds.Add(cgmb);
  188. }
  189. //评估指标表
  190. var pgzb = listPbzb.FirstOrDefault(t => t.ZBMC.Trim() == item.ZBMC && t.XZQDM == rwModel.XZQDM);
  191. if (pgzb == null) errorMsgPg.Add(item.ZBMC);
  192. else
  193. {
  194. pgzb.BSM = Guid.NewGuid().ToString("N");
  195. pgzb.ZBBH = item.ZBBH;
  196. pgzb.ZBLX = item.ZBLX;
  197. pgzb.XZQMC = rwModel.XZQMC;
  198. pgzb.RWBSM = rwModel.BSM;
  199. pgzbAdds.Add(pgzb);
  200. }
  201. }
  202. List<string> msg = new List<string>();
  203. if (errorMsg.Count > 0)
  204. msg.Add($"规划目标表中缺失指标:{errorMsg.Join("、")}");
  205. if (errorMsgPg.Count > 0)
  206. msg.Add($"评估指标表中缺失指标:{errorMsgPg.Join("、")}");
  207. if (msg.Count > 0)
  208. {
  209. throw new UseMassageException(msg.Join(";"));
  210. }
  211. try
  212. {
  213. Db.BeginTran();
  214. rwModel.SBRQ = DateTime.Now;
  215. rwModel.ZTBM = EnumCghjQxtjpgStatus.待审查;
  216. rwModel.ZTMC = EnumCghjQxtjpgStatus.待审查.Description();
  217. rwModel.CGWJ = zipFile.Path;
  218. await Db.Updateable(rwModel).ExecuteCommandAsync();
  219. await Db.Deleteable<CityCghjTjghmbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
  220. await Db.Deleteable<CityCghjTjbgzbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
  221. if (cgbmAdds.Count > 0) await Db.Insertable(cgbmAdds).ExecuteCommandAsync();
  222. if (pgzbAdds.Count > 0) await Db.Insertable(pgzbAdds).ExecuteCommandAsync();
  223. Db.CommitTran();
  224. }
  225. catch (Exception ex)
  226. {
  227. Db.RollbackTran();
  228. WS.Log.RunLog.Error(ex);
  229. throw new UseMassageException(ex.Message);
  230. }
  231. return zipFile.FullPath;
  232. }
  233. /// <summary>
  234. /// 将指定目录内的所有文件存入容器
  235. /// </summary>
  236. /// <param name="dir"></param>
  237. /// <param name="files"></param>
  238. private List<string> GetFiles(string dir, List<string> files = null)
  239. {
  240. if (files == null) files = new List<string>();
  241. files.AddRange(Directory.GetFiles(dir));
  242. foreach (var item in Directory.GetDirectories(dir))
  243. GetFiles(item, files);
  244. return files;
  245. }
  246. }
  247. }