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 d3e30fd7..55dbd6a6 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 @@ -16,6 +16,7 @@ import cn.axzo.msg.center.service.pending.request.CompletePendingBySubCodeReques import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByCodesRequest; 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.FetchTodoByBizRequest; import cn.axzo.msg.center.service.pending.request.GetPendingTodosRequest; import cn.axzo.msg.center.service.pending.request.GetTodoCountRequest; import cn.axzo.msg.center.service.pending.request.GetTodoPageRequest; @@ -283,6 +284,12 @@ public class PendingMessageNewController implements PendingMessageClient { return CommonResponse.success(todoSimpleQueryService.getTodosSimple(request)); } + @Override + public CommonResponse> fetchTodosByBiz(FetchTodoByBizRequest request) { + log.info("fetchTodosByBiz, request={}", JSON.toJSONString(request)); + return CommonResponse.success(todoSimpleQueryService.fetchTodosByBiz(request)); + } + @Override public CommonResponse> getTodosSimpleCount(GetTodoCountRequest request) { return CommonResponse.success(todoSimpleQueryService.getTodosSimpleCount(request)); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/dto/PendingMessageDTO.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/dto/PendingMessageDTO.java index 6973cf45..efc6377b 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/dto/PendingMessageDTO.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/dto/PendingMessageDTO.java @@ -14,12 +14,10 @@ import cn.axzo.msg.center.service.enums.OrganizationTypeEnum; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; import cn.axzo.msg.center.service.enums.TodoType; -import cn.axzo.msg.center.service.pending.ClientRequest; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3; import cn.axzo.msg.center.service.template.response.MessageDetailStyle; import cn.axzo.msg.center.utils.DateFormatUtil; -import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.AllArgsConstructor; @@ -33,7 +31,6 @@ import java.io.Serializable; import java.time.LocalDateTime; import java.util.Date; import java.util.List; -import java.util.Optional; /** * @description @@ -285,64 +282,6 @@ public class PendingMessageDTO implements Serializable { return null; } - public PendingMessageResponse toResponse(ClientRequest request) { - boolean isCreatedToday = false; - if (createTime != null) { - Date createAt = DateFormatUtil.toDate(createTime); - isCreatedToday = DateUtil.isSameDay(createAt, new Date()); - } - return PendingMessageResponse.builder() - // 发起人单位、项目信息 - .promoterOuId(promoterOuId) - .promoterWorkspaceId(promoterWorkspaceId) - .promoterWorkspaceName(promoterWorkspaceName) - .promoterWorkspaceType(promoterWorkspaceType) - // 接收者单位、项目信息 - .executorOuId(executorOuId) - .executorWorkspaceId(executorWorkspaceId) - .executorWorkspaceName(executorWorkspaceName) - .executorWorkspaceType(executorWorkspaceType) - // 其它信息 - .bizExtParamObj(bizExtParamObj) - .routerExtParamObj(routerExtParamObj) - //页面展示 - .ouId(this.ouId) - .workspaceId(workspaceId) - .workspaceName(workspaceName) - // 样式 - .detailStyle(detailStyle) - .isCreatedToday(isCreatedToday) - .isRead(isRead) - .todoType(todoType) - .proposedButtons(proposedButtons) - .templateCategory(templateCategory) - .identityCode(this.identityCode) - .templateCode(this.templateCode) - .title(this.title) - .content(this.content) - .promoterPersonId(Optional.ofNullable(this.promoter).map(PersonDTO::getId).orElse(null)) - .promoterName(Optional.ofNullable(this.promoter).map(PersonDTO::getName).orElse(null)) - .promoterIdentity(Optional.ofNullable(this.promoter).map(PersonDTO::getIdentity).orElse(null)) - .executorPersonId(Optional.ofNullable(this.executor).map(PersonDTO::getId).orElse(null)) - .executorName(Optional.ofNullable(this.executor).map(PersonDTO::getName).orElse(null)) - .executorIdentity(Optional.ofNullable(this.executor).map(PersonDTO::getIdentity).orElse(null)) - .bizCode(this.bizCode) - .subBizCode(this.subBizCode) - .bizDesc(this.bizDesc) - .bizFlag(this.bizFlag) - .state(this.getState()) - .bizCategory(this.bizCategory) - .createTimestamp(DateFormatUtil.toTimestamp(this.createTime)) - .updateTimestamp(DateFormatUtil.toTimestamp(this.updateTime)) - .deadlineTimestamp(DateFormatUtil.toTimestamp(this.deadline)) - .bizFinalStateIcon(Optional.ofNullable(bizFinalState).map(BizFinalStateEnum::getIcon).orElse(null)) - .bizFinalState(bizFinalState) - .modelV3(modelV3) - .displayOnCardKeyValues(modelV3.determineDisplayOnCardKeyValues()) - .cardUrlOpenStrategy(cardUrlOpenStrategy) - .build(); - } - @Override public String toString() { return JSON.toJSONString(this); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java index 7f04e7a2..790f3e36 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java @@ -79,6 +79,7 @@ public class ModelV3Parser { @Override public void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) { + kv.setValueVariable(kv.getValue()); kv.setValue(resolveBizParam(kv.getValue())); if (kv.getContentType() == KVContentType.PERSON_ID diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java index e1f26b7c..b8646d17 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRangeQueryService.java @@ -122,10 +122,12 @@ public class TodoRangeQueryService { if (respResult.getList() != null) { ArrayList keyValues = new ArrayList<>(); for (PendingMessageResponse response : respResult.getList()) { - response.determineButtonRouters() - .removeIf(btn -> !btn.determineStyles().contains(ButtonStyleEnum.OVER_CARD)); + if (request.isButtonDisplayOnCardAware()) + response.determineButtonRouters() + .removeIf(btn -> !btn.determineStyles().contains(ButtonStyleEnum.OVER_CARD)); if (response.getModelV3() != null) { response.getModelV3().getButtons().removeIf(btn -> { + if (!request.isButtonDisplayOnCardAware()) return false; YesOrNo supportBatchProcess = request.getSupportBatchProcess(); boolean notBatchProcessQuery = supportBatchProcess == null || supportBatchProcess == YesOrNo.NO; return notBatchProcessQuery && !btn.hasStyle(ButtonStyleEnum.OVER_CARD); @@ -151,6 +153,7 @@ public class TodoRangeQueryService { PendingMessagePageRequest request, List templateCodes) { Date startingAt = DateFormatUtil.toDate(LocalDateTime.now().minusDays(90)); LambdaQueryWrapper query = businessQuery(request.getTitle(), true) + .in(CollectionUtils.isNotEmpty(request.getTemplateCodes()), TodoBusiness::getTemplateCode, request.getTemplateCodes()) .eq(TodoBusiness::getPromoterPersonId, request.getPersonId()) .eq(TodoBusiness::getIsDelete, TableIsDeleteEnum.NORMAL.value) .gt(TodoBusiness::getCreateAt, startingAt) @@ -186,6 +189,7 @@ public class TodoRangeQueryService { LambdaQueryWrapper query = todoQuery(query(Todo.class), ouInfo, ouCollector) // 查询的待办类型: COPIED_TO_ME, EXECUTABLE .eq(Todo::getType, request.determineToDoType()) + .in(CollectionUtils.isNotEmpty(request.getTemplateCodes()), Todo::getTemplateCode, request.getTemplateCodes()) .eq(Todo::getExecutorPersonId, request.getPersonId()) //判断是否支持批量过滤 .eq(request.getSupportBatchProcess() != null, Todo::getSupportBatchProcess, request.getSupportBatchProcess()) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java index 3de0cf8e..27be4dbd 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoRespBuilder.java @@ -34,6 +34,7 @@ import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedCardUrl; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupDetail; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3; +import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV; import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3; import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlInfo; import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlSelector; @@ -262,7 +263,13 @@ public class TodoRespBuilder { Runnable modelV3Builder = () -> { response.setModelV3(parsedModel); - response.setDisplayOnCardKeyValues(parsedModel.determineDisplayOnCardKeyValues()); + List keyValues = parsedModel.collectKeyValues(); + boolean isKeyValueDisplayOnCardAware = request == null || request.isKeyValueDisplayOnCardAware(); + if (isKeyValueDisplayOnCardAware) + keyValues = keyValues.stream() + .filter(ParsedKV::isDisplayOnCard) + .collect(toList()); + response.setDisplayOnCardKeyValues(keyValues); response.setCardUrlOpenStrategy(templateModel.getTemplate().getCardUrlOpenStrategy()); ParsedModelV3Walker.walkDown(parsedModel, new ParsedModel3Visitor() { @Override diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoSimpleQueryService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoSimpleQueryService.java index cacaf043..0da5b76f 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoSimpleQueryService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoSimpleQueryService.java @@ -17,6 +17,7 @@ import cn.axzo.msg.center.service.enums.BizCategoryEnum; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.TodoQueryType; import cn.axzo.msg.center.service.enums.TodoType; +import cn.axzo.msg.center.service.pending.request.FetchTodoByBizRequest; import cn.axzo.msg.center.service.pending.request.GetTodoCountRequest; import cn.axzo.msg.center.service.pending.request.GetTodoPageRequest; import cn.axzo.msg.center.service.pending.request.GetTodoRequest; @@ -26,6 +27,7 @@ import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest; import cn.axzo.msg.center.service.pending.response.PendingMessageCountDTO; import cn.axzo.msg.center.service.pending.response.PendingMessageResponse; import cn.axzo.msg.center.service.pending.response.PendingMessageSimpleDTO; +import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3; import cn.azxo.framework.common.model.Page; import cn.hutool.core.date.StopWatch; import cn.hutool.core.lang.Assert; @@ -94,7 +96,9 @@ public class TodoSimpleQueryService { if (request.getQueryType() == TodoQueryType.SEND_BY_ME) { TodoBusiness business = todoBusinessDao.getById(todo.getTodoBusinessId()); PendingRecordAdapter adapter = todoRespBuilder.buildBusinessAdapter(business); - return todoRespBuilder.toResponse(adapter, request); + PendingMessageResponse response = todoRespBuilder.toResponse(adapter, request); + v3ExtPopulator.populate(response.getModelV3()); + return response; } PendingMessageResponse response = todoRespBuilder.toResponse(todo, request); v3ExtPopulator.populate(response.getModelV3()); @@ -143,6 +147,27 @@ public class TodoSimpleQueryService { return todoRespBuilder.buildTodosSimple(latestTodos); } + public List fetchTodosByBiz(FetchTodoByBizRequest request) { + List todos = todoDao.lambdaQuery() + .and(CollectionUtils.isNotEmpty(request.getTodos()), wrapper -> { + for (FetchTodoByBizRequest.TodoInfo todo : request.getTodos()) { + wrapper.or() + .eq(StringUtils.isNotBlank(todo.getTemplateCode()), Todo::getTemplateCode, todo.getTemplateCode()) + .eq(StringUtils.isNotBlank(todo.getBizCode()), Todo::getBizCode, todo.getBizCode()) + .eq(StringUtils.isNotBlank(todo.getSubBizCode()), Todo::getSubBizCode, todo.getSubBizCode()); + } + }) + .last("LIMIT " + cfg.getGetTodoSimpleSize()) + .list(); + List response = todoRespBuilder.toResponse( + todoRespBuilder.buildTodoAdapters(todos), request); + ParsedModelV3[] models = response.stream() + .map(PendingMessageResponse::getModelV3) + .toArray(ParsedModelV3[]::new); + v3ExtPopulator.populate(models); + return response; + } + public List getTodosSimple(GetTodoRequest request) { List todos = todoDao.lambdaQuery() .in(CollectionUtils.isNotEmpty(request.getIdentityCodes()), Todo::getIdentityCode, request.getIdentityCodes()) diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java index 286604f4..2d7939bb 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/ClientRequest.java @@ -16,4 +16,12 @@ public interface ClientRequest { return ModelVersion.V3.getVersionNumber(); } + default boolean isKeyValueDisplayOnCardAware() { + return false; + } + + default boolean isButtonDisplayOnCardAware() { + return false; + } + } \ No newline at end of file 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 830f2d13..968dcb9e 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 @@ -7,6 +7,7 @@ import cn.axzo.msg.center.service.pending.request.CompletePendingBySubCodeReques import cn.axzo.msg.center.service.pending.request.CompletePendingMessageByCodesRequest; 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.FetchTodoByBizRequest; import cn.axzo.msg.center.service.pending.request.GetPendingTodosRequest; import cn.axzo.msg.center.service.pending.request.GetTodoCountRequest; import cn.axzo.msg.center.service.pending.request.GetTodoPageRequest; @@ -347,6 +348,9 @@ public interface PendingMessageClient { @PostMapping(value = "/pending-message/record/get-todos-simple", produces = {MediaType.APPLICATION_JSON_VALUE}) CommonResponse> getTodosSimple(@RequestBody @Valid GetTodoRequest request); + @PostMapping(value = "/pending-message/record/fetch-todos-by-biz", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse> fetchTodosByBiz(@RequestBody @Valid FetchTodoByBizRequest request); + @PostMapping(value = "/pending-message/record/get-todos-simple/count", produces = {MediaType.APPLICATION_JSON_VALUE}) CommonResponse> getTodosSimpleCount(@RequestBody @Valid GetTodoCountRequest request); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/FetchTodoByBizRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/FetchTodoByBizRequest.java new file mode 100644 index 00000000..0140f61b --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/FetchTodoByBizRequest.java @@ -0,0 +1,44 @@ +package cn.axzo.msg.center.service.pending.request; + +import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum; +import cn.axzo.msg.center.service.enums.TerminalTypeEnum; +import cn.axzo.msg.center.service.pending.ClientRequest; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; +import java.util.ArrayList; +import java.util.List; + +/** + * @author yanglin + */ +@Setter @Getter +public class FetchTodoByBizRequest implements ClientRequest { + + @NotEmpty(message = "rows不能为空") + private List todos = new ArrayList<>(); + + public void addTodo(TodoInfo todo) { + if (todos == null) + todos = new ArrayList<>(); + todos.add(todo); + } + + @Setter @Getter + public static class TodoInfo { + private String templateCode; + private String bizCode; + private String subBizCode; + } + + @Override + public AppTerminalTypeEnum getAppTerminalType() { + return null; + } + + @Override + public TerminalTypeEnum getTerminalType() { + return null; + } +} \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java index 3bb1ac2c..ab722f88 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java @@ -23,6 +23,7 @@ import javax.validation.constraints.NotNull; import java.io.Serializable; import java.util.Collection; import java.util.Collections; +import java.util.Set; /** * @description @@ -51,6 +52,10 @@ public class PendingMessagePageRequest extends PageRequest implements ClientRequ * 应用终端 */ private AppTerminalTypeEnum appTerminalType; + /** + * 模板编码集合 + */ + private Set templateCodes; /** * 当前登录账户的自然id(前端不care) */ @@ -153,6 +158,16 @@ public class PendingMessagePageRequest extends PageRequest implements ClientRequ */ private Integer modelVersion; + /** + * 是否根据配置'是否显示在卡片上'过滤key/value + */ + private boolean isKeyValueDisplayOnCardAware = true; + + /** + * 是否根据配置'是否显示在卡片上'过滤按钮 + */ + private boolean isButtonDisplayOnCardAware = true; + // !! 用于排查问题 private String analysisToken; private AnalysisInfo a = new AnalysisInfo(); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java index a35bfd77..39d9511b 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java @@ -37,6 +37,11 @@ public class ParsedKV { @JsonIgnore private boolean displayOnCard; + /** + * 原始变量 + */ + private String valueVariable; + @JsonIgnore public boolean isValueAbsent() { return ValueUtils.isValueAbsent(value); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java index df5b9fa1..d0d52d90 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java @@ -67,14 +67,13 @@ public class ParsedModelV3 implements MessageButtonProvider, Pus return template == null ? null : template.getCode(); } - public List determineDisplayOnCardKeyValues() { + public List collectKeyValues() { return determineGroups().stream() .filter(group -> group.getGroupType() == GroupType.KV_VALUES) .map(ParsedGroupV3::getGroupInfo) .filter(Objects::nonNull) .map(ParsedGroupInfo::getKeyValues) .flatMap(Collection::stream) - .filter(ParsedKV::isDisplayOnCard) .collect(toList()); }