Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev

This commit is contained in:
luofu 2023-11-16 13:45:02 +08:00
commit 97ff8f343b
5 changed files with 60 additions and 48 deletions

View File

@ -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<PendingMessageTemporarilyStatisticRes> temporarilyStatistic(PendingMessageTemporarilyStatisticReq request) {
// 参数检测
checkParam(request);
// 获取数据冷热隔离的分界
final LocalDateTime queryFrom = getQueryFromTime();
final List<MsgTempBizCategoryConfig> 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<ReceiveTypeEnum> identifyTypes,
LocalDateTime begin) {
Set<Long> 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<Long> relationIds,
Collection<ReceiveTypeEnum> 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<Long, MessageRouterInfoRes> listRouters(Collection<MessageRecord> msgRecords, String systemType) {
final Set<Long> relationIds = msgRecords.stream().map(MessageRecord::getRelationId).collect(Collectors.toSet());
Map<Long, List<MessageRouter>> 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<ReceiveTypeEnum> identifyTypes,
Collection<Long> relationIds, Collection<MsgStateEnum> states,
LocalDateTime queryFrom) {
List<MessageRecord> 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<MessageRecord> page(Long personId, Long identifyId, Collection<ReceiveTypeEnum> identifyTypes,
Collection<Long> relationIds, Collection<MsgStateEnum> states,
LocalDateTime queryFrom, IPage<MessageRecord> page) {

View File

@ -92,4 +92,12 @@ public interface MessageTemplateNewService {
* @return 模板列表
*/
List<MessageTemplatePageResponse> listByCodes(Collection<String> templateCodes);
/**
* 通过模板id获取对应的模板编码
*
* @param ids 模板id列表
* @return 模板编码列表
*/
List<String> listTemplateCodesByIds(Collection<Long> ids);
}

View File

@ -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<Long> templateIds);
/**
* 代办列表分页查询
*

View File

@ -231,6 +231,20 @@ public class MessageTemplateNewServiceImpl implements MessageTemplateNewService
.collect(Collectors.toList());
}
@Override
public List<String> listTemplateCodesByIds(Collection<Long> 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);

View File

@ -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<Long> 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<String> 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<PendingMessageRecord> 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<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());