using APT.BaseData.Domain.Entities.FM; using APT.BaseData.Domain.IServices; using APT.Infrastructure.Api; using APT.Infrastructure.Core; using APT.MS.Domain.Entities.BI; using APT.MS.Domain.Entities.BS; using APT.MS.Domain.Enums; using System; using System.Collections.Generic; using System.Linq; using System.Text; using static APT.MS.Domain.Enums.BI.BIEnums; namespace APT.BaseData.Services.DomainServices //namespace APT.BaseData.Services.Services.BI { /// /// 安全检查情况综合统计分析 /// 业务数据抽取 保存到表单 /// public partial class BIBSSafeCheckService : CommonService, IBIBSSafeCheckService { public BIBSSafeCheckService(IRepository repository) : base(repository) { } #region 安全检查情况综合统计分析 /// /// /// /// /// /// /// /// /// /// public bool SafeCheckGet(Guid ORG_ID, DateTime? dtRun, ref List listSafeCheck, ref List listCheckType, ref List listSummary, ref T_BI_RUNLOG modelLog) { //统计时间 if (!dtRun.HasValue) dtRun = DateTime.Now; DateTime? dtMin = null; DateTime dtNow = DateTime.Now; string Code = "BI002_BSSAFECHECK"; //编码 modelLog = GetEntity(e => e.CODE == Code); #region 日志登记时间 if (modelLog == null) { modelLog = new T_BI_RUNLOG(); modelLog.ID = Guid.NewGuid(); modelLog.IS_DELETED = false; modelLog.ORG_ID = ORG_ID; modelLog.CREATE_TIME = dtNow; //modelLog.ENTITY_ORG_TPYE =; //modelLog.FORM_ID =; //modelLog.FLOW_STATUS =; //modelLog.FLOW_SEND_STATUS =; //modelLog.FLOW_ID =; //modelLog.CREATER_ID =; //modelLog.MODIFIER_ID =; } modelLog.CODE = Code; modelLog.RUNDATETIME = dtRun.Value; modelLog.MODIFY_TIME = dtNow; #endregion //数据 删除后新增 T_BI_BSSAFECHECK T_BI_BSCHECKTYPE //数据 更新(新增或者修改) T_BI_SUMMARY //listSafeCheck = new List(); //listCheckType = new List(); //listSummary = new List(); List listSafeCheckFiliter = null;//为了登记 数量的中间参数 //三者时间对应 List listTimeType = new List(); List listStart = new List(); List listEnd = new List(); #region 获取类型对应起止时间 listTimeType.Add(FilterTimeType.LastWeek); listTimeType.Add(FilterTimeType.LastMonth); listTimeType.Add(FilterTimeType.LastThreeMonth); listTimeType.Add(FilterTimeType.LastHalfYear); listTimeType.Add(FilterTimeType.LastYear); for (int i = 0; i < listTimeType.Count; i++) { listEnd.Add(dtRun.Value); switch (listTimeType[i]) { case FilterTimeType.LastWeek: listStart.Add(dtRun.Value.AddDays(-7)); break; case FilterTimeType.LastMonth: listStart.Add(dtRun.Value.AddMonths(-1)); break; case FilterTimeType.LastThreeMonth: listStart.Add(dtRun.Value.AddMonths(-3)); break; case FilterTimeType.LastHalfYear: listStart.Add(dtRun.Value.AddMonths(-6)); break; case FilterTimeType.LastYear: dtMin = dtRun.Value.AddYears(-1); listStart.Add(dtMin.Value); break; default: break; } } #endregion //安全检查 按创建时间 最长时间获取 var listSafeChecks = GetEntities(e => !e.IS_DELETED && e.CREATE_TIME.HasValue && e.CREATE_TIME >= dtMin && e.CREATE_TIME <= listEnd[0] && e.CHECKOBJECT.HasValue && e.CHECK_TYPE_ID.HasValue && e.DEPARTMENTID.HasValue); List listMineType = new List(); #region 矿类型 if (listSafeChecks != null && listSafeChecks.Any()) { var listCheckOBJECT = listSafeChecks.Where(e => e.CHECKOBJECT.HasValue).Select(e => e.CHECKOBJECT).Distinct(); foreach (var item in listCheckOBJECT) { if (!listMineType.Contains((BSMineTypeEditEnum)item)) { listMineType.Add((BSMineTypeEditEnum)item); } } } else { //listMineType.Add(BSMineTypeEditEnum.MineChoose); //listMineType.Add(BSMineTypeEditEnum.Minelast); //listMineType.Add(BSMineTypeEditEnum.MineUnderground); listMineType.Add(BSMineTypeEditEnum.Mine); } #endregion //List listTeam = new List(); #region 班组 //List listDepID = null; //if (listSafeChecks != null && listSafeChecks.Any()) //{ // //FMDepartmentType 部门 = 0, 车间 = 1, 班组 = 2, 公司 = 3 // listDepID = listSafeChecks.Select(e => e.DEPARTMENTID.Value).Distinct().ToList(); // var listDep = GetEntities(e => listDepID.Contains(e.ID) && e.DEPARTMENT_TYPE == 2).OrderBy(e => e.NAME); // foreach (var item in listDep) // { // if (!listTeam.Contains(item)) // { // listTeam.Add(item); // } // } //} //if (listDepID == null) //{ // //返回数据 //} //else //{ // //计算 //} #endregion #region 数据计算 DateTime? dtStart = null; DateTime? dtEnd = null; int CHECKOBJECT = 0; Guid TeamID = Guid.Empty; int COUNTPLAN = 0; int COUNTCHECK = 0; int COUNTCHECKOUTTIME = 0; string PERCENTCHECK = "0%"; //时间类型 T_BI_SUMMARY modelSummary = null; //IEnumerable checkTypes = null; #region 班组安全检查情况 for (int i = 0; i < listMineType.Count; i++) { //矿类型 CHECKOBJECT = (int)listMineType[i]; List listTeam = new List(); #region 班组 List listDepID = null; if (listSafeChecks != null && listSafeChecks.Any()) { //FMDepartmentType 部门 = 0, 车间 = 1, 班组 = 2, 公司 = 3 listDepID = listSafeChecks.Where(e => e.CHECKOBJECT == CHECKOBJECT).Select(e => e.DEPARTMENTID.Value).Distinct().ToList(); var listDep = GetEntities(e => listDepID.Contains(e.ID) && e.DEPARTMENT_TYPE == 2).OrderBy(e => e.NAME); foreach (var item in listDep) { if (!listTeam.Contains(item)) { listTeam.Add(item); } } } #endregion //检查类型 var listPerType = listSafeChecks.Where(e => e.CHECKOBJECT.Value == CHECKOBJECT);//&& listDepID.Contains(e.DEPARTMENTID.Value) var listCheckTypeID = listPerType.Select(e => e.CHECK_TYPE_ID.Value).Distinct().ToList(); //var checkTypes = this.GetEntities(e => listCheckTypeID.Contains(e.ID), null); var checkTypes = this.GetEntities(e => listCheckTypeID.Contains(e.ID)); for (int j = 0; j < listTimeType.Count; j++) { dtStart = listStart[j]; dtEnd = listEnd[j]; #region 安全检查情况占比 //安全检查情况占比 foreach (var item in checkTypes) { //var listTypeTime = listPerType.Select(e => e.CREATE_TIME >= dtStart && e.CREATE_TIME <= dtEnd && e.CHECK_TYPE_ID == item.ID); var listTypeTime = listPerType.Where(e => e.CREATE_TIME >= dtStart && e.CREATE_TIME <= dtEnd && e.CHECK_TYPE_ID == item.ID); listCheckType.Add(new T_BI_BSCHECKTYPE() { ID = Guid.NewGuid(), TimeType = listTimeType[j], MineType = listMineType[i], CHECKTYPEID = item.ID, name = item.NAME, value = (listTypeTime == null || !listTypeTime.Any()) ? "0" : listTypeTime.Where(e => e.CHECK_TYPE_ID == item.ID).Count().ToString(), IS_DELETED = false, ORG_ID = ORG_ID, //ENTITY_ORG_TPYE = , //FORM_ID = , //FLOW_STATUS = , //FLOW_SEND_STATUS = , //FLOW_ID = , CREATE_TIME = dtNow, //MODIFY_TIME = , //CREATER_ID = , //MODIFIER_ID = , }); } #endregion listSafeCheckFiliter = new List(); //搜索条件时间类型 for (int k = 0; k < listTeam.Count; k++) { //小组 TeamID = listTeam[k].ID; var listPer = listSafeChecks.Where(e => e.CREATE_TIME >= dtStart && e.CREATE_TIME <= dtEnd && e.CHECKOBJECT.HasValue && e.CHECKOBJECT.Value == CHECKOBJECT && e.DEPARTMENTID == TeamID); if (listPer != null && listPer.Any()) { COUNTPLAN = listPer.Count(); COUNTCHECKOUTTIME = listPer.Where(e => e.APPROVE_ID.HasValue && !e.ISFINISHINTTIME).Count(); //COUNTCHECK = listPer.Where(e => e.STATUCHECK == 0).Count(); COUNTCHECK = listPer.Where(e => e.APPROVE_ID.HasValue).Count(); PERCENTCHECK = decimal.Round(Convert.ToDecimal(100.0 * COUNTCHECK / COUNTPLAN), 2) + "%";//保留2位小数 } else { COUNTPLAN = 0; COUNTCHECK = 0; COUNTCHECKOUTTIME = 0; PERCENTCHECK = "0%"; } listSafeCheckFiliter.Add(new T_BI_BSSAFECHECK() { ID = Guid.NewGuid(), TimeType = listTimeType[j], MineType = listMineType[i], TEAMID = TeamID, TEAMNAME = listTeam[k].NAME, COUNTPLAN = COUNTPLAN,//计划检查 COUNTCHECK = COUNTCHECK,//检查 COUNTCHECKOUTTIME = COUNTCHECKOUTTIME,//超时完成 PERCENTCHECK = PERCENTCHECK, IS_DELETED = false, ORG_ID = ORG_ID, //ENTITY_ORG_TPYE = , //FORM_ID = , //FLOW_STATUS = , //FLOW_SEND_STATUS = , //FLOW_ID = , CREATE_TIME = dtNow, //MODIFY_TIME = , //CREATER_ID = , //MODIFIER_ID = , }); } #region 数量统计 modelSummary modelSummary = listSummary.FirstOrDefault(e => e.MineType == listMineType[i] && e.TimeType == listTimeType[j]); if (modelSummary == null) { modelSummary = new T_BI_SUMMARY(); modelSummary.ID = Guid.NewGuid(); modelSummary.CODE = Code; modelSummary.MineType = listMineType[i]; modelSummary.TimeType = listTimeType[j]; modelSummary.ORG_ID = ORG_ID; modelSummary.IS_DELETED = false; modelSummary.CREATE_TIME = dtNow; modelSummary.Parameter1 = "计划检查数"; modelSummary.Parameter2 = "按时完成"; modelSummary.Parameter3 = "超时完成"; modelSummary.Parameter4 = "未完成数"; modelSummary.Parameter5 = dtStart.Value.ToString("yyyyMMdd") + " - " + dtEnd.Value.ToString("yyyyMMdd"); dtStart = listStart[j]; dtEnd = listEnd[j]; } modelSummary.MODIFY_TIME = dtNow; modelSummary.Count1 = 0; modelSummary.Count2 = 0; modelSummary.Count3 = 0; modelSummary.Count4 = 0; #endregion //数据 计算 if (listSafeCheckFiliter.Count > 0) { foreach (var item in listSafeCheckFiliter) { modelSummary.Count1 += item.COUNTPLAN;//计划检查数 modelSummary.Count4 += (item.COUNTPLAN - item.COUNTCHECK);//未完成数 modelSummary.Count3 += item.COUNTCHECKOUTTIME;//超时完成 } modelSummary.Count2 = modelSummary.Count1 - modelSummary.Count2 - modelSummary.Count4;//按时完成= 计划数-超时完成 -未完成 listSafeCheck.AddRange(listSafeCheckFiliter);//数据添加 } listSummary.Add(modelSummary);//数据添加 } } #endregion #endregion return true; } #endregion } }