From 93b9882a9e0266315258effd56b5614ecb834d4a Mon Sep 17 00:00:00 2001 From: luofu Date: Sat, 7 Oct 2023 17:46:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(REQ-1309):=20=E4=BB=A3=E5=8A=9E=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E6=9F=A5=E8=AF=A2=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 背景: https://jira.axzo.cn/browse/REQ-1309?goToView=1 修改: 代办分页查询调整 影响: 无 --- .../impl/PendingMessageNewServiceImpl.java | 138 ++++++++++-------- .../msg/center/utils/OrderFieldParseUtil.java | 32 ++++ .../msg/center/service/dto/PersonDTO.java | 12 ++ .../request/PendingMessagePageRequest.java | 2 - 4 files changed, 122 insertions(+), 62 deletions(-) create mode 100644 inside-notices/src/main/java/cn/axzo/msg/center/utils/OrderFieldParseUtil.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java index 5f5bed69..2af80857 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/PendingMessageNewServiceImpl.java @@ -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 pageQuery(PendingMessagePageRequest request) { - LambdaQueryChainWrapper 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 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 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 page = request.toPage(); IPage result = query.page(page); List 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 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 query, + Collection 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); + } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/utils/OrderFieldParseUtil.java b/inside-notices/src/main/java/cn/axzo/msg/center/utils/OrderFieldParseUtil.java new file mode 100644 index 00000000..972f0dcf --- /dev/null +++ b/inside-notices/src/main/java/cn/axzo/msg/center/utils/OrderFieldParseUtil.java @@ -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> + PENDING_MESSAGE_RECORD_ORDER_FIELD = ImmutableMap.>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 parsePendingMessageRecordOrderField(String orderField) { + return PENDING_MESSAGE_RECORD_ORDER_FIELD.get(orderField); + } +} diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/PersonDTO.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/PersonDTO.java index c1e54381..fad40f2d 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/PersonDTO.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/dto/PersonDTO.java @@ -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); diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java index 55132a8f..b27a7d6d 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessagePageRequest.java @@ -84,8 +84,6 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab */ private Collection orderFields; - - @Override public String toString() { return JSON.toJSONString(this);