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