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:
罗福 2023-10-07 10:10:35 +00:00
commit 8bb6ff846b
4 changed files with 122 additions and 62 deletions

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);

View File

@ -84,8 +84,6 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
*/
private Collection<QueryOrderByDTO> orderFields;
@Override
public String toString() {
return JSON.toJSONString(this);