Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/Order/DeliveryScheduleService.cs
2026-02-07 12:32:24 +08:00

105 lines
4.4 KiB
C#

using DOAN.Model.MES.order;
using DOAN.Model.MES.order.Dto;
using DOAN.Model.MES.Order.Dto;
using DOAN.Model.MES.product;
using DOAN.Service.MES.order.IService;
using DOAN.Service.MES.Order.IService;
using Infrastructure.Attribute;
using Infrastructure.Converter;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DOAN.Service.MES.Order
{
[AppService(ServiceType = typeof(IDeliveryScheduleService), ServiceLifetime = LifeTime.Transient)]
public class DeliveryScheduleService : BaseService<OrderPurchase>, IDeliveryScheduleService
{
/// <summary>
/// 获取交付进度
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public List<OrderScheduleDto> GetList(OrderPurchaseQueryDto parm)
{
// 日期处理
if (parm != null && parm.ImportDate != null && parm.ImportDate.Length > 0)
{
if (parm.ImportDate[0] > DateTime.MinValue)
{
parm.ImportDate[0] = DOANConvertDate.ConvertLocalDate(parm.ImportDate[0]);
}
if (parm.ImportDate[1] > DateTime.MinValue)
{
parm.ImportDate[1] = DOANConvertDate.ConvertLocalDate(parm.ImportDate[1]);
}
}
var predicate = QueryExp(parm);
var queryResult = Context.Queryable<OrderPurchase>()
.LeftJoin<ProWorkorder>((o, w) => o.OrderNoMes == w.CustomerOrder)
.Where(predicate.ToExpression())
.Where((o, w) => !SqlFunc.IsNullOrEmpty(o.OrderNoMes))
.OrderBy((o, w) => o.OrderNoMes)
.Select((o, w) => new OrderScheduleDto
{
Id = o.Id,
ImportDate = o.ImportDate,
OrderNoMes = o.OrderNoMes,
PurchaseOrderErp = o.PurchaseOrderErp,
Poitem = o.Poitem,
Variety = o.Variety,
Specordindicator = o.Specordindicator,
KdType = o.KdType,
DocumentDate = o.DocumentDate,
Seller = o.Seller,
SalesArea = o.SalesArea,
MaterialName = o.MaterialName,
MaterialCode = o.MaterialCode,
DemandQuantity = o.DemandQuantity,
DeliveryQuantity= o.DeliveryQuantity,
DeliveryDate = o.DeliveryDate,
//DeliveryQuantity = SqlFunc.Subqueryable<ProWorkorder>()
//.Where(w => w.FeedOrder == o.OrderNoMes).Sum(it=>it.ShipmentNum),
StartDate = o.StartDate,
EndDate = o.EndDate,
Orderindicator = o.Orderindicator,
RouteCode = o.RouteCode,
Status = o.Status,
Remark = o.Remark,
CreatedBy = o.CreatedBy,
CreatedTime = o.CreatedTime,
UpdatedBy = o.UpdatedBy,
UpdatedTime = o.UpdatedTime,
Children = SqlFunc.Subqueryable<ProWorkorder>()
.Where(w => w.CustomerOrder == o.OrderNoMes) // 子查询,获取对应的工单数据
.ToList()
})
.Distinct()
.ToList();
return queryResult;
}
private static Expressionable<OrderPurchase, ProWorkorder> QueryExp(OrderPurchaseQueryDto parm)
{
var predicate = Expressionable.Create<OrderPurchase, ProWorkorder>()
.AndIF(!string.IsNullOrEmpty(parm.OrderNoMes), (o, w) => o.OrderNoMes.Contains(parm.OrderNoMes))
.AndIF(!string.IsNullOrEmpty(parm.PurchaseOrderErp), (o, w) => o.PurchaseOrderErp.Contains(parm.PurchaseOrderErp))
.AndIF(!string.IsNullOrEmpty(parm.MaterialCode), (o, w) => o.MaterialCode.Contains(parm.MaterialCode))
.AndIF(parm.ImportDate != null && parm.ImportDate[0] > DateTime.MinValue, (o, w) => o.ImportDate >= parm.ImportDate[0])
.AndIF(parm.ImportDate != null && parm.ImportDate[1] > DateTime.MinValue, (o, w) => o.ImportDate <= parm.ImportDate[1])
.AndIF(parm.Orderindicator>-2,(o,w)=>o.Orderindicator==parm.Orderindicator)
;
return predicate;
}
}
}