diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/PendingMessageServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/PendingMessageServiceImpl.java index 6735b495..26b30378 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/PendingMessageServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/inside/notices/service/impl/PendingMessageServiceImpl.java @@ -29,6 +29,7 @@ import cn.axzo.msg.center.inside.notices.service.MessageRelationService; import cn.axzo.msg.center.inside.notices.service.MessageRouterService; import cn.axzo.msg.center.inside.notices.service.PendingMessageService; import cn.axzo.msg.center.inside.notices.utils.MessageRecordHelper; +import cn.axzo.msg.center.message.service.PendingMessageNewService; import cn.axzo.msg.center.notices.common.enums.ReturnCodeEnum; import cn.axzo.msg.center.notices.common.exception.BizException; import cn.azxo.framework.common.model.Page; @@ -99,13 +100,12 @@ public class PendingMessageServiceImpl implements PendingMessageService { private final MessageModuleService messageModuleService; private final MessageRelationService messageRelationService; private final PendingMessageBizConfig pendingMessageBizConfig; + private final PendingMessageNewService pendingMessageNewService; @Override public List temporarilyStatistic(PendingMessageTemporarilyStatisticReq request) { // 参数检测 checkParam(request); - // 获取数据冷热隔离的分界 - final LocalDateTime queryFrom = getQueryFromTime(); final List categoryConfigs = pendingMessageBizConfig.tempCategoriesConfig(); if (CollectionUtils.isEmpty(categoryConfigs)) { log.warn("the nacos config is lost......"); @@ -115,7 +115,7 @@ public class PendingMessageServiceImpl implements PendingMessageService { return categoryConfigs.stream() // 自然排序,前端仅做渲染,展示顺序的工作由后端配置 .sorted() - .map(e -> statisticAndPickFirst(request, e, SPECIFY_IDENTIFIES, queryFrom)) + .map(e -> statistic(request, e)) .collect(Collectors.toList()); } catch (Exception e) { log.error("broke out some exception while statistic pending message.", e); @@ -288,13 +288,10 @@ public class PendingMessageServiceImpl implements PendingMessageService { return module; } - private PendingMessageTemporarilyStatisticRes statisticAndPickFirst(PendingMessageTemporarilyStatisticReq request, - MsgTempBizCategoryConfig categoryConfig, - Collection identifyTypes, - LocalDateTime begin) { - Set relationIds = categoryConfig.getConfigRelationIds(); + private PendingMessageTemporarilyStatisticRes statistic(PendingMessageTemporarilyStatisticReq request, + MsgTempBizCategoryConfig categoryConfig) { // 统计数量 - Integer count = doStatistic(request, relationIds, identifyTypes, begin); + Integer count = pendingMessageNewService.countUncompleted(request.getPersonId(), categoryConfig.getConfigRelationIds()); PendingMessageTemporarilyStatisticRes res = new PendingMessageTemporarilyStatisticRes(); res.setUnCompletedCount(count); res.setCategoryCode(categoryConfig.getCategory().name()); @@ -303,24 +300,10 @@ public class PendingMessageServiceImpl implements PendingMessageService { if (StringUtils.isNotBlank(categoryConfig.getJumpUrl())) { // 分类指定了具体的跳转地址,则优先使用其指定的地址,这里指定为原生APP res.setRouter(new MessageRouterInfoRes(NativeTypeEnum.H5.getMessage(), categoryConfig.getJumpUrl(), "")); - } else if (1 == count) { - // 这里仅统计已发送的待办 - MessageRecord record = selectOne(request.getPersonId(), request.getIdentifyId(), identifyTypes, - relationIds, SEND_SUCCESSFULLY_STATES, begin); - if (Objects.nonNull(record)) { - res.setMessageId(record.getId()); - res.setRouter(getRouter(record, request.getSystemType())); - } } return res; } - private Integer doStatistic(PendingMessageTemporarilyStatisticReq request, Collection relationIds, - Collection identifyTypes, LocalDateTime begin) { - return doStatistic(request.getPersonId(), request.getIdentifyId(), relationIds, identifyTypes, - SEND_SUCCESSFULLY_STATES, begin); - } - private void checkParam(PendingMessageTemporarilyStatisticReq request) { if (Objects.isNull(request) || Objects.isNull(request.getIdentifyId())) { @@ -382,10 +365,6 @@ public class PendingMessageServiceImpl implements PendingMessageService { .orElse(MsgTempBizCategoryEnum.PENDING_TASK); } - private MessageRouterInfoRes getRouter(MessageRecord msgRecord, String systemType) { - return listRouters(Lists.newArrayList(msgRecord), systemType).get(msgRecord.getId()); - } - private Map listRouters(Collection msgRecords, String systemType) { final Set relationIds = msgRecords.stream().map(MessageRecord::getRelationId).collect(Collectors.toSet()); Map> rawRouterMap = messageRouterService.listRoutersByRelationIds(relationIds).stream() @@ -482,24 +461,6 @@ public class PendingMessageServiceImpl implements PendingMessageService { return MsgRouteTypeEnum.WEB; } - private MessageRecord selectOne(Long personId, Long identifyId, Collection identifyTypes, - Collection relationIds, Collection states, - LocalDateTime queryFrom) { - List records = messageRecordDao.lambdaQuery() - .eq(MessageRecord::getType, MsgTypeEnum.PENDING_MESSAGE) - .eq(Objects.nonNull(personId), MessageRecord::getPersonId, personId) - .eq(Objects.nonNull(identifyId), MessageRecord::getToId, identifyId) - .in(CollectionUtils.isNotEmpty(identifyTypes), MessageRecord::getReceiveType, identifyTypes) - .in(CollectionUtils.isNotEmpty(states), MessageRecord::getState, states) - .in(CollectionUtils.isNotEmpty(relationIds), MessageRecord::getRelationId, relationIds) - .ge(Objects.nonNull(queryFrom), MessageRecord::getCreateAt, queryFrom) - .eq(MessageRecord::getIsDelete, YesNoEnum.NO.getCode()) - .orderByDesc(MessageRecord::getCreateAt) - .last("LIMIT 1") - .list(); - return CollectionUtils.isEmpty(records) ? null : records.get(0); - } - private IPage page(Long personId, Long identifyId, Collection identifyTypes, Collection relationIds, Collection states, LocalDateTime queryFrom, IPage page) { diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java index 74d94bf8..12b49cb1 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/MessageTemplateNewService.java @@ -92,4 +92,12 @@ public interface MessageTemplateNewService { * @return 模板列表 */ List listByCodes(Collection templateCodes); + + /** + * 通过模板id获取对应的模板编码 + * + * @param ids 模板id列表 + * @return 模板编码列表 + */ + List listTemplateCodesByIds(Collection ids); } 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 56897ad8..079e04c7 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 @@ -2,7 +2,6 @@ package cn.axzo.msg.center.message.service; import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO; import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO; -import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO; 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; @@ -10,8 +9,10 @@ import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; 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; +import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO; import cn.azxo.framework.common.model.Page; +import java.util.Collection; import java.util.List; import java.util.Optional; @@ -40,6 +41,15 @@ public interface PendingMessageNewService { */ Integer countUncompleted(MessageGroupNodeStatisticParam param); + /** + * 根据模板id列表统计指定的自然人的待办数量 + * + * @param personId 自然人id + * @param templateIds 模板id列表 + * @return 指定的人的待办数量 + */ + Integer countUncompleted(Long personId, Collection templateIds); + /** * 代办列表分页查询 * diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java index 515f68d7..fc2a1034 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateNewServiceImpl.java @@ -231,6 +231,20 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService .collect(Collectors.toList()); } + @Override + public List listTemplateCodesByIds(Collection ids) { + if (CollectionUtils.isEmpty(ids)) { + log.info("ids is empty."); + return Collections.emptyList(); + } + return messageBaseTemplateDao.lambdaQuery() + .in(MessageBaseTemplate::getIsDelete, ids) + .select(MessageBaseTemplate::getCode) + .list().stream() + .map(MessageBaseTemplate::getCode) + .collect(Collectors.toList()); + } + private String saveTemplate(MessageTemplateSaveOrUpdateParam param) { String templateCode = UUIDUtil.uuidString(); MessageBaseTemplate template = convert(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 647450ef..72b00035 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 @@ -13,8 +13,6 @@ import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO; import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO; import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO; import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO; -import cn.axzo.msg.center.service.pending.request.CompleteMessageRequest; -import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO; import cn.axzo.msg.center.message.domain.param.MessageGroupNodeStatisticParam; import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam; import cn.axzo.msg.center.message.service.MessageGroupNodeService; @@ -32,9 +30,11 @@ 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.PendingMessagePageRequest; 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.PushPendingMessageDTO; import cn.axzo.msg.center.utils.JSONObjectUtil; import cn.axzo.msg.center.utils.MessageCardUtil; import cn.axzo.msg.center.utils.MessageRouterUtil; @@ -95,6 +95,25 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService { return doStatistic(leafNodePaths, param); } + @Override + public Integer countUncompleted(Long personId, Collection templateIds) { + if (Objects.isNull(personId) || CollectionUtils.isEmpty(templateIds)) { + log.info("the personId is null or templateIds is empty. personId:[{}], templateIds:{}", personId, templateIds); + return 0; + } + List templateCodes = messageTemplateNewService.listTemplateCodesByIds(templateIds); + if (CollectionUtils.isEmpty(templateCodes)) { + log.info("the templateCodes is empty. templateIds:{}", templateIds); + return 0; + } + PersonDTO operator = PersonDTO.builder().id(personId).build(); + LambdaQueryChainWrapper query = pendingMessageRecordDao.lambdaQuery() + .in(PendingMessageRecord::getTemplateCode, templateCodes) + .eq(PendingMessageRecord::getState, PendingMessageStateEnum.HAS_BEEN_SENT); + buildPersonCondition(query, false, PendingMessageRoleCategoryEnum.EXECUTOR, operator); + return query.count(); + } + @Override public Page pageQuery(PendingMessagePageRequest request) { PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());