订单大屏

This commit is contained in:
卢江海
2025-03-26 19:10:58 +08:00
parent 65207e46b9
commit 82c9e47b54
2 changed files with 45 additions and 49 deletions

View File

@@ -11,7 +11,7 @@ namespace DOAN.Model.MES.SmartScreen.Order.Dto
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; }
public string OrderNoMes { get; set; }
/// <summary>
/// 物料名称
@@ -36,10 +36,9 @@ namespace DOAN.Model.MES.SmartScreen.Order.Dto
public class ProductionProcesses
{
public string OrderNo { get; set; }
public int? Id { get; set; }
public string ProcessName { get; set; }
public int? Num { get; set; }
}

View File

@@ -16,10 +16,10 @@ using DOAN.Model.MES.base_;
namespace DOAN.Service.MES.SmartScreen.Order
{
/// <summary>
/// 采购订单Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
/// <summary>
/// 采购订单Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
public class OrderSmartService : BaseService<OrderPurchase>, IOrderSmartService
{
@@ -36,57 +36,54 @@ namespace DOAN.Service.MES.SmartScreen.Order
var response = Queryable().ToList();
LargeScreenOrderDto largeScreenOrderDto = new LargeScreenOrderDto();
largeScreenOrderDto.OrderTotalNum = response.Count;
largeScreenOrderDto.IncompleteOrderNum = response.Where(o=>o.Orderindicator!=1).Count();
largeScreenOrderDto.IncompleteOrderNum = response.Where(o => o.Orderindicator != 1).Count();
largeScreenOrderDto.CompletedOrderNum = response.Where(o => o.Orderindicator == 1).Count();
largeScreenOrderDto.MonthOrderTotalNum = response.Where(o=>o.DeliveryDate>= firstDayOfMonth&&o.DeliveryDate <= lastDayOfMonth).Count();
largeScreenOrderDto.MonthIncompleteOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator !=1).Count();
largeScreenOrderDto.MonthOrderTotalNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth).Count();
largeScreenOrderDto.MonthIncompleteOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator != 1).Count();
largeScreenOrderDto.MonthCompletedOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator == 1).Count();
return largeScreenOrderDto;
}
public List<OrderProgressDto> GetOrderProgress()
{
var mainQuery = Queryable()
// 使用链式 Join 并明确指定别名和关联条件
.InnerJoin<ProWorkorder>((order, pw) => order.OrderNoMes == pw.CustomerOrder)
.InnerJoin<ProReportwork01>((order, pw, pr) => pw.Workorder == pr.Workorder)
.InnerJoin<BaseWorkProcesses>((order, pw, pr, bp) => pr.ProcessId == bp.Id)
// 按订单号分组
.GroupBy((order, pw, pr, bp) => order.OrderNoMes)
// 主查询字段选择
.Select((order, pw, pr, bp) => new OrderProgressDto
{
OrderNo = order.OrderNoMes,
MaterialName = order.MaterialName,
PlanNum = order.DemandQuantity,
// 保留子查询占位符,后续通过 SplitTable 填充
productionProcesses = new List<ProductionProcesses>()
});
// 子查询(获取工序明细)
var subQuery = Queryable()
.InnerJoin<ProWorkorder>((order, pw) => order.OrderNoMes == pw.CustomerOrder)
.InnerJoin<ProReportwork01>((order, pw, pr) => pw.Workorder == pr.Workorder)
.InnerJoin<BaseWorkProcesses>((order, pw, pr, bp) => pr.ProcessId == bp.Id)
.Select((order, pw, pr, bp) => new ProductionProcesses
{
OrderNo = order.OrderNoMes, // 必须包含关联字段
ProcessName = bp.Name,
Num = pr.FinishNum
});
// 使用 Mapper 进行结果合并
var result = mainQuery.MergeTable() // 合并主查询
.Mapper(mainResult =>
{
// 根据 OrderNo 关联子查询
mainResult.productionProcesses = subQuery
.Where(order => order.OrderNo == mainResult.OrderNo)
.ToList();
}).ToList();
List<OrderProgressDto> orderProgressDtos = new List<OrderProgressDto>();
return result;
//获取全部的订单计划表
List<OrderPurchase> orderPurchaseList = Queryable().Where(o=>o.Orderindicator!=1).ToList();
List<string> ordernomes = new List<string>();
ordernomes=orderPurchaseList.Select(o=>o.OrderNoMes).Distinct().ToList();
//工序基础表
List<BaseWorkProcesses> baseWorkProcesses = Context.Queryable<BaseWorkProcesses>().Where(o => o.Status==1).ToList();
foreach (var orderPurchase in orderPurchaseList)
{
OrderProgressDto orderProgressDto = new OrderProgressDto();
orderProgressDto.productionProcesses = new List<ProductionProcesses>();
orderProgressDto.OrderNoMes = orderPurchase.OrderNoMes;
orderProgressDto.PlanNum = orderPurchase.DemandQuantity;
orderProgressDto.FinishNum = orderPurchase.DeliveryQuantity;
orderProgressDto.MaterialName = orderPurchase.MaterialName;
List<ProWorkorder> proWorkorders = Context.Queryable<ProWorkorder>().Where(o => o.CustomerOrder == orderPurchase.OrderNoMes).ToList();
List<string> workorders = proWorkorders.Select(o=>o.Workorder).Distinct().ToList();
//获取全部的ProReportwork01
List<ProReportwork01> proReportwork01s = Context.Queryable<ProReportwork01>().Where(o => workorders.Contains(o.Workorder)).ToList();
foreach (var baseWorkProcesse in baseWorkProcesses)
{
ProductionProcesses productionProcesses = new ProductionProcesses();
productionProcesses.Id= baseWorkProcesse.Id;
productionProcesses.Num = proReportwork01s.Where(o=>o.ProcessId== baseWorkProcesse.Id).Sum(o=>o.FinishNum);
orderProgressDto.productionProcesses.Add(productionProcesses);
}
orderProgressDtos.Add(orderProgressDto);
}
return orderProgressDtos;
}
}
}