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.Entities; using APT.MS.Domain.Enums; using APT.MS.Domain.Entities.BI; using static APT.MS.Domain.Enums.BI.BIEnums; using APT.Utility; using APT.MS.Domain.Entities.BS; namespace APT.SC.WebApi.Controllers.Api.BI { /// /// 年度监测汇总 /// [Route("api/BI/BISafe")] public class BISafeController : AuthorizeApiController { //IBIBSSafeCheckService BIBSSafeCheckService { get; set; } //public BISafeController(IBIBSSafeCheckService bIBSSafeCheckService) //{ // BIBSSafeCheckService = bIBSSafeCheckService; //} /// /// 显示 /// /// /// [HttpPost, Route("GetShow")] public JsonActionResult GetShow([FromBody] KeywordFilter filter) { return SafeExecute(() => { BISafe result = new BISafe(); string Parameter1 = string.Empty; string Parameter2 = string.Empty; if (filter.FilterGroup.Rules.Count == 2) { foreach (var item in filter.FilterGroup.Rules) { if (item.Field == "Parameter1") { Parameter1 = item.Value.ToString(); } else if (item.Field == "Parameter2") { if (item.Value == null) { throw new Exception("参数2为空!"); } else { Parameter2 = item.Value.ToString(); } } } } if (!string.IsNullOrEmpty(Parameter1) || !string.IsNullOrEmpty(Parameter2)) { string Code = "BI002_BSSAFECHECK"; //编码 FilterTimeType? timeType = null; BSMineTypeEditEnum? mineType = null; try { timeType = (FilterTimeType)(int.Parse(Parameter1)); } catch { } try { mineType = (BSMineTypeEditEnum)(int.Parse(Parameter2)); } catch { } if (timeType != null && mineType != null) { var listSafeCheck = GetEntities(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value, null).OrderBy(e => e.TEAMNAME).ToList(); var listCheckType = GetEntities(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value, null).OrderBy(e => e.name).ToList(); var summary = GetEntity(e => e.ORG_ID == filter.OrgId.Value && e.TimeType == timeType.Value && e.MineType == mineType.Value && e.CODE == Code); result.listSafeCheck = listSafeCheck; result.listCheckType = listCheckType; result.summary = summary; } } return result; }); } #region 安全检查绩效报表 #region 主界面与各弹窗的方法 /// /// 显示 /// /// /// [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, "ID", "VALUE", "NUM", "CODE", "NAME"); 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(); var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList(); var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList(); if (enmusLevel == null || !enmusLevel.Any()) throw new Exception("获取组织层级枚举信息失败!"); else { foreach (var item in enmusLevel) { lisLevelOrder.Add(item.NAME); } } if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } #endregion #region 改良版 listSafeCheck 所有的符合条件的检查信息 Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value; if (dtEnd.HasValue) expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value); BaseFilter filterSearch = new BaseFilter(filter.OrgId); filterSearch.IgnoreDataRule = true; filterSearch.Include.Add("Nav_CheckTypeLevel"); filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" }; //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel"); var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel"); #endregion #region 1_1 改良版 List> listCheckCount = new List>(); List listCheckLevelCount = null; foreach (var item in enmusLevel) { //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.CHECKOBJECT == itemMine.VALUE && e.Nav_CheckTypeLevel.CheckLevel_ENUMS_ID == item.ID).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.PARENT_ID).ThenBy(e => e.NUM); List listCheckTypeName = new List(); List listCheckTypeID = new List(); Dictionary> dicParent = new Dictionary>(); List listSum = new List(); Guid guidParent = Guid.Empty; foreach (var item in listCheckType) { if (item.PARENT_ID.HasValue) { if (!listCheckTypeName.Contains(item.NAME)) { listCheckTypeName.Add(item.NAME); listCheckTypeID.Add(item.ID); guidParent = item.PARENT_ID.Value; } listSum.Add(item.ID); } else { listCheckTypeName.Add(item.NAME); listCheckTypeID.Add(item.ID); } } listSum.Add(guidParent);//有些人直接定义 综合检查 dicParent.Add(guidParent, listSum); foreach (var item in enmusMineType) { listCheckTypeCountPer = new List(); foreach (var itemCheckType in listCheckTypeID) { //检查类型 if (itemCheckType == guidParent) { int count = listSafeCheck.Where(e => e.CHECKOBJECT == item.VALUE && listSum.Contains(e.CHECK_TYPE_ID.Value)).Count(); listCheckTypeCountPer.Add(count); } else { int count = listSafeCheck.Where(e => e.CHECKOBJECT == item.VALUE && 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.RiskContentState.HasValue && !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_Submit"); #region 1_2 各生产单元 隐患数 List listRiskMineCount1_2 = new List(); foreach (var item in enmusMineType) { listRiskMineCount1_2.Add(listContent.Where(e => e.Nav_Submit != null && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == (BSMineTypeEnum)item.VALUE).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.RiskContentState.Value == 60 || e.RiskContentState.Value == 80)).Count()); listNotFinish2_1.Add(listContent.Where(e => e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.RiskContentState.Value != 60 && e.RiskContentState.Value != 80).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.GroupBy(e => e.DESCREPTION).Select(e => new { DESCREPTION = e.Key, Count = e.Count() }).OrderByDescending(e => e.Count).Take(6); 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.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value)).Count(); listCheckTypeCountPer.Add(count); } else { int count = listContent.Where(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType).Count(); listCheckTypeCountPer.Add(count); } } listRiskMoneCheckType.Add(listCheckTypeCountPer); } result.Count3_2 = listRiskMoneCheckType; #endregion #endregion return result; }); } //#region 旧版直接查询 count ///// ///// 显示 ///// ///// ///// //[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, "ID", "VALUE", "NUM", "CODE", "NAME"); // 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(); // var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList(); // var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList(); // if (enmusLevel == null || !enmusLevel.Any()) // throw new Exception("获取组织层级枚举信息失败!"); // else // { // foreach (var item in enmusLevel) // { // lisLevelOrder.Add(item.NAME); // } // } // if (enmusMineType == null || !enmusMineType.Any()) // throw new Exception("获取生成单元枚举信息失败!"); // else // { // foreach (var item in enmusMineType) // { // lisMineTypeOrder.Add(item.NAME); // } // } // #endregion // #region 1_1 listCheckCount(List>) // Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value; // if (dtEnd.HasValue) // expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value); // //BSMineTypeEditEnum 选矿 10, 尾矿 20, 矿山 30, 地下矿 40, // //FMDepartmentType 层级 3公司级 0部门级 1车间级 2班组级 // //expression 不能组合 // //公司级 部门级 车间级 班组级 用filter过滤 // BaseFilter filterSearch1_1 = new BaseFilter(filter.OrgId); // filterSearch1_1.IgnoreDataRule = true; // filterSearch1_1.Include.Add("Nav_CheckTypeLevel"); // FilterGroup filterGroup = new FilterGroup(); // filterGroup.IsAnd = true; // FilterRule filterGroupRule = new FilterRule(); // filterGroupRule.Field = "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID"; // FilterRule filterGroupMineRule = new FilterRule(); // filterGroupMineRule.Field = "CHECKOBJECT"; // List> listCheckCount = new List>(); // List listCheckLevelCount = null; // foreach (var item in enmusLevel) // { // //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) // { // if (filterGroup.Rules != null && filterGroup.Rules.Any()) // filterGroup.Rules.Clear(); // filterGroupRule.Value = item.ID; // filterGroup.Rules.Add(filterGroupRule); // filterGroupMineRule.Value = itemMine.VALUE; // filterGroup.Rules.Add(filterGroupMineRule); // filterSearch1_1.FilterGroup = filterGroup; // int count = GetCount(expression, filterSearch1_1); // 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.PARENT_ID).ThenBy(e => e.NUM); // List listCheckTypeName = new List(); // List listCheckTypeID = new List(); // Dictionary> dicParent = new Dictionary>(); // List listSum = new List(); // Guid guidParent = Guid.Empty; // foreach (var item in listCheckType) // { // if (item.PARENT_ID.HasValue) // { // if (!listCheckTypeName.Contains(item.NAME)) // { // listCheckTypeName.Add(item.NAME); // listCheckTypeID.Add(item.ID); // guidParent = item.PARENT_ID.Value; // } // listSum.Add(item.ID); // } // else // { // listCheckTypeName.Add(item.NAME); // listCheckTypeID.Add(item.ID); // } // } // listSum.Add(guidParent);//有些人直接定义 综合检查 // dicParent.Add(guidParent, listSum); // Expression> expression3_1 = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value; // if (dtEnd.HasValue) // expression3_1 = expression3_1.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value); // Expression> expression3_1_Contains = expression3_1.And(e => listSum.Contains(e.CHECK_TYPE_ID.Value)); // BaseFilter filterSearch3_1 = new BaseFilter(filter.OrgId); // filterSearch3_1.IgnoreDataRule = true; // filterGroupRule = new FilterRule(); // filterGroupRule.Field = "CHECK_TYPE_ID"; // filterGroupMineRule = new FilterRule(); // filterGroupMineRule.Field = "CHECKOBJECT"; // foreach (var item in enmusMineType) // { // listCheckTypeCountPer = new List(); // foreach (var itemCheckType in listCheckTypeID) // { // if (filterGroup.Rules != null && filterGroup.Rules.Any()) // filterGroup.Rules.Clear(); // //检查类型 // if (itemCheckType == guidParent) // { // //报错 expression3_1 => expression3_1_Contains // //filterGroupRule.Operate = FilterOperate.Contains; // //filterGroupRule.Value = listSum; // //生产单元 // filterGroupMineRule.Value = item.VALUE; // filterGroup.Rules.Add(filterGroupMineRule); // filterSearch3_1.FilterGroup = filterGroup; // int count = GetCount(expression3_1_Contains, filterSearch3_1); // listCheckTypeCountPer.Add(count); // } // else // { // filterGroupRule.Value = itemCheckType; // filterGroup.Rules.Add(filterGroupRule); // //生产单元 // filterGroupMineRule.Value = item.VALUE; // filterGroup.Rules.Add(filterGroupMineRule); // filterSearch3_1.FilterGroup = filterGroup; // int count = GetCount(expression3_1, filterSearch3_1); // listCheckTypeCountPer.Add(count); // } // //filterGroup.Rules.Add(filterGroupRule); // ////生产单元 // //filterGroupMineRule.Value = item.VALUE; // //filterGroup.Rules.Add(filterGroupMineRule); // //filterSearch3_1.FilterGroup = filterGroup; // //int count = GetCount(expression3_1, filterSearch3_1); // //listCheckTypeCountPer.Add(count); // } // listCheckTypeCount.Add(listCheckTypeCountPer); // } // result.Count3_1 = listCheckTypeCount; // result.lisCheckTypeName = listCheckTypeName; // #endregion // return result; // }); //} //#endregion #region 各弹窗方法 #region 1_1 GetBI056_1_1 /// /// 显示 /// /// /// [HttpPost, Route("GetBI056_1_1")] public JsonActionResult GetBI056_1_1([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_1_1 result = new ModelBI056_1_1(); int year = DateTime.Now.Year; int month = DateTime.Now.Month; List listMonth = null; DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; if (!string.IsNullOrEmpty(filter.Keyword)) { var season = int.Parse(filter.Keyword); switch (season) { case 1: listMonth = new List() { 1, 2, 3 }; break; case 2: listMonth = new List() { 4, 5, 6 }; break; case 3: listMonth = new List() { 7, 8, 9 }; break; case 4: listMonth = new List() { 10, 11, 12 }; break; default: break; } dtStart = dtStart.AddMonths(3 * (season - 1)); dtEnd = dtStart.AddMonths(3).AddSeconds(-1); } #region enmusLevel=> lisLevelOrder enmusMineType=>lisMineTypeOrder 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(); var enmusLevel = enmus.Where(e => e.CODE == "HMLevleEnum").OrderBy(e => e.NUM).ToList(); var enmusMineType = enmus.Where(e => e.CODE == "BSMineTypeEnum").OrderBy(e => e.NUM).ToList(); if (enmusLevel == null || !enmusLevel.Any()) throw new Exception("获取组织层级枚举信息失败!"); else { foreach (var item in enmusLevel) { lisLevelOrder.Add(item.NAME); } } if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } #endregion List> listResult = new List>(); List listResultPer = null; int count = 0; #region 改良版 listSafeCheck 所有的符合条件的检查信息 Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value; if (dtEnd.HasValue) expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value); BaseFilter filterSearch = new BaseFilter(filter.OrgId); filterSearch.IgnoreDataRule = true; filterSearch.Include.Add("Nav_CheckTypeLevel"); filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" }; //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel"); var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel"); #endregion foreach (var item in enmusLevel) { listResultPer = new List(); foreach (var itemMonth in listMonth) { if (itemMonth > month && dtStart.Year == year)//同年 如果月份 大于当前月 直接跳出计算 { break; } //层级 各 生产单元 几月到几月 安全检查数量 foreach (var itemMine in enmusMineType) { count = listSafeCheck.Where(e => e.CHECKOBJECT == itemMine.VALUE && e.Nav_CheckTypeLevel.CheckLevel_ENUMS_ID == item.ID && e.CHECKTIME.Value.Month == itemMonth).Count(); listResultPer.Add(count); } } listResult.Add(listResultPer); } //数据组装 result.Count = listResult; result.lisMineTypeOrder = lisMineTypeOrder; result.lisLevelOrder = lisLevelOrder; return result; }); } #endregion #region 1_2 GetBI056_1_2 /// /// 显示 /// /// /// [HttpPost, Route("GetBI056_1_2")] public JsonActionResult GetBI056_1_2([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_1_2 result = new ModelBI056_1_2(); DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; List lisMineTypeOrder = new List(); var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList(); if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } 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> ListCount = new List>(); Expression> expression = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart;//&& e.DESCREPTION != null if (dtEnd.HasValue) expression = expression.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value); var listContent = GetEntities(expression, null, "Nav_Submit"); BSMineTypeEnum? mineType = null; List ListCountPer = null; foreach (var item in enmusMineType) { mineType = (BSMineTypeEnum)item.VALUE; ListCountPer = new List(); foreach (var itemMonth in listMonth) { ListCountPer.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == mineType && e.CREATE_TIME.Value.Month == itemMonth)); } ListCount.Add(ListCountPer); } //数据组装 result.lisMineTypeOrder = lisMineTypeOrder; result.ListCount = ListCount; return result; }); } #endregion #region 2_1 GetBI056_2_1 /// /// 显示 /// /// /// [HttpPost, Route("GetBI056_2_1")] public JsonActionResult GetBI056_2_1([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_2_1 result = new ModelBI056_2_1(); DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; List lisMineTypeOrder = new List(); var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList(); if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.RiskContentState.HasValue && !e.IS_DELETED;//&& 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_Submit"); 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 listFinishPer2_1 = null; List listNotFinishPer2_1 = null; List listFinishPer2_1Percent = null; List> listFinish2_1 = new List>(); List> listNotFinish2_1 = new List>(); List> listFinish2_1Percent = new List>(); BSMineTypeEnum? CHECKOBJECT = null; foreach (var itemEnums in enmusMineType) { CHECKOBJECT = (BSMineTypeEnum)itemEnums.VALUE; listFinishPer2_1 = new List(); listNotFinishPer2_1 = new List(); listFinishPer2_1Percent = new List(); foreach (var item in listMonth) { listFinishPer2_1.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == CHECKOBJECT && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80))); listNotFinishPer2_1.Add(listContent.Count(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == CHECKOBJECT && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == item && e.RiskContentState.Value != 60 && e.RiskContentState.Value != 80)); } for (int i = 0; i < listMonth.Count; i++) { if (listNotFinishPer2_1[i] == 0) { listFinishPer2_1Percent.Add(100); } else if (listFinishPer2_1[i] == 0) { listFinishPer2_1Percent.Add(0); } else { listFinishPer2_1Percent.Add((decimal)Math.Round((listFinishPer2_1[i] * 100.0 / (listNotFinishPer2_1[i] + listFinishPer2_1[i])), 2)); } } listFinish2_1.Add(listFinishPer2_1); listNotFinish2_1.Add(listNotFinishPer2_1); listFinish2_1Percent.Add(listFinishPer2_1Percent); } result.lisMineTypeOrder = lisMineTypeOrder; result.listFinish2_1 = listFinish2_1; result.listNotFinish2_1 = listNotFinish2_1; result.listFinish2_1Percent = listFinish2_1Percent; return result; }); } #endregion #region 2_2 GetBI056_2_2 /// /// 显示 /// /// /// [HttpPost, Route("GetBI056_2_2")] public JsonActionResult GetBI056_2_2([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_2_2 result = new ModelBI056_2_2(); DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; List lisMineTypeOrder = new List(); var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList(); if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } List> ListCount = new List>(); List> ListDescreption = new List>(); Expression> expression2_2 = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart;//&& e.DESCREPTION != null&& e.RiskContentState.HasValue && (e.RiskContentState.Value == 60 || e.RiskContentState.Value == 80) if (dtEnd.HasValue) expression2_2 = expression2_2.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value); BSMineTypeEnum? mineType = null; List ListCountPer = null; List ListDescreptionPer = null; foreach (var item in enmusMineType) { mineType = (BSMineTypeEnum)item.VALUE; Expression> expression2_2Mine = expression2_2.And(e => e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT.Value == mineType); var listContent = GetEntities(expression2_2Mine, null, "Nav_Submit"); var query = listContent.GroupBy(e => e.DESCREPTION).Select(e => new { DESCREPTION = e.Key, Count = e.Count() }).OrderByDescending(e => e.Count).Take(6); ListCountPer = new List(); ListDescreptionPer = new List(); if (query != null && query.Any()) { foreach (var itemVal in query) { ListCountPer.Add(itemVal.Count); ListDescreptionPer.Add(itemVal.DESCREPTION); } } ListCount.Add(ListCountPer); ListDescreption.Add(ListDescreptionPer); } //数据组装 result.lisMineTypeOrder = lisMineTypeOrder; result.ListCount = ListCount; result.ListDescreption = ListDescreption; return result; }); } #endregion #region 3_1 GetBI056_3_1 /// /// 各生产单元 各月 各检查类型数量 /// /// /// [HttpPost, Route("GetBI056_3_1")] public JsonActionResult GetBI056_3_1([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_3_1 result = new ModelBI056_3_1(); DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList(); List lisMineTypeOrder = new List(); if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } var listCheckType = GetEntities(e => !e.IS_DELETED, null, "Nav_ListMineType").OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM).ToList(); Dictionary> dicParent = new Dictionary>(); List listSum = new List(); Guid guidParent = Guid.Empty; foreach (var item in listCheckType) { if (item.PARENT_ID.HasValue) { if (guidParent != Guid.Empty) { guidParent = item.PARENT_ID.Value; } listSum.Add(item.ID); } } listSum.Add(guidParent);//有些人直接定义 综合检查 dicParent.Add(guidParent, listSum); List> listCheckTypes = new List>(); foreach (var item in enmusMineType) { listCheckTypes.Add(listCheckType.Where(e => e.Nav_ListMineType.Where(e => e.MINETYPE_ENUMS_ID == item.ID).Any()).ToList()); } List> lisMineCheckTypeOrder = new List>(); List lisMineCheckTypeOrderPer = null; foreach (var item in listCheckTypes) { lisMineCheckTypeOrderPer = new List(); foreach (var itemCheckType in item) { lisMineCheckTypeOrderPer.Add(itemCheckType.NAME); } lisMineCheckTypeOrder.Add(lisMineCheckTypeOrderPer); } #region 改良版 listSafeCheck 所有的符合条件的检查信息 Expression> expression = e => !e.IS_DELETED && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_LEVEL_ID.HasValue && e.CHECKTIME.HasValue && dtStart <= e.CHECKTIME.Value; if (dtEnd.HasValue) expression = expression.And(e => e.CHECKTIME.HasValue && dtEnd.Value >= e.CHECKTIME.Value); BaseFilter filterSearch = new BaseFilter(filter.OrgId); filterSearch.IgnoreDataRule = true; filterSearch.Include.Add("Nav_CheckTypeLevel"); filterSearch.SelectField = new List() { "ID", "CHECKOBJECT", "CHECK_TYPE_ID", "IS_DELETED", "CHECKTIME", "Nav_CheckTypeLevel.CheckLevel_ENUMS_ID" }; //var listSafeCheck = GetEntities(expression, null, "Nav_CheckTypeLevel"); var listSafeCheck = GetEntities(expression, filterSearch, "Nav_CheckTypeLevel"); #endregion #region 3_1 改良版 List>> listCheckTypeMonthCount = new List>>(); List> listCheckTypeCount = null; List listCheckTypeCountPer = null; 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(); } var enmusMineTypeCount = enmusMineType.Count(); for (int i = 0; i < enmusMineTypeCount; i++) { listCheckTypeCount = new List>(); int MineCheckTypeCount = listCheckTypes[i].Count; for (int j = 0; j < MineCheckTypeCount; j++) { listCheckTypeCountPer = new List(); foreach (int itemMonth in listMonth) { //检查类型 if (listCheckTypes[i][j].ID == guidParent) { int count = listSafeCheck.Where(e => e.CHECKOBJECT == enmusMineType[i].VALUE && e.CHECKTIME.Value.Month == itemMonth && listSum.Contains(e.CHECK_TYPE_ID.Value)).Count(); listCheckTypeCountPer.Add(count); } else { int count = listSafeCheck.Where(e => e.CHECKOBJECT == enmusMineType[i].VALUE && e.CHECKTIME.Value.Month == itemMonth && e.CHECK_TYPE_ID == listCheckTypes[i][j].ID).Count(); listCheckTypeCountPer.Add(count); } } listCheckTypeCount.Add(listCheckTypeCountPer); } listCheckTypeMonthCount.Add(listCheckTypeCount); } //数据组装 result.lisMineTypeOrder = lisMineTypeOrder; result.lisMineCheckTypeOrder = lisMineCheckTypeOrder; result.Count3_1 = listCheckTypeMonthCount; #endregion return result; }); } #endregion #region 3_2 GetBI056_3_2 /// /// 各生产单元 各月 各检查类型数量 /// /// /// [HttpPost, Route("GetBI056_3_2")] public JsonActionResult GetBI056_3_2([FromBody] KeywordFilter filter) { return SafeExecute(() => { ModelBI056_3_2 result = new ModelBI056_3_2(); DateTime dtStart = Convert.ToDateTime(DateTime.Now.Year.ToString() + "-01-01 00:00:00"); DateTime? dtEnd = null; 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(); } var enmusMineType = GetEntities(e => !e.IS_DELETED && e.CODE == "BSMineTypeEnum", null, null).OrderBy(e => e.NUM).ToList(); List lisMineTypeOrder = new List(); if (enmusMineType == null || !enmusMineType.Any()) throw new Exception("获取生成单元枚举信息失败!"); else { foreach (var item in enmusMineType) { lisMineTypeOrder.Add(item.NAME); } } var listCheckType = GetEntities(e => !e.IS_DELETED, null, "Nav_ListMineType").OrderBy(e => e.PARENT_ID).ThenBy(e => e.NUM); List listCheckTypeName = new List(); List listCheckTypeID = new List(); Dictionary> dicParent = new Dictionary>(); List listSum = new List(); Guid guidParent = Guid.Empty; foreach (var item in listCheckType) { if (item.PARENT_ID.HasValue) { if (!listCheckTypeName.Contains(item.NAME)) { listCheckTypeName.Add(item.NAME); listCheckTypeID.Add(item.ID); guidParent = item.PARENT_ID.Value; } listSum.Add(item.ID); } else { listCheckTypeName.Add(item.NAME); listCheckTypeID.Add(item.ID); } } listSum.Add(guidParent);//有些人直接定义 综合检查 dicParent.Add(guidParent, listSum); List> listCheckTypes = new List>(); foreach (var item in enmusMineType) { listCheckTypes.Add(listCheckType.Where(e => e.Nav_ListMineType.Where(e => e.MINETYPE_ENUMS_ID == item.ID).Any()).ToList()); } Expression> expression = e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value >= dtStart && e.RiskContentState.HasValue && !e.IS_DELETED; if (dtEnd.HasValue) expression = expression.And(e => e.CREATE_TIME.HasValue && dtEnd.Value >= e.CREATE_TIME.Value); var listContent = GetEntities(expression, null, "Nav_Submit").ToList(); List> lisMineCheckTypeOrder = new List>(); List lisMineCheckTypeOrderPer = null; foreach (var item in listCheckTypes) { lisMineCheckTypeOrderPer = new List(); foreach (var itemCheckType in item) { lisMineCheckTypeOrderPer.Add(itemCheckType.NAME); } lisMineCheckTypeOrder.Add(lisMineCheckTypeOrderPer); } List>> listRisk = new List>>(); List> listRiskMoneCheckType = null; List listCheckTypeCountPer = null; int MintTypeIndex = -1; foreach (var item in enmusMineType) { MintTypeIndex++; listRiskMoneCheckType = new List>(); foreach (var itemCheckType in listCheckTypes[MintTypeIndex]) { listCheckTypeCountPer = new List(); foreach (var itemMonth in listMonth) { //检查类型 if (itemCheckType.ID == guidParent) { int count = listContent.Count(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value) && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == itemMonth && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && listSum.Contains(e.Nav_Submit.CHECK_TYPE_ID.Value)); listCheckTypeCountPer.Add(count); } else { int count = listContent.Count(e => e.Nav_Submit != null && e.Nav_Submit.CHECK_TYPE_ID.HasValue && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType.ID && e.CREATE_TIME.HasValue && e.CREATE_TIME.Value.Month == itemMonth && e.Nav_Submit.CHECKOBJECT.HasValue && e.Nav_Submit.CHECKOBJECT == (BSMineTypeEnum)item.VALUE && e.Nav_Submit.CHECK_TYPE_ID == itemCheckType.ID); listCheckTypeCountPer.Add(count); } } listRiskMoneCheckType.Add(listCheckTypeCountPer); } listRisk.Add(listRiskMoneCheckType); } result.lisMineTypeOrder = lisMineTypeOrder; result.lisMineCheckType = lisMineCheckTypeOrder; result.Count3_1 = listRisk; return result; }); } #endregion #endregion #endregion #region model public class ModelBI056Main { public List lisMineTypeOrder { get; set; } public List lisLevelOrder { get; set; } public List> Count1_1 { get; set; } public List listRiskMineCount1_2 { get; set; } public List listFinish2_1 { get; set; } public List listMonth { get; set; } public List listNotFinish2_1 { get; set; } public List listFinish2_1Percent { get; set; } public List ListDescreption2_2 { get; set; } public List Count2_2 { get; set; } public List> Count3_1 { get; set; } public List lisCheckTypeName { get; set; } public List> Count3_2 { get; set; } } public class ModelBI056_1_1 { public List lisMineTypeOrder { get; set; } public List lisLevelOrder { get; set; } public List> Count { get; set; } } public class ModelBI056_1_2 { public List lisMineTypeOrder { get; set; } public List> ListCount { get; set; } } public class ModelBI056_2_1 { public List lisMineTypeOrder { get; set; } public List> listFinish2_1 { get; set; } public List> listNotFinish2_1 { get; set; } public List> listFinish2_1Percent { get; set; } } public class ModelBI056_2_2 { public List lisMineTypeOrder { get; set; } public List> ListCount { get; set; } public List> ListDescreption { get; set; } } public class ModelBI056_3_1 { /// /// 生产单元 /// public List lisMineTypeOrder { get; set; } /// /// 生产单元 检查类型 /// public List> lisMineCheckTypeOrder { get; set; } /// /// 检查数量 /// public List>> Count3_1 { get; set; } } public class ModelBI056_3_2 { /// /// 生产单元 /// public List lisMineTypeOrder { get; set; } /// /// 生产单元 检查类型 /// public List> lisMineCheckType { get; set; } /// /// 检查数量 /// public List>> Count3_1 { get; set; } } #endregion #endregion } public class BISafe { public List listSafeCheck { get; set; } public List listCheckType { get; set; } public T_BI_SUMMARY summary { get; set; } } }