feat: 添加报废记录功能及相关字段扩展

- 新增报废记录表及相关服务、控制器
- 扩展工单报表DTO,增加炉号、领料批次等字段
- 修改报表查询服务,关联工单表获取更多信息
- 在物料入库DTO中添加工单号字段
- 新增IQC文件夹结构
This commit is contained in:
2026-01-22 17:25:17 +08:00
parent 908f2604e9
commit 3d5ad78fad
11 changed files with 630 additions and 73 deletions

View File

@@ -28,6 +28,7 @@
</ItemGroup>
<ItemGroup>
<Folder Include="BZFM\IBZFMService\" />
<Folder Include="MES\Quality\IQC\" />
</ItemGroup>
</Project>

View File

@@ -50,8 +50,22 @@ public class ProReportworkService : BaseService<ProReportwork01>, IProReportwork
var response = Context
.Queryable(query)
.LeftJoin<BaseWorkProcesses>((q, w) => q.ProcessId == w.Id)
.OrderBy((q, w) => new { q.Workorder, w.Id })
.Select((q, w) => new ProReportworkDto { ProcessName = w.Name }, true)
.LeftJoin<ProWorkorder>((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;

View File

@@ -0,0 +1,21 @@
using DOAN.Model.BZFM.Dto;
using DOAN.Model.BZFM;
namespace DOAN.Service.BZFM.IService
{
/// <summary>
/// 报废记录表service接口
/// </summary>
public interface IQcScrapRecordsService : IBaseService<QcScrapRecords>
{
PagedInfo<QcScrapRecordsDto> GetList(QcScrapRecordsQueryDto parm);
QcScrapRecords GetInfo(long Id);
QcScrapRecords AddQcScrapRecords(QcScrapRecords parm);
int UpdateQcScrapRecords(QcScrapRecords parm);
}
}

View File

@@ -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
{
/// <summary>
/// 报废记录表Service业务层处理
/// </summary>
[AppService(ServiceType = typeof(IQcScrapRecordsService), ServiceLifetime = LifeTime.Transient)]
public class QcScrapRecordsService : BaseService<QcScrapRecords>, IQcScrapRecordsService
{
/// <summary>
/// 查询报废记录表列表
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
public PagedInfo<QcScrapRecordsDto> GetList(QcScrapRecordsQueryDto parm)
{
var predicate = QueryExp(parm);
var response = Queryable()
.Where(predicate.ToExpression())
.ToPage<QcScrapRecords, QcScrapRecordsDto>(parm);
return response;
}
/// <summary>
/// 获取详情
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public QcScrapRecords GetInfo(long Id)
{
var response = Queryable()
.Where(x => x.Id == Id)
.First();
return response;
}
/// <summary>
/// 添加报废记录表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public QcScrapRecords AddQcScrapRecords(QcScrapRecords model)
{
return Insertable(model).ExecuteReturnEntity();
}
/// <summary>
/// 修改报废记录表
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
public int UpdateQcScrapRecords(QcScrapRecords model)
{
return Update(model, true);
}
/// <summary>
/// 查询导出表达式
/// </summary>
/// <param name="parm"></param>
/// <returns></returns>
private static Expressionable<QcScrapRecords> QueryExp(QcScrapRecordsQueryDto parm)
{
var predicate = Expressionable.Create<QcScrapRecords>();
return predicate;
}
}
}

View File

@@ -30,6 +30,7 @@ public class ReportFlowService : BaseService<ProReportwork01>, IReportFlowServic
return Context
.Queryable<ProWorkorder>()
.Where(it => it.WorkorderDate >= startDate && it.WorkorderDate <= endDate)
.Where(it => it.PlanNum > 0)
.ToList();
}
@@ -149,7 +150,9 @@ public class ReportFlowService : BaseService<ProReportwork01>, 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<ProReportwork01>, IReportFlowServic
Context.Ado.RollbackTran();
throw;
}
}
/// <summary>
@@ -269,7 +271,9 @@ public class ReportFlowService : BaseService<ProReportwork01>, 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<ProReportwork01>, IReportFlowServic
Context.Ado.RollbackTran();
throw;
}
}
/// <summary>
@@ -440,7 +443,7 @@ public class ReportFlowService : BaseService<ProReportwork01>, 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<ProReportwork01>, IReportFlowServic
return Context
.Queryable<ProReportwork01>()
.LeftJoin<BaseWorkProcesses>((rw, wp) => rw.ProcessId == wp.Id)
.LeftJoin<ProWorkorder>((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<ProReportwork01>, IReportFlowServic
return Context
.Queryable<ProReportwork01>()
.LeftJoin<BaseWorkProcesses>((rw, wp) => rw.ProcessId == wp.Id)
.LeftJoin<ProWorkorder>((rw, wp, wo) => rw.Workorder == wo.Workorder)
.Where(
(rw, wp) =>
rw.Worker == query.name
@@ -525,7 +539,16 @@ public class ReportFlowService : BaseService<ProReportwork01>, 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<ProReportwork01>, IReportFlowServic
return Context
.Queryable<ProReportwork01>()
.LeftJoin<BaseWorkProcesses>((rw, wp) => rw.ProcessId == wp.Id)
.LeftJoin<ProWorkorder>((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);
}
}