From 4e24aecb138905944d64b88dd8ebe25bca0b6397 Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 25 Jul 2025 09:38:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(qms):=20=E6=B7=BB=E5=8A=A0=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E8=AF=A6=E6=83=85=20ID=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 QcInspectionMain、QcInspectionMainBo、QcInspectionMainVo 中添加 planDetailId 字段- 更新 QcInspectionMainMapper.xml,添加 planDetailId 的映射和查询 - 在 QcInspectionMainServiceImpl 中添加对 planDetailId 的查询条件 --- .../QcUnqualifiedRecordController.java | 2 +- .../QcUnqualifiedReviewController.java | 2 +- .../qms/domain/QcUnqualifiedRecord.java | 79 ++- .../qms/domain/QcUnqualifiedReview.java | 98 +-- .../qms/domain/bo/QcUnqualifiedRecordBo.java | 73 +- .../qms/domain/bo/QcUnqualifiedReviewBo.java | 88 ++- .../qms/domain/vo/QcUnqualifiedRecordVo.java | 108 +-- .../qms/domain/vo/QcUnqualifiedReviewVo.java | 114 ++-- .../qms/mapper/QcUnqualifiedRecordMapper.java | 2 +- .../qms/mapper/QcUnqualifiedReviewMapper.java | 2 +- .../impl/QcUnqualifiedRecordServiceImpl.java | 52 +- .../impl/QcUnqualifiedReviewServiceImpl.java | 632 +----------------- .../mapper/qms/QcUnqualifiedRecordMapper.xml | 38 +- .../mapper/qms/QcUnqualifiedReviewMapper.xml | 50 +- 14 files changed, 462 insertions(+), 878 deletions(-) diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedRecordController.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedRecordController.java index c473c14..2d9bb0f 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedRecordController.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedRecordController.java @@ -27,7 +27,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; * 前端访问路由地址为:/qms/qcUnqualifiedRecord * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Validated @RequiredArgsConstructor diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java index 0e3c978..dd4051a 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/controller/QcUnqualifiedReviewController.java @@ -27,7 +27,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; * 前端访问路由地址为:/qms/qcUnqualifiedReview * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Validated @RequiredArgsConstructor diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedRecord.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedRecord.java index 306d7fc..5599cca 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedRecord.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedRecord.java @@ -4,6 +4,7 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.io.Serial; @@ -11,7 +12,7 @@ import java.io.Serial; * 不合格品评审记录对象 qc_unqualified_record * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @EqualsAndHashCode(callSuper = true) @@ -28,14 +29,84 @@ public class QcUnqualifiedRecord extends TenantEntity { private Long recordId; /** - * 关联待评审表ID + * 关联评审主表ID */ private Long reviewId; /** - * 备注 + * 检测项编码 */ - private String remark; + private String itemCode; + + /** + * 检测名称 + */ + private String itemName; + + /** + * 检测位置 + */ + private String inspectionPosition; + + /** + * 检测项目类别 + */ + private Long categoryName; + + /** + * 关联检测类型表 + */ + private Long typeId; + + /** + * 检测方法 + */ + private Long inspectionMethod; + + /** + * 检测方式 + */ + private Long detectType; + + /** + * 检测结果 + */ + private Long detectResult; + + /** + * 检测值 + */ + private BigDecimal detectValue; + + /** + * 控制上限 + */ + private BigDecimal upperLimit; + + /** + * 控制下限 + */ + private BigDecimal lowerLimit; + + /** + * 规格检测值 + */ + private String specInspectionValue; + + /** + * 规格上限 + */ + private BigDecimal specUpper; + + /** + * 规格下限 + */ + private BigDecimal specLower; + + /** + * 检查项说明 + */ + private String description; /** * 是否删除(0表示存在,2表示删除) diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java index 4881380..53467d0 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/QcUnqualifiedReview.java @@ -4,6 +4,7 @@ import org.dromara.common.tenant.core.TenantEntity; import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -13,7 +14,7 @@ import java.io.Serial; * 不合格品待评审对象 qc_unqualified_review * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @EqualsAndHashCode(callSuper = true) @@ -28,41 +29,42 @@ public class QcUnqualifiedReview extends TenantEntity { */ @TableId(value = "review_id", type = IdType.ASSIGN_ID) private Long reviewId; + /** * 不合格检测单号 */ - private String unqualifiedNo; + private Long unqualifiedReviewNo; /** - * 关联质检主表ID + * 评审结果 */ - private Long inspectionId; + private Long reviewResult; /** - * 检测类型ID + * 质检单号 */ - private Long typeId; + private String inspectionNo; /** - * 派工单号 + * 检测类型 */ - private String workOrder; + private Long inspectionType; /** - * 工序编码 + * 生产日期 */ - private String processCode; + private Date productionDate; + + /** + * 派工单号(或者计划号/工单号) + */ + private String workOrderNo; /** * 工序名称 */ private String processName; - /** - * 批次号 - */ - private String batchNo; - /** * 物料名称 */ @@ -74,53 +76,65 @@ public class QcUnqualifiedReview extends TenantEntity { private String materialCode; /** - * 质检员检测结果 + * 物料规格 */ - private String inspectorResult; + private String materialSpec; /** - * 评审结果(0报废/1返工/2退货) + * 供应商名称 */ - private String reviewResult; + private String supplierName; + + /** + * 供应商编码 + */ + private String supplierCode; + + /** + * 质检数量 + */ + private BigDecimal inspectionQty; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 质检人 + */ + private String inspector; + + /** + * 质检人ID + */ + private Long inspectorId; /** * 评审人 */ private String reviewer; + /** + * 评审人ID + */ + private Long reviewerId; + /** * 评审时间 */ private Date reviewTime; + /** + * 备注 + */ + private String remark; + /** * 是否删除(0表示存在,2表示删除) */ @TableLogic private String delFlag; - /** - * 检测单号/卡号 - */ - @TableField(exist = false) - private String inspectionNo;//JOIN - - /** - * 检测类型编码 - */ - @TableField(exist = false) - private String typeCode;//JOIN - - /** - * 检测类型名称 - */ - @TableField(exist = false) - private String typeName;//JOIN - - /** - * 检测类型(字典:首检 专检 自检 互检 原材料检 抽检 成品检) - */ - @TableField(exist = false) - private Long qcInspectionType;//JOIN } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedRecordBo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedRecordBo.java index 090148f..1518acb 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedRecordBo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedRecordBo.java @@ -8,13 +8,13 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; -import java.util.Date; +import java.math.BigDecimal; /** * 不合格品评审记录业务对象 qc_unqualified_record * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @EqualsAndHashCode(callSuper = true) @@ -27,49 +27,84 @@ public class QcUnqualifiedRecordBo extends BaseEntity { private Long recordId; /** - * 关联待评审表ID + * 关联评审主表ID */ private Long reviewId; /** - * 备注 + * 检测项编码 */ - private String remark; + private String itemCode; /** - * PDA查询参数:评审人(用于查询特定用户的评审记录) + * 检测名称 */ - private String reviewer; + private String itemName; /** - * PDA查询参数:开始时间(用于时间范围查询) + * 检测位置 */ - private Date startTime; + private String inspectionPosition; /** - * PDA查询参数:结束时间(用于时间范围查询) + * 检测项目类别 */ - private Date endTime; + private Long categoryName; /** - * PDA查询参数:物料编码(用于按物料筛选) + * 关联检测类型表 */ - private String materialCode; + private Long typeId; /** - * PDA查询参数:物料名称(用于按物料筛选) + * 检测方法 */ - private String materialName; + private Long inspectionMethod; /** - * PDA查询参数:评审结果(用于按评审结果筛选) + * 检测方式 */ - private String reviewResult; + private Long detectType; /** - * PDA查询参数:不合格检测单号(用于按单号筛选) + * 检测结果 */ - private String unqualifiedNo; + private Long detectResult; + + /** + * 检测值 + */ + private BigDecimal detectValue; + + /** + * 控制上限 + */ + private BigDecimal upperLimit; + + /** + * 控制下限 + */ + private BigDecimal lowerLimit; + + /** + * 规格检测值 + */ + private String specInspectionValue; + + /** + * 规格上限 + */ + private BigDecimal specUpper; + + /** + * 规格下限 + */ + private BigDecimal specLower; + + /** + * 检查项说明 + */ + private String description; } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java index 0aa3e79..48b4a69 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/bo/QcUnqualifiedReviewBo.java @@ -8,6 +8,7 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.math.BigDecimal; import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; @@ -15,7 +16,7 @@ import com.fasterxml.jackson.annotation.JsonFormat; * 不合格品待评审业务对象 qc_unqualified_review * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @EqualsAndHashCode(callSuper = true) @@ -30,38 +31,38 @@ public class QcUnqualifiedReviewBo extends BaseEntity { /** * 不合格检测单号 */ - private String unqualifiedNo; + private Long unqualifiedReviewNo; /** - * 关联质检主表ID + * 评审结果 */ - private Long inspectionId; + private Long reviewResult; /** - * 检测类型ID + * 质检单号 */ - private Long typeId; + private String inspectionNo; /** - * 派工单号 + * 检测类型 */ - private String workOrder; + private Long inspectionType; /** - * 工序编码 + * 生产日期 */ - private String processCode; + private Date productionDate; + + /** + * 派工单号(或者计划号/工单号) + */ + private String workOrderNo; /** * 工序名称 */ private String processName; - /** - * 批次号 - */ - private String batchNo; - /** * 物料名称 */ @@ -73,44 +74,59 @@ public class QcUnqualifiedReviewBo extends BaseEntity { private String materialCode; /** - * 质检员检测结果 + * 物料规格 */ - private String inspectorResult; + private String materialSpec; /** - * 评审结果(0报废/1返工/2退货) + * 供应商名称 */ - private String reviewResult; + private String supplierName; + + /** + * 供应商编码 + */ + private String supplierCode; + + /** + * 质检数量 + */ + private BigDecimal inspectionQty; + + /** + * 批次号 + */ + private String batchNo; + + /** + * 质检人 + */ + private String inspector; + + /** + * 质检人ID + */ + private Long inspectorId; /** * 评审人 */ private String reviewer; + /** + * 评审人ID + */ + private Long reviewerId; + /** * 评审时间 */ private Date reviewTime; /** - * 检测单号/卡号 + * 备注 */ - private String inspectionNo;//JOIN - - /** - * 检测类型编码 - */ - private String typeCode;//JOIN - - /** - * 检测类型名称 - */ - private String typeName;//JOIN - - /** - * 检测类型(字典:首检 专检 自检 互检 原材料检 抽检 成品检) - */ - private Long qcInspectionType;//JOIN + private String remark; } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedRecordVo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedRecordVo.java index 465443a..234a994 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedRecordVo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedRecordVo.java @@ -1,5 +1,6 @@ package org.dromara.qms.domain.vo; +import java.math.BigDecimal; import org.dromara.qms.domain.QcUnqualifiedRecord; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -18,7 +19,7 @@ import java.util.Date; * 不合格品评审记录视图对象 qc_unqualified_record * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @ExcelIgnoreUnannotated @@ -35,102 +36,103 @@ public class QcUnqualifiedRecordVo implements Serializable { private Long recordId; /** - * 关联待评审表ID + * 关联评审主表ID */ - @ExcelProperty(value = "关联待评审表ID") + @ExcelProperty(value = "关联评审主表ID") private Long reviewId; /** - * 备注 + * 检测项编码 */ - @ExcelProperty(value = "备注") - private String remark; - - // PDA需要的关联信息(来自QcUnqualifiedReview表) - /** - * 不合格检测单号 - */ - @ExcelProperty(value = "不合格检测单号") - private String unqualifiedNo; + @ExcelProperty(value = "检测项编码") + private String itemCode; /** - * 关联质检主表ID + * 检测名称 */ - @ExcelProperty(value = "关联质检主表ID") - private Long inspectionId; + @ExcelProperty(value = "检测名称") + private String itemName; /** - * 检测单号/卡号 + * 检测位置 */ - @ExcelProperty(value = "检测单号/卡号") - private String inspectionNo; + @ExcelProperty(value = "检测位置") + private String inspectionPosition; /** - * 检测类型名称 + * 检测项目类别 */ - @ExcelProperty(value = "检测类型名称") - private String typeName; + @ExcelProperty(value = "检测项目类别") + private Long categoryName; /** - * 派工单号 + * 关联检测类型表 */ - @ExcelProperty(value = "派工单号") - private String workOrder; + @ExcelProperty(value = "关联检测类型表") + private Long typeId; /** - * 工序名称 + * 检测方法 */ - @ExcelProperty(value = "工序名称") - private String processName; + @ExcelProperty(value = "检测方法", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "qc_methond") + private Long inspectionMethod; /** - * 批次号 + * 检测方式 */ - @ExcelProperty(value = "批次号") - private String batchNo; + @ExcelProperty(value = "检测方式", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "detect_type") + private Long detectType; /** - * 物料名称 + * 检测结果 */ - @ExcelProperty(value = "物料名称") - private String materialName; + @ExcelProperty(value = "检测结果", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "qc_result") + private Long detectResult; /** - * 物料编码 + * 检测值 */ - @ExcelProperty(value = "物料编码") - private String materialCode; + @ExcelProperty(value = "检测值") + private BigDecimal detectValue; /** - * 质检员检测结果 + * 控制上限 */ - @ExcelProperty(value = "质检员检测结果") - private String inspectorResult; + @ExcelProperty(value = "控制上限") + private BigDecimal upperLimit; /** - * 评审结果(0报废/1返工/2退货/3让步接收/4流转) + * 控制下限 */ - @ExcelProperty(value = "评审结果") - @ExcelDictFormat(dictType = "qc_review_result") - private String reviewResult; + @ExcelProperty(value = "控制下限") + private BigDecimal lowerLimit; /** - * 评审人 + * 规格检测值 */ - @ExcelProperty(value = "评审人") - private String reviewer; + @ExcelProperty(value = "规格检测值") + private String specInspectionValue; /** - * 评审时间 + * 规格上限 */ - @ExcelProperty(value = "评审时间") - private Date reviewTime; + @ExcelProperty(value = "规格上限") + private BigDecimal specUpper; /** - * 创建时间 + * 规格下限 */ - @ExcelProperty(value = "创建时间") - private Date createTime; + @ExcelProperty(value = "规格下限") + private BigDecimal specLower; + + /** + * 检查项说明 + */ + @ExcelProperty(value = "检查项说明") + private String description; } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java index 16d12ab..edd061e 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/domain/vo/QcUnqualifiedReviewVo.java @@ -1,8 +1,7 @@ package org.dromara.qms.domain.vo; -import java.util.Date; -import java.util.List; import java.math.BigDecimal; +import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; import org.dromara.qms.domain.QcUnqualifiedReview; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; @@ -22,7 +21,7 @@ import java.util.Date; * 不合格品待评审视图对象 qc_unqualified_review * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @Data @ExcelIgnoreUnannotated @@ -42,31 +41,39 @@ public class QcUnqualifiedReviewVo implements Serializable { * 不合格检测单号 */ @ExcelProperty(value = "不合格检测单号") - private String unqualifiedNo; + private Long unqualifiedReviewNo; /** - * 关联质检主表ID + * 评审结果 */ - @ExcelProperty(value = "关联质检主表ID") - private Long inspectionId; + @ExcelProperty(value = "评审结果", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "review_result") + private Long reviewResult; /** - * 检测类型ID + * 质检单号 */ - @ExcelProperty(value = "检测类型ID") - private Long typeId; + @ExcelProperty(value = "质检单号") + private String inspectionNo; /** - * 派工单号 + * 检测类型 */ - @ExcelProperty(value = "派工单号") - private String workOrder; + @ExcelProperty(value = "检测类型") + private Long inspectionType; /** - * 工序编码 + * 生产日期 */ - @ExcelProperty(value = "工序编码") - private String processCode; + @ExcelProperty(value = "生产日期") + private Date productionDate; + + /** + * 派工单号(或者计划号/工单号) + */ + @ExcelProperty(value = "派工单号", converter = ExcelDictConvert.class) + @ExcelDictFormat(readConverterExp = "或=者计划号/工单号") + private String workOrderNo; /** * 工序名称 @@ -74,12 +81,6 @@ public class QcUnqualifiedReviewVo implements Serializable { @ExcelProperty(value = "工序名称") private String processName; - /** - * 批次号 - */ - @ExcelProperty(value = "批次号") - private String batchNo; - /** * 物料名称 */ @@ -93,17 +94,46 @@ public class QcUnqualifiedReviewVo implements Serializable { private String materialCode; /** - * 质检员检测结果 + * 物料规格 */ - @ExcelProperty(value = "质检员检测结果") - private String inspectorResult; + @ExcelProperty(value = "物料规格") + private String materialSpec; /** - * 评审结果(0报废/1返工/2退货) + * 供应商名称 */ - @ExcelProperty(value = "评审结果", converter = ExcelDictConvert.class) - @ExcelDictFormat(dictType = "review_result") - private String reviewResult; + @ExcelProperty(value = "供应商名称") + private String supplierName; + + /** + * 供应商编码 + */ + @ExcelProperty(value = "供应商编码") + private String supplierCode; + + /** + * 质检数量 + */ + @ExcelProperty(value = "质检数量") + private BigDecimal inspectionQty; + + /** + * 批次号 + */ + @ExcelProperty(value = "批次号") + private String batchNo; + + /** + * 质检人 + */ + @ExcelProperty(value = "质检人") + private String inspector; + + /** + * 质检人ID + */ + @ExcelProperty(value = "质检人ID") + private Long inspectorId; /** * 评审人 @@ -111,6 +141,12 @@ public class QcUnqualifiedReviewVo implements Serializable { @ExcelProperty(value = "评审人") private String reviewer; + /** + * 评审人ID + */ + @ExcelProperty(value = "评审人ID") + private Long reviewerId; + /** * 评审时间 */ @@ -118,24 +154,10 @@ public class QcUnqualifiedReviewVo implements Serializable { private Date reviewTime; /** - * 检测单号/卡号 + * 备注 */ - private String inspectionNo;//JOIN + @ExcelProperty(value = "备注") + private String remark; - /** - * 检测类型编码 - */ - private String typeCode;//JOIN - - /** - * 检测类型名称 - */ - private String typeName;//JOIN - - /** - * 检测类型(字典:首检 专检 自检 互检 原材料检 抽检 成品检) - */ - private Long qcInspectionType;//JOIN - } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedRecordMapper.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedRecordMapper.java index 652ff7f..ec36476 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedRecordMapper.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedRecordMapper.java @@ -11,7 +11,7 @@ import java.util.List; * 不合格品评审记录Mapper接口 * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ public interface QcUnqualifiedRecordMapper extends BaseMapperPlus { diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedReviewMapper.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedReviewMapper.java index a1e846f..7f318e1 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedReviewMapper.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/mapper/QcUnqualifiedReviewMapper.java @@ -11,7 +11,7 @@ import java.util.List; * 不合格品待评审Mapper接口 * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ public interface QcUnqualifiedReviewMapper extends BaseMapperPlus { diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedRecordServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedRecordServiceImpl.java index 16f2176..011448a 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedRecordServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedRecordServiceImpl.java @@ -9,7 +9,6 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.qms.domain.QcUnqualifiedReview; import org.springframework.stereotype.Service; import org.dromara.qms.domain.bo.QcUnqualifiedRecordBo; import org.dromara.qms.domain.vo.QcUnqualifiedRecordVo; @@ -25,7 +24,7 @@ import java.util.Collection; * 不合格品评审记录Service业务层处理 * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ @RequiredArgsConstructor @Service @@ -76,6 +75,21 @@ public class QcUnqualifiedRecordServiceImpl implements IQcUnqualifiedRecordServi .selectAll(QcUnqualifiedRecord.class) .eq(bo.getRecordId() != null, QcUnqualifiedRecord::getRecordId, bo.getRecordId()) .eq(bo.getReviewId() != null, QcUnqualifiedRecord::getReviewId, bo.getReviewId()) + .eq(StringUtils.isNotBlank(bo.getItemCode()), QcUnqualifiedRecord::getItemCode, bo.getItemCode()) + .like(StringUtils.isNotBlank(bo.getItemName()), QcUnqualifiedRecord::getItemName, bo.getItemName()) + .eq(StringUtils.isNotBlank(bo.getInspectionPosition()), QcUnqualifiedRecord::getInspectionPosition, bo.getInspectionPosition()) + .like(bo.getCategoryName() != null, QcUnqualifiedRecord::getCategoryName, bo.getCategoryName()) + .eq(bo.getTypeId() != null, QcUnqualifiedRecord::getTypeId, bo.getTypeId()) + .eq(bo.getInspectionMethod() != null, QcUnqualifiedRecord::getInspectionMethod, bo.getInspectionMethod()) + .eq(bo.getDetectType() != null, QcUnqualifiedRecord::getDetectType, bo.getDetectType()) + .eq(bo.getDetectResult() != null, QcUnqualifiedRecord::getDetectResult, bo.getDetectResult()) + .eq(bo.getDetectValue() != null, QcUnqualifiedRecord::getDetectValue, bo.getDetectValue()) + .eq(bo.getUpperLimit() != null, QcUnqualifiedRecord::getUpperLimit, bo.getUpperLimit()) + .eq(bo.getLowerLimit() != null, QcUnqualifiedRecord::getLowerLimit, bo.getLowerLimit()) + .eq(StringUtils.isNotBlank(bo.getSpecInspectionValue()), QcUnqualifiedRecord::getSpecInspectionValue, bo.getSpecInspectionValue()) + .eq(bo.getSpecUpper() != null, QcUnqualifiedRecord::getSpecUpper, bo.getSpecUpper()) + .eq(bo.getSpecLower() != null, QcUnqualifiedRecord::getSpecLower, bo.getSpecLower()) + .eq(StringUtils.isNotBlank(bo.getDescription()), QcUnqualifiedRecord::getDescription, bo.getDescription()) .orderByDesc(QcUnqualifiedRecord::getCreateTime); return lqw; } @@ -131,38 +145,4 @@ public class QcUnqualifiedRecordServiceImpl implements IQcUnqualifiedRecordServi } return baseMapper.deleteByIds(ids) > 0; } - - @Override - public TableDataInfo queryPageListWithDetails(QcUnqualifiedRecordBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = new MPJLambdaWrapper<>(); - lqw.selectAll(QcUnqualifiedRecord.class) - .leftJoin(QcUnqualifiedReview.class, QcUnqualifiedReview::getReviewId, QcUnqualifiedRecord::getReviewId) - .select(QcUnqualifiedReview::getUnqualifiedNo, QcUnqualifiedReview::getReviewResult) - // 添加更多关联如果需要 - .eq(bo.getRecordId() != null, QcUnqualifiedRecord::getRecordId, bo.getRecordId()) - .eq(bo.getReviewId() != null, QcUnqualifiedRecord::getReviewId, bo.getReviewId()) - .orderByDesc(QcUnqualifiedRecord::getCreateTime); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - @Override - public TableDataInfo queryPageUserRecords(String reviewer, PageQuery pageQuery) { - QcUnqualifiedRecordBo bo = new QcUnqualifiedRecordBo(); - // 假设QcUnqualifiedRecord有reviewer字段,否则需关联 - // bo.setReviewer(reviewer); - return queryPageListWithDetails(bo, pageQuery); // 或自定义 - } - - @Override - public TableDataInfo queryPageRecordsByDateRange(QcUnqualifiedRecordBo bo, PageQuery pageQuery) { - MPJLambdaWrapper lqw = buildQueryWrapper(bo); - Map params = bo.getParams(); - if (params != null) { - lqw.ge(params.get("beginTime") != null, QcUnqualifiedRecord::getCreateTime, params.get("beginTime")) - .le(params.get("endTime") != null, QcUnqualifiedRecord::getCreateTime, params.get("endTime")); - } - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } } diff --git a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java index d983cca..42d69e5 100644 --- a/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java +++ b/ruoyi-modules/hwmom-qms/src/main/java/org/dromara/qms/service/impl/QcUnqualifiedReviewServiceImpl.java @@ -9,14 +9,6 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.dromara.qms.domain.QcInspectionMain; -import org.dromara.qms.domain.QcInspectionType; -import org.dromara.qms.domain.bo.QcInspectionMainBo; -import org.dromara.qms.domain.bo.QcInspectionResultBo; -import org.dromara.qms.domain.vo.QcInspectionMainVo; -import org.dromara.qms.domain.vo.QcInspectionResultVo; -import org.dromara.qms.service.IQcInspectionResultService; import org.springframework.stereotype.Service; import org.dromara.qms.domain.bo.QcUnqualifiedReviewBo; import org.dromara.qms.domain.vo.QcUnqualifiedReviewVo; @@ -24,24 +16,21 @@ import org.dromara.qms.domain.QcUnqualifiedReview; import org.dromara.qms.mapper.QcUnqualifiedReviewMapper; import org.dromara.qms.service.IQcUnqualifiedReviewService; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.stream.Collectors; +import java.util.List; +import java.util.Map; +import java.util.Collection; /** * 不合格品待评审Service业务层处理 * * @author zch - * @date 2025-07-18 + * @date 2025-07-25 */ -@Slf4j @RequiredArgsConstructor @Service public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewService { private final QcUnqualifiedReviewMapper baseMapper; - private final IQcInspectionResultService qcInspectionResultService; /** * 查询不合格品待评审 @@ -80,561 +69,29 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi return baseMapper.selectVoList(lqw); } - /** - * 分页查询待评审不合格品列表 (for PDA) - * 只查询reviewResult为空的记录,表示待评审状态 - * - * @param bo 查询条件 - * @param pageQuery 分页参数 - * @return 待评审不合格品分页列表 - */ - @Override - public TableDataInfo queryPagePendingReviews(QcUnqualifiedReviewBo bo, PageQuery pageQuery) { - // 设置查询条件:只查询待评审的记录(reviewResult为空) - QcUnqualifiedReviewBo pendingBo = new QcUnqualifiedReviewBo(); - // 复制原有查询条件 - if (bo != null) { - pendingBo.setUnqualifiedNo(bo.getUnqualifiedNo()); - pendingBo.setInspectionId(bo.getInspectionId()); - pendingBo.setTypeId(bo.getTypeId()); - pendingBo.setWorkOrder(bo.getWorkOrder()); - pendingBo.setProcessCode(bo.getProcessCode()); - pendingBo.setProcessName(bo.getProcessName()); - pendingBo.setBatchNo(bo.getBatchNo()); - pendingBo.setMaterialName(bo.getMaterialName()); - pendingBo.setMaterialCode(bo.getMaterialCode()); - pendingBo.setInspectorResult(bo.getInspectorResult()); - pendingBo.setReviewer(bo.getReviewer()); - pendingBo.setParams(bo.getParams()); - } - // 强制设置reviewResult为null,查询待评审记录 - pendingBo.setReviewResult(null); - - MPJLambdaWrapper lqw = buildQueryWrapper(pendingBo); - // 添加条件:reviewResult为空或null - lqw.and(wrapper -> wrapper.isNull(QcUnqualifiedReview::getReviewResult) - .or().eq(QcUnqualifiedReview::getReviewResult, "")); - - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询不合格评审详情包括质检项目 (for PDA) - * 关联查询不合格品的检测项明细 - * - * @param reviewId 主键 - * @return 不合格品待评审详情,包含检测项明细 - */ - @Override - public QcUnqualifiedReviewVo queryByIdWithItems(Long reviewId) { - QcUnqualifiedReviewVo reviewVo = queryById(reviewId); - if (reviewVo != null && reviewVo.getInspectionId() != null) { - // 查询关联的检测项结果明细 - QcInspectionResultBo resultBo = new QcInspectionResultBo(); - resultBo.setInspectionId(reviewVo.getInspectionId()); - List inspectionResults = qcInspectionResultService.queryList(resultBo); - - // 可以将检测项结果添加到reviewVo中,但由于QcUnqualifiedReviewVo没有相应字段 - // 这里暂时通过日志记录或者扩展VO类来处理 - // 实际项目中可能需要扩展QcUnqualifiedReviewVo类添加inspectionResults字段 - } - return reviewVo; - } - - /** - * 提交评审结果 (for PDA) - * 处理评审结果并触发后续流程 - * - * @param bo 不合格品待评审 - * @return 是否提交成功 - */ - @Override - public Boolean submitReview(QcUnqualifiedReviewBo bo) { - // 设置评审时间 - bo.setReviewTime(new Date()); - - // 更新评审结果 - Boolean updated = updateByBo(bo); - - if (updated) { - // 根据评审结果触发后续流程 - triggerWorkflowProcess(bo); - } - - return updated; - } - - /** - * 获取不合格品统计汇总信息 (for PDA) - * - * @param dateRange 日期范围,格式如 "2025-01-01,2025-01-31" - * @return 统计汇总数据 - */ - @Override - public Map getUnqualifiedSummary(String dateRange) { - Map summary = new HashMap<>(); - - // 解析日期范围 - LocalDate startDate = null; - LocalDate endDate = null; - if (StringUtils.isNotBlank(dateRange)) { - String[] dates = dateRange.split(","); - if (dates.length == 2) { - try { - startDate = LocalDate.parse(dates[0].trim(), DateTimeFormatter.ISO_LOCAL_DATE); - endDate = LocalDate.parse(dates[1].trim(), DateTimeFormatter.ISO_LOCAL_DATE); - } catch (Exception e) { - // 日期解析失败,使用默认范围(当月) - startDate = LocalDate.now().withDayOfMonth(1); - endDate = LocalDate.now(); - } - } - } else { - // 默认查询当月数据 - startDate = LocalDate.now().withDayOfMonth(1); - endDate = LocalDate.now(); - } - - // 构建查询条件 - QcUnqualifiedReviewBo bo = new QcUnqualifiedReviewBo(); - Map params = new HashMap<>(); - params.put("beginTime", startDate.toString()); - params.put("endTime", endDate.toString()); - bo.setParams(params); - - // 查询所有不合格品记录 - List allRecords = queryList(bo); - - // 统计总数 - summary.put("totalCount", allRecords.size()); - - // 统计待评审数量 - long pendingCount = allRecords.stream() - .filter(record -> StringUtils.isBlank(record.getReviewResult())) - .count(); - summary.put("pendingCount", pendingCount); - - // 统计已评审数量 - long reviewedCount = allRecords.size() - pendingCount; - summary.put("reviewedCount", reviewedCount); - - // 按评审结果分组统计 - Map reviewResultStats = allRecords.stream() - .filter(record -> StringUtils.isNotBlank(record.getReviewResult())) - .collect(Collectors.groupingBy( - QcUnqualifiedReviewVo::getReviewResult, - Collectors.counting() - )); - - summary.put("scrapCount", reviewResultStats.getOrDefault("0", 0L)); // 报废 - summary.put("reworkCount", reviewResultStats.getOrDefault("1", 0L)); // 返工 - summary.put("returnCount", reviewResultStats.getOrDefault("2", 0L)); // 退货 - summary.put("acceptCount", reviewResultStats.getOrDefault("3", 0L)); // 让步接收 - summary.put("transferCount", reviewResultStats.getOrDefault("4", 0L)); // 流转 - - // 按物料分组统计 - Map materialStats = allRecords.stream() - .filter(record -> StringUtils.isNotBlank(record.getMaterialName())) - .collect(Collectors.groupingBy( - QcUnqualifiedReviewVo::getMaterialName, - Collectors.counting() - )); - summary.put("materialStats", materialStats); - - // 按工序分组统计 - Map processStats = allRecords.stream() - .filter(record -> StringUtils.isNotBlank(record.getProcessName())) - .collect(Collectors.groupingBy( - QcUnqualifiedReviewVo::getProcessName, - Collectors.counting() - )); - summary.put("processStats", processStats); - - return summary; - } - - /** - * 触发工作流程处理 (for PDA) - * 实现评审完成后的状态更新和流程触发 - * - * @param bo 不合格品评审信息 - * @return 是否触发成功 - */ - @Override - public Boolean triggerWorkflowProcess(QcUnqualifiedReviewBo bo) { - if (bo == null || StringUtils.isBlank(bo.getReviewResult())) { - log.error("评审结果为空,无法触发工作流程"); - return false; - } - - try { - log.info("开始触发工作流程: 评审ID={}, 评审结果={}", bo.getReviewId(), bo.getReviewResult()); - - // 根据评审结果触发不同的后续流程 - switch (bo.getReviewResult()) { - case "0": // 报废 - return handleScrapProcess(bo); - case "1": // 返工 - return handleReworkProcess(bo); - case "2": // 退货 - return handleReturnProcess(bo); - case "3": // 让步接收 - return handleAcceptProcess(bo); - case "4": // 流转 - return handleTransferProcess(bo); - default: - log.warn("未知的评审结果: {}", bo.getReviewResult()); - return false; - } - } catch (Exception e) { - log.error("触发工作流程异常: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - /** - * 处理报废流程 - * 实现评审结果的五种处置方式:报废 - */ - private Boolean handleScrapProcess(QcUnqualifiedReviewBo bo) { - try { - log.info("执行报废流程: 评审ID={}", bo.getReviewId()); - - // 1. 更新库存状态为报废 - updateInventoryStatus(bo, "SCRAPPED"); - - // 2. 生成报废单据 - generateScrapDocument(bo); - - // 3. 更新质检主表状态 - updateInspectionMainStatus(bo, "SCRAPPED"); - - // 4. 记录处理日志 - recordProcessLog(bo, "报废流程执行完成"); - - log.info("报废流程执行成功: 评审ID={}", bo.getReviewId()); - return true; - } catch (Exception e) { - log.error("报废流程执行失败: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - /** - * 处理返工流程 - * 实现评审结果的五种处置方式:返工 - */ - private Boolean handleReworkProcess(QcUnqualifiedReviewBo bo) { - try { - log.info("执行返工流程: 评审ID={}", bo.getReviewId()); - - // 1. 生成返工工单 - generateReworkOrder(bo); - - // 2. 分派返工任务给相关人员 - assignReworkTask(bo); - - // 3. 更新质检主表状态为返工中 - updateInspectionMainStatus(bo, "REWORKING"); - - // 4. 更新库存状态 - updateInventoryStatus(bo, "REWORKING"); - - // 5. 记录处理日志 - recordProcessLog(bo, "返工流程执行完成,已生成返工工单"); - - log.info("返工流程执行成功: 评审ID={}", bo.getReviewId()); - return true; - } catch (Exception e) { - log.error("返工流程执行失败: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - /** - * 处理退货流程 - * 实现评审结果的五种处置方式:退货 - */ - private Boolean handleReturnProcess(QcUnqualifiedReviewBo bo) { - try { - log.info("执行退货流程: 评审ID={}", bo.getReviewId()); - - // 1. 生成退货单据 - generateReturnDocument(bo); - - // 2. 通知供应商 - notifySupplier(bo); - - // 3. 更新库存状态为待退货 - updateInventoryStatus(bo, "RETURNING"); - - // 4. 更新质检主表状态 - updateInspectionMainStatus(bo, "RETURNED"); - - // 5. 记录处理日志 - recordProcessLog(bo, "退货流程执行完成,已通知供应商"); - - log.info("退货流程执行成功: 评审ID={}", bo.getReviewId()); - return true; - } catch (Exception e) { - log.error("退货流程执行失败: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - /** - * 处理让步接收流程 - * 实现评审结果的五种处置方式:让步接收 - */ - private Boolean handleAcceptProcess(QcUnqualifiedReviewBo bo) { - try { - log.info("执行让步接收流程: 评审ID={}", bo.getReviewId()); - - // 1. 更新质检状态为让步合格 - updateInspectionMainStatus(bo, "CONDITIONALLY_ACCEPTED"); - - // 2. 更新库存状态为可用 - updateInventoryStatus(bo, "AVAILABLE"); - - // 3. 生成让步接收单据 - generateAcceptanceDocument(bo); - - // 4. 触发入库流程 - triggerInboundProcess(bo); - - // 5. 记录处理日志 - recordProcessLog(bo, "让步接收流程执行完成,产品已入库"); - - log.info("让步接收流程执行成功: 评审ID={}", bo.getReviewId()); - return true; - } catch (Exception e) { - log.error("让步接收流程执行失败: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - /** - * 处理流转流程 - * 实现评审结果的五种处置方式:流转 - */ - private Boolean handleTransferProcess(QcUnqualifiedReviewBo bo) { - try { - log.info("执行流转流程: 评审ID={}", bo.getReviewId()); - - // 1. 确定流转目标部门或工序 - String transferTarget = determineTransferTarget(bo); - - // 2. 生成流转单据 - generateTransferDocument(bo, transferTarget); - - // 3. 通知目标部门 - notifyTargetDepartment(bo, transferTarget); - - // 4. 更新质检主表状态 - updateInspectionMainStatus(bo, "TRANSFERRED"); - - // 5. 更新库存状态 - updateInventoryStatus(bo, "TRANSFERRED"); - - // 6. 记录处理日志 - recordProcessLog(bo, "流转流程执行完成,已转移至: " + transferTarget); - - log.info("流转流程执行成功: 评审ID={}, 流转目标={}", bo.getReviewId(), transferTarget); - return true; - } catch (Exception e) { - log.error("流转流程执行失败: 评审ID={}", bo.getReviewId(), e); - return false; - } - } - - // 以下是辅助方法的实现 - - /** - * 更新库存状态 - */ - private void updateInventoryStatus(QcUnqualifiedReviewBo bo, String status) { - try { - // TODO: 实现库存状态更新逻辑 - // 这里需要调用库存管理模块的接口 - log.info("更新库存状态: 评审ID={}, 状态={}", bo.getReviewId(), status); - } catch (Exception e) { - log.error("更新库存状态失败: 评审ID={}, 状态={}", bo.getReviewId(), status, e); - } - } - - /** - * 更新质检主表状态 - */ - private void updateInspectionMainStatus(QcUnqualifiedReviewBo bo, String status) { - try { - // TODO: 实现质检主表状态更新逻辑 - // 这里需要调用质检主表服务的更新方法 - log.info("更新质检主表状态: 质检ID={}, 状态={}", bo.getInspectionId(), status); - } catch (Exception e) { - log.error("更新质检主表状态失败: 质检ID={}, 状态={}", bo.getInspectionId(), status, e); - } - } - - /** - * 生成报废单据 - */ - private void generateScrapDocument(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现报废单据生成逻辑 - log.info("生成报废单据: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("生成报废单据失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 生成返工工单 - */ - private void generateReworkOrder(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现返工工单生成逻辑 - log.info("生成返工工单: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("生成返工工单失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 分派返工任务 - */ - private void assignReworkTask(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现返工任务分派逻辑 - log.info("分派返工任务: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("分派返工任务失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 生成退货单据 - */ - private void generateReturnDocument(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现退货单据生成逻辑 - log.info("生成退货单据: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("生成退货单据失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 通知供应商 - */ - private void notifySupplier(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现供应商通知逻辑 - log.info("通知供应商: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("通知供应商失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 生成让步接收单据 - */ - private void generateAcceptanceDocument(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现让步接收单据生成逻辑 - log.info("生成让步接收单据: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("生成让步接收单据失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 触发入库流程 - */ - private void triggerInboundProcess(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现入库流程触发逻辑 - log.info("触发入库流程: 评审ID={}", bo.getReviewId()); - } catch (Exception e) { - log.error("触发入库流程失败: 评审ID={}", bo.getReviewId(), e); - } - } - - /** - * 确定流转目标 - */ - private String determineTransferTarget(QcUnqualifiedReviewBo bo) { - try { - // TODO: 实现流转目标确定逻辑 - // 这里可以根据业务规则或配置来确定流转目标 - return "质量管理部"; // 默认流转目标 - } catch (Exception e) { - log.error("确定流转目标失败: 评审ID={}", bo.getReviewId(), e); - return "质量管理部"; - } - } - - /** - * 生成流转单据 - */ - private void generateTransferDocument(QcUnqualifiedReviewBo bo, String transferTarget) { - try { - // TODO: 实现流转单据生成逻辑 - log.info("生成流转单据: 评审ID={}, 目标={}", bo.getReviewId(), transferTarget); - } catch (Exception e) { - log.error("生成流转单据失败: 评审ID={}, 目标={}", bo.getReviewId(), transferTarget, e); - } - } - - /** - * 通知目标部门 - */ - private void notifyTargetDepartment(QcUnqualifiedReviewBo bo, String transferTarget) { - try { - // TODO: 实现目标部门通知逻辑 - log.info("通知目标部门: 评审ID={}, 目标={}", bo.getReviewId(), transferTarget); - } catch (Exception e) { - log.error("通知目标部门失败: 评审ID={}, 目标={}", bo.getReviewId(), transferTarget, e); - } - } - - /** - * 记录处理日志 - */ - private void recordProcessLog(QcUnqualifiedReviewBo bo, String message) { - try { - // TODO: 实现处理日志记录逻辑 - log.info("记录处理日志: 评审ID={}, 消息={}", bo.getReviewId(), message); - } catch (Exception e) { - log.error("记录处理日志失败: 评审ID={}, 消息={}", bo.getReviewId(), message, e); - } - } - private MPJLambdaWrapper buildQueryWrapper(QcUnqualifiedReviewBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(QcUnqualifiedReview.class) .selectAll(QcUnqualifiedReview.class) - - //关联质检主表 - .select(QcInspectionMain::getInspectionNo) - .leftJoin(QcInspectionMain.class, QcInspectionMain::getInspectionId, QcUnqualifiedReview::getInspectionId) - //关联检测类型 - .select(QcInspectionType::getTypeName, QcInspectionType::getQcInspectionType, QcInspectionType::getTypeCode, QcInspectionType::getQcInspectionType) - .leftJoin(QcInspectionType.class, QcInspectionType::getTypeId, QcUnqualifiedReview::getTypeId) - .eq(bo.getReviewId() != null, QcUnqualifiedReview::getReviewId, bo.getReviewId()) - .eq(StringUtils.isNotBlank(bo.getUnqualifiedNo()), QcUnqualifiedReview::getUnqualifiedNo, bo.getUnqualifiedNo()) - .eq(bo.getInspectionId() != null, QcUnqualifiedReview::getInspectionId, bo.getInspectionId()) - .eq(bo.getTypeId() != null, QcUnqualifiedReview::getTypeId, bo.getTypeId()) - .eq(StringUtils.isNotBlank(bo.getWorkOrder()), QcUnqualifiedReview::getWorkOrder, bo.getWorkOrder()) - .eq(StringUtils.isNotBlank(bo.getProcessCode()), QcUnqualifiedReview::getProcessCode, bo.getProcessCode()) + .eq(bo.getUnqualifiedReviewNo() != null, QcUnqualifiedReview::getUnqualifiedReviewNo, bo.getUnqualifiedReviewNo()) + .eq(bo.getReviewResult() != null, QcUnqualifiedReview::getReviewResult, bo.getReviewResult()) + .eq(StringUtils.isNotBlank(bo.getInspectionNo()), QcUnqualifiedReview::getInspectionNo, bo.getInspectionNo()) + .eq(bo.getInspectionType() != null, QcUnqualifiedReview::getInspectionType, bo.getInspectionType()) + .eq(bo.getProductionDate() != null, QcUnqualifiedReview::getProductionDate, bo.getProductionDate()) + .eq(StringUtils.isNotBlank(bo.getWorkOrderNo()), QcUnqualifiedReview::getWorkOrderNo, bo.getWorkOrderNo()) .like(StringUtils.isNotBlank(bo.getProcessName()), QcUnqualifiedReview::getProcessName, bo.getProcessName()) - .eq(StringUtils.isNotBlank(bo.getBatchNo()), QcUnqualifiedReview::getBatchNo, bo.getBatchNo()) .like(StringUtils.isNotBlank(bo.getMaterialName()), QcUnqualifiedReview::getMaterialName, bo.getMaterialName()) .eq(StringUtils.isNotBlank(bo.getMaterialCode()), QcUnqualifiedReview::getMaterialCode, bo.getMaterialCode()) - .eq(StringUtils.isNotBlank(bo.getInspectorResult()), QcUnqualifiedReview::getInspectorResult, bo.getInspectorResult()) - .eq(StringUtils.isNotBlank(bo.getReviewResult()), QcUnqualifiedReview::getReviewResult, bo.getReviewResult()) + .eq(StringUtils.isNotBlank(bo.getMaterialSpec()), QcUnqualifiedReview::getMaterialSpec, bo.getMaterialSpec()) + .like(StringUtils.isNotBlank(bo.getSupplierName()), QcUnqualifiedReview::getSupplierName, bo.getSupplierName()) + .eq(StringUtils.isNotBlank(bo.getSupplierCode()), QcUnqualifiedReview::getSupplierCode, bo.getSupplierCode()) + .eq(bo.getInspectionQty() != null, QcUnqualifiedReview::getInspectionQty, bo.getInspectionQty()) + .eq(StringUtils.isNotBlank(bo.getBatchNo()), QcUnqualifiedReview::getBatchNo, bo.getBatchNo()) + .eq(StringUtils.isNotBlank(bo.getInspector()), QcUnqualifiedReview::getInspector, bo.getInspector()) + .eq(bo.getInspectorId() != null, QcUnqualifiedReview::getInspectorId, bo.getInspectorId()) .eq(StringUtils.isNotBlank(bo.getReviewer()), QcUnqualifiedReview::getReviewer, bo.getReviewer()) + .eq(bo.getReviewerId() != null, QcUnqualifiedReview::getReviewerId, bo.getReviewerId()) .eq(bo.getReviewTime() != null, QcUnqualifiedReview::getReviewTime, bo.getReviewTime()) .orderByDesc(QcUnqualifiedReview::getCreateTime); return lqw; @@ -691,57 +148,4 @@ public class QcUnqualifiedReviewServiceImpl implements IQcUnqualifiedReviewServi } return baseMapper.deleteByIds(ids) > 0; } - - @Override - public Boolean autoGenerateUnqualifiedReview(QcInspectionMainVo inspectionVo, List inspectionResults) { - // 检查是否有不合格项 - boolean hasUnqualified = inspectionResults.stream() - .anyMatch(result -> Long.valueOf(1).equals(result.getDetectResult())); - if (!hasUnqualified) { - log.info("无不合格项,无需生成评审记录: inspectionId={}", inspectionVo.getInspectionId()); - return false; - } - - QcUnqualifiedReviewBo bo = new QcUnqualifiedReviewBo(); - bo.setInspectionId(inspectionVo.getInspectionId()); -// bo.setTypeId(inspectionVo.getTypeId()); - bo.setMaterialCode(inspectionVo.getMaterialCode()); - bo.setMaterialName(inspectionVo.getMaterialName()); - bo.setProcessName(inspectionVo.getProcessName()); - bo.setWorkOrder(inspectionVo.getProductionOrder()); - bo.setBatchNo(inspectionVo.getBatchNo()); - bo.setInspectorResult(inspectionVo.getResult().toString()); - - // 生成唯一的不合格编号 - String unqualifiedNo = generateUnqualifiedNo(); - bo.setUnqualifiedNo(unqualifiedNo); - - // 设置默认值 - bo.setReviewResult(null); // 待评审 - - Boolean inserted = insertByBo(bo); - if (inserted) { - log.info("不合格品评审记录生成成功: reviewId={}, unqualifiedNo={}", bo.getReviewId(), unqualifiedNo); - } else { - log.error("不合格品评审记录生成失败: inspectionId={}", inspectionVo.getInspectionId()); - } - return inserted; - } - - /** - * 生成唯一的不合格编号 - * 格式: UNQ-yyyyMMdd-XXXX (XXXX为4位序列号) - */ - private String generateUnqualifiedNo() { - LocalDate today = LocalDate.now(); - String prefix = "UNQ-" + today.format(DateTimeFormatter.ofPattern("yyyyMMdd")) + "-"; - - // 查询当天已生成的记录数 - long count = baseMapper.selectCount(Wrappers.lambdaQuery() - .likeRight(QcUnqualifiedReview::getUnqualifiedNo, prefix)); - - // 生成序列号 - String seq = String.format("%04d", count + 1); - return prefix + seq; - } } diff --git a/ruoyi-modules/hwmom-qms/src/main/resources/mapper/qms/QcUnqualifiedRecordMapper.xml b/ruoyi-modules/hwmom-qms/src/main/resources/mapper/qms/QcUnqualifiedRecordMapper.xml index 6b1cc69..dbe8ff1 100644 --- a/ruoyi-modules/hwmom-qms/src/main/resources/mapper/qms/QcUnqualifiedRecordMapper.xml +++ b/ruoyi-modules/hwmom-qms/src/main/resources/mapper/qms/QcUnqualifiedRecordMapper.xml @@ -4,15 +4,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - - + + + + + + + + + + + + + + + - select record_id, tenant_id, review_id, remark, create_dept, create_by, create_time, update_by, update_time, del_flag + select record_id, review_id, tenant_id, item_code, item_name, inspection_position, category_name, type_id, inspection_method, detect_type, detect_result, detect_value, upper_limit, lower_limit, spec_inspection_value, spec_upper, spec_lower, description, create_dept, create_by, create_time, update_by, update_time, del_flag from qc_unqualified_record @@ -21,8 +34,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and record_id = #{recordId} and review_id = #{reviewId} + and item_code = #{itemCode} + and item_name like concat('%', #{itemName}, '%') + and inspection_position = #{inspectionPosition} + and category_name like concat('%', #{categoryName}, '%') + and type_id = #{typeId} + and inspection_method = #{inspectionMethod} + and detect_type = #{detectType} + and detect_result = #{detectResult} + and detect_value = #{detectValue} + and upper_limit = #{upperLimit} + and lower_limit = #{lowerLimit} + and spec_inspection_value = #{specInspectionValue} + and spec_upper = #{specUpper} + and spec_lower = #{specLower} + and description = #{description} - AND del_flag = '0' + AND del_flag = '0'