using APT.BaseData.Domain.Entities.FM;
using APT.BaseData.Domain.Enums;
using APT.BaseData.Domain.IServices.BI;
using APT.Infrastructure.Api;
using APT.Infrastructure.Core;
using APT.MS.Domain.Entities.BI;
using APT.MS.Domain.Entities.BS;
using APT.MS.Domain.Entities.SK;
using APT.MS.Domain.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
namespace APT.BaseData.Services.Services.BI
{
public partial class BIHomeService : CommonService, IBIHomeService
{
public BIHomeService(IRepository repository) : base(repository)
{
}
///
/// 查询首页的隐患原因
///
///
/// 查询部门
///
public IEnumerable GetHomeReasons(Guid? OrgID, List listDep)
{
if (listDep == null || listDep.Count < 1)
{
return new List();
}
int year = DateTime.Now.Year;
BaseFilter filter = new BaseFilter();
filter.OrgId = OrgID;
filter.Order = DbOrder.ASC;
filter.Sort = "NUM";
List listDepID = listDep.Select(e => e.ID).ToList();
var listModelReason = GetEntities(e => !e.IS_DELETED, filter);
Expression> expression = e => e.YEAR == year && e.TYPE == BSCaculateType.RiskReason;
if (listDepID.Count > 1)
expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID));
else
expression = expression.And(e => e.DEPARTMENT_ID == listDepID[0]);
BaseFilter filterR = new BaseFilter();
filterR.OrgId = OrgID;
//filterR.Order = DbOrder.ASC;
//filterR.Sort = "NUMD";
filterR.Orders.Add(new DataOrder() { Field = "NUMD", Order = DbOrder.ASC });
filterR.Orders.Add(new DataOrder() { Field = "NUMS", Order = DbOrder.ASC });
IEnumerable listReason = GetOrderEntities(expression, filterR);
foreach (var item in listReason)
{
item.SOURCENAME = listModelReason.First(e => e.ID == item.SOURCEID).NAME;
item.DEPARTMENTNAME = listDep.First(e => e.ID == item.DEPARTMENT_ID).NAME;
}
return listReason;
}
///
/// 查询首页的隐患整改情况 月度
///
///
/// 查询部门
/// 提前月份
///
public IEnumerable GetHomeCorrectOld(Guid? OrgID, List listDep, int? MonthBefo = 5)
{
if (listDep == null || listDep.Count < 1)
{
return new List();
}
DateTime dtMin = DateTime.Now.AddMonths(-1 * MonthBefo.Value);
List listDepID = listDep.Select(e => e.ID).ToList();
Expression> expression = e => e.TYPE == BSCaculateType.RiskCorrect;
if (dtMin.Year == DateTime.Now.Year)
{
expression = expression.And(e => e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month);
}
else
{
expression = expression.And(e => ((e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month) || e.YEAR > dtMin.Year));
}
if (listDepID.Count > 1)
expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID));
else
expression = expression.And(e => e.DEPARTMENT_ID == listDepID[0]);
BaseFilter filterR = new BaseFilter();
filterR.OrgId = OrgID;
//filterR.Order = DbOrder.ASC;
//filterR.Sort = "NUMD";
filterR.Orders.Add(new DataOrder() { Field = "DEPARTMENT_ID", Order = DbOrder.ASC });
filterR.Orders.Add(new DataOrder() { Field = "SOURCEVAL", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
filterR.Orders.Add(new DataOrder() { Field = "YEAR", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
filterR.Orders.Add(new DataOrder() { Field = "MONTH", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
IEnumerable listReason = GetOrderEntities(expression, filterR);
foreach (var item in listReason)
{
try
{
item.SOURCENAME = ((BSCorrectType)item.SOURCEVAL).GetDescription();//wyw pp item.SOURCEVAL=0
item.DEPARTMENTNAME = listDep.First(e => e.ID == item.DEPARTMENT_ID).NAME;
}
catch { }
}
return listReason;
}
///
/// 查询首页的隐患整改情况 月度
///
///
/// 查询部门
/// 提前月份
///
public IEnumerable GetHomeCorrect(Guid? OrgID, List listDep, int? MonthBefo = 5)
{
if (listDep == null || listDep.Count < 1)
{
return new List();
}
var temps= new List();
var fiter = new BaseFilter();
fiter.OrgId = OrgID;
fiter.IgnoreDataRule = true;
var hiddens = this.GetEntities(t => t.APPLY_DEPARTMENT_ID != null && t.CREATE_TIME.Value.Year == DateTime.Now.Year, fiter);
if (hiddens != null && hiddens.Any())
{
var groups = hiddens.GroupBy(t => new { t.APPLY_DEPARTMENT_ID,t.CREATE_TIME.Value.Month }).ToList();
foreach (var group in groups)
{
T_BI_HOME_BSRISKREASON home = new T_BI_HOME_BSRISKREASON();
home.DEPARTMENT_TYPE = (FMDepartmentType)listDep.FirstOrDefault(t=>t.ID == group.Key.APPLY_DEPARTMENT_ID)?.DEPARTMENT_TYPE;
home.TYPE = BSCaculateType.RiskCorrect;
home.YEAR = DateTime.Now.Year;
home.MONTH = group.Key.Month;
home.DEPARTMENT_ID = (Guid)group.Key.APPLY_DEPARTMENT_ID;
home.SOURCEVAL = 20;
var finishQty = hiddens.Count(t => t.APPLY_DEPARTMENT_ID == group.Key.APPLY_DEPARTMENT_ID && t.CREATE_TIME.Value.Month == group.Key.Month && t.STATUS == Domain.Enums.PF.PFStandardStatus.Archived);
var totalQty = hiddens.Count(t => t.APPLY_DEPARTMENT_ID == group.Key.APPLY_DEPARTMENT_ID && t.CREATE_TIME.Value.Month == group.Key.Month);
home.PERCENT = totalQty==0? 0 : (decimal)Math.Round(100.00 * finishQty / totalQty, 2);
temps.Add(home);
}
foreach (var item in hiddens)
{
T_BI_HOME_BSRISKREASON home = new T_BI_HOME_BSRISKREASON();
home.DEPARTMENT_TYPE = (FMDepartmentType)listDep.FirstOrDefault(t => t.ID == item.APPLY_DEPARTMENT_ID)?.DEPARTMENT_TYPE;
home.TYPE = BSCaculateType.RiskCorrect;
home.YEAR = item.CREATE_TIME.Value.Year;
home.MONTH = item.CREATE_TIME.Value.Month;
home.DEPARTMENT_ID = (Guid)item.APPLY_DEPARTMENT_ID;
home.SOURCEVAL = item.STATUS != Domain.Enums.PF.PFStandardStatus.Archived ? 15:item.MODIFY_TIME>item.COMPLETE_DATE?10:5;
temps.Add(home);
}
}
DateTime dtMin = DateTime.Now.AddMonths(-1 * MonthBefo.Value);
List listDepID = listDep.Select(e => e.ID).ToList();
//Expression> expression = e => e.TYPE == BSCaculateType.RiskCorrect;
//if (dtMin.Year == DateTime.Now.Year)
//{
// expression = expression.And(e => e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month);
//}
//else
//{
// expression = expression.And(e => ((e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month) || e.YEAR > dtMin.Year));
//}
//if (listDepID.Count > 1)
// expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID));
//else
// expression = expression.And(e => e.DEPARTMENT_ID == listDepID[0]);
//BaseFilter filterR = new BaseFilter();
//filterR.OrgId = OrgID;
//filterR.Orders.Add(new DataOrder() { Field = "DEPARTMENT_ID", Order = DbOrder.ASC });
//filterR.Orders.Add(new DataOrder() { Field = "SOURCEVAL", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
//filterR.Orders.Add(new DataOrder() { Field = "YEAR", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
//filterR.Orders.Add(new DataOrder() { Field = "MONTH", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
//IEnumerable listReason = GetOrderEntities(expression, filterR);
var listReason = temps.OrderBy(t => t.DEPARTMENT_ID).ThenBy(m => m.SOURCEVAL).ThenBy(n => n.MONTH).ToList();
foreach (var item in listReason)
{
try
{
item.SOURCENAME = ((BSCorrectType)item.SOURCEVAL).GetDescription();//wyw pp item.SOURCEVAL=0
item.DEPARTMENTNAME = listDep.First(e => e.ID == item.DEPARTMENT_ID).NAME;
}
catch { }
}
return listReason;
}
///
/// 查询首页的隐患整改情况 年度 方法使用前提 先执行一下12个月的 整改情况
///
///
/// 查询部门
/// 提前月份
///
public IEnumerable GetHomeCorrectYear(Guid? OrgID, List listDep, int MonthBefo = 0)
{
if (listDep == null || listDep.Count < 1)
{
return new List();
}
int year = DateTime.Now.Year;
List listDepID = listDep.Select(e => e.ID).ToList();
Expression> expression = e => e.TYPE == BSCaculateType.RiskCorrect && e.SOURCEVAL != 20;
if (MonthBefo == 0)
{
expression = expression.And(e => e.YEAR == year);
}
else
{
DateTime dtMin = DateTime.Now.AddMonths(-1 * MonthBefo);
expression = expression.And(e => ((e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month) || e.YEAR > dtMin.Year));
}
if (listDepID.Count > 1)
expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID));
else
expression = expression.And(e => e.DEPARTMENT_ID == listDepID[0]);
BaseFilter filterR = new BaseFilter();
filterR.OrgId = OrgID;
//filterR.Order = DbOrder.ASC;
//filterR.Sort = "NUMD";
filterR.Orders.Add(new DataOrder() { Field = "DEPARTMENT_ID", Order = DbOrder.ASC });
filterR.Orders.Add(new DataOrder() { Field = "SOURCEVAL", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
IEnumerable listReason = GetOrderEntities(expression, filterR);
foreach (var item in listReason)
{
try
{
item.SOURCENAME = ((BSCorrectType)item.SOURCEVAL).GetDescription();
item.DEPARTMENTNAME = listDep.First(e => e.ID == item.DEPARTMENT_ID).NAME;
}
catch { }
}
return listReason;
}
///
/// 安全检查 月度 检查类型 数量
///
///
/// 查询部门
/// 提前月份
///
public IEnumerable GetHomeCheckCountMonth(Guid? OrgID, List listDep, int? MonthBefo = 5)
{
if (listDep == null || listDep.Count < 1)
{
return new List();
}
DateTime dtMin = DateTime.Now.AddMonths(-1 * MonthBefo.Value);
List listDepID = listDep.Select(e => e.ID).ToList();
Expression> expression = e => e.TYPE == BSCaculateType.SafeCheck;
if (dtMin.Year == DateTime.Now.Year)
{
expression = expression.And(e => e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month);
}
else
{
expression = expression.And(e => ((e.YEAR == dtMin.Year && e.MONTH >= dtMin.Month) || e.YEAR > dtMin.Year));
}
if (listDepID.Count > 1)
expression = expression.And(e => listDepID.Contains(e.DEPARTMENT_ID));
else
expression = expression.And(e => e.DEPARTMENT_ID == listDepID[0]);
BaseFilter filterR = new BaseFilter();
filterR.OrgId = OrgID;
//filterR.Order = DbOrder.ASC;
//filterR.Sort = "NUMD";
filterR.Orders.Add(new DataOrder() { Field = "DEPARTMENT_ID", Order = DbOrder.ASC });
filterR.Orders.Add(new DataOrder() { Field = "SOURCEID", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
filterR.Orders.Add(new DataOrder() { Field = "MONTH", Order = DbOrder.ASC });// 直接按枚举值 排序 NUMS
IEnumerable listReason = GetOrderEntities(expression, filterR);
//foreach (var item in listReason)
//{
// //item.SOURCENAME = ((BSCorrectType)item.SOURCEVAL).GetDescription();
// item.DEPARTMENTNAME = listDep.First(e => e.ID == item.DEPARTMENT_ID).NAME;
//}
return listReason;
}
}
}