feat(qms): 新增及编辑检验标准功能,实现检测项及内容管理
- 在QmsInspectionStandardController新增新增(add)和编辑(edit)接口 - 新增QmsInspectionStandardControllerService实现检验标准业务逻辑 - 实现检验标准分页查询、详情查询及启用/禁用功能 - 实现新增检验标准及编辑检验标准,并包含检测项和检测项内容的增删改逻辑 - 实现检测项和检测项内容的新增、更新和删除,保证数据一致性和事务管理 - 添加异常处理,防止不存在的检验标准、检测项或检测项内容操作 - 新增暂存功能,允许暂存检验标准的检测项及内容数据
This commit is contained in:
parent
72aef97677
commit
793100f124
|
|
@ -5,6 +5,8 @@ import com.nflg.wms.common.pojo.ApiResult;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
import com.nflg.wms.common.pojo.PageData;
|
||||||
import com.nflg.wms.common.pojo.qo.EnableQO;
|
import com.nflg.wms.common.pojo.qo.EnableQO;
|
||||||
import com.nflg.wms.common.pojo.qo.IdsQO;
|
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.QmsInspectionStandardSaveQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO;
|
import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO;
|
||||||
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO;
|
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO;
|
||||||
|
|
@ -40,6 +42,23 @@ public class QmsInspectionStandardController extends BaseController {
|
||||||
return ApiResult.success(inspectionStandardControllerService.search(request));
|
return ApiResult.success(inspectionStandardControllerService.search(request));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 新增检验标准
|
||||||
|
*/
|
||||||
|
@PostMapping("add")
|
||||||
|
public ApiResult<Long> add(@Valid @RequestBody QmsInspectionStandardAddQO request) {
|
||||||
|
return ApiResult.success(inspectionStandardControllerService.add(request));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 编辑检验标准
|
||||||
|
*/
|
||||||
|
@PostMapping("edit")
|
||||||
|
public ApiResult<Void> edit(@Valid @RequestBody QmsInspectionStandardEditQO request) {
|
||||||
|
inspectionStandardControllerService.edit(request);
|
||||||
|
return ApiResult.success();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量发布检验标准
|
* 批量发布检验标准
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
import com.nflg.wms.common.exception.NflgException;
|
import com.nflg.wms.common.exception.NflgException;
|
||||||
import com.nflg.wms.common.pojo.PageData;
|
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.QmsInspectionStandardSaveQO;
|
||||||
import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO;
|
import com.nflg.wms.common.pojo.qo.QmsInspectionStandardSearchQO;
|
||||||
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO;
|
import com.nflg.wms.common.pojo.vo.QmsInspectionStandardDetailVO;
|
||||||
|
|
@ -190,6 +192,150 @@ public class QmsInspectionStandardControllerService {
|
||||||
return vo;
|
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<QmsInspectionStandardSaveQO.InspectionStandardItemQO> items,
|
||||||
|
Long userId, String userName, LocalDateTime now) {
|
||||||
|
if (items == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取该检验标准下所有现有的检测项ID
|
||||||
|
List<Long> existingItemIds = inspectionStandardItemService.lambdaQuery()
|
||||||
|
.eq(QmsInspectionStandardItem::getInspectionStandardId, inspectionStandardId)
|
||||||
|
.list()
|
||||||
|
.stream()
|
||||||
|
.map(QmsInspectionStandardItem::getId)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 处理传入的检测项
|
||||||
|
List<Long> 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<Long> 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 暂存请求参数
|
* @param qo 暂存请求参数
|
||||||
|
|
@ -211,59 +357,8 @@ public class QmsInspectionStandardControllerService {
|
||||||
String userName = UserUtil.getUserName();
|
String userName = UserUtil.getUserName();
|
||||||
LocalDateTime now = LocalDateTime.now();
|
LocalDateTime now = LocalDateTime.now();
|
||||||
|
|
||||||
// 2. 获取该检验标准下所有现有的检测项ID
|
// 2. 处理检测项列表
|
||||||
List<Long> existingItemIds = inspectionStandardItemService.lambdaQuery()
|
processItems(qo.getInspectionStandardId(), qo.getItems(), userId, userName, now);
|
||||||
.eq(QmsInspectionStandardItem::getInspectionStandardId, qo.getInspectionStandardId())
|
|
||||||
.list()
|
|
||||||
.stream()
|
|
||||||
.map(QmsInspectionStandardItem::getId)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
// 3. 处理传入的检测项
|
|
||||||
List<Long> 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<Long> itemsToDelete = existingItemIds.stream()
|
|
||||||
.filter(id -> !newItemIds.contains(id))
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
if (!itemsToDelete.isEmpty()) {
|
|
||||||
// 先删除检测项内容
|
|
||||||
inspectionStandardItemContentService.lambdaUpdate()
|
|
||||||
.in(QmsInspectionStandardItemContent::getInspectionStandardItemId, itemsToDelete)
|
|
||||||
.remove();
|
|
||||||
|
|
||||||
// 再删除检测项
|
|
||||||
inspectionStandardItemService.removeByIds(itemsToDelete);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,10 @@ public class QmsSamplingPlanControllerService {
|
||||||
if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) {
|
if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) {
|
||||||
List<QmsSamplingStrictnessTransferRule> rules = new ArrayList<>();
|
List<QmsSamplingStrictnessTransferRule> rules = new ArrayList<>();
|
||||||
for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) {
|
for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) {
|
||||||
|
// 已启用的规则,连续质检批次数量必填
|
||||||
|
if (Boolean.TRUE.equals(qo.getIsEnabled())) {
|
||||||
|
VUtil.trueThrowBusinessError(qo.getContinuousBatchCount() == null).throwMessage("已启用的严格性转移规则,连续质检批次数量不能为空");
|
||||||
|
}
|
||||||
QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule()
|
QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule()
|
||||||
.setSamplingPlanId(planId)
|
.setSamplingPlanId(planId)
|
||||||
.setRuleType(qo.getRuleType())
|
.setRuleType(qo.getRuleType())
|
||||||
|
|
@ -229,6 +233,10 @@ public class QmsSamplingPlanControllerService {
|
||||||
if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) {
|
if (CollectionUtil.isNotEmpty(request.getStrictnessTransferRules())) {
|
||||||
List<QmsSamplingStrictnessTransferRule> rules = new ArrayList<>();
|
List<QmsSamplingStrictnessTransferRule> rules = new ArrayList<>();
|
||||||
for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) {
|
for (QmsSamplingPlanAddQO.StrictnessTransferRuleQO qo : request.getStrictnessTransferRules()) {
|
||||||
|
// 已启用的规则,连续质检批次数量必填
|
||||||
|
if (Boolean.TRUE.equals(qo.getIsEnabled())) {
|
||||||
|
VUtil.trueThrowBusinessError(qo.getContinuousBatchCount() == null).throwMessage("已启用的严格性转移规则,连续质检批次数量不能为空");
|
||||||
|
}
|
||||||
QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule()
|
QmsSamplingStrictnessTransferRule entity = new QmsSamplingStrictnessTransferRule()
|
||||||
.setSamplingPlanId(planId)
|
.setSamplingPlanId(planId)
|
||||||
.setRuleType(qo.getRuleType())
|
.setRuleType(qo.getRuleType())
|
||||||
|
|
|
||||||
|
|
@ -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<QmsInspectionStandardSaveQO.InspectionStandardItemQO> items;
|
||||||
|
}
|
||||||
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
@ -93,7 +93,6 @@ public class QmsSamplingPlanAddQO {
|
||||||
/**
|
/**
|
||||||
* 连续质检批次数量
|
* 连续质检批次数量
|
||||||
*/
|
*/
|
||||||
@NotNull(message = "连续质检批次数量不能为空")
|
|
||||||
private Integer continuousBatchCount;
|
private Integer continuousBatchCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue