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.MessageRouterService;
|
||||||
import cn.axzo.msg.center.inside.notices.service.PendingMessageService;
|
import cn.axzo.msg.center.inside.notices.service.PendingMessageService;
|
||||||
import cn.axzo.msg.center.inside.notices.utils.MessageRecordHelper;
|
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.enums.ReturnCodeEnum;
|
||||||
import cn.axzo.msg.center.notices.common.exception.BizException;
|
import cn.axzo.msg.center.notices.common.exception.BizException;
|
||||||
import cn.azxo.framework.common.model.Page;
|
import cn.azxo.framework.common.model.Page;
|
||||||
@ -99,13 +100,12 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
private final MessageModuleService messageModuleService;
|
private final MessageModuleService messageModuleService;
|
||||||
private final MessageRelationService messageRelationService;
|
private final MessageRelationService messageRelationService;
|
||||||
private final PendingMessageBizConfig pendingMessageBizConfig;
|
private final PendingMessageBizConfig pendingMessageBizConfig;
|
||||||
|
private final PendingMessageNewService pendingMessageNewService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<PendingMessageTemporarilyStatisticRes> temporarilyStatistic(PendingMessageTemporarilyStatisticReq request) {
|
public List<PendingMessageTemporarilyStatisticRes> temporarilyStatistic(PendingMessageTemporarilyStatisticReq request) {
|
||||||
// 参数检测
|
// 参数检测
|
||||||
checkParam(request);
|
checkParam(request);
|
||||||
// 获取数据冷热隔离的分界
|
|
||||||
final LocalDateTime queryFrom = getQueryFromTime();
|
|
||||||
final List<MsgTempBizCategoryConfig> categoryConfigs = pendingMessageBizConfig.tempCategoriesConfig();
|
final List<MsgTempBizCategoryConfig> categoryConfigs = pendingMessageBizConfig.tempCategoriesConfig();
|
||||||
if (CollectionUtils.isEmpty(categoryConfigs)) {
|
if (CollectionUtils.isEmpty(categoryConfigs)) {
|
||||||
log.warn("the nacos config is lost......");
|
log.warn("the nacos config is lost......");
|
||||||
@ -115,7 +115,7 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
return categoryConfigs.stream()
|
return categoryConfigs.stream()
|
||||||
// 自然排序,前端仅做渲染,展示顺序的工作由后端配置
|
// 自然排序,前端仅做渲染,展示顺序的工作由后端配置
|
||||||
.sorted()
|
.sorted()
|
||||||
.map(e -> statisticAndPickFirst(request, e, SPECIFY_IDENTIFIES, queryFrom))
|
.map(e -> statistic(request, e))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("broke out some exception while statistic pending message.", e);
|
log.error("broke out some exception while statistic pending message.", e);
|
||||||
@ -288,13 +288,10 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
return module;
|
return module;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PendingMessageTemporarilyStatisticRes statisticAndPickFirst(PendingMessageTemporarilyStatisticReq request,
|
private PendingMessageTemporarilyStatisticRes statistic(PendingMessageTemporarilyStatisticReq request,
|
||||||
MsgTempBizCategoryConfig categoryConfig,
|
MsgTempBizCategoryConfig categoryConfig) {
|
||||||
Collection<ReceiveTypeEnum> identifyTypes,
|
|
||||||
LocalDateTime begin) {
|
|
||||||
Set<Long> relationIds = categoryConfig.getConfigRelationIds();
|
|
||||||
// 统计数量
|
// 统计数量
|
||||||
Integer count = doStatistic(request, relationIds, identifyTypes, begin);
|
Integer count = pendingMessageNewService.countUncompleted(request.getPersonId(), categoryConfig.getConfigRelationIds());
|
||||||
PendingMessageTemporarilyStatisticRes res = new PendingMessageTemporarilyStatisticRes();
|
PendingMessageTemporarilyStatisticRes res = new PendingMessageTemporarilyStatisticRes();
|
||||||
res.setUnCompletedCount(count);
|
res.setUnCompletedCount(count);
|
||||||
res.setCategoryCode(categoryConfig.getCategory().name());
|
res.setCategoryCode(categoryConfig.getCategory().name());
|
||||||
@ -303,24 +300,10 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
if (StringUtils.isNotBlank(categoryConfig.getJumpUrl())) {
|
if (StringUtils.isNotBlank(categoryConfig.getJumpUrl())) {
|
||||||
// 分类指定了具体的跳转地址,则优先使用其指定的地址,这里指定为原生APP
|
// 分类指定了具体的跳转地址,则优先使用其指定的地址,这里指定为原生APP
|
||||||
res.setRouter(new MessageRouterInfoRes(NativeTypeEnum.H5.getMessage(), categoryConfig.getJumpUrl(), ""));
|
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;
|
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) {
|
private void checkParam(PendingMessageTemporarilyStatisticReq request) {
|
||||||
if (Objects.isNull(request)
|
if (Objects.isNull(request)
|
||||||
|| Objects.isNull(request.getIdentifyId())) {
|
|| Objects.isNull(request.getIdentifyId())) {
|
||||||
@ -382,10 +365,6 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
.orElse(MsgTempBizCategoryEnum.PENDING_TASK);
|
.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) {
|
private Map<Long, MessageRouterInfoRes> listRouters(Collection<MessageRecord> msgRecords, String systemType) {
|
||||||
final Set<Long> relationIds = msgRecords.stream().map(MessageRecord::getRelationId).collect(Collectors.toSet());
|
final Set<Long> relationIds = msgRecords.stream().map(MessageRecord::getRelationId).collect(Collectors.toSet());
|
||||||
Map<Long, List<MessageRouter>> rawRouterMap = messageRouterService.listRoutersByRelationIds(relationIds).stream()
|
Map<Long, List<MessageRouter>> rawRouterMap = messageRouterService.listRoutersByRelationIds(relationIds).stream()
|
||||||
@ -482,24 +461,6 @@ public class PendingMessageServiceImpl implements PendingMessageService {
|
|||||||
return MsgRouteTypeEnum.WEB;
|
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,
|
private IPage<MessageRecord> page(Long personId, Long identifyId, Collection<ReceiveTypeEnum> identifyTypes,
|
||||||
Collection<Long> relationIds, Collection<MsgStateEnum> states,
|
Collection<Long> relationIds, Collection<MsgStateEnum> states,
|
||||||
LocalDateTime queryFrom, IPage<MessageRecord> page) {
|
LocalDateTime queryFrom, IPage<MessageRecord> page) {
|
||||||
|
|||||||
@ -92,4 +92,12 @@ public interface MessageTemplateNewService {
|
|||||||
* @return 模板列表
|
* @return 模板列表
|
||||||
*/
|
*/
|
||||||
List<MessageTemplatePageResponse> listByCodes(Collection<String> templateCodes);
|
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.PendingMessageDTO;
|
||||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
|
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.MessageGroupNodeStatisticParam;
|
||||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
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.PendingMessagePageRequest;
|
||||||
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
|
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.PendingMessageResponse;
|
||||||
|
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
|
||||||
import cn.azxo.framework.common.model.Page;
|
import cn.azxo.framework.common.model.Page;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
@ -40,6 +41,15 @@ public interface PendingMessageNewService {
|
|||||||
*/
|
*/
|
||||||
Integer countUncompleted(MessageGroupNodeStatisticParam param);
|
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());
|
.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) {
|
private String saveTemplate(MessageTemplateSaveOrUpdateParam param) {
|
||||||
String templateCode = UUIDUtil.uuidString();
|
String templateCode = UUIDUtil.uuidString();
|
||||||
MessageBaseTemplate template = convert(param);
|
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.MessageTemplateRouterDTO;
|
||||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
import cn.axzo.msg.center.message.domain.dto.PendingMessageDTO;
|
||||||
import cn.axzo.msg.center.message.domain.dto.PendingMessageStatisticDTO;
|
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.MessageGroupNodeStatisticParam;
|
||||||
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
|
||||||
import cn.axzo.msg.center.message.service.MessageGroupNodeService;
|
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.PendingMessageRoleCategoryEnum;
|
||||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
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.PendingMessagePageRequest;
|
||||||
import cn.axzo.msg.center.service.pending.request.PendingMessageQueryRequest;
|
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.PendingMessageResponse;
|
||||||
|
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
|
||||||
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
||||||
import cn.axzo.msg.center.utils.MessageCardUtil;
|
import cn.axzo.msg.center.utils.MessageCardUtil;
|
||||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||||
@ -95,6 +95,25 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
return doStatistic(leafNodePaths, param);
|
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
|
@Override
|
||||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||||
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user