diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java index 2bb9d743..6685139a 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/controller/QmsInspectionStandardController.java @@ -5,6 +5,8 @@ import com.nflg.wms.common.pojo.ApiResult; import com.nflg.wms.common.pojo.PageData; import com.nflg.wms.common.pojo.qo.EnableQO; import com.nflg.wms.common.pojo.qo.IdsQO; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardAddQO; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardEditQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSaveQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO; import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO; @@ -40,6 +42,23 @@ public class QmsInspectionStandardController extends BaseController { return ApiResult.success(inspectionStandardControllerService.search(request)); } + /** + * 新增检验标准 + */ + @PostMapping("add") + public ApiResult add(@Valid @RequestBody QmsInspectionStandardAddQO request) { + return ApiResult.success(inspectionStandardControllerService.add(request)); + } + + /** + * 编辑检验标准 + */ + @PostMapping("edit") + public ApiResult edit(@Valid @RequestBody QmsInspectionStandardEditQO request) { + inspectionStandardControllerService.edit(request); + return ApiResult.success(); + } + /** * 批量发布检验标准 */ diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java index 3d50df76..6033a0cb 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsInspectionStandardControllerService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.pojo.PageData; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardAddQO; +import com.nflg.wms.common.pojo.qo.QmsInspectionStandardEditQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSaveQO; import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO; import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO; @@ -190,6 +192,150 @@ public class QmsInspectionStandardControllerService { return vo; } + /** + * 新增检验标准(包含检测项列表) + * @param qo 新增请求参数 + * @return 新增的检验标准ID + */ + @Transactional(rollbackFor = Exception.class) + public Long add(QmsInspectionStandardAddQO qo) { + Long userId = UserUtil.getUserId(); + String userName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); + + QmsInspectionStandard standard = new QmsInspectionStandard(); + standard.setMaterialId(qo.getMaterialId()); + standard.setInspectionTaskItemId(qo.getInspectionTaskItemId()); + standard.setDrawingUrl(qo.getDrawingUrl()); + standard.setVersionNo(qo.getVersionNo()); + standard.setPackagingMethodId(qo.getPackagingMethodId()); + standard.setInspectionCycle(qo.getInspectionCycle()); + // 默认值 + standard.setIsEnabled(true); + standard.setPublishStatus((short) 0); + // 审计字段 + standard.setCreateUserId(userId); + standard.setCreateUserName(userName); + standard.setCreateTime(now); + standard.setUpdateUserId(userId); + standard.setUpdateUserName(userName); + standard.setUpdateTime(now); + + inspectionStandardService.save(standard); + + // 处理检测项列表 + processItems(standard.getId(), qo.getItems(), userId, userName, now); + + return standard.getId(); + } + + /** + * 编辑检验标准(包含检测项列表) + * @param qo 编辑请求参数 + */ + @Transactional(rollbackFor = Exception.class) + public void edit(QmsInspectionStandardEditQO qo) { + // 1. 校验检验标准是否存在 + QmsInspectionStandard standard = inspectionStandardService.getById(qo.getId()); + if (standard == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检验标准不存在"); + } + + // 2. 已发布的标准不允许修改 + if (standard.getPublishStatus() != null && standard.getPublishStatus() == 1) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "已发布的检验标准不允许修改"); + } + + Long userId = UserUtil.getUserId(); + String userName = UserUtil.getUserName(); + LocalDateTime now = LocalDateTime.now(); + + // 3. 更新字段 + standard.setMaterialId(qo.getMaterialId()); + standard.setInspectionTaskItemId(qo.getInspectionTaskItemId()); + standard.setDrawingUrl(qo.getDrawingUrl()); + standard.setVersionNo(qo.getVersionNo()); + standard.setPackagingMethodId(qo.getPackagingMethodId()); + standard.setInspectionCycle(qo.getInspectionCycle()); + // 审计字段 + standard.setUpdateUserId(userId); + standard.setUpdateUserName(userName); + standard.setUpdateTime(now); + + inspectionStandardService.updateById(standard); + + // 4. 处理检测项列表 + processItems(qo.getId(), qo.getItems(), userId, userName, now); + } + + /** + * 处理检测项列表(新增、更新、删除) + * @param inspectionStandardId 检验标准ID + * @param items 检测项列表 + * @param userId 用户ID + * @param userName 用户名 + * @param now 当前时间 + */ + private void processItems(Long inspectionStandardId, + List items, + Long userId, String userName, LocalDateTime now) { + if (items == null) { + return; + } + + // 获取该检验标准下所有现有的检测项ID + List existingItemIds = inspectionStandardItemService.lambdaQuery() + .eq(QmsInspectionStandardItem::getInspectionStandardId, inspectionStandardId) + .list() + .stream() + .map(QmsInspectionStandardItem::getId) + .collect(Collectors.toList()); + + // 处理传入的检测项 + List newItemIds = new ArrayList<>(); + for (QmsInspectionStandardSaveQO.InspectionStandardItemQO itemQO : items) { + QmsInspectionStandardItem item; + + if (itemQO.getId() != null) { + // 更新现有检测项 + item = inspectionStandardItemService.getById(itemQO.getId()); + if (item == null) { + throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项不存在:" + itemQO.getId()); + } + + // 更新字段 + updateItemFields(item, itemQO, userId, userName, now); + inspectionStandardItemService.updateById(item); + } else { + // 新增检测项 + item = new QmsInspectionStandardItem() + .setInspectionStandardId(inspectionStandardId); + updateItemFields(item, itemQO, userId, userName, now); + inspectionStandardItemService.save(item); + } + + newItemIds.add(item.getId()); + + // 处理检测项内容 + processItemContents(item.getId(), itemQO.getContents(), userId, userName, now); + } + + // 删除不在传入列表中的检测项(及其内容) + List itemsToDelete = existingItemIds.stream() + .filter(id -> !newItemIds.contains(id)) + .collect(Collectors.toList()); + + if (!itemsToDelete.isEmpty()) { + // 先删除检测项内容 + inspectionStandardItemContentService.lambdaUpdate() + .in(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemsToDelete) + .remove(); + + // 再删除检测项 + inspectionStandardItemService.removeByIds(itemsToDelete); + } + } + /** * 暂存检验标准(检测项和检测项内容) * @param qo 暂存请求参数 @@ -211,59 +357,8 @@ public class QmsInspectionStandardControllerService { String userName = UserUtil.getUserName(); LocalDateTime now = LocalDateTime.now(); - // 2. 获取该检验标准下所有现有的检测项ID - List existingItemIds = inspectionStandardItemService.lambdaQuery() - .eq(QmsInspectionStandardItem::getInspectionStandardId, qo.getInspectionStandardId()) - .list() - .stream() - .map(QmsInspectionStandardItem::getId) - .collect(Collectors.toList()); - - // 3. 处理传入的检测项 - List newItemIds = new ArrayList<>(); - if (qo.getItems() != null && !qo.getItems().isEmpty()) { - for (QmsInspectionStandardSaveQO.InspectionStandardItemQO itemQO : qo.getItems()) { - QmsInspectionStandardItem item; - - if (itemQO.getId() != null) { - // 更新现有检测项 - item = inspectionStandardItemService.getById(itemQO.getId()); - if (item == null) { - throw new NflgException(com.nflg.wms.common.constant.STATE.BusinessError, "检测项不存在:" + itemQO.getId()); - } - - // 更新字段 - updateItemFields(item, itemQO, userId, userName, now); - inspectionStandardItemService.updateById(item); - } else { - // 新增检测项 - item = new QmsInspectionStandardItem() - .setInspectionStandardId(qo.getInspectionStandardId()); - updateItemFields(item, itemQO, userId, userName, now); - inspectionStandardItemService.save(item); - } - - newItemIds.add(item.getId()); - - // 4. 处理检测项内容 - processItemContents(item.getId(), itemQO.getContents(), userId, userName, now); - } - } - - // 5. 删除不在传入列表中的检测项(及其内容) - List itemsToDelete = existingItemIds.stream() - .filter(id -> !newItemIds.contains(id)) - .collect(Collectors.toList()); - - if (!itemsToDelete.isEmpty()) { - // 先删除检测项内容 - inspectionStandardItemContentService.lambdaUpdate() - .in(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemsToDelete) - .remove(); - - // 再删除检测项 - inspectionStandardItemService.removeByIds(itemsToDelete); - } + // 2. 处理检测项列表 + processItems(qo.getInspectionStandardId(), qo.getItems(), userId, userName, now); } /** diff --git a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsSamplingPlanControllerService.java b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsSamplingPlanControllerService.java index a05e37bf..3c4fb411 100644 --- a/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsSamplingPlanControllerService.java +++ b/nflg-qms-admin/src/main/java/com/nflg/qms/admin/service/QmsSamplingPlanControllerService.java @@ -103,6 +103,10 @@ public class QmsSamplingPlanControllerService { if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) { List rules = new ArrayList<>(); for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) { + // 已启用的规则,连续质检批次数量必填 + if (Boolean.TRUE.equals(qo.getIsEnabled())) { + VUtil.trueThrowBusinessError(qo.getContinuousBatchCount() == null).throwMessage("已启用的严格性转移规则,连续质检批次数量不能为空"); + } QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule() .setSamplingPlanId(planId) .setRuleType(qo.getRuleType()) @@ -229,6 +233,10 @@ public class QmsSamplingPlanControllerService { if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) { List rules = new ArrayList<>(); for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) { + // 已启用的规则,连续质检批次数量必填 + if (Boolean.TRUE.equals(qo.getIsEnabled())) { + VUtil.trueThrowBusinessError(qo.getContinuousBatchCount() == null).throwMessage("已启用的严格性转移规则,连续质检批次数量不能为空"); + } QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule() .setSamplingPlanId(planId) .setRuleType(qo.getRuleType()) diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardAddQO.java new file mode 100644 index 00000000..f79f5144 --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardAddQO.java @@ -0,0 +1,51 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; + +/** + * 检验标准新增参数 + */ +@Data +public class QmsInspectionStandardAddQO { + + /** + * 物料ID + */ + @NotNull(message = "物料ID不能为空") + private Long materialId; + + /** + * 检验任务项ID + */ + private Long inspectionTaskItemId; + + /** + * 图纸URL + */ + private String drawingUrl; + + /** + * 版本号 + */ + private String versionNo; + + /** + * 包装方式ID + */ + private Long packagingMethodId; + + /** + * 检验周期 + */ + private Integer inspectionCycle; + + /** + * 检测项列表 + */ + @Valid + private List items; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardEditQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardEditQO.java new file mode 100644 index 00000000..9b6a3cce --- /dev/null +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsInspectionStandardEditQO.java @@ -0,0 +1,19 @@ +package com.nflg.wms.common.pojo.qo; + +import jakarta.validation.constraints.NotNull; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 检验标准编辑参数 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class QmsInspectionStandardEditQO extends QmsInspectionStandardAddQO { + + /** + * 检验标准ID + */ + @NotNull(message = "检验标准ID不能为空") + private Long id; +} diff --git a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsSamplingPlanAddQO.java b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsSamplingPlanAddQO.java index a277514c..73a4253f 100644 --- a/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsSamplingPlanAddQO.java +++ b/nflg-wms-common/src/main/java/com/nflg/wms/common/pojo/qo/QmsSamplingPlanAddQO.java @@ -93,7 +93,6 @@ public class QmsSamplingPlanAddQO { /** * 连续质检批次数量 */ - @NotNull(message = "连续质检批次数量不能为空") private Integer continuousBatchCount; /**