订单大屏

This commit is contained in:
卢江海
2025-03-26 17:27:14 +08:00
parent 28a4a51927
commit 7f3693e11c
7 changed files with 165 additions and 56 deletions

View File

@@ -38,5 +38,17 @@ namespace DOAN.Admin.WebApi.Controllers.MES.SmartScreen.Order
var response = _OrderSmartService.GetLargeScreenOrder(); var response = _OrderSmartService.GetLargeScreenOrder();
return SUCCESS(response); return SUCCESS(response);
} }
/// <summary>
/// 订单进度
/// </summary>
/// <returns></returns>
[HttpGet("GetOrderProgress")]
public IActionResult GetOrderProgress()
{
var response = _OrderSmartService.GetOrderProgress();
return SUCCESS(response);
}
} }
} }

View File

@@ -18,10 +18,17 @@ namespace DOAN.Model.MES.product
[SugarColumn(IsPrimaryKey = true, IsIdentity = false)] [SugarColumn(IsPrimaryKey = true, IsIdentity = false)]
public string Id { get; set; } public string Id { get; set; }
/// <summary>
/// 工单号
/// </summary> /// <summary>
[SugarColumn(ColumnName = "fk_workorder")] /// 工序id
/// </summary>
[SugarColumn(ColumnName = "process_id")]
public int? ProcessId { get; set; }
/// <summary>
/// 工单号
/// </summary>
[SugarColumn(ColumnName = "fk_workorder")]
public string FkWorkorder { get; set; } public string FkWorkorder { get; set; }
/// <summary> /// <summary>

View File

@@ -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
{
/// <summary>
/// 订单总数
/// </summary>
public int OrderTotalNum { get; set; }
/// <summary>
/// 未完成订单总数
/// </summary>
public int IncompleteOrderNum { get; set; }
/// <summary>
/// 已完成订单总数
/// </summary>
public int CompletedOrderNum { get; set; }
/// <summary>
/// 本月订单总数
/// </summary>
public int MonthOrderTotalNum { get; set; }
/// <summary>
/// 本月已完成订单总数
/// </summary>
public int MonthIncompleteOrderNum { get; set; }
/// <summary>
/// 本月未完成订单总数
/// </summary>
public int MonthCompletedOrderNum { get; set; }
}
}

View File

@@ -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
{
/// <summary>
/// 订单号
/// </summary>
public string OrderNo { get; set; }
/// <summary>
/// 物料名称
/// </summary>
public string MaterialName { get; set; }
/// <summary>
/// 计划数量
/// </summary>
public int? PlanNum { get; set; }
/// <summary>
/// 工序集合
/// </summary>
public List<ProductionProcesses> productionProcesses { get; set; }
}
public class ProductionProcesses
{
public string OrderNo { get; set; }
public string ProcessName { get; set; }
public int? Num { get; set; }
}
}

View File

@@ -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
{
/// <summary>
/// 订单总数
/// </summary>
public int OrderTotalNum { get; set; }
/// <summary>
/// 未完成订单总数
/// </summary>
public int IncompleteOrderNum { get; set; }
/// <summary>
/// 已完成订单总数
/// </summary>
public int CompletedOrderNum { get; set; }
/// <summary>
/// 本月订单总数
/// </summary>
public int MonthOrderTotalNum { get; set; }
/// <summary>
/// 本月已完成订单总数
/// </summary>
public int MonthIncompleteOrderNum { get; set; }
/// <summary>
/// 本月未完成订单总数
/// </summary>
public int MonthCompletedOrderNum { get; set; }
}
}

View File

@@ -1,6 +1,6 @@
using DOAN.Model.MES.order; using DOAN.Model.MES.order;
using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order.Dto;
using DOAN.Model.MES.SmartScreen.Order; using DOAN.Model.MES.SmartScreen.Order.Dto;
using Infrastructure.Attribute; using Infrastructure.Attribute;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using System; using System;
@@ -11,12 +11,14 @@ using System.Threading.Tasks;
namespace DOAN.Service.MES.SmartScreen.Order.IService namespace DOAN.Service.MES.SmartScreen.Order.IService
{ {
/// <summary> /// <summary>
/// 采购订单service接口 /// 采购订单service接口
/// </summary> /// </summary>
public interface IOrderSmartService : IBaseService<OrderPurchase> public interface IOrderSmartService : IBaseService<OrderPurchase>
{ {
LargeScreenOrderDto GetLargeScreenOrder(); LargeScreenOrderDto GetLargeScreenOrder();
List<OrderProgressDto> GetOrderProgress();
} }
} }

View File

@@ -8,16 +8,18 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using DOAN.Service.MES.SmartScreen.Order.IService; using DOAN.Service.MES.SmartScreen.Order.IService;
using DOAN.Model.MES.order.Dto; using DOAN.Model.MES.order.Dto;
using DOAN.Model.MES.SmartScreen.Order;
using MathNet.Numerics.Distributions; using MathNet.Numerics.Distributions;
using NPOI.SS.Formula.Functions; 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 namespace DOAN.Service.MES.SmartScreen.Order
{ {
/// <summary> /// <summary>
/// 采购订单Service业务层处理 /// 采购订单Service业务层处理
/// </summary> /// </summary>
[AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)] [AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
public class OrderSmartService : BaseService<OrderPurchase>, IOrderSmartService public class OrderSmartService : BaseService<OrderPurchase>, 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(); largeScreenOrderDto.MonthCompletedOrderNum = response.Where(o => o.DeliveryDate >= firstDayOfMonth && o.DeliveryDate <= lastDayOfMonth && o.Orderindicator == 1).Count();
return largeScreenOrderDto; return largeScreenOrderDto;
} }
public List<OrderProgressDto> GetOrderProgress()
{
var mainQuery = Queryable()
// 使用链式 Join 并明确指定别名和关联条件
.InnerJoin<ProWorkorder>((order, pw) => order.OrderNoMes == pw.CustomerOrder)
.InnerJoin<ProReportwork>((order, pw, pr) => pw.Workorder == pr.FkWorkorder)
.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<ProReportwork>((order, pw, pr) => pw.Workorder == pr.FkWorkorder)
.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.FinishedNum
});
// 使用 Mapper 进行结果合并
var result = mainQuery.MergeTable() // 合并主查询
.Mapper(mainResult =>
{
// 根据 OrderNo 关联子查询
mainResult.productionProcesses = subQuery
.Where(sub => sub.OrderNo == mainResult.OrderNo)
.ToList();
}).ToList();
return result;
}
} }
} }