using DOAN.Model.MES.Group.Dto; using DOAN.Model.MES.order; using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.product; using DOAN.Model.MES.product.Dto; using DOAN.Service.MES.Group.IService; using DOAN.Service.MES.Order.IService; using Infrastructure.Attribute; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DOAN.Service.MES.Group { [AppService(ServiceType = typeof(IAchievementService), ServiceLifetime = LifeTime.Transient)] public class AchievementService : BaseService, IAchievementService { /// /// 获取员工绩效列表 /// /// /// public List GetstaffAchievementList(AchievementQueryDto parm) { var predicate = QueryExp(parm); return Context.Queryable().Where(predicate.ToExpression()) .GroupBy(x => x.Worker) .Select(it=>new AchievementDto { Worker = it.Worker, MaterialUse=SqlFunc.Subqueryable().Where(x=>x.Worker==it.Worker&&x.ProcessId==10).Where(predicate.ToExpression()).Sum(x=>x.FinishNum??0), MechanicalProcessing = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 20).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), MiddleCheck = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), Handgrind = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), Machinegrind = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), Finegrind = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), WarehouseInspection = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), Shipment = SqlFunc.Subqueryable().Where(x => x.Worker == it.Worker && x.ProcessId == 10).Where(predicate.ToExpression()).Sum(x => x.FinishNum ?? 0), }).Distinct().ToList(); } private static Expressionable QueryExp(AchievementQueryDto parm) { var predicate = Expressionable.Create() .AndIF(!string.IsNullOrEmpty(parm.Worker), it => it.Worker.Contains(parm.Worker)) .AndIF(parm.JobDatetime != null&& parm.JobDatetime[0]>DateTime.MinValue, it => it.JobDateTime >=parm.JobDatetime[0]) .AndIF(parm.JobDatetime != null&& parm.JobDatetime[0]>DateTime.MinValue, it => it.JobDateTime <=parm.JobDatetime[1]) ; return predicate; } } }