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; }
+ }
+}