Merge branch 'feature/REQ-1465' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
f2d4f89574
@ -6,6 +6,7 @@ import cn.axzo.msg.center.domain.dto.SearchModuleDTO;
|
||||
import cn.axzo.msg.center.domain.dto.SyncModuleDataDTO;
|
||||
import cn.axzo.msg.center.domain.dto.UpdateModuleDTO;
|
||||
import cn.axzo.msg.center.domain.entity.MessageModule;
|
||||
import cn.axzo.msg.center.domain.enums.ModuleBizTypeEnum;
|
||||
import cn.axzo.msg.center.domain.enums.UserTypeEnum;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
|
||||
@ -51,4 +52,12 @@ public interface MessageModuleService {
|
||||
* @return 对应的模块列表
|
||||
*/
|
||||
List<MessageModule> listByModuleName(String moduleName);
|
||||
|
||||
/**
|
||||
* 通过bizType查询模块id列表
|
||||
*
|
||||
* @param bizType 业务类型
|
||||
* @return 模块id列表
|
||||
*/
|
||||
List<Long> listModuleIdByBizType(ModuleBizTypeEnum bizType);
|
||||
}
|
||||
|
||||
@ -3,7 +3,11 @@ package cn.axzo.msg.center.inside.notices.service.impl;
|
||||
import cn.axzo.basics.common.constant.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.msg.center.api.enums.ReceiveTypeEnum;
|
||||
import cn.axzo.msg.center.dal.MessageModuleDao;
|
||||
import cn.axzo.msg.center.domain.dto.*;
|
||||
import cn.axzo.msg.center.domain.dto.CreateModuleDTO;
|
||||
import cn.axzo.msg.center.domain.dto.MsgModuleDTO;
|
||||
import cn.axzo.msg.center.domain.dto.SearchModuleDTO;
|
||||
import cn.axzo.msg.center.domain.dto.SyncModuleDataDTO;
|
||||
import cn.axzo.msg.center.domain.dto.UpdateModuleDTO;
|
||||
import cn.axzo.msg.center.domain.entity.MessageModule;
|
||||
import cn.axzo.msg.center.domain.enums.ModuleBizTypeEnum;
|
||||
import cn.axzo.msg.center.domain.enums.UserTypeEnum;
|
||||
@ -20,7 +24,12 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -179,4 +188,19 @@ public class MessageModuleServiceImpl implements MessageModuleService {
|
||||
.filter(e -> Objects.equals(e.getModuleName(), moduleName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listModuleIdByBizType(ModuleBizTypeEnum bizType) {
|
||||
if (Objects.isNull(bizType)) {
|
||||
log.info("bizType is null.");
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return messageModuleDao.lambdaQuery()
|
||||
.eq(MessageModule::getBizType, bizType.getCode())
|
||||
.eq(MessageModule::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.select(MessageModule::getId)
|
||||
.list().stream()
|
||||
.map(MessageModule::getId)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
||||
|
||||
@ -24,7 +24,13 @@ import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
|
||||
@ -0,0 +1,46 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import cn.axzo.msg.center.api.request.CmsMsgQueryReq;
|
||||
import cn.axzo.msg.center.api.response.MessageNewRes;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 旧普通消息的相关接口
|
||||
*
|
||||
* @author cold_blade
|
||||
* @date 2023/10/24
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface GeneralMessageOldService {
|
||||
|
||||
/**
|
||||
* 统计未读的消息数量
|
||||
* 注: 该接口作为IM进入旧消息模块的入口,需要过滤双发至IM的消息
|
||||
*
|
||||
* @param person 身份信息
|
||||
* @return 未读消息数量
|
||||
*/
|
||||
int countUnread(PersonDTO person);
|
||||
|
||||
/**
|
||||
* 统计未读的消息数量
|
||||
* 注: 该接口作为IM进入旧消息模块的入口,需要过滤双发至IM的消息
|
||||
*
|
||||
* @param person 身份信息
|
||||
* @param excludeMsgIds 待排除的消息记录id
|
||||
* @return 未读消息数量
|
||||
*/
|
||||
int countUnread(PersonDTO person, List<Long> excludeMsgIds);
|
||||
|
||||
/**
|
||||
* 分页查询旧的普通消息记录
|
||||
* 注: 该接口作为IM进入旧消息模块的入口,需要过滤双发至IM的消息
|
||||
*
|
||||
* @param request 分页查询参数
|
||||
* @return 过滤后的旧的普通消息记录
|
||||
*/
|
||||
Page<MessageNewRes> pageMsgInfo(CmsMsgQueryReq request);
|
||||
}
|
||||
@ -0,0 +1,82 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.basics.common.util.AssertUtil;
|
||||
import cn.axzo.core.domain.PageResult;
|
||||
import cn.axzo.msg.center.api.enums.MsgStateEnum;
|
||||
import cn.axzo.msg.center.api.enums.MsgTypeEnum;
|
||||
import cn.axzo.msg.center.api.request.CmsMsgQueryReq;
|
||||
import cn.axzo.msg.center.api.response.MessageNewRes;
|
||||
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.msg.center.dal.MessageRecordDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageRecord;
|
||||
import cn.axzo.msg.center.domain.enums.ModuleBizTypeEnum;
|
||||
import cn.axzo.msg.center.inside.notices.service.MessageCoreService;
|
||||
import cn.axzo.msg.center.inside.notices.service.MessageModuleService;
|
||||
import cn.axzo.msg.center.inside.notices.service.MessageRelationService;
|
||||
import cn.axzo.msg.center.message.service.GeneralMessageOldService;
|
||||
import cn.axzo.msg.center.message.service.MessageSendTwiceRecordService;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.utils.PersonIdentityUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/10/24
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class GeneralMessageOldServiceImpl implements GeneralMessageOldService {
|
||||
|
||||
private final MessageRecordDao messageRecordDao;
|
||||
private final MessageCoreService messageCoreService;
|
||||
private final MessageModuleService messageModuleService;
|
||||
private final MessageRelationService messageRelationService;
|
||||
private final MessageSendTwiceRecordService messageSendTwiceRecordService;
|
||||
|
||||
@Override
|
||||
public int countUnread(PersonDTO person) {
|
||||
AssertUtil.isTrue(Objects.nonNull(person) && person.isValid(),
|
||||
"session 异常, 无法执行消息统计查询!, person : " + person);
|
||||
List<Long> sendTwiceMsgIds = messageSendTwiceRecordService.listByPerson(person.getId());
|
||||
return countUnread(person, sendTwiceMsgIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int countUnread(PersonDTO person, List<Long> excludeMsgIds) {
|
||||
List<Long> moduleIds = messageModuleService.listModuleIdByBizType(ModuleBizTypeEnum.CONSTRUCTION);
|
||||
List<Long> relationIds = messageRelationService.listRelationIds(moduleIds);
|
||||
if (CollectionUtils.isEmpty(relationIds)) {
|
||||
log.info("the is not any valid relation id.");
|
||||
return 0;
|
||||
}
|
||||
return messageRecordDao.lambdaQuery()
|
||||
.eq(MessageRecord::getType, MsgTypeEnum.GENERAL_MESSAGE)
|
||||
.in(MessageRecord::getState, MsgStateEnum.unreadStates())
|
||||
.eq(MessageRecord::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.eq(MessageRecord::getToId, person.getIdentity().getId())
|
||||
.eq(MessageRecord::getReceiveType, PersonIdentityUtil.toReceiveType(person.getIdentity().getType()))
|
||||
.in(MessageRecord::getRelationId, relationIds)
|
||||
// 排除双发记录表中的数据
|
||||
.notIn(CollectionUtils.isNotEmpty(excludeMsgIds), MessageRecord::getId, excludeMsgIds)
|
||||
.count();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<MessageNewRes> pageMsgInfo(CmsMsgQueryReq request) {
|
||||
log.info("start to page query general message. request:{}", request);
|
||||
if (CollectionUtils.isEmpty(request.getExcludeMsgIds())) {
|
||||
request.setExcludeMsgIds(messageSendTwiceRecordService.listByPerson(request.getPersonId()));
|
||||
}
|
||||
PageResult<MessageNewRes> pageResult = messageCoreService.listMsgInfo(request);
|
||||
return Page.toPage(request.getPage(), request.getPageSize(), pageResult.getTotalCount(), pageResult.getData());
|
||||
}
|
||||
}
|
||||
@ -1,12 +1,10 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.core.domain.PageResult;
|
||||
import cn.axzo.im.center.api.feign.MessageApi;
|
||||
import cn.axzo.im.center.api.vo.req.MessageInfo;
|
||||
import cn.axzo.im.center.common.enums.AppTypeEnum;
|
||||
import cn.axzo.msg.center.api.request.CmsMsgQueryReq;
|
||||
import cn.axzo.msg.center.api.response.MessageNewRes;
|
||||
import cn.axzo.msg.center.api.response.MessageTotalRes;
|
||||
import cn.axzo.msg.center.common.exception.ServiceException;
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
import cn.axzo.msg.center.dal.GeneralMessageRecordDao;
|
||||
@ -16,7 +14,9 @@ import cn.axzo.msg.center.inside.notices.service.MessageRecordService;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.RawMessageRouterDTO;
|
||||
import cn.axzo.msg.center.message.domain.vo.GeneralMessagePushVO;
|
||||
import cn.axzo.msg.center.message.service.GeneralMessageOldService;
|
||||
import cn.axzo.msg.center.message.service.GeneralMessageService;
|
||||
import cn.axzo.msg.center.message.service.MessageSendTwiceRecordService;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
|
||||
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageRouterButtonDTO;
|
||||
@ -30,6 +30,7 @@ import cn.axzo.msg.center.service.general.response.GeneralMessageOldDataStatisti
|
||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||
import cn.axzo.msg.center.utils.PersonIdentityUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
@ -67,7 +68,9 @@ public class GeneralMessageServiceImpl implements GeneralMessageService {
|
||||
private final MessageApi messageApi;
|
||||
private final MessageRecordService messageRecordService;
|
||||
private final GeneralMessageRecordDao generalMessageRecordDao;
|
||||
private final GeneralMessageOldService generalMessageOldService;
|
||||
private final MessageTemplateNewService messageTemplateNewService;
|
||||
private final MessageSendTwiceRecordService messageSendTwiceRecordService;
|
||||
|
||||
@Override
|
||||
public String batchSendMessage(GeneralMessageSendRequest request) {
|
||||
@ -84,23 +87,17 @@ public class GeneralMessageServiceImpl implements GeneralMessageService {
|
||||
|
||||
@Override
|
||||
public GeneralMessageOldDataStatisticResponse statisticOldData(GeneralMessageOldDataStatisticRequest request) {
|
||||
// TODO: [cold_blade] [P0] 统计旧数据接口实现
|
||||
UserTypeEnum userType = PersonIdentityUtil.toUserType(request.getIdentityType());
|
||||
CmsMsgQueryReq req = new CmsMsgQueryReq();
|
||||
req.setMsgType(MessageCategoryEnum.GENERAL_MESSAGE.getCode());
|
||||
// 这里查询消息中心全部状态的数据
|
||||
req.setMsgStatus(0);
|
||||
req.setPage(1L);
|
||||
req.setPageSize(1L);
|
||||
// TODO: [cold_blade] [P0] 需要排除IM中的消息
|
||||
PageResult<MessageNewRes> result = messageRecordService.pageMsgInfo(req, request.getPersonId(),
|
||||
request.getIdentityId(), userType);
|
||||
MessageTotalRes res = messageRecordService.statisticsMsg4Total(request.getPersonId(),
|
||||
request.getIdentityId(), userType);
|
||||
|
||||
MessageNewRes msg = CollectionUtils.isNotEmpty(result.getData()) ? result.getData().get(0) : null;
|
||||
// 查询双发的消息记录
|
||||
List<Long> sendTwiceMsgIds = messageSendTwiceRecordService.listByPerson(request.getPersonId());
|
||||
// 分页查询最新一条数据
|
||||
Page<MessageNewRes> result = generalMessageOldService.pageMsgInfo(build(request, sendTwiceMsgIds));
|
||||
// 统计旧的未读普通消息数量
|
||||
int count = generalMessageOldService.countUnread(PersonDTO.from(request.getPersonId(), request.getIdentityId(),
|
||||
request.getIdentityType()), sendTwiceMsgIds);
|
||||
// 编排组合成界面展示的数据结构
|
||||
MessageNewRes msg = CollectionUtils.isNotEmpty(result.getList()) ? result.getList().get(0) : null;
|
||||
return GeneralMessageOldDataStatisticResponse.builder()
|
||||
.unreadCount(res.getMsgTotal())
|
||||
.unreadCount(count)
|
||||
.latestMsgSendTimestamp(Optional.ofNullable(msg).map(v -> v.getCreateAt().getTime()).orElse(null))
|
||||
.latestMsgContent(Optional.ofNullable(msg).map(MessageNewRes::getContent).orElse(null))
|
||||
.build();
|
||||
@ -197,4 +194,19 @@ public class GeneralMessageServiceImpl implements GeneralMessageService {
|
||||
}
|
||||
return PlaceholderResolver.getDefaultResolver().resolveByMap(string, params);
|
||||
}
|
||||
|
||||
private CmsMsgQueryReq build(GeneralMessageOldDataStatisticRequest request, List<Long> excludeMsgIds) {
|
||||
UserTypeEnum userType = PersonIdentityUtil.toUserType(request.getIdentityType());
|
||||
CmsMsgQueryReq req = new CmsMsgQueryReq();
|
||||
req.setMsgType(MessageCategoryEnum.GENERAL_MESSAGE.getCode());
|
||||
// 这里查询消息中心全部状态的数据
|
||||
req.setMsgStatus(0);
|
||||
req.setPage(1L);
|
||||
req.setPageSize(1L);
|
||||
req.setPersonId(request.getPersonId());
|
||||
req.setIdentityId(request.getIdentityId());
|
||||
req.setUserType(userType.getValue());
|
||||
req.setExcludeMsgIds(excludeMsgIds);
|
||||
return req;
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,4 +43,17 @@ public class PersonIdentityUtil {
|
||||
return Optional.empty();
|
||||
}
|
||||
}
|
||||
|
||||
public static ReceiveTypeEnum toReceiveType(IdentityTypeEnum identityType) {
|
||||
switch (identityType) {
|
||||
case WORKER:
|
||||
return ReceiveTypeEnum.CM_WORKER;
|
||||
case WORKER_LEADER:
|
||||
return ReceiveTypeEnum.CM_LEADER;
|
||||
case PRACTITIONER:
|
||||
return ReceiveTypeEnum.CMP_USER;
|
||||
default:
|
||||
return ReceiveTypeEnum.NOT_IDENTITY;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -49,4 +49,11 @@ public enum MsgStateEnum {
|
||||
COMPLETE
|
||||
);
|
||||
}
|
||||
|
||||
public static List<MsgStateEnum> unreadStates() {
|
||||
return Lists.newArrayList(
|
||||
HAS_BEEN_SENT,
|
||||
RECEIVED
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.page.PageRequest;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author : liuchuntao
|
||||
@ -58,7 +59,8 @@ public class CmsMsgQueryReq extends PageRequest {
|
||||
*
|
||||
*/
|
||||
private Long identityId;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 待排除的消息id
|
||||
*/
|
||||
private List<Long> excludeMsgIds;
|
||||
}
|
||||
|
||||
@ -9,6 +9,7 @@ import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -46,6 +47,11 @@ public class PersonDTO implements Serializable {
|
||||
.build();
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
return Objects.nonNull(id) && id > 0
|
||||
&& Objects.nonNull(identity) && identity.isValid();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
|
||||
@ -66,7 +66,12 @@
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="req.excludeMsgIds != null and req.excludeMsgIds.size > 0">
|
||||
and record.id not in
|
||||
<foreach close=")" collection="req.excludeMsgIds" index="index" item="item" open="(" separator=",">
|
||||
#{item}
|
||||
</foreach>
|
||||
</if>
|
||||
and record.create_at > DATE_FORMAT((CURDATE() - INTERVAL 3 YEAR),'%Y-%m-%d')
|
||||
order by record.create_at desc,record.id desc
|
||||
</select>
|
||||
|
||||
@ -4,6 +4,7 @@ import cn.axzo.basics.common.page.PageRequest;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class CmsMsgQueryReqDTO extends PageRequest {
|
||||
@ -34,4 +35,8 @@ public class CmsMsgQueryReqDTO extends PageRequest {
|
||||
* 待办、消息模块类型Id - 针对待办使用
|
||||
*/
|
||||
private Long moduleId;
|
||||
/**
|
||||
* 待排除的消息id
|
||||
*/
|
||||
private List<Long> excludeMsgIds;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user