Merge branch 'feature/REQ-1507' into dev

This commit is contained in:
金海洋 2023-11-16 20:33:15 +08:00
commit 4f2fb86b65
8 changed files with 98 additions and 33 deletions

View File

@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -60,9 +62,11 @@ public class MessageGroupController implements MessageGroupClient {
.listGroupTree(request.getCategory(), request.getNodeName()); .listGroupTree(request.getCategory(), request.getNodeName());
List<MessageGroupTreeNodeResponse> groupTreeNodes; List<MessageGroupTreeNodeResponse> groupTreeNodes;
if (StringUtils.isNotBlank(request.getNodeName())) { if (StringUtils.isNotBlank(request.getNodeName())) {
// 根据分类结点名称搜索时需要剪枝 // 根据结点类型为分类类型的结点名称搜索时需要剪枝TODO:[cold_blade] [P0]
final Function<GroupTreeNodeDTO, Boolean> cutFunc = e -> e.canMountTemplate()
&& Objects.equals(e.getNodeName(), request.getNodeName());
groupTreeNodes = trees.stream() groupTreeNodes = trees.stream()
.map(this::convertCutTree) .map(e -> convertCutTree(e, cutFunc))
.filter(e -> CollectionUtils.isNotEmpty(e.getChildren())) .filter(e -> CollectionUtils.isNotEmpty(e.getChildren()))
.collect(Collectors.toList()); .collect(Collectors.toList());
} else { } else {
@ -77,7 +81,7 @@ public class MessageGroupController implements MessageGroupClient {
public CommonResponse<List<MessageGroupTreeNodeResponse>> listCutTree(MessageGroupQueryRequest request) { public CommonResponse<List<MessageGroupTreeNodeResponse>> listCutTree(MessageGroupQueryRequest request) {
List<MessageGroupTreeNodeResponse> groupTreeNodes = messageGroupNodeService List<MessageGroupTreeNodeResponse> groupTreeNodes = messageGroupNodeService
.listGroupTree(request.getCategory(), request.getNodeName()).stream() .listGroupTree(request.getCategory(), request.getNodeName()).stream()
.map(this::convertCutTree) .map(e -> convertCutTree(e, TreeHelperUtil::containsMountTemplateChild))
.filter(e -> CollectionUtils.isNotEmpty(e.getChildren())) .filter(e -> CollectionUtils.isNotEmpty(e.getChildren()))
.collect(Collectors.toList()); .collect(Collectors.toList());
return CommonResponse.success(groupTreeNodes); return CommonResponse.success(groupTreeNodes);
@ -92,7 +96,8 @@ public class MessageGroupController implements MessageGroupClient {
return CommonResponse.success(groupTreeNodes); return CommonResponse.success(groupTreeNodes);
} }
private MessageGroupTreeNodeResponse convertCutTree(GroupTreeNodeDTO srcRootNode) { private MessageGroupTreeNodeResponse convertCutTree(GroupTreeNodeDTO srcRootNode,
Function<GroupTreeNodeDTO, Boolean> cutFunc) {
MessageGroupTreeNodeResponse tgtRootNode = convert(srcRootNode); MessageGroupTreeNodeResponse tgtRootNode = convert(srcRootNode);
if (CollectionUtils.isEmpty(srcRootNode.getNodeChildren())) { if (CollectionUtils.isEmpty(srcRootNode.getNodeChildren())) {
return tgtRootNode; return tgtRootNode;
@ -102,7 +107,7 @@ public class MessageGroupController implements MessageGroupClient {
LinkedList<GroupTreeNodeDTO> stack = new LinkedList<>(srcRootNode.getNodeChildren()); LinkedList<GroupTreeNodeDTO> stack = new LinkedList<>(srcRootNode.getNodeChildren());
while (!stack.isEmpty()) { while (!stack.isEmpty()) {
GroupTreeNodeDTO node = stack.pop(); GroupTreeNodeDTO node = stack.pop();
if (TreeHelperUtil.containsMountTemplateChild(node)) { if (cutFunc.apply(node)) {
MessageGroupTreeNodeResponse child = convert(node); MessageGroupTreeNodeResponse child = convert(node);
map.get(node.getParentNode()).addChild(child); map.get(node.getParentNode()).addChild(child);
map.put(node, child); map.put(node, child);

View File

@ -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.message.service.PendingMessageNewService;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.PendingMessageClient; 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.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
@ -84,18 +85,23 @@ public class PendingMessageNewController implements PendingMessageClient {
return CommonResponse.success(pendingMessageNewService.complete(requestNo)); return CommonResponse.success(pendingMessageNewService.complete(requestNo));
} }
@Override
public CommonResponse<Boolean> completeById(CompletePendingMessageByIdRequest param) {
return CommonResponse.success(pendingMessageNewService.completeById(param));
}
@Override @Override
public CommonResponse<Boolean> revoke(String requestNo) { public CommonResponse<Boolean> revoke(String requestNo) {
return CommonResponse.success(pendingMessageNewService.revoke(requestNo)); return CommonResponse.success(pendingMessageNewService.revoke(requestNo));
} }
@Override @Override
public CommonResponse<Boolean> completeByTemplateCodeBizCode(CompleteMessageRequest param) { public CommonResponse<Boolean> completeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
return CommonResponse.success(pendingMessageNewService.completeByTemplateCodeBizCode(param)); return CommonResponse.success(pendingMessageNewService.completeByTemplateCodeBizCode(param));
} }
@Override @Override
public CommonResponse<Boolean> revokeByTemplateCodeBizCode(CompleteMessageRequest param) { public CommonResponse<Boolean> revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
return CommonResponse.success(pendingMessageNewService.revokeByTemplateCodeBizCode(param)); return CommonResponse.success(pendingMessageNewService.revokeByTemplateCodeBizCode(param));
} }
} }

View File

@ -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.MessageGroupNodeStatisticParam;
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam; import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum; 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.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
@ -91,6 +92,14 @@ public interface PendingMessageNewService {
*/ */
Boolean complete(String requestNo); Boolean complete(String requestNo);
/**
* 完成代办
*
* @param param 代办唯一标识
* @return 成功返回 {@code true} 失败返回 {@code false}
*/
Boolean completeById(CompletePendingMessageByIdRequest param);
/** /**
* 撤销代办 * 撤销代办
* *
@ -105,7 +114,7 @@ public interface PendingMessageNewService {
* @param param * @param param
* @return 成功返回 {@code true} 失败返回 {@code false} * @return 成功返回 {@code true} 失败返回 {@code false}
*/ */
Boolean completeByTemplateCodeBizCode(CompleteMessageRequest param); Boolean completeByTemplateCodeBizCode(CompletePendingMessageRequest param);
/** /**
* 通过业务编码和模版编码撤销代办 * 通过业务编码和模版编码撤销代办
@ -113,5 +122,5 @@ public interface PendingMessageNewService {
* @param param * @param param
* @return 成功返回 {@code true} 失败返回 {@code false} * @return 成功返回 {@code true} 失败返回 {@code false}
*/ */
Boolean revokeByTemplateCodeBizCode(CompleteMessageRequest param); Boolean revokeByTemplateCodeBizCode(CompletePendingMessageRequest param);
} }

View File

@ -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.PendingMessageRoleCategoryEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum; 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.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest; import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
@ -191,10 +192,10 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
SimpleWorkspaceRes workspace = null; SimpleWorkspaceRes workspace = null;
Long workspaceId = param.getWorkspaceId(); Long workspaceId = param.getWorkspaceId();
Result<SimpleWorkspaceRes> workspaceRes = workspaceApi.getOne(workspaceId); Result<SimpleWorkspaceRes> workspaceRes = workspaceApi.getOne(workspaceId);
if (!"200".equals(workspaceRes.getCode())) { if (200 == workspaceRes.getCode()) {
log.info("未查询到工作台信息 workspaceId:{}", workspaceId);
} else {
workspace = workspaceRes.getData(); workspace = workspaceRes.getData();
} else {
log.info("未查询到工作台信息 workspaceId:{}", workspaceId);
} }
List<PendingMessageRecord> record = convert(param, msgTemplate, requestNo, workspace); List<PendingMessageRecord> record = convert(param, msgTemplate, requestNo, workspace);
pendingMessageRecordDao.saveBatch(record); pendingMessageRecordDao.saveBatch(record);
@ -222,6 +223,17 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
.update(); .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 @Override
public Boolean revoke(String requestNo) { public Boolean revoke(String requestNo) {
if (StringUtils.isBlank(requestNo)) { if (StringUtils.isBlank(requestNo)) {
@ -238,7 +250,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
} }
@Override @Override
public Boolean completeByTemplateCodeBizCode(CompleteMessageRequest param) { public Boolean completeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
log.info("the [{}] record is completeByTemplateCodeBizCode retract.", param); log.info("the [{}] record is completeByTemplateCodeBizCode retract.", param);
return pendingMessageRecordDao.lambdaUpdate() return pendingMessageRecordDao.lambdaUpdate()
.set(PendingMessageRecord::getState, PendingMessageStateEnum.COMPLETED) .set(PendingMessageRecord::getState, PendingMessageStateEnum.COMPLETED)
@ -250,7 +262,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
} }
@Override @Override
public Boolean revokeByTemplateCodeBizCode(CompleteMessageRequest param) { public Boolean revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
log.info("the [{}] record is revokeByTemplateCodeBizCode retract.", param); log.info("the [{}] record is revokeByTemplateCodeBizCode retract.", param);
return pendingMessageRecordDao.lambdaUpdate() return pendingMessageRecordDao.lambdaUpdate()
.set(PendingMessageRecord::getState, PendingMessageStateEnum.RETRACT) .set(PendingMessageRecord::getState, PendingMessageStateEnum.RETRACT)
@ -383,7 +395,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
// 构建代办记录的人维度的相关信息 // 构建代办记录的人维度的相关信息
buildPersonInfo(record, param.getPromoter(), executor); 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.setOrgType(Objects.isNull(param.getOrgType()) ? OrganizationTypeEnum.UNKNOWN : param.getOrgType());
record.setOrgId(param.getWorkspaceId()); record.setOrgId(param.getWorkspaceId());
@ -408,17 +420,15 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
} }
private void buildTemplateInfo(PendingMessageRecord record, MessageTemplateDTO msgTemplate, String routeParam) { private void buildTemplateInfo(PendingMessageRecord record, MessageTemplateDTO msgTemplate, String bizParam) {
// TODO:[cold_blade] [P3] 后续其它业务对接的时候需要明确业务扩展字段和路由参数的分界 JSONObject bizExtParam = JSONObjectUtil.parseObject(bizParam);
JSONObject routerParamObj = JSONObjectUtil.parseObject(routeParam);
String title = PlaceholderResolver String title = PlaceholderResolver
.getDefaultResolver().resolveByMap(msgTemplate.getTitle(), routerParamObj); .getDefaultResolver().resolveByMap(msgTemplate.getTitle(), bizExtParam);
String content = PlaceholderResolver String content = PlaceholderResolver
.getDefaultResolver().resolveByMap(msgTemplate.getContent(), routerParamObj); .getDefaultResolver().resolveByMap(msgTemplate.getContent(), bizExtParam);
record.setTitle(title); record.setTitle(title);
record.setContent(content); record.setContent(content);
record.setTemplateCode(msgTemplate.getCode()); record.setTemplateCode(msgTemplate.getCode());
record.setRouterParams(routerParamObj.toJSONString());
} }
private void buildBusinessInfo(PendingMessageRecord record, PendingMessagePushParam param) { private void buildBusinessInfo(PendingMessageRecord record, PendingMessagePushParam param) {
@ -427,6 +437,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
record.setBizDesc(param.getBizDesc()); record.setBizDesc(param.getBizDesc());
record.setBizCategory(param.getBizCategory()); record.setBizCategory(param.getBizCategory());
record.setBizExtParam(JSONObjectUtil.checkAndReturn(param.getBizExtParams())); record.setBizExtParam(JSONObjectUtil.checkAndReturn(param.getBizExtParams()));
record.setRouterParams(JSONObjectUtil.checkAndReturn(param.getRouterParams()));
record.setBizFlag(param.getBizFlag()); record.setBizFlag(param.getBizFlag());
record.setBizFinalState(param.getBizFinalState()); record.setBizFinalState(param.getBizFinalState());
record.setDeadline(param.getDeadline()); record.setDeadline(param.getDeadline());

View File

@ -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.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.fallback.PendingMessageClientFallback; 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.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; 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}) @PostMapping(value = "/pending-message/complete", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Boolean> complete(@RequestParam("requestNo") String requestNo); CommonResponse<Boolean> 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<Boolean> completeById(@RequestBody @Valid CompletePendingMessageByIdRequest param);
/** /**
* 撤销代办 * 撤销代办
* *
@ -117,8 +127,8 @@ public interface PendingMessageClient {
* @param param * @param param
* @return * @return
*/ */
@PostMapping(value = "/pending-message/completeByTemplateCodeBizCode", produces = {MediaType.APPLICATION_JSON_VALUE}) @PostMapping(value = "/pending-message/complete/by-biz-code", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Boolean> completeByTemplateCodeBizCode(@RequestBody @Valid CompleteMessageRequest param); CommonResponse<Boolean> completeByTemplateCodeBizCode(@RequestBody @Valid CompletePendingMessageRequest param);
/** /**
* 通过模版编号和业务编号撤销代办 * 通过模版编号和业务编号撤销代办
@ -126,6 +136,6 @@ public interface PendingMessageClient {
* @param param * @param param
* @return 成功返回 {@code true} 失败返回 {@code false} * @return 成功返回 {@code true} 失败返回 {@code false}
*/ */
@PostMapping(value = "/pending-message/revokeByTemplateCodeBizCode", produces = {MediaType.APPLICATION_JSON_VALUE}) @PostMapping(value = "/pending-message/revoke/by-biz-code", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Boolean> revokeByTemplateCodeBizCode(@RequestBody @Valid CompleteMessageRequest param); CommonResponse<Boolean> revokeByTemplateCodeBizCode(@RequestBody @Valid CompletePendingMessageRequest param);
} }

View File

@ -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.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.pending.client.PendingMessageClient; 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.PendingMessageCountUncompletedRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest; import cn.axzo.msg.center.service.pending.request.PendingMessagePushRequest;
@ -79,13 +79,13 @@ public class PendingMessageClientFallback implements PendingMessageClient {
} }
@Override @Override
public CommonResponse<Boolean> completeByTemplateCodeBizCode(CompleteMessageRequest param) { public CommonResponse<Boolean> completeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
log.error("fall back while completing pending message by biz code. request:[{}]", 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"); return CommonResponse.error("fall back while completing pending message by biz code");
} }
@Override @Override
public CommonResponse<Boolean> revokeByTemplateCodeBizCode(CompleteMessageRequest param) { public CommonResponse<Boolean> revokeByTemplateCodeBizCode(CompletePendingMessageRequest param) {
log.error("fall back while revoking pending message by biz code. msgIdentityCode:[{}]", 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"); return CommonResponse.error("fall back while revoking pending message by biz code");
} }

View File

@ -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;
}

View File

@ -16,7 +16,7 @@ import java.io.Serializable;
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class CompleteMessageRequest implements Serializable { public class CompletePendingMessageRequest implements Serializable {
/** /**
* 关联业务主键 * 关联业务主键
*/ */