using APT.BaseData.Domain.Entities.FM; using APT.Infrastructure.Core; using Microsoft.AspNetCore.Mvc; using APT.Infrastructure.Api; using System.Collections.Generic; using System; using System.Linq; using APT.MS.Domain.Enums; using APT.MS.Domain.Entities.HM; using APT.BaseData.Domain.Enums; using APT.Utility; using APT.MS.Domain.Entities.SE; using APT.MS.Domain.Entities.BI; using NPOI.SS.Formula.Functions; using APT.BaseData.Domain.Entities; using APT.MS.Domain.Entities.SC.BI; using System.Collections.ObjectModel; using APT.BaseData.Domain.Entities.OP; using APT.Migrations; using APT.BaseData.Services.Services.FM; using APT.BaseData.Domain.IServices.FM; namespace APT.SC.WebApi.Controllers.Api.BI { /// /// 年度监测汇总 /// [Route("api/BI/BIController")] public class BIController : APTApiController { public class GoViewDataReturn { public int code { get; set; } public int count { get; set; } public string msg { get; set; } public object data { get; set; } } public class EchartsDataset { public string[] dimensions { get; set; } public List source { get; set; } } public class addItem { public string 班组名称 { get; set; } public int 待办 { get; set; } public int 总数 { get; set; } } /// /// 班前会议数量统计 /// /// 分页过滤实体 /// [HttpPost, Route("PreShiftMeetingCount")] public GoViewDataReturn PreShiftMeetingCount(string param) { //var paramArr = param.Trim('"').Split("|"); Guid orgId = getOrgIdByTenant(this.Request.Headers["Tenant"]); GoViewDataReturn goViewDataReturn = new GoViewDataReturn() { msg = "", code = 200 }; var result = GetEntities(t => t.FORM_NAME == "班前会议", new BaseFilter(orgId)); EchartsDataset dataset = new EchartsDataset(); dataset.dimensions = new string[] { "班组名称", "待办", "总数" }; dataset.source = new List(); foreach (var item in result) { var test = new addItem { 班组名称 = item.TEAM_NAME, 待办 = item.WAITTING_COUNT, 总数 = item.TOTAL_COUNT }; dataset.source.Add(test); } goViewDataReturn.data = dataset; return goViewDataReturn; } private Guid getOrgIdByTenant(string Tenant) { Guid orgId = Guid.Empty; if (Tenant.Equals("0001"))//XLK { orgId = Guid.Parse("b043b28b-bbc3-c452-6052-4fba1457abfa"); } else if (Tenant.Equals("A0000024"))//豫鹭 { orgId = Guid.Parse("d9871ba8-0eec-9e4a-bb87-7d5a540d8913"); } else if (Tenant.Equals("A0000025"))//金鼎 { orgId = Guid.Parse("8b3c41aa-51b1-7ce9-1879-248a038c1b5c"); } else if (Tenant.Equals("0002"))//龙岩稀土 { orgId = Guid.Parse("8f1cf418-8bf3-ea3f-7a6d-fc5d61247008"); } return orgId; } /// /// 返回系统用户数 /// /// 返回系统用户数 /// [HttpPost, Route("userCount")] public JsonActionResult userCount([FromBody] KeywordFilter filter) { return SafeExecute(() => { return GetCount(t => t.ENABLE_STATUS == 0, new BaseFilter(filter.GetOrgId())); }); } /// /// 风险库统计 /// /// 返回系统用户数 /// [HttpPost, Route("savesouceDepartment")] public JsonActionResult savesouceDepartment([FromBody] KeywordFilter filter) { return SafeExecute(() => { var riskFilter = new BaseFilter(filter.GetOrgId()); riskFilter.Include = new string[] { "Nav_DepartmentLiable.Nav_Parent.Nav_Parent" }; var all = GetEntities(t => t.STATUS == (int)HMOperationStepEnum.有效 && t.DEPARTMENT_LIABLE_ID != null && t.SOURCE_DEPARTMENT_ID == null, riskFilter); foreach (var entity in all) { if (entity.Nav_DepartmentLiable.DEPARTMENT_TYPE == (int)FMDepartmentType.班组) { entity.SOURCE_DEPARTMENT_ID = entity.Nav_DepartmentLiable.Nav_Parent.Nav_Parent.ID; } if (entity.Nav_DepartmentLiable.DEPARTMENT_TYPE == (int)FMDepartmentType.车间) { entity.SOURCE_DEPARTMENT_ID = entity.Nav_DepartmentLiable.Nav_Parent.ID; } if (entity.Nav_DepartmentLiable.DEPARTMENT_TYPE == (int)FMDepartmentType.部门) { entity.SOURCE_DEPARTMENT_ID = entity.DEPARTMENT_LIABLE_ID; } entity.Nav_DepartmentLiable = null; } this.UnifiedCommit(() => { BantchUpdateEntityNoCommit(all); }); return true; }); } public class riskData { public List RISKLEVELCOUNTS { get; set; } public List AREACOUNTS { get; set; } public List DATECOUNTS { get; set; } public int RISKTOTALCOUNT { get; set; } public int HAZARDTOTALCOUNT { get; set; } public int MEASURESTOTALCOUNT { get; set; } } public class areaCountModel { public string AREANAME { get; set; } public int AREACOUNT { get; set; } public int AREATYPE { get; set; } } public class riskLevelCountModel { public string NAME { get; set; } public int LEVEL1 { get; set; } public int LEVEL2 { get; set; } public int LEVEL3 { get; set; } public int LEVEL4 { get; set; } } public class dateCountModel { public DateTime DATE { get; set; } public int COUNT { get; set; } public int TYPE { get; set; } } /// /// 风险库统计 /// /// 返回系统用户数 /// [HttpPost, Route("getRiskData")] public JsonActionResult getRiskData([FromBody] KeywordFilter filter) { return SafeExecute(() => { 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; 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); var measureFilter = new BaseFilter(filter.GetOrgId()); measureFilter.SelectField = new string[] { "NAME" }; var measure1 = GetEntities(t => t.IS_DELETED == false, measureFilter).Select(t => t.NAME).Distinct().Count(); var measure2 = GetEntities(t => t.IS_DELETED == false, measureFilter).Select(t => t.NAME).Distinct().Count(); var measure3 = GetEntities(t => t.IS_DELETED == false, measureFilter).Select(t => t.NAME).Distinct().Count(); var measure4 = GetEntities(t => t.IS_DELETED == false, measureFilter).Select(t => t.NAME).Distinct().Count(); var measure5 = GetEntities(t => t.IS_DELETED == false, measureFilter).Select(t => t.NAME).Distinct().Count(); var distinctDepartment = GetEntities(t => t.DEPARTMENT_TYPE == 0, new BaseFilter(filter.GetOrgId())); riskData riskData = new riskData(); List item1s = new List(); List item2s = new List(); List item3s = new List(); foreach (var department in distinctDepartment) { riskLevelCountModel item = new riskLevelCountModel(); item.NAME = department.NAME; item.LEVEL1 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.一级); item.LEVEL2 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.二级); item.LEVEL3 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.三级); item.LEVEL4 = allrisk.Count(t => t.SOURCE_DEPARTMENT_ID == department.ID && t.EVALUATE_LEVEL == EvaluateLevelEnum.四级); item1s.Add(item); } var distinctArea = allrisk.Select(t => new { t.AREA_ID, AreaName = t.Nav_Area.NAME, SourceDepartmentName = t.Nav_SourceDepartment.NAME }).Distinct(); foreach (var area in distinctArea) { areaCountModel item = new areaCountModel(); item.AREANAME = area.AreaName; item.AREACOUNT = allrisk.Count(t => t.AREA_ID == area.AREA_ID); item2s.Add(item); } 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); } riskData.RISKLEVELCOUNTS = item1s.OrderByDescending(t => t.LEVEL4).ToList(); riskData.AREACOUNTS = item2s.OrderBy(t => t.AREACOUNT).ToList(); riskData.DATECOUNTS = item3s.OrderBy(t => t.DATE).ToList(); riskData.RISKTOTALCOUNT = allrisk.Count(); riskData.HAZARDTOTALCOUNT = allhazard.Count(); riskData.MEASURESTOTALCOUNT = measure1 + measure2 + measure3 + measure4 + measure5; 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 { /// 年度培训计划完成率 public int NUM1 { get; set; } /// 安全培训教育 public int NUM2 { get; set; } /// 三级安全教育 public int NUM3 { get; set; } /// 学时达标率 public int NUM4 { get; set; } /// 培训优良率 public int NUM5 { get; set; } /// 培训考核通过率 public int NUM6 { get; set; } /// 题库总条数 public int NUM7 { get; set; } public List trainRecords { get; set; } public List dateCountModel { get; set; } } public class trainRecords { /// 课程名称 public string NAME { get; set; } /// 培训起止时间 public string TIMERANGE { get; set; } /// 应参训人数 public int SHOULD_TRAINER { get; set; } /// 实际参训人数 public int ACTUAL_TRAINER { get; set; } /// 参训率 public string TRAINER_RATE { get; set; } /// 考核方式 public string METHOD { get; set; } /// 通过率 public string PASS_RATE { get; set; } /// 效果评估(优良率) public string EFFORT_RATE { get; set; } } /// /// 安全培训教育统计分析 /// /// 返回系统用户数 /// [HttpPost, Route("getSafeTrainData")] public JsonActionResult getSafeTrainData([FromBody] KeywordFilter filter) { return SafeExecute(() => { var riskFilter = new BaseFilter(filter.GetOrgId()); riskFilter.Include = new string[] { "Nav_Notify.Nav_TrainUserList", "Nav_Users", "Nav_Notify.Nav_TrainCheckType" }; DateTime time = DateTime.Parse(filter.Parameter1); DateTime currYear = DateTime.Parse(time.Year + " 01-01"); var startTime = time.AddDays(1 - time.Day); var endTime = time.AddDays(1 - time.Day).AddMonths(1); var records = GetEntities(t => t.CREATE_TIME > currYear, riskFilter); var testCount = GetCount(t => t.IS_DELETED == false, new BaseFilter(filter.GetOrgId())); var threeLevelCount = GetCount(t => t.IS_DELETED == false, new BaseFilter(filter.GetOrgId())); var currMonthrecords = records.Where(t => t.CREATE_TIME > startTime && t.CREATE_TIME < endTime).OrderBy(t => t.Nav_Notify.TRAIN_START_TIME); var recordids = currMonthrecords.Select(t => t.ID); var examFilter = new BaseFilter(filter.GetOrgId()); examFilter.SelectField = new string[] { "USER_ID", "RECORD_ID", "SCORE" }; var exams = GetEntities(t => recordids.Contains(t.RECORD_ID), examFilter).DistinctBy(t => t.USER_ID); var notifyIds = currMonthrecords.Select(t => t.NOTIFY_ID); var effectFilter = new BaseFilter(filter.GetOrgId()); effectFilter.Include = new string[] { "Nav_ResultList" }; var effects = GetEntities(t => notifyIds.Contains((Guid)t.SURVEY_ID), effectFilter); List trainRecords = new List(); foreach (var item in currMonthrecords) { trainRecords trainRecord = new trainRecords(); trainRecord.NAME = item.Nav_Notify.NAME; trainRecord.TIMERANGE = item.Nav_Notify.TRAIN_START_TIME + "-" + item.Nav_Notify.TRAIN_END_TIME; trainRecord.SHOULD_TRAINER = item.Nav_Notify.Nav_TrainUserList.Count(); trainRecord.ACTUAL_TRAINER = item.Nav_Users.Count(); trainRecord.METHOD = item.Nav_Notify.Nav_TrainCheckType.NAME; if (item.Nav_Notify.Nav_TrainCheckType.NAME == "笔试") { var currExams = exams.Where(t => t.RECORD_ID == item.ID); var currCount = currExams.Count(); if (currCount > 0) { var passExams = currExams.Where(t => t.SCORE >= 80); var passCount = passExams.Count(); var rate = (passCount * 1.0 / currCount); trainRecord.PASS_RATE = rate.ToString(); } else { trainRecord.PASS_RATE = "0"; } } else { trainRecord.PASS_RATE = "1"; } if (item.Nav_Notify.NEED_EVALUATION == SETrainNeedSuvey.是) { var effect = effects.FirstOrDefault(t => t.SURVEY_ID == item.NOTIFY_ID); if (effect != null) { var effectResult = effect.Nav_ResultList; double sumTotal = 0; foreach (var item2 in effectResult) { double num1 = Convert.ToDouble(item2.GOOD_RATION.Replace("%", "")); double num2 = Convert.ToDouble(item2.BETTER_RATION.Replace("%", "")); sumTotal += num1; sumTotal += num2; } trainRecord.EFFORT_RATE = (sumTotal / effectResult.Count()).ToString(); } else { trainRecord.EFFORT_RATE = "100"; } } else { trainRecord.EFFORT_RATE = "100"; } trainRecords.Add(trainRecord); } List item3s = new List(); DateTime today = DateTime.Today; for (var i = 1; i < DateTime.Now.Month + 1; i++) { DateTime startTime1 = new DateTime(today.Year, i, 1); DateTime endTime1 = new DateTime(today.Year, i, 1).AddMonths(1).AddSeconds(-1); dateCountModel riskDate = new dateCountModel(); riskDate.DATE = startTime1; riskDate.COUNT = records.Count(t => t.CREATE_TIME > startTime1 && t.CREATE_TIME < endTime1); item3s.Add(riskDate); } safeTrainData safeTrainData = new safeTrainData(); safeTrainData.NUM1 = 1; safeTrainData.NUM2 = records.Count(); safeTrainData.NUM3 = threeLevelCount; safeTrainData.NUM4 = 13; safeTrainData.NUM5 = 14; safeTrainData.NUM6 = 15; safeTrainData.NUM7 = testCount; safeTrainData.trainRecords = trainRecords; safeTrainData.dateCountModel = item3s; return safeTrainData; }); } ///// ///// 获取版本号 ///// ///// 获取版本号 ///// [HttpPost, Route("getVersion")] public JsonActionResult getVersion([FromBody] KeywordFilter filter) { return SafeExecute(() => { dynamic ret = new System.Dynamic.ExpandoObject(); using (var context = new MigrationContext(ConfigurationManager.ConnectionStrings["default"])) { var version = context.GetEntity(i => i.IS_DELETED == false, new string[] { "VERSION_NO" }); if (version != null) { ret = version.VERSION_NO; } } return ret; }); } public class notificationData { /// 模块 public string NAME1 { get; set; } /// 表单名称 public string NAME2 { get; set; } /// 待办数 public double NAME3 { get; set; } /// 完成数 public double NAME4 { get; set; } /// 完成率 public string NAME5 { get; set; } /// 及时完成率 public string NAME6 { get; set; } /// 总数 public double NAME7 { get; set; } } /// /// 待办统计 /// /// 待办统计 /// [HttpPost, Route("getNotificationTask")] public JsonActionResult> getNotificationTask([FromBody] KeywordFilter filter) { return SafeExecute>(() => { dynamic ret = new System.Dynamic.ExpandoObject(); var riskFilter = new BaseFilter(filter.GetOrgId()); riskFilter.SelectField = new string[] { "NOTICE_STATUS", "SOURCE_FORMCODE" }; DateTime currYear = DateTime.Parse(filter.Parameter1); var records = GetEntities(t => t.CREATE_TIME > currYear, riskFilter); var formFilter = new BaseFilter(filter.GetOrgId()); riskFilter.SelectField = new string[] { "CODE", "NAME" }; var pfForms = GetEntities(t => t.IS_DELETED == false, riskFilter).Select(t => new { t.CODE, t.NAME }).Distinct(); List notificationDatas = new List(); foreach (var item in pfForms) { var total = records.Where(t => t.SOURCE_FORMCODE == item.CODE); double totalCount = total.Count(); if (totalCount > 0) { notificationData notificationData = new notificationData(); notificationData.NAME1 = item.CODE; notificationData.NAME2 = item.NAME; notificationData.NAME3 = total.Count(t => t.NOTICE_STATUS == 0); notificationData.NAME4 = total.Count(t => t.NOTICE_STATUS > 0); notificationData.NAME5 = ((notificationData.NAME4 / totalCount) * 100).ToString("0.00"); var inTime = total.Count(t => t.NOTICE_STATUS == 1); notificationData.NAME6 = ((inTime / totalCount) * 100).ToString("0.00"); notificationData.NAME7 = totalCount; notificationDatas.Add(notificationData); } } return notificationDatas; }); } public class schedulingData { /// 模块 public string NAME1 { get; set; } /// 表单名称 public string NAME2 { get; set; } /// 待办数 public string NAME3 { get; set; } /// 完成数 public string NAME4 { get; set; } /// 完成率 public string NAME5 { get; set; } /// 及时完成率 public string NAME6 { get; set; } /// 总数 public int NAME7 { get; set; } } /// /// 待办统计 /// /// 待办统计 /// [HttpPost, Route("getScheduling")] public JsonActionResult> getScheduling([FromBody] KeywordFilter filter) { return SafeExecute>(() => { dynamic ret = new System.Dynamic.ExpandoObject(); var filter1 = new BaseFilter(filter.GetOrgId()); filter1.SelectField = new string[] { "ID", "NAME" }; var teams = GetEntities(t => t.ENABLE_STATUS == 0, filter1); var filter2 = new BaseFilter(filter.GetOrgId()); filter2.SelectField = new string[] { "TEAM_ID", "DATE_TIME", "START_TIME", "END_TIME", "RUN_STATUS", "SHIFT_CLASS_RUN_STATUS" }; DateTime today = DateTime.Now.AddDays(-3); var schedulings = GetEntities(t => t.DATE_TIME > today, filter2).OrderBy(t => t.START_TIME); List sDatas = new List(); foreach (var item in teams) { var total = schedulings.Where(t => t.TEAM_ID == item.ID); double totalCount = total.Count(); if (totalCount > 0) { schedulingData Data = new schedulingData(); Data.NAME1 = item.NAME; var day1count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(-1).Day); var day2count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(0).Day); var day3count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(1).Day); var day4count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(2).Day); var day5count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(3).Day); var day6count = total.Count(t => t.DATE_TIME.Day == DateTime.Now.AddDays(4).Day); var day1 = total.FirstOrDefault(t => t.DATE_TIME.Day == DateTime.Now.AddDays(-1).Day); var day2 = total.FirstOrDefault(t => t.DATE_TIME.Day == DateTime.Now.AddDays(0).Day); var day3 = total.FirstOrDefault(t => t.DATE_TIME.Day == DateTime.Now.AddDays(1).Day); var day4 = total.FirstOrDefault(t => t.DATE_TIME.Day == DateTime.Now.AddDays(2).Day); var day5 = total.FirstOrDefault(t => t.DATE_TIME.Day == DateTime.Now.AddDays(3).Day); Data.NAME2 = day1 != null ? day1count + "|" + (day1.RUN_STATUS ? "✔" : "❌") + "|" + (day1.SHIFT_CLASS_RUN_STATUS ? "✔" : "❌") + "|" + day1.START_TIME.ToShortTimeString() + "~" + day1.END_TIME.ToShortTimeString() : ""; Data.NAME3 = day2 != null ? day2count + "|" + (day2.RUN_STATUS ? "✔" : "❌") + "|" + (day2.SHIFT_CLASS_RUN_STATUS ? "✔" : "❌") + "|" + day2.START_TIME.ToShortTimeString() + "~" + day2.END_TIME.ToShortTimeString() : ""; Data.NAME4 = day3 != null ? day3count + "|" + (day3.RUN_STATUS ? "✔" : "❌") + "|" + (day3.SHIFT_CLASS_RUN_STATUS ? "✔" : "❌") + "|" + day3.START_TIME.ToShortTimeString() + "~" + day3.END_TIME.ToShortTimeString() : ""; Data.NAME5 = day4 != null ? day4count + "|" + (day4.RUN_STATUS ? "✔" : "❌") + "|" + (day4.SHIFT_CLASS_RUN_STATUS ? "✔" : "❌") + "|" + day4.START_TIME.ToShortTimeString() + "~" + day4.END_TIME.ToShortTimeString() : ""; Data.NAME6 = day5 != null ? day5count + "|" + (day5.RUN_STATUS ? "✔" : "❌") + "|" + (day5.SHIFT_CLASS_RUN_STATUS ? "✔" : "❌") + "|" + day5.START_TIME.ToShortTimeString() + "~" + day5.END_TIME.ToShortTimeString() : ""; Data.NAME7 = day2 != null ? day2.START_TIME.Hour : 0; sDatas.Add(Data); } } var orderData = sDatas.OrderBy(t => t.NAME1).ThenBy(t => t.NAME7).ToList(); return orderData; }); } } }