diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BISafeController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BISafeController.cs index 1f41c7c..abf7de5 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BISafeController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BISafeController.cs @@ -1,21 +1,23 @@ -using APT.BaseData.Domain.Entities.FM; -using APT.Infrastructure.Core; -using Microsoft.AspNetCore.Mvc; -using APT.Infrastructure.Api; -using System.Collections.Generic; -using System.Linq.Expressions; -using System; -using System.Linq; -using APT.BaseData.Domain.ApiModel; -using Ubiety.Dns.Core; -using System.Security.AccessControl; -using APT.MS.Domain.Entities.FO; +using APT.BaseData.Domain.ApiModel; using APT.BaseData.Domain.Entities; -using APT.MS.Domain.Enums; +using APT.BaseData.Domain.Entities.FM; +using APT.Infrastructure.Api; +using APT.Infrastructure.Core; using APT.MS.Domain.Entities.BI; -using static APT.MS.Domain.Enums.BI.BIEnums; -using APT.Utility; using APT.MS.Domain.Entities.BS; +using APT.MS.Domain.Entities.FO; +using APT.MS.Domain.Entities.SK; +using APT.MS.Domain.Enums; +using APT.MS.Domain.Enums.SK; +using APT.Utility; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Security.AccessControl; +using Ubiety.Dns.Core; +using static APT.MS.Domain.Enums.BI.BIEnums; namespace APT.SC.WebApi.Controllers.Api.BI { @@ -107,8 +109,8 @@ namespace APT.SC.WebApi.Controllers.Api.BI /// /// /// - [HttpPost, Route("GetBI056Main")] - public JsonActionResult GetBI056Main([FromBody] KeywordFilter filter) + [HttpPost, Route("GetBI056MainOld")] + public JsonActionResult GetBI056MainOld([FromBody] KeywordFilter filter) { return SafeExecute(() => { @@ -372,8 +374,242 @@ namespace APT.SC.WebApi.Controllers.Api.BI return result; }); - } + } + /// + /// 显示 + /// + /// + /// + [HttpPost, Route("GetBI056Main")] + public JsonActionResult GetBI056Main([FromBody] KeywordFilter filter) + { + return SafeExecute(() => + { + ModelBI056Main result = new ModelBI056Main(); + DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); + DateTime? dtEnd = null; + #region enmusLevel=> lisLevelOrder enmusMineType=>lisMineTypeOrder + + // var enmus = GetEntities(e => !e.IS_DELETED, null, null); + var enmus = GetEntities(e => !e.IS_DELETED, null, null); + if (enmus == null || !enmus.Any()) + throw new Exception("获取生产单元信息失败!"); + List lisLevelOrder = new List(); + List lisMineTypeOrder = new List(); + foreach (SKDepartmentTypeEnum level in Enum.GetValues(typeof(SKDepartmentTypeEnum))) + { + lisLevelOrder.Add(level.GetDescription()); + } + var enmusMineType = enmus.ToList(); + foreach (var item in enmusMineType) + { + lisMineTypeOrder.Add(item.NAME); + } + + #endregion + + #region 改良版 listSafeCheck 所有的符合条件的检查信息 + + Expression> expression = e => !e.IS_DELETED && e.APPLY_USER_ID.HasValue && e.CHECK_TIME.HasValue && dtStart <= e.CHECK_TIME.Value; + + if (dtEnd.HasValue) + expression = expression.And(e => e.CHECK_TIME.HasValue && dtEnd.Value >= e.CHECK_TIME.Value); + + BaseFilter filterSearch = new BaseFilter(filter.OrgId); + filterSearch.IgnoreDataRule = true; + //filterSearch.Include.Add("Nav_CheckTypeLevel"); + filterSearch.SelectField = new List() { "ID", "APPLY_USER_ID", "PRODUCTION_UNIT_ID", "CHECK_TYPE_ID", "IS_DELETED", "CHECK_TIME", "DEPARTMENT_TYPE" }; + //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel"); + var listSafeCheck = GetEntities(expression, filterSearch, null); + + #endregion + + #region 1_1 改良版 + + List> listCheckCount = new List>(); + List listCheckLevelCount = null; + foreach (SKDepartmentTypeEnum item in Enum.GetValues(typeof(SKDepartmentTypeEnum))) + { + //mineTypeName: ["露天矿", "选矿厂", "尾矿库", "职能部门"], + //legendName: ["公司级", "部门级", "车间级", "班组级"], + //checkCount: [[3, 3, 3, 3], [12, 12, 12, 6], [24, 24, 24, 12], [90, 90, 120, 36]], + + listCheckLevelCount = new List(); + //选矿 10, 尾矿 20, 矿山 30, 地下矿 40, + foreach (var itemMine in enmusMineType) + { + int count = listSafeCheck.Where(e => e.PRODUCTION_UNIT_ID == itemMine.ID && e.DEPARTMENT_TYPE == item).Count(); + listCheckLevelCount.Add(count); + } + listCheckCount.Add(listCheckLevelCount); + } + + //数据组装 + result.Count1_1 = listCheckCount; + result.lisMineTypeOrder = lisMineTypeOrder; + result.lisLevelOrder = lisLevelOrder; + + #endregion + + + + #region 3_1 改良版 + + + List> listCheckTypeCount = new List>(); + List listCheckTypeCountPer = null; + + var listCheckType = GetEntities(e => !e.IS_DELETED, null).OrderBy(e => e.PRODUCTION_UNIT_ID).ThenBy(e => e.NUM); + List listCheckTypeName = new List(); + List listCheckTypeID = new List(); + List listSum = new List(); + Guid guidParent = Guid.Empty; + foreach (var item in listCheckType) + { + listCheckTypeName.Add(item.NAME); + listCheckTypeID.Add(item.ID); + } + listSum.Add(guidParent);//有些人直接定义 综合检查 + + foreach (var item in enmusMineType) + { + listCheckTypeCountPer = new List(); + + foreach (var itemCheckType in listCheckTypeID) + { + int count = listSafeCheck.Where(e => e.PRODUCTION_UNIT_ID == item.ID && e.CHECK_TYPE_ID == itemCheckType).Count(); + listCheckTypeCountPer.Add(count); + } + listCheckTypeCount.Add(listCheckTypeCountPer); + } + + //数据组装 + result.Count3_1 = listCheckTypeCount; + result.lisCheckTypeName = listCheckTypeName; + #endregion + + #region 隐患 1_2 2_1 2_2 3_2 + + Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && !e.IS_DELETED;// && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)&& e.DESCREPTION != null + if (dtEnd.HasValue) + expression2_2 = expression2_2.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value); + + var listContent = GetEntities(expression2_2, null, "Nav_Question"); + + #region 1_2 各生产单元 隐患数 + + List listRiskMineCount1_2 = new List(); + foreach (var item in enmusMineType) + { + listRiskMineCount1_2.Add(listContent.Where(e => e.PRODUCTION_UNIT_ID.HasValue && e.PRODUCTION_UNIT_ID ==item.ID).Count()); + } + result.listRiskMineCount1_2 = listRiskMineCount1_2; + #endregion + + #region 2_1 月度 已完成 未完成 整改率 + + List listMonth = new List() { 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12 }; + if (dtStart.Year > DateTime.Now.Year) + { + listMonth.Clear(); + } + else if (dtStart.Year == DateTime.Now.Year) + { + listMonth = listMonth.Where(e => e <= DateTime.Now.Month).OrderBy(e => e).ToList(); + } + + List listFinish2_1 = new List(); + List listNotFinish2_1 = new List(); + List listFinish2_1Percent = new List(); + foreach (var item in listMonth) + { + listFinish2_1.Add(listContent.Where(e => e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.STATUS == BaseData.Domain.Enums.PF.PFStandardStatus.Archived).Count()); + listNotFinish2_1.Add(listContent.Where(e => e.PRODUCTION_UNIT_ID.HasValue && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.STATUS != BaseData.Domain.Enums.PF.PFStandardStatus.Archived).Count());//只是上报 没有检查范围 不计算在内 不然与后面的弹窗不对等 + } + for (int i = 0; i < listMonth.Count; i++) + { + if (listNotFinish2_1[i] == 0) + { + listFinish2_1Percent.Add(100); + } + else if (listFinish2_1[i] == 0) + { + listFinish2_1Percent.Add(0); + } + else + { + listFinish2_1Percent.Add((decimal)Math.Round((listFinish2_1[i] * 100.0 / (listNotFinish2_1[i] + listFinish2_1[i])), 2)); + } + } + + + //result.listMonth = listMonth; + result.listFinish2_1 = listFinish2_1; + result.listNotFinish2_1 = listNotFinish2_1; + result.listFinish2_1Percent = listFinish2_1Percent; + + + #endregion + + #region 2_2 隐患Top + var query = listContent.Where(e => e.Nav_Question != null).GroupBy(e => e.Nav_Question.DESCREPTION).Select(e => new + { + DESCREPTION = e.Key, + Count = e.Count() + }).OrderByDescending(e => e.Count).Take(6);//.Where(e => e.DESCREPTION != null) 名称不能为null + + if (query != null && query.Any()) + { + List ListDescreption2_2 = new List(); + List Count2_2 = new List(); + foreach (var item in query) + { + Count2_2.Add(item.Count); + ListDescreption2_2.Add(item.DESCREPTION); + } + result.Count2_2 = Count2_2; + result.ListDescreption2_2 = ListDescreption2_2; + } + else + { + result.Count2_2 = new List(); + result.ListDescreption2_2 = new List(); + } + #endregion + + #region 3_2 检查类型隐患统计 + + List> listRiskMoneCheckType = new List>(); + foreach (var item in enmusMineType) + { + listCheckTypeCountPer = new List(); + foreach (var itemCheckType in listCheckTypeID) + { + //检查类型 + if (itemCheckType == guidParent) + { + int count = listContent.Where(e => e.CHECK_TYPE_ID.HasValue && e.PRODUCTION_UNIT_ID.HasValue && e.PRODUCTION_UNIT_ID== item.ID && listSum.Contains(e.CHECK_TYPE_ID.Value)).Count(); + listCheckTypeCountPer.Add(count); + } + else + { + int count = listContent.Where(e => e.CHECK_TYPE_ID.HasValue && e.PRODUCTION_UNIT_ID.HasValue && e.PRODUCTION_UNIT_ID == item.ID && e.CHECK_TYPE_ID == itemCheckType).Count(); + listCheckTypeCountPer.Add(count); + } + } + listRiskMoneCheckType.Add(listCheckTypeCountPer); + } + result.Count3_2 = listRiskMoneCheckType; + + #endregion + + #endregion + + + return result; + }); + } //#region 旧版直接查询 count /////