diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java index bb8eb752..1cf2dfd6 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageGroupController.java @@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.RestController; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -60,9 +62,11 @@ public class MessageGroupController implements MessageGroupClient { .listGroupTree(request.getCategory(), request.getNodeName()); List groupTreeNodes; if (StringUtils.isNotBlank(request.getNodeName())) { - // 根据分类结点名称搜索时需要剪枝 + // 根据结点类型为分类类型的结点名称搜索时需要剪枝TODO:[cold_blade] [P0] + final Function cutFunc = e -> e.canMountTemplate() + && Objects.equals(e.getNodeName(), request.getNodeName()); groupTreeNodes = trees.stream() - .map(this::convertCutTree) + .map(e -> convertCutTree(e, cutFunc)) .filter(e -> CollectionUtils.isNotEmpty(e.getChildren())) .collect(Collectors.toList()); } else { @@ -77,7 +81,7 @@ public class MessageGroupController implements MessageGroupClient { public CommonResponse> listCutTree(MessageGroupQueryRequest request) { List groupTreeNodes = messageGroupNodeService .listGroupTree(request.getCategory(), request.getNodeName()).stream() - .map(this::convertCutTree) + .map(e -> convertCutTree(e, TreeHelperUtil::containsMountTemplateChild)) .filter(e -> CollectionUtils.isNotEmpty(e.getChildren())) .collect(Collectors.toList()); return CommonResponse.success(groupTreeNodes); @@ -92,7 +96,8 @@ public class MessageGroupController implements MessageGroupClient { return CommonResponse.success(groupTreeNodes); } - private MessageGroupTreeNodeResponse convertCutTree(GroupTreeNodeDTO srcRootNode) { + private MessageGroupTreeNodeResponse convertCutTree(GroupTreeNodeDTO srcRootNode, + Function cutFunc) { MessageGroupTreeNodeResponse tgtRootNode = convert(srcRootNode); if (CollectionUtils.isEmpty(srcRootNode.getNodeChildren())) { return tgtRootNode; @@ -102,7 +107,7 @@ public class MessageGroupController implements MessageGroupClient { LinkedList stack = new LinkedList<>(srcRootNode.getNodeChildren()); while (!stack.isEmpty()) { GroupTreeNodeDTO node = stack.pop(); - if (TreeHelperUtil.containsMountTemplateChild(node)) { + if (cutFunc.apply(node)) { MessageGroupTreeNodeResponse child = convert(node); map.get(node.getParentNode()).addChild(child); map.put(node, child); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java index 94669f46..30fd3d27 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java @@ -7,7 +7,8 @@ import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam; import cn.axzo.msg.center.message.service.PendingMessageNewService; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.pending.client.PendingMessageClient; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; @@ -84,18 +85,23 @@ public class PendingMessageNewController implements PendingMessageClient { return CommonResponse.success(pendingMessageNewService.complete(requestNo)); } + @Override + public CommonResponse completeById(CompletePendingMessageByIdRequest param) { + return CommonResponse.success(pendingMessageNewService.completeById(param)); + } + @Override public CommonResponse revoke(String requestNo) { return CommonResponse.success(pendingMessageNewService.revoke(requestNo)); } @Override - public CommonResponse completeByTemplateCodeBizCode(CompleteMessageRequest param) { + public CommonResponse completeByTemplateCodeBizCode(CompletePendingMessageRequest param) { return CommonResponse.success(pendingMessageNewService.completeByTemplateCodeBizCode(param)); } @Override - public CommonResponse revokeByTemplateCodeBizCode(CompleteMessageRequest param) { + public CommonResponse revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) { return CommonResponse.success(pendingMessageNewService.revokeByTemplateCodeBizCode(param)); } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java index 079e04c7..d6bc38da 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/PendingMessageNewService.java @@ -5,7 +5,8 @@ import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO; import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam; import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; @@ -91,6 +92,14 @@ public interface PendingMessageNewService { */ Boolean complete(String requestNo); + /** + * 完成代办 + * + * @param param 代办唯一标识 + * @return 成功返回 {@code true} 失败返回 {@code false} + */ + Boolean completeById(CompletePendingMessageByIdRequest param); + /** * 撤销代办 * @@ -105,7 +114,7 @@ public interface PendingMessageNewService { * @param param * @return 成功返回 {@code true} 失败返回 {@code false} */ - Boolean completeByTemplateCodeBizCode(CompleteMessageRequest param); + Boolean completeByTemplateCodeBizCode(CompletePendingMessageRequest param); /** * 通过业务编码和模版编码撤销代办 @@ -113,5 +122,5 @@ public interface PendingMessageNewService { * @param param * @return 成功返回 {@code true} 失败返回 {@code false} */ - Boolean revokeByTemplateCodeBizCode(CompleteMessageRequest param); + Boolean revokeByTemplateCodeBizCode(CompletePendingMessageRequest param); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java index 5a4a4702..1929ce88 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java @@ -30,7 +30,8 @@ import cn.axzo.msg.center.service.enums.OrganizationTypeEnum; import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; @@ -191,10 +192,10 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { SimpleWorkspaceRes workspace = null; Long workspaceId = param.getWorkspaceId(); Result workspaceRes = workspaceApi.getOne(workspaceId); - if (!"200".equals(workspaceRes.getCode())) { - log.info("未查询到工作台信息 workspaceId:{}", workspaceId); - } else { + if (200 == workspaceRes.getCode()) { workspace = workspaceRes.getData(); + } else { + log.info("未查询到工作台信息 workspaceId:{}", workspaceId); } List record = convert(param, msgTemplate, requestNo, workspace); pendingMessageRecordDao.saveBatch(record); @@ -222,6 +223,17 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { .update(); } + @Override + public Boolean completeById(CompletePendingMessageByIdRequest param) { + log.info("the [{}] record is updated complete by id.", param); + return pendingMessageRecordDao.lambdaUpdate() + .set(PendingMessageRecord::getState, PendingMessageStateEnum.COMPLETED) + .eq(PendingMessageRecord::getId, param.getId()) + .eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT) + .eq(PendingMessageRecord::getIsDelete, TableIsDeleteEnum.NORMAL.value) + .update(); + } + @Override public Boolean revoke(String requestNo) { if (StringUtils.isBlank(requestNo)) { @@ -238,7 +250,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } @Override - public Boolean completeByTemplateCodeBizCode(CompleteMessageRequest param) { + public Boolean completeByTemplateCodeBizCode(CompletePendingMessageRequest param) { log.info("the [{}] record is completeByTemplateCodeBizCode retract.", param); return pendingMessageRecordDao.lambdaUpdate() .set(PendingMessageRecord::getState, PendingMessageStateEnum.COMPLETED) @@ -250,7 +262,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } @Override - public Boolean revokeByTemplateCodeBizCode(CompleteMessageRequest param) { + public Boolean revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) { log.info("the [{}] record is revokeByTemplateCodeBizCode retract.", param); return pendingMessageRecordDao.lambdaUpdate() .set(PendingMessageRecord::getState, PendingMessageStateEnum.RETRACT) @@ -383,7 +395,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { // 构建代办记录的人维度的相关信息 buildPersonInfo(record, param.getPromoter(), executor); // 构建模板信息 - buildTemplateInfo(record, msgTemplate, param.getRouterParams()); + buildTemplateInfo(record, msgTemplate, param.getBizExtParams()); // 构建代办所属企业/项目等相关信息 record.setOrgType(Objects.isNull(param.getOrgType()) ? OrganizationTypeEnum.UNKNOWN : param.getOrgType()); record.setOrgId(param.getWorkspaceId()); @@ -408,17 +420,15 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } - private void buildTemplateInfo(PendingMessageRecord record, MessageTemplateDTO msgTemplate, String routeParam) { - // TODO:[cold_blade] [P3] 后续其它业务对接的时候,需要明确业务扩展字段和路由参数的分界 - JSONObject routerParamObj = JSONObjectUtil.parseObject(routeParam); + private void buildTemplateInfo(PendingMessageRecord record, MessageTemplateDTO msgTemplate, String bizParam) { + JSONObject bizExtParam = JSONObjectUtil.parseObject(bizParam); String title = PlaceholderResolver - .getDefaultResolver().resolveByMap(msgTemplate.getTitle(), routerParamObj); + .getDefaultResolver().resolveByMap(msgTemplate.getTitle(), bizExtParam); String content = PlaceholderResolver - .getDefaultResolver().resolveByMap(msgTemplate.getContent(), routerParamObj); + .getDefaultResolver().resolveByMap(msgTemplate.getContent(), bizExtParam); record.setTitle(title); record.setContent(content); record.setTemplateCode(msgTemplate.getCode()); - record.setRouterParams(routerParamObj.toJSONString()); } private void buildBusinessInfo(PendingMessageRecord record, PendingMessagePushParam param) { @@ -427,6 +437,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { record.setBizDesc(param.getBizDesc()); record.setBizCategory(param.getBizCategory()); record.setBizExtParam(JSONObjectUtil.checkAndReturn(param.getBizExtParams())); + record.setRouterParams(JSONObjectUtil.checkAndReturn(param.getRouterParams())); record.setBizFlag(param.getBizFlag()); record.setBizFinalState(param.getBizFinalState()); record.setDeadline(param.getDeadline()); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java index 203f77d4..4f5d80b1 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java @@ -2,7 +2,8 @@ package cn.axzo.msg.center.service.pending.client; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.pending.client.fallback.PendingMessageClientFallback; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByIdRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; @@ -102,6 +103,15 @@ public interface PendingMessageClient { @PostMapping(value = "/pending-message/complete", produces = {MediaType.APPLICATION_JSON_VALUE}) CommonResponse complete(@RequestParam("requestNo") String requestNo); + /** + * 完成代办 + * + * @param param + * @return 成功返回 {@code true} 失败返回 {@code false} + */ + @PostMapping(value = "/pending-message/complete/by-id", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse completeById(@RequestBody @Valid CompletePendingMessageByIdRequest param); + /** * 撤销代办 * @@ -117,8 +127,8 @@ public interface PendingMessageClient { * @param param * @return */ - @PostMapping(value = "/pending-message/completeByTemplateCodeBizCode", produces = {MediaType.APPLICATION_JSON_VALUE}) - CommonResponse completeByTemplateCodeBizCode(@RequestBody @Valid CompleteMessageRequest param); + @PostMapping(value = "/pending-message/complete/by-biz-code", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse completeByTemplateCodeBizCode(@RequestBody @Valid CompletePendingMessageRequest param); /** * 通过模版编号和业务编号撤销代办 @@ -126,6 +136,6 @@ public interface PendingMessageClient { * @param param * @return 成功返回 {@code true} 失败返回 {@code false} */ - @PostMapping(value = "/pending-message/revokeByTemplateCodeBizCode", produces = {MediaType.APPLICATION_JSON_VALUE}) - CommonResponse revokeByTemplateCodeBizCode(@RequestBody @Valid CompleteMessageRequest param); + @PostMapping(value = "/pending-message/revoke/by-biz-code", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse revokeByTemplateCodeBizCode(@RequestBody @Valid CompletePendingMessageRequest param); } \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/fallback/PendingMessageClientFallback.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/fallback/PendingMessageClientFallback.java index 30f4caf7..dcde76f1 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/fallback/PendingMessageClientFallback.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/fallback/PendingMessageClientFallback.java @@ -2,7 +2,7 @@ package cn.axzo.msg.center.service.pending.client.fallback; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.pending.client.PendingMessageClient; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; +import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; @@ -79,13 +79,13 @@ public class PendingMessageClientFallback implements PendingMessageClient { } @Override - public CommonResponse completeByTemplateCodeBizCode(CompleteMessageRequest param) { + public CommonResponse completeByTemplateCodeBizCode(CompletePendingMessageRequest param) { log.error("fall back while completing pending message by biz code. request:[{}]", param); return CommonResponse.error("fall back while completing pending message by biz code"); } @Override - public CommonResponse revokeByTemplateCodeBizCode(CompleteMessageRequest param) { + public CommonResponse revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) { log.error("fall back while revoking pending message by biz code. msgIdentityCode:[{}]", param); return CommonResponse.error("fall back while revoking pending message by biz code"); } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageByIdRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageByIdRequest.java new file mode 100644 index 00000000..afbf64cc --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageByIdRequest.java @@ -0,0 +1,24 @@ +package cn.axzo.msg.center.service.pending.request; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import javax.validation.constraints.NotNull; + +/** + * @author haiyangjin + * @date 2023/11/16 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class CompletePendingMessageByIdRequest { + /** + * 关联业务主键 + */ + @NotNull(message = "消息ID不能为空") + private Long id; +} diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompleteMessageRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageRequest.java similarity index 89% rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompleteMessageRequest.java rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageRequest.java index 211b99d2..bddfdbe2 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompleteMessageRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/CompletePendingMessageRequest.java @@ -16,7 +16,7 @@ import java.io.Serializable; @Builder @AllArgsConstructor @NoArgsConstructor -public class CompleteMessageRequest implements Serializable { +public class CompletePendingMessageRequest implements Serializable { /** * 关联业务主键 */