Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
97ff8f343b
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* 代办列表分页查询
|
||||
*
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user