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.BaseData.Services.Services.OP; 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.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 NPOI.Util; 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; 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; } /// /// 返回所有 /// public class ReturnAll { //风险等级占比 public List riskTypeRate { get; set; } //当日工作票排名前三 public List jobTodayTop3 { get; set; } //当日工作票统计数量 public List jobTodayQty { get; set; } //隐患整改率 public HiddenRectify hiddenRectify { get; set; } //隐患统计数据 public HiddenSummary hiddenSummary { get; set; } //各事项排名前三 public List taskTop3 { get; set; } //作业现场完成情况统计 public List jobFinishRate { get; set; } //各公司安全检查统计 public List safeCheckSum { get; set; } //各公司危险作业统计 public List linkSum { 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 JobTodayQty { public int qty { get; set; } public Guid? workTypeId { get; set; } public string name { 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 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; } } /// /// 各事项排名前三 /// 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 LinkSum { public string name { get; set; } public int qty { 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; } } /// /// 返回看板所有接口 /// /// 分页过滤实体 /// [HttpPost, Route("ReturnAllData")] public JsonActionResult ReturnAllData([FromBody] KeywordFilter filter) { //string connhead = ConfigurationManager.ConnectionStrings["head"]; JsonActionResult result = new JsonActionResult(); 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(); //培训教育 对应统计 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.Data.listSETrainSum = GetTrainInfo(ds.Tables[0], ListAllORG); using (SqlConnection connection = new SqlConnection(strConn)) { 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(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(filter.OrgId.Value, tableJob, tableJobGroup); //隐患统计数据 string sqlHidden = "select * from vhome_hiddenSummary"; SqlCommand comHidden = new SqlCommand(sqlHidden, connection); SqlDataAdapter hiddenData = new SqlDataAdapter(comHidden); hiddenData.Fill(tableHidden); 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); //各事项排名前三 //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); //作业现场完成情况统计 //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); //各公司安全检查统计 //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); //各公司危险分类统计 //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); 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; } /// /// 获取视图数据 /// /// /// /// 数据集 /// 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); } } } /// /// 风险等级占比 /// /// 分页过滤实体 public List RiskTypeRateData(DataTable Table) { List result = new List(); 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; } /// /// 当日工作票排名前三 /// /// 参数 /// public List JobTodayTopData(Guid orgId, DataTable Table, DataTable Table2) { List result = new List(); var details = new List(); 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()) { 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 = de.jobName; JobTodayDetail.company = de.company; detailTemps.Add(JobTodayDetail); } da.details = detailTemps; } } } return result; } /// /// 当日工作票统计数量 /// /// 参数 /// public List JobTodayQtyData(DataTable Table) { List result = new List(); 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; } /// /// 隐患整改率 /// /// 参数 /// public HiddenRectify HiddenRectifyData(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; } /// /// 隐患统计数据 /// /// 参数 /// 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; } /// /// 各事项排名前三 /// /// 参数 /// public List TaskTopData(DataTable Table) { List result = new List(); var dataTemps = new List(); 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); } } return result; } /// /// 作业现场完成情况统计 /// /// 参数 /// public List jobFinishRateData(DataTable Table) { List result = new List(); 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; } /// /// 各公司安全检查统计 /// /// 参数 /// public List safeCheckSumData(DataTable Table) { List result = new List(); 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; } /// /// 各公司危险作业统计 /// /// 参数 /// public List linkSumData(DataTable Table) { List result = new List(); 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 = !string.IsNullOrEmpty(item["cnt"].ToString()) && int.Parse(item["cnt"].ToString()) != 0 ? int.Parse(item["cnt"].ToString()) : 0 }); } } 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; } /// /// 获取子页 班前会 及时完成率 /// /// [HttpPost, Route("TeamManage")] public JsonActionResult> TeamManage([FromBody] KeywordFilter filter) { return SafeExecute(() => { Dictionary dic = new Dictionary(); 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 listResult = new List(); try { string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSubTeamMeetingRecord", dic, HttpContext.Request.Path); string percent = ""; if (ds != null && ds.Tables != null && ds.Tables.Count > 0) { foreach (DataRow item in ds.Tables[0].Rows) { percent = item[0].ToString(); if (percent.Contains(".")) percent = Convert.ToDouble(item[0].ToString()).ToString("0.00"); listResult.Add(new { companyName = item["CNAME"], rate = percent + "%" }); } } } catch { } return listResult; }); } /// /// 获取子页 隐患治理 /// /// [HttpPost, Route("HiddenManage")] public JsonActionResult HiddenManage([FromBody] KeywordFilter filter) { return SafeExecute(() => { //Parameter1 传入 年份(搜索年份对应任意时间) 不传取 对应月份的时间 //Parameter2 传入 月份(搜索月份对应任意时间) 不传 取当前时间 //Parameter3 传入 ORGID 如果有 Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; //string ORGID = ""; 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")); } } else { dtSecrch = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-01 00:00:00")); } //if (!string.IsNullOrEmpty(filter.Parameter3)) //{ // try // { // ORGID = (new Guid(filter.Parameter3)).ToString(); // } // catch // { // ORGID = ""; // } //} 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")); //dic.Add("@OrgId", ORGID.ToString()); 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) { List hiddenRanking = new List(); //int NUM = 1; foreach (DataRow item in ds.Tables[0].Rows) { hiddenRanking.Add(new { //NUM = NUM, companyName = item["companyName"], ORG_ID = item["ORG_ID"], hiddenName = item["DESCREPTION"], qty = item["dc"], }); //NUM++; } listResult.hiddenRanking = hiddenRanking; //if (string.IsNullOrEmpty(ORGID)) //{ //全部搜索 3张表 List hiddenList = new List(); DataTable dt = ds.Tables[1]; foreach (DataRow item in dt.Rows) { hiddenList.Add(new { companyName = item["companyName"], generalCount = item["generalCount"], majorCount = item["majorCount"], }); } listResult.hiddenList = hiddenList; List hiddenRectifyList = new List(); dt = ds.Tables[2]; foreach (DataRow item in dt.Rows) { hiddenRectifyList.Add(new { companyName = item["companyName"], generalCount = item["generalCount"], majorCount = item["majorCount"], majorCountNo = item["majorCountNo"], generalCountNo = item["generalCountNo"], }); } listResult.hiddenRectifyList = hiddenRectifyList; //} } } catch { } 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 typeName,count(1) as qty from vhome_library_data GROUP BY typeName 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 => { // 先把当前公司的风险类型和数量转成字典,避免多次遍历分组 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(); 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; } /// /// 获取子页 危险作业清单 /// /// [HttpPost, Route("JobManage")] public JsonActionResult JobManage([FromBody] KeywordFilter filter) { 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("只能查询本年度数据,请修改结束时间!"); } var company = "邦泰"; if (!string.IsNullOrEmpty(filter.Keyword)) { company = filter.Keyword; } JsonActionResult result = new JsonActionResult(); result.Data = new JobManage(); var list = new List(); DataTable tableList = new DataTable(); DataTable tableJob = new DataTable(); string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value);//获取数据库链接 using (SqlConnection connection = new SqlConnection(strConn)) { try { connection.Open(); //当日危险作业清单 string sql = "select * from vhome_jobTodayList where create_time >='"+ startDate +"' and create_time<='" + endDate+"' and companyName ='" + company + "'"; 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) { JobList job = new JobList(); 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); } } 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); 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); } List jobTodayQtys = new List(); if (list != null && list.Any()) { var groupBy = list.GroupBy(t=>t.jobName); if (groupBy != null && groupBy.Any()) { foreach (var item in groupBy) { jobTodayQtys.Add(new JobTodayQty() { qty = item.Count(), workTypeId = null, name = item.Key.ToString(), }); } } } result.Data.jobTodayQty = jobTodayQtys.ToList(); } return result; } } /// /// 隐患治理 返参 /// public class HiddenManage { /// /// 隐患数量统计 /// public List hiddenList { get; set; } /// /// 月度隐患处理统计 /// public List hiddenRectifyList { get; set; } /// /// 隐患排序 /// 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; } } public class JobManage { /// /// 作业清单 /// public List jobList { get; set; } /// /// /// public List jobTodayQty { get; set; } } public class JobList { /// /// 公司名称 /// public string companyName { get; set; } /// /// 开始时间 /// public string startDate { get; set; } /// /// 结束时间 /// public string endDate { get; set; } /// /// 作业名称 /// public string jobName { get; set; } /// /// 作业区域 /// public string areaName { get; set; } /// /// 作业地点 /// public string place { get; set; } /// /// 作业人员 /// public string users { get; set; } /// /// 监护人 /// public string monitor { get; set; } /// /// 审批领导 /// public string approveUsers { get; set; } } }