443 lines
19 KiB
C#
443 lines
19 KiB
C#
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;
|
|
using APT.BaseData.Services.Services.FM;
|
|
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;
|
|
using APT.MS.Domain.Enums;
|
|
using APT.Utility;
|
|
using InfluxData.Net.InfluxDb.Enums;
|
|
using log4net.Core;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Data.SqlClient;
|
|
using NPOI.SS.Formula.Functions;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Collections.ObjectModel;
|
|
using System.Data;
|
|
using System.Linq;
|
|
using static APT.SC.WebApi.Controllers.Api.BI.BIKanBanController;
|
|
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>
|
|
{
|
|
/// <summary>
|
|
/// 返回所有
|
|
/// </summary>
|
|
public class ReturnAll
|
|
{
|
|
//风险等级占比
|
|
public List<RiskTypeRate> riskTypeRate { get; set; }
|
|
//当日工作票排名前三
|
|
public List<JobTodayTop3> jobTodayTop3 { get; set; }
|
|
//隐患整改率
|
|
public HiddenRectify hiddenRectify { get; set; }
|
|
//各事项排名前三
|
|
public List<TaskTop3> taskTop3 { get; set; }
|
|
//作业现场完成情况统计
|
|
public List<JobFinishRate> jobFinishRate { get; set; }
|
|
//各公司安全检查统计
|
|
public List<SafeCheckSum> safeCheckSum { get; set; }
|
|
//各公司危险作业统计
|
|
public List<LinkSum> linkSum { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// 风险等级占比
|
|
/// </summary>
|
|
public class RiskTypeRate
|
|
{
|
|
public string riskType { get; set; }
|
|
public int count { get; set; }
|
|
public string rate { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 当日工作票排名前三
|
|
/// </summary>
|
|
public class JobTodayTop3
|
|
{
|
|
public int totalQty { get; set; }
|
|
public int num { get; set; }
|
|
public string company { get; set; }
|
|
public List<JobTodayDetail> details { get; set; }
|
|
}
|
|
public class JobTodayDetail
|
|
{
|
|
public string company { get; set; }
|
|
public string jobName { get; set; }
|
|
public int qty { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 隐患整改率
|
|
/// </summary>
|
|
public class HiddenRectify
|
|
{
|
|
public int qty { get; set; }
|
|
|
|
public int ontimeQty { get; set; }
|
|
public int delayQty { get; set; }
|
|
|
|
public string rate { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 各事项排名前三
|
|
/// </summary>
|
|
public class TaskTopTemp
|
|
{
|
|
public int totalQty { get; set; }
|
|
public int qty { get; set; }
|
|
public string company { get; set; }
|
|
public string type { get; set; }
|
|
}
|
|
public class TaskTop3
|
|
{
|
|
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; }
|
|
}
|
|
/// <summary>
|
|
/// 作业现场完成情况统计
|
|
/// </summary>
|
|
public class JobFinishRate
|
|
{
|
|
public string name { get; set; }
|
|
public int qty { get; set; }
|
|
public int finishQty { get; set; }
|
|
public string rate { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 各公司安全检查统计
|
|
/// </summary>
|
|
public class SafeCheckSum
|
|
{
|
|
public string company { get; set; }
|
|
public int qty { get; set; }
|
|
public int num { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 各公司危险作业统计
|
|
/// </summary>
|
|
public class LinkSum
|
|
{
|
|
public string name { get; set; }
|
|
public int qty { get; set; }
|
|
}
|
|
/// <summary>
|
|
/// 返回看板所有接口
|
|
/// </summary>
|
|
/// <param name="filter">分页过滤实体</param>
|
|
/// <returns></returns>
|
|
[HttpPost, Route("ReturnAllData")]
|
|
public JsonActionResult<ReturnAll> ReturnAllData([FromBody] KeywordFilter filter)
|
|
{
|
|
string connhead = ConfigurationManager.ConnectionStrings["head"];
|
|
JsonActionResult<ReturnAll> result = new JsonActionResult<ReturnAll>();
|
|
result.Data = new ReturnAll();
|
|
DataTable tableRisk = new DataTable();
|
|
DataTable tableJob = 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();
|
|
using (SqlConnection connection = new SqlConnection(connhead))
|
|
{
|
|
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);
|
|
result.Data.riskTypeRate = RiskTypeRateData(connhead, tableRisk);
|
|
//当日工作票排名前三
|
|
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(connhead, filter.OrgId.Value, tableJob,tableJobGroup);
|
|
//隐患整改率
|
|
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(connhead, tableHidden);
|
|
//各事项排名前三
|
|
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(connhead, tableTask);
|
|
//作业现场完成情况统计
|
|
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(connhead, tableJobRate);
|
|
//各公司安全检查统计
|
|
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(connhead, tableSafeCheck);
|
|
//各公司危险分类统计
|
|
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(connhead, tableLink);
|
|
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;
|
|
}
|
|
/// <summary>
|
|
/// 风险等级占比
|
|
/// </summary>
|
|
/// <param name="filter">分页过滤实体</param>
|
|
public List<RiskTypeRate> RiskTypeRateData(string connhead, DataTable Table)
|
|
{
|
|
List<RiskTypeRate> result = new List<RiskTypeRate>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
result.Add(new RiskTypeRate()
|
|
{
|
|
riskType = item["风险类别"] != null ? item["风险类别"].ToString() : null,
|
|
count = int.Parse(item["数量"].ToString()) != 0 ? int.Parse(item["数量"].ToString()) : 0,
|
|
rate = item["占比"] != null ? item["占比"].ToString() : "0"
|
|
});
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 当日工作票排名前三
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public List<JobTodayTop3> JobTodayTopData(string connhead,Guid orgId, DataTable Table, DataTable Table2)
|
|
{
|
|
List<JobTodayTop3> result = new List<JobTodayTop3>();
|
|
var details = new List<JobTodayDetail>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
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())
|
|
{
|
|
var steps = this.GetEntities<T_HM_OPERATION_STEP>(t => !t.IS_DELETED, new BaseFilter(orgId));
|
|
foreach (var da in result)
|
|
{
|
|
var temps = details.Where(t => t.company == da.company).ToList();
|
|
if (temps.Any())
|
|
{
|
|
var detailTemps = new List<JobTodayDetail>();
|
|
foreach (var de in temps)
|
|
{
|
|
var JobTodayDetail = new JobTodayDetail();
|
|
JobTodayDetail.qty = de.qty;
|
|
JobTodayDetail.jobName = steps.FirstOrDefault(t => t.ID == Guid.Parse(de.jobName))?.NAME;
|
|
JobTodayDetail.company = de.company;
|
|
detailTemps.Add(JobTodayDetail);
|
|
}
|
|
da.details = detailTemps;
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 隐患整改率
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public HiddenRectify HiddenRectifyData(string connhead, DataTable Table)
|
|
{
|
|
HiddenRectify result = new HiddenRectify();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
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;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 各事项排名前三
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public List<TaskTop3> TaskTopData(string connhead, DataTable Table)
|
|
{
|
|
List<TaskTop3> result = new List<TaskTop3>();
|
|
var dataTemps = new List<TaskTopTemp>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
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())
|
|
{
|
|
var detailTemps = new List<TaskTopDetail>();
|
|
foreach (var de in temps)
|
|
{
|
|
var JobTodayDetail = new TaskTopDetail();
|
|
JobTodayDetail.qty = de.qty;
|
|
JobTodayDetail.name = de.type;
|
|
detailTemps.Add(JobTodayDetail);
|
|
}
|
|
TaskTop3.details = detailTemps;
|
|
}
|
|
result.Add(TaskTop3);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 作业现场完成情况统计
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public List<JobFinishRate> jobFinishRateData(string connhead, DataTable Table)
|
|
{
|
|
List<JobFinishRate> result = new List<JobFinishRate>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
result.Add(new JobFinishRate()
|
|
{
|
|
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,
|
|
});
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 各公司安全检查统计
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public List<SafeCheckSum> safeCheckSumData(string connhead, DataTable Table)
|
|
{
|
|
List<SafeCheckSum> result = new List<SafeCheckSum>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
result.Add(new SafeCheckSum()
|
|
{
|
|
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,
|
|
});
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
/// <summary>
|
|
/// 各公司危险作业统计
|
|
/// </summary>
|
|
/// <param name="filter">参数</param>
|
|
/// <returns></returns>
|
|
public List<LinkSum> linkSumData(string connhead, DataTable Table)
|
|
{
|
|
List<LinkSum> result = new List<LinkSum>();
|
|
if (Table != null && Table.Rows.Count > 0)
|
|
{
|
|
foreach (DataRow item in Table.Rows)
|
|
{
|
|
result.Add(new LinkSum()
|
|
{
|
|
name = item["NAME"] != null ? item["NAME"].ToString() : null,
|
|
qty = item["cnt"].ToString()!=null && int.Parse(item["cnt"].ToString()) != 0 ? int.Parse(item["cnt"].ToString()) : 0
|
|
});
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|