using APT.BaseData.Domain.Entities; using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.Enums; using APT.BaseData.Domain.Enums.PF; using APT.BaseData.Domain.IServices.FM; using APT.BaseData.Domain.IServices; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.SC.PE; using APT.Utility; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using APT.MS.Domain.Enums; using APT.MS.Domain.Entities.PC; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Enums.SK; using APT.MS.Domain.Entities.SK; using APT.MS.Domain.Entities.FO; namespace APT.SC.WebApi.Controllers.Api.PCController { /// /// 纠正与预防措施通知单 /// [Route("api/PC/PCInfo")] public partial class PCInfoController : AuthorizeApiController { IPFCodeRuleService CodeRuleService { get; set; } IFMNotificationTaskService NotificationTaskService { get; set; } IFMFlowPermitService MFlowPermitService { get; set; } IPFApproveCallBackService ApproveCallBackService { get; set; } /// /// /// /// public PCInfoController(IPFCodeRuleService codeRuleService, IFMNotificationTaskService notificationTaskService, IFMFlowPermitService mFlowPermitService, IPFApproveCallBackService approveCallBackService) { CodeRuleService = codeRuleService; NotificationTaskService = notificationTaskService; MFlowPermitService = mFlowPermitService; ApproveCallBackService = approveCallBackService; } /// /// 新增/编辑 /// /// /// [HttpPost, Route("FullUpdate")] public JsonActionResult FullUpdate([FromBody] T_PC_INFO entity) { return SafeExecute(() => { if (entity.Nav_Files == null || !entity.Nav_Files.Any() || entity.Nav_Files.Count() < 1) { throw new Exception("请选择背景图"); } else if (entity.Nav_Files.Count() > 1) { var FilesCheck = entity.Nav_Files.Where(e => !e.IS_DELETED); if (FilesCheck != null && FilesCheck.Any() && FilesCheck.Count() > 1) { throw new Exception("背景图只能设置一张"); } } var Files = entity.Nav_Files.ToList(); if (string.IsNullOrEmpty(entity.FILE_PATH)) { entity.FILE_PATH = Files[0].Nav_ImgFile?.FILE_PATH; } if (string.IsNullOrEmpty(entity.FILE_PATH)) { var img = GetEntity(Files[0].IMG_FILE_ID, "Nav_File"); entity.FILE_PATH = img.Nav_File.FILE_PATH; } entity.Nav_Files = null; var Colors = entity.Nav_Colors; entity.Nav_Colors = null; List listPoint = new List(); List listArea = new List(); int index = 0; foreach (var item in Colors) { var ColorPoints = item.Nav_ColorPoints; item.Nav_ColorPoints = null; if (item.IS_DELETED) { foreach (var itemP in ColorPoints) { itemP.IS_DELETED = true; } listPoint.AddRange(ColorPoints); continue; } index++; if (item.ISDIY && string.IsNullOrEmpty(item.RGBCOLOR)) { throw new Exception("手动数据必须选择填充色"); } var Areas = item.Nav_Areas;//区域 不一定都会绑定 可以直接描点 按手动的来取色 if (Areas != null && Areas.Any() && Areas.Count() > 0) { item.Nav_Areas = null; foreach (var itemA in Areas) { itemA.INFO_ID = entity.ID; } listArea.AddRange(Areas); } else if (!item.ISDIY) { throw new Exception("非自定数据必须选择区域!");//根据区域判断等级与颜色 } //点位必须要有 且坐标顺序 必须连续 不重复 //if (ColorPoints == null || !ColorPoints.Any() || ColorPoints.Count() < 3) //{ // 升级后别的地方添加 // throw new Exception("坐标点位必须大于2,点击最左边[+]进行坐标添点加"); //} if (ColorPoints != null && ColorPoints.Any() && ColorPoints.Count > 0) { if (ColorPoints.Where(e => !e.IS_DELETED).Max(e => e.NUM) != ColorPoints.Where(e => !e.IS_DELETED).Count()) { throw new Exception("请检查坐标顺序[色块:" + index + "]:有序正整数(1、2、3...)!"); } } foreach (var itemP in ColorPoints) { itemP.INFO_ID = entity.ID; } listPoint.AddRange(ColorPoints); } UnifiedCommit(() => { if (entity != null) this.UpdateEntityNoCommit(entity); if (Files != null && Files.Any()) this.BantchSaveEntityNoCommit(Files); if (Colors != null && Colors.Any()) this.BantchSaveEntityNoCommit(Colors); if (listArea != null && listArea.Any()) this.BantchSaveEntityNoCommit(listArea); if (listPoint != null && listPoint.Any()) this.BantchSaveEntityNoCommit(listPoint); }); return true; }); } /// /// 获得单条实体数据 坐标排序 /// /// 过滤实体 /// [HttpPost, Route("Get")] public JsonActionResult Get([FromBody] KeywordFilter filter) { return SafeExecute(() => { var result = GetEntity(null, filter, null); if (result.Nav_Colors != null && result.Nav_Colors.Any()) { foreach (var item in result.Nav_Colors) { if (item.Nav_ColorPoints != null && item.Nav_ColorPoints.Any()) { item.Nav_ColorPoints = item.Nav_ColorPoints.OrderBy(e => e.NUM).ToList(); } } } return result; }); } /// /// 显示信息 /// /// 过滤实体 /// [HttpPost, Route("EntitiesShow")] public JsonActionResult> EntitiesShow([FromBody] KeywordFilter filter) { return SafeExecute(() => { var result = GetEntities(null, filter, null); if (result != null && result.Any()) { var colors = GetEntities(e => !e.IS_DELETED && e.ENABLE_STATUS == FMEnableStatusEnum.启用, null, null).OrderBy(e => e.LEVEL); if (colors == null || colors.Count() < 1) { throw new Exception("请配置四色图颜色信息"); } List listAreaID = new List(); foreach (var rp in result) { if (rp.Nav_Colors != null && rp.Nav_Colors.Any()) { rp.Nav_Colors = rp.Nav_Colors.OrderBy(e => e.ZNDEX).ToList(); foreach (var item in rp.Nav_Colors) { item.DESCRIBE_TITLE = item.DESCRIBE; //排序 if (item.Nav_ColorPoints != null && item.Nav_ColorPoints.Any()) { item.Nav_ColorPoints = item.Nav_ColorPoints.OrderBy(e => e.NUM).ToList(); } //如果非DIY数据 根据区域去查找隐患 根据隐患信息 判断等级 给颜色赋值 1为高级 //收集区域ID if (!item.ISDIY && item.Nav_Areas.Any()) { listAreaID.AddRange(item.Nav_Areas.Select(e => e.AREA_ID)); //colorLevel = 4; //item.DESCRIBE = "信息描述"; ////T_HM_EVALUATE_RISK } } } } listAreaID = listAreaID.Distinct().ToList(); //风险等级匹配 if (listAreaID != null && listAreaID.Any() && listAreaID.Count > 0) { //--企业库:T_SK_ENTERPRISE_LIBRARY 区域 等级 取最高的 //--工作票:T_FO_CRUCIAL_LICENSE_JOB 区域 等级 取最高的 //--隐患整改记录:T_SK_HIDDEN_DANGER_RECTIFY_RECORD STATUS<30 查数量 #region 获取数据源 企业库 工作票 隐患待整改记录 BaseFilter filterLib = new BaseFilter(filter.OrgId); filterLib.SelectField = new string[] { "AREA_ID", "EVALUATE_LEVEL", "IS_DELETED" }; //区域 固有风险 var listLib = GetEntities(e => !e.IS_DELETED && e.AREA_ID.HasValue && listAreaID.Contains(e.AREA_ID.Value), filterLib, null).GroupBy(e => new { e.AREA_ID, e.EVALUATE_LEVEL }).OrderBy(e => e.Key.AREA_ID).ThenBy(e => e.Key.EVALUATE_LEVEL).ToList(); //工作票 未归档 正在作业 //FOPreMeetingStatusEnum IS_PUBLISH int PUBLISH = (int)FOPreMeetingStatusEnum.归档; DateTime dtNow = DateTime.Now; BaseFilter filterJob = new BaseFilter(filter.OrgId); filterJob.SelectField = new string[] { "AREA_ID", "JOB_DATE", "IS_DELETED", "JOB_END_DATE", "IS_PUBLISH", "EVALUATE_LEVEL" }; var JobsNow = GetEntities(e => !e.IS_DELETED && e.AREA_ID.HasValue && listAreaID.Contains(e.AREA_ID.Value) && e.JOB_DATE.HasValue && e.JOB_END_DATE.HasValue && (int)e.IS_PUBLISH < PUBLISH && e.JOB_DATE.Value <= dtNow && dtNow <= e.JOB_END_DATE.Value, filterJob, null); //隐患整改记录 int STATUSMax = (int)PFStandardStatus.Archived; BaseFilter filterRec = new BaseFilter(filter.OrgId); filterRec.SelectField = new string[] { "RISK_AREA_ID", "STATUS", "IS_DELETED", "HIDDEN_LEVEL" }; var listDangerRecord = GetEntities(e => !e.IS_DELETED && e.RISK_AREA_ID.HasValue && ((int)e.STATUS) < STATUSMax, null, null); //区域 供显示 var listArea = GetEntities(e => listAreaID.Contains(e.ID), null, null); #endregion IEnumerable listAreaIDItem = null; T_PC_COLORSET colorPer = null; SKEvaluateLevelEnum? LevelResultEst = null;//高风险等级结果 SKEvaluateLevelEnum? LevelAreaEst = null;//区域固有最高风险等级 SKEvaluateLevelEnum? LevelJobEst = null;//实施工作票最高风险等级 SKEvaluateLevelEnum? LevelDanjerEst = null;//隐患待整改最高风险等级 int CountHightLevel = 0;//重大隐患未整改数量 int CountNotHightLevel = 0;//一般隐患未整改数量 int disIndex = 0; foreach (var rp in result) { if (rp.Nav_Colors == null && !rp.Nav_Colors.Any()) continue; foreach (var item in rp.Nav_Colors) { if (item.ISDIY || !item.Nav_Areas.Any() || item.Nav_Areas.Count < 1) continue; LevelResultEst = null;//高风险等级结果 LevelAreaEst = null;//区域固有最高风险等级 LevelJobEst = null;//实施工作票最高风险等级 LevelDanjerEst = null;//隐患待整改最高风险等级 CountHightLevel = 0;//重大隐患未整改数量 CountNotHightLevel = 0;//一般隐患未整改数量 //绑定区域 按实际数据显示信息 listAreaIDItem = item.Nav_Areas.Select(e => e.AREA_ID); var listAreaItem = listArea.Where(e => listAreaIDItem.Contains(e.ID)); if (listAreaItem.Any() && listAreaItem.Count() > 0) { item.DESCRIBE = "区域:" + String.Join('、', listAreaItem.Select(e => e.NAME)) + "
"; } else { item.DESCRIBE = ""; } #region 区域固有风险等级 LevelAreaEst 赋值 if (listLib != null && listLib.Any() && listLib.Count() > 0) { var ListAreaLib = listLib.Where(e => listAreaIDItem.Contains(e.Key.AREA_ID.Value)); if (ListAreaLib != null && ListAreaLib.Any() && ListAreaLib.Count() > 0) { LevelAreaEst = ListAreaLib.OrderBy(e => e.Key.EVALUATE_LEVEL).ToList()[0].Key.EVALUATE_LEVEL; } } #endregion #region 区域实时工作票 LevelJobEst 赋值 if (JobsNow != null && JobsNow.Any() && JobsNow.Count() > 0) { var listJobsArea = JobsNow.Where(e => listAreaIDItem.Contains(e.AREA_ID.Value)).OrderBy(e => e.EVALUATE_LEVEL); if (listJobsArea != null && listJobsArea.Any() && listJobsArea.Count() > 0) { LevelJobEst = listJobsArea.OrderBy(e => e.EVALUATE_LEVEL).ToList()[0].EVALUATE_LEVEL; } } #endregion #region 待整改隐患 CountHightLevel CountNotHightLevel 赋值 CountHightLevel = listDangerRecord.Count(e => e.HIDDEN_LEVEL == SKHiddenLevel.Major && listAreaIDItem.Contains(e.RISK_AREA_ID.Value)); CountNotHightLevel = listDangerRecord.Count(e => e.HIDDEN_LEVEL == SKHiddenLevel.General && listAreaIDItem.Contains(e.RISK_AREA_ID.Value)); #endregion #region 获取最终等级 LevelResultEst foreach (var itemCL in colors) { if (LevelAreaEst != null && itemCL.LEVEL == LevelAreaEst) { if (LevelResultEst == null) { LevelResultEst = itemCL.LEVEL; } } if (LevelJobEst != null && itemCL.LEVEL == LevelJobEst) { if (LevelResultEst == null) { LevelResultEst = itemCL.LEVEL; } } if ((CountHightLevel > 0 || CountNotHightLevel > 0) && LevelDanjerEst == null) { //区域内有待整改隐患 并且 此项未赋值 //有设置 最小值 并且不为0 数量大于/等于 最小值 就是对应数据 if (CountHightLevel > 0 && LevelDanjerEst == null && itemCL.COUNTMIN_HIGH.HasValue && itemCL.COUNTMIN_HIGH.Value != 0 && CountHightLevel >= itemCL.COUNTMIN_HIGH.Value) { LevelDanjerEst = itemCL.LEVEL; } if (CountNotHightLevel > 0 && LevelDanjerEst == null && itemCL.COUNTMIN_LOW.HasValue && itemCL.COUNTMIN_LOW.Value != 0 && CountNotHightLevel >= itemCL.COUNTMIN_LOW.Value) { LevelDanjerEst = itemCL.LEVEL; } if (LevelDanjerEst != null && LevelResultEst == null) { LevelResultEst = itemCL.LEVEL; } } } #endregion #region 根据计算信息 组装 文本描述 if (!LevelResultEst.HasValue) { item.RGBCOLOR = ""; item.DESCRIBE += "按四色取值规则未匹配到对应信息"; continue; } colorPer = colors.FirstOrDefault(e => e.LEVEL == LevelResultEst); if (colorPer != null) { item.DESCRIBE += colorPer.NAME + "预警依据:
"; item.RGBCOLOR = colorPer.CODE; } else item.RGBCOLOR = ""; disIndex = 0; //LevelAreaEst = null;//区域固有最高风险等级 //LevelJobEst = null;//实施工作票最高风险等级 //LevelDanjerEst = null;//隐患待整改最高风险等级 //CountHightLevel = 0;//重大隐患未整改数量 //CountNotHightLevel = 0;//一般隐患未整改数量 if (LevelAreaEst != null) { disIndex++; item.DESCRIBE += (disIndex + "、区域固有最高风险等级:" + LevelAreaEst.Value.GetDescription() + "
"); } if (LevelJobEst != null) { disIndex++; item.DESCRIBE += (disIndex + "、工作票风险等级:" + LevelJobEst.Value.GetDescription() + "
"); } if (LevelDanjerEst != null) { disIndex++; item.DESCRIBE += (disIndex + "、待整改隐患风险等级:" + LevelJobEst.Value.GetDescription() + (CountHightLevel > 0 ? ("重大隐患" + CountHightLevel + "条") : "") + (CountNotHightLevel > 0 ? "一般隐患" + CountNotHightLevel + "条" : "") + "
"); } if (!string.IsNullOrEmpty(item.DESCRIBE)) { item.DESCRIBE_TITLE = item.DESCRIBE.Replace("
", "\n"); } #endregion } } } } return result; }); } /// /// 更新色块区域 /// /// 对象实体 /// [HttpPost, Route("UpdateColorPoint")] public JsonActionResult UpdateColorPoint([FromBody] List listPoint) { return SafeExecute(() => { //List listPoint = new List(); if (listPoint == null || listPoint.Count() < 1) { throw new Exception("未获取到坐标序列!"); } var pointCheck = listPoint.Find(e => e.INFO_COLOR_ID == Guid.Empty || e.INFO_ID == Guid.Empty); if (pointCheck != null || pointCheck.ID == Guid.Empty) { throw new Exception("未获取到坐标序列!"); } Guid INFO_COLOR_ID = listPoint.ToList()[0].INFO_COLOR_ID; var check = listPoint.Find(e => e.INFO_COLOR_ID != INFO_COLOR_ID); if (check != null || check.ID != Guid.Empty) { throw new Exception("数据有误,每次只能操作一个配置区域!"); } //删除原有数据 增加新数据 UnifiedCommit(() => { DeleteEntityNoCommit(e => e.INFO_COLOR_ID == INFO_COLOR_ID); if (listPoint != null && listPoint.Any()) this.BantchSaveEntityNoCommit(listPoint); }); return true; }); } /// /// 更新色块区域 /// /// 对象实体 /// [HttpPost, Route("UpdateColorPointInfo")] public JsonActionResult UpdateColorPoint([FromBody] T_PC_INFO_COLOR PointInfo) { return SafeExecute(() => { if (PointInfo.Nav_ColorPoints == null || !PointInfo.Nav_ColorPoints.Any()) { throw new Exception("未获取到坐标序列!"); } List listPoint = PointInfo.Nav_ColorPoints.ToList(); //List listPoint = new List(); if (listPoint == null || listPoint.Count() < 1) { throw new Exception("未获取到坐标序列!"); } var pointCheck = listPoint.Find(e => e.INFO_COLOR_ID == Guid.Empty || e.INFO_ID == Guid.Empty); if (pointCheck != null) { throw new Exception("未获取到坐标序列!"); } Guid INFO_COLOR_ID = listPoint.ToList()[0].INFO_COLOR_ID; var check = listPoint.Find(e => e.INFO_COLOR_ID != INFO_COLOR_ID); if (check != null) { throw new Exception("数据有误,每次只能操作一个配置区域!"); } //删除原有数据 增加新数据 UnifiedCommit(() => { DeleteEntityNoCommit(e => e.INFO_COLOR_ID == INFO_COLOR_ID); if (listPoint != null && listPoint.Any()) this.BantchSaveEntityNoCommit(listPoint); }); return true; }); } /// /// 更新色块区域 /// /// 对象实体 /// [HttpPost, Route("UpdateColor")] public JsonActionResult UpdateColorPoint([FromBody] T_PC_INFO_COLOR_POINT Point) { return SafeExecute(() => { ////List listPoint = new List(); //if (listPoint == null || listPoint.Count() < 1) //{ // throw new Exception("未获取到坐标序列!"); //} //var pointCheck = listPoint.Find(e => e.INFO_COLOR_ID == Guid.Empty || e.INFO_ID == Guid.Empty); //if (pointCheck != null || pointCheck.ID == Guid.Empty) //{ // throw new Exception("未获取到坐标序列!"); //} //Guid INFO_COLOR_ID = listPoint.ToList()[0].INFO_COLOR_ID; //var check = listPoint.Find(e => e.INFO_COLOR_ID != INFO_COLOR_ID); //if (check != null || check.ID != Guid.Empty) //{ // throw new Exception("数据有误,每次只能操作一个配置区域!"); //} ////删除原有数据 增加新数据 //UnifiedCommit(() => //{ // DeleteEntityNoCommit(e => e.INFO_COLOR_ID == INFO_COLOR_ID); // if (listPoint != null && listPoint.Any()) // this.BantchSaveEntityNoCommit(listPoint); //}); return true; }); } } }