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.Enums.PF; 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.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 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; namespace APT.SC.WebApi.Controllers.Api.BI { /// /// 年度监测汇总 /// [Route("api/BI/BIHeadSE")] public class BIHeadSEController : APTApiController { IOPTenantDBConnService OPTenantDBConnService { get; set; } /// /// /// /// public BIHeadSEController(IOPTenantDBConnService opTenantDBConnService) { OPTenantDBConnService = opTenantDBConnService; } /// /// 获取首页 培训数据统计 /// /// [HttpPost, Route("SEtrInfo")] public JsonActionResult SEtrInfo([FromBody] KeywordFilter filter) { return SafeExecute(() => { resultHomeSE result = new resultHomeSE(); List listNAME = new List() { "文件学习", "日常培训", "专项培训", "三级教育" }; List YearCount = new List(); List MonthRecordCount = new List(); List MonthPersonCount = new List(); Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; if (!string.IsNullOrEmpty(filter.Keyword)) { try { dtSecrch = Convert.ToDateTime(filter.Keyword); } catch { dtSecrch = DateTime.Now; } } dic.Add("@dtMin", dtSecrch.Year + "-01-01 00:00:00"); dic.Add("@dtMax", dtSecrch.Year + "-12-31 23:59:59"); DateTime dtMonth = Convert.ToDateTime(dtSecrch.Year + "-" + dtSecrch.Month + "-01 00:00:00"); dic.Add("@dtMonthMin", dtMonth); dic.Add("@dtMonthMax", dtMonth.AddMonths(1).AddSeconds(-1)); string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); // 年度场次 月度场次 月度人次 //"文件学习", "日常培训", "专项培训" DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSEtrInfo", dic, HttpContext.Request.Path); //三级安全教育 DataSet dsSj = DBHelper.ExecProcedure(strConn, "proc_HomeSESJtrInfo", dic, HttpContext.Request.Path); #region 数据处理 DataTable dtYR = ds.Tables[0]; DataTable dtMR = ds.Tables[1]; DataTable dtPR = ds.Tables[2]; DataTable dtYSj = dsSj.Tables[0]; DataTable dtMSj = dsSj.Tables[1]; DataTable dtPSj = dsSj.Tables[2]; int Count = 0; for (int i = 0; i < 4; i++) { Count = 0; if (i == 3) { //三级安全教育 foreach (DataRow item in dtYSj.Rows) { Count += (int.Parse(item[0].ToString())); } YearCount.Add(Count); Count = 0; foreach (DataRow item in dtMSj.Rows) { Count += (int.Parse(item[0].ToString())); } MonthRecordCount.Add(Count); Count = 0; foreach (DataRow item in dtPSj.Rows) { Count += (int.Parse(item[0].ToString())); } MonthPersonCount.Add(Count); } else { //培训教育 //年度场次 foreach (DataRow item in dtYR.Rows) { if (item["NAME"].ToString() == listNAME[i]) { Count += (int.Parse(item["YCount"].ToString())); } } YearCount.Add(Count); //月度场次 Count = 0; foreach (DataRow item in dtMR.Rows) { if (item["NAME"].ToString() == listNAME[i]) { Count += (int.Parse(item["YCount"].ToString())); } } MonthRecordCount.Add(Count); //月度人次 Count = 0; foreach (DataRow item in dtPR.Rows) { if (item["NAME"].ToString() == listNAME[i]) { Count += (int.Parse(item["YCount"].ToString())); } } MonthPersonCount.Add(Count); } } #endregion result.listNAME = listNAME; result.YearCount = YearCount; result.MonthRecordCount = MonthRecordCount; result.MonthPersonCount = MonthPersonCount; result.Msg = "培训类型:listNAME 与 各数量对应 年度数量:YearCount(灰色) 培训场次:MonthRecordCount(黄色) 培训人次:MonthPersonCount(蓝色)"; //首页中间显示信息 DataSet dsHead = DBHelper.ExecProcedure(strConn, "proc_HomeHeadShowInfo", null, HttpContext.Request.Path); DataTable dtTitle = null; DataTable dtAnn = null; DataTable dtVMSet = null; DataTable dtVM = null; DataTable dtSubInfoSum = null; DataTable dtSubTypeSum = null; if (dsHead != null && dsHead.Tables.Count > 0) { dtTitle = dsHead.Tables[0]; if (dtTitle != null && dtTitle.Rows.Count > 0) { result.TITLE = dtTitle.Rows[0][0].ToString(); } dtAnn = dsHead.Tables[1]; result.listAnnourcement = new List(); if (dtAnn != null && dtAnn.Rows.Count > 0) { foreach (DataRow item in dtAnn.Rows) { try { result.listAnnourcement.Add(new T_PF_ANNOURCEMENT() { ID = new Guid(item[0].ToString()), TITLE = item[1].ToString(), CREATE_TIME = Convert.ToDateTime(item[2].ToString()), START = Convert.ToDateTime(item["START"].ToString()) }); } catch { } } } dtVMSet = dsHead.Tables[3]; result.playSet = new T_PF_BIPLAY_SET(); if (dtVMSet != null && dtVMSet.Rows.Count > 0) { string colVal = string.Empty; try { colVal = dtVMSet.Rows[0][0].ToString().Trim(); result.playSet.V_ISAUTO = string.IsNullOrEmpty(colVal) ? true : Convert.ToBoolean(colVal); colVal = dtVMSet.Rows[0][1].ToString().Trim(); result.playSet.V_ISRE = string.IsNullOrEmpty(colVal) ? true : Convert.ToBoolean(colVal); colVal = dtVMSet.Rows[0][2].ToString().Trim(); result.playSet.V_ISSILENT = string.IsNullOrEmpty(colVal) ? true : Convert.ToBoolean(colVal); colVal = dtVMSet.Rows[0][3].ToString().Trim(); result.playSet.V_ISSHOWCONTROL = string.IsNullOrEmpty(colVal) ? true : Convert.ToBoolean(colVal); colVal = dtVMSet.Rows[0][4].ToString().Trim(); result.playSet.IMG_TIMESPAN = string.IsNullOrEmpty(colVal) ? 2 : Convert.ToDecimal(colVal); colVal = dtVMSet.Rows[0][5].ToString().Trim(); result.playSet.IMG_ISRE = string.IsNullOrEmpty(colVal) ? true : Convert.ToBoolean(colVal); colVal = dtVMSet.Rows[0][6].ToString().Trim(); if (string.IsNullOrEmpty(colVal)) { colVal = "0"; } result.playSet.IMG_EFFECT = (BaseData.Domain.Enums.PF.EFFECTEnum)int.Parse(colVal); } catch { } } //播放信息 dtVM = dsHead.Tables[2]; result.listVideoImg = new List(); if (dtVM != null && dtVM.Rows.Count > 0) { FILETYPEEnum TYPE = (FILETYPEEnum)int.Parse(dtVM.Rows[0][0].ToString()); string TITLE = dtVM.Rows[0][1].ToString(); foreach (DataRow item in dtVM.Rows) { try { result.listVideoImg.Add(new { TYPE = TYPE, TITLE = TITLE, FILE_PATH = item[2].ToString(), VIDEOIMG_ID = new Guid(item[3].ToString().Trim()) }); } catch { } } } dtSubInfoSum = dsHead.Tables[4]; dtSubTypeSum = dsHead.Tables[5]; } if (dtSubInfoSum == null || dtSubInfoSum.Rows.Count < 1) { result.SumSubArea = 0; result.SumSubCount = 0; result.SumSubMode = 0; } else { result.SumSubCount = int.Parse(dtSubInfoSum.Rows[0]["SumC"].ToString()); result.SumSubArea = Convert.ToDecimal(dtSubInfoSum.Rows[0]["SumAREA"].ToString()); result.SumSubMode = Convert.ToDecimal(dtSubInfoSum.Rows[0]["SumMODE"].ToString()); } var listSubTypeCount = new Dictionary(); if (dtSubTypeSum != null && dtSubTypeSum.Rows.Count > 0) { string NameType = string.Empty; int PRODUCTION = 0; int CountRow = 0; foreach (DataRow item in dtSubTypeSum.Rows) { try { PRODUCTION = int.Parse(item["PRODUCTION"].ToString().Trim()); NameType = ((PRODUCTIONEnum)PRODUCTION).GetDescription(); CountRow = int.Parse(item["cdCount"].ToString().Trim()); if (listSubTypeCount.ContainsKey(NameType)) { listSubTypeCount[NameType] += CountRow; } else { listSubTypeCount.Add(NameType, CountRow); } } catch { } } } result.listSubTypeCount = new Dictionary(); if (listSubTypeCount.ContainsKey(PRODUCTIONEnum.Mine.GetDescription())) { result.listSubTypeCount.Add(PRODUCTIONEnum.Mine.GetDescription(), listSubTypeCount[PRODUCTIONEnum.Mine.GetDescription()]); } if (listSubTypeCount.ContainsKey(PRODUCTIONEnum.MineUnderGround.GetDescription())) { result.listSubTypeCount.Add(PRODUCTIONEnum.MineUnderGround.GetDescription(), listSubTypeCount[PRODUCTIONEnum.MineUnderGround.GetDescription()]); } if (listSubTypeCount.ContainsKey(PRODUCTIONEnum.MineChoose.GetDescription())) { result.listSubTypeCount.Add(PRODUCTIONEnum.MineChoose.GetDescription(), listSubTypeCount[PRODUCTIONEnum.MineChoose.GetDescription()]); } if (listSubTypeCount.ContainsKey(PRODUCTIONEnum.Minelast.GetDescription())) { result.listSubTypeCount.Add(PRODUCTIONEnum.Minelast.GetDescription(), listSubTypeCount[PRODUCTIONEnum.Minelast.GetDescription()]); } return result; }); } /// /// 获取首页 培训数据统计 /// /// [HttpPost, Route("HomeSESubYear")] public JsonActionResult> HomeSESubYear([FromBody] KeywordFilter filter) { return SafeExecute(() => { //"公司名称:CNAME 培训人次:PCount(蓝色) 培训场次:RCount(黄色)"; Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; //filter.Parameter1 年 //filter.Parameter2 月 if (string.IsNullOrEmpty(filter.Parameter1)) { throw new Exception("传参有误!"); } if (!string.IsNullOrEmpty(filter.Parameter2)) { int year = dtSecrch.Year; int month = dtSecrch.Month; //查询月度 try { month = Convert.ToInt32(filter.Parameter2); } catch { month = dtSecrch.Month; } if (!string.IsNullOrEmpty(filter.Parameter1)) { try { year = Convert.ToInt32(filter.Parameter1); } catch { year = dtSecrch.Year; } } dtSecrch = Convert.ToDateTime(year + "-" + month + "-01 00:00:00"); dic.Add("@dtMin", dtSecrch.ToString("yyyy-MM-dd 00:00:00")); if (dtSecrch.Year == DateTime.Now.Year && dtSecrch.Month == DateTime.Now.Month) { dic.Add("@dtMax", ""); } else { dic.Add("@dtMax", dtSecrch.AddMonths(1).AddSeconds(-1)); } } else { //年度查询 if (!string.IsNullOrEmpty(filter.Parameter1)) { try { dtSecrch = Convert.ToDateTime(filter.Parameter1); } catch { dtSecrch = DateTime.Now; } } dic.Add("@dtMin", dtSecrch.Year + "-01-01 00:00:00"); if (dtSecrch.Year == DateTime.Now.Year) { dic.Add("@dtMax", ""); } else { dic.Add("@dtMax", dtSecrch.Year + "-12-31 23:59:59"); } } string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSESubYearMonthInfo", dic, HttpContext.Request.Path); DataTable dtR = ds.Tables[0]; DataTable dtP = ds.Tables[1]; List listResult = new List(); string Name = string.Empty; int Count = 0; SubYearCountRP modelCheck = null; foreach (DataRow item in dtR.Rows) { Name = item["CNAME"].ToString(); try { Count = int.Parse(item["RCount"].ToString()); } catch { Count = 0; } modelCheck = listResult.FirstOrDefault(e => e.CName == Name); if (modelCheck == null) { modelCheck = new SubYearCountRP(); modelCheck.CName = Name; modelCheck.RCount = Count; modelCheck.PCount = 0; listResult.Add(modelCheck); } else { modelCheck.RCount += Count; } } foreach (DataRow item in dtP.Rows) { try { Count = int.Parse(item["RCount"].ToString()); } catch { Count = 0; } if (Count == 0) continue; Name = item["CNAME"].ToString(); modelCheck = listResult.FirstOrDefault(e => e.CName == Name); if (modelCheck == null) { //除非执行存储过程异常一般不会 得去找原因 modelCheck = new SubYearCountRP(); modelCheck.CName = Name; modelCheck.RCount = 0; modelCheck.PCount = Count; listResult.Add(modelCheck); } else { modelCheck.PCount += Count; } } return listResult; }); } /// /// 获取首页 培训数据统计 /// 年度各 公司培训分析 /// 各公司 月度培训分析 /// /// [HttpPost, Route("SubMonthInfo")] public JsonActionResult> SubMonthInfo([FromBody] KeywordFilter filter) { return SafeExecute(() => { //"公司名称:CNAME 培训人次:PCount(蓝色) 培训场次:RCount(黄色)"; Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; if (!string.IsNullOrEmpty(filter.Keyword)) { try { dtSecrch = Convert.ToDateTime(filter.Keyword); } catch { dtSecrch = DateTime.Now; } } dic.Add("@dtMin", dtSecrch.Year + "-01-01 00:00:00"); if (dtSecrch.Year == DateTime.Now.Year) { dic.Add("@dtMax", ""); } else { dic.Add("@dtMax", dtSecrch.Year + "-12-31 23:59:59"); } string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSESubMonthInfo", dic, HttpContext.Request.Path); DataTable dtR = ds.Tables[0]; DataTable dtP = ds.Tables[1]; List listResult = new List(); string Name = string.Empty; int Count = 0; SubYearCountRP modelCheck = null; foreach (DataRow item in dtR.Rows) { Name = item["CNAME"].ToString(); try { Count = int.Parse(item["RCount"].ToString()); } catch { Count = 0; } modelCheck = listResult.FirstOrDefault(e => e.CName == Name); if (modelCheck == null) { modelCheck = new SubYearCountRP(); modelCheck.CName = Name; modelCheck.RCount = Count; modelCheck.PCount = 0; listResult.Add(modelCheck); } else { modelCheck.RCount += Count; } } foreach (DataRow item in dtP.Rows) { try { Count = int.Parse(item["PCount"].ToString()); } catch { Count = 0; } if (Count == 0) continue; Name = item["CNAME"].ToString(); modelCheck = listResult.FirstOrDefault(e => e.CName == Name); if (modelCheck == null) { //除非执行存储过程异常一般不会 得去找原因 modelCheck = new SubYearCountRP(); modelCheck.CName = Name; modelCheck.RCount = 0; modelCheck.PCount = Count; listResult.Add(modelCheck); } else { modelCheck.PCount += Count; } } return listResult; }); } /// /// 获取子页 培训类型情况 /// /// [HttpPost, Route("SubTypeMonth")] public JsonActionResult SubTypeMonth([FromBody] KeywordFilter filter) { return SafeExecute(() => { resultHomeSE result = new resultHomeSE(); List listNAME = new List() { "文件学习", "日常培训", "专项培训", "三级教育" }; List MonthRecordCount = new List(); List MonthPersonCount = new List(); Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; 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-01 00:00:00")); dic.Add("@dtMax", dtSecrch.AddMonths(1).AddSeconds(-1)); Guid? OrgID = null; if (!string.IsNullOrEmpty(filter.Parameter2)) { try { OrgID = new Guid(filter.Parameter2.Trim()); } catch { OrgID = null; } } dic.Add("@OrgId", OrgID == null ? "" : OrgID.ToString()); // 场次 人次 //"文件学习", "日常培训", "专项培训"、三级安全教育 string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSESubTypeMonthInfo", dic, HttpContext.Request.Path); #region 数据处理 DataTable dtMR = ds.Tables[0]; DataTable dtMP = ds.Tables[1]; DataTable dtSR = ds.Tables[2]; DataTable dtSP = ds.Tables[3]; int Count = 0; for (int i = 0; i < 4; i++) { Count = 0; if (i == 3) { //三级安全教育 Count = 0; foreach (DataRow item in dtSR.Rows) { Count += (int.Parse(item[0].ToString())); } MonthRecordCount.Add(Count); Count = 0; foreach (DataRow item in dtSP.Rows) { Count += (int.Parse(item[0].ToString())); } MonthPersonCount.Add(Count); } else { //场次 Count = 0; foreach (DataRow item in dtMR.Rows) { if (item["NAME"].ToString() == listNAME[i]) { Count += (int.Parse(item["RCount"].ToString())); } } MonthRecordCount.Add(Count); //人次 Count = 0; foreach (DataRow item in dtMP.Rows) { if (item["NAME"].ToString() == listNAME[i]) { Count += (int.Parse(item["PCount"].ToString())); } } MonthPersonCount.Add(Count); } } #endregion result.listNAME = listNAME; result.MonthRecordCount = MonthRecordCount; result.MonthPersonCount = MonthPersonCount; result.Msg = "培训类型:listNAME 与 各数量对应 培训场次:MonthRecordCount(黄色) 培训人次:MonthPersonCount(蓝色)"; return result; }); } /// /// 各公司证件统计 /// /// [HttpPost, Route("SubCertificateType")] public JsonActionResult>> SubCertificateType([FromBody] KeywordFilter filter) { return SafeExecute(() => { List result = new List(); Dictionary dic = new Dictionary(); DateTime dtSecrch = DateTime.Now; if (!string.IsNullOrEmpty(filter.Parameter1)) { try { dtSecrch = Convert.ToDateTime(filter.Parameter1); } catch { dtSecrch = DateTime.Now; } } dic.Add("@dtMin", dtSecrch.ToString("yyyy-MM-dd 00:00:00")); string strConn = OPTenantDBConnService.GetConnByORGID(filter.OrgId.Value); DataSet ds = DBHelper.ExecProcedure(strConn, "proc_HomeSESubCertificateType", dic, HttpContext.Request.Path); DataTable tb = ds.Tables[0]; DataTable tbC = ds.Tables[1]; int Count = 0; int RCount = tb.Rows.Count; CertificateType mode = null; for (int i = 0; i < RCount; i++) { mode = new CertificateType(); mode.NAME = tb.Rows[i]["Name"].ToString(); mode.CNAME = tb.Rows[i]["CNAME"].ToString(); try { Count = int.Parse(tb.Rows[i]["TCount"].ToString()); } catch { Count = 0; } mode.TCOUNT = Count; result.Add(mode); } List listCerName = result.Select(e => e.NAME).Distinct().ToList(); List listCN = new List(); foreach (DataRow item in tbC.Rows) { listCN.Add(item["NAME"].ToString()); } List> listResult = new List>(); List listT = new List(); listT.Add("公司"); listT.AddRange(listCerName); listT.Add("小计"); listResult.Add(listT); List listD = null; int PerSum = 0; foreach (var item in listCN) { listD = new List(); PerSum = 0; listD.Add(item); foreach (var itemCerName in listCerName) { mode = result.FirstOrDefault(e => e.NAME == itemCerName && e.CNAME == item); PerSum += (mode == null ? 0 : mode.TCOUNT); listD.Add(mode == null ? "0" : mode.TCOUNT.ToString()); } listD.Add(PerSum.ToString()); listResult.Add(listD); } return listResult; }); } } /// /// 主页面 年度 月度 培训统计 /// public class resultHomeSE { public List listNAME { get; set; } public List YearCount { get; set; } public List MonthRecordCount { get; set; } public List MonthPersonCount { get; set; } public string Msg { get; set; } public string TITLE { get; set; } public List listAnnourcement { get; set; } public T_PF_BIPLAY_SET playSet { get; set; } public List listVideoImg { get; set; } /// /// 子公司数量 /// public int SumSubCount { get; set; } /// /// 矿区面积 /// public decimal? SumSubArea { get; set; } /// /// 生产规模 /// public decimal? SumSubMode { get; set; } /// /// 生产单元和数量 /// public Dictionary listSubTypeCount { get; set; } } /// /// 年度 场次 人次 /// public class SubYearCountRP { public string CName { get; set; } public int PCount { get; set; } public int RCount { get; set; } public string Msg { get; set; } } /// /// 证书类型 /// public class CertificateType { public string CNAME { get; set; } public string NAME { get; set; } public int TCOUNT { get; set; } } }