From 01487c0e5274bb4c0b9c49825cb4752b47b03fb6 Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 22 Nov 2023 18:24:12 +0800 Subject: [PATCH 01/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../message/domain/dto/PendingMessageDTO.java | 8 +++++--- .../impl/PendingMessageDataInitServiceImpl.java | 7 +++++++ .../service/impl/PendingMessageNewServiceImpl.java | 13 ++++++++++--- .../cn/axzo/msg/center/utils/JSONObjectUtil.java | 3 +-- .../msg/center/service/enums/BizFinalStateEnum.java | 10 ++++++---- 5 files changed, 29 insertions(+), 12 deletions(-) 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 ce5b0aff..9ee05688 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 @@ -5,6 +5,7 @@ import cn.axzo.msg.center.service.dto.IdentityDTO; import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO; import cn.axzo.msg.center.service.dto.PersonDTO; import cn.axzo.msg.center.service.enums.BizCategoryEnum; +import cn.axzo.msg.center.service.enums.BizFinalStateEnum; import cn.axzo.msg.center.service.enums.OrganizationTypeEnum; import cn.axzo.msg.center.service.enums.PendingMessageStateEnum; import cn.axzo.msg.center.service.enums.TerminalTypeEnum; @@ -124,9 +125,9 @@ public class PendingMessageDTO implements Serializable { */ private MessageTemplateRouterDTO msgTemplateRouter; /** - * 业务终态的印章图片地址 + * 业务终态 */ - private String bizFinalStateIcon; + private BizFinalStateEnum bizFinalState; /** * 路由参数 */ @@ -172,6 +173,7 @@ public class PendingMessageDTO implements Serializable { .createTime(DateFormatUtil.toLocalDateTime(pendingMessageRecord.getCreateAt())) .updateTime(DateFormatUtil.toLocalDateTime(pendingMessageRecord.getUpdateAt())) .routerParam(pendingMessageRecord.getRouterParams()) + .bizFinalState(pendingMessageRecord.getBizFinalState()) .build(); } @@ -201,7 +203,7 @@ public class PendingMessageDTO implements Serializable { .deadlineTimestamp(DateFormatUtil.toTimestamp(this.deadline)) .detailRouter(MessageRouterUtil.fetchBizDetailRouter(this.msgTemplateRouter, terminalType).orElse(null)) .buttonRouters(MessageRouterUtil.fetchMessageRouterButtons(this.msgTemplateRouter, terminalType)) - .bizFinalStateIcon(this.bizFinalStateIcon) + .bizFinalStateIcon(Optional.ofNullable(bizFinalState).map(BizFinalStateEnum::getIcon).orElse(null)) .build(); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageDataInitServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageDataInitServiceImpl.java index fa5ac3e3..41bc3273 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageDataInitServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageDataInitServiceImpl.java @@ -111,6 +111,7 @@ public class PendingMessageDataInitServiceImpl implements PendingMessageDataInit log.info("[cold_blade] transform rows:[{}]", pendingMessageRecords.size()); Map executorIdWorkspceIdMap = pendingMessageRecords.stream() .filter(e -> Objects.equals(e.getExecutorType(), IdentityTypeEnum.PRACTITIONER)) + .filter(e -> filterWorkspaceId(e.getOrgId())) .filter(e -> !ouIdMap.containsKey(getKey(e))) .collect(Collectors.toMap(this::getKey, PendingMessageRecord::getExecutorId, (cur, next) -> next)); Map map = fetchOuId(executorIdWorkspceIdMap); @@ -192,6 +193,12 @@ public class PendingMessageDataInitServiceImpl implements PendingMessageDataInit return msgTemplateMap.get(Integer.parseInt(String.valueOf(relationId))); } + private boolean filterWorkspaceId(Long workspaceId) { + return Objects.nonNull(workspaceId) + && workspaceId > 0 + && EXCLUDE_WORKSPACE_IDS.stream().map(Long::valueOf).noneMatch(e -> e.equals(workspaceId)); + } + /** * 原模板ID与test环境新模板ID映射表 */ 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 f08a8be0..c63a88ca 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 @@ -142,6 +142,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { BizFinalStateEnum bizFinalState = fetchBizFinalState(request.getRoleCategory(), request.getBizFinalState()); // 开始构建分页查询条件 LambdaQueryChainWrapper query = pendingMessageRecordDao.lambdaQuery() + .eq(Objects.nonNull(request.getOuId()), PendingMessageRecord::getOuId, request.getOuId()) .eq(Objects.nonNull(pendingMessageState), PendingMessageRecord::getState, pendingMessageState) .eq(Objects.nonNull(bizFinalState), PendingMessageRecord::getBizFinalState, bizFinalState) .eq(Objects.nonNull(request.getWorkspaceId()), PendingMessageRecord::getOrgId, request.getWorkspaceId()); @@ -195,6 +196,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType()); // 开始构建分页查询条件 LambdaQueryChainWrapper query = pendingMessageRecordDao.lambdaQuery() + .eq(Objects.nonNull(request.getOuId()), PendingMessageRecord::getOuId, request.getOuId()) .eq(Objects.nonNull(pendingMessageState), PendingMessageRecord::getState, pendingMessageState); // 构建人维度的查询条件 buildPersonCondition(query, request.getWithIdentify(), request.getRoleCategory(), operator); @@ -378,8 +380,14 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { .map(MessageTemplateDTO::getMsgTemplateRouter) .orElse(null); // 解析并替换掉路由地址中的动态参数变量 - msgTemplateRouter = MessageRouterUtil - .parseAndConcatRouteUrl(msgTemplateRouter, JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams())); + JSONObject routerParam = JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams()); + if (!routerParam.containsKey("ouId")) { + routerParam.put("ouId", pendingMessageRecord.getOuId()); + } + if (!routerParam.containsKey("workspaceId")) { + routerParam.put("workspaceId", pendingMessageRecord.getOrgId()); + } + msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam); pendingMessage.setMsgTemplateRouter(msgTemplateRouter); // 获取模板卡片信息 List msgCardContentItems = messageTemplates.stream() @@ -390,7 +398,6 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { // 解析并替换卡片信息里面的动态参数变量 msgCardContentItems = MessageCardUtil.parseMessageCard(msgCardContentItems, pendingMessageRecord.getBizExtParam()); pendingMessage.setCardItems(msgCardContentItems); - // TODO: [cold_blade] [P0] 业务终态图标url return pendingMessage; } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/utils/JSONObjectUtil.java b/inside-notices/src/main/java/cn/axzo/msg/center/utils/JSONObjectUtil.java index b84d2992..1c352352 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/utils/JSONObjectUtil.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/utils/JSONObjectUtil.java @@ -19,7 +19,6 @@ import java.util.Objects; */ @NoArgsConstructor(access = AccessLevel.PRIVATE) public final class JSONObjectUtil { - private static final JSONObject EMPTY_JSON_OBJ = new JSONObject(); private static final String EMPTY_JSON_OBJ_STR = "{}"; private static final String EMPTY_JSON_ARR_STR = "[]"; @@ -31,7 +30,7 @@ public final class JSONObjectUtil { */ public static JSONObject parseObject(String str) { if (StringUtils.isBlank(str)) { - return EMPTY_JSON_OBJ; + return new JSONObject(); } return JSON.parseObject(str); } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/enums/BizFinalStateEnum.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/enums/BizFinalStateEnum.java index 82a4fc83..e8b3f4ad 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/enums/BizFinalStateEnum.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/enums/BizFinalStateEnum.java @@ -19,17 +19,19 @@ public enum BizFinalStateEnum { /** * 已处理 */ - COMPLETED, + COMPLETED("https://static.axzo.cn/fe-static/uni-icon/public/seal-1%23_%241699341908382.png"), /** * 已撤销 */ - RETRACT, + RETRACT("https://static.axzo.cn/fe-static/uni-icon/public/seal-3%23_%241699341908381.png"), /** * 已通过 */ - PASSED, + PASSED("https://static.axzo.cn/fe-static/uni-icon/public/seal-4%23_%241699341908374.png"), /** * 已拒绝 */ - REJECTED; + REJECTED("https://static.axzo.cn/fe-static/uni-icon/public/seal-2%23_%241699341908381.png"); + + private final String icon; } From 00cc808847aae73ebdcfb525d0847be525cadae9 Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 22 Nov 2023 20:12:36 +0800 Subject: [PATCH 02/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../impl/PendingMessageNewServiceImpl.java | 8 ++-- .../msg/center/utils/MessageRouterUtil.java | 46 +++++++++++++++---- 2 files changed, 42 insertions(+), 12 deletions(-) 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 c63a88ca..1dc82ffa 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 @@ -381,13 +381,15 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { .orElse(null); // 解析并替换掉路由地址中的动态参数变量 JSONObject routerParam = JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams()); + msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam); + JSONObject authParam = new JSONObject(); if (!routerParam.containsKey("ouId")) { - routerParam.put("ouId", pendingMessageRecord.getOuId()); + authParam.put("ouId", pendingMessageRecord.getOuId()); } if (!routerParam.containsKey("workspaceId")) { - routerParam.put("workspaceId", pendingMessageRecord.getOrgId()); + authParam.put("workspaceId", pendingMessageRecord.getOrgId()); } - msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam); + msgTemplateRouter = MessageRouterUtil.parseRouteUrl(msgTemplateRouter, authParam); pendingMessage.setMsgTemplateRouter(msgTemplateRouter); // 获取模板卡片信息 List msgCardContentItems = messageTemplates.stream() diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/utils/MessageRouterUtil.java b/inside-notices/src/main/java/cn/axzo/msg/center/utils/MessageRouterUtil.java index 5d48cbe7..1471d252 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/utils/MessageRouterUtil.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/utils/MessageRouterUtil.java @@ -123,6 +123,30 @@ public final class MessageRouterUtil { return JSON.parseArray(styleObj.toJSONString(), ButtonStyleEnum.class); } + /** + * 解析模板上配置的路由地址,将发送消息时的参数替换上去,并将路由参数追加到模板的路由地址后面,兼容APP端新老版本 + * + * @param msgTemplateRouter 路由信息 + * @param routerParam 路由参数 + * @return MessageTemplateRouterDTO + */ + public static MessageTemplateRouterDTO parseRouteUrl(MessageTemplateRouterDTO msgTemplateRouter, + JSONObject routerParam) { + if (Objects.isNull(msgTemplateRouter)) { + return msgTemplateRouter; + } + // 拷贝一份,避免修改入参 + msgTemplateRouter = msgTemplateRouter.deepClone(); + // 路由参数有效 + if (Objects.nonNull(routerParam)) { + // 编排业务详情路由 + parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam, false); + // 编排路由按钮 + parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam, false); + } + return msgTemplateRouter; + } + /** * 解析模板上配置的路由地址,将发送消息时的参数替换上去,并将路由参数追加到模板的路由地址后面,兼容APP端新老版本 * @@ -140,44 +164,48 @@ public final class MessageRouterUtil { // 路由参数有效 if (Objects.nonNull(routerParam)) { // 编排业务详情路由 - parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam); + parseAndConcatDetailRouterUrl(msgTemplateRouter.getRouteDetail(), routerParam, true); // 编排路由按钮 - parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam); + parseAndConcatButtonRouterUrl(msgTemplateRouter.getRouteButtons(), routerParam, true); } return msgTemplateRouter; } - private static void parseAndConcatDetailRouterUrl(MessageRouteDetailDTO routeDetail, JSONObject routerParam) { + private static void parseAndConcatDetailRouterUrl(MessageRouteDetailDTO routeDetail, JSONObject routerParam, + boolean isConcat) { if (Objects.isNull(routeDetail)) { return; } routeDetail.getRouterConfigs() - .forEach(e -> concatRouterParam(e::getUrl, e::setUrl, routerParam)); + .forEach(e -> concatRouterParam(e::getUrl, e::setUrl, routerParam, isConcat)); } - private static void parseAndConcatButtonRouterUrl(List routeButtons, JSONObject routerParam) { + private static void parseAndConcatButtonRouterUrl(List routeButtons, JSONObject routerParam, + boolean isConcat) { if (CollectionUtils.isEmpty(routeButtons)) { return; } routeButtons.forEach(e -> { if (StringUtils.isNotBlank(e.getApiUrl())) { // API调用类型的按钮 - concatRouterParam(e::getApiUrl, e::setApiUrl, routerParam); + concatRouterParam(e::getApiUrl, e::setApiUrl, routerParam, isConcat); } if (CollectionUtils.isNotEmpty(e.getRouterConfigs())) { // 页面跳转类型的按钮 e.getRouterConfigs() - .forEach(config -> concatRouterParam(config::getUrl, config::setUrl, routerParam)); + .forEach(config -> concatRouterParam(config::getUrl, config::setUrl, routerParam, isConcat)); } }); } private static void concatRouterParam(Supplier getUrlSupplier, Consumer setUrlConsumer, - JSONObject routerParam) { + JSONObject routerParam, boolean isConcat) { // 替换原始URL中的参数变量 String routerUrl = PlaceholderResolver.getDefaultResolver().resolveByMap(getUrlSupplier.get(), routerParam); // 将routerParam追加到原始的URL后面 - routerUrl = concatRouterParam(routerUrl, routerParam); + if (isConcat) { + routerUrl = concatRouterParam(routerUrl, routerParam); + } setUrlConsumer.accept(routerUrl); } From 8953fb72b4422df583d2092c887de0fca70ec3f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=87=91=E6=B5=B7=E6=B4=8B?= Date: Wed, 22 Nov 2023 21:32:36 +0800 Subject: [PATCH 03/10] NPE --- .../message/service/impl/PendingMessageNewServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 1dc82ffa..510f4e61 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 @@ -546,7 +546,8 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { record.setRequestNo(requestNo); record.setState(PendingMessageStateEnum.HAS_BEEN_SENT); // 构建代办记录的人维度的相关信息 - buildPersonInfo(record, param.getPromoter(), executor, workspace.getId()); + buildPersonInfo(record, param.getPromoter(), executor, + Optional.ofNullable(workspace).map(SimpleWorkspaceRes::getId).orElse(0L)); // 构建模板信息 buildTemplateInfo(record, msgTemplate, param.getBizExtParams()); // 构建代办所属企业/项目等相关信息 From 4b59cfb78a270d902c0a531d97c3d3146a542da1 Mon Sep 17 00:00:00 2001 From: luofu Date: Wed, 22 Nov 2023 21:52:41 +0800 Subject: [PATCH 04/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../impl/PendingMessageNewServiceImpl.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) 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 510f4e61..fd45b796 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 @@ -67,8 +67,10 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.Collection; import java.util.Collections; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -505,6 +507,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { personIdFunc = PendingMessageRecord::getPromoterPersonId; identityIdFunc = PendingMessageRecord::getPromoterId; identityTypeFunc = PendingMessageRecord::getPromoterType; + buildPromoterCondition(query, operator); } else { // 代办执行者查询条件 personIdFunc = PendingMessageRecord::getExecutorPersonId; @@ -518,6 +521,21 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } } + private void buildPromoterCondition(LambdaQueryChainWrapper query, PersonDTO operator) { + Date queryFrom = DateFormatUtil.toDate(LocalDateTime.now().minusDays(90)); + List records = pendingMessageRecordDao.lambdaQuery() + .eq(PendingMessageRecord::getPromoterId, operator.getId()) + .gt(PendingMessageRecord::getCreateAt, queryFrom) + .select(PendingMessageRecord::getId, PendingMessageRecord::getRequestNo) + .list(); + Map> map = records.stream() + .collect(Collectors.groupingBy(PendingMessageRecord::getRequestNo)); + List ids = map.values().stream() + .map(e -> e.stream().mapToLong(PendingMessageRecord::getId).max().orElse(0)) + .collect(Collectors.toList()); + query.in(PendingMessageRecord::getId, ids); + } + private void buildSortCondition(LambdaQueryChainWrapper query, Collection orderFields) { if (CollectionUtils.isEmpty(orderFields)) { From ad3815fd79bcdbb0a73045a1f54fcb1885363364 Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 23 Nov 2023 09:02:07 +0800 Subject: [PATCH 05/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../message/service/impl/PendingMessageNewServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 fd45b796..0fff27c4 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 @@ -524,7 +524,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { private void buildPromoterCondition(LambdaQueryChainWrapper query, PersonDTO operator) { Date queryFrom = DateFormatUtil.toDate(LocalDateTime.now().minusDays(90)); List records = pendingMessageRecordDao.lambdaQuery() - .eq(PendingMessageRecord::getPromoterId, operator.getId()) + .eq(PendingMessageRecord::getPromoterPersonId, operator.getId()) .gt(PendingMessageRecord::getCreateAt, queryFrom) .select(PendingMessageRecord::getId, PendingMessageRecord::getRequestNo) .list(); @@ -533,7 +533,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { List ids = map.values().stream() .map(e -> e.stream().mapToLong(PendingMessageRecord::getId).max().orElse(0)) .collect(Collectors.toList()); - query.in(PendingMessageRecord::getId, ids); + query.in(CollectionUtils.isNotEmpty(ids), PendingMessageRecord::getId, ids); } private void buildSortCondition(LambdaQueryChainWrapper query, From f083282f5f3df40b38dcf151953a6fc64f03a133 Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 23 Nov 2023 10:34:36 +0800 Subject: [PATCH 06/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../inside/notices/service/impl/MessageCoreServiceImpl.java | 1 + .../message/domain/param/MessageGroupNodeStatisticParam.java | 4 ++++ .../message/service/impl/PendingMessageNewServiceImpl.java | 1 + .../cn/axzo/msg/center/api/request/MessageStatisticReq.java | 4 ++++ .../request/PendingMessageCountUncompletedRequest.java | 4 ++++ .../pending/request/PendingMessageStatisticRequest.java | 4 ++++ 6 files changed, 18 insertions(+) diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageCoreServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageCoreServiceImpl.java index d6a3331c..ca710b82 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageCoreServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/MessageCoreServiceImpl.java @@ -334,6 +334,7 @@ public class MessageCoreServiceImpl implements MessageCoreService { param.setOperator(PersonDTO.builder().id(request.getPersonId()).build()); param.setTerminalType(AppTerminalTypeEnum.CMS_WEB_PC); param.setWithIdentify(false); + param.setOuId(request.getOuId()); int pendingCnt = pendingMessageNewService.countUncompleted(param); return new MessageStatisticRes(generalCnt, pendingCnt); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageGroupNodeStatisticParam.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageGroupNodeStatisticParam.java index 6f7c4ae0..b758ee96 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageGroupNodeStatisticParam.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageGroupNodeStatisticParam.java @@ -30,6 +30,10 @@ public class MessageGroupNodeStatisticParam implements Serializable { * 当前登录账户的自然id(前端不care) */ private PersonDTO operator; + /** + * 单位id + */ + private Long ouId; /** * 应用终端类型 */ 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 0fff27c4..1d946aff 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 @@ -473,6 +473,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } LambdaQueryChainWrapper query = pendingMessageRecordDao.lambdaQuery() .in(PendingMessageRecord::getTemplateCode, templateCodes) + .eq(Objects.nonNull(param.getOuId()), PendingMessageRecord::getOuId, param.getOuId()) .eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT); buildPersonCondition(query, param.getWithIdentify(), PendingMessageRoleCategoryEnum.EXECUTOR, param.getOperator()); return query.count(); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageStatisticReq.java b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageStatisticReq.java index 00f15974..f4857b67 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageStatisticReq.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/api/request/MessageStatisticReq.java @@ -26,6 +26,10 @@ public class MessageStatisticReq implements Serializable { */ @NotNull(message = "personId is required") private Long personId; + /** + * 单位id + */ + private Long ouId; @Override public String toString() { diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageCountUncompletedRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageCountUncompletedRequest.java index bd90e47f..473f5aec 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageCountUncompletedRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageCountUncompletedRequest.java @@ -27,6 +27,10 @@ public class PendingMessageCountUncompletedRequest implements Serializable { */ @NotNull(message = "personId is required") private Long personId; + /** + * 单位id + */ + private Long ouId; /** * 当前登录账户的身份id(前端不care) */ diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageStatisticRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageStatisticRequest.java index 2b98128b..99094981 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageStatisticRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageStatisticRequest.java @@ -28,6 +28,10 @@ public class PendingMessageStatisticRequest implements Serializable { */ @NotNull(message = "personId is required") private Long personId; + /** + * 单位id + */ + private Long ouId; /** * 当前登录账户的身份id(前端不care) */ From e9b7cbbdc9080b8b596b45183a397e42ca223349 Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 23 Nov 2023 10:39:23 +0800 Subject: [PATCH 07/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../service/impl/PendingMessageNewServiceImpl.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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 1d946aff..85ec0046 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 @@ -176,7 +176,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } query.in(PendingMessageRecord::getTemplateCode, templateCodes); // 构建排序条件 - buildSortCondition(query, request.getOrderFields()); + buildSortCondition(query, request.getOrderFields(), pendingMessageState); IPage page = request.toPage(); IPage result = query.page(page); @@ -225,7 +225,7 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } query.in(PendingMessageRecord::getTemplateCode, templateCodesPathMap.keySet()); // 构建排序条件 - buildSortCondition(query, request.getOrderFields()); + buildSortCondition(query, request.getOrderFields(), pendingMessageState); IPage result = query.page(request.toPage()); if (CollectionUtils.isEmpty(result.getRecords())) { return Page.toPage(request.getPage(), request.getPageSize(), result.getTotal(), Collections.emptyList()); @@ -538,10 +538,14 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { } private void buildSortCondition(LambdaQueryChainWrapper query, - Collection orderFields) { + Collection orderFields, PendingMessageStateEnum state) { if (CollectionUtils.isEmpty(orderFields)) { // 默认时间降序 - query.orderByDesc(PendingMessageRecord::getCreateAt); + if (PendingMessageStateEnum.COMPLETED.equals(state)) { + query.orderByDesc(PendingMessageRecord::getUpdateAt); + } else { + query.orderByDesc(PendingMessageRecord::getCreateAt); + } return; } orderFields.stream() From f9fb1b8a00b455b62605ab2550a6893c8153a23e Mon Sep 17 00:00:00 2001 From: wuyu Date: Thu, 23 Nov 2023 11:34:26 +0800 Subject: [PATCH 08/10] =?UTF-8?q?+=E4=B8=9A=E5=8A=A1=E6=9C=AA=E4=BC=A0ouId?= =?UTF-8?q?=EF=BC=8C=E6=89=8D=E5=8E=BB=E6=9F=A5=E6=80=BB=E5=8C=85ouId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../message/service/impl/PendingMessageNewServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 85ec0046..e0635c03 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 @@ -595,8 +595,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { record.setExecutorPersonId(executor.getId()); record.setExecutorName(executor.getName()); // 执行人身份是从业人员,查询ouId - record.setOuId(getPractitionOuId(executor, workspaceId)); - + if(null == record.getOuId()){ + record.setOuId(getPractitionOuId(executor, workspaceId)); + } } private Long getPractitionOuId(PersonDTO executor, Long workspaceId) { From 0512403a9b2bd3da637a8f186bb3055b80bd7dce Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 23 Nov 2023 12:38:50 +0800 Subject: [PATCH 09/10] =?UTF-8?q?feat(REQ-1507):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=81=E4=B8=9A=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../message/service/impl/PendingMessageNewServiceImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 e0635c03..c52d13c5 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 @@ -144,7 +144,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { BizFinalStateEnum bizFinalState = fetchBizFinalState(request.getRoleCategory(), request.getBizFinalState()); // 开始构建分页查询条件 LambdaQueryChainWrapper query = pendingMessageRecordDao.lambdaQuery() - .eq(Objects.nonNull(request.getOuId()), PendingMessageRecord::getOuId, request.getOuId()) + // REQ-1507期发起人不通过ouId过滤 + .eq(!PendingMessageRoleCategoryEnum.PROMOTER.equals(request.getRoleCategory()) + && Objects.nonNull(request.getOuId()), PendingMessageRecord::getOuId, request.getOuId()) .eq(Objects.nonNull(pendingMessageState), PendingMessageRecord::getState, pendingMessageState) .eq(Objects.nonNull(bizFinalState), PendingMessageRecord::getBizFinalState, bizFinalState) .eq(Objects.nonNull(request.getWorkspaceId()), PendingMessageRecord::getOrgId, request.getWorkspaceId()); From 2277d5705cffeefe909ff2d8ccba476b08093ad1 Mon Sep 17 00:00:00 2001 From: luofu Date: Thu, 23 Nov 2023 14:40:59 +0800 Subject: [PATCH 10/10] =?UTF-8?q?feat(REQ-1507):=20=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E5=8F=82=E6=95=B0=E6=8B=BC=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1507?goToView=1 影响: 无 --- .../message/service/impl/PendingMessageNewServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 c52d13c5..afa0e233 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 @@ -385,7 +385,6 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { .orElse(null); // 解析并替换掉路由地址中的动态参数变量 JSONObject routerParam = JSONObjectUtil.parseObject(pendingMessageRecord.getRouterParams()); - msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam); JSONObject authParam = new JSONObject(); if (!routerParam.containsKey("ouId")) { authParam.put("ouId", pendingMessageRecord.getOuId()); @@ -393,7 +392,9 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { if (!routerParam.containsKey("workspaceId")) { authParam.put("workspaceId", pendingMessageRecord.getOrgId()); } + authParam.putAll(routerParam); msgTemplateRouter = MessageRouterUtil.parseRouteUrl(msgTemplateRouter, authParam); + msgTemplateRouter = MessageRouterUtil.parseAndConcatRouteUrl(msgTemplateRouter, routerParam); pendingMessage.setMsgTemplateRouter(msgTemplateRouter); // 获取模板卡片信息 List msgCardContentItems = messageTemplates.stream()