From 7f3693e11c27b681127e1a7d679c460bc768aa6d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=8D=A2=E6=B1=9F=E6=B5=B7?= <18360817963@163.com>
Date: Wed, 26 Mar 2025 17:27:14 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=A4=A7=E5=B1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../SmartScreen/Order/OrderSmartController.cs | 12 ++++
DOAN.Model/MES/Product/ProReportwork.cs | 15 +++--
.../Order/Dto/LargeScreenOrderDto.cs | 42 ++++++++++++++
.../SmartScreen/Order/Dto/OrderProgressDto.cs | 41 +++++++++++++
.../SmartScreen/Order/LargeScreenOrderDto.cs | 42 --------------
.../Order/IService/IOrderSmartService.cs | 12 ++--
.../SmartScreen/Order/OrderSmartService.cs | 57 +++++++++++++++++--
7 files changed, 165 insertions(+), 56 deletions(-)
create mode 100644 DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs
create mode 100644 DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs
delete mode 100644 DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs
diff --git a/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs b/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs
index 96a7a43..50601b4 100644
--- a/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs
+++ b/DOAN.Admin.WebApi/Controllers/MES/SmartScreen/Order/OrderSmartController.cs
@@ -38,5 +38,17 @@ namespace DOAN.Admin.WebApi.Controllers.MES.SmartScreen.Order
var response = _OrderSmartService.GetLargeScreenOrder();
return SUCCESS(response);
}
+
+ ///
+ /// 订单进度
+ ///
+ ///
+ [HttpGet("GetOrderProgress")]
+ public IActionResult GetOrderProgress()
+ {
+
+ var response = _OrderSmartService.GetOrderProgress();
+ return SUCCESS(response);
+ }
}
}
diff --git a/DOAN.Model/MES/Product/ProReportwork.cs b/DOAN.Model/MES/Product/ProReportwork.cs
index 463d9b7..cbe54e9 100644
--- a/DOAN.Model/MES/Product/ProReportwork.cs
+++ b/DOAN.Model/MES/Product/ProReportwork.cs
@@ -18,10 +18,17 @@ namespace DOAN.Model.MES.product
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
public string Id { get; set; }
- ///
- /// 工单号
- ///
- [SugarColumn(ColumnName = "fk_workorder")]
+
+
+ ///
+ /// 工序id
+ ///
+ [SugarColumn(ColumnName = "process_id")]
+ public int? ProcessId { get; set; }
+ ///
+ /// 工单号
+ ///
+ [SugarColumn(ColumnName = "fk_workorder")]
public string FkWorkorder { get; set; }
///
diff --git a/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs b/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs
new file mode 100644
index 0000000..0d14d7f
--- /dev/null
+++ b/DOAN.Model/MES/SmartScreen/Order/Dto/LargeScreenOrderDto.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DOAN.Model.MES.SmartScreen.Order.Dto
+{
+ public class LargeScreenOrderDto
+ {
+ ///
+ /// 订单总数
+ ///
+ public int OrderTotalNum { get; set; }
+
+ ///
+ /// 未完成订单总数
+ ///
+ public int IncompleteOrderNum { get; set; }
+
+ ///
+ /// 已完成订单总数
+ ///
+ public int CompletedOrderNum { get; set; }
+
+ ///
+ /// 本月订单总数
+ ///
+ public int MonthOrderTotalNum { get; set; }
+
+ ///
+ /// 本月已完成订单总数
+ ///
+ public int MonthIncompleteOrderNum { get; set; }
+
+ ///
+ /// 本月未完成订单总数
+ ///
+ public int MonthCompletedOrderNum { get; set; }
+
+ }
+}
diff --git a/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs
new file mode 100644
index 0000000..b581e1f
--- /dev/null
+++ b/DOAN.Model/MES/SmartScreen/Order/Dto/OrderProgressDto.cs
@@ -0,0 +1,41 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace DOAN.Model.MES.SmartScreen.Order.Dto
+{
+ public class OrderProgressDto
+ {
+ ///
+ /// 订单号
+ ///
+ public string OrderNo { get; set; }
+
+ ///
+ /// 物料名称
+ ///
+ public string MaterialName { get; set; }
+
+ ///
+ /// 计划数量
+ ///
+ public int? PlanNum { get; set; }
+
+ ///
+ /// 工序集合
+ ///
+ public List productionProcesses { get; set; }
+ }
+
+ public class ProductionProcesses
+ {
+ public string OrderNo { get; set; }
+ public string ProcessName { get; set; }
+
+
+ public int? Num { get; set; }
+
+ }
+}
diff --git a/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs b/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs
deleted file mode 100644
index aaa7ce0..0000000
--- a/DOAN.Model/MES/SmartScreen/Order/LargeScreenOrderDto.cs
+++ /dev/null
@@ -1,42 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace DOAN.Model.MES.SmartScreen.Order
-{
- public class LargeScreenOrderDto
- {
- ///
- /// 订单总数
- ///
- public int OrderTotalNum { get; set; }
-
- ///
- /// 未完成订单总数
- ///
- public int IncompleteOrderNum { get; set; }
-
- ///
- /// 已完成订单总数
- ///
- public int CompletedOrderNum { get; set; }
-
- ///
- /// 本月订单总数
- ///
- public int MonthOrderTotalNum { get; set; }
-
- ///
- /// 本月已完成订单总数
- ///
- public int MonthIncompleteOrderNum { get; set; }
-
- ///
- /// 本月未完成订单总数
- ///
- public int MonthCompletedOrderNum { get; set; }
-
- }
-}
diff --git a/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs b/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs
index 9a37829..d1bfa21 100644
--- a/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs
+++ b/DOAN.Service/MES/SmartScreen/Order/IService/IOrderSmartService.cs
@@ -1,6 +1,6 @@
using DOAN.Model.MES.order;
using DOAN.Model.MES.order.Dto;
-using DOAN.Model.MES.SmartScreen.Order;
+using DOAN.Model.MES.SmartScreen.Order.Dto;
using Infrastructure.Attribute;
using Microsoft.AspNetCore.Http;
using System;
@@ -11,12 +11,14 @@ using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Order.IService
{
- ///
- /// 采购订单service接口
- ///
- public interface IOrderSmartService : IBaseService
+ ///
+ /// 采购订单service接口
+ ///
+ public interface IOrderSmartService : IBaseService
{
LargeScreenOrderDto GetLargeScreenOrder();
+
+ List GetOrderProgress();
}
}
diff --git a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs
index 266e6ee..c8610e8 100644
--- a/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs
+++ b/DOAN.Service/MES/SmartScreen/Order/OrderSmartService.cs
@@ -8,16 +8,18 @@ using System.Text;
using System.Threading.Tasks;
using DOAN.Service.MES.SmartScreen.Order.IService;
using DOAN.Model.MES.order.Dto;
-using DOAN.Model.MES.SmartScreen.Order;
using MathNet.Numerics.Distributions;
using NPOI.SS.Formula.Functions;
+using DOAN.Model.MES.SmartScreen.Order.Dto;
+using DOAN.Model.MES.product;
+using DOAN.Model.MES.base_;
namespace DOAN.Service.MES.SmartScreen.Order
{
- ///
- /// 采购订单Service业务层处理
- ///
- [AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
+ ///
+ /// 采购订单Service业务层处理
+ ///
+ [AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
public class OrderSmartService : BaseService, IOrderSmartService
{
@@ -41,5 +43,50 @@ namespace DOAN.Service.MES.SmartScreen.Order
largeScreenOrderDto.MonthCompletedOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator == 1).Count();
return largeScreenOrderDto;
}
+
+
+
+ public List GetOrderProgress()
+ {
+ var mainQuery = Queryable()
+ // 使用链式 Join 并明确指定别名和关联条件
+ .InnerJoin((order, pw) => order.OrderNoMes == pw.CustomerOrder)
+ .InnerJoin((order, pw, pr) => pw.Workorder == pr.FkWorkorder)
+ .InnerJoin((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()
+ });
+
+ // 子查询(获取工序明细)
+ var subQuery = Queryable()
+ .InnerJoin((order, pw) => order.OrderNoMes == pw.CustomerOrder)
+ .InnerJoin((order, pw, pr) => pw.Workorder == pr.FkWorkorder)
+ .InnerJoin((order, pw, pr, bp) => pr.ProcessId == bp.Id)
+ .Select((order, pw, pr, bp) => new ProductionProcesses
+ {
+ OrderNo = order.OrderNoMes, // 必须包含关联字段
+ ProcessName = bp.Name,
+ Num = pr.FinishedNum
+ });
+ // 使用 Mapper 进行结果合并
+ var result = mainQuery.MergeTable() // 合并主查询
+ .Mapper(mainResult =>
+ {
+ // 根据 OrderNo 关联子查询
+ mainResult.productionProcesses = subQuery
+ .Where(sub => sub.OrderNo == mainResult.OrderNo)
+ .ToList();
+ }).ToList();
+
+ return result;
+ }
}
}