diff --git a/APT.MicroApi/APT.PP.WebApi/Controllers/Api/SKController.cs b/APT.MicroApi/APT.PP.WebApi/Controllers/Api/SKController.cs index 011aa3a..1426e5d 100644 --- a/APT.MicroApi/APT.PP.WebApi/Controllers/Api/SKController.cs +++ b/APT.MicroApi/APT.PP.WebApi/Controllers/Api/SKController.cs @@ -713,7 +713,7 @@ namespace APT.PP.WebApi.Controllers.Api var userNames = users.Where(t => userIds.Contains(t.ID)).Select(m => m.NAME).Distinct().ToList(); record.CHECK_PERSON = string.Join(",", userNames); records.Add(record); - var noticeTask = NotificationTaskService.InsertUserNoticeTaskModel("安全检查记录(" + departName + ")", record.ID, filter.OrgId, userItem, users.FirstOrDefault(t => t.ID == userItem)?.NAME, DateTime.Now, DateTime.Now.AddHours(24), (int)FMNoticeTypeEnum.消息, "SK010"); + var noticeTask = NotificationTaskService.InsertUserNoticeTaskModel("安全检查记录(" + departName + ")", record.ID, filter.OrgId, userItem, users.FirstOrDefault(t => t.ID == userItem)?.NAME, DateTime.Now, DateTime.Now.AddHours(48), (int)FMNoticeTypeEnum.消息, "SK010"); noticeTasks.Add(noticeTask); } } @@ -810,7 +810,7 @@ namespace APT.PP.WebApi.Controllers.Api // "Nav_CheckRecordDetails.Nav_CheckRecordDetailUsers.ISMAINCHECK","Nav_CheckRecordDetails.Nav_CheckRecordDetailUsers.CHECKTIME","Nav_CheckRecordDetails.Nav_CheckRecordDetailUsers.ISCHECK", // "Nav_CheckRecordDetails.Nav_CheckRecordDetailUsers.SECURITY_INSPECTION_RECORD_DETAIL_ID","Nav_CheckRecordDetails.Nav_CheckRecordDetailBasics.SECURITY_INSPECTION_RECORD_DETAIL_ID", // "Nav_CheckRecordDetails.Nav_CheckRecordDetailBasics.LAW_ID" }; //指定字段,包括导航属性 - var notices = GetEntities(i => i.CHECK_TIME.Value.AddDays(1).Date == dtNow.Date && i.CHECK_TIME.Value.AddDays(1).Hour == dtNow.Hour && i.Nav_CheckType != null && !i.Nav_CheckType.NAME.Contains("岗位排查") && (i.STATUS == PFStandardStatus.Archived || i.STATUS == PFStandardStatus.Sign), baseFilter); + var notices = GetEntities(i => i.CHECK_TIME.Value.AddDays(2).Date == dtNow.Date && i.CHECK_TIME.Value.AddDays(2).Hour == dtNow.Hour && i.Nav_CheckType != null && !i.Nav_CheckType.NAME.Contains("岗位排查") && (i.STATUS == PFStandardStatus.Archived || i.STATUS == PFStandardStatus.Sign), baseFilter); var noticeIds = notices.Select(t => t.ID).ToList(); var sumNoticeIds = GetEntities(t => t.SECURITY_INSPECTION_NOTICE_ID != null && noticeIds.Contains((Guid)t.SECURITY_INSPECTION_NOTICE_ID), baseFilter).Select(m => m.SECURITY_INSPECTION_NOTICE_ID).Distinct().ToList(); var needDealIds = noticeIds.Where(t => !sumNoticeIds.Contains(t)).ToList(); diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs index d54e859..85ef04f 100644 --- a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIKanBanController.cs @@ -15,18 +15,22 @@ using APT.MS.Domain.Entities.FO; using APT.MS.Domain.Entities.HM; using APT.MS.Domain.Entities.SC.BI; using APT.MS.Domain.Entities.SE; +using APT.MS.Domain.Entities.SK; using APT.MS.Domain.Enums; +using APT.MS.Domain.Enums.SK; using APT.Utility; using InfluxData.Net.InfluxDb.Enums; using log4net.Core; using Microsoft.AspNetCore.Mvc; using Microsoft.Data.SqlClient; +using MySqlX.XDevAPI.Common; using NPOI.SS.Formula.Functions; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; +using System.Linq.Expressions; using static APT.SC.WebApi.Controllers.Api.BI.BIKanBanController; using static Google.Protobuf.WireFormat; using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database; @@ -869,6 +873,119 @@ namespace APT.SC.WebApi.Controllers.Api.BI return listResult; }); } + + /// + /// 获取子页 风险管控 + /// + /// + [HttpPost, Route("RiskManage")] + public JsonActionResult RiskManage([FromBody] KeywordFilter filter) + { + JsonActionResult result = new JsonActionResult(); + result.Data = new RiskManage(); + DataTable tableRiskList = new DataTable(); + DataTable tableRiskType = new DataTable(); + List riskTempList = new List(); + List riskList = new List(); + List riskTypeList = new List(); + List orgList = new List(); + string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value);//获取数据库链接 + using (var context = new MigrationContext(strConn)) + { + Expression> expression = e => !e.IS_DELETED; + Dictionary orders = new Dictionary(); + orders.Add("CREATE_TIME", DbOrder.DESC); + orgList = context.GetOrderEntities(expression, orders, null).ToList(); + } + using (SqlConnection connection = new SqlConnection(strConn)) + { + try + { + connection.Open(); + //各家公司风险列表、各家公司风险图 + string sqlRisk = "select * from vhome_library_risklist_data"; + SqlCommand comRisk = new SqlCommand(sqlRisk, connection); + SqlDataAdapter riskData = new SqlDataAdapter(comRisk); + riskData.Fill(tableRiskList); + if (tableRiskList != null && tableRiskList.Rows.Count > 0) + { + foreach (DataRow item in tableRiskList.Rows) + { + RiskTempList risk = new RiskTempList(); + risk.companyName = item["companyName"] != null ? item["companyName"].ToString() : null; + risk.cnt = int.Parse(item["cnt"].ToString()) != 0 ? int.Parse(item["cnt"].ToString()) : 0; + risk.riskType = item["riskType"] != null ? item["riskType"].ToString() : null; + riskTempList.Add(risk); + } + } + //各家公司风险类别图 + string sqlRiskType = "select RISK_NAME as typeName,count(1) as qty from vhome_library_data GROUP BY RISK_NAME ORDER BY qty desc"; + SqlCommand comRiskType = new SqlCommand(sqlRiskType, connection); + SqlDataAdapter riskTypeData = new SqlDataAdapter(comRiskType); + riskTypeData.Fill(tableRiskType); + if (tableRiskType != null && tableRiskType.Rows.Count > 0) + { + foreach (DataRow item in tableRiskType.Rows) + { + RiskTypeList risk = new RiskTypeList(); + risk.typeName = item["typeName"] != null ? item["typeName"].ToString() : null; + risk.qty = int.Parse(item["qty"].ToString()) != 0 ? int.Parse(item["qty"].ToString()) : 0; + riskTypeList.Add(risk); + } + } + connection.Close(); + } + catch (Exception ex) + { + if (!string.IsNullOrEmpty(ex.StackTrace)) + throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); + else + throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); + } + } + //行转列 + var groupList = riskTempList + .GroupBy(x => x.companyName) + .Select(g => new RiskList + { + companyName = g.Key, + majorCount = g.First(x => x.riskType == SKEvaluateLevelEnum.重大风险.GetDescription()).cnt, + largerCount = g.First(x => x.riskType == SKEvaluateLevelEnum.较大风险.GetDescription()).cnt, + generalCount = g.First(x => x.riskType == SKEvaluateLevelEnum.一般风险.GetDescription()).cnt, + lowCount = g.First(x => x.riskType == SKEvaluateLevelEnum.低风险.GetDescription()).cnt, + totalCount = g.Sum(x=>x.cnt) + }).ToList(); + if (orgList != null && orgList.Any()) + { + foreach (var item in orgList) + { + var first = groupList.FirstOrDefault(t => t.companyName == item.NAME); + RiskList risk = new RiskList(); + risk.companyName = item.NAME; + if (first != null) + { + risk.majorCount = first.majorCount; + risk.largerCount = first.largerCount; + risk.generalCount = first.generalCount; + risk.lowCount = first.lowCount; + risk.totalCount = first.totalCount; + } + else + { + risk.majorCount = 0; + risk.largerCount = 0; + risk.generalCount = 0; + risk.lowCount = 0; + risk.totalCount = 0; + } + riskList.Add(risk); + } + } + result.Data.riskList = riskList; + result.Data.riskTypeList = riskTypeList; + return result; + + } } /// @@ -889,4 +1006,71 @@ namespace APT.SC.WebApi.Controllers.Api.BI /// public List hiddenRanking { get; set; } } + /// + /// 风险管控 返参 + /// + public class RiskManage + { + /// + /// 各家公司风险列表、各家公司风险图 + /// + public List riskList { get; set; } + /// + /// 各家公司风险类别图 + /// + public List riskTypeList { get; set; } + } + public class RiskTempList + { + /// + /// 公司名称 + /// + public string companyName { get; set; } + /// + /// 风险类别 + /// + public string riskType { get; set; } + /// + /// 数量 + /// + public int? cnt { get; set; } + } + public class RiskList + { + /// + /// 公司名称 + /// + public string companyName { get; set; } + /// + /// 重大风险数量 + /// + public int? majorCount { get; set; } + /// + /// 较大风险数量 + /// + public int? largerCount { get; set; } + /// + /// 一般风险数量 + /// + public int? generalCount { get; set; } + /// + /// 低风险数量 + /// + public int? lowCount { get; set; } + /// + /// 小计数量 + /// + public int? totalCount { get; set; } + } + public class RiskTypeList + { + /// + /// 风险类别 + /// + public string typeName { get; set; } + /// + /// 数量 + /// + public int? qty { get; set; } + } }