From 3d5ad78fad0d4c7400d4c1d28eb94d31df7845b2 Mon Sep 17 00:00:00 2001 From: git_rabbit Date: Thu, 22 Jan 2026 17:25:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E6=8A=A5=E5=BA=9F?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=8A=9F=E8=83=BD=E5=8F=8A=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E6=89=A9=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增报废记录表及相关服务、控制器 - 扩展工单报表DTO,增加炉号、领料批次等字段 - 修改报表查询服务,关联工单表获取更多信息 - 在物料入库DTO中添加工单号字段 - 新增IQC文件夹结构 --- .../Quality/IPQC/QcScrapRecordsController.cs | 102 ++++++++++ .../MES/Material/Dto/MmRecordInboundDto.cs | 5 + .../MES/Product/Dto/ProReportworkDto.cs | 11 + .../MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs | 96 +++++++++ DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs | 191 ++++++++++++++++++ .../ReportFlow/Dto/ProReportWorkDetialDto.cs | 128 ++++++------ DOAN.Service/DOAN.Service.csproj | 1 + .../MES/Product/ProReportworkService.cs | 18 +- .../IPQC/IService/IQcScrapRecordsService.cs | 21 ++ .../MES/Quality/IPQC/QcScrapRecordsService.cs | 79 ++++++++ DOAN.Service/Mobile/ReportFlowService.cs | 51 ++++- 11 files changed, 630 insertions(+), 73 deletions(-) create mode 100644 DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs create mode 100644 DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs create mode 100644 DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs create mode 100644 DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs create mode 100644 DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs diff --git a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs new file mode 100644 index 0000000..98606dc --- /dev/null +++ b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs @@ -0,0 +1,102 @@ +using Microsoft.AspNetCore.Mvc; +using DOAN.Model.BZFM.Dto; +using DOAN.Model.BZFM; +using DOAN.Service.BZFM.IService; +using DOAN.Admin.WebApi.Filters; + +//创建时间:2026-01-22 +namespace DOAN.Admin.WebApi.Controllers.BZFM +{ + /// + /// 报废记录表 + /// + [Verify] + [Route("mes/qualityManagement/IPQC/QcScrapRecords")] + public class QcScrapRecordsController : BaseController + { + /// + /// 报废记录表接口 + /// + private readonly IQcScrapRecordsService _QcScrapRecordsService; + + public QcScrapRecordsController(IQcScrapRecordsService QcScrapRecordsService) + { + _QcScrapRecordsService = QcScrapRecordsService; + } + + /// + /// 查询报废记录表列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "qcscraprecords:list")] + public IActionResult QueryQcScrapRecords([FromQuery] QcScrapRecordsQueryDto parm) + { + var response = _QcScrapRecordsService.GetList(parm); + return SUCCESS(response); + } + + + /// + /// 查询报废记录表详情 + /// + /// + /// + [HttpGet("{Id}")] + [ActionPermissionFilter(Permission = "qcscraprecords:query")] + public IActionResult GetQcScrapRecords(long Id) + { + var response = _QcScrapRecordsService.GetInfo(Id); + + var info = response.Adapt(); + return SUCCESS(info); + } + + /// + /// 添加报废记录表 + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "qcscraprecords:add")] + [Log(Title = "报废记录表", BusinessType = BusinessType.INSERT)] + public IActionResult AddQcScrapRecords([FromBody] QcScrapRecordsDto parm) + { + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _QcScrapRecordsService.AddQcScrapRecords(modal); + + return SUCCESS(response); + } + + /// + /// 更新报废记录表 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "qcscraprecords:edit")] + [Log(Title = "报废记录表", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateQcScrapRecords([FromBody] QcScrapRecordsDto parm) + { + var modal = parm.Adapt().ToUpdate(HttpContext); + var response = _QcScrapRecordsService.UpdateQcScrapRecords(modal); + + return ToResponse(response); + } + + /// + /// 删除报废记录表 + /// + /// + [HttpPost("delete/{ids}")] + [ActionPermissionFilter(Permission = "qcscraprecords:delete")] + [Log(Title = "报废记录表", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteQcScrapRecords([FromRoute]string ids) + { + var idArr = Tools.SplitAndConvert(ids); + + return ToResponse(_QcScrapRecordsService.Delete(idArr)); + } + + } +} \ No newline at end of file diff --git a/DOAN.Model/MES/Material/Dto/MmRecordInboundDto.cs b/DOAN.Model/MES/Material/Dto/MmRecordInboundDto.cs index 1cece38..1d22a56 100644 --- a/DOAN.Model/MES/Material/Dto/MmRecordInboundDto.cs +++ b/DOAN.Model/MES/Material/Dto/MmRecordInboundDto.cs @@ -69,6 +69,11 @@ namespace DOAN.Model.BZFM.Dto public string MaterialCode { get; set; } public string InboundNo { get; set; } + /// + /// 工单号 + /// + public string Workorder { get; set; } + [ExcelColumn(Name = "入库类型")] public string TransactionTypeLabel { get; set; } } diff --git a/DOAN.Model/MES/Product/Dto/ProReportworkDto.cs b/DOAN.Model/MES/Product/Dto/ProReportworkDto.cs index 39605e5..e9a8009 100644 --- a/DOAN.Model/MES/Product/Dto/ProReportworkDto.cs +++ b/DOAN.Model/MES/Product/Dto/ProReportworkDto.cs @@ -25,7 +25,18 @@ namespace DOAN.Model.BZFM.Dto [Required(ErrorMessage = "雪花不能为空")] public string Id { get; set; } + // 炉号 + public string StoveCode { get; set; } + public string Workorder { get; set; } + // 产成品号 + public string ProductionName { get; set; } + public string ProductionCode { get; set; } + // 原材料号 + public string MaterialCode { get; set; } + public string MaterialName { get; set; } + // 领料批次号 + public string FeedOrder { get; set; } public string RouteId { get; set; } diff --git a/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs new file mode 100644 index 0000000..d4458e5 --- /dev/null +++ b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs @@ -0,0 +1,96 @@ + +namespace DOAN.Model.BZFM.Dto +{ + /// + /// 报废记录表查询对象 + /// + public class QcScrapRecordsQueryDto : PagerInfo + { + public string MaterialCode { get; set; } + public string ProductCode { get; set; } + public string Workorder { get; set; } + public string BatchNo { get; set; } + public DateTime? StartTime { get; set; } + public DateTime? EndTime { get; set; } + } + + /// + /// 报废记录表输入输出对象 + /// + public class QcScrapRecordsDto + { + public string WorkStation { get; set; } + + public int? Version { get; set; } + + public long? TenantId { get; set; } + + [Required(ErrorMessage = "更新时间不能为空")] + public DateTime? UpdatedTime { get; set; } + + public long? UpdatedBy { get; set; } + + [Required(ErrorMessage = "创建时间不能为空")] + public DateTime? CreatedTime { get; set; } + + [Required(ErrorMessage = "创建人ID不能为空")] + public long CreatedBy { get; set; } + + public string Remark { get; set; } + + public string LocationCode { get; set; } + + public decimal CostImpact { get; set; } + + public string QualityInspector { get; set; } + + public string Status { get; set; } + + public DateTime? ApprovalDate { get; set; } + + [Required(ErrorMessage = "报废日期不能为空")] + public DateTime? ScrapDate { get; set; } + + public string SupervisorName { get; set; } + + public string Operator { get; set; } + + [Required(ErrorMessage = "主键ID不能为空")] + public long Id { get; set; } + + public string DisposalMethod { get; set; } + + public string ScrapType { get; set; } + + public string ScrapReason { get; set; } + + public string Unit { get; set; } + + [Required(ErrorMessage = "报废数量不能为空")] + public decimal ScrapQuantity { get; set; } + + public string BatchNo { get; set; } + + public string MaterialName { get; set; } + + public string MaterialCode { get; set; } + + public string ProductName { get; set; } + + public string ProductCode { get; set; } + + public string StoveCode { get; set; } + + public string LineCode { get; set; } + + public string Workorder { get; set; } + + [Required(ErrorMessage = "报废单号不能为空")] + public string ScrapOrderNo { get; set; } + + + + [ExcelColumn(Name = "状态:草稿,待审批,已批准,已拒绝")] + public string StatusLabel { get; set; } + } +} \ No newline at end of file diff --git a/DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs b/DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs new file mode 100644 index 0000000..eabffa4 --- /dev/null +++ b/DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs @@ -0,0 +1,191 @@ + +namespace DOAN.Model.BZFM +{ + /// + /// 不良品记录表 + /// + [SugarTable("qc_scrap_records")] + public class QcScrapRecords + { + /// + /// 工位 + /// + [SugarColumn(ColumnName = "work_station")] + public string WorkStation { get; set; } + + /// + /// 版本号 + /// + public int? Version { get; set; } + + /// + /// 租户ID + /// + [SugarColumn(ColumnName = "tenant_id")] + public long? TenantId { get; set; } + + /// + /// 更新时间 + /// + [SugarColumn(ColumnName = "updated_time")] + public DateTime? UpdatedTime { get; set; } + + /// + /// 更新人ID + /// + [SugarColumn(ColumnName = "updated_by")] + public long? UpdatedBy { get; set; } + + /// + /// 创建时间 + /// + [SugarColumn(ColumnName = "created_time")] + public DateTime? CreatedTime { get; set; } + + /// + /// 创建人ID + /// + [SugarColumn(ColumnName = "created_by")] + public long CreatedBy { get; set; } + + /// + /// 备注 + /// + public string Remark { get; set; } + + /// + /// 库存编号 + /// + [SugarColumn(ColumnName = "location_code")] + public string LocationCode { get; set; } + + /// + /// 成本影响金额 + /// + [SugarColumn(ColumnName = "cost_impact")] + public decimal CostImpact { get; set; } + + /// + /// 质检员 + /// + [SugarColumn(ColumnName = "quality_inspector")] + public string QualityInspector { get; set; } + + /// + /// 状态:草稿,待审批,已批准,已拒绝 + /// + public string Status { get; set; } + + /// + /// 审批日期 + /// + [SugarColumn(ColumnName = "approval_date")] + public DateTime? ApprovalDate { get; set; } + + /// + /// 报废日期 + /// + [SugarColumn(ColumnName = "scrap_date")] + public DateTime? ScrapDate { get; set; } + + /// + /// 审核人 + /// + [SugarColumn(ColumnName = "supervisor_name")] + public string SupervisorName { get; set; } + + /// + /// 操作员 + /// + public string Operator { get; set; } + + /// + /// 主键ID + /// + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public long Id { get; set; } + + /// + /// 处置方式 + /// + [SugarColumn(ColumnName = "disposal_method")] + public string DisposalMethod { get; set; } + + /// + /// 报废类型:质量缺陷,过期,损坏,工艺错误,其他 + /// + [SugarColumn(ColumnName = "scrap_type")] + public string ScrapType { get; set; } + + /// + /// 报废原因 + /// + [SugarColumn(ColumnName = "scrap_reason")] + public string ScrapReason { get; set; } + + /// + /// 单位 + /// + public string Unit { get; set; } + + /// + /// 报废数量 + /// + [SugarColumn(ColumnName = "scrap_quantity")] + public decimal ScrapQuantity { get; set; } + + /// + /// 批次号 + /// + [SugarColumn(ColumnName = "batch_no")] + public string BatchNo { get; set; } + + /// + /// 物料名称 + /// + [SugarColumn(ColumnName = "material_name")] + public string MaterialName { get; set; } + + /// + /// 物料编码 + /// + [SugarColumn(ColumnName = "material_code")] + public string MaterialCode { get; set; } + + /// + /// 产品名称 + /// + [SugarColumn(ColumnName = "product_name")] + public string ProductName { get; set; } + + /// + /// 产品编号 + /// + [SugarColumn(ColumnName = "product_code")] + public string ProductCode { get; set; } + + /// + /// 炉号 + /// + [SugarColumn(ColumnName = "stove_code")] + public string StoveCode { get; set; } + + /// + /// 线别 + /// + [SugarColumn(ColumnName = "line_code")] + public string LineCode { get; set; } + + /// + /// 工单号 + /// + public string Workorder { get; set; } + + /// + /// 报废单号 + /// + [SugarColumn(ColumnName = "scrap_order_no")] + public string ScrapOrderNo { get; set; } + + } +} \ No newline at end of file diff --git a/DOAN.Model/Mobile/ReportFlow/Dto/ProReportWorkDetialDto.cs b/DOAN.Model/Mobile/ReportFlow/Dto/ProReportWorkDetialDto.cs index 45f012a..2756ad0 100644 --- a/DOAN.Model/Mobile/ReportFlow/Dto/ProReportWorkDetialDto.cs +++ b/DOAN.Model/Mobile/ReportFlow/Dto/ProReportWorkDetialDto.cs @@ -2,81 +2,85 @@ namespace DOAN.Model.Mobile.ReportFlow.Dto; public class ProReportWorkDetialDto { - - public string Id { get; set; } + public string Id { get; set; } - /// - /// 工单code - /// - public string Workorder { get; set; } + /// + /// 工单code + /// + public string Workorder { get; set; } - /// - /// 路线code - /// - public string RouteCode { get; set; } + /// + /// 炉号 + /// + public string StoveCode { get; set; } - /// - /// 工序id - /// - - public int ProcessId { get; set; } - - /// - /// 工序名称 - /// - public string ProcessName { get; set; } + /// + /// 领料批次号 + /// + public string FeedOrder { get; set; } - /// - /// 计划数量 - /// + /// + /// 路线code + /// + public string RouteCode { get; set; } - public int? PlanNum { get; set; } + /// + /// 工序id + /// + public int ProcessId { get; set; } - /// - /// 完成数量 - /// - - public int? FinishNum { get; set; } + /// + /// 工序名称 + /// + public string ProcessName { get; set; } - /// - /// 不良数量 - /// + /// + /// 计划数量 + /// + public int? PlanNum { get; set; } - public int? BadNum { get; set; } + /// + /// 完成数量 + /// + public int? FinishNum { get; set; } - /// - /// 作业员 - /// - public string Worker { get; set; } + /// + /// 不良数量 + /// + public int? BadNum { get; set; } - /// - /// 作业日期 - /// + /// + /// 作业员 + /// + public string Worker { get; set; } - public DateTime? JobDateTime { get; set; } + /// + /// 作业日期 + /// + public DateTime? JobDateTime { get; set; } - /// - /// 备注 - /// - public string Remark { get; set; } + /// + /// 备注 + /// + public string Remark { get; set; } - /// - /// 创建人 - /// - public string CreatedBy { get; set; } + /// + /// 创建人 + /// + public string CreatedBy { get; set; } - /// - /// 创建时间 - /// - public DateTime? CreatedTime { get; set; } + /// + /// 创建时间 + /// + public DateTime? CreatedTime { get; set; } - /// - /// 更新人 - /// - public string UpdatedBy { get; set; } + /// + /// 更新人 + /// + public string UpdatedBy { get; set; } - /// - /// 更新时间 - /// - public DateTime? UpdatedTime { get; set; } -} \ No newline at end of file + /// + /// 更新时间 + /// + public DateTime? UpdatedTime { get; set; } +} diff --git a/DOAN.Service/DOAN.Service.csproj b/DOAN.Service/DOAN.Service.csproj index b29b6fc..0939a00 100644 --- a/DOAN.Service/DOAN.Service.csproj +++ b/DOAN.Service/DOAN.Service.csproj @@ -28,6 +28,7 @@ + diff --git a/DOAN.Service/MES/Product/ProReportworkService.cs b/DOAN.Service/MES/Product/ProReportworkService.cs index 11b0f0d..54cb49e 100644 --- a/DOAN.Service/MES/Product/ProReportworkService.cs +++ b/DOAN.Service/MES/Product/ProReportworkService.cs @@ -50,8 +50,22 @@ public class ProReportworkService : BaseService, IProReportwork var response = Context .Queryable(query) .LeftJoin((q, w) => q.ProcessId == w.Id) - .OrderBy((q, w) => new { q.Workorder, w.Id }) - .Select((q, w) => new ProReportworkDto { ProcessName = w.Name }, true) + .LeftJoin((q, w, wo) => q.Workorder == wo.Workorder) + .OrderBy((q, w, wo) => new { q.Workorder, w.Id }) + .Select( + (q, w, wo) => + new ProReportworkDto + { + ProcessName = w.Name, + FeedOrder = wo.FeedOrder, + ProductionName = wo.productionName, + ProductionCode = wo.productionCode, + MaterialCode = wo.MaterialCode, + MaterialName = wo.MaterialName, + StoveCode = wo.StoveCode, + }, + true + ) .ToPage_NO_Convert(parm); return response; diff --git a/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs new file mode 100644 index 0000000..673f13f --- /dev/null +++ b/DOAN.Service/MES/Quality/IPQC/IService/IQcScrapRecordsService.cs @@ -0,0 +1,21 @@ +using DOAN.Model.BZFM.Dto; +using DOAN.Model.BZFM; + +namespace DOAN.Service.BZFM.IService +{ + /// + /// 报废记录表service接口 + /// + public interface IQcScrapRecordsService : IBaseService + { + PagedInfo GetList(QcScrapRecordsQueryDto parm); + + QcScrapRecords GetInfo(long Id); + + + QcScrapRecords AddQcScrapRecords(QcScrapRecords parm); + int UpdateQcScrapRecords(QcScrapRecords parm); + + + } +} diff --git a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs new file mode 100644 index 0000000..3b952eb --- /dev/null +++ b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs @@ -0,0 +1,79 @@ +using Infrastructure.Attribute; +using Infrastructure.Extensions; +using DOAN.Model.BZFM.Dto; +using DOAN.Model.BZFM; +using DOAN.Repository; +using DOAN.Service.BZFM.IService; + +namespace DOAN.Service.BZFM +{ + /// + /// 报废记录表Service业务层处理 + /// + [AppService(ServiceType = typeof(IQcScrapRecordsService), ServiceLifetime = LifeTime.Transient)] + public class QcScrapRecordsService : BaseService, IQcScrapRecordsService + { + /// + /// 查询报废记录表列表 + /// + /// + /// + public PagedInfo GetList(QcScrapRecordsQueryDto parm) + { + var predicate = QueryExp(parm); + + var response = Queryable() + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + + + /// + /// 获取详情 + /// + /// + /// + public QcScrapRecords GetInfo(long Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); + + return response; + } + + /// + /// 添加报废记录表 + /// + /// + /// + public QcScrapRecords AddQcScrapRecords(QcScrapRecords model) + { + return Insertable(model).ExecuteReturnEntity(); + } + + /// + /// 修改报废记录表 + /// + /// + /// + public int UpdateQcScrapRecords(QcScrapRecords model) + { + return Update(model, true); + } + + /// + /// 查询导出表达式 + /// + /// + /// + private static Expressionable QueryExp(QcScrapRecordsQueryDto parm) + { + var predicate = Expressionable.Create(); + + return predicate; + } + } +} \ No newline at end of file diff --git a/DOAN.Service/Mobile/ReportFlowService.cs b/DOAN.Service/Mobile/ReportFlowService.cs index 83f32fb..92e6160 100644 --- a/DOAN.Service/Mobile/ReportFlowService.cs +++ b/DOAN.Service/Mobile/ReportFlowService.cs @@ -30,6 +30,7 @@ public class ReportFlowService : BaseService, IReportFlowServic return Context .Queryable() .Where(it => it.WorkorderDate >= startDate && it.WorkorderDate <= endDate) + .Where(it => it.PlanNum > 0) .ToList(); } @@ -149,7 +150,9 @@ public class ReportFlowService : BaseService, IReportFlowServic Remarks = $"生产领料,工单号:{workorder}", }; MmInventoryService mmInventoryService = new(); - string createReceiptresult = mmInventoryService.CreateOutboundReceipt(revokeRecepitDto); + string createReceiptresult = mmInventoryService.CreateOutboundReceipt( + revokeRecepitDto + ); if (createReceiptresult != "ok") { Context.Ado.RollbackTran(); @@ -177,7 +180,6 @@ public class ReportFlowService : BaseService, IReportFlowServic Context.Ado.RollbackTran(); throw; } - } /// @@ -269,7 +271,9 @@ public class ReportFlowService : BaseService, IReportFlowServic if (mmMaterial == null) { Context.Ado.RollbackTran(); - throw new Exception($"物料档案不存在,无法成品入库:{proWorkorder.productionCode}"); + throw new Exception( + $"物料档案不存在,无法成品入库:{proWorkorder.productionCode}" + ); } if (inboundRecord == null) { @@ -316,7 +320,6 @@ public class ReportFlowService : BaseService, IReportFlowServic Context.Ado.RollbackTran(); throw; } - } /// @@ -440,7 +443,7 @@ public class ReportFlowService : BaseService, IReportFlowServic string createReceiptresult = mmInventoryService.CreateOutboundReceipt( revokeRecepitDto ); - if(createReceiptresult != "ok") + if (createReceiptresult != "ok") { Context.Ado.RollbackTran(); throw new Exception(createReceiptresult); @@ -500,9 +503,19 @@ public class ReportFlowService : BaseService, IReportFlowServic return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) + .LeftJoin((rw, wp, wo) => rw.Workorder == wo.Workorder) .Where((rw, wp) => rw.Workorder == workorder) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) + .Select( + (rw, wp, wo) => + new ProReportWorkDetialDto() + { + ProcessName = wp.Name, + StoveCode = wo.StoveCode, + FeedOrder = wo.FeedOrder, + }, + true + ) .ToList(); } @@ -518,6 +531,7 @@ public class ReportFlowService : BaseService, IReportFlowServic return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) + .LeftJoin((rw, wp, wo) => rw.Workorder == wo.Workorder) .Where( (rw, wp) => rw.Worker == query.name @@ -525,7 +539,16 @@ public class ReportFlowService : BaseService, IReportFlowServic && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) + .Select( + (rw, wp, wo) => + new ProReportWorkDetialDto() + { + ProcessName = wp.Name, + StoveCode = wo.StoveCode, + FeedOrder = wo.FeedOrder, + }, + true + ) .ToPage_NO_Convert(query); } @@ -545,14 +568,24 @@ public class ReportFlowService : BaseService, IReportFlowServic return Context .Queryable() .LeftJoin((rw, wp) => rw.ProcessId == wp.Id) + .LeftJoin((rw, wp, wo) => rw.Workorder == wo.Workorder) .Where( - (rw, wp) => + (rw, wp, wo) => rw.ProcessId == query.processId && rw.JobDateTime >= DateTime.Today && rw.JobDateTime < DateTime.Today.AddDays(1) ) .OrderBy(rw => rw.ProcessId) - .Select((rw, wp) => new ProReportWorkDetialDto() { ProcessName = wp.Name }, true) + .Select( + (rw, wp, wo) => + new ProReportWorkDetialDto() + { + ProcessName = wp.Name, + StoveCode = wo.StoveCode, + FeedOrder = wo.FeedOrder, + }, + true + ) .ToPage_NO_Convert(query); } }