feat:取消完成通过配置决定是否使用mq或者feign
This commit is contained in:
@@ -47,6 +47,13 @@
|
||||
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||
<scope>provided</scope> <!-- 设置为 provided,主要是 PageParam 使用到 -->
|
||||
</dependency>
|
||||
|
||||
<!-- Test 测试相关 -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-test</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
</project>
|
||||
|
||||
@@ -22,6 +22,29 @@ public abstract class AbstractTaskCommonApiImpl implements TaskCommonApi {
|
||||
@Resource
|
||||
private TaskFactory taskFactory;
|
||||
|
||||
/**
|
||||
* 处理任务完成
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<AcsApplyActionRespVO> doHandleFinished(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
|
||||
return execute(taskStatusCallApiReqDTO, (task, taskExecuteDTO) -> {
|
||||
task.doHandleFinish(taskExecuteDTO);
|
||||
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理任务取消
|
||||
*/
|
||||
@Override
|
||||
public CommonResult<AcsApplyActionRespVO> doHandleCancelled(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
|
||||
return execute(taskStatusCallApiReqDTO, (task, taskExecuteDTO) -> {
|
||||
task.doHandleCancel(taskExecuteDTO);
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理取货完成
|
||||
*/
|
||||
@@ -97,6 +120,8 @@ public abstract class AbstractTaskCommonApiImpl implements TaskCommonApi {
|
||||
private TaskExecuteDTO buildTaskExecuteDTO(TaskStatusCallApiReqDTO taskStatusCallApiReqDTO) {
|
||||
return TaskExecuteDTO.builder()
|
||||
.taskId(taskStatusCallApiReqDTO.getTaskId())
|
||||
.eventId(taskStatusCallApiReqDTO.getEventId())
|
||||
.eventType(taskStatusCallApiReqDTO.getStatus())
|
||||
.payload(taskStatusCallApiReqDTO.getPayload())
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -14,6 +14,14 @@ import org.springframework.web.bind.annotation.RequestBody;
|
||||
*/
|
||||
public interface TaskCommonApi {
|
||||
|
||||
@Operation(summary = "处理任务完成")
|
||||
@PostMapping("/doHandleFinished")
|
||||
CommonResult<AcsApplyActionRespVO> doHandleFinished(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
|
||||
|
||||
@Operation(summary = "处理任务取消")
|
||||
@PostMapping("/doHandleCancelled")
|
||||
CommonResult<AcsApplyActionRespVO> doHandleCancelled(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
|
||||
|
||||
@Operation(summary = "请求取货")
|
||||
@PostMapping("/do-handle-picked")
|
||||
CommonResult<AcsApplyActionRespVO> doHandlePicked(@RequestBody TaskStatusCallApiReqDTO taskStatusCallApiReqDTO);
|
||||
|
||||
@@ -15,6 +15,9 @@ public class TaskStatusCallApiReqDTO implements Serializable {
|
||||
/** 任务ID */
|
||||
private Long taskId;
|
||||
|
||||
/** 任务事件唯一标识 */
|
||||
private String eventId;
|
||||
|
||||
/** 任务编码 */
|
||||
private String taskCode;
|
||||
|
||||
|
||||
@@ -23,6 +23,12 @@ import java.util.Map;
|
||||
@Component
|
||||
public class TaskCommonApiFactory {
|
||||
|
||||
/** LMS 业务归属编码 */
|
||||
private static final String LMS_OWNER_SERVICE = "LMS";
|
||||
|
||||
/** WMS 业务归属编码 */
|
||||
private static final String WMS_OWNER_SERVICE = "WMS";
|
||||
|
||||
@Autowired(required = false)
|
||||
private LmsTaskCommonApi lmsTaskCommonApi;
|
||||
|
||||
@@ -41,9 +47,11 @@ public class TaskCommonApiFactory {
|
||||
public void init() {
|
||||
if (lmsTaskCommonApi != null) {
|
||||
apiMap.put(RpcConstants.LMS_NAME, lmsTaskCommonApi);
|
||||
apiMap.put(LMS_OWNER_SERVICE, lmsTaskCommonApi);
|
||||
}
|
||||
if (wmsTaskCommonApi != null) {
|
||||
apiMap.put(RpcConstants.WMS_NAME, wmsTaskCommonApi);
|
||||
apiMap.put(WMS_OWNER_SERVICE, wmsTaskCommonApi);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -24,6 +24,12 @@ public class TaskExecuteDTO {
|
||||
@NotNull(message = "任务ID不能为空")
|
||||
private Long taskId;
|
||||
|
||||
@Schema(description = "任务事件唯一标识")
|
||||
private String eventId;
|
||||
|
||||
@Schema(description = "任务事件类型")
|
||||
private String eventType;
|
||||
|
||||
@Schema(description = "ACS反馈扩展数据")
|
||||
private Map<String, Object> payload;
|
||||
}
|
||||
|
||||
@@ -53,7 +53,7 @@ public class AcsUtil {
|
||||
String response;
|
||||
try {
|
||||
response = HttpUtils.post(url, headers(), JsonUtils.toJsonString(request));
|
||||
log.info("ACS 返回值:{}", JSON.toJSONString(response));
|
||||
log.info("ACS 返回值:{}", response);
|
||||
} catch (RuntimeException ex) {
|
||||
if (isNetworkException(ex)) {
|
||||
log.error("ACS 服务网络不通,url={},request={}", url, JsonUtils.toJsonString(request), ex);
|
||||
|
||||
@@ -0,0 +1,126 @@
|
||||
package cn.code.nl.framework.execute.biz.api;
|
||||
|
||||
import cn.code.nl.framework.execute.biz.dto.TaskStatusCallApiReqDTO;
|
||||
import cn.code.nl.framework.execute.core.AbstractTask;
|
||||
import cn.code.nl.framework.execute.core.TaskFactory;
|
||||
import cn.code.nl.framework.execute.core.dto.TaskExecuteDTO;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 任务通用 Feign 接口本地 Spring 集成测试
|
||||
*/
|
||||
@SpringBootTest(classes = {
|
||||
TaskFactory.class,
|
||||
AbstractTaskCommonApiImplLocalSpringTest.TestTaskCommonApi.class,
|
||||
AbstractTaskCommonApiImplLocalSpringTest.TestTask.class
|
||||
})
|
||||
class AbstractTaskCommonApiImplLocalSpringTest {
|
||||
|
||||
@Resource
|
||||
private TestTaskCommonApi testTaskCommonApi;
|
||||
|
||||
@Resource
|
||||
private TestTask testTask;
|
||||
|
||||
/**
|
||||
* 验证完成接口按 handleCode 路由并传递任务参数
|
||||
*/
|
||||
@Test
|
||||
void doHandleFinishedShouldRouteTask() {
|
||||
TaskStatusCallApiReqDTO reqDTO = buildReqDTO();
|
||||
|
||||
testTaskCommonApi.doHandleFinished(reqDTO).getCheckedData();
|
||||
|
||||
Assertions.assertNotNull(testTask.getFinishedDTO());
|
||||
Assertions.assertEquals(1001L, testTask.getFinishedDTO().getTaskId());
|
||||
Assertions.assertEquals("1001_TASK_FINISHED", testTask.getFinishedDTO().getEventId());
|
||||
Assertions.assertEquals("TASK_FINISHED", testTask.getFinishedDTO().getEventType());
|
||||
Assertions.assertEquals("value", testTask.getFinishedDTO().getPayload().get("key"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证取消接口按 handleCode 路由并传递任务参数
|
||||
*/
|
||||
@Test
|
||||
void doHandleCancelledShouldRouteTask() {
|
||||
TaskStatusCallApiReqDTO reqDTO = buildReqDTO();
|
||||
reqDTO.setEventId("1001_TASK_CANCELLED");
|
||||
reqDTO.setStatus("TASK_CANCELLED");
|
||||
|
||||
testTaskCommonApi.doHandleCancelled(reqDTO).getCheckedData();
|
||||
|
||||
Assertions.assertNotNull(testTask.getCancelledDTO());
|
||||
Assertions.assertEquals(1001L, testTask.getCancelledDTO().getTaskId());
|
||||
Assertions.assertEquals("1001_TASK_CANCELLED", testTask.getCancelledDTO().getEventId());
|
||||
Assertions.assertEquals("TASK_CANCELLED", testTask.getCancelledDTO().getEventType());
|
||||
Assertions.assertEquals("value", testTask.getCancelledDTO().getPayload().get("key"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建任务状态调用参数
|
||||
*/
|
||||
private TaskStatusCallApiReqDTO buildReqDTO() {
|
||||
TaskStatusCallApiReqDTO reqDTO = new TaskStatusCallApiReqDTO();
|
||||
reqDTO.setTaskId(1001L);
|
||||
reqDTO.setTaskCode("TASK-1001");
|
||||
reqDTO.setEventId("1001_TASK_FINISHED");
|
||||
reqDTO.setStatus("TASK_FINISHED");
|
||||
reqDTO.setHandleCode("testTask");
|
||||
reqDTO.setPayload(Map.of("key", "value"));
|
||||
return reqDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试任务通用接口实现
|
||||
*/
|
||||
@Component
|
||||
static class TestTaskCommonApi extends AbstractTaskCommonApiImpl {
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试任务处理器
|
||||
*/
|
||||
@Component("testTask")
|
||||
static class TestTask extends AbstractTask {
|
||||
|
||||
private TaskExecuteDTO finishedDTO;
|
||||
|
||||
private TaskExecuteDTO cancelledDTO;
|
||||
|
||||
/**
|
||||
* 记录完成任务参数
|
||||
*/
|
||||
@Override
|
||||
public void doHandleFinish(TaskExecuteDTO taskExecuteDTO) {
|
||||
this.finishedDTO = taskExecuteDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录取消任务参数
|
||||
*/
|
||||
@Override
|
||||
public void doHandleCancel(TaskExecuteDTO taskExecuteDTO) {
|
||||
this.cancelledDTO = taskExecuteDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取完成任务参数
|
||||
*/
|
||||
public TaskExecuteDTO getFinishedDTO() {
|
||||
return finishedDTO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取取消任务参数
|
||||
*/
|
||||
public TaskExecuteDTO getCancelledDTO() {
|
||||
return cancelledDTO;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package cn.code.nl.framework.execute.core;
|
||||
|
||||
import cn.code.nl.framework.execute.biz.api.AbstractTaskCommonApiImpl;
|
||||
import cn.code.nl.framework.execute.biz.api.lms.LmsTaskCommonApi;
|
||||
import cn.code.nl.framework.execute.biz.api.wms.WmsTaskCommonApi;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* 任务通用 API 工厂本地 Spring 集成测试
|
||||
*/
|
||||
@SpringBootTest(classes = {
|
||||
TaskFactory.class,
|
||||
TaskCommonApiFactory.class,
|
||||
TaskCommonApiFactoryLocalSpringTest.TestLmsTaskCommonApi.class,
|
||||
TaskCommonApiFactoryLocalSpringTest.TestWmsTaskCommonApi.class
|
||||
})
|
||||
class TaskCommonApiFactoryLocalSpringTest {
|
||||
|
||||
@Resource
|
||||
private TaskCommonApiFactory taskCommonApiFactory;
|
||||
|
||||
@Resource
|
||||
private TestLmsTaskCommonApi testLmsTaskCommonApi;
|
||||
|
||||
@Resource
|
||||
private TestWmsTaskCommonApi testWmsTaskCommonApi;
|
||||
|
||||
/**
|
||||
* 验证业务归属编码 LMS 能定位 Feign 接口
|
||||
*/
|
||||
@Test
|
||||
void getByServerNameShouldSupportLmsOwnerService() {
|
||||
Assertions.assertSame(testLmsTaskCommonApi, taskCommonApiFactory.getByServerName("LMS"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 验证业务归属编码 WMS 能定位 Feign 接口
|
||||
*/
|
||||
@Test
|
||||
void getByServerNameShouldSupportWmsOwnerService() {
|
||||
Assertions.assertSame(testWmsTaskCommonApi, taskCommonApiFactory.getByServerName("WMS"));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试 LMS Feign 接口
|
||||
*/
|
||||
@Component
|
||||
static class TestLmsTaskCommonApi extends AbstractTaskCommonApiImpl implements LmsTaskCommonApi {
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试 WMS Feign 接口
|
||||
*/
|
||||
@Component
|
||||
static class TestWmsTaskCommonApi extends AbstractTaskCommonApiImpl implements WmsTaskCommonApi {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user