Files
kunshan-bzfm-mes-backend/DOAN.Service/MES/Order/DeliveryScheduleService.cs

126 lines
5.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
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;
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;
}
}
}