123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- using Microsoft.AspNetCore.Http;
- using QM.KJGH.CGGL.IRepository;
- using QM.KJGH.CGGL.Model.QxCghj;
- using QM.KJGH.Model.Enums;
- using QM.KJGH.Model.KJGH;
- using QM.OrmSqlSugar;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.IO;
- using System.Linq;
- using System.Reflection;
- using System.Threading.Tasks;
- using WS;
- using WS.AutoMapper;
- using WS.IO;
- using WS.IO.Office;
- using WS.IO.Upload;
- using WS.IO.Zip;
- using WS.Orm;
- namespace QM.KJGH.CGGL.Repositories
- {
- /// <summary>
- /// 市
- /// </summary>
- public class CityCghjTjpgrwRepository : SqlSugarRepository<CityCghjTjpgrw>, ICityCghjTjpgrwRepository
- {
- /// <summary>
- /// 分页查询
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- public async Task<PageData> GetPage(CghjQzTjzbPage input)
- {
- EnumCghjQxtjpgStatus rwzt = EnumCghjQxtjpgStatus.全部;
- if (!string.IsNullOrWhiteSpace(input.ZTBM))
- {
- try
- {
- rwzt = input.ZTBM.ToInt().ToEnum<EnumCghjQxtjpgStatus>();
- }
- catch (Exception ex)
- {
- throw new UseMassageException("状态编码错误");
- }
- }
- var query = DbClient().Queryable<CityCghjTjpgrw>();
- query.WhereIF(!string.IsNullOrWhiteSpace(input.XZQDM), t => t.XZQDM == input.XZQDM);
- query.WhereIF(!string.IsNullOrWhiteSpace(input.SBNF), t => t.SBNF.ToString() == input.SBNF);
- query.WhereIF(rwzt != EnumCghjQxtjpgStatus.全部, t => t.ZTBM == rwzt);
- var page = await query.OrderBy(t => t.ZTBM).ToPageAsync(input.page, input.limit);
- return page;
- }
- /// <summary>
- /// 任务同步更新(旗县)
- /// </summary>
- /// <returns></returns>
- public async Task<bool> TaskUpdate(List<CghjTjpgrwView> list)
- {
- if (list == null)
- throw new UseMassageException("空数据");
- List<CityCghjTjpgrw> update = new List<CityCghjTjpgrw>();
- List<CityCghjTjpgrw> add = new List<CityCghjTjpgrw>();
- var gxid = list.Select(t => t.id);
- var outlist = await GetListAsync(t => gxid.Contains(t.BSM));
- List<CghjQxtjpgrwsc> addNode = new List<CghjQxtjpgrwsc>();
- foreach (var item in list)
- {
- var outmodel = outlist.FirstOrDefault(t => t.BSM == item.id);
- var newmodel = new CityCghjTjpgrw()
- {
- BSM = item.id,
- XZQDM = item.divisionCode,
- XZQMC = item.divisionName,
- SBRQ = string.IsNullOrWhiteSpace(item.reportDate) ? null : DateTime.ParseExact(item.reportDate, "yyyy-MM-dd HH:mm:ss", System.Globalization.CultureInfo.CurrentCulture),
- SBJSRQ = DateTime.ParseExact(item.reportEndDate, "yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture),
- SBNF = item.reportYear.ToInt(),
- ZTBM = item.status.ToInt().ToEnum<EnumCghjQxtjpgStatus>(),
- RWMC = $"{item.divisionName}{item.reportYear}体检评估填报",
- ZTMC = item.statusName
- };
- if (outmodel == null)
- {
- add.Add(newmodel);
- }
- else
- {
- update.Add(newmodel);
- }
- if(item.auditNodes != null)
- {
- addNode.AddRange(item.auditNodes.Select(t => {
- return new CghjQxtjpgrwsc()
- {
- BSM = Guid.NewGuid().ToStringN(),
- RWBSM = newmodel.BSM,
- SBRQ = t.auditTime,
- SPJG = t.nodeName,
- ZTBM = t.status.ToInt(),
- ZTMC = t.statusName
- };
- }));
- }
- }
- try
- {
- Db.BeginTran();
- if (add.Count > 0) await Db.Insertable(add).ExecuteCommandAsync();
- if (update.Count > 0) await Db.Updateable(update).ExecuteCommandAsync();
- if (addNode.Count > 0) await Db.Updateable(addNode).ExecuteCommandAsync();
- Db.CommitTran();
- }
- catch (Exception ex)
- {
- Db.RollbackTran();
- WS.Log.RunLog.Error(ex);
- throw new UseMassageException(ex.Message);
- }
- return true;
- }
- /// <summary>
- /// 上报体检评估任务结果(旗县)
- /// </summary>
- /// <returns></returns>
- public async Task<string> Upload(UploadFile zipFile, string id)
- {
- var rwModel = await GetAsync(t => t.BSM == id);
- if (rwModel == null)
- throw new UseMassageException("任务不存在");
- if (rwModel.ZTBM == EnumCghjQxtjpgStatus.待审查 || rwModel.ZTBM == EnumCghjQxtjpgStatus.审查通过)
- throw new UseMassageException($"当前任务已处于{rwModel.ZTBM.Description()}状态,不允许进行修改");
- //解压
- var cgpath = WinRAR.UnRarOrZip(zipFile.FullPath, true);
- //检查Excel
- List<string> files = new List<string>();
- GetFiles(cgpath, files);
- WS.Log.RunLog.Info($"规划目标表开始分析。。。");
- #region 规划目标表
- var ghmb = files.FirstOrDefault(t => t.Contains("规划目标表.xls"));
- if (string.IsNullOrWhiteSpace(ghmb))
- throw new UseMassageException("文件“规划目标表.xls”必须上传");
- var tableGhmb = ExcelHelper.ReadExcelToDataTable(ghmb, true);
- //头
- var colDic = typeof(CityCghjTjghmbb).GetProperties()
- .Where(t => t.GetCustomAttributes(typeof(ExportAttribute), false).FirstOrDefault() != null)
- .ToDictionary(t => (t.GetCustomAttribute(typeof(ExportAttribute)) as ExportAttribute).name, t => t.Name);
- foreach (DataColumn col in tableGhmb.Columns)
- {
- col.ColumnName = colDic[col.ColumnName.Trim()];
- }
- List<CityCghjTjghmbb> listGhmb = tableGhmb.ToList<CityCghjTjghmbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
- #endregion
- #region 评估指标表
- WS.Log.RunLog.Info($"评估指标表开始分析。。。");
- var pbzb = files.FirstOrDefault(t => t.Contains("评估指标表.xls"));
- if (string.IsNullOrWhiteSpace(pbzb))
- throw new UseMassageException("文件“评估指标表.xls”必须上传");
- var tablePbzb = ExcelHelper.ReadExcelToDataTable(pbzb, true);
- var colPbzb = typeof(CityCghjTjbgzbb).GetProperties()
- .Where(t => t.GetCustomAttributes(typeof(ExportAttribute), false).FirstOrDefault() != null)
- .ToDictionary(t => (t.GetCustomAttribute(typeof(ExportAttribute)) as ExportAttribute).name, t => t.Name);
- foreach (DataColumn col in tablePbzb.Columns)
- {
- col.ColumnName = colPbzb[col.ColumnName.Trim()];
- }
- List<CityCghjTjbgzbb> listPbzb = tablePbzb.ToList<CityCghjTjbgzbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
- #endregion
- WS.Log.RunLog.Info($"Excel 分析完成。。。");
- //评估指标表
- var zblist = await Db.Queryable<CghjTjzb>().ToListAsync();//指标验证
- List<string> errorMsg = new List<string>();
- List<string> errorMsgPg = new List<string>();
- List<CityCghjTjghmbb> cgbmAdds = new List<CityCghjTjghmbb>();
- List<CityCghjTjbgzbb> pgzbAdds = new List<CityCghjTjbgzbb>();
- foreach (var item in zblist)
- {
- //规划目标表
- var cgmb = listGhmb.FirstOrDefault(t => t.ZBMC.Trim() == item.ZBMC && t.XZQDM == rwModel.XZQDM);
- if (cgmb == null) errorMsg.Add(item.ZBMC);
- else
- {
- cgmb.BSM = Guid.NewGuid().ToString("N");
- cgmb.ZBBH = item.ZBBH;
- cgmb.ZBLX = item.ZBLX;
- cgmb.XZQMC = rwModel.XZQMC;
- cgmb.RWBSM = rwModel.BSM;
- cgbmAdds.Add(cgmb);
- }
- //评估指标表
- var pgzb = listPbzb.FirstOrDefault(t => t.ZBMC.Trim() == item.ZBMC && t.XZQDM == rwModel.XZQDM);
- if (pgzb == null) errorMsgPg.Add(item.ZBMC);
- else
- {
- pgzb.BSM = Guid.NewGuid().ToString("N");
- pgzb.ZBBH = item.ZBBH;
- pgzb.ZBLX = item.ZBLX;
- pgzb.XZQMC = rwModel.XZQMC;
- pgzb.RWBSM = rwModel.BSM;
- pgzbAdds.Add(pgzb);
- }
- }
- List<string> msg = new List<string>();
- if (errorMsg.Count > 0)
- msg.Add($"规划目标表中缺失指标:{errorMsg.Join("、")}");
- if (errorMsgPg.Count > 0)
- msg.Add($"评估指标表中缺失指标:{errorMsgPg.Join("、")}");
- if (msg.Count > 0)
- {
- throw new UseMassageException(msg.Join(";"));
- }
- try
- {
- Db.BeginTran();
- rwModel.SBRQ = DateTime.Now;
- rwModel.ZTBM = EnumCghjQxtjpgStatus.待审查;
- rwModel.ZTMC = EnumCghjQxtjpgStatus.待审查.Description();
- rwModel.CGWJ = zipFile.Path;
- await Db.Updateable(rwModel).ExecuteCommandAsync();
- await Db.Deleteable<CityCghjTjghmbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
- await Db.Deleteable<CityCghjTjbgzbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
- if (cgbmAdds.Count > 0) await Db.Insertable(cgbmAdds).ExecuteCommandAsync();
- if (pgzbAdds.Count > 0) await Db.Insertable(pgzbAdds).ExecuteCommandAsync();
- Db.CommitTran();
- }
- catch (Exception ex)
- {
- Db.RollbackTran();
- WS.Log.RunLog.Error(ex);
- throw new UseMassageException(ex.Message);
- }
- return zipFile.FullPath;
- }
- /// <summary>
- /// 将指定目录内的所有文件存入容器
- /// </summary>
- /// <param name="dir"></param>
- /// <param name="files"></param>
- private List<string> GetFiles(string dir, List<string> files = null)
- {
- if (files == null) files = new List<string>();
- files.AddRange(Directory.GetFiles(dir));
- foreach (var item in Directory.GetDirectories(dir))
- GetFiles(item, files);
- return files;
- }
- }
- }
|