93 lines
3.6 KiB
C#
93 lines
3.6 KiB
C#
|
|
using DOAN.Model.MES.order;
|
|
using Infrastructure.Attribute;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using DOAN.Service.MES.SmartScreen.Order.IService;
|
|
using DOAN.Model.MES.order.Dto;
|
|
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
|
|
{
|
|
/// <summary>
|
|
/// 采购订单Service业务层处理
|
|
/// </summary>
|
|
[AppService(ServiceType = typeof(IOrderSmartService), ServiceLifetime = LifeTime.Transient)]
|
|
|
|
public class OrderSmartService : BaseService<OrderPurchase>, IOrderSmartService
|
|
{
|
|
public LargeScreenOrderDto GetLargeScreenOrder()
|
|
{
|
|
// 当前日期
|
|
DateTime now = DateTime.Now;
|
|
// 当前月份的第一天 00:00:00
|
|
DateTime firstDayOfMonth = new DateTime(now.Year, now.Month, 1);
|
|
// 当前月份的最后一天 23:59:59
|
|
DateTime lastDayOfMonth = new DateTime(now.Year, now.Month, 1)
|
|
.AddMonths(1)
|
|
.AddSeconds(-1);
|
|
var response = Queryable().ToList();
|
|
LargeScreenOrderDto largeScreenOrderDto = new LargeScreenOrderDto();
|
|
largeScreenOrderDto.OrderTotalNum = response.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.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<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;
|
|
}
|
|
}
|
|
}
|