feat(async-callback): 新增WMS来料检验任务异步回调功能
- 在AsyncConfig中添加名为wmsCallbackExecutor的线程池配置 - 在QmsApplication中启用@EnableAsync支持异步任务执行 - WmsIncomingInspectionTaskCallbackService新增processAsync方法实现异步处理 - process方法新增processingResult参数以支持多种处理结果回调 - 修改IncomingInspectionTaskControllerService根据检验结果调用不同回调逻辑 - 修改QmsIssueTicketControllerService审批后调用异步回调接口更新WMS状态 - QmsIncomingInspectionTaskController回调接口添加processingResult参数 - 在数据库查询中新增callback_result字段支持回调结果判定 - WmsIncomingInspectionTaskCallbackQO及WmsInventoryInspectionTaskCallbackQO添加processingResult属性 - 异步回调处理过程中增加重复回调校验及回调类型判断逻辑
This commit is contained in:
parent
4733ea8986
commit
fcef170933
|
|
@ -7,6 +7,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
|||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
import org.springframework.context.annotation.ComponentScan;
|
||||
import org.springframework.retry.annotation.EnableRetry;
|
||||
import org.springframework.scheduling.annotation.EnableAsync;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
@Slf4j
|
||||
|
|
@ -15,6 +16,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
|
|||
@EnableDiscoveryClient
|
||||
@EnableScheduling
|
||||
@EnableRetry
|
||||
@EnableAsync
|
||||
public class QmsApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
|
|
|||
|
|
@ -21,4 +21,21 @@ public class AsyncConfig {
|
|||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
|
||||
@Bean(name = "wmsCallbackExecutor")
|
||||
public Executor getAsyncExecutor() {
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
// 核心线程数(平时保持的线程数量)
|
||||
executor.setCorePoolSize(5);
|
||||
// 最大线程数(高峰期最多扩容到这个数量)
|
||||
executor.setMaxPoolSize(20);
|
||||
// 队列容量(核心线程满后,任务会放进队列,队列满后才扩容最大线程)
|
||||
executor.setQueueCapacity(100);
|
||||
// 线程空闲存活时间(秒)
|
||||
executor.setKeepAliveSeconds(60);
|
||||
// 线程名称前缀,方便在日志中排查问题
|
||||
executor.setThreadNamePrefix("wms-callback-async-");
|
||||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,7 +140,7 @@ public class QmsIncomingInspectionTaskController extends BaseController {
|
|||
*/
|
||||
@PostMapping("callback")
|
||||
public ApiResult<Void> callback(@RequestParam Long taskId){
|
||||
wmsIncomingInspectionTaskCallbackService.process(taskId);
|
||||
wmsIncomingInspectionTaskCallbackService.process(taskId, (short) 0);
|
||||
return ApiResult.success();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,6 +110,9 @@ public class IncomingInspectionTaskControllerService {
|
|||
@Resource
|
||||
private QmsIssueTicketControllerService issueTicketControllerService;
|
||||
|
||||
@Resource
|
||||
private WmsIncomingInspectionTaskCallbackService wmsIncomingInspectionTaskCallbackService;
|
||||
|
||||
/**
|
||||
* 来料检验申请(对外接口)
|
||||
* 业务规则:
|
||||
|
|
@ -954,8 +957,12 @@ public class IncomingInspectionTaskControllerService {
|
|||
|
||||
updateWrapper.update();
|
||||
|
||||
if (task.getInspectionResult()) {
|
||||
wmsIncomingInspectionTaskCallbackService.process(task.getId(), (short) 0);
|
||||
} else {
|
||||
issueTicketControllerService.initiate(task.getId());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询来料检验任务检验记录子项列表(含样本列表)
|
||||
|
|
|
|||
|
|
@ -57,6 +57,9 @@ public class QmsIssueTicketControllerService {
|
|||
@Resource
|
||||
private QmsIssueTicketProcessControllerService issueTicketProcessControllerService;
|
||||
|
||||
@Resource
|
||||
private WmsIncomingInspectionTaskCallbackService wmsIncomingInspectionTaskCallbackService;
|
||||
|
||||
/**
|
||||
* 审核质量问题工单
|
||||
* 更新审批状态、审批意见、审批人信息、事故类型,并更新工单状态
|
||||
|
|
@ -88,6 +91,8 @@ public class QmsIssueTicketControllerService {
|
|||
.setApprovalTime(now);
|
||||
|
||||
issueTicketService.updateById(entity);
|
||||
|
||||
wmsIncomingInspectionTaskCallbackService.processAsync(entity.getSourceId(), request.getApprovalStatus());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import com.nflg.wms.repository.service.IQmsIncomingInspectionTaskService;
|
|||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -42,7 +43,7 @@ public class WmsIncomingInspectionTaskCallbackService {
|
|||
/**
|
||||
* 向WMS系统发送来料检验任务回调
|
||||
*/
|
||||
private void incoming(QmsIncomingInspectionTaskVO taskVO) {
|
||||
private void incoming(QmsIncomingInspectionTaskVO taskVO, Short processingResult) {
|
||||
WmsIncomingInspectionTaskCallbackQO qo = new WmsIncomingInspectionTaskCallbackQO()
|
||||
.setTaskNo(taskVO.getTaskNo())
|
||||
.setInspectionType(taskVO.getInspectionType())
|
||||
|
|
@ -58,7 +59,8 @@ public class WmsIncomingInspectionTaskCallbackService {
|
|||
.setQualifiedQty(taskVO.getQualifiedQty())
|
||||
.setUnqualifiedQty(taskVO.getUnqualifiedQty())
|
||||
.setInspectionResult(taskVO.getInspectionResult())
|
||||
.setPurchaseGroup(taskVO.getPurchaseGroup());
|
||||
.setPurchaseGroup(taskVO.getPurchaseGroup())
|
||||
.setProcessingResult(processingResult);
|
||||
|
||||
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
|
||||
.select(QmsIncomingInspectionTaskRecord::getMaterialUniqueNo, QmsIncomingInspectionTaskRecord::getQualified)
|
||||
|
|
@ -93,7 +95,7 @@ public class WmsIncomingInspectionTaskCallbackService {
|
|||
/**
|
||||
* 向WMS系统发送库存检验任务回调
|
||||
*/
|
||||
private void inventory(QmsIncomingInspectionTaskVO taskVO) {
|
||||
private void inventory(QmsIncomingInspectionTaskVO taskVO, Short processingResult) {
|
||||
WmsInventoryInspectionTaskCallbackQO qo = new WmsInventoryInspectionTaskCallbackQO()
|
||||
.setTaskNo(taskVO.getTaskNo())
|
||||
.setMaterialNo(taskVO.getMaterialNo())
|
||||
|
|
@ -104,7 +106,8 @@ public class WmsIncomingInspectionTaskCallbackService {
|
|||
.setInspectionQty(taskVO.getInspectionQty())
|
||||
.setQualifiedQty(taskVO.getQualifiedQty())
|
||||
.setUnqualifiedQty(taskVO.getUnqualifiedQty())
|
||||
.setInspectionResult(taskVO.getInspectionResult());
|
||||
.setInspectionResult(taskVO.getInspectionResult())
|
||||
.setProcessingResult(processingResult);
|
||||
|
||||
List<QmsIncomingInspectionTaskRecord> records = incomingInspectionTaskRecordService.lambdaQuery()
|
||||
.select(QmsIncomingInspectionTaskRecord::getMaterialUniqueNo, QmsIncomingInspectionTaskRecord::getQualified)
|
||||
|
|
@ -136,14 +139,30 @@ public class WmsIncomingInspectionTaskCallbackService {
|
|||
}
|
||||
}
|
||||
|
||||
public void process(Long taskId) {
|
||||
/**
|
||||
* WMS系统来料检验任务回调
|
||||
* @param taskId 来料检验任务ID
|
||||
* @param processingResult 处理结果:0=通过,3=报废,4=维修,5=挑选使用,6=让渡使用
|
||||
*/
|
||||
@Async("wmsCallbackExecutor")
|
||||
public void processAsync(Long taskId, Short processingResult) {
|
||||
process(taskId, processingResult);
|
||||
}
|
||||
|
||||
/**
|
||||
* WMS系统来料检验任务回调
|
||||
* @param taskId 来料检验任务ID
|
||||
* @param processingResult 处理结果:0=通过,3=报废,4=维修,5=挑选使用,6=让渡使用
|
||||
*/
|
||||
public void process(Long taskId, Short processingResult) {
|
||||
QmsIncomingInspectionTaskVO taskVO = incomingInspectionTaskService.getDetail(taskId);
|
||||
VUtil.trueThrowBusinessError(taskVO.getCallbackResult()).throwMessage("请勿重复回调");
|
||||
switch (taskVO.getInspectionType()) {
|
||||
case 1:
|
||||
incoming(taskVO);
|
||||
incoming(taskVO,processingResult);
|
||||
break;
|
||||
case 2:
|
||||
inventory(taskVO);
|
||||
inventory(taskVO,processingResult);
|
||||
break;
|
||||
default:
|
||||
VUtil.trueThrowBusinessError(true).throwMessage("无效的检验类型:" + taskVO.getInspectionType());
|
||||
|
|
|
|||
|
|
@ -84,6 +84,11 @@ public class WmsIncomingInspectionTaskCallbackQO {
|
|||
*/
|
||||
private String purchaseGroup;
|
||||
|
||||
/**
|
||||
* 处理结果:0=通过,3=报废,4=维修,5=挑选使用,6=让渡使用
|
||||
*/
|
||||
private Short processingResult = 0;
|
||||
|
||||
/**
|
||||
* 合格物料唯一编号列表
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -59,6 +59,11 @@ public class WmsInventoryInspectionTaskCallbackQO {
|
|||
*/
|
||||
private Boolean inspectionResult;
|
||||
|
||||
/**
|
||||
* 处理结果:0=通过,3=报废,4=维修,5=挑选使用,6=让渡使用
|
||||
*/
|
||||
private Short processingResult = 0;
|
||||
|
||||
/**
|
||||
* 合格物料唯一编号列表
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -211,7 +211,8 @@
|
|||
t.purchase_group,
|
||||
t.warehouse,
|
||||
t.storage_location,
|
||||
t.storage_days
|
||||
t.storage_days,
|
||||
t.callback_result
|
||||
FROM qms_incoming_inspection_task t
|
||||
LEFT JOIN qms_qc_material m ON t.material_id = m.id
|
||||
LEFT JOIN qms_inspection_standard s ON t.inspection_standard_id = s.id
|
||||
|
|
|
|||
Loading…
Reference in New Issue