From 3ac070fa047619a070367d3a95088f4f742028a0 Mon Sep 17 00:00:00 2001 From: wyw <571921741@qq.com> Date: Thu, 16 Apr 2026 10:31:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=B9=E8=AE=AD=E6=95=99=E8=82=B2=20?= =?UTF-8?q?=E9=9B=86=E5=9B=A2=E7=89=88=20=E6=8A=A5=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Api/BIController/BIHeadSEController.cs | 348 ++++++++++++++++++ 1 file changed, 348 insertions(+) create mode 100644 APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIHeadSEController.cs diff --git a/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIHeadSEController.cs b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIHeadSEController.cs new file mode 100644 index 0000000..e314443 --- /dev/null +++ b/APT.MicroApi/APT.SC.WebApi/Controllers/Api/BIController/BIHeadSEController.cs @@ -0,0 +1,348 @@ +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.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)); + + // 年度场次 月度场次 月度人次 + //"文件学习", "日常培训", "专项培训" + DataSet ds = ExecProcedure(filter.OrgId.Value, "proc_HomeSEtrInfo", dic); + //三级安全教育 + DataSet dsSj = ExecProcedure(filter.OrgId.Value, "proc_HomeSESJtrInfo", dic); + + #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(蓝色)"; + return result; + }); + } + + + /// + /// 获取首页 培训数据统计 + /// + /// + [HttpPost, Route("HomeSESubYear")] + public JsonActionResult> HomeSESubYear([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"); + } + + DataSet ds = ExecProcedure(filter.OrgId.Value, "proc_HomeSESubYearInfo", dic); + 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; + }); + } + + /// + /// 执行视图 + /// + /// + /// + /// 参数 key:@XXX value:val + /// + /// + private DataSet ExecProcedure(Guid orgID, string proName, Dictionary dicParms) + { + DataSet dataSet = new DataSet(); + string strConn = OPTenantDBConnService.GetConnByORGID(orgID);//获取数据库链接 + using (SqlConnection connection = new SqlConnection(strConn)) + { + try + { + connection.Open(); + string sql = proName; + using (SqlCommand Com = new SqlCommand(sql, connection)) + { + Com.CommandType = CommandType.StoredProcedure; + foreach (var item in dicParms) + { + Com.Parameters.Add(new SqlParameter(item.Key, item.Value)); + } + using (var adapter = new SqlDataAdapter(Com)) + { + adapter.Fill(dataSet); // 自动处理多个结果集! + } + } + } + catch (Exception ex) + { + if (!string.IsNullOrEmpty(ex.StackTrace)) + throw new Exception("错误日志:[StackTrace]" + ex.StackTrace); + else + throw new Exception("【" + HttpContext.Request.Path + "】错误日志:[Message]" + ex.Message); + } + finally + { + connection.Close(); + } + } + return dataSet; + } + } + + /// + /// 主页面 年度 月度 培训统计 + /// + 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 class SubYearCountRP + { + public string CName { get; set; } + public int PCount { get; set; } + public int RCount { get; set; } + public string Msg { get; set; } + } +}