diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIController.cs index 7c18934..a5860a8 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIController.cs @@ -195,14 +195,7 @@ namespace APT.SC.WebApi.Controllers.Api.BI var riskFilter = new BaseFilter(filter.GetOrgId()); riskFilter.SelectField = new string[] { "AREA_ID", "Nav_Area.NAME", "EVALUATE_LEVEL", "Nav_SourceDepartment.NAME", "CREATE_TIME" }; IEnumerable allrisk = null; - if (filter.Parameter1 != null) - { - allrisk = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效 && t.SOURCE_DEPARTMENT_ID != null && t.MineType == int.Parse(filter.Parameter1), riskFilter); - } - else - { - allrisk = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效 && t.SOURCE_DEPARTMENT_ID != null, riskFilter); - } + allrisk = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效 && t.SOURCE_DEPARTMENT_ID != null, riskFilter); var hazardFilter = new BaseFilter(filter.GetOrgId()); hazardFilter.SelectField = new string[] { "CREATE_TIME" }; var allhazard = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效, hazardFilter); @@ -264,6 +257,397 @@ namespace APT.SC.WebApi.Controllers.Api.BI return riskData; }); } + public class riskPerformanceData + { + public List DATECOUNTS { get; set; } + public PerformanceModel CHARTFXDJ1 { get; set; } + public List CHARTFXDJ2 { get; set; } + public List CHARTLIST { get; set; } + public List TEAMLIST { get; set; } + public List AREALIST { get; set; } + public List RISKTYPELIST { get; set; } + public List SCDYLIST { get; set; } + public List CJLIST { get; set; } + public PerformanceModel CHARTZYRW1 { get; set; } + public List CHARTZYRW2 { get; set; } + + + public riskPerformanceData() + { + CHARTLIST = new List(); + TEAMLIST = new List(); + AREALIST = new List(); + RISKTYPELIST = new List(); + SCDYLIST = new List(); + CJLIST = new List(); + } + + } + public class PerformanceModel1 + { + public string name { get; set; } + + public int value { get; set; } + } + public class PerformanceModel + { + public List NAME { get; set; } + public List LEVEL1 { get; set; } + public List LEVEL2 { get; set; } + public List LEVEL3 { get; set; } + public List LEVEL4 { get; set; } + public List TOTAL { get; set; } + + public PerformanceModel() + { + NAME = new List(); + LEVEL1 = new List(); + LEVEL2 = new List(); + LEVEL3 = new List(); + LEVEL4 = new List(); + TOTAL = new List(); + } + + } + public PerformanceModel SortByTotal(PerformanceModel item) + { + // 创建临时列表用于保存排序后的索引 + List sortedIndexes = Enumerable.Range(0, item.TOTAL.Count) + .OrderByDescending(index => item.TOTAL[index]) + .ToList(); + + // 新建排序后的数组 + List sortedName = new List(); + List sortedLevel1 = new List(); + List sortedLevel2 = new List(); + List sortedLevel3 = new List(); + List sortedLevel4 = new List(); + + // 按照排序后的索引填充新的数组 + for (int i = 0; i < sortedIndexes.Count; i++) + { + sortedName.Add(item.NAME[sortedIndexes[i]]); + sortedLevel1.Add(item.LEVEL1[sortedIndexes[i]]); + sortedLevel2.Add(item.LEVEL2[sortedIndexes[i]]); + sortedLevel3.Add(item.LEVEL3[sortedIndexes[i]]); + sortedLevel4.Add(item.LEVEL4[sortedIndexes[i]]); + } + + // 将排序后的数组赋值回原对象 + item.NAME = sortedName.GetRange(0, Math.Min(8, item.NAME.Count)); + item.LEVEL1 = sortedLevel1.GetRange(0, Math.Min(8, item.NAME.Count)); + item.LEVEL2 = sortedLevel2.GetRange(0, Math.Min(8, item.NAME.Count)); + item.LEVEL3 = sortedLevel3.GetRange(0, Math.Min(8, item.NAME.Count)); + item.LEVEL4 = sortedLevel4.GetRange(0, Math.Min(8, item.NAME.Count)); + + return item; + } + /// + /// 风险库统计 + /// + /// 返回系统用户数 + /// + [HttpPost, Route("getRiskPerformanceData")] + public JsonActionResult getRiskPerformanceData([FromBody] KeywordFilter filter) + { + return SafeExecute(() => + { + var riskFilter = new BaseFilter(filter.GetOrgId()); + riskFilter.SelectField = new string[] { "EVALUATE_LEVEL", "CREATE_TIME", "MineType", "SOURCE_DEPARTMENT_ID", "TYPE_ID", "LEVEL", "AREA_ID", "DEPARTMENT_LIABLE_ID" }; + IEnumerable allrisk = null; + allrisk = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效 && t.SOURCE_DEPARTMENT_ID != null, riskFilter); + var hazardFilter = new BaseFilter(filter.GetOrgId()); + hazardFilter.SelectField = new string[] { "CREATE_TIME" }; + var allhazard = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效, hazardFilter); + riskPerformanceData riskPerformanceData = new riskPerformanceData(); + List item3s = new List(); + var distinctType = GetEntities(t => t.IS_DELETED == false, new BaseFilter(filter.GetOrgId())); + var distinctDepartment = GetEntities(t => t.DEPARTMENT_TYPE == 0, new BaseFilter(filter.GetOrgId())); + var distinctArea = GetEntities(t => t.IS_DELETED == false, new BaseFilter(filter.GetOrgId())); + var distinctTeamDepartment = GetEntities(t => t.DEPARTMENT_TYPE == 2, new BaseFilter(filter.GetOrgId())); + + #region 1 + PerformanceModel CHARTFXDJ1 = new PerformanceModel(); + CHARTFXDJ1.NAME = new List { "一级", "二级", "三级", "四级" }; + var type1 = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var type2 = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var type3 = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var type4 = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + CHARTFXDJ1.LEVEL1 = new List { type1, type2, type3, type4 }; + riskPerformanceData.CHARTFXDJ1 = CHARTFXDJ1; + #endregion + #region 2 + List model2s = new List { }; + PerformanceModel1 model1 = new PerformanceModel1(); + PerformanceModel1 model2 = new PerformanceModel1(); + PerformanceModel1 model3 = new PerformanceModel1(); + PerformanceModel1 model4 = new PerformanceModel1(); + + model1.name = "一级"; + model1.value = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + model2s.Add(model1); + model2.name = "二级"; + model2.value = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + model2s.Add(model2); + model3.name = "三级"; + model3.value = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + model2s.Add(model3); + model4.name = "四级"; + model4.value = allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + model2s.Add(model4); + riskPerformanceData.CHARTFXDJ2 = model2s; + #endregion + + + #region 3 + PerformanceModel modelMineType = new PerformanceModel(); + foreach (FMProductionUnit mineType in Enum.GetValues(typeof(FMProductionUnit))) + { + var mineTypeName = mineType.GetDescription(); + var mineTypeInt = mineType.GetInt(); + modelMineType.NAME.Add(mineTypeName); + modelMineType.LEVEL1.Add(allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.一级)); + modelMineType.LEVEL2.Add(allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.二级)); + modelMineType.LEVEL3.Add(allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.三级)); + modelMineType.LEVEL4.Add(allrisk.Count(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.四级)); + } + riskPerformanceData.CHARTLIST.Add(modelMineType); + #endregion + + #region 4 + PerformanceModel modelFXLB = new PerformanceModel(); + foreach (var type in distinctType) + { + var countLevel1 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + var totalCount = countLevel1 + countLevel2 + countLevel3 + countLevel4; + if (totalCount == 0) + { + continue; + } + modelFXLB.NAME.Add(type.NAME); + modelFXLB.LEVEL1.Add(countLevel1); + modelFXLB.LEVEL2.Add(countLevel2); + modelFXLB.LEVEL3.Add(countLevel3); + modelFXLB.LEVEL4.Add(countLevel4); + modelFXLB.TOTAL.Add(totalCount); + } + var newModelFXLB = SortByTotal(modelFXLB); + riskPerformanceData.CHARTLIST.Add(modelFXLB); + #endregion + + #region 5 + PerformanceModel modelZRDY = new PerformanceModel(); + foreach (var department in distinctDepartment) + { + var countLevel1 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + if (countLevel1 + countLevel2 + countLevel3 + countLevel4 == 0) + { + continue; + } + modelZRDY.NAME.Add(department.NAME); + modelZRDY.LEVEL1.Add(countLevel1); + modelZRDY.LEVEL2.Add(countLevel2); + modelZRDY.LEVEL3.Add(countLevel3); + modelZRDY.LEVEL4.Add(countLevel4); + } + riskPerformanceData.CHARTLIST.Add(modelZRDY); + #endregion + + #region 6 + PerformanceModel modelDepartmentType = new PerformanceModel(); + foreach (FMDepartmentType level in Enum.GetValues(typeof(FMDepartmentType))) + { + var levelName = level.GetDescription(); + modelDepartmentType.NAME.Add(levelName); + modelDepartmentType.LEVEL1.Add(allrisk.Count(t => t.LEVEL == level && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级)); + modelDepartmentType.LEVEL2.Add(allrisk.Count(t => t.LEVEL == level && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级)); + modelDepartmentType.LEVEL3.Add(allrisk.Count(t => t.LEVEL == level && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级)); + modelDepartmentType.LEVEL4.Add(allrisk.Count(t => t.LEVEL == level && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级)); + } + riskPerformanceData.CHARTLIST.Add(modelDepartmentType); + #endregion + + #region 7 + PerformanceModel modelArea = new PerformanceModel(); + foreach (var area in distinctArea) + { + var countLevel1 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + var totalArea = countLevel1 + countLevel2 + countLevel3 + countLevel4; + if (totalArea == 0) + { + continue; + } + modelArea.NAME.Add(area.NAME); + modelArea.LEVEL1.Add(countLevel1); + modelArea.LEVEL2.Add(countLevel2); + modelArea.LEVEL3.Add(countLevel3); + modelArea.LEVEL4.Add(countLevel4); + modelArea.TOTAL.Add(totalArea); + } + var newModelArea = SortByTotal(modelArea); + riskPerformanceData.CHARTLIST.Add(newModelArea); + #endregion + + #region 8 + var minTypeArr = new int[] { 30, 10, 20, 0 }; + var levelArr = new int[] { 3, 0, 1, 2 }; + foreach (var minetype in minTypeArr) + { + var templevel1 = allrisk.Where(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var templevel2 = allrisk.Where(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var templevel3 = allrisk.Where(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var templevel4 = allrisk.Where(t => t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + + PerformanceModel modelSCDY = new PerformanceModel(); + modelSCDY.NAME = new List { "公司", "部门", "车间", "班组" }; + modelSCDY.LEVEL1 = new List { templevel1.Count(t => (int)t.LEVEL == levelArr[0]), templevel1.Count(t => (int)t.LEVEL == levelArr[1]), templevel1.Count(t => (int)t.LEVEL == levelArr[2]), templevel1.Count(t => (int)t.LEVEL == levelArr[3]) }; + modelSCDY.LEVEL2 = new List { templevel2.Count(t => (int)t.LEVEL == levelArr[0]), templevel2.Count(t => (int)t.LEVEL == levelArr[1]), templevel2.Count(t => (int)t.LEVEL == levelArr[2]), templevel2.Count(t => (int)t.LEVEL == levelArr[3]) }; + modelSCDY.LEVEL3 = new List { templevel3.Count(t => (int)t.LEVEL == levelArr[0]), templevel3.Count(t => (int)t.LEVEL == levelArr[1]), templevel3.Count(t => (int)t.LEVEL == levelArr[2]), templevel3.Count(t => (int)t.LEVEL == levelArr[3]) }; + modelSCDY.LEVEL4 = new List { templevel4.Count(t => (int)t.LEVEL == levelArr[0]), templevel4.Count(t => (int)t.LEVEL == levelArr[1]), templevel4.Count(t => (int)t.LEVEL == levelArr[2]), templevel4.Count(t => (int)t.LEVEL == levelArr[3]) }; + riskPerformanceData.SCDYLIST.Add(modelSCDY); + } + #endregion + #region 10 + List SubZRDY = new List(); + foreach (int minetype in minTypeArr) + { + PerformanceModel modelSubZRDY = new PerformanceModel(); + foreach (var team in distinctTeamDepartment) + { + var countLevel1 = allrisk.Count(t => t.DEPARTMENT_LIABLE_ID == team.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.DEPARTMENT_LIABLE_ID == team.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.DEPARTMENT_LIABLE_ID == team.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.DEPARTMENT_LIABLE_ID == team.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + var totalZRDY = countLevel1 + countLevel2 + countLevel3 + countLevel4; + if (totalZRDY == 0) + { + continue; + } + modelSubZRDY.NAME.Add(team.NAME); + modelSubZRDY.LEVEL1.Add(countLevel1); + modelSubZRDY.LEVEL2.Add(countLevel2); + modelSubZRDY.LEVEL3.Add(countLevel3); + modelSubZRDY.LEVEL4.Add(countLevel4); + modelSubZRDY.TOTAL.Add(totalZRDY); + } + SubZRDY.Add(SortByTotal(modelSubZRDY)); + } + riskPerformanceData.TEAMLIST = SubZRDY; + #endregion + #region 11 + List SubQY = new List(); + foreach (int minetype in minTypeArr) + { + PerformanceModel modelSubQY = new PerformanceModel(); + foreach (var area in distinctArea) + { + var countLevel1 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.AREA_ID == area.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + var totalZRDY = countLevel1 + countLevel2 + countLevel3 + countLevel4; + if (totalZRDY == 0) + { + continue; + } + modelSubQY.NAME.Add(area.NAME); + modelSubQY.LEVEL1.Add(countLevel1); + modelSubQY.LEVEL2.Add(countLevel2); + modelSubQY.LEVEL3.Add(countLevel3); + modelSubQY.LEVEL4.Add(countLevel4); + modelSubQY.TOTAL.Add(totalZRDY); + } + SubQY.Add(SortByTotal(modelSubQY)); + } + riskPerformanceData.AREALIST = SubQY; + #endregion + #region 12 + List SubFXLB = new List(); + foreach (int minetype in minTypeArr) + { + PerformanceModel modelSubFXLB = new PerformanceModel(); + foreach (var type in distinctType) + { + var countLevel1 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); + var countLevel2 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); + var countLevel3 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); + var countLevel4 = allrisk.Count(t => t.TYPE_ID == type.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); + var totalZRDY = countLevel1 + countLevel2 + countLevel3 + countLevel4; + if (totalZRDY == 0) + { + continue; + } + modelSubFXLB.NAME.Add(type.NAME); + modelSubFXLB.LEVEL1.Add(countLevel1); + modelSubFXLB.LEVEL2.Add(countLevel2); + modelSubFXLB.LEVEL3.Add(countLevel3); + modelSubFXLB.LEVEL4.Add(countLevel4); + modelSubFXLB.TOTAL.Add(totalZRDY); + } + SubFXLB.Add(SortByTotal(modelSubFXLB)); + } + riskPerformanceData.RISKTYPELIST = SubFXLB; + #endregion + #region 13 + + PerformanceModel CHARTZYRW1 = new PerformanceModel(); + var allzyrw = GetEntities(t=>t.IS_DELETED==false, new BaseFilter(filter.GetOrgId())); + CHARTZYRW1.NAME = new List { "许可作业", "关键任务", "一般任务" }; + var zy1 = allzyrw.Count(t => t.TASK_LEVEL == 1); + var zy2 = allzyrw.Count(t => t.TASK_LEVEL == 2); + var zy3 = allzyrw.Count(t => t.TASK_LEVEL == 3); + CHARTZYRW1.LEVEL1 = new List { zy1, zy2, zy3 }; + riskPerformanceData.CHARTZYRW1 = CHARTZYRW1; + #endregion + #region 2 + List modelZyrws = new List { }; + PerformanceModel1 modelZyrw1 = new PerformanceModel1(); + PerformanceModel1 modelZyrw2 = new PerformanceModel1(); + PerformanceModel1 modelZyrw3 = new PerformanceModel1(); + + modelZyrw1.name = "许可作业"; + modelZyrw1.value = allzyrw.Count(t => t.TASK_LEVEL == 1); + modelZyrws.Add(modelZyrw1); + modelZyrw2.name = "关键任务"; + modelZyrw2.value = allzyrw.Count(t => t.TASK_LEVEL == 2); + modelZyrws.Add(modelZyrw2); + modelZyrw3.name = "一般任务"; + modelZyrw3.value = allzyrw.Count(t => t.TASK_LEVEL == 3); + modelZyrws.Add(modelZyrw3); + riskPerformanceData.CHARTZYRW2 = modelZyrws; + #endregion + #region + var currMonth = DateTime.Now.Month; + DateTime today = DateTime.Today; + for (var i = 1; i < currMonth + 1; i++) + { + DateTime endOfMonth = new DateTime(today.Year, i, 1).AddMonths(1).AddSeconds(-1); + dateCountModel riskDate = new dateCountModel(); + riskDate.DATE = endOfMonth; + riskDate.COUNT = allrisk.Count(t => t.CREATE_TIME <= endOfMonth); + riskDate.TYPE = 0; + item3s.Add(riskDate); + dateCountModel hazardDate = new dateCountModel(); + hazardDate.DATE = endOfMonth; + hazardDate.COUNT = allhazard.Count(t => t.CREATE_TIME <= endOfMonth); ; + hazardDate.TYPE = 1; + item3s.Add(hazardDate); + } + #endregion + + riskPerformanceData.DATECOUNTS = item3s.OrderBy(t => t.DATE).ToList(); + return riskPerformanceData; + }); + } public class safeTrainData { /// 年度培训计划完成率