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