fix(inspection-task): 优化来料检验任务提交及暂存逻辑

- 优化提交检验接口,增加任务存在性和完成状态校验
- 移除暂存检验结果接口及相关代码,简化业务流程
- 在提交检验时设置和更新检验开始时间及状态
- 校验质检人员时增加空格格式调整,提升代码规范性
- 调整相关请求参数,删除无用字段,只保留检验结果及开始时间校验
- 在提交样本检验时校验任务状态,防止重复完成操作
This commit is contained in:
曹鹏飞 2026-04-29 15:09:34 +08:00
parent 1a933353a3
commit 6362d6ed7e
4 changed files with 76 additions and 72 deletions

View File

@ -112,14 +112,14 @@ public class QmsIncomingInspectionTaskController extends BaseController {
return ApiResult.success(); return ApiResult.success();
} }
/** // /**
* 暂存检验结果 // * 暂存检验结果
*/ // */
@PostMapping("pad/staging") // @PostMapping("pad/staging")
public ApiResult<Void> staging(@Valid @RequestBody QmsIncomingInspectionTaskSubmitQO request){ // public ApiResult<Void> staging(@Valid @RequestBody QmsIncomingInspectionTaskSubmitQO request){
incomingInspectionTaskControllerService.staging(request); // incomingInspectionTaskControllerService.staging(request);
return ApiResult.success(); // return ApiResult.success();
} // }
/** /**
* 提交检验结果 * 提交检验结果

View File

@ -560,7 +560,7 @@ public class IncomingInspectionTaskControllerService {
// 通过当前登录用户的 userId 查询对应的质检人员记录 // 通过当前登录用户的 userId 查询对应的质检人员记录
QmsQualityInspector inspector = qualityInspectorService.lambdaQuery() QmsQualityInspector inspector = qualityInspectorService.lambdaQuery()
.eq(QmsQualityInspector::getUserId, userId) .eq(QmsQualityInspector::getUserId, userId)
.eq(QmsQualityInspector::getInspectionType,1) .eq(QmsQualityInspector::getInspectionType, 1)
.last("LIMIT 1") .last("LIMIT 1")
.one(); .one();
VUtil.trueThrowBusinessError(Objects.isNull(inspector)) VUtil.trueThrowBusinessError(Objects.isNull(inspector))
@ -577,7 +577,7 @@ public class IncomingInspectionTaskControllerService {
// 通过当前登录用户的 userId 查询对应的质检人员记录 // 通过当前登录用户的 userId 查询对应的质检人员记录
QmsQualityInspector inspector = qualityInspectorService.lambdaQuery() QmsQualityInspector inspector = qualityInspectorService.lambdaQuery()
.eq(QmsQualityInspector::getUserId, userId) .eq(QmsQualityInspector::getUserId, userId)
.eq(QmsQualityInspector::getInspectionType,1) .eq(QmsQualityInspector::getInspectionType, 1)
.last("LIMIT 1") .last("LIMIT 1")
.one(); .one();
VUtil.trueThrowBusinessError(Objects.isNull(inspector)) VUtil.trueThrowBusinessError(Objects.isNull(inspector))
@ -759,7 +759,7 @@ public class IncomingInspectionTaskControllerService {
VUtil.trueThrowBusinessError(count > task.getDetectionQty()).throwMessage("样本数量不能大于总数量"); VUtil.trueThrowBusinessError(count > task.getDetectionQty()).throwMessage("样本数量不能大于总数量");
return new QmsIncomingInspectionTaskCheckDetailVO() return new QmsIncomingInspectionTaskCheckDetailVO()
.setItems(datas) .setItems(datas)
.setCount(Math.min(task.getDetectionQty() - count,request.getNum())) .setCount(Math.min(task.getDetectionQty() - count, request.getNum()))
.setPdfDrawings( .setPdfDrawings(
inspectionStandardItemService.lambdaQuery() inspectionStandardItemService.lambdaQuery()
.select(QmsInspectionStandardItem::getPdfDrawing) .select(QmsInspectionStandardItem::getPdfDrawing)
@ -806,6 +806,9 @@ public class IncomingInspectionTaskControllerService {
@Transactional @Transactional
public void submitCheckItem(QmsIncomingInspectionTaskTodoCheckSubmitQO request) { public void submitCheckItem(QmsIncomingInspectionTaskTodoCheckSubmitQO request) {
QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
VUtil.trueThrowBusinessError(task.getInspectionStatus() == 2).throwMessage("该任务已完成");
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
Long userId = UserUtil.getUserId(); Long userId = UserUtil.getUserId();
String userName = UserUtil.getUserName(); String userName = UserUtil.getUserName();
@ -886,20 +889,6 @@ public class IncomingInspectionTaskControllerService {
if (!updateDatas.isEmpty()) { if (!updateDatas.isEmpty()) {
incomingInspectionTaskRecordItemDataService.updateBatchById(updateDatas); incomingInspectionTaskRecordItemDataService.updateBatchById(updateDatas);
} }
}
/**
* 暂存检验结果
* 1. 根据任务ID查询所有样本记录
* 2. 计算合格数量和不合格数量
* 3. 更新任务的合格数量不合格数量检验结果
* 4. 如果检验开始时间为空则更新检验开始时间
*/
@Transactional
public void staging(QmsIncomingInspectionTaskSubmitQO request) {
QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
// 查询该任务下所有检验记录 // 查询该任务下所有检验记录
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery() List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
.eq(QmsIncomingInspectionTaskRecord::getTaskId, request.getTaskId()) .eq(QmsIncomingInspectionTaskRecord::getTaskId, request.getTaskId())
@ -909,51 +898,72 @@ public class IncomingInspectionTaskControllerService {
int qualifiedQty = records.stream() int qualifiedQty = records.stream()
.map(QmsIncomingInspectionTaskRecord::getQualifiedQty) .map(QmsIncomingInspectionTaskRecord::getQualifiedQty)
.reduce(0, Integer::sum); .reduce(0, Integer::sum);
task.setQualifiedQty(qualifiedQty);
int unqualifiedQty = records.stream() int unqualifiedQty = records.stream()
.map(QmsIncomingInspectionTaskRecord::getUnqualifiedQty) .map(QmsIncomingInspectionTaskRecord::getUnqualifiedQty)
.reduce(0, Integer::sum); .reduce(0, Integer::sum);
task.setUnqualifiedQty(unqualifiedQty);
Long userId = UserUtil.getUserId();
String userName = UserUtil.getUserName();
LocalDateTime now = LocalDateTime.now();
// 构建更新对象
var updateWrapper = incomingInspectionTaskService.lambdaUpdate()
.eq(QmsIncomingInspectionTask::getId, request.getTaskId())
.ne(QmsIncomingInspectionTask::getInspectionStatus, 2)
.set(QmsIncomingInspectionTask::getQualifiedQty, qualifiedQty)
.set(QmsIncomingInspectionTask::getUnqualifiedQty, unqualifiedQty)
.set(QmsIncomingInspectionTask::getInspectionResult, request.getQualified())
.set(QmsIncomingInspectionTask::getUpdateUserId, userId)
.set(QmsIncomingInspectionTask::getUpdateUserName, userName)
.set(QmsIncomingInspectionTask::getUpdateTime, now);
// 如果检验开始时间为空则更新检验开始时间
if (Objects.isNull(task.getInspectionStartTime())) { if (Objects.isNull(task.getInspectionStartTime())) {
updateWrapper.set(QmsIncomingInspectionTask::getInspectionStartTime, request.getInspectionStartTime()); task.setInspectionStartTime(request.getInspectionStartTime());
updateWrapper.set(QmsIncomingInspectionTask::getInspectionStatus, 1); }
task.setInspectionStatus((short) 1);
incomingInspectionTaskService.updateById(task);
} }
updateWrapper.update(); // /**
} // * 暂存检验结果
// * 1. 根据任务ID查询所有样本记录
// * 2. 计算合格数量和不合格数量
// * 3. 更新任务的合格数量不合格数量检验结果
// * 4. 如果检验开始时间为空则更新检验开始时间
// */
// @Transactional
// public void staging(QmsIncomingInspectionTaskSubmitQO request) {
// QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId());
// VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
//
// // 查询该任务下所有检验记录
// List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
// .eq(QmsIncomingInspectionTaskRecord::getTaskId, request.getTaskId())
// .list();
//
// // 计算合格数量和不合格数量
// int qualifiedQty = records.stream()
// .map(QmsIncomingInspectionTaskRecord::getQualifiedQty)
// .reduce(0, Integer::sum);
// int unqualifiedQty = records.stream()
// .map(QmsIncomingInspectionTaskRecord::getUnqualifiedQty)
// .reduce(0, Integer::sum);
//
// Long userId = UserUtil.getUserId();
// String userName = UserUtil.getUserName();
// LocalDateTime now = LocalDateTime.now();
//
// // 构建更新对象
// var updateWrapper = incomingInspectionTaskService.lambdaUpdate()
// .eq(QmsIncomingInspectionTask::getId, request.getTaskId())
// .ne(QmsIncomingInspectionTask::getInspectionStatus, 2)
// .set(QmsIncomingInspectionTask::getQualifiedQty, qualifiedQty)
// .set(QmsIncomingInspectionTask::getUnqualifiedQty, unqualifiedQty)
// .set(QmsIncomingInspectionTask::getInspectionResult, request.getQualified())
// .set(QmsIncomingInspectionTask::getUpdateUserId, userId)
// .set(QmsIncomingInspectionTask::getUpdateUserName, userName)
// .set(QmsIncomingInspectionTask::getUpdateTime, now);
//
// // 如果检验开始时间为空则更新检验开始时间
// if (Objects.isNull(task.getInspectionStartTime())) {
// updateWrapper.set(QmsIncomingInspectionTask::getInspectionStartTime, request.getInspectionStartTime());
// updateWrapper.set(QmsIncomingInspectionTask::getInspectionStatus, 1);
// }
//
// updateWrapper.update();
// }
@Transactional @Transactional
public void submit(@Valid QmsIncomingInspectionTaskSubmitQO request) { public void submit(@Valid QmsIncomingInspectionTaskSubmitQO request) {
QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId()); QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(request.getTaskId());
VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在"); VUtil.trueThrowBusinessError(Objects.isNull(task)).throwMessage("任务不存在");
VUtil.trueThrowBusinessError(task.getInspectionStatus() == 2).throwMessage("该任务已完成");
// 查询该任务下所有检验记录
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
.eq(QmsIncomingInspectionTaskRecord::getTaskId, request.getTaskId())
.list();
// 计算合格数量和不合格数量
int qualifiedQty = records.stream()
.map(QmsIncomingInspectionTaskRecord::getQualifiedQty)
.reduce(0, Integer::sum);
int unqualifiedQty = records.stream()
.map(QmsIncomingInspectionTaskRecord::getUnqualifiedQty)
.reduce(0, Integer::sum);
Long userId = UserUtil.getUserId(); Long userId = UserUtil.getUserId();
String userName = UserUtil.getUserName(); String userName = UserUtil.getUserName();
@ -963,8 +973,6 @@ public class IncomingInspectionTaskControllerService {
var updateWrapper = incomingInspectionTaskService.lambdaUpdate() var updateWrapper = incomingInspectionTaskService.lambdaUpdate()
.eq(QmsIncomingInspectionTask::getId, request.getTaskId()) .eq(QmsIncomingInspectionTask::getId, request.getTaskId())
.ne(QmsIncomingInspectionTask::getInspectionStatus, 2) .ne(QmsIncomingInspectionTask::getInspectionStatus, 2)
.set(QmsIncomingInspectionTask::getQualifiedQty, qualifiedQty)
.set(QmsIncomingInspectionTask::getUnqualifiedQty, unqualifiedQty)
.set(QmsIncomingInspectionTask::getInspectionResult, request.getQualified()) .set(QmsIncomingInspectionTask::getInspectionResult, request.getQualified())
.set(QmsIncomingInspectionTask::getInspectionStatus, 2) .set(QmsIncomingInspectionTask::getInspectionStatus, 2)
.set(QmsIncomingInspectionTask::getInspectionFinishTime, LocalDateTime.now()) .set(QmsIncomingInspectionTask::getInspectionFinishTime, LocalDateTime.now())
@ -972,11 +980,6 @@ public class IncomingInspectionTaskControllerService {
.set(QmsIncomingInspectionTask::getUpdateUserName, userName) .set(QmsIncomingInspectionTask::getUpdateUserName, userName)
.set(QmsIncomingInspectionTask::getUpdateTime, now); .set(QmsIncomingInspectionTask::getUpdateTime, now);
// 如果检验开始时间为空则更新检验开始时间
if (Objects.isNull(task.getInspectionStartTime())) {
updateWrapper.set(QmsIncomingInspectionTask::getInspectionStartTime, request.getInspectionStartTime());
}
updateWrapper.update(); updateWrapper.update();
if (task.getInspectionResult()) { if (task.getInspectionResult()) {

View File

@ -19,10 +19,4 @@ public class QmsIncomingInspectionTaskSubmitQO {
*/ */
@NotNull(message = "检验结果不能为空") @NotNull(message = "检验结果不能为空")
private Boolean qualified; private Boolean qualified;
/**
* 检验开始时间
*/
@NotNull(message = "检验开始时间不能为空")
private LocalDateTime inspectionStartTime;
} }

View File

@ -5,6 +5,7 @@ import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
@Data @Data
@ -24,6 +25,12 @@ public class QmsIncomingInspectionTaskTodoCheckSubmitQO {
@NotNull(message = "物料唯一编号不能为空") @NotNull(message = "物料唯一编号不能为空")
private String materialUniqueNo; private String materialUniqueNo;
/**
* 检验开始时间
*/
@NotNull(message = "检验开始时间不能为空")
private LocalDateTime inspectionStartTime;
/** /**
* 样本数量 * 样本数量
*/ */