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