| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- 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 CghjQxtjpgrwRepository : SqlSugarRepository<CghjQxtjpgrw>, ICghjQxtjpgrwRepository
- {
- /// <summary>
- /// 获取体检评估上报任务
- /// </summary>
- /// <returns></returns>
- public async Task<List<CghjQxtjpgrwView>> GetTask(CghjQxtjpgrwQuery input)
- {
- if (input.reportYear != null) input.reportYear = input.reportYear.Where(t => !string.IsNullOrWhiteSpace(t)).ToList();
- EnumCghjQxtjpgStatus rwzt = EnumCghjQxtjpgStatus.全部;
- if (!string.IsNullOrWhiteSpace(input.status))
- {
- try
- {
- rwzt = input.status.ToInt().ToEnum<EnumCghjQxtjpgStatus>();
- }
- catch (Exception)
- {
- throw new UseMassageException("状态编码错误");
- }
- }
- var user = await Db.Queryable<SysOpenUser>().Where(t => t.APPID == input.appid).FirstAsync();
- var list = await Db.Queryable<CghjQxtjpgrw>()
- .Where(t => t.XZQDM == user.XZQDM)
- .WhereIF(input.reportYear != null && input.reportYear.Count > 0, t => input.reportYear.Contains(t.SBNF.ToString()))
- .WhereIF(!string.IsNullOrWhiteSpace(input.status), t => t.ZTBM == rwzt)
- .ToListAsync();
- var rlist = list
- .Select(t =>
- {
- return new CghjQxtjpgrwView()
- {
- id = t.BSM,
- name = t.RWMC,
- divisionCode = t.XZQDM,
- divisionName = t.XZQMC,
- reportDate = t.SBRQ == null ? null : t.SBRQ.Value.ToString("yyyy-MM-dd HH:mm:ss"),
- reportEndDate = t.SBJSRQ.ToString("yyyy-MM-dd"),
- reportYear = t.SBNF == 0 ? "" : t.SBNF.ToString(),
- status = t.ZTBM.GetHashCode().ToString(),
- statusName = t.ZTMC,
- auditNodes = Db.Queryable<CghjQxtjpgrwsc>().Where(t => t.RWBSM == t.BSM)
- .OrderBy(t => t.SBRQ, SqlSugar.OrderByType.Desc).Select(t => new AuditNode()
- {
- auditTime = t.SBRQ,
- statusName = t.ZTMC,
- status = t.ZTBM.ToString(),
- nodeName = t.SPJG,
- }).ToList(),
- };
- })
- .ToList();
- return rlist;
- }
- /// <summary>
- /// 上报体检评估任务结果
- /// </summary>
- /// <returns></returns>
- public async Task<bool> Upload(IFormFile formFile, string id)
- {
- var rwModel = await GetAsync(t => t.BSM == id);
- if (rwModel == null)
- throw new UseMassageException("任务不存在,请先调用【获取体检评估上报任务接口(/api/open/checkup/template)】获取任务");
- if (rwModel.ZTBM == EnumCghjQxtjpgStatus.待审查 || rwModel.ZTBM == EnumCghjQxtjpgStatus.审查通过)
- throw new UseMassageException($"当前任务已处于{rwModel.ZTBM.Description()}状态,不允许进行修改");
- string path = FileManage.Instance.ToFullPath(@$"旗县成果上报\{rwModel.XZQDM}\体检评估");
- var zipFile = FileUpload.SaveFile(formFile, path, $"体检评估报告_{rwModel.XZQDM}_{DateTime.Now.ToTimeStamp()}");
- if (zipFile.Size == 0)
- throw new UseMassageException("文件上传失败(0kb),请重新上传");
- //解压
- var cgpath = WinRAR.UnRarOrZip(zipFile.FullPath);
- //检查Excel
- List<string> files = new List<string>();
- GetFiles(cgpath, files);
- #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(CghjQxtjghmbb).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<CghjQxtjghmbb> listGhmb = tableGhmb.ToList<CghjQxtjghmbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
- #endregion
- #region 评估指标表
- 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(CghjQxtjbgzbb).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<CghjQxtjbgzbb> listPbzb = tablePbzb.ToList<CghjQxtjbgzbb>().Where(t => !string.IsNullOrWhiteSpace(t.ZBMC)).ToList();
- #endregion
- //评估指标表
- var zblist = await Db.Queryable<CghjTjzb>().ToListAsync();//指标验证
- List<string> errorMsg = new List<string>();
- List<string> errorMsgPg = new List<string>();
- List<CghjQxtjghmbb> cgbmAdds = new List<CghjQxtjghmbb>();
- List<CghjQxtjbgzbb> pgzbAdds = new List<CghjQxtjbgzbb>();
- 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.YJFL = item.YJFL;
- 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.YJFL = item.YJFL;
- 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<CghjQxtjghmbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
- await Db.Deleteable<CghjQxtjbgzbb>().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 true;
- }
- /// <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;
- }
- /// <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<CghjQxtjpgrw>();
- 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;
- }
- # region 旗县
- /// <summary>
- /// 任务同步更新(旗县)
- /// </summary>
- /// <returns></returns>
- public async Task<bool> QXTaskUpdate(List<CghjQxtjpgrwView> list)
- {
- if (list == null)
- throw new UseMassageException("空数据");
- List<CghjQxtjpgrw> update = new List<CghjQxtjpgrw>();
- List<CghjQxtjpgrw> add = new List<CghjQxtjpgrw>();
- var gxid = list.Select(t => t.id);
- var outlist = await GetListAsync(t => gxid.Contains(t.BSM));
- foreach (var item in list)
- {
- var outmodel = outlist.FirstOrDefault(t => t.BSM == item.id);
- var newmodel = new CghjQxtjpgrw()
- {
- 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.name,
- ZTMC = item.statusName
- };
- if (outmodel == null)
- {
- add.Add(newmodel);
- }
- else
- {
- update.Add(newmodel);
- }
- }
- try
- {
- Db.BeginTran();
- if (add.Count > 0) await Db.Insertable(add).ExecuteCommandAsync();
- if (update.Count > 0) await Db.Updateable(update).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> QXUpload(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(CghjQxtjghmbb).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<CghjQxtjghmbb> listGhmb = tableGhmb.ToList<CghjQxtjghmbb>().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(CghjQxtjbgzbb).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<CghjQxtjbgzbb> listPbzb = tablePbzb.ToList<CghjQxtjbgzbb>().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<CghjQxtjghmbb> cgbmAdds = new List<CghjQxtjghmbb>();
- List<CghjQxtjbgzbb> pgzbAdds = new List<CghjQxtjbgzbb>();
- 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<CghjQxtjghmbb>().Where(t => t.RWBSM == rwModel.BSM).ExecuteCommandAsync();
- await Db.Deleteable<CghjQxtjbgzbb>().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;
- }
- #endregion
- }
- }
|