feat(incoming-inspection): 添加检测方式字段及来料检测工单审核功能

- 在QmsIncomingInspectionTask实体中新增检测方式字段testingMethodDictItemId
- 在IncomingInspectionTaskControllerService新增addNewIncomingInspectionTask方法,支持生成新检测任务
- 在来料检测任务创建时设置检测方式字段
- 调整生成任务号时的序列号参数
- 重命名工单审核请求对象为QmsIncomingInspectionIssueTicketAuditQO
- 新增来料检测工单审核接口IncomingInspectionAudit,替代原有审核接口
- 审核通过时触发新任务生成,其他状态时调用异步处理逻辑
- 优化部分代码格式和导入,提升代码规范性
This commit is contained in:
曹鹏飞 2026-05-09 11:41:03 +08:00
parent f3fbc2cc47
commit cf0c66e398
5 changed files with 62 additions and 15 deletions

View File

@ -62,12 +62,11 @@ public class QmsIssueTicketController extends BaseController {
} }
/** /**
* 审核质量问题工单 * 来料检测工单审核
* 更新审批状态审批意见审批人信息并根据审批结果更新工单状态
*/ */
@PostMapping("audit") @PostMapping("audit/incoming-inspection")
public ApiResult<Void> audit(@Valid @RequestBody QmsIssueTicketAuditQO request) { public ApiResult<Void> IncomingInspectionAudit(@Valid @RequestBody QmsIncomingInspectionIssueTicketAuditQO request) {
issueTicketControllerService.audit(request); issueTicketControllerService.incomingInspectionAudit(request);
return ApiResult.success(); return ApiResult.success();
} }

View File

@ -188,6 +188,7 @@ public class IncomingInspectionTaskControllerService {
.setTaskNo(taskNo) .setTaskNo(taskNo)
.setMaterialId(material.getId()) .setMaterialId(material.getId())
.setInspectionStandardId(standard.getId()) .setInspectionStandardId(standard.getId())
.setTestingMethodDictItemId(standard.getTestingMethodDictItemId())
.setSupplierCode(request.getSupplierCode()) .setSupplierCode(request.getSupplierCode())
.setSupplierName(request.getSupplierName()) .setSupplierName(request.getSupplierName())
.setDeliveryOrderNo(request.getDeliveryOrderNo()) .setDeliveryOrderNo(request.getDeliveryOrderNo())
@ -301,7 +302,7 @@ public class IncomingInspectionTaskControllerService {
} }
// 5. 生成检测单号 // 5. 生成检测单号
String taskNo = basdeSerialNumberControllerService.generateSerialNumber(35); String taskNo = basdeSerialNumberControllerService.generateSerialNumber(34);
// 6. 计算要求完成时间当前时间 + 检验周期 // 6. 计算要求完成时间当前时间 + 检验周期
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
@ -313,6 +314,7 @@ public class IncomingInspectionTaskControllerService {
.setTaskNo(taskNo) .setTaskNo(taskNo)
.setMaterialId(material.getId()) .setMaterialId(material.getId())
.setInspectionStandardId(standard.getId()) .setInspectionStandardId(standard.getId())
.setTestingMethodDictItemId(standard.getTestingMethodDictItemId())
.setFactory(request.getFactory()) .setFactory(request.getFactory())
.setInspectionType(1) .setInspectionType(1)
.setInspectionQty(request.getInspectionQty()) .setInspectionQty(request.getInspectionQty())
@ -356,6 +358,43 @@ public class IncomingInspectionTaskControllerService {
.update(); .update();
} }
public String addNewIncomingInspectionTask(Long taskId) {
QmsIncomingInspectionTask task = incomingInspectionTaskService.getById(taskId);
String taskNo = basdeSerialNumberControllerService.generateSerialNumber(34);
Long testingMethodDictItemId = dictionaryItemService.getIdByCode("InspectionStandardTestingMethod","Full");
QmsInspectionStandard standard = inspectionStandardService.getById(task.getInspectionStandardId());
LocalDateTime now = LocalDateTime.now();
LocalDateTime requiredFinishTime = now.plusDays(standard.getInspectionCycle());
QmsIncomingInspectionTask newTask = new QmsIncomingInspectionTask()
.setRequestNo(task.getRequestNo())
.setTaskNo(taskNo)
.setMaterialId(task.getId())
.setInspectionStandardId(task.getId())
.setTestingMethodDictItemId(testingMethodDictItemId)
.setSupplierCode(task.getSupplierCode())
.setSupplierName(task.getSupplierName())
.setDeliveryOrderNo(task.getDeliveryOrderNo())
.setDeliveryOrderLine(task.getDeliveryOrderLine())
.setPurchaseOrderNo(task.getPurchaseOrderNo())
.setPurchaseOrderLine(task.getPurchaseOrderLine())
.setPurchaseGroup(task.getPurchaseGroup())
.setFactory(task.getFactory())
.setWarehouse(task.getWarehouse())
.setStorageLocation(task.getStorageLocation())
.setStorageDays(task.getStorageDays())
.setInspectionType(task.getInspectionType())
.setDataType(task.getDataType())
.setInspectionQty(task.getInspectionQty())
.setInspectionStatus((short) 0)
.setInspectorId(task.getInspectorId())
.setInspectorName(task.getInspectorName())
.setSubmitTime(LocalDateTime.now())
.setRequiredFinishTime(requiredFinishTime)
.setDetectionQty(task.getInspectionQty());
incomingInspectionTaskService.save(newTask);
return taskNo;
}
private DictionaryItem getAql(Long id, List<DictionaryItem> aqls) { private DictionaryItem getAql(Long id, List<DictionaryItem> aqls) {
return aqls.stream().filter(aql -> Objects.equals(aql.getId(), id)).findFirst().get(); return aqls.stream().filter(aql -> Objects.equals(aql.getId(), id)).findFirst().get();
} }

View File

@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil;
import com.nflg.wms.common.constant.STATE; import com.nflg.wms.common.constant.STATE;
import com.nflg.wms.common.exception.NflgException; import com.nflg.wms.common.exception.NflgException;
import com.nflg.wms.common.pojo.qo.QmsIssueTicketAddQO; import com.nflg.wms.common.pojo.qo.QmsIssueTicketAddQO;
import com.nflg.wms.common.pojo.qo.QmsIssueTicketAuditQO; import com.nflg.wms.common.pojo.qo.QmsIncomingInspectionIssueTicketAuditQO;
import com.nflg.wms.common.pojo.qo.QmsIssueTicketPdiAddQO; import com.nflg.wms.common.pojo.qo.QmsIssueTicketPdiAddQO;
import com.nflg.wms.common.pojo.qo.QmsPdiCreateAndQueryTicketQO; import com.nflg.wms.common.pojo.qo.QmsPdiCreateAndQueryTicketQO;
import com.nflg.wms.common.pojo.vo.*; import com.nflg.wms.common.pojo.vo.*;
@ -15,6 +15,7 @@ import com.nflg.wms.common.util.VUtil;
import com.nflg.wms.repository.entity.*; import com.nflg.wms.repository.entity.*;
import com.nflg.wms.repository.service.*; import com.nflg.wms.repository.service.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.apache.commons.lang3.tuple.Pair;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@ -97,7 +98,7 @@ public class QmsIssueTicketControllerService {
QmsIssueTicketPdiAddQO addQO = new QmsIssueTicketPdiAddQO(); QmsIssueTicketPdiAddQO addQO = new QmsIssueTicketPdiAddQO();
addQO.setTaskRecordId(request.getTaskRecordId()); addQO.setTaskRecordId(request.getTaskRecordId());
addQO.setIncidentType(request.getIncidentType()); addQO.setIncidentType(request.getIncidentType());
List<QmsIssueTicketPdiAddQO.HandlerItem> handlerItems = request.getHandlers().stream() List<QmsIssueTicketPdiAddQO.HandlerItem> handlerItems = request.getHandlers().stream()
.map(h -> { .map(h -> {
QmsIssueTicketPdiAddQO.HandlerItem item = new QmsIssueTicketPdiAddQO.HandlerItem(); QmsIssueTicketPdiAddQO.HandlerItem item = new QmsIssueTicketPdiAddQO.HandlerItem();
@ -107,7 +108,7 @@ public class QmsIssueTicketControllerService {
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
addQO.setHandlers(handlerItems); addQO.setHandlers(handlerItems);
addPdiTicket(addQO); addPdiTicket(addQO);
// 2. 查询该任务的不合格检测项 // 2. 查询该任务的不合格检测项
@ -214,7 +215,7 @@ public class QmsIssueTicketControllerService {
* 更新审批状态审批意见审批人信息事故类型并更新工单状态 * 更新审批状态审批意见审批人信息事故类型并更新工单状态
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void audit(@Valid QmsIssueTicketAuditQO request) { public void incomingInspectionAudit(@Valid QmsIncomingInspectionIssueTicketAuditQO request) {
// 校验工单存在 // 校验工单存在
QmsIssueTicket entity = issueTicketService.getById(request.getId()); QmsIssueTicket entity = issueTicketService.getById(request.getId());
VUtil.trueThrowBusinessError(Objects.isNull(entity)) VUtil.trueThrowBusinessError(Objects.isNull(entity))
@ -238,10 +239,14 @@ public class QmsIssueTicketControllerService {
.setApprovalUserId(userId) .setApprovalUserId(userId)
.setApprovalUserName(userName) .setApprovalUserName(userName)
.setApprovalTime(now); .setApprovalTime(now);
if (request.getApprovalStatus() == 5) {
entity.setAssociationTaskNo(incomingInspectionTaskControllerService.addNewIncomingInspectionTask(entity.getSourceId()));
}
issueTicketService.updateById(entity); issueTicketService.updateById(entity);
wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus()); if (request.getApprovalStatus() != 5) {
wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus());
}
} }
/** /**
@ -537,7 +542,7 @@ public class QmsIssueTicketControllerService {
records.stream() records.stream()
.filter(record -> StrUtil.isNotBlank(record.getImageIds())) .filter(record -> StrUtil.isNotBlank(record.getImageIds()))
.forEach(record -> { .forEach(record -> {
if(StrUtil.isNotBlank(record.getImageIds())) { if (StrUtil.isNotBlank(record.getImageIds())) {
record.setImages(fileUploadRecordService.lambdaQuery() record.setImages(fileUploadRecordService.lambdaQuery()
.in(FileUploadRecord::getId, Arrays.stream(StrUtil.splitToLong(record.getImageIds(), ",")).boxed().toList()) .in(FileUploadRecord::getId, Arrays.stream(StrUtil.splitToLong(record.getImageIds(), ",")).boxed().toList())
.list() .list()

View File

@ -1,7 +1,6 @@
package com.nflg.wms.common.pojo.qo; package com.nflg.wms.common.pojo.qo;
import jakarta.validation.constraints.Min; import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -11,7 +10,7 @@ import lombok.experimental.Accessors;
*/ */
@Data @Data
@Accessors(chain = true) @Accessors(chain = true)
public class QmsIssueTicketAuditQO { public class QmsIncomingInspectionIssueTicketAuditQO {
/** /**
* 工单ID * 工单ID

View File

@ -52,6 +52,11 @@ public class QmsIncomingInspectionTask implements Serializable {
*/ */
private Long inspectionStandardId; private Long inspectionStandardId;
/**
* 检测方式关联字典项id字典编码InspectionStandardTestingMethod
*/
private Long testingMethodDictItemId;
/** /**
* 供应商编号 * 供应商编号
*/ */