371 lines
15 KiB
C#
371 lines
15 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 安全检查情况综合统计分析
|
|
/// 业务数据抽取 保存到表单
|
|
/// </summary>
|
|
public partial class BIBSSafeCheckService : CommonService, IBIBSSafeCheckService
|
|
{
|
|
public BIBSSafeCheckService(IRepository repository)
|
|
: base(repository)
|
|
{
|
|
}
|
|
|
|
#region 安全检查情况综合统计分析
|
|
|
|
/// <summary>
|
|
///
|
|
/// </summary>
|
|
/// <param name="ORG_ID"></param>
|
|
/// <param name="dtRun"></param>
|
|
/// <param name="listSafeCheck"></param>
|
|
/// <param name="listCheckType"></param>
|
|
/// <param name="listSummary"></param>
|
|
/// <param name="modelLog"></param>
|
|
/// <returns></returns>
|
|
public bool SafeCheckGet(Guid ORG_ID, DateTime? dtRun, ref List<T_BI_BSSAFECHECK> listSafeCheck, ref List<T_BI_BSCHECKTYPE> listCheckType, ref List<T_BI_SUMMARY> 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<T_BI_RUNLOG>(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<T_BI_BSSAFECHECK>();
|
|
//listCheckType = new List<T_BI_BSCHECKTYPE>();
|
|
//listSummary = new List<T_BI_SUMMARY>();
|
|
List<T_BI_BSSAFECHECK> listSafeCheckFiliter = null;//为了登记 数量的中间参数
|
|
|
|
|
|
//三者时间对应
|
|
List<FilterTimeType> listTimeType = new List<FilterTimeType>();
|
|
List<DateTime> listStart = new List<DateTime>();
|
|
List<DateTime> listEnd = new List<DateTime>();
|
|
|
|
#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<T_BS_SAFE_CHECK>(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<BSMineTypeEditEnum> listMineType = new List<BSMineTypeEditEnum>();
|
|
#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<T_FM_DEPARTMENT> listTeam = new List<T_FM_DEPARTMENT>();
|
|
#region 班组
|
|
//List<Guid> listDepID = null;
|
|
//if (listSafeChecks != null && listSafeChecks.Any())
|
|
//{
|
|
// //FMDepartmentType 部门 = 0, 车间 = 1, 班组 = 2, 公司 = 3
|
|
// listDepID = listSafeChecks.Select(e => e.DEPARTMENTID.Value).Distinct().ToList();
|
|
// var listDep = GetEntities<T_FM_DEPARTMENT>(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<T_BS_CHECK_TYPE> checkTypes = null;
|
|
#region 班组安全检查情况
|
|
|
|
for (int i = 0; i < listMineType.Count; i++)
|
|
{
|
|
//矿类型
|
|
CHECKOBJECT = (int)listMineType[i];
|
|
|
|
List<T_FM_DEPARTMENT> listTeam = new List<T_FM_DEPARTMENT>();
|
|
|
|
#region 班组
|
|
List<Guid> 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<T_FM_DEPARTMENT>(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<T_BS_CHECK_TYPE>(e => listCheckTypeID.Contains(e.ID), null);
|
|
var checkTypes = this.GetEntities<T_BS_CHECK_TYPE>(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<T_BI_BSSAFECHECK>();
|
|
//搜索条件时间类型
|
|
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
|
|
|
|
}
|
|
} |