Merge branch 'feature/REQ-1309' into 'dev'
feat(REQ-1309): 代办分页查询调整 See merge request universal/infrastructure/backend/msg-center-plat!44
This commit is contained in:
commit
8bb6ff846b
@ -19,6 +19,7 @@ import cn.axzo.msg.center.message.service.PendingMessageNewService;
|
||||
import cn.axzo.msg.center.service.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
|
||||
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
||||
@ -27,6 +28,7 @@ import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
|
||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||
import cn.axzo.msg.center.utils.OrderFieldParseUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
@ -40,6 +42,7 @@ import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
@ -74,38 +77,22 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
@Override
|
||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery();
|
||||
if (Objects.equals(request.getRoleCategory(), PendingMessageRoleCategoryEnum.PROMOTER)) {
|
||||
// 客户端指定查询代办发起者的代办消息
|
||||
query.eq(PendingMessageRecord::getPromoterPersonId, request.getPersonId());
|
||||
if (Objects.equals(request.getWithIdentify(), true)) {
|
||||
// 客户端查询消息时需要隔离身份
|
||||
query.eq(Objects.nonNull(request.getIdentityId()), PendingMessageRecord::getPromoterId,
|
||||
request.getIdentityId());
|
||||
query.eq(Objects.nonNull(request.getIdentityType()), PendingMessageRecord::getPromoterType,
|
||||
request.getIdentityType());
|
||||
}
|
||||
} else {
|
||||
// 客户端未指定代办角色,默认查询代办执行者的代办消息
|
||||
query.eq(PendingMessageRecord::getExecutorPersonId, request.getPersonId());
|
||||
if (Objects.equals(request.getWithIdentify(), true)) {
|
||||
// 客户端查询消息时需要隔离身份
|
||||
query.eq(Objects.nonNull(request.getIdentityId()), PendingMessageRecord::getExecutorId,
|
||||
request.getIdentityId());
|
||||
query.eq(Objects.nonNull(request.getIdentityType()), PendingMessageRecord::getExecutorType,
|
||||
request.getIdentityType());
|
||||
}
|
||||
}
|
||||
query.eq(Objects.nonNull(request.getMsgState()), PendingMessageRecord::getState, request.getMsgState());
|
||||
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
||||
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery()
|
||||
.eq(Objects.nonNull(request.getMsgState()), PendingMessageRecord::getState, request.getMsgState())
|
||||
.like(StringUtils.isNotBlank(request.getTitle()), PendingMessageRecord::getTitle, request.getTitle())
|
||||
.eq(PendingMessageRecord::getIsDelete, 0);
|
||||
// 构建人维度的查询条件
|
||||
buildPersonCondition(query, request.getWithIdentify(), request.getRoleCategory(), operator);
|
||||
// 模板的分类,对代办进行分组过滤
|
||||
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
||||
List<String> templateCodes = messageTemplateGroupService
|
||||
.listMessageTemplateCodes(request.getGroupNodeCode());
|
||||
query.in(CollectionUtils.isNotEmpty(templateCodes), PendingMessageRecord::getTemplateCode, templateCodes);
|
||||
}
|
||||
query.like(StringUtils.isNotBlank(request.getTitle()), PendingMessageRecord::getTitle, request.getTitle());
|
||||
// TODO:[cold_blade] [P2] 排序优化
|
||||
query.orderByDesc(PendingMessageRecord::getCreateAt);
|
||||
// 构建排序条件
|
||||
buildSortCondition(query, request.getOrderFields());
|
||||
|
||||
IPage<PendingMessageRecord> page = request.toPage();
|
||||
IPage<PendingMessageRecord> result = query.page(page);
|
||||
List<String> templateCodes = result.getRecords().stream().map(PendingMessageRecord::getTemplateCode)
|
||||
@ -205,40 +192,6 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
return pendingMessage;
|
||||
}
|
||||
|
||||
private PendingMessageRecord convert(PendingMessagePushParam param, MessageTemplateDTO msgTemplate) {
|
||||
// TODO: [cold_blade] [P2] 待优化
|
||||
String content = msgTemplate.getContent();
|
||||
if (StringUtils.isNotBlank(param.getRouterParams())) {
|
||||
content = PlaceholderResolver
|
||||
.getDefaultResolver().resolve(content, JSON.parseObject(param.getRouterParams()));
|
||||
}
|
||||
PendingMessageRecord record = new PendingMessageRecord();
|
||||
record.setIdentityCode(UUIDUtil.uuidString());
|
||||
record.setPromoterId(param.getPromoter().getIdentity().getId());
|
||||
record.setPromoterType(param.getPromoter().getIdentity().getType());
|
||||
record.setPromoterPersonId(param.getPromoter().getId());
|
||||
record.setExecutorId(param.getExecutor().getIdentity().getId());
|
||||
record.setExecutorType(param.getExecutor().getIdentity().getType());
|
||||
record.setExecutorPersonId(param.getExecutor().getId());
|
||||
record.setTemplateCode(param.getTemplateCode());
|
||||
record.setTitle(msgTemplate.getTitle());
|
||||
record.setContent(content);
|
||||
record.setOrgType(Objects.isNull(param.getOrgType()) ? OrganizationTypeEnum.UNKNOWN : param.getOrgType());
|
||||
record.setOrgId(param.getOrgId());
|
||||
record.setOrgName(param.getOrgName());
|
||||
record.setState(PendingMessageStateEnum.HAS_BEEN_SENT);
|
||||
record.setBizCategory(param.getBizCategory());
|
||||
record.setBizCode(param.getBizCode());
|
||||
record.setSubBizCode(param.getSubBizCode());
|
||||
record.setBizDesc(param.getBizDesc());
|
||||
record.setRouterParams(param.getRouterParams());
|
||||
Date now = new Date();
|
||||
record.setCreateAt(now);
|
||||
record.setUpdateAt(now);
|
||||
record.setIsDelete(0);
|
||||
return record;
|
||||
}
|
||||
|
||||
private List<MessageGroupNodeDTO> statistic(String rootNodeCode, MessageGroupNodeStatisticParam param) {
|
||||
MessageGroupNodeDTO groupNode = messageGroupService.queryByNodeCode(rootNodeCode)
|
||||
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
||||
@ -300,4 +253,69 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
query.eq(identityTypeFunc, identity.getType());
|
||||
}
|
||||
}
|
||||
|
||||
private void buildSortCondition(LambdaQueryChainWrapper<PendingMessageRecord> query,
|
||||
Collection<QueryOrderByDTO> orderFields) {
|
||||
if (CollectionUtils.isEmpty(orderFields)) {
|
||||
return;
|
||||
}
|
||||
orderFields.stream()
|
||||
.filter(e -> OrderFieldParseUtil.containsPendingMessageRecordOrderField(e.getOrderField()))
|
||||
.forEach(e -> {
|
||||
if (e.getIsAsc()) {
|
||||
query.orderByAsc(OrderFieldParseUtil.parsePendingMessageRecordOrderField(e.getOrderField()));
|
||||
} else {
|
||||
query.orderByDesc(OrderFieldParseUtil.parsePendingMessageRecordOrderField(e.getOrderField()));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private PendingMessageRecord convert(PendingMessagePushParam param, MessageTemplateDTO msgTemplate) {
|
||||
PendingMessageRecord record = new PendingMessageRecord();
|
||||
record.setIdentityCode(UUIDUtil.uuidString());
|
||||
record.setState(PendingMessageStateEnum.HAS_BEEN_SENT);
|
||||
// 构建代办记录的人维度的相关信息
|
||||
buildPersonInfo(record, param.getPromoter(), param.getExecutor());
|
||||
// 构建模板信息
|
||||
buildTemplateInfo(record, msgTemplate, param.getRouterParams());
|
||||
// 构建代办所属企业/项目等相关信息
|
||||
record.setOrgType(Objects.isNull(param.getOrgType()) ? OrganizationTypeEnum.UNKNOWN : param.getOrgType());
|
||||
record.setOrgId(param.getOrgId());
|
||||
record.setOrgName(param.getOrgName());
|
||||
// 构建业务类信息
|
||||
record.setBizCode(param.getBizCode());
|
||||
record.setSubBizCode(param.getSubBizCode());
|
||||
record.setBizDesc(param.getBizDesc());
|
||||
record.setBizCategory(param.getBizCategory());
|
||||
// TODO: [cold_blade] [P3] 默认字段需要传值的问题
|
||||
Date now = new Date();
|
||||
record.setCreateAt(now);
|
||||
record.setUpdateAt(now);
|
||||
record.setIsDelete(0);
|
||||
return record;
|
||||
}
|
||||
|
||||
private void buildPersonInfo(PendingMessageRecord record, PersonDTO promoter, PersonDTO executor) {
|
||||
record.setPromoterId(promoter.getIdentity().getId());
|
||||
record.setPromoterType(promoter.getIdentity().getType());
|
||||
record.setPromoterPersonId(promoter.getId());
|
||||
record.setExecutorId(executor.getIdentity().getId());
|
||||
record.setExecutorType(executor.getIdentity().getType());
|
||||
record.setExecutorPersonId(executor.getId());
|
||||
}
|
||||
|
||||
private void buildTemplateInfo(PendingMessageRecord record, MessageTemplateDTO msgTemplate, String routeParam) {
|
||||
String title = msgTemplate.getTitle();
|
||||
String content = msgTemplate.getContent();
|
||||
if (StringUtils.isNotBlank(routeParam)) {
|
||||
title = PlaceholderResolver
|
||||
.getDefaultResolver().resolve(title, JSON.parseObject(routeParam));
|
||||
content = PlaceholderResolver
|
||||
.getDefaultResolver().resolve(content, JSON.parseObject(routeParam));
|
||||
}
|
||||
record.setTitle(title);
|
||||
record.setContent(content);
|
||||
record.setTemplateCode(msgTemplate.getCode());
|
||||
record.setRouterParams(routeParam);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package cn.axzo.msg.center.utils;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 排序字段的解析管理
|
||||
*
|
||||
* @author cold_blade
|
||||
* @date 2023/10/7
|
||||
* @version 1.0
|
||||
*/
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public final class OrderFieldParseUtil {
|
||||
|
||||
private static final ImmutableMap<String, SFunction<PendingMessageRecord, ?>>
|
||||
PENDING_MESSAGE_RECORD_ORDER_FIELD = ImmutableMap.<String, SFunction<PendingMessageRecord, ?>>builder()
|
||||
.put("createTimestamp", PendingMessageRecord::getCreateAt)
|
||||
.put("updateTimestamp", PendingMessageRecord::getUpdateAt)
|
||||
.build();
|
||||
|
||||
public static boolean containsPendingMessageRecordOrderField(String orderField) {
|
||||
return PENDING_MESSAGE_RECORD_ORDER_FIELD.containsKey(orderField);
|
||||
}
|
||||
|
||||
public static SFunction<PendingMessageRecord, ?> parsePendingMessageRecordOrderField(String orderField) {
|
||||
return PENDING_MESSAGE_RECORD_ORDER_FIELD.get(orderField);
|
||||
}
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package cn.axzo.msg.center.service.dto;
|
||||
|
||||
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
@ -34,6 +35,17 @@ public class PersonDTO implements Serializable {
|
||||
*/
|
||||
private IdentityDTO identity;
|
||||
|
||||
public static PersonDTO from(Long personId, Long identityId, IdentityTypeEnum identityType) {
|
||||
IdentityDTO identity = IdentityDTO.builder()
|
||||
.id(identityId)
|
||||
.type(identityType)
|
||||
.build();
|
||||
return PersonDTO.builder()
|
||||
.id(personId)
|
||||
.identity(identity)
|
||||
.build();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
|
||||
@ -84,8 +84,6 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
||||
*/
|
||||
private Collection<QueryOrderByDTO> orderFields;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user