This commit is contained in:
何美荣 2026-04-30 15:12:45 +08:00
parent 959ecc8480
commit 521e118f4f
2 changed files with 186 additions and 2 deletions

View File

@ -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<T_SK_SECURITY_INSPECTION_NOTICE>(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<T_SK_SECURITY_INSPECTION_NOTICE>(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_SK_SECURITY_INSPECTION_RECORD_SUMMARY>(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();

View File

@ -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;
});
}
/// <summary>
/// 获取子页 风险管控
/// </summary>
/// <param name="filter"></param>
[HttpPost, Route("RiskManage")]
public JsonActionResult<RiskManage> RiskManage([FromBody] KeywordFilter filter)
{
JsonActionResult<RiskManage> result = new JsonActionResult<RiskManage>();
result.Data = new RiskManage();
DataTable tableRiskList = new DataTable();
DataTable tableRiskType = new DataTable();
List<RiskTempList> riskTempList = new List<RiskTempList>();
List<RiskList> riskList = new List<RiskList>();
List<RiskTypeList> riskTypeList = new List<RiskTypeList>();
List<T_FM_ORGANIZATION> orgList = new List<T_FM_ORGANIZATION>();
string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value);//获取数据库链接
using (var context = new MigrationContext(strConn))
{
Expression<Func<T_FM_ORGANIZATION, bool>> expression = e => !e.IS_DELETED;
Dictionary<string, DbOrder> orders = new Dictionary<string, DbOrder>();
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;
}
}
/// <summary>
@ -889,4 +1006,71 @@ namespace APT.SC.WebApi.Controllers.Api.BI
/// </summary>
public List<dynamic> hiddenRanking { get; set; }
}
/// <summary>
/// 风险管控 返参
/// </summary>
public class RiskManage
{
/// <summary>
/// 各家公司风险列表、各家公司风险图
/// </summary>
public List<RiskList> riskList { get; set; }
/// <summary>
/// 各家公司风险类别图
/// </summary>
public List<RiskTypeList> riskTypeList { get; set; }
}
public class RiskTempList
{
/// <summary>
/// 公司名称
/// </summary>
public string companyName { get; set; }
/// <summary>
/// 风险类别
/// </summary>
public string riskType { get; set; }
/// <summary>
/// 数量
/// </summary>
public int? cnt { get; set; }
}
public class RiskList
{
/// <summary>
/// 公司名称
/// </summary>
public string companyName { get; set; }
/// <summary>
/// 重大风险数量
/// </summary>
public int? majorCount { get; set; }
/// <summary>
/// 较大风险数量
/// </summary>
public int? largerCount { get; set; }
/// <summary>
/// 一般风险数量
/// </summary>
public int? generalCount { get; set; }
/// <summary>
/// 低风险数量
/// </summary>
public int? lowCount { get; set; }
/// <summary>
/// 小计数量
/// </summary>
public int? totalCount { get; set; }
}
public class RiskTypeList
{
/// <summary>
/// 风险类别
/// </summary>
public string typeName { get; set; }
/// <summary>
/// 数量
/// </summary>
public int? qty { get; set; }
}
}