diff --git a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs
index 04d48fd..27b47e6 100644
--- a/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs
+++ b/DOAN.Admin.WebApi/Controllers/MES/Quality/IPQC/QcScrapRecordsController.cs
@@ -1,8 +1,8 @@
-using Microsoft.AspNetCore.Mvc;
-using DOAN.Model.BZFM.Dto;
-using DOAN.Model.BZFM;
-using DOAN.Service.BZFM.IService;
using DOAN.Admin.WebApi.Filters;
+using DOAN.Model.BZFM;
+using DOAN.Model.BZFM.Dto;
+using DOAN.Service.BZFM.IService;
+using Microsoft.AspNetCore.Mvc;
//创建时间:2026-01-22
namespace DOAN.Admin.WebApi.Controllers.BZFM
@@ -37,7 +37,6 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM
return SUCCESS(response);
}
-
///
/// 查询报废记录表详情
///
@@ -142,9 +141,16 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM
[HttpPut("approve/{id}")]
[ActionPermissionFilter(Permission = "qcscraprecords:approve")]
[Log(Title = "审批报废记录", BusinessType = BusinessType.UPDATE)]
- public IActionResult ApproveScrapRecord([FromRoute] long id, [FromBody] ScrapApproveDto parm)
+ public IActionResult ApproveScrapRecord(
+ [FromRoute] long id,
+ [FromBody] ScrapApproveDto parm
+ )
{
- var response = _QcScrapRecordsService.ApproveScrapRecord(id, parm.IsApproved, parm.Approver);
+ var response = _QcScrapRecordsService.ApproveScrapRecord(
+ id,
+ parm.IsApproved,
+ parm.Approver
+ );
return ToResponse(response);
}
@@ -190,14 +196,21 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM
[Log(Title = "根据工单号创建报废单", BusinessType = BusinessType.INSERT)]
public IActionResult CreateScrapOrderByWorkorder([FromBody] QcScrapRecordsDto parm)
{
- if (string.IsNullOrEmpty(parm.Workorder))
+ try
{
- return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空");
- }
+ if (string.IsNullOrEmpty(parm.Workorder))
+ {
+ return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空");
+ }
- var modal = parm.Adapt().ToCreate(HttpContext);
- var response = _QcScrapRecordsService.CreateScrapOrderByWorkorder(modal);
- return SUCCESS(response);
+ var modal = parm.Adapt().ToCreate(HttpContext);
+ var response = _QcScrapRecordsService.CreateScrapOrderByWorkorder(modal);
+ return SUCCESS(response);
+ }
+ catch (Exception ex)
+ {
+ return ToResponse(StatusCodes.Status500InternalServerError, ex.Message);
+ }
}
///
@@ -210,14 +223,21 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM
[Log(Title = "根据工单号创建转用单", BusinessType = BusinessType.INSERT)]
public IActionResult CreateTransferOrderByWorkorder([FromBody] QcScrapRecordsDto parm)
{
- if (string.IsNullOrEmpty(parm.Workorder))
+ try
{
- return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空");
- }
+ if (string.IsNullOrEmpty(parm.Workorder))
+ {
+ return ToResponse(StatusCodes.Status400BadRequest, "工单号不能为空");
+ }
- var modal = parm.Adapt().ToCreate(HttpContext);
- var response = _QcScrapRecordsService.CreateTransferOrderByWorkorder(modal);
- return SUCCESS(response);
+ var modal = parm.Adapt().ToCreate(HttpContext);
+ var response = _QcScrapRecordsService.CreateTransferOrderByWorkorder(modal);
+ return SUCCESS(response);
+ }
+ catch (Exception ex)
+ {
+ return ToResponse(StatusCodes.Status500InternalServerError, ex.Message);
+ }
}
///
@@ -230,8 +250,25 @@ namespace DOAN.Admin.WebApi.Controllers.BZFM
[Log(Title = "根据ID撤销不良品记录", BusinessType = BusinessType.UPDATE)]
public IActionResult RevokeScrapRecordById([FromRoute] long id)
{
- var response = _QcScrapRecordsService.RevokeScrapRecordById(id);
- return ToResponse(response);
+ try
+ {
+ var response = _QcScrapRecordsService.RevokeScrapRecordById(id);
+ if (response > 0)
+ {
+ return SUCCESS(response);
+ }
+ else
+ {
+ return ToResponse(
+ StatusCodes.Status400BadRequest,
+ "撤销不良品记录失败,可能记录已被审批或不存在"
+ );
+ }
+ }
+ catch (Exception ex)
+ {
+ return ToResponse(StatusCodes.Status500InternalServerError, ex.Message);
+ }
}
}
-}
\ No newline at end of file
+}
diff --git a/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs
index 62159b9..ff6c6ab 100644
--- a/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs
+++ b/DOAN.Model/MES/Quality/IPQC/Dto/QcScrapRecordsDto.cs
@@ -26,77 +26,178 @@ namespace DOAN.Model.BZFM.Dto
///
public class QcScrapRecordsDto
{
- public string WorkStation { get; set; }
+ ///
+ /// 主键 ID
+ ///
+ public long Id { get; set; }
- public int? Version { get; set; }
-
- public long? TenantId { get; set; }
-
- public DateTime? UpdatedTime { get; set; }
-
- public long? UpdatedBy { get; set; }
-
- public DateTime? CreatedTime { get; set; }
-
- 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; }
+ ///
+ /// 报废单号
+ ///
+ public string ScrapOrderNo { get; set; }
+ ///
+ /// 报废日期
+ ///
[Required(ErrorMessage = "报废日期不能为空")]
public DateTime? ScrapDate { get; set; }
- public string SupervisorName { get; set; }
-
- public string Operator { get; set; }
-
- 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 Unit { get; set; }
- public string MaterialName { get; set; }
+ ///
+ /// 处置方式
+ ///
+ public string DisposalMethod { get; set; }
+ ///
+ /// 报废类型
+ ///
+ public string ScrapType { get; set; }
+
+ ///
+ /// 报废原因说明
+ ///
+ public string ScrapReason { get; set; }
+
+ ///
+ /// 成本影响
+ ///
+ public decimal CostImpact { get; set; }
+
+ ///
+ /// 当前记录状态(如草稿/待审批/...)
+ ///
+ public string Status { get; set; }
+
+ ///
+ /// 状态标签(用于导出 Excel 显示)
+ ///
+ [ExcelColumn(Name = "状态:草稿,待审批,已批准,已拒绝")]
+ public string StatusLabel { get; set; }
+
+ ///
+ /// 物料编码
+ ///
[Required(ErrorMessage = "物料编码不能为空")]
public string MaterialCode { get; set; }
- public string ProductName { get; set; }
+ ///
+ /// 物料名称
+ ///
+ public string MaterialName { get; set; }
+ ///
+ /// 产品编码
+ ///
public string ProductCode { get; set; }
+ ///
+ /// 产品名称
+ ///
+ public string ProductName { get; set; }
+
+ ///
+ /// 批次号
+ ///
+ public string BatchNo { get; set; }
+
+ ///
+ /// 炉号/批次标识
+ ///
public string StoveCode { get; set; }
+ ///
+ /// 线别编码
+ ///
public string LineCode { get; set; }
+ ///
+ /// 库位编码
+ ///
+ public string LocationCode { get; set; }
+
+ ///
+ /// 工单号
+ ///
public string Workorder { get; set; }
- public string ScrapOrderNo { get; set; }
-
+ ///
+ /// 供应商编码
+ ///
public string SupplierCode { get; set; }
-
+
+ ///
+ /// 供应商名称
+ ///
public string SupplierName { get; set; }
+ ///
+ /// 操作人
+ ///
+ public string Operator { get; set; }
- [ExcelColumn(Name = "状态:草稿,待审批,已批准,已拒绝")]
- public string StatusLabel { get; set; }
+ ///
+ /// 质检员
+ ///
+ public string QualityInspector { get; set; }
+
+ ///
+ /// 班组长/主管
+ ///
+ public string SupervisorName { get; set; }
+
+ ///
+ /// 审批日期
+ ///
+ public DateTime? ApprovalDate { get; set; }
+
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; }
+
+ ///
+ /// 记录创建者(用户 ID)
+ ///
+ public long CreatedBy { get; set; }
+
+ ///
+ /// 记录创建时间
+ ///
+ public DateTime? CreatedTime { get; set; }
+
+ ///
+ /// 最近更新者(用户 ID)
+ ///
+ public long? UpdatedBy { get; set; }
+
+ ///
+ /// 最近更新时间
+ ///
+ public DateTime? UpdatedTime { get; set; }
+
+ ///
+ /// 租户 ID(多租户场景)
+ ///
+ public long? TenantId { get; set; }
+
+ ///
+ /// 版本号(用于并发控制)
+ ///
+ public int? Version { get; set; }
+
+ ///
+ /// 生产线/工位
+ ///
+ public string WorkStation { 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
index 5ec2def..7e57549 100644
--- a/DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs
+++ b/DOAN.Model/MES/Quality/IPQC/QcScrapRecords.cs
@@ -1,4 +1,3 @@
-
namespace DOAN.Model.BZFM
{
///
@@ -7,197 +6,198 @@ namespace DOAN.Model.BZFM
[SugarTable("qc_scrap_records")]
public class QcScrapRecords
{
- ///
- /// 工位
- ///
- [SugarColumn(ColumnName = "work_station")]
- public string WorkStation { get; set; }
+ // Keep original fields and attributes; only adjusted order for clarity.
///
- /// 版本号
- ///
- 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
+ /// 主键ID
///
[SugarColumn(IsPrimaryKey = true, IsIdentity = true)]
public long Id { get; set; }
///
- /// 处置方式
+ /// 报废单号
///
- [SugarColumn(ColumnName = "disposal_method")]
- public string DisposalMethod { get; set; }
+ [SugarColumn(ColumnName = "scrap_order_no")]
+ public string ScrapOrderNo { get; set; }
///
- /// 报废类型:质量缺陷,过期,损坏,工艺错误,其他
+ /// 报废日期
///
- [SugarColumn(ColumnName = "scrap_type")]
- public string ScrapType { get; set; }
+ [SugarColumn(ColumnName = "scrap_date")]
+ public DateTime? ScrapDate { 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; }
+ public string Unit { get; set; }
///
- /// 物料名称
+ /// 处置方式
///
- [SugarColumn(ColumnName = "material_name")]
- public string MaterialName { 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; }
+
+ ///
+ /// 成本影响金额
+ ///
+ [SugarColumn(ColumnName = "cost_impact")]
+ public decimal CostImpact { get; set; } = 0.00m;
+
+ ///
+ /// 当前记录状态
+ ///
+ public string Status { get; set; } = "待审批";
+
+ ///
+ /// 审批日期
+ ///
+ [SugarColumn(ColumnName = "approval_date")]
+ public DateTime? ApprovalDate { get; set; }
+
+ ///
+ /// 主管/班组长
+ ///
+ [SugarColumn(ColumnName = "supervisor_name")]
+ public string SupervisorName { get; set; } = string.Empty;
+
+ ///
+ /// 质检员
+ ///
+ [SugarColumn(ColumnName = "quality_inspector")]
+ public string QualityInspector { get; set; } = string.Empty;
+
+ ///
+ /// 操作员
+ ///
+ public string Operator { get; set; } = string.Empty;
+
+ ///
+ /// 库位编码
+ ///
+ [SugarColumn(ColumnName = "location_code")]
+ public string LocationCode { get; set; } = string.Empty;
+
+ ///
+ /// 工位
+ ///
+ [SugarColumn(ColumnName = "work_station")]
+ public string WorkStation { get; set; } = string.Empty;
+
+ ///
+ /// 物料编码
///
[SugarColumn(ColumnName = "material_code")]
- public string MaterialCode { get; set; }
+ public string MaterialCode { get; set; } = string.Empty;
///
- /// 产品名称
+ /// 物料名称
+ ///
+ [SugarColumn(ColumnName = "material_name")]
+ public string MaterialName { get; set; } = string.Empty;
+
+ ///
+ /// 产品编码
+ ///
+ [SugarColumn(ColumnName = "product_code")]
+ public string ProductCode { get; set; } = string.Empty;
+
+ ///
+ /// 产品名称
///
[SugarColumn(ColumnName = "product_name")]
public string ProductName { get; set; }
///
- /// 产品编号
+ /// 批次号
///
- [SugarColumn(ColumnName = "product_code")]
- public string ProductCode { get; set; }
+ [SugarColumn(ColumnName = "batch_no")]
+ public string BatchNo { get; set; } = string.Empty;
///
- /// 炉号
+ /// 炉号
///
[SugarColumn(ColumnName = "stove_code")]
- public string StoveCode { get; set; }
+ public string StoveCode { get; set; } = string.Empty;
///
- /// 线别
+ /// 线别
///
[SugarColumn(ColumnName = "line_code")]
- public string LineCode { get; set; }
+ public string LineCode { get; set; } = string.Empty;
///
- /// 工单号
+ /// 工单号
///
- public string Workorder { get; set; }
+ public string Workorder { get; set; } = string.Empty;
///
- /// 报废单号
- ///
- [SugarColumn(ColumnName = "scrap_order_no")]
- public string ScrapOrderNo { get; set; }
-
- ///
- /// 供应商编码
+ /// 供应商编码
///
[SugarColumn(ColumnName = "supplier_code")]
- public string SupplierCode { get; set; }
-
+ public string SupplierCode { get; set; } = string.Empty;
+
///
- /// 供应商名称
+ /// 供应商名称
///
[SugarColumn(ColumnName = "supplier_name")]
- public string SupplierName { get; set; }
+ public string SupplierName { get; set; } = string.Empty;
+ ///
+ /// 备注
+ ///
+ public string Remark { get; set; } = string.Empty;
+
+ ///
+ /// 创建人ID
+ ///
+ [SugarColumn(ColumnName = "created_by")]
+ public long CreatedBy { get; set; }
+
+ ///
+ /// 创建时间
+ ///
+ [SugarColumn(ColumnName = "created_time")]
+ public DateTime? CreatedTime { get; set; }
+
+ ///
+ /// 更新人ID
+ ///
+ [SugarColumn(ColumnName = "updated_by")]
+ public long? UpdatedBy { get; set; }
+
+ ///
+ /// 更新时间
+ ///
+ [SugarColumn(ColumnName = "updated_time")]
+ public DateTime? UpdatedTime { get; set; }
+
+ ///
+ /// 租户ID
+ ///
+ [SugarColumn(ColumnName = "tenant_id")]
+ public long? TenantId { get; set; } = 0;
+
+ ///
+ /// 版本号
+ ///
+ public int? Version { get; set; } = 1;
}
-}
\ No newline at end of file
+}
diff --git a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs
index 3608ea1..ba6b2b8 100644
--- a/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs
+++ b/DOAN.Service/MES/Quality/IPQC/QcScrapRecordsService.cs
@@ -1,9 +1,11 @@
-using Infrastructure.Attribute;
-using Infrastructure.Extensions;
-using DOAN.Model.BZFM.Dto;
using DOAN.Model.BZFM;
+using DOAN.Model.BZFM.Dto;
+using DOAN.Model.MES.product;
using DOAN.Repository;
using DOAN.Service.BZFM.IService;
+using Infrastructure.Attribute;
+using Infrastructure.Extensions;
+using SqlSugar.DistributedSystem.Snowflake;
namespace DOAN.Service.BZFM
{
@@ -24,12 +26,12 @@ namespace DOAN.Service.BZFM
var response = Queryable()
.Where(predicate.ToExpression())
+ .OrderByDescending(it => it.CreatedTime)
.ToPage(parm);
return response;
}
-
///
/// 获取详情
///
@@ -37,9 +39,7 @@ namespace DOAN.Service.BZFM
///
public QcScrapRecords GetInfo(long Id)
{
- var response = Queryable()
- .Where(x => x.Id == Id)
- .First();
+ var response = Queryable().Where(x => x.Id == Id).First();
return response;
}
@@ -82,14 +82,32 @@ namespace DOAN.Service.BZFM
var predicate = Expressionable
.Create()
// 模糊搜索字段
- .AndIF(!string.IsNullOrEmpty(parm.ScrapOrderNo), it => it.ScrapOrderNo.Contains(parm.ScrapOrderNo))
- .AndIF(!string.IsNullOrEmpty(parm.Workorder), it => it.Workorder.Contains(parm.Workorder))
- .AndIF(!string.IsNullOrEmpty(parm.StoveCode), it => it.StoveCode.Contains(parm.StoveCode))
- .AndIF(!string.IsNullOrEmpty(parm.ProductCode), it => it.ProductCode.Contains(parm.ProductCode))
+ .AndIF(
+ !string.IsNullOrEmpty(parm.ScrapOrderNo),
+ it => it.ScrapOrderNo.Contains(parm.ScrapOrderNo)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.Workorder),
+ it => it.Workorder.Contains(parm.Workorder)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.StoveCode),
+ it => it.StoveCode.Contains(parm.StoveCode)
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.ProductCode),
+ it => it.ProductCode.Contains(parm.ProductCode)
+ )
.AndIF(!string.IsNullOrEmpty(parm.BatchNo), it => it.BatchNo.Contains(parm.BatchNo))
// 精确搜索字段
- .AndIF(!string.IsNullOrEmpty(parm.MaterialCode), it => it.MaterialCode == parm.MaterialCode)
- .AndIF(!string.IsNullOrEmpty(parm.SupplierCode), it => it.SupplierCode == parm.SupplierCode)
+ .AndIF(
+ !string.IsNullOrEmpty(parm.MaterialCode),
+ it => it.MaterialCode == parm.MaterialCode
+ )
+ .AndIF(
+ !string.IsNullOrEmpty(parm.SupplierCode),
+ it => it.SupplierCode == parm.SupplierCode
+ )
.AndIF(!string.IsNullOrEmpty(parm.ScrapType), it => it.ScrapType == parm.ScrapType)
.AndIF(!string.IsNullOrEmpty(parm.LineCode), it => it.LineCode == parm.LineCode)
.AndIF(!string.IsNullOrEmpty(parm.Status), it => it.Status == parm.Status);
@@ -143,20 +161,52 @@ namespace DOAN.Service.BZFM
///
public QcScrapRecords CreateScrapOrder(QcScrapRecords parm)
{
- // 验证物料编码
- if (string.IsNullOrEmpty(parm.MaterialCode))
+ try
{
- throw new Exception("物料编码不能为空");
+ QcScrapRecords newQcScrapRecords = parm;
+ var workorderInfo = Context
+ .Queryable()
+ .Where(x => x.Workorder == parm.Workorder)
+ .First();
+ // 工单号创建,根据工单信息填充报废单的相关字段
+ if (workorderInfo != null)
+ {
+ newQcScrapRecords.ProductCode = workorderInfo.productionCode;
+ newQcScrapRecords.ProductName = workorderInfo.productionName;
+ newQcScrapRecords.LineCode = workorderInfo.RouteCode;
+ newQcScrapRecords.StoveCode = workorderInfo.StoveCode;
+ newQcScrapRecords.BatchNo = workorderInfo.FeedOrder;
+ newQcScrapRecords.MaterialCode = workorderInfo.MaterialCode;
+ newQcScrapRecords.MaterialName = workorderInfo.MaterialName;
+ // 如有领料记录,则绑定采购记录
+ var purchaseInfo = Context
+ .Queryable()
+ .Where(it => it.BatchNo == workorderInfo.FeedOrder)
+ .Where(it => it.TransactionType == "采购入库")
+ .Where(it => it.Remarks != "已撤销")
+ .First();
+ if (purchaseInfo != null)
+ {
+ newQcScrapRecords.SupplierCode = purchaseInfo.SupplierCode;
+ newQcScrapRecords.SupplierName = purchaseInfo.SupplierName;
+ newQcScrapRecords.StoveCode = purchaseInfo.StoveCode;
+ newQcScrapRecords.Unit = purchaseInfo.Unit;
+ }
+ }
+ // 生成报废单号
+ newQcScrapRecords.ScrapOrderNo = GenerateScrapOrderNo();
+
+ // 设置状态为待审批
+ newQcScrapRecords.Status = "待审批";
+ newQcScrapRecords.ScrapType = "报废";
+ newQcScrapRecords.TenantId = 0;
+ newQcScrapRecords.Version = 1;
+ return Context.Insertable(newQcScrapRecords).ExecuteReturnEntity();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
}
-
- // 生成报废单号
- parm.ScrapOrderNo = GenerateScrapOrderNo();
-
- // 设置状态为待审批
- parm.Status = "待审批";
- parm.ScrapType = "报废";
-
- return Context.Insertable(parm).ExecuteReturnEntity();
}
///
@@ -166,26 +216,51 @@ namespace DOAN.Service.BZFM
///
public QcScrapRecords CreateTransferOrder(QcScrapRecords parm)
{
- // 验证物料编码
- if (string.IsNullOrEmpty(parm.MaterialCode))
- {
- throw new Exception("物料编码不能为空");
- }
-
// 验证工单号
if (string.IsNullOrEmpty(parm.Workorder))
{
throw new Exception("工单号不能为空");
}
+ QcScrapRecords newQcScrapRecords = parm;
+ var workorderInfo = Context
+ .Queryable()
+ .Where(x => x.Workorder == parm.Workorder)
+ .First();
+ // 工单号创建,根据工单信息填充报废单的相关字段
+ if (workorderInfo != null)
+ {
+ newQcScrapRecords.ProductCode = workorderInfo.productionCode;
+ newQcScrapRecords.ProductName = workorderInfo.productionName;
+ newQcScrapRecords.LineCode = workorderInfo.RouteCode;
+ newQcScrapRecords.StoveCode = workorderInfo.StoveCode;
+ newQcScrapRecords.BatchNo = workorderInfo.FeedOrder;
+ newQcScrapRecords.MaterialCode = workorderInfo.MaterialCode;
+ newQcScrapRecords.MaterialName = workorderInfo.MaterialName;
+ // 如有领料记录,则绑定采购记录
+ var purchaseInfo = Context
+ .Queryable()
+ .Where(it => it.BatchNo == workorderInfo.FeedOrder)
+ .Where(it => it.TransactionType == "采购入库")
+ .Where(it => it.Remarks != "已撤销")
+ .First();
+ if (purchaseInfo != null)
+ {
+ newQcScrapRecords.SupplierCode = purchaseInfo.SupplierCode;
+ newQcScrapRecords.SupplierName = purchaseInfo.SupplierName;
+ newQcScrapRecords.StoveCode = purchaseInfo.StoveCode;
+ newQcScrapRecords.Unit = purchaseInfo.Unit;
+ }
+ }
- // 生成报废单号
- parm.ScrapOrderNo = GenerateScrapOrderNo("ZY"); // ZY表示转用
+ // 生成单号
+ newQcScrapRecords.ScrapOrderNo = GenerateScrapOrderNo("ZY"); // ZY表示转用
- // 设置状态为待审批,报废类型为转用
- parm.Status = "待审批";
- parm.ScrapType = "转用";
-
- return Context.Insertable(parm).ExecuteReturnEntity();
+ // 设置状态为待审批,类型为转用
+ newQcScrapRecords.Status = "待审批";
+ newQcScrapRecords.ScrapType = "转用";
+ newQcScrapRecords.TenantId = 0;
+ newQcScrapRecords.Version = 1;
+ return Context.Insertable(newQcScrapRecords).ExecuteReturnEntity();
}
///
@@ -222,10 +297,19 @@ namespace DOAN.Service.BZFM
Status = isApproved ? "已批准" : "已拒绝",
ApprovalDate = DateTime.Now,
SupervisorName = approver,
- UpdatedTime = DateTime.Now
+ UpdatedTime = DateTime.Now,
};
- result = Context.Updateable(updateObj).UpdateColumns(x => new { x.Status, x.ApprovalDate, x.SupervisorName, x.UpdatedTime }).ExecuteCommand();
+ result = Context
+ .Updateable(updateObj)
+ .UpdateColumns(x => new
+ {
+ x.Status,
+ x.ApprovalDate,
+ x.SupervisorName,
+ x.UpdatedTime,
+ })
+ .ExecuteCommand();
if (isApproved)
{
@@ -235,11 +319,94 @@ namespace DOAN.Service.BZFM
// 转用单批准:生成新工单(这里需要根据实际业务调整工单生成逻辑)
// 注意:需要确保工单服务的命名空间和方法名正确
// 示例:_proWorkorderService.GenerateWorkorder(record);
+
+ // 如果有工单则工单报废数增加
+ if (!string.IsNullOrEmpty(record.Workorder))
+ {
+ var workorderInfo = Context
+ .Queryable()
+ .Where(x => x.Workorder == record.Workorder)
+ .First();
+ if (workorderInfo != null)
+ {
+ workorderInfo.DefectNum += (int)record.ScrapQuantity;
+ Context
+ .Updateable(workorderInfo)
+ .UpdateColumns(x => new { x.DefectNum })
+ .ExecuteCommand();
+ }
+ }
+
+ // 入报废库
+ InboundReceiptDto revokeRecepitDto = new()
+ {
+ ReceiptType = 1,
+ MaterialCode = record.ProductCode,
+ BatchNo = "000",
+ LocationCode = "ZYK001",
+ WarehouseCode = "WH005",
+ SupplierCode = record.SupplierCode,
+ StoveCode = record.StoveCode,
+ Workorder = record.Workorder,
+ WorkorderRaw = record.ScrapOrderNo,
+ Operator = approver,
+ Quantity = record.ScrapQuantity,
+ TransactionType = "转用入库",
+ Remarks = $"转用入库,转用单号:{record.ScrapOrderNo}",
+ };
+ MmInventoryService mmInventoryService = new();
+ string createReceiptresult = mmInventoryService.CreateInboundReceipt(
+ revokeRecepitDto
+ );
+ if (createReceiptresult != "ok")
+ {
+ throw new Exception(createReceiptresult);
+ }
}
- else
+ else if (record.ScrapType == "报废")
{
// 报废单批准:生成入库单到报废库(这里需要根据实际业务调整入库逻辑)
- // 示例:调用入库单服务添加到报废库
+ // 如果有工单则工单报废数增加
+ if (!string.IsNullOrEmpty(record.Workorder))
+ {
+ var workorderInfo = Context
+ .Queryable()
+ .Where(x => x.Workorder == record.Workorder)
+ .First();
+ if (workorderInfo != null)
+ {
+ workorderInfo.DefectNum += (int)record.ScrapQuantity;
+ Context
+ .Updateable(workorderInfo)
+ .UpdateColumns(x => new { x.DefectNum })
+ .ExecuteCommand();
+ }
+ }
+ // 调用入库单服务添加到报废库
+ InboundReceiptDto revokeRecepitDto = new()
+ {
+ ReceiptType = 1,
+ MaterialCode = record.ProductCode,
+ BatchNo = "000",
+ LocationCode = "BFK001",
+ WarehouseCode = "WH006",
+ SupplierCode = record.SupplierCode,
+ StoveCode = record.StoveCode,
+ Workorder = record.Workorder,
+ WorkorderRaw = record.ScrapOrderNo,
+ Operator = approver,
+ Quantity = record.ScrapQuantity,
+ TransactionType = "报废入库",
+ Remarks = $"报废入库,报废单号:{record.ScrapOrderNo}",
+ };
+ MmInventoryService mmInventoryService = new();
+ string createReceiptresult = mmInventoryService.CreateInboundReceipt(
+ revokeRecepitDto
+ );
+ if (createReceiptresult != "ok")
+ {
+ throw new Exception(createReceiptresult);
+ }
}
}
});
@@ -254,29 +421,62 @@ namespace DOAN.Service.BZFM
///
public int RevokeScrapRecord(long id)
{
- // 获取记录信息
- var record = Context.Queryable().Where(x => x.Id == id).First();
-
- if (record == null)
+ int result = 0;
+ UseTran2(() =>
{
- throw new Exception("记录不存在");
- }
+ // 获取记录信息
+ var record = Context.Queryable().Where(x => x.Id == id).First();
- // 只有待审批状态的记录才能被撤销
- if (record.Status != "已批准")
- {
- throw new Exception("只有已批准状态的记录才能被撤销");
- }
+ if (record == null)
+ {
+ throw new Exception("记录不存在");
+ }
- // 撤销:将状态改为待审批
- var updateObj = new QcScrapRecords
- {
- Id = id,
- Status = "待审批",
- UpdatedTime = DateTime.Now
- };
+ // 只有待审批状态的记录才能被撤销
+ if (record.Status != "已批准")
+ {
+ throw new Exception("只有已批准状态的记录才能被撤销");
+ }
+ // 撤销库存操作记录与工单不良数
+ var workorderInfo = Context
+ .Queryable()
+ .Where(it => it.Workorder == record.Workorder)
+ .First();
+ if (workorderInfo != null)
+ {
+ workorderInfo.DefectNum -= (int)Math.Abs(record.ScrapQuantity);
+ Context
+ .Updateable(workorderInfo)
+ .UpdateColumns(it => new { it.DefectNum })
+ .ExecuteCommand();
+ }
- return Context.Updateable(updateObj).UpdateColumns(x => new { x.Status, x.UpdatedTime }).ExecuteCommand();
+ MmInventoryService mmInventoryService = new();
+ int InBoundId = Context
+ .Queryable()
+ .Where(it => it.WorkorderRaw == record.ScrapOrderNo)
+ .Select(it => it.Id)
+ .First();
+ if (InBoundId > 0)
+ {
+ mmInventoryService.RevokeReceipt(
+ new MmInventoryRevokeDto { Id = InBoundId, Type = 1 }
+ );
+ }
+ // 撤销:将状态改为待审批
+ var updateObj = new QcScrapRecords
+ {
+ Id = id,
+ Status = "待审批",
+ UpdatedTime = DateTime.Now,
+ };
+
+ result = Context
+ .Updateable(updateObj)
+ .UpdateColumns(x => new { x.Status, x.UpdatedTime })
+ .ExecuteCommand();
+ });
+ return result;
}
///
@@ -286,12 +486,12 @@ namespace DOAN.Service.BZFM
///
public PagedInfo GetQcScrapRecordsByWorkorder(string workorder)
{
- var queryDto = new QcScrapRecordsQueryDto
- {
- Workorder = workorder
- };
-
- return GetList(queryDto);
+ var queryDto = new QcScrapRecordsQueryDto { Workorder = workorder };
+ var result = Context
+ .Queryable()
+ .Where(x => x.Workorder == workorder)
+ .ToPage(queryDto);
+ return result;
}
///
@@ -306,7 +506,6 @@ namespace DOAN.Service.BZFM
{
throw new Exception("工单号不能为空");
}
-
// 调用现有的创建报废单方法
return CreateScrapOrder(parm);
}
@@ -339,4 +538,4 @@ namespace DOAN.Service.BZFM
return RevokeScrapRecord(id);
}
}
-}
\ No newline at end of file
+}
diff --git a/DOAN.Service/Mobile/ReportFlowService.cs b/DOAN.Service/Mobile/ReportFlowService.cs
index 5426c41..66db150 100644
--- a/DOAN.Service/Mobile/ReportFlowService.cs
+++ b/DOAN.Service/Mobile/ReportFlowService.cs
@@ -96,7 +96,22 @@ public class ReportFlowService : BaseService, IReportFlowServic
.Select(it => it.NickName)
.First();
Worker = string.IsNullOrEmpty(NickName) ? Worker + "|异常人员|" : NickName;
-
+ string stoveCode = stove_code;
+ // 检查采购记录
+ var purchaseInfo = Context
+ .Queryable()
+ .Where(it => it.BatchNo == feed_order)
+ .Where(it => it.TransactionType == "采购入库")
+ .Where(it => it.Remarks != "已撤销")
+ .First();
+ if (purchaseInfo != null)
+ {
+ stoveCode = purchaseInfo.StoveCode;
+ }
+ else
+ {
+ throw new Exception($"未找到原材料采购批号:{feed_order}");
+ }
Context.Ado.BeginTran();
if (Exist)
{