2026-01-20 11:05:15 +08:00
using APT.BaseData.Domain.Entities ;
using APT.BaseData.Domain.Entities.FM ;
using APT.BaseData.Domain.Entities.OP ;
using APT.BaseData.Domain.Enums ;
using APT.BaseData.Domain.IServices.FM ;
2026-01-20 14:22:50 +08:00
using APT.BaseData.Domain.IServices.OP ;
2026-01-20 11:05:15 +08:00
using APT.BaseData.Services.Services.FM ;
2026-01-20 14:10:41 +08:00
using APT.BaseData.Services.Services.OP ;
2026-01-20 11:05:15 +08:00
using APT.Infrastructure.Api ;
using APT.Infrastructure.Core ;
using APT.Migrations ;
using APT.MS.Domain.Entities.BI ;
using APT.MS.Domain.Entities.BS ;
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 ;
2026-04-30 15:12:45 +08:00
using APT.MS.Domain.Entities.SK ;
2026-01-20 11:05:15 +08:00
using APT.MS.Domain.Enums ;
2026-04-30 15:12:45 +08:00
using APT.MS.Domain.Enums.SK ;
2026-01-20 11:05:15 +08:00
using APT.Utility ;
using InfluxData.Net.InfluxDb.Enums ;
using log4net.Core ;
using Microsoft.AspNetCore.Mvc ;
using Microsoft.Data.SqlClient ;
2026-04-30 15:12:45 +08:00
using MySqlX.XDevAPI.Common ;
2026-01-20 11:05:15 +08:00
using NPOI.SS.Formula.Functions ;
using System ;
using System.Collections.Generic ;
using System.Collections.ObjectModel ;
using System.Data ;
2026-01-20 10:49:21 +08:00
using System.Linq ;
2026-04-30 15:12:45 +08:00
using System.Linq.Expressions ;
2026-01-20 14:10:41 +08:00
using static APT . SC . WebApi . Controllers . Api . BI . BIKanBanController ;
2026-01-20 11:05:15 +08:00
using static Google . Protobuf . WireFormat ;
using static Microsoft . EntityFrameworkCore . DbLoggerCategory . Database ;
using static NPOI . HSSF . Util . HSSFColor ;
namespace APT.SC.WebApi.Controllers.Api.BI
{
/// <summary>
/// 看板
/// </summary>
[Route("api/BI/BIKanBanController")]
public class BIKanBanController : APTApiController < T_FM_NOTIFICATION_TASK >
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:22:50 +08:00
IOPTenantDBConnService OPTenantDBConnService { get ; set ; }
public BIKanBanController ( IOPTenantDBConnService opTenantDBConnService )
{
OPTenantDBConnService = opTenantDBConnService ;
}
2026-01-16 16:47:53 +08:00
/// <summary>
/// 返回所有
/// </summary>
public class ReturnAll
{
//风险等级占比
public List < RiskTypeRate > riskTypeRate { get ; set ; }
//当日工作票排名前三
public List < JobTodayTop3 > jobTodayTop3 { get ; set ; }
2026-04-24 18:03:56 +08:00
//当日工作票统计数量
2026-04-28 16:58:46 +08:00
public List < JobTodayQty > jobTodayQty { get ; set ; }
2026-01-16 16:47:53 +08:00
//隐患整改率
public HiddenRectify hiddenRectify { get ; set ; }
2026-04-24 18:03:56 +08:00
//隐患统计数据
public HiddenSummary hiddenSummary { get ; set ; }
2026-01-16 16:47:53 +08:00
//各事项排名前三
public List < TaskTop3 > taskTop3 { get ; set ; }
//作业现场完成情况统计
public List < JobFinishRate > jobFinishRate { get ; set ; }
//各公司安全检查统计
2026-01-20 11:05:15 +08:00
public List < SafeCheckSum > safeCheckSum { get ; set ; }
2026-01-20 14:10:41 +08:00
//各公司危险作业统计
public List < LinkSum > linkSum { get ; set ; }
2026-01-20 11:05:15 +08:00
public List < SETRAINSHOW > listSETrainSum { get ; set ; }
}
2026-01-16 16:47:53 +08:00
/// <summary>
/// 风险等级占比
2026-01-20 11:05:15 +08:00
/// </summary>
public class RiskTypeRate
{
public string riskType { get ; set ; }
public int count { get ; set ; }
public string rate { get ; set ; }
2026-01-16 16:47:53 +08:00
}
/// <summary>
/// 当日工作票排名前三
2026-01-20 11:05:15 +08:00
/// </summary>
public class JobTodayTop3
2026-01-16 16:47:53 +08:00
{
2026-01-16 17:32:38 +08:00
public int totalQty { get ; set ; }
2026-01-20 11:05:15 +08:00
public int num { get ; set ; }
public string company { get ; set ; }
public List < JobTodayDetail > details { get ; set ; }
}
public class JobTodayDetail
2026-01-16 16:47:53 +08:00
{
2026-01-20 11:05:15 +08:00
public string company { get ; set ; }
public string jobName { get ; set ; }
public int qty { get ; set ; }
2026-01-16 16:47:53 +08:00
}
/// <summary>
2026-04-24 18:03:56 +08:00
/// 当日工作票统计数量
/// </summary>
public class JobTodayQty
{
public int qty { get ; set ; }
public Guid workTypeId { get ; set ; }
public string name { get ; set ; }
}
/// <summary>
2026-01-16 16:47:53 +08:00
/// 隐患整改率
2026-01-20 11:05:15 +08:00
/// </summary>
public class HiddenRectify
2026-01-16 16:47:53 +08:00
{
public int qty { get ; set ; }
public int ontimeQty { get ; set ; }
public int delayQty { get ; set ; }
2026-01-20 11:05:15 +08:00
public string rate { get ; set ; }
2026-01-16 16:47:53 +08:00
}
/// <summary>
2026-04-24 18:03:56 +08:00
/// 隐患统计数据
/// </summary>
public class HiddenSummary
{
public int majorQty { get ; set ; }
public int generalQty { get ; set ; }
public int unfinishQty { get ; set ; }
public int monthMajorQty { get ; set ; }
public int unfinishMonthMajorQty { get ; set ; }
public int monthGeneralQty { get ; set ; }
public int unfinishMonthGeneralQty { get ; set ; }
}
/// <summary>
2026-01-16 16:47:53 +08:00
/// 各事项排名前三
2026-01-20 11:05:15 +08:00
/// </summary>
public class TaskTopTemp
2026-01-16 16:47:53 +08:00
{
public int totalQty { get ; set ; }
2026-01-20 11:05:15 +08:00
public int qty { get ; set ; }
2026-01-16 16:47:53 +08:00
public string company { get ; set ; }
2026-01-20 11:05:15 +08:00
public string type { get ; set ; }
}
public class TaskTop3
2026-01-16 16:47:53 +08:00
{
2026-01-20 11:05:15 +08:00
public int totalQty { get ; set ; }
public string company { get ; set ; }
public List < TaskTopDetail > details { get ; set ; }
}
public class TaskTopDetail
{
public string name { get ; set ; }
public int qty { get ; set ; }
2026-01-16 16:47:53 +08:00
}
/// <summary>
/// 作业现场完成情况统计
2026-01-20 11:05:15 +08:00
/// </summary>
public class JobFinishRate
{
public string name { get ; set ; }
2026-01-16 16:47:53 +08:00
public int qty { get ; set ; }
public int finishQty { get ; set ; }
2026-01-20 11:05:15 +08:00
public string rate { get ; set ; }
2026-01-16 16:47:53 +08:00
}
/// <summary>
/// 各公司安全检查统计
/// </summary>
2026-01-20 11:05:15 +08:00
public class SafeCheckSum
{
public string company { get ; set ; }
2026-01-16 16:47:53 +08:00
public int qty { get ; set ; }
2026-01-20 11:05:15 +08:00
public int num { get ; set ; }
2026-01-16 16:47:53 +08:00
}
2026-01-20 14:10:41 +08:00
/// <summary>
/// 各公司危险作业统计
/// </summary>
public class LinkSum
{
public string name { get ; set ; }
public int qty { get ; set ; }
}
2026-01-20 10:49:21 +08:00
/// <summary>
/// 培训教育学时获取
/// </summary>
public class SETRAIN
{
/// <summary>
/// 公司名称
/// </summary>
public string CN { get ; set ; }
/// <summary>
///
/// </summary>
public Guid ORG_ID { get ; set ; }
/// <summary>
/// 培训时长
/// </summary>
public decimal TRAIN_HOUR { get ; set ; }
/// <summary>
/// 开始时间
/// </summary>
public DateTime START_TIME { get ; set ; }
}
public class SETRAINSHOW
{
/// <summary>
/// 公司名称
/// </summary>
public string CN { get ; set ; }
/// <summary>
///
/// </summary>
public Guid ORG_ID { get ; set ; }
/// <summary>
/// 当前年月
/// </summary>
public DateTime dtNowYM { get ; set ; }
/// <summary>
/// 当前年月-1
/// </summary>
public DateTime dtNowYM_1 { get ; set ; }
public DateTime dtNowYM_2 { get ; set ; }
public DateTime dtNowYM_3 { get ; set ; }
public DateTime dtNowYM_4 { get ; set ; }
public DateTime dtNowYM_5 { get ; set ; }
/// <summary>
/// 当前月 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR { get ; set ; }
/// <summary>
/// 当前月-1 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR_1 { get ; set ; }
/// <summary>
/// 当前月-2 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR_2 { get ; set ; }
/// <summary>
/// 当前月-3 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR_3 { get ; set ; }
/// <summary>
/// 当前月-4 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR_4 { get ; set ; }
/// <summary>
/// 当前月-5 培训时长总和
/// </summary>
public decimal SUM_TRAIN_HOUR_5 { get ; set ; }
}
2026-01-20 11:05:15 +08:00
/// <summary>
/// 返回看板所有接口
/// </summary>
/// <param name="filter">分页过滤实体</param>
/// <returns></returns>
[HttpPost, Route("ReturnAllData")]
2026-01-20 14:10:41 +08:00
public JsonActionResult < ReturnAll > ReturnAllData ( [ FromBody ] KeywordFilter filter )
2026-01-20 11:05:15 +08:00
{
2026-03-02 11:34:10 +08:00
//string connhead = ConfigurationManager.ConnectionStrings["head"];
2026-01-20 14:10:41 +08:00
JsonActionResult < ReturnAll > result = new JsonActionResult < ReturnAll > ( ) ;
result . Data = new ReturnAll ( ) ;
DataTable tableRisk = new DataTable ( ) ;
DataTable tableJobGroup = new DataTable ( ) ;
DataTable tableHidden = new DataTable ( ) ;
DataTable tableTask = new DataTable ( ) ;
DataTable tableJobRate = new DataTable ( ) ;
DataTable tableSafeCheck = new DataTable ( ) ;
DataTable tableLink = new DataTable ( ) ;
2026-01-20 14:22:50 +08:00
//培训教育 对应统计
var ListAllORG = GetEntities < T_FM_ORGANIZATION > ( e = > ! e . IS_DELETED & & e . CODE ! = "003" , null , null ) . OrderBy ( e = > e . TENANT_CODE ) . ToList ( ) ;
string strConn = OPTenantDBConnService . GetConnByORGID ( filter . OrgId . Value ) ; //获取数据库链接
List < string > listVNAME = new List < string > ( ) { "vhome_Train_Hour" } ; //, "vhome_risk_type_data"
DataSet ds = new DataSet ( ) ;
GETDBDATA ( strConn , listVNAME , ref ds ) ; //获取视图 数据 listVNAME 与 ds.Tables 一一对应
result . Data . listSETrainSum = GetTrainInfo ( ds . Tables [ 0 ] , ListAllORG ) ;
2026-03-02 11:34:10 +08:00
using ( SqlConnection connection = new SqlConnection ( strConn ) )
2026-01-20 14:10:41 +08:00
{
try
{
connection . Open ( ) ;
//风险等级占比
string sqlRisk = "select * from vhome_risk_type_data " ;
SqlCommand comRisk = new SqlCommand ( sqlRisk , connection ) ;
SqlDataAdapter riskData = new SqlDataAdapter ( comRisk ) ;
riskData . Fill ( tableRisk ) ;
2026-03-02 11:34:10 +08:00
result . Data . riskTypeRate = RiskTypeRateData ( tableRisk ) ;
2026-01-20 14:10:41 +08:00
//当日工作票排名前三
2026-04-24 18:03:56 +08:00
//string sqlJob = "select * from vhome_jobtop3_today ";
//SqlCommand comJob = new SqlCommand(sqlJob, connection);
//SqlDataAdapter jobData = new SqlDataAdapter(comJob);
//jobData.Fill(tableJob);
//string sqlJobGroup = "select* from vhome_jobdata_today_group";
//SqlCommand comJobGroup = new SqlCommand(sqlJobGroup, connection);
//SqlDataAdapter jobGroupData = new SqlDataAdapter(comJobGroup);
//jobGroupData.Fill(tableJobGroup);
//result.Data.jobTodayTop3 = JobTodayTopData(filter.OrgId.Value, tableJob, tableJobGroup);
2026-05-21 15:09:28 +08:00
2026-04-24 18:03:56 +08:00
//隐患统计数据
string sqlHidden = "select * from vhome_hiddenSummary" ;
2026-01-20 14:10:41 +08:00
SqlCommand comHidden = new SqlCommand ( sqlHidden , connection ) ;
SqlDataAdapter hiddenData = new SqlDataAdapter ( comHidden ) ;
hiddenData . Fill ( tableHidden ) ;
2026-04-24 18:03:56 +08:00
result . Data . hiddenSummary = HiddenSummaryData ( tableHidden ) ;
//隐患整改率
//string sqlHidden = "select * from vhome_hidden_data_result ";
//SqlCommand comHidden = new SqlCommand(sqlHidden, connection);
//SqlDataAdapter hiddenData = new SqlDataAdapter(comHidden);
//hiddenData.Fill(tableHidden);
//result.Data.hiddenRectify = HiddenRectifyData(tableHidden);
2026-01-20 14:10:41 +08:00
//各事项排名前三
2026-04-24 18:03:56 +08:00
//string sqlTask = "select * from vhome_task_data_result ";
//SqlCommand comTask = new SqlCommand(sqlTask, connection);
//SqlDataAdapter taskData = new SqlDataAdapter(comTask);
//taskData.Fill(tableTask);
//result.Data.taskTop3 = TaskTopData(tableTask);
2026-01-20 14:10:41 +08:00
//作业现场完成情况统计
2026-04-24 18:03:56 +08:00
//string sqlJobRate = "select * from vhome_jobrecord_data ";
//SqlCommand comJobRate = new SqlCommand(sqlJobRate, connection);
//SqlDataAdapter jobRateData = new SqlDataAdapter(comJobRate);
//jobRateData.Fill(tableJobRate);
//result.Data.jobFinishRate = jobFinishRateData(tableJobRate);
2026-01-20 14:10:41 +08:00
//各公司安全检查统计
2026-04-24 18:03:56 +08:00
//string sqlSafecCheck = "select * from vhome_check_total ";
//SqlCommand comSafecCheck = new SqlCommand(sqlSafecCheck, connection);
//SqlDataAdapter safecCheckData = new SqlDataAdapter(comSafecCheck);
//safecCheckData.Fill(tableSafeCheck);
//result.Data.safeCheckSum = safeCheckSumData(tableSafeCheck);
2026-01-20 14:10:41 +08:00
//各公司危险分类统计
2026-04-24 18:03:56 +08:00
//string sqlLink = "select * from vhome_operationLink_data ";
//SqlCommand comLink = new SqlCommand(sqlLink, connection);
//SqlDataAdapter linkData = new SqlDataAdapter(comLink);
//linkData.Fill(tableLink);
//result.Data.linkSum = linkSumData(tableLink);
2026-01-20 14:10:41 +08:00
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 ) ;
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 10:49:21 +08:00
/// <summary>
/// 获取视图数据
/// </summary>
/// <param name="conn"></param>
/// <param name="listVNAME"></param>
/// <param name="DataADP">数据集</param>
/// <exception cref="Exception"></exception>
private void GETDBDATA ( string conn , List < string > listVNAME , ref DataSet ds )
{
List < RiskTypeRate > result = new List < RiskTypeRate > ( ) ;
//DataTable Table = new DataTable();
ds = new DataSet ( ) ;
using ( SqlConnection connection = new SqlConnection ( conn ) )
{
try
{
connection . Open ( ) ;
string sql = string . Empty ;
foreach ( var item in listVNAME )
{
sql + = string . Format ( " select * from {0} " , item ) ;
}
using ( SqlCommand Com = new SqlCommand ( sql , connection ) )
{
SqlDataAdapter DataADP = new SqlDataAdapter ( Com ) ;
DataADP . Fill ( ds ) ;
}
connection . Close ( ) ;
}
2026-01-20 11:05:15 +08:00
catch ( Exception ex )
{
if ( ! string . IsNullOrEmpty ( ex . StackTrace ) )
throw new Exception ( "错误日志:[StackTrace]" + ex . StackTrace ) ;
else
throw new Exception ( "【" + HttpContext . Request . Path + "】错误日志:[Message]" + ex . Message ) ;
2026-01-20 10:49:21 +08:00
}
}
}
2026-01-20 11:05:15 +08:00
/// <summary>
/// 风险等级占比
/// </summary>
/// <param name="filter">分页过滤实体</param>
2026-03-02 11:34:10 +08:00
public List < RiskTypeRate > RiskTypeRateData ( DataTable Table )
2026-01-20 11:05:15 +08:00
{
2026-01-16 16:47:53 +08:00
List < RiskTypeRate > result = new List < RiskTypeRate > ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
foreach ( DataRow item in Table . Rows )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
result . Add ( new RiskTypeRate ( )
2026-01-20 11:05:15 +08:00
{
2026-01-20 14:10:41 +08:00
riskType = item [ "风险类别" ] ! = null ? item [ "风险类别" ] . ToString ( ) : null ,
count = int . Parse ( item [ "数量" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "数量" ] . ToString ( ) ) : 0 ,
rate = item [ "占比" ] ! = null ? item [ "占比" ] . ToString ( ) : "0"
} ) ;
2026-01-16 16:47:53 +08:00
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 10:49:21 +08:00
2026-01-20 11:05:15 +08:00
/// <summary>
/// 当日工作票排名前三
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public List < JobTodayTop3 > JobTodayTopData ( Guid orgId , DataTable Table , DataTable Table2 )
2026-01-20 11:05:15 +08:00
{
2026-01-16 16:47:53 +08:00
List < JobTodayTop3 > result = new List < JobTodayTop3 > ( ) ;
var details = new List < JobTodayDetail > ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
foreach ( DataRow item in Table . Rows )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
var JobTodayTop3 = new JobTodayTop3 ( ) ;
JobTodayTop3 . totalQty = int . Parse ( item [ "今日总数" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "今日总数" ] . ToString ( ) ) : 0 ;
JobTodayTop3 . num = int . Parse ( item [ "排名" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "排名" ] . ToString ( ) ) : 0 ;
JobTodayTop3 . company = item [ "公司名称" ] ! = null ? item [ "公司名称" ] . ToString ( ) : "" ;
result . Add ( JobTodayTop3 ) ;
}
}
if ( Table2 ! = null & & Table2 . Rows . Count > 0 )
{
foreach ( DataRow item2 in Table2 . Rows )
{
var JobTodayDetail = new JobTodayDetail ( ) ;
JobTodayDetail . qty = int . Parse ( item2 [ "cnt" ] . ToString ( ) ) ! = 0 ? int . Parse ( item2 [ "cnt" ] . ToString ( ) ) : 0 ;
JobTodayDetail . jobName = item2 [ "stepid" ] ! = null ? item2 [ "stepid" ] . ToString ( ) : null ;
JobTodayDetail . company = item2 [ "db_name" ] ! = null ? item2 [ "db_name" ] . ToString ( ) : null ;
details . Add ( JobTodayDetail ) ;
}
}
if ( result ! = null & & result . Any ( ) )
{
foreach ( var da in result )
{
var temps = details . Where ( t = > t . company = = da . company ) . ToList ( ) ;
if ( temps . Any ( ) )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
var detailTemps = new List < JobTodayDetail > ( ) ;
foreach ( var de in temps )
2026-01-16 16:47:53 +08:00
{
var JobTodayDetail = new JobTodayDetail ( ) ;
2026-01-20 14:10:41 +08:00
JobTodayDetail . qty = de . qty ;
2026-01-20 17:56:05 +08:00
JobTodayDetail . jobName = de . jobName ;
2026-01-20 14:10:41 +08:00
JobTodayDetail . company = de . company ;
detailTemps . Add ( JobTodayDetail ) ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 14:10:41 +08:00
da . details = detailTemps ;
2026-01-16 16:47:53 +08:00
}
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-16 16:47:53 +08:00
}
2026-04-24 18:03:56 +08:00
/// <summary>
/// 当日工作票统计数量
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
public List < JobTodayQty > JobTodayQtyData ( DataTable Table )
{
List < JobTodayQty > result = new List < JobTodayQty > ( ) ;
if ( Table ! = null & & Table . Rows . Count > 0 )
{
foreach ( DataRow item in Table . Rows )
{
result . Add ( new JobTodayQty ( )
{
qty = int . Parse ( Table . Rows [ 0 ] [ "QTY" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "QTY" ] . ToString ( ) ) : 0 ,
workTypeId = Guid . Parse ( Table . Rows [ 0 ] [ "WORK_PERMIT_TYPE_ID" ] . ToString ( ) ) ,
name = Table . Rows [ 0 ] [ "NAME" ] ! = null ? Table . Rows [ 0 ] [ "NAME" ] . ToString ( ) : null
} ) ;
}
}
return result ;
}
2026-01-20 11:05:15 +08:00
/// <summary>
/// 隐患整改率
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public HiddenRectify HiddenRectifyData ( DataTable Table )
2026-01-16 16:47:53 +08:00
{
HiddenRectify result = new HiddenRectify ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
result . qty = int . Parse ( Table . Rows [ 0 ] [ "隐患数" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "隐患数" ] . ToString ( ) ) : 0 ;
result . ontimeQty = int . Parse ( Table . Rows [ 0 ] [ "按期整改数" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "按期整改数" ] . ToString ( ) ) : 0 ;
result . delayQty = int . Parse ( Table . Rows [ 0 ] [ "延期整改数" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "延期整改数" ] . ToString ( ) ) : 0 ;
result . rate = Table . Rows [ 0 ] [ "整改率" ] ! = null ? Table . Rows [ 0 ] [ "整改率" ] . ToString ( ) : null ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-16 16:47:53 +08:00
}
2026-04-24 18:03:56 +08:00
/// <summary>
/// 隐患统计数据
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
public HiddenSummary HiddenSummaryData ( DataTable Table )
{
HiddenSummary result = new HiddenSummary ( ) ;
if ( Table ! = null & & Table . Rows . Count > 0 )
{
result . majorQty = int . Parse ( Table . Rows [ 0 ] [ "majorQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "majorQty" ] . ToString ( ) ) : 0 ;
result . generalQty = int . Parse ( Table . Rows [ 0 ] [ "generalQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "generalQty" ] . ToString ( ) ) : 0 ;
result . unfinishQty = int . Parse ( Table . Rows [ 0 ] [ "unfinishQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "unfinishQty" ] . ToString ( ) ) : 0 ;
result . monthMajorQty = int . Parse ( Table . Rows [ 0 ] [ "monthMajorQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "monthMajorQty" ] . ToString ( ) ) : 0 ;
result . unfinishMonthMajorQty = int . Parse ( Table . Rows [ 0 ] [ "unfinishMonthMajorQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "unfinishMonthMajorQty" ] . ToString ( ) ) : 0 ;
result . monthGeneralQty = int . Parse ( Table . Rows [ 0 ] [ "monthGeneralQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "monthGeneralQty" ] . ToString ( ) ) : 0 ;
result . unfinishMonthGeneralQty = int . Parse ( Table . Rows [ 0 ] [ "unfinishMonthGeneralQty" ] . ToString ( ) ) ! = 0 ? int . Parse ( Table . Rows [ 0 ] [ "unfinishMonthGeneralQty" ] . ToString ( ) ) : 0 ;
}
return result ;
}
2026-01-20 11:05:15 +08:00
/// <summary>
/// 各事项排名前三
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public List < TaskTop3 > TaskTopData ( DataTable Table )
2026-01-20 11:05:15 +08:00
{
2026-01-16 16:47:53 +08:00
List < TaskTop3 > result = new List < TaskTop3 > ( ) ;
var dataTemps = new List < TaskTopTemp > ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
foreach ( DataRow item in Table . Rows )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
var JobTodayTop3 = new TaskTopTemp ( ) ;
JobTodayTop3 . totalQty = int . Parse ( item [ "待办总数" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "待办总数" ] . ToString ( ) ) : 0 ;
JobTodayTop3 . qty = int . Parse ( item [ "数量" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "数量" ] . ToString ( ) ) : 0 ;
JobTodayTop3 . company = item [ "公司名称" ] ! = null ? item [ "公司名称" ] . ToString ( ) : "" ;
JobTodayTop3 . type = item [ "类型" ] ! = null ? item [ "类型" ] . ToString ( ) : "" ;
dataTemps . Add ( JobTodayTop3 ) ;
}
}
if ( dataTemps ! = null & & dataTemps . Any ( ) )
{
var dataGroup = dataTemps . GroupBy ( t = > new { t . company , t . totalQty } ) . ToList ( ) ;
foreach ( var da in dataGroup )
{
var TaskTop3 = new TaskTop3 ( ) ;
TaskTop3 . company = da . Key . company ;
TaskTop3 . totalQty = da . Key . totalQty ;
var temps = dataTemps . Where ( t = > t . company = = da . Key . company ) . ToList ( ) ;
if ( temps . Any ( ) )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
var detailTemps = new List < TaskTopDetail > ( ) ;
foreach ( var de in temps )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
var JobTodayDetail = new TaskTopDetail ( ) ;
JobTodayDetail . qty = de . qty ;
JobTodayDetail . name = de . type ;
detailTemps . Add ( JobTodayDetail ) ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 14:10:41 +08:00
TaskTop3 . details = detailTemps ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 14:10:41 +08:00
result . Add ( TaskTop3 ) ;
2026-01-16 16:47:53 +08:00
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-20 10:49:21 +08:00
}
2026-01-16 16:47:53 +08:00
2026-01-20 11:05:15 +08:00
/// <summary>
/// 作业现场完成情况统计
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public List < JobFinishRate > jobFinishRateData ( DataTable Table )
2026-01-20 11:05:15 +08:00
{
2026-01-16 16:47:53 +08:00
List < JobFinishRate > result = new List < JobFinishRate > ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
foreach ( DataRow item in Table . Rows )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
result . Add ( new JobFinishRate ( )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
name = item [ "表单名称" ] ! = null ? item [ "表单名称" ] . ToString ( ) : null ,
qty = int . Parse ( item [ "总数" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "总数" ] . ToString ( ) ) : 0 ,
finishQty = int . Parse ( item [ "完成数" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "完成数" ] . ToString ( ) ) : 0 ,
rate = item [ "完成率" ] ! = null ? item [ "完成率" ] . ToString ( ) : null ,
} ) ;
2026-01-16 16:47:53 +08:00
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 10:49:21 +08:00
2026-01-16 16:47:53 +08:00
2026-01-20 11:05:15 +08:00
/// <summary>
/// 各公司安全检查统计
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public List < SafeCheckSum > safeCheckSumData ( DataTable Table )
2026-01-20 11:05:15 +08:00
{
2026-01-16 16:47:53 +08:00
List < SafeCheckSum > result = new List < SafeCheckSum > ( ) ;
2026-01-20 14:10:41 +08:00
if ( Table ! = null & & Table . Rows . Count > 0 )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
foreach ( DataRow item in Table . Rows )
2026-01-16 16:47:53 +08:00
{
2026-01-20 14:10:41 +08:00
result . Add ( new SafeCheckSum ( )
2026-01-20 11:05:15 +08:00
{
2026-01-20 14:10:41 +08:00
company = item [ "公司名称" ] ! = null ? item [ "公司名称" ] . ToString ( ) : null ,
qty = int . Parse ( item [ "数量" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "数量" ] . ToString ( ) ) : 0 ,
num = int . Parse ( item [ "排名" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "排名" ] . ToString ( ) ) : 0 ,
} ) ;
2026-01-16 16:47:53 +08:00
}
2026-01-20 14:10:41 +08:00
}
return result ;
}
/// <summary>
/// 各公司危险作业统计
/// </summary>
/// <param name="filter">参数</param>
/// <returns></returns>
2026-03-02 11:34:10 +08:00
public List < LinkSum > linkSumData ( DataTable Table )
2026-01-20 14:10:41 +08:00
{
List < LinkSum > result = new List < LinkSum > ( ) ;
if ( Table ! = null & & Table . Rows . Count > 0 )
{
foreach ( DataRow item in Table . Rows )
2026-01-20 11:05:15 +08:00
{
2026-01-20 14:10:41 +08:00
result . Add ( new LinkSum ( )
{
name = item [ "NAME" ] ! = null ? item [ "NAME" ] . ToString ( ) : null ,
qty = ! string . IsNullOrEmpty ( item [ "cnt" ] . ToString ( ) ) & & int . Parse ( item [ "cnt" ] . ToString ( ) ) ! = 0 ? int . Parse ( item [ "cnt" ] . ToString ( ) ) : 0
} ) ;
2026-01-16 16:47:53 +08:00
}
}
2026-01-20 11:05:15 +08:00
return result ;
2026-01-20 10:49:21 +08:00
}
/// <summary>
/// 数据整理 培训教育
/// </summary>
/// <param name="dtTRAIN"></param>
/// <param name="listORG"></param>
/// <returns></returns>
private List < SETRAINSHOW > GetTrainInfo ( DataTable dtTRAIN , List < T_FM_ORGANIZATION > listORG )
{
List < SETRAIN > ListTRAIN = DataHelper . TableToList < SETRAIN > ( dtTRAIN ) ;
List < SETRAINSHOW > dtInfo = new List < SETRAINSHOW > ( ) ;
//所有公司 按月 倒推 6 个月的数据
List < DateTime > listDate = new List < DateTime > ( ) ;
DateTime dtNowYM = Convert . ToDateTime ( DateTime . Now . ToString ( "yyyy-MM-01 00:00:00" ) ) ;
for ( int i = 0 ; i < 6 ; i + + )
{
listDate . Add ( dtNowYM . AddMonths ( - 1 * i ) ) ;
}
foreach ( var item in listORG )
{
SETRAINSHOW SUMCNPer = new SETRAINSHOW ( ) ;
SUMCNPer . ORG_ID = item . ORG_ID . Value ;
SUMCNPer . CN = item . NAME ;
SUMCNPer . dtNowYM = dtNowYM ;
SUMCNPer . dtNowYM_1 = listDate [ 1 ] ;
SUMCNPer . dtNowYM_2 = listDate [ 2 ] ;
SUMCNPer . dtNowYM_3 = listDate [ 3 ] ;
SUMCNPer . dtNowYM_4 = listDate [ 4 ] ;
SUMCNPer . dtNowYM_5 = listDate [ 5 ] ;
SUMCNPer . SUM_TRAIN_HOUR = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 0 ] . Year & & e . START_TIME . Month = = listDate [ 0 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
SUMCNPer . SUM_TRAIN_HOUR_1 = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 1 ] . Year & & e . START_TIME . Month = = listDate [ 1 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
SUMCNPer . SUM_TRAIN_HOUR_2 = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 2 ] . Year & & e . START_TIME . Month = = listDate [ 2 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
SUMCNPer . SUM_TRAIN_HOUR_3 = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 3 ] . Year & & e . START_TIME . Month = = listDate [ 3 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
SUMCNPer . SUM_TRAIN_HOUR_4 = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 4 ] . Year & & e . START_TIME . Month = = listDate [ 4 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
SUMCNPer . SUM_TRAIN_HOUR_5 = ListTRAIN . Where ( e = > e . ORG_ID = = SUMCNPer . ORG_ID & & e . START_TIME . Year = = listDate [ 5 ] . Year & & e . START_TIME . Month = = listDate [ 5 ] . Month ) . Sum ( e = > e . TRAIN_HOUR ) ;
dtInfo . Add ( SUMCNPer ) ;
}
return dtInfo ;
}
2026-01-20 14:10:41 +08:00
2026-04-28 16:58:46 +08:00
/// <summary>
/// 获取子页 班前会 及时完成率
/// </summary>
/// <param name="filter"></param>
2026-04-28 17:06:20 +08:00
[HttpPost, Route("TeamManage")]
public JsonActionResult < List < dynamic > > TeamManage ( [ FromBody ] KeywordFilter filter )
2026-04-28 16:58:46 +08:00
{
return SafeExecute ( ( ) = >
{
Dictionary < string , object > dic = new Dictionary < string , object > ( ) ;
DateTime dtSecrch = DateTime . Now ;
if ( string . IsNullOrEmpty ( filter . Parameter1 ) )
{
filter . Parameter1 = dtSecrch . ToString ( "yyyy-MM-dd" ) ;
}
//年度查询
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
try
{
dtSecrch = Convert . ToDateTime ( filter . Parameter1 ) ;
}
catch
{
dtSecrch = DateTime . Now ;
}
}
dtSecrch = Convert . ToDateTime ( dtSecrch . ToString ( "yyyy-MM-01 00:00:00" ) ) ;
dic . Add ( "@dtMin" , dtSecrch . ToString ( "yyyy-MM-dd 00:00:00" ) ) ;
dic . Add ( "@dtMax" , dtSecrch . AddMonths ( 1 ) . AddSeconds ( - 1 ) . ToString ( "yyyy-MM-dd 23:59:59" ) ) ;
List < dynamic > listResult = new List < dynamic > ( ) ;
try
{
string strConn = OPTenantDBConnService . GetConnByORGID ( filter . OrgId . Value ) ;
2026-04-30 10:42:14 +08:00
DataSet ds = DBHelper . ExecProcedure ( strConn , "proc_HomeSubTeamMeetingRecord" , dic , HttpContext . Request . Path ) ;
2026-05-09 16:07:56 +08:00
string percent = "" ;
2026-04-28 16:58:46 +08:00
if ( ds ! = null & & ds . Tables ! = null & & ds . Tables . Count > 0 )
{
foreach ( DataRow item in ds . Tables [ 0 ] . Rows )
{
2026-05-09 16:07:56 +08:00
percent = item [ 0 ] . ToString ( ) ;
if ( percent . Contains ( "." ) )
percent = Convert . ToDouble ( item [ 0 ] . ToString ( ) ) . ToString ( "0.00" ) ;
2026-04-28 16:58:46 +08:00
listResult . Add ( new
{
2026-04-28 17:06:20 +08:00
companyName = item [ "CNAME" ] ,
rate = percent + "%"
2026-04-28 16:58:46 +08:00
} ) ;
}
}
}
catch { }
return listResult ;
} ) ;
}
2026-04-30 10:42:14 +08:00
/// <summary>
/// 获取子页 隐患治理
/// </summary>
/// <param name="filter"></param>
[HttpPost, Route("HiddenManage")]
public JsonActionResult < HiddenManage > HiddenManage ( [ FromBody ] KeywordFilter filter )
{
return SafeExecute ( ( ) = >
{
//Parameter1 传入 年份(搜索年份对应任意时间) 不传取 对应月份的时间
//Parameter2 传入 月份(搜索月份对应任意时间) 不传 取当前时间
//Parameter3 传入 ORGID 如果有
Dictionary < string , object > dic = new Dictionary < string , object > ( ) ;
DateTime dtSecrch = DateTime . Now ;
2026-05-06 10:00:12 +08:00
//string ORGID = "";
2026-04-30 10:42:14 +08:00
if ( ! string . IsNullOrEmpty ( filter . Parameter2 ) )
{
try
{
dtSecrch = Convert . ToDateTime ( Convert . ToDateTime ( filter . Parameter2 ) . ToString ( "yyyy-MM-01 00:00:00" ) ) ;
}
catch
{
dtSecrch = Convert . ToDateTime ( DateTime . Now . ToString ( "yyyy-MM-01 00:00:00" ) ) ;
}
}
2026-05-20 17:17:55 +08:00
else
{
dtSecrch = Convert . ToDateTime ( DateTime . Now . ToString ( "yyyy-MM-01 00:00:00" ) ) ;
}
2026-05-06 10:00:12 +08:00
//if (!string.IsNullOrEmpty(filter.Parameter3))
//{
// try
// {
// ORGID = (new Guid(filter.Parameter3)).ToString();
// }
// catch
// {
// ORGID = "";
// }
//}
2026-04-30 10:42:14 +08:00
dic . Add ( "@dtMonthMin" , dtSecrch . ToString ( "yyyy-MM-dd 00:00:00" ) ) ;
dic . Add ( "@dtMonthMax" , dtSecrch . AddMonths ( 1 ) . AddSeconds ( - 1 ) . ToString ( "yyyy-MM-dd HH:mm:ss" ) ) ;
2026-05-06 10:00:12 +08:00
//dic.Add("@OrgId", ORGID.ToString());
2026-04-30 10:42:14 +08:00
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
try
{
dtSecrch = Convert . ToDateTime ( filter . Parameter1 ) ;
}
catch
{
dtSecrch = DateTime . Now ;
}
}
dic . Add ( "@dtMin" , dtSecrch . ToString ( "yyyy-01-01 00:00:00" ) ) ;
if ( dtSecrch . Year = = DateTime . Now . Year )
{
dic . Add ( "@dtMax" , "" ) ;
}
else
{
dic . Add ( "@dtMax" , dtSecrch . ToString ( "yyyy-12-31 23:59:59" ) ) ;
}
HiddenManage listResult = new HiddenManage ( ) ;
try
{
string strConn = OPTenantDBConnService . GetConnByORGID ( filter . OrgId . Value ) ;
DataSet ds = DBHelper . ExecProcedure ( strConn , "proc_HomeSubHiddenManage" , dic , HttpContext . Request . Path ) ;
if ( ds ! = null & & ds . Tables ! = null & & ds . Tables . Count > 0 )
{
2026-04-30 10:48:37 +08:00
List < dynamic > hiddenRanking = new List < dynamic > ( ) ;
2026-05-06 10:15:34 +08:00
//int NUM = 1;
2026-04-30 10:42:14 +08:00
foreach ( DataRow item in ds . Tables [ 0 ] . Rows )
{
2026-04-30 10:48:37 +08:00
hiddenRanking . Add ( new
2026-04-30 10:42:14 +08:00
{
2026-05-06 10:15:34 +08:00
//NUM = NUM,
2026-05-09 16:07:56 +08:00
companyName = item [ "companyName" ] ,
2026-05-06 10:00:12 +08:00
ORG_ID = item [ "ORG_ID" ] ,
hiddenName = item [ "DESCREPTION" ] ,
qty = item [ "dc" ] ,
2026-04-30 10:42:14 +08:00
} ) ;
2026-05-06 10:15:34 +08:00
//NUM++;
2026-04-30 10:42:14 +08:00
}
2026-04-30 10:48:37 +08:00
listResult . hiddenRanking = hiddenRanking ;
2026-05-06 10:00:12 +08:00
//if (string.IsNullOrEmpty(ORGID))
//{
//全部搜索 3张表
List < dynamic > hiddenList = new List < dynamic > ( ) ;
DataTable dt = ds . Tables [ 1 ] ;
foreach ( DataRow item in dt . Rows )
2026-04-30 10:42:14 +08:00
{
2026-05-06 10:00:12 +08:00
hiddenList . Add ( new
2026-04-30 10:42:14 +08:00
{
2026-05-06 10:00:12 +08:00
companyName = item [ "companyName" ] ,
generalCount = item [ "generalCount" ] ,
majorCount = item [ "majorCount" ] ,
} ) ;
}
listResult . hiddenList = hiddenList ;
List < dynamic > hiddenRectifyList = new List < dynamic > ( ) ;
dt = ds . Tables [ 2 ] ;
foreach ( DataRow item in dt . Rows )
{
hiddenRectifyList . Add ( new
2026-04-30 10:42:14 +08:00
{
2026-05-06 10:00:12 +08:00
companyName = item [ "companyName" ] ,
generalCount = item [ "generalCount" ] ,
majorCount = item [ "majorCount" ] ,
majorCountNo = item [ "majorCountNo" ] ,
generalCountNo = item [ "generalCountNo" ] ,
} ) ;
2026-04-30 10:42:14 +08:00
}
2026-05-06 10:00:12 +08:00
listResult . hiddenRectifyList = hiddenRectifyList ;
//}
2026-04-30 10:42:14 +08:00
}
}
catch { }
return listResult ;
} ) ;
}
2026-04-30 15:12:45 +08:00
/// <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 ) ;
}
}
//各家公司风险类别图
2026-05-20 16:45:26 +08:00
string sqlRiskType = "select typeName,count(1) as qty from vhome_library_data GROUP BY typeName ORDER BY qty desc" ;
2026-04-30 15:12:45 +08:00
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
2026-05-08 10:25:49 +08:00
. GroupBy ( x = > x . companyName )
. Select ( g = >
{
// 先把当前公司的风险类型和数量转成字典,避免多次遍历分组
var riskDict = g . ToDictionary ( x = > x . riskType , x = > x . cnt ) ;
return new RiskList
{
companyName = g . Key ,
majorCount = riskDict . TryGetValue ( SKEvaluateLevelEnum . 重 大 风 险 . GetDescription ( ) , out var major ) ? major : 0 ,
largerCount = riskDict . TryGetValue ( SKEvaluateLevelEnum . 较 大 风 险 . GetDescription ( ) , out var larger ) ? larger : 0 ,
generalCount = riskDict . TryGetValue ( SKEvaluateLevelEnum . 一 般 风 险 . GetDescription ( ) , out var general ) ? general : 0 ,
lowCount = riskDict . TryGetValue ( SKEvaluateLevelEnum . 低 风 险 . GetDescription ( ) , out var low ) ? low : 0 ,
totalCount = riskDict . Sum ( x = > x . Value )
} ;
} )
. ToList ( ) ;
2026-04-30 15:12:45 +08:00
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 ;
2026-05-06 10:00:12 +08:00
2026-04-30 15:12:45 +08:00
}
2026-04-30 17:34:51 +08:00
/// <summary>
/// 获取子页 危险作业清单
/// </summary>
/// <param name="filter"></param>
[HttpPost, Route("JobManage")]
2026-05-21 15:09:28 +08:00
public JsonActionResult < JobManage > JobManage ( [ FromBody ] KeywordFilter filter )
2026-04-30 17:34:51 +08:00
{
2026-05-21 10:39:17 +08:00
DateTime startDate = DateTime . Now . Date ;
DateTime endDate = Convert . ToDateTime ( DateTime . Now . ToString ( "yyyy-MM-dd 23:59:59" ) ) ;
if ( ! string . IsNullOrEmpty ( filter . Parameter1 ) )
{
startDate = Convert . ToDateTime ( filter . Parameter1 ) . Date ;
}
if ( ! string . IsNullOrEmpty ( filter . Parameter2 ) )
{
endDate = Convert . ToDateTime ( Convert . ToDateTime ( filter . Parameter2 ) . Date . ToString ( "yyyy-MM-dd 23:59:59" ) ) ;
}
if ( startDate . Year ! = DateTime . Now . Year )
{
throw new Exception ( "只能查询本年度数据,请修改开始时间!" ) ;
}
if ( endDate . Year ! = DateTime . Now . Year )
{
throw new Exception ( "只能查询本年度数据,请修改结束时间!" ) ;
}
2026-05-21 15:09:28 +08:00
JsonActionResult < JobManage > result = new JsonActionResult < JobManage > ( ) ;
result . Data = new JobManage ( ) ;
var list = new List < JobList > ( ) ;
2026-04-30 17:34:51 +08:00
DataTable tableList = new DataTable ( ) ;
2026-05-21 15:09:28 +08:00
DataTable tableJob = new DataTable ( ) ;
2026-04-30 17:34:51 +08:00
string strConn = OPTenantDBConnService . GetConnByORGID ( filter . OrgId . Value ) ; //获取数据库链接
using ( SqlConnection connection = new SqlConnection ( strConn ) )
{
try
{
2026-05-21 10:39:17 +08:00
2026-04-30 17:34:51 +08:00
connection . Open ( ) ;
//当日危险作业清单
2026-05-21 15:09:28 +08:00
string sql = "select * from vhome_jobTodayList where create_time >='" + startDate + "' and create_time<='" + endDate + "'" ;
2026-04-30 17:34:51 +08:00
SqlCommand com = new SqlCommand ( sql , connection ) ;
SqlDataAdapter data = new SqlDataAdapter ( com ) ;
data . Fill ( tableList ) ;
if ( tableList ! = null & & tableList . Rows . Count > 0 )
{
foreach ( DataRow item in tableList . Rows )
{
2026-05-21 15:09:28 +08:00
JobList job = new JobList ( ) ;
2026-04-30 17:34:51 +08:00
job . companyName = item [ "companyName" ] ! = null ? item [ "companyName" ] . ToString ( ) : null ;
job . startDate = item [ "JOB_DATE" ] ! = null ? item [ "JOB_DATE" ] . ToString ( ) : null ;
job . endDate = item [ "JOB_END_DATE" ] ! = null ? item [ "JOB_END_DATE" ] . ToString ( ) : null ;
job . jobName = item [ "stepName" ] ! = null ? item [ "stepName" ] . ToString ( ) : null ;
job . areaName = item [ "areaName" ] ! = null ? item [ "areaName" ] . ToString ( ) : null ;
job . place = item [ "JOB_LOCATION" ] ! = null ? item [ "JOB_LOCATION" ] . ToString ( ) : null ;
job . users = item [ "userNames" ] ! = null ? item [ "userNames" ] . ToString ( ) : null ;
job . monitor = item [ "monitorName" ] ! = null ? item [ "monitorName" ] . ToString ( ) : null ;
job . approveUsers = item [ "approveNames" ] ! = null ? item [ "approveNames" ] . ToString ( ) : null ;
list . Add ( job ) ;
}
}
2026-05-21 15:09:28 +08:00
result . Data . jobList = list . ToList ( ) ;
//当日工作票的统计数量
string sqlJob = "select WORK_PERMIT_TYPE_ID,NAME,count(*) as QTY from vhome_jobTodayNew where create_time >='" + startDate + "' and create_time<='" + endDate + "' GROUP BY WORK_PERMIT_TYPE_ID,NAME ORDER BY QTY DESC" ;
SqlCommand comJob = new SqlCommand ( sqlJob , connection ) ;
SqlDataAdapter jobData = new SqlDataAdapter ( comJob ) ;
jobData . Fill ( tableJob ) ;
result . Data . jobTodayQty = JobTodayQtyData ( tableJob ) ;
2026-04-30 17:34:51 +08:00
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 ) ;
}
}
return result ;
}
2026-04-30 10:42:14 +08:00
}
/// <summary>
/// 隐患治理 返参
/// </summary>
public class HiddenManage
{
/// <summary>
/// 隐患数量统计
/// </summary>
2026-04-30 10:48:37 +08:00
public List < dynamic > hiddenList { get ; set ; }
2026-04-30 10:42:14 +08:00
/// <summary>
/// 月度隐患处理统计
/// </summary>
2026-04-30 10:48:37 +08:00
public List < dynamic > hiddenRectifyList { get ; set ; }
2026-04-30 10:42:14 +08:00
/// <summary>
/// 隐患排序
/// </summary>
2026-04-30 10:48:37 +08:00
public List < dynamic > hiddenRanking { get ; set ; }
2026-01-20 11:05:15 +08:00
}
2026-04-30 15:12:45 +08:00
/// <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 ; }
}
2026-04-30 17:34:51 +08:00
public class JobManage
2026-05-21 15:09:28 +08:00
{
/// <summary>
/// 作业清单
/// </summary>
public List < JobList > jobList { get ; set ; }
/// <summary>
///
/// </summary>
public List < JobTodayQty > jobTodayQty { get ; set ; }
}
public class JobList
2026-04-30 17:34:51 +08:00
{
/// <summary>
/// 公司名称
/// </summary>
public string companyName { get ; set ; }
/// <summary>
/// 开始时间
/// </summary>
public string startDate { get ; set ; }
/// <summary>
/// 结束时间
/// </summary>
public string endDate { get ; set ; }
/// <summary>
/// 作业名称
/// </summary>
public string jobName { get ; set ; }
/// <summary>
/// 作业区域
/// </summary>
public string areaName { get ; set ; }
/// <summary>
/// 作业地点
/// </summary>
public string place { get ; set ; }
/// <summary>
/// 作业人员
/// </summary>
public string users { get ; set ; }
/// <summary>
/// 监护人
/// </summary>
public string monitor { get ; set ; }
/// <summary>
/// 审批领导
/// </summary>
public string approveUsers { get ; set ; }
}
2026-01-20 11:05:15 +08:00
}