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.Domain.IServices.OP;
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 Google.Protobuf.WireFormat;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using static NPOI.HSSF.Util.HSSFColor;
namespace APT.SC.WebApi.Controllers.Api.BI
{
///
/// 看板
///
[Route("api/BI/BIKanBanController")]
public class BIKanBanController : APTApiController
{
IOPTenantDBConnService OPTenantDBConnService { get; set; }
public BIKanBanController(IOPTenantDBConnService opTenantDBConnService)
{
OPTenantDBConnService = opTenantDBConnService;
}
#region 属性定义
///
/// 返回所有
///
public class ReturnAll
{
//风险等级占比
public List riskTypeRate { get; set; }
//当日工作票排名前三
public List jobTodayTop3 { get; set; }
//隐患整改率
public HiddenRectify hiddenRectify { get; set; }
//各事项排名前三
public List taskTop3 { get; set; }
//作业现场完成情况统计
public List jobFinishRate { get; set; }
//各公司安全检查统计
public List safeCheckSum { get; set; }
public List listSETrainSum { get; set; }
}
///
/// 风险等级占比
///
public class RiskTypeRate
{
public string riskType { get; set; }
public int count { get; set; }
public string rate { get; set; }
}
///
/// 当日工作票排名前三
///
public class JobTodayTop3
{
public int totalQty { get; set; }
public int num { get; set; }
public string company { get; set; }
public List details { get; set; }
}
public class JobTodayDetail
{
public string company { get; set; }
public string jobName { get; set; }
public int qty { get; set; }
}
///
/// 隐患整改率
///
public class HiddenRectify
{
public int qty { get; set; }
public int ontimeQty { get; set; }
public int delayQty { get; set; }
public string rate { get; set; }
}
///
/// 各事项排名前三
///
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 details { get; set; }
}
public class TaskTopDetail
{
public string name { get; set; }
public int qty { get; set; }
}
///
/// 作业现场完成情况统计
///
public class JobFinishRate
{
public string name { get; set; }
public int qty { get; set; }
public int finishQty { get; set; }
public string rate { get; set; }
}
///
/// 各公司安全检查统计
///
public class SafeCheckSum
{
public string company { get; set; }
public int qty { get; set; }
public int num { get; set; }
}
///
/// 培训教育学时获取
///
public class SETRAIN
{
///
/// 公司名称
///
public string CN { get; set; }
///
///
///
public Guid ORG_ID { get; set; }
///
/// 培训时长
///
public decimal TRAIN_HOUR { get; set; }
///
/// 开始时间
///
public DateTime START_TIME { get; set; }
}
public class SETRAINSHOW
{
///
/// 公司名称
///
public string CN { get; set; }
///
///
///
public Guid ORG_ID { get; set; }
///
/// 当前年月
///
public DateTime dtNowYM { get; set; }
///
/// 当前年月-1
///
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; }
///
/// 当前月 培训时长总和
///
public decimal SUM_TRAIN_HOUR { get; set; }
///
/// 当前月-1 培训时长总和
///
public decimal SUM_TRAIN_HOUR_1 { get; set; }
///
/// 当前月-2 培训时长总和
///
public decimal SUM_TRAIN_HOUR_2 { get; set; }
///
/// 当前月-3 培训时长总和
///
public decimal SUM_TRAIN_HOUR_3 { get; set; }
///
/// 当前月-4 培训时长总和
///
public decimal SUM_TRAIN_HOUR_4 { get; set; }
///
/// 当前月-5 培训时长总和
///
public decimal SUM_TRAIN_HOUR_5 { get; set; }
}
#endregion
///
/// 返回看板所有接口
///
/// 分页过滤实体
///
[HttpPost, Route("ReturnAllData")]
public ReturnAll ReturnAllData([FromBody] KeywordFilter filter)
{
ReturnAll result = new ReturnAll();
var ListAllORG = GetEntities(e => !e.IS_DELETED && e.CODE != "003", null, null).OrderBy(e => e.TENANT_CODE).ToList();
string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value);//获取数据库链接
List listVNAME = new List() { "vhome_Train_Hour" };//, "vhome_risk_type_data"
DataSet ds = new DataSet();
GETDBDATA(strConn, listVNAME, ref ds);//获取视图 数据 listVNAME 与 ds.Tables 一一对应
//培训教育 对应统计
result.listSETrainSum = GetTrainInfo(ds.Tables[0], ListAllORG);
string connhead = ConfigurationManager.ConnectionStrings["head"];//删除吧 TPM是没有相对于配置
//风险等级占比
result.riskTypeRate = RiskTypeRateData(strConn);
//当日工作票排名前三
result.jobTodayTop3 = JobTodayTopData(connhead, filter.OrgId.Value);
//隐患整改率
result.hiddenRectify = HiddenRectifyData(connhead);
//各事项排名前三
result.taskTop3 = TaskTopData(connhead);
//作业现场完成情况统计
result.jobFinishRate = jobFinishRateData(connhead);
//各公司安全检查统计
result.safeCheckSum = safeCheckSumData(connhead);
return result;
}
///
/// 获取视图数据
///
///
///
/// 数据集
///
private void GETDBDATA(string conn, List listVNAME, ref DataSet ds)
{
List result = new List();
//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();
}
catch (Exception ex)
{
if (!string.IsNullOrEmpty(ex.StackTrace))
throw new Exception("错误日志:[StackTrace]" + ex.StackTrace);
else
throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message);
}
}
}
#region 子方法
///
/// 风险等级占比
///
/// 分页过滤实体
public List RiskTypeRateData(string connhead)
{
List result = new List();
DataTable Table = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_risk_type_data ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
connection.Close();
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"
});
}
}
}
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;
}
///
/// 当日工作票排名前三
///
/// 参数
///
public List JobTodayTopData(string connhead, Guid orgId)
{
List result = new List();
var details = new List();
DataTable Table = new DataTable();
DataTable Table2 = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_jobtop3_today ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
string sql2 = "select * from vhome_jobdata_today_group ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table2);
}
connection.Close();
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 => !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();
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;
}
}
}
}
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;
}
///
/// 隐患整改率
///
/// 参数
///
public HiddenRectify HiddenRectifyData(string connhead)
{
HiddenRectify result = new HiddenRectify();
DataTable Table = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_hidden_data_result ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
connection.Close();
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;
}
}
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;
}
///
/// 各事项排名前三
///
/// 参数
///
public List TaskTopData(string connhead)
{
List result = new List();
var dataTemps = new List();
DataTable Table = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_task_data_result ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
connection.Close();
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();
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);
}
}
}
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;
}
///
/// 作业现场完成情况统计
///
/// 参数
///
public List jobFinishRateData(string connhead)
{
List result = new List();
DataTable Table = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_jobrecord_data ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
connection.Close();
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,
});
}
}
}
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;
}
///
/// 各公司安全检查统计
///
/// 参数
///
public List safeCheckSumData(string connhead)
{
List result = new List();
DataTable Table = new DataTable();
using (SqlConnection connection = new SqlConnection(connhead))
{
try
{
connection.Open();
string sql = "select * from vhome_check_total ";
//if (dt != DateTime.Now.Date)
//{
// sql += " and crdate>='" + dt + "'";
//}
//sql += " order by crdate desc";
using (SqlCommand Com = new SqlCommand(sql, connection))
{
SqlDataAdapter Data = new SqlDataAdapter(Com);
Data.Fill(Table);
}
connection.Close();
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,
});
}
}
}
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;
}
///
/// 数据整理 培训教育
///
///
///
///
private List GetTrainInfo(DataTable dtTRAIN, List listORG)
{
List ListTRAIN = DataHelper.TableToList(dtTRAIN);
List dtInfo = new List();
//所有公司 按月 倒推 6 个月的数据
List listDate = new List();
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;
}
#endregion
}
}