From 7aa1921914443d2699474212fa715dfa338a0948 Mon Sep 17 00:00:00 2001 From: linrf Date: Fri, 30 Jun 2023 17:54:20 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=BB=E5=8A=A8=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E9=87=8D=E8=AF=95=E7=9B=91=E5=90=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TaskMessageController.java | 5 +- .../infrastructure/dao/ITaskConfigDao.java | 2 + .../dao/impl/TaskConfigDaoImpl.java | 17 +++++ .../dao/impl/TaskConfigRetryLogDaoImpl.java | 4 +- .../dao/impl/TaskMessageRetryLogDaoImpl.java | 3 + .../service/ITaskMessageService.java | 2 +- .../service/impl/TaskConfigServiceImpl.java | 70 ++++++++++++++++++- .../service/impl/TaskMessageServiceImpl.java | 10 ++- .../service/impl/TrackRetryService.java | 2 +- .../common/GlobalResponseBodyAdvice.java | 8 +++ .../archivefile/TaskConfigRetryLogApi.java | 11 ++- .../archivefile/TaskMessageRetryLogApi.java | 5 ++ .../com/docus/server/entity/TaskConfig.java | 8 ++- 13 files changed, 134 insertions(+), 13 deletions(-) diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/controller/TaskMessageController.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/controller/TaskMessageController.java index e91178d..9831ab1 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/controller/TaskMessageController.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/controller/TaskMessageController.java @@ -3,9 +3,7 @@ package com.docus.server.archivefile.controller; import com.docus.infrastructure.web.request.SearchRequest; import com.docus.infrastructure.web.response.PageResult; import com.docus.server.api.archivefile.TaskMessageApi; -import com.docus.server.archivefile.convert.TaskMessageConvert; import com.docus.server.archivefile.service.ITaskMessageService; -import com.docus.server.entity.TaskMessage; import com.docus.server.vo.TaskMessageVO; import org.springframework.web.bind.annotation.RestController; @@ -29,8 +27,7 @@ public class TaskMessageController implements TaskMessageApi { */ @Override public TaskMessageVO find(String id) { - TaskMessage taskMessage = taskMessageService.findById(id); - return TaskMessageConvert.INSTANCE.convert(taskMessage); + return taskMessageService.findById(id); } /** diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/ITaskConfigDao.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/ITaskConfigDao.java index 364af1b..1bfca02 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/ITaskConfigDao.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/ITaskConfigDao.java @@ -7,4 +7,6 @@ import com.docus.server.entity.TaskConfig; public interface ITaskConfigDao extends IBaseDao { PageResult searchTaskConfig(SearchRequest searchRequest); + + int findByNameAndIdAndKey(Long id, String name, String retryKey); } diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigDaoImpl.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigDaoImpl.java index 783c1c9..82555cf 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigDaoImpl.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigDaoImpl.java @@ -44,4 +44,21 @@ public class TaskConfigDaoImpl extends BaseDaoImpl List list = super.find(query); return new PageResult<>(list); } + + @Override + public int findByNameAndIdAndKey(Long id, String name, String retryKey) { + LambdaQueryWrapper query = Wrappers.lambdaQuery(); + if (id != null) { + query.ne(TaskConfig::getId, id); + } + if (Func.isNotBlank(name)) { + query.eq(TaskConfig::getName, name); + } + if (Func.isNotBlank(retryKey)) { + query.eq(TaskConfig::getRetryKey, retryKey); + } + return baseMapper.selectCount(query); + } + + } diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigRetryLogDaoImpl.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigRetryLogDaoImpl.java index 438becc..ab7e8e5 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigRetryLogDaoImpl.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskConfigRetryLogDaoImpl.java @@ -38,7 +38,9 @@ public class TaskConfigRetryLogDaoImpl extends BaseDaoImpl list = super.find(query); diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskMessageRetryLogDaoImpl.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskMessageRetryLogDaoImpl.java index 7fdd1d4..1bb9319 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskMessageRetryLogDaoImpl.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/infrastructure/dao/impl/TaskMessageRetryLogDaoImpl.java @@ -37,6 +37,9 @@ public class TaskMessageRetryLogDaoImpl extends BaseDaoImpl findByState(StateEnum stateEnum); - TaskMessage findById(String id); + TaskMessageVO findById(String id); PageResult search(SearchRequest searchRequest); diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskConfigServiceImpl.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskConfigServiceImpl.java index dd990c1..53ea7fe 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskConfigServiceImpl.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskConfigServiceImpl.java @@ -1,12 +1,18 @@ package com.docus.server.archivefile.service.impl; import com.docus.core.util.Func; +import com.docus.core.util.ListUtils; +import com.docus.core.util.property.Setters; import com.docus.infrastructure.redis.service.IdService; +import com.docus.infrastructure.web.exception.ApiException; +import com.docus.infrastructure.web.exception.ExceptionCode; import com.docus.infrastructure.web.request.SearchRequest; import com.docus.infrastructure.web.response.PageResult; import com.docus.server.archivefile.infrastructure.dao.ITaskConfigDao; +import com.docus.server.archivefile.infrastructure.dao.ITaskConfigRetryLogDao; import com.docus.server.archivefile.service.ITaskConfigService; import com.docus.server.entity.TaskConfig; +import com.docus.server.entity.TaskConfigRetryLog; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; @@ -14,12 +20,15 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.Date; import java.util.List; +import java.util.Map; @Service public class TaskConfigServiceImpl implements ITaskConfigService { @Resource private ITaskConfigDao taskConfigDao; @Resource + private ITaskConfigRetryLogDao taskConfigRetryLogDao; + @Resource private IdService idService; @Resource private TrackRetryService trackRetryService; @@ -42,21 +51,50 @@ public class TaskConfigServiceImpl implements ITaskConfigService { @Override public TaskConfig getTaskConfigById(String taskConfigId) { - return taskConfigDao.findById(taskConfigId); + TaskConfig config = taskConfigDao.findById(taskConfigId); + List taskConfigRetryLogs = taskConfigRetryLogDao.findBy("messageId", config.getId()); + if (!CollectionUtils.isEmpty(taskConfigRetryLogs)) { + config.setHaveRetryLog(true); + } + return config; } @Transactional(rollbackFor = Exception.class) @Override public boolean updateTaskConfig(TaskConfig taskConfig) { if (Func.isNull(taskConfig.getId())) { + + validSave(taskConfig.getRetryKey(), taskConfig.getName()); + taskConfig.setId(idService.getDateSeq()); + + } else { + + validUpdate(taskConfig.getId(), taskConfig.getName(), taskConfig.getRetryKey()); } + return taskConfigDao.saveOrUpdate(taskConfig); } @Override public PageResult search(SearchRequest searchRequest) { - return taskConfigDao.searchTaskConfig(searchRequest); + PageResult result = searchTaskMessage(searchRequest); + + if (CollectionUtils.isEmpty(result.getList())) { + return new PageResult<>(); + } + + List retryLogs = taskConfigRetryLogDao.findBy("messageId", ListUtils.distinctSelect(result.getList(), TaskConfig::getId)); + Map taskConfigRetryLogMap = ListUtils.toMap(retryLogs, TaskConfigRetryLog::getMessageId); + + Setters.instance().list(result.getList()).cycleSetProperties(taskConfig -> { + if (taskConfigRetryLogMap.containsKey(taskConfig.getId())) { + taskConfig.setHaveRetryLog(true); + } + }); + + return result; + } @Transactional(rollbackFor = Exception.class) @@ -91,4 +129,32 @@ public class TaskConfigServiceImpl implements ITaskConfigService { } } + private void validUpdate(Long id, String name, String retryKey) { + int count = taskConfigDao.findByNameAndIdAndKey(id, name, null); + + if (count > 0) { + throw new ApiException(ExceptionCode.ParamIllegal.getCode(), "任务名称不能重复"); + } + + int keyCount = taskConfigDao.findByNameAndIdAndKey(id, null, retryKey); + + if (keyCount > 0) { + throw new ApiException(ExceptionCode.ParamIllegal.getCode(), "任务重试键不能重复"); + } + } + + private void validSave(String retryKey, String name) { + TaskConfig keyConfig = taskConfigDao.findOneBy("retryKey", retryKey); + + if (Func.notNull(keyConfig)) { + throw new ApiException(ExceptionCode.ParamIllegal.getCode(), "任务重试键不能重复"); + } + + TaskConfig nameConfig = taskConfigDao.findOneBy("name", name); + + if (Func.notNull(nameConfig)) { + throw new ApiException(ExceptionCode.ParamIllegal.getCode(), "任务名称不能重复"); + } + + } } diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskMessageServiceImpl.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskMessageServiceImpl.java index 2cc0708..ae59393 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskMessageServiceImpl.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TaskMessageServiceImpl.java @@ -70,8 +70,14 @@ public class TaskMessageServiceImpl implements ITaskMessageService { } @Override - public TaskMessage findById(String id) { - return taskMessageDao.findById(id); + public TaskMessageVO findById(String id) { + TaskMessage taskMessage = taskMessageDao.findById(id); + TaskMessageVO taskMessageVO = TaskMessageConvert.INSTANCE.convert(taskMessage); + List retryLogs = taskMessageRetryLogDao.findBy("messageId", id); + if (!CollectionUtils.isEmpty(retryLogs)) { + taskMessageVO.setHaveRetryLog(true); + } + return taskMessageVO; } @Override diff --git a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TrackRetryService.java b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TrackRetryService.java index 434ec9c..4e3f32b 100644 --- a/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TrackRetryService.java +++ b/common-docus/docus-archivefile/src/main/java/com/docus/server/archivefile/service/impl/TrackRetryService.java @@ -32,7 +32,7 @@ public class TrackRetryService { @TrackLogGroup(group = "doRetryTaskConfig", processor = RetryProcessor.class) @Async("recordMessage") public void doRetryTaskConfig(TaskConfig config) throws Exception { - IJobHandler jobHandler = TrackRetrySpringExecutor.loadJobHandler(config.getType()); + IJobHandler jobHandler = TrackRetrySpringExecutor.loadJobHandler(config.getRetryKey()); jobHandler.execute(String.valueOf(config.getId())); } diff --git a/docus-api-common/src/main/java/com/docus/server/common/GlobalResponseBodyAdvice.java b/docus-api-common/src/main/java/com/docus/server/common/GlobalResponseBodyAdvice.java index a778920..d760d9e 100644 --- a/docus-api-common/src/main/java/com/docus/server/common/GlobalResponseBodyAdvice.java +++ b/docus-api-common/src/main/java/com/docus/server/common/GlobalResponseBodyAdvice.java @@ -1,6 +1,7 @@ package com.docus.server.common; import com.docus.infrastructure.web.api.CommonResult; +import com.docus.infrastructure.web.exception.ApiException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.MethodParameter; @@ -11,6 +12,7 @@ import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.servlet.NoHandlerFoundException; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; import javax.servlet.http.HttpServletRequest; @@ -46,6 +48,12 @@ public class GlobalResponseBodyAdvice implements ResponseBodyAdvice { @ResponseBody @ExceptionHandler(value = Exception.class) public Object defaultErrorHandler(HttpServletRequest req, Exception ex) { + if (ex instanceof ApiException) { + logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), ((ApiException) ex).getCode(), ex.getMessage()); + return CommonResult.failed(ex.getMessage()); + } else if (ex instanceof NoHandlerFoundException) { + logger.info("{} 错误 ,code:{}, message:{}", req.getRequestURL(), 404, ex.getMessage()); + } return CommonResult.failed("系统出错"); } } diff --git a/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskConfigRetryLogApi.java b/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskConfigRetryLogApi.java index e25450a..93f7cd0 100644 --- a/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskConfigRetryLogApi.java +++ b/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskConfigRetryLogApi.java @@ -3,14 +3,21 @@ package com.docus.server.api.archivefile; import com.docus.infrastructure.web.request.SearchRequest; import com.docus.infrastructure.web.response.PageResult; import com.docus.server.entity.TaskConfigRetryLog; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; /** * 主动任务配置重试表 API * Generated on 2023-06-29 */ +@Api(value = "主动消息任务重试日志管理接口", tags = "主动消息任务重试日志管理接口") @FeignClient(value = "tsms-auth-api", contextId = "tsms-auth-api.TaskConfigRetryLogApi") @RequestMapping("/taskConfigRetryLog") public interface TaskConfigRetryLogApi { @@ -21,6 +28,7 @@ public interface TaskConfigRetryLogApi { * @param id 主键id * @return 实体 */ + @ApiOperation("按主键查询") @GetMapping("/find/{id}") TaskConfigRetryLog find(@PathVariable(value = "id") String id); @@ -30,6 +38,7 @@ public interface TaskConfigRetryLogApi { * @param searchRequest 搜索参数 * @return 分页列表 */ + @ApiOperation("关键字搜素") @PostMapping("/search") PageResult search(@RequestBody SearchRequest searchRequest); diff --git a/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskMessageRetryLogApi.java b/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskMessageRetryLogApi.java index 6598fb6..cf2acb2 100644 --- a/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskMessageRetryLogApi.java +++ b/docus-client-interface/src/main/java/com/docus/server/api/archivefile/TaskMessageRetryLogApi.java @@ -3,6 +3,8 @@ package com.docus.server.api.archivefile; import com.docus.infrastructure.web.request.SearchRequest; import com.docus.infrastructure.web.response.PageResult; import com.docus.server.entity.TaskMessageRetryLog; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -15,6 +17,7 @@ import org.springframework.web.bind.annotation.RequestMapping; * 任务消息重试表 API * Generated on 2023-06-28 */ +@Api(value = "被动消息任务重试日志管理接口", tags = "被动消息任务重试日志管理接口") @FeignClient(value = "docus-collector-api", contextId = "docus-collector-api.TaskMessageRetryLogApi") @RequestMapping("/taskMessageRetryLog") public interface TaskMessageRetryLogApi { @@ -25,6 +28,7 @@ public interface TaskMessageRetryLogApi { * @param id 主键id * @return 实体 */ + @ApiOperation("按主键查询") @GetMapping("/find/{id}") TaskMessageRetryLog find(@PathVariable(value = "id") String id); @@ -33,6 +37,7 @@ public interface TaskMessageRetryLogApi { * @param searchRequest 搜索参数 * @return 分页列表 */ + @ApiOperation("关键字搜素") @PostMapping("/search") PageResult search(@RequestBody SearchRequest searchRequest); diff --git a/docus-client-interface/src/main/java/com/docus/server/entity/TaskConfig.java b/docus-client-interface/src/main/java/com/docus/server/entity/TaskConfig.java index a035b86..ab0983b 100644 --- a/docus-client-interface/src/main/java/com/docus/server/entity/TaskConfig.java +++ b/docus-client-interface/src/main/java/com/docus/server/entity/TaskConfig.java @@ -26,8 +26,14 @@ public class TaskConfig { * 任务名字 */ @ApiModelProperty(value = "任务名字") + @TableField("name") private String name; - + /** + * 任务重试键 + */ + @ApiModelProperty(value = "任务重试键") + @TableField("retry_key") + private String retryKey; /** * 任务类型。 dept,user.... */