zhuangpei-mesbackend/DOAN.Service/MES/BI/MaterialProgressService.cs
qianhao.xu f49d402894 提交
2025-02-25 13:52:50 +08:00

91 lines
3.7 KiB
C#

using DOAN.Model.MES.base_;
using DOAN.Model.MES.BI.Dto;
using DOAN.Model.MES.dev;
using DOAN.Model.MES.mm;
using DOAN.Model.Mobile.Dto;
using DOAN.Service.MES.BI.IService;
using DOAN.Service.MES.dev.IService;
using Infrastructure.Attribute;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace DOAN.Service.MES.BI
{
/// <summary>
/// 备料进度大屏
/// </summary>
[AppService(ServiceType = typeof(IMaterialProgressService), ServiceLifetime = LifeTime.Transient)]
public class MaterialProgressService : BaseService<DeviceAccount>, IMaterialProgressService
{
/// <summary>
/// 查看备料进度大屏
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public List<MaterialProgressDto> ViewMaterialParationProgress(DateTime dateTime)
{
var RequireMaterial = Context.Queryable<BaseWorkRoute>().LeftJoin<MmRequirePlanByline>((r, p) => r.Code == p.LineCode)
.Where((r, p) => p.RequireDate == dateTime|| p.RequireDate ==null)
.Select((r, p) => new
{
LineCode = r.Code,
LineName = r.Name,
MaterialCode = p.MaterialCode,
MaterialName = p.MaterialName,
PlanNum = p.RequireNum
}).ToList();
var ActualNumMaterial = Context.Queryable<BaseWorkRoute>().LeftJoin<MmPreparationTaskLine>((r, t) => r.Code == t.LineCode)
.LeftJoin<MmTaskMaterialInfoByLine>((r, t, i) => t.TaskCode == i.FkTaskCode)
.Where((r, t, i) => t.TaskDate == dateTime)
.GroupBy((r, t, i) => new { r.Code,r.Name,i.MaterialCode, i.MaterialName })
.Select((r, t, i) => new
{
LineCode = r.Code,
LineName = r.Name,
MaterialCode = i.MaterialCode,
MaterialName = i.MaterialName,
ActualNum = SqlFunc.AggregateSum(i.Quantity),
}).ToList();
List<MaterialProgressDto2> MaterialProgressDto2 = new List<MaterialProgressDto2>();
foreach (var r in RequireMaterial)
{
MaterialProgressDto2 progressDto2 = new MaterialProgressDto2();
progressDto2.Date = dateTime;
progressDto2.LineCode = r.LineCode;
progressDto2.LineName = r.LineName;
progressDto2.MaterialCode = r.MaterialCode;
progressDto2.MaterialName = r.MaterialName;
progressDto2.PlanNum = r.PlanNum;
progressDto2.ActualNum = ActualNumMaterial
.Where(it => it.LineCode == progressDto2.LineCode)
.Where(it => it.MaterialCode == progressDto2.MaterialCode).Select(it => it.ActualNum).FirstOrDefault();
MaterialProgressDto2.Add(progressDto2);
}
return MaterialProgressDto2.GroupBy(it => new { it.Date, it.LineCode, it.LineName }).Select(group => new MaterialProgressDto()
{
Date = group.Key.Date,
LineCode = group.Key.LineCode,
LineName = group.Key.LineName,
materialInfos = group.Select(item => new MaterialInfo
{
MaterialCode = item.MaterialCode,
MaterialName = item.MaterialName,
PlanNum =item.PlanNum,
ActualNum = item.ActualNum
}).ToList()
}).ToList();
}
}
}