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.IdentityDTO;
|
||||||
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
import cn.axzo.msg.center.service.dto.MessageRouterDTO;
|
||||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
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.IdentityTypeEnum;
|
||||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
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.request.PendingMessagePageRequest;
|
||||||
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
|
||||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||||
|
import cn.axzo.msg.center.utils.OrderFieldParseUtil;
|
||||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||||
import cn.azxo.framework.common.model.Page;
|
import cn.azxo.framework.common.model.Page;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
@ -40,6 +42,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -74,38 +77,22 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||||
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery();
|
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
||||||
if (Objects.equals(request.getRoleCategory(), PendingMessageRoleCategoryEnum.PROMOTER)) {
|
LambdaQueryChainWrapper<PendingMessageRecord> query = pendingMessageRecordDao.lambdaQuery()
|
||||||
// 客户端指定查询代办发起者的代办消息
|
.eq(Objects.nonNull(request.getMsgState()), PendingMessageRecord::getState, request.getMsgState())
|
||||||
query.eq(PendingMessageRecord::getPromoterPersonId, request.getPersonId());
|
.like(StringUtils.isNotBlank(request.getTitle()), PendingMessageRecord::getTitle, request.getTitle())
|
||||||
if (Objects.equals(request.getWithIdentify(), true)) {
|
.eq(PendingMessageRecord::getIsDelete, 0);
|
||||||
// 客户端查询消息时需要隔离身份
|
// 构建人维度的查询条件
|
||||||
query.eq(Objects.nonNull(request.getIdentityId()), PendingMessageRecord::getPromoterId,
|
buildPersonCondition(query, request.getWithIdentify(), request.getRoleCategory(), operator);
|
||||||
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());
|
|
||||||
// 模板的分类,对代办进行分组过滤
|
// 模板的分类,对代办进行分组过滤
|
||||||
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
||||||
List<String> templateCodes = messageTemplateGroupService
|
List<String> templateCodes = messageTemplateGroupService
|
||||||
.listMessageTemplateCodes(request.getGroupNodeCode());
|
.listMessageTemplateCodes(request.getGroupNodeCode());
|
||||||
query.in(CollectionUtils.isNotEmpty(templateCodes), PendingMessageRecord::getTemplateCode, templateCodes);
|
query.in(CollectionUtils.isNotEmpty(templateCodes), PendingMessageRecord::getTemplateCode, templateCodes);
|
||||||
}
|
}
|
||||||
query.like(StringUtils.isNotBlank(request.getTitle()), PendingMessageRecord::getTitle, request.getTitle());
|
// 构建排序条件
|
||||||
// TODO:[cold_blade] [P2] 排序优化
|
buildSortCondition(query, request.getOrderFields());
|
||||||
query.orderByDesc(PendingMessageRecord::getCreateAt);
|
|
||||||
IPage<PendingMessageRecord> page = request.toPage();
|
IPage<PendingMessageRecord> page = request.toPage();
|
||||||
IPage<PendingMessageRecord> result = query.page(page);
|
IPage<PendingMessageRecord> result = query.page(page);
|
||||||
List<String> templateCodes = result.getRecords().stream().map(PendingMessageRecord::getTemplateCode)
|
List<String> templateCodes = result.getRecords().stream().map(PendingMessageRecord::getTemplateCode)
|
||||||
@ -205,40 +192,6 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
return pendingMessage;
|
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) {
|
private List<MessageGroupNodeDTO> statistic(String rootNodeCode, MessageGroupNodeStatisticParam param) {
|
||||||
MessageGroupNodeDTO groupNode = messageGroupService.queryByNodeCode(rootNodeCode)
|
MessageGroupNodeDTO groupNode = messageGroupService.queryByNodeCode(rootNodeCode)
|
||||||
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
.orElseThrow(() -> new ServiceException("groupNodeCode is invalid."));
|
||||||
@ -300,4 +253,69 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
|||||||
query.eq(identityTypeFunc, identity.getType());
|
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;
|
package cn.axzo.msg.center.service.dto;
|
||||||
|
|
||||||
|
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
@ -34,6 +35,17 @@ public class PersonDTO implements Serializable {
|
|||||||
*/
|
*/
|
||||||
private IdentityDTO identity;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return JSON.toJSONString(this);
|
return JSON.toJSONString(this);
|
||||||
|
|||||||
@ -84,8 +84,6 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
|||||||
*/
|
*/
|
||||||
private Collection<QueryOrderByDTO> orderFields;
|
private Collection<QueryOrderByDTO> orderFields;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return JSON.toJSONString(this);
|
return JSON.toJSONString(this);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user