From c3c6bccc56c775f8b9bb7120ef535a51cfa5a395 Mon Sep 17 00:00:00 2001 From: zhangke Date: Sat, 11 Apr 2026 15:58:31 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=8D=E6=A3=80=E7=89=A9=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../QmsExemptMaterialController.java | 138 ++++++++++++++ .../common/pojo/qo/MaterialListSelectQO.java | 15 ++ .../pojo/qo/QmsExemptMaterialAuditQO.java | 25 +++ .../QmsExemptMaterialDetailByMaterialQO.java | 12 ++ .../QmsExemptMaterialDetailBySupplierQO.java | 12 ++ .../pojo/qo/QmsExemptMaterialSaveQO.java | 76 ++++++++ .../pojo/qo/QmsExemptMaterialSearchQO.java | 62 +++++++ .../common/pojo/qo/SupplierListSelectQO.java | 15 ++ .../wms/common/pojo/qo/ToggleEnableQO.java | 13 ++ .../common/pojo/vo/QmsExemptMaterialVO.java | 107 +++++++++++ .../repository/entity/QmsExemptMaterial.java | 115 ++++++++++++ .../wms/repository/entity/QmsQcMaterial.java | 120 +++++++++++++ .../mapper/QmsExemptMaterialMapper.java | 32 ++++ .../mapper/QmsQcMaterialMapper.java | 10 ++ .../service/IQmsExemptMaterialService.java | 47 +++++ .../service/IQmsQcMaterialService.java | 10 ++ .../impl/QmsExemptMaterialServiceImpl.java | 169 ++++++++++++++++++ .../impl/QmsQcMaterialServiceImpl.java | 15 ++ .../mapper/QmsExemptMaterialMapper.xml | 137 ++++++++++++++ pom.xml | 6 +- 20 files changed, 1132 insertions(+), 4 deletions(-) create mode 100644 nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsExemptMaterialController.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialListSelectQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialAuditQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailByMaterialQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailBySupplierQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSaveQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSearchQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SupplierListSelectQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ToggleEnableQO.java create mode 100644 nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsExemptMaterialVO.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsExemptMaterial.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQcMaterial.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptMaterialMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQcMaterialMapper.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptMaterialService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQcMaterialService.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptMaterialServiceImpl.java create mode 100644 nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQcMaterialServiceImpl.java create mode 100644 nflg-wms-repository/src/main/resources/mapper/QmsExemptMaterialMapper.xml diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsExemptMaterialController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsExemptMaterialController.java new file mode 100644 index 00000000..2a4400b3 --- /dev/null +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsExemptMaterialController.java @@ -0,0 +1,138 @@ +package com.nflg.qms.admin.controller; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.pojo.ApiResult; +import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.*; +import com.nflg.wms.common.pojo.vo.QmsExemptMaterialVO; +import com.nflg.wms.common.util.VUtil; +import com.nflg.wms.repository.entity.QmsExemptMaterial; +import com.nflg.wms.repository.entity.QmsQcMaterial; +import com.nflg.wms.repository.entity.UserSupplier; +import com.nflg.wms.repository.service.IQmsExemptMaterialService; +import com.nflg.wms.repository.service.IQmsQcMaterialService; +import com.nflg.wms.repository.service.IUserSupplierService; +import com.nflg.wms.starter.BaseController; +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Objects; + +/** + * 免检物料管理 + */ +@RestController +@RequestMapping("/exemptMaterial") +public class QmsExemptMaterialController extends BaseController { + + @Resource + private IQmsExemptMaterialService exemptMaterialService; + + @Resource + private IUserSupplierService userSupplierService; + + @Resource + private IQmsQcMaterialService qcMaterialService; + + /** + * 分页查询免检物料列表 + */ + @PostMapping("search") + public ApiResult> search(@Valid @RequestBody QmsExemptMaterialSearchQO request) { + return ApiResult.success(exemptMaterialService.search(request)); + } + + /** + * 保存免检物料(新增/编辑) + */ + @PostMapping("save") + public ApiResult save(@RequestBody QmsExemptMaterialSaveQO request) { + exemptMaterialService.saveExemptMaterial(request); + return ApiResult.success(); + } + + /** + * 按供应商ID查询免检物料明细 + */ + @PostMapping("detailBySupplier") + public ApiResult> detailBySupplier(@RequestBody QmsExemptMaterialDetailBySupplierQO request) { + return ApiResult.success(exemptMaterialService.detailBySupplier(request.getSupplierId())); + } + + /** + * 按物料编号查询免检物料明细 + */ + @PostMapping("detailByMaterial") + public ApiResult> detailByMaterial(@RequestBody QmsExemptMaterialDetailByMaterialQO request) { + return ApiResult.success(exemptMaterialService.detailByMaterial(request.getMaterialNo())); + } + + /** + * 分页搜索供应商列表(供选择弹窗使用) + */ + @PostMapping("supplierList") + public ApiResult> supplierList(@RequestBody SupplierListSelectQO request) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (request.getKeyword() != null && !request.getKeyword().isEmpty()) { + wrapper.and(w -> w.like(UserSupplier::getSupplierCode, request.getKeyword()) + .or().like(UserSupplier::getSupplierName, request.getKeyword())); + } + wrapper.orderByDesc(UserSupplier::getCreateTime); + IPage result = userSupplierService.page(new Page<>(request.getPage(), request.getPageSize()), wrapper); + return ApiResult.success(result); + } + + /** + * 分页搜索质检物料列表(供选择弹窗使用) + */ + @PostMapping("materialList") + public ApiResult> materialList(@RequestBody MaterialListSelectQO request) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + if (request.getKeyword() != null && !request.getKeyword().isEmpty()) { + wrapper.and(w -> w.like(QmsQcMaterial::getMaterialNo, request.getKeyword()) + .or().like(QmsQcMaterial::getMaterialDesc, request.getKeyword())); + } + wrapper.orderByDesc(QmsQcMaterial::getCreateTime); + IPage result = qcMaterialService.page(new Page<>(request.getPage(), request.getPageSize()), wrapper); + return ApiResult.success(result); + } + + /** + * 启用/禁用切换 + */ + @PostMapping("toggleEnable") + public ApiResult toggleEnable(@RequestBody ToggleEnableQO request) { + exemptMaterialService.toggleEnable(request.getId(), request.getEnableStatus()); + return ApiResult.success(); + } + + /** + * 审核免检物料 + */ + @PostMapping("audit") + public ApiResult audit(@RequestBody QmsExemptMaterialAuditQO request) { + exemptMaterialService.audit(request); + return ApiResult.success(); + } + + /** + * 删除免检物料 + */ + @PostMapping("delete") + public ApiResult delete(@RequestBody @NotNull List ids) { + //如果当前数据是审核状态的时候,则不允许删除 + boolean hasAudited = exemptMaterialService.listByIds(ids).stream() + .anyMatch(m -> m.getAuditStatus() != null && m.getAuditStatus() == 1); + VUtil.trueThrowBusinessError(hasAudited).throwMessage("此数据已审核,不能删除"); + exemptMaterialService.removeByIds(ids); + return ApiResult.success(); + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialListSelectQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialListSelectQO.java new file mode 100644 index 00000000..7572e5d9 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/MaterialListSelectQO.java @@ -0,0 +1,15 @@ +package com.nflg.wms.common.pojo.qo; + +import com.nflg.wms.common.pojo.qo.PageQO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 质检物料列表查询(选择弹窗用) + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MaterialListSelectQO extends PageQO { + + private String keyword; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialAuditQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialAuditQO.java new file mode 100644 index 00000000..2775deaa --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialAuditQO.java @@ -0,0 +1,25 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +/** + * 免检物料审核请求 + */ +@Data +public class QmsExemptMaterialAuditQO { + + /** + * 免检物料ID + */ + private Long id; + + /** + * 审核结果:true 通过;false 驳回 + */ + private Boolean pass; + + /** + * 驳回原因(驳回时必填) + */ + private String rejectReason; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailByMaterialQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailByMaterialQO.java new file mode 100644 index 00000000..267a6084 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailByMaterialQO.java @@ -0,0 +1,12 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +/** + * 按物料查询免检物料明细 请求 + */ +@Data +public class QmsExemptMaterialDetailByMaterialQO { + + private String materialNo; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailBySupplierQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailBySupplierQO.java new file mode 100644 index 00000000..134214c5 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialDetailBySupplierQO.java @@ -0,0 +1,12 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +/** + * 按供应商查询免检物料明细 请求 + */ +@Data +public class QmsExemptMaterialDetailBySupplierQO { + + private Long supplierId; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSaveQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSaveQO.java new file mode 100644 index 00000000..5b496dcc --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSaveQO.java @@ -0,0 +1,76 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +import java.util.List; + +/** + * 免检物料 保存请求对象 + */ +@Data +public class QmsExemptMaterialSaveQO { + + /** + * 供应商ID(按供应商模式时使用) + */ + private Long supplierId; + + /** + * 物料编号(按物料模式时使用) + */ + private String materialNo; + + /** + * 头部免检模式;0 永久;1 周期 + */ + private Integer exemptMode; + + /** + * 头部有效期开始日期 + */ + private String validStartDate; + + /** + * 头部有效期结束日期 + */ + private String validEndDate; + + /** + * 明细列表 + */ + private List items; + + @Data + public static class Item { + + /** + * 已有记录ID(编辑时使用) + */ + private Long id; + + /** + * 物料编号(按供应商模式时,每行的物料) + */ + private String materialNo; + + /** + * 供应商ID(按物料模式时,每行的供应商) + */ + private Long supplierId; + + /** + * 免检模式;0 永久;1 周期 + */ + private Integer exemptMode; + + /** + * 有效期开始日期 + */ + private String validStartDate; + + /** + * 有效期结束日期 + */ + private String validEndDate; + } +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSearchQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSearchQO.java new file mode 100644 index 00000000..42ced5e8 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsExemptMaterialSearchQO.java @@ -0,0 +1,62 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +import java.time.LocalDate; + +/** + * 免检物料 列表查询参数 + */ +@Data +public class QmsExemptMaterialSearchQO extends PageQO { + + /** + * 供应商(编码或名称模糊搜索) + */ + private String supplier; + + /** + * 物料编码 + */ + private String materialNo; + + /** + * 免检模式;0 永久;1 周期 + */ + private Integer exemptMode; + + /** + * 审核状态;0 待审核;1 已审核;2 已驳回 + */ + private Integer auditStatus; + + /** + * 启用状态;false 禁用;true 启用 + */ + private Boolean enableStatus; + + /** + * 有效开始日期 - 起始 + */ + private LocalDate validStartDateBegin; + + /** + * 有效开始日期 - 结束 + */ + private LocalDate validStartDateEnd; + + /** + * 有效结束日期 - 起始 + */ + private LocalDate validEndDateBegin; + + /** + * 有效结束日期 - 结束 + */ + private LocalDate validEndDateEnd; + + /** + * 有效状态;0 已过期;1 有效中 + */ + private Integer validStatus; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SupplierListSelectQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SupplierListSelectQO.java new file mode 100644 index 00000000..47dbf5cc --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/SupplierListSelectQO.java @@ -0,0 +1,15 @@ +package com.nflg.wms.common.pojo.qo; + +import com.nflg.wms.common.pojo.qo.PageQO; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 供应商列表查询(选择弹窗用) + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class SupplierListSelectQO extends PageQO { + + private String keyword; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ToggleEnableQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ToggleEnableQO.java new file mode 100644 index 00000000..30f96afe --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/ToggleEnableQO.java @@ -0,0 +1,13 @@ +package com.nflg.wms.common.pojo.qo; + +import lombok.Data; + +/** + * 启用/禁用切换请求 + */ +@Data +public class ToggleEnableQO { + + private Long id; + private Boolean enableStatus; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsExemptMaterialVO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsExemptMaterialVO.java new file mode 100644 index 00000000..3c976f29 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/vo/QmsExemptMaterialVO.java @@ -0,0 +1,107 @@ +package com.nflg.wms.common.pojo.vo; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 免检物料 列表VO + */ +@Data +public class QmsExemptMaterialVO { + + /** + * 免检物料ID + */ + private Long id; + + /** + * 供应商ID + */ + private Long supplierId; + + /** + * 供应商编码 + */ + private String supplierCode; + + /** + * 供应商名称 + */ + private String supplierName; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 审核状态;0 待审核;1 已审核;2 已驳回 + */ + private Integer auditStatus; + + /** + * 驳回原因 + */ + private String rejectReason; + + /** + * 启用状态;false 禁用;true 启用 + */ + private Boolean enableStatus; + + /** + * 免检模式;0 永久;1 周期 + */ + private Integer exemptMode; + + /** + * 有效期开始日期 + */ + private LocalDateTime validStartDate; + + /** + * 有效期结束日期 + */ + private LocalDateTime validEndDate; + + /** + * 是否有效;0 已过期;1 有效中 + */ + private Integer validStatus; + + /** + * 审核人 + */ + private String auditorName; + + /** + * 审核时间 + */ + private LocalDateTime auditTime; + + /** + * 创建人名称 + */ + private String createByName; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 修改人名称 + */ + private String updateByName; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsExemptMaterial.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsExemptMaterial.java new file mode 100644 index 00000000..ddc43f7f --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsExemptMaterial.java @@ -0,0 +1,115 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 免检物料 + *

+ */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("qms_exempt_material") +public class QmsExemptMaterial implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 物料编号,关联qms_qc_material表的material_no + */ + private String materialNo; + + /** + * 供应商ID,关联qms_supplier_sqe_map表的supplier_id + */ + private Long supplierId; + + /** + * 审核状态;0 待审核;1 已审核;2 已驳回 + */ + private Integer auditStatus; + + /** + * 启用状态;false 禁用;true 启用 + */ + private Boolean enableStatus; + + /** + * 免检模式;0 永久;1 周期 + */ + private Integer exemptMode; + + /** + * 有效期开始日期 + */ + private LocalDateTime validStartDate; + + /** + * 有效期结束日期 + */ + private LocalDateTime validEndDate; + + /** + * 审核人ID + */ + private Long auditorId; + + /** + * 审核人 + */ + private String auditorName; + + /** + * 审核时间 + */ + private LocalDateTime auditTime; + + /** + * 驳回原因 + */ + private String rejectReason; + + /** + * 创建人ID + */ + private Long createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 创建人名称 + */ + private String createByName; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; + + /** + * 修改人ID + */ + private Long updateBy; + + /** + * 修改人名称 + */ + private String updateByName; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQcMaterial.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQcMaterial.java new file mode 100644 index 00000000..de55d1cd --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/QmsQcMaterial.java @@ -0,0 +1,120 @@ +package com.nflg.wms.repository.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 来料检测,质检任务的抽样检测类型调整表 + *

+ */ +@Getter +@Setter +@ToString +@Accessors(chain = true) +@TableName("qms_qc_material") +public class QmsQcMaterial implements Serializable { + + private static final long serialVersionUID = 1L; + + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; + + /** + * 物料编号 + */ + private String materialNo; + + /** + * 物料描述 + */ + private String materialDesc; + + /** + * 描述是否变更 false 未变更;true 已变更 + */ + private Boolean materialDescIsUpgrade; + + /** + * 物料类别 + */ + private String materialCategoryCode; + + /** + * 物料类别全路径名称 + */ + private String materialCategoryCodePathName; + + /** + * 物料图号 + */ + private String drawingNo; + + /** + * 图号版本号 + */ + private String drawingNoVer; + + /** + * 物料名称 + */ + private String materialName; + + /** + * 物料材质 + */ + private String materialTexture; + + /** + * 物料规格 + */ + private String materialSpecifications; + + /** + * 规则是否已维护; false 未维护;true 已维护 + */ + private Boolean isStandardMaintained; + + /** + * 创建方式 0 人工操作;1 系统同步 + */ + private Integer createdType; + + /** + * 创建人ID + */ + private Long createBy; + + /** + * 创建时间 + */ + private LocalDateTime createTime; + + /** + * 创建人名称 + */ + private String createByName; + + /** + * 修改时间 + */ + private LocalDateTime updateTime; + + /** + * 修改人ID + */ + private Long updateBy; + + /** + * 修改人名称 + */ + private String updateByName; +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptMaterialMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptMaterialMapper.java new file mode 100644 index 00000000..97d6242f --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsExemptMaterialMapper.java @@ -0,0 +1,32 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialSearchQO; +import com.nflg.wms.common.pojo.vo.QmsExemptMaterialVO; +import com.nflg.wms.repository.entity.QmsExemptMaterial; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 免检物料 Mapper 接口 + */ +public interface QmsExemptMaterialMapper extends BaseMapper { + + /** + * 分页查询免检物料列表(JOIN 供应商表和质检物料表) + */ + IPage search(@Param("request") QmsExemptMaterialSearchQO request, Page page); + + /** + * 按供应商ID查询关联的免检物料明细 + */ + List detailBySupplier(@Param("supplierId") Long supplierId); + + /** + * 按物料编号查询关联的供应商免检明细 + */ + List detailByMaterial(@Param("materialNo") String materialNo); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQcMaterialMapper.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQcMaterialMapper.java new file mode 100644 index 00000000..2f7b7d98 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/mapper/QmsQcMaterialMapper.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.nflg.wms.repository.entity.QmsQcMaterial; + +/** + * 质检物料 Mapper 接口 + */ +public interface QmsQcMaterialMapper extends BaseMapper { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptMaterialService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptMaterialService.java new file mode 100644 index 00000000..6a5c41b9 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsExemptMaterialService.java @@ -0,0 +1,47 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialSaveQO; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialSearchQO; +import com.nflg.wms.common.pojo.vo.QmsExemptMaterialVO; +import com.nflg.wms.repository.entity.QmsExemptMaterial; + +import java.util.List; + +/** + * 免检物料 服务类 + */ +public interface IQmsExemptMaterialService extends IService { + + /** + * 分页查询免检物料列表 + */ + IPage search(QmsExemptMaterialSearchQO request); + + /** + * 保存免检物料(新增/编辑) + */ + void saveExemptMaterial(QmsExemptMaterialSaveQO request); + + /** + * 按供应商ID查询免检物料明细 + */ + List detailBySupplier(Long supplierId); + + /** + * 按物料编号查询免检物料明细 + */ + List detailByMaterial(String materialNo); + + /** + * 启用/禁用切换 + */ + void toggleEnable(Long id, Boolean enableStatus); + + /** + * 审核免检物料 + */ + void audit(QmsExemptMaterialAuditQO request); +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQcMaterialService.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQcMaterialService.java new file mode 100644 index 00000000..7879e554 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/IQmsQcMaterialService.java @@ -0,0 +1,10 @@ +package com.nflg.wms.repository.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.nflg.wms.repository.entity.QmsQcMaterial; + +/** + * 质检物料 服务类 + */ +public interface IQmsQcMaterialService extends IService { +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptMaterialServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptMaterialServiceImpl.java new file mode 100644 index 00000000..cf1c7fb2 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsExemptMaterialServiceImpl.java @@ -0,0 +1,169 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.common.constant.STATE; +import com.nflg.wms.common.exception.NflgException; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialAuditQO; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialSaveQO; +import com.nflg.wms.common.pojo.qo.QmsExemptMaterialSearchQO; +import com.nflg.wms.common.pojo.vo.QmsExemptMaterialVO; +import com.nflg.wms.common.util.StringUtil; +import com.nflg.wms.common.util.UserUtil; +import com.nflg.wms.repository.entity.QmsExemptMaterial; +import com.nflg.wms.repository.mapper.QmsExemptMaterialMapper; +import com.nflg.wms.repository.service.IQmsExemptMaterialService; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +/** + * 免检物料 服务实现类 + */ +@Service +public class QmsExemptMaterialServiceImpl extends ServiceImpl + implements IQmsExemptMaterialService { + + private static final DateTimeFormatter DATE_FMT = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + + @Override + public IPage search(QmsExemptMaterialSearchQO request) { + return baseMapper.search(request, new Page<>(request.getPage(), request.getPageSize())); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void saveExemptMaterial(QmsExemptMaterialSaveQO request) { + if (request.getItems() == null || request.getItems().isEmpty()) { + throw new NflgException(STATE.BusinessError, "明细列表不能为空"); + } + + Long userId = UserUtil.getUserId(); + String userName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); + + List toSave = new ArrayList<>(); + + for (QmsExemptMaterialSaveQO.Item item : request.getItems()) { + // 确定 supplierId 和 materialNo + Long supplierId = item.getSupplierId() != null ? item.getSupplierId() : request.getSupplierId(); + String materialNo = item.getMaterialNo() != null ? item.getMaterialNo() : request.getMaterialNo(); + + if (supplierId == null || materialNo == null || materialNo.isEmpty()) { + throw new NflgException(STATE.BusinessError, "供应商和物料编号不能为空"); + } + + // 唯一性校验:(material_no + supplier_id) + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(QmsExemptMaterial::getMaterialNo, materialNo) + .eq(QmsExemptMaterial::getSupplierId, supplierId); + if (item.getId() != null) { + wrapper.ne(QmsExemptMaterial::getId, item.getId()); + } + long count = this.count(wrapper); + if (count > 0) { + throw new NflgException(STATE.BusinessError, "物料编号[" + materialNo + "]与该供应商的免检记录已存在"); + } + + QmsExemptMaterial entity; + if (item.getId() != null) { + entity = this.getById(item.getId()); + if (entity == null) { + throw new NflgException(STATE.BusinessError, "记录不存在,ID:" + item.getId()); + } + entity.setUpdateBy(userId); + entity.setUpdateByName(userName); + entity.setUpdateTime(now); + } else { + entity = new QmsExemptMaterial(); + entity.setSupplierId(supplierId); + entity.setMaterialNo(materialNo); + entity.setAuditStatus(0); + entity.setEnableStatus(true); + entity.setCreateBy(userId); + entity.setCreateByName(userName); + entity.setCreateTime(now); + entity.setUpdateBy(userId); + entity.setUpdateByName(userName); + entity.setUpdateTime(now); + } + + entity.setExemptMode(item.getExemptMode()); + if (item.getValidStartDate() != null && !item.getValidStartDate().isEmpty()) { + entity.setValidStartDate(parseDate(item.getValidStartDate())); + } else { + entity.setValidStartDate(null); + } + if (item.getValidEndDate() != null && !item.getValidEndDate().isEmpty()) { + entity.setValidEndDate(parseDate(item.getValidEndDate())); + } else { + entity.setValidEndDate(null); + } + + toSave.add(entity); + } + + this.saveOrUpdateBatch(toSave); + } + + @Override + public List detailBySupplier(Long supplierId) { + return baseMapper.detailBySupplier(supplierId); + } + + @Override + public List detailByMaterial(String materialNo) { + return baseMapper.detailByMaterial(materialNo); + } + + @Override + public void toggleEnable(Long id, Boolean enableStatus) { + QmsExemptMaterial entity = this.getById(id); + if (entity == null) { + throw new NflgException(STATE.BusinessError, "记录不存在"); + } + entity.setEnableStatus(enableStatus); + entity.setUpdateBy(UserUtil.getUserId()); + entity.setUpdateByName(UserUtil.getUserName()); + entity.setUpdateTime(LocalDateTime.now()); + this.updateById(entity); + } + + @Override + public void audit(QmsExemptMaterialAuditQO request) { + QmsExemptMaterial entity = this.getById(request.getId()); + if (entity == null) { + throw new NflgException(STATE.BusinessError, "记录不存在"); + } + if (Boolean.TRUE.equals(request.getPass())) { + entity.setAuditStatus(1); + entity.setRejectReason(""); + } else { + if (request.getRejectReason() == null || request.getRejectReason().trim().isEmpty()) { + throw new NflgException(STATE.BusinessError, "驳回时必须填写驳回原因"); + } + entity.setAuditStatus(2); + entity.setRejectReason(request.getRejectReason()); + } + entity.setAuditorId(UserUtil.getUserId()); + entity.setAuditorName(UserUtil.getUserName()); + entity.setAuditTime(LocalDateTime.now()); + entity.setUpdateBy(UserUtil.getUserId()); + entity.setUpdateByName(UserUtil.getUserName()); + entity.setUpdateTime(LocalDateTime.now()); + this.updateById(entity); + } + + private LocalDateTime parseDate(String dateStr) { + if (dateStr.length() == 10) { + dateStr = dateStr + " 00:00:00"; + } + return LocalDateTime.parse(dateStr, DATE_FMT); + } +} diff --git a/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQcMaterialServiceImpl.java b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQcMaterialServiceImpl.java new file mode 100644 index 00000000..36285e94 --- /dev/null +++ b/nflg-wms-repository/src/main/java/com/nflg/wms/repository/service/impl/QmsQcMaterialServiceImpl.java @@ -0,0 +1,15 @@ +package com.nflg.wms.repository.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.nflg.wms.repository.entity.QmsQcMaterial; +import com.nflg.wms.repository.mapper.QmsQcMaterialMapper; +import com.nflg.wms.repository.service.IQmsQcMaterialService; +import org.springframework.stereotype.Service; + +/** + * 质检物料 服务实现类 + */ +@Service +public class QmsQcMaterialServiceImpl extends ServiceImpl + implements IQmsQcMaterialService { +} diff --git a/nflg-wms-repository/src/main/resources/mapper/QmsExemptMaterialMapper.xml b/nflg-wms-repository/src/main/resources/mapper/QmsExemptMaterialMapper.xml new file mode 100644 index 00000000..4711448c --- /dev/null +++ b/nflg-wms-repository/src/main/resources/mapper/QmsExemptMaterialMapper.xml @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index c20f9a9a..54b76f46 100644 --- a/pom.xml +++ b/pom.xml @@ -33,6 +33,7 @@ UTF-8 UTF-8 UTF-8 + true 1.18.38 2023.0.1 2023.0.1.0 @@ -240,10 +241,7 @@ maven-surefire-plugin 3.5.2 - - **/**.java - - org.junit.vintage + true