Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
cba5a8d708
@ -0,0 +1,32 @@
|
||||
package cn.axzo.msg.center.message.controller;
|
||||
|
||||
import cn.axzo.msg.center.message.service.PendingMessageDataInitService;
|
||||
import cn.axzo.msg.center.service.admin.MessageAdminConsoleClient;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* msg-center
|
||||
*
|
||||
* @author zuoqinbo
|
||||
* @version V1.0
|
||||
* @date 2023/11/17 14:03
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class MessageAdminController implements MessageAdminConsoleClient {
|
||||
|
||||
@Resource
|
||||
private PendingMessageDataInitService pendingMessageDataInitService;
|
||||
|
||||
@Override
|
||||
public CommonResponse<Void> transformPendingMessageRecord(Integer diffDays, Long minRecordId) {
|
||||
pendingMessageDataInitService.transformPendingMessageRecord(diffDays, minRecordId);
|
||||
return CommonResponse.success();
|
||||
}
|
||||
}
|
||||
@ -21,7 +21,6 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@ -58,13 +57,12 @@ public class MessageGroupController implements MessageGroupClient {
|
||||
|
||||
@Override
|
||||
public CommonResponse<List<MessageGroupTreeNodeResponse>> list(MessageGroupQueryRequest request) {
|
||||
List<GroupTreeNodeDTO> trees = messageGroupNodeService
|
||||
.listGroupTree(request.getCategory(), request.getNodeName());
|
||||
List<GroupTreeNodeDTO> trees = messageGroupNodeService.listGroupTree(request.getCategory());
|
||||
List<MessageGroupTreeNodeResponse> groupTreeNodes;
|
||||
if (StringUtils.isNotBlank(request.getNodeName())) {
|
||||
// 根据结点类型为分类类型的结点名称搜索时需要剪枝TODO:[cold_blade] [P0]
|
||||
final Function<GroupTreeNodeDTO, Boolean> cutFunc = e -> e.canMountTemplate()
|
||||
&& Objects.equals(e.getNodeName(), request.getNodeName());
|
||||
// 根据结点类型为分类类型的结点名称搜索时需要剪枝
|
||||
final Function<GroupTreeNodeDTO, Boolean> cutFunc = e ->
|
||||
TreeHelperUtil.containsMountTemplateChild(e, request.getNodeName());
|
||||
groupTreeNodes = trees.stream()
|
||||
.map(e -> convertCutTree(e, cutFunc))
|
||||
.filter(e -> CollectionUtils.isNotEmpty(e.getChildren()))
|
||||
@ -79,9 +77,15 @@ public class MessageGroupController implements MessageGroupClient {
|
||||
|
||||
@Override
|
||||
public CommonResponse<List<MessageGroupTreeNodeResponse>> listCutTree(MessageGroupQueryRequest request) {
|
||||
Function<GroupTreeNodeDTO, Boolean> cutFunc;
|
||||
if (StringUtils.isBlank(request.getNodeName())) {
|
||||
cutFunc = TreeHelperUtil::containsMountTemplateChild;
|
||||
} else {
|
||||
cutFunc = e -> TreeHelperUtil.containsMountTemplateChild(e, request.getNodeName());
|
||||
}
|
||||
List<MessageGroupTreeNodeResponse> groupTreeNodes = messageGroupNodeService
|
||||
.listGroupTree(request.getCategory(), request.getNodeName()).stream()
|
||||
.map(e -> convertCutTree(e, TreeHelperUtil::containsMountTemplateChild))
|
||||
.listGroupTree(request.getCategory()).stream()
|
||||
.map(e -> convertCutTree(e, cutFunc))
|
||||
.filter(e -> CollectionUtils.isNotEmpty(e.getChildren()))
|
||||
.collect(Collectors.toList());
|
||||
return CommonResponse.success(groupTreeNodes);
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
package cn.axzo.msg.center.message.controller;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @date 2023/11/17
|
||||
* @version 1.0
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
public class PendingMessageDataInitController {
|
||||
|
||||
|
||||
}
|
||||
@ -56,6 +56,7 @@ public class MessageGroupNodeStatisticParam implements Serializable {
|
||||
.identity(identity)
|
||||
.build();
|
||||
param.setOperator(person);
|
||||
param.setTerminalType(request.getTerminalType());
|
||||
return param;
|
||||
}
|
||||
|
||||
@ -70,6 +71,7 @@ public class MessageGroupNodeStatisticParam implements Serializable {
|
||||
.identity(identity)
|
||||
.build();
|
||||
param.setOperator(person);
|
||||
param.setTerminalType(request.getTerminalType());
|
||||
return param;
|
||||
}
|
||||
|
||||
|
||||
@ -78,10 +78,9 @@ public interface MessageGroupNodeService {
|
||||
/**
|
||||
* 查询消息/待办 或者两者的分类树
|
||||
* @param category 消息/待办
|
||||
* @param nodeName 结点名称
|
||||
* @return 分类树列表
|
||||
*/
|
||||
List<GroupTreeNodeDTO> listGroupTree(@Nullable MessageGroupCategoryEnum category, @Nullable String nodeName);
|
||||
List<GroupTreeNodeDTO> listGroupTree(@Nullable MessageGroupCategoryEnum category);
|
||||
|
||||
/**
|
||||
* 获取各个应用端对应的业务中心分类结点编码配置
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
/**
|
||||
* @description xxx
|
||||
* @author cold_blade
|
||||
* @date 2023/11/17
|
||||
* @version 1.0
|
||||
*/
|
||||
public interface PendingMessageDataInitService {
|
||||
|
||||
void transformPendingMessageRecord(Integer diffDays, Long minRecordId);
|
||||
}
|
||||
@ -139,13 +139,11 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GroupTreeNodeDTO> listGroupTree(MessageGroupCategoryEnum category, String nodeName) {
|
||||
public List<GroupTreeNodeDTO> listGroupTree(MessageGroupCategoryEnum category) {
|
||||
return messageGroupTreeNodeCacheService.listAllGroupTree().stream()
|
||||
// 分类过滤条件
|
||||
.filter(e -> Objects.isNull(category)
|
||||
|| category.getMsgGroupNodeCategories().contains(e.getCategory()))
|
||||
// 结点名称过滤条件
|
||||
.filter(e -> filterNodeName(e, category, nodeName))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@ -207,18 +205,4 @@ public class MessageGroupNodeServiceImpl implements MessageGroupNodeService {
|
||||
.count();
|
||||
AssertUtil.isTrue(cnt == 0, "删除失败!删除前请先转移消息模版!");
|
||||
}
|
||||
|
||||
private boolean filterNodeName(GroupTreeNodeDTO node, MessageGroupCategoryEnum category, String nodeName) {
|
||||
if (StringUtils.isBlank(nodeName)) {
|
||||
return true;
|
||||
}
|
||||
if (MessageGroupCategoryEnum.NOTIFICATION.equals(category)) {
|
||||
return node.contains(MessageGroupNodeCategoryEnum.GENERAL_MESSAGE_CATEGORY, nodeName);
|
||||
}
|
||||
if (MessageGroupCategoryEnum.PENDING.equals(category)) {
|
||||
return node.contains(MessageGroupNodeCategoryEnum.PENDING_MESSAGE_CATEGORY, nodeName);
|
||||
}
|
||||
return node.contains(MessageGroupNodeCategoryEnum.GENERAL_MESSAGE_CATEGORY, nodeName)
|
||||
|| node.contains(MessageGroupNodeCategoryEnum.PENDING_MESSAGE_CATEGORY, nodeName);
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,178 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.msg.center.api.enums.MsgTypeEnum;
|
||||
import cn.axzo.msg.center.common.exception.ServiceException;
|
||||
import cn.axzo.msg.center.dal.MessageRecordDao;
|
||||
import cn.axzo.msg.center.dal.PendingMessageRecordDao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageRecord;
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
import cn.axzo.msg.center.domain.enums.YesNoEnum;
|
||||
import cn.axzo.msg.center.message.service.PendingMessageDataInitService;
|
||||
import cn.axzo.msg.center.service.dto.IdentityDTO;
|
||||
import cn.axzo.msg.center.service.dto.PersonDTO;
|
||||
import cn.axzo.msg.center.service.enums.BizCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
|
||||
import cn.axzo.msg.center.utils.DateFormatUtil;
|
||||
import cn.axzo.msg.center.utils.PersonIdentityUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import com.google.common.collect.Maps;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.core.env.Environment;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author cold_blade
|
||||
* @version 1.0
|
||||
* @date 2023/11/17
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class PendingMessageDataInitServiceImpl implements PendingMessageDataInitService {
|
||||
@Resource
|
||||
private Environment environment;
|
||||
|
||||
private static final PersonDTO SYSTEM = PersonDTO.builder()
|
||||
.id(0L)
|
||||
.name("系统")
|
||||
.identity(IdentityDTO.builder().id(0L).type(IdentityTypeEnum.NOT_SUPPORT).build())
|
||||
.build();
|
||||
|
||||
private final MessageRecordDao messageRecordDao;
|
||||
private final PendingMessageRecordDao pendingMessageRecordDao;
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void transformPendingMessageRecord(Integer diffDays, Long minRecordId) {
|
||||
LocalDateTime queryFrom = LocalDateTime.now().minusDays(diffDays);
|
||||
Long scrollId = Long.MAX_VALUE;
|
||||
List<MessageRecord> records = messageRecordDao.lambdaQuery()
|
||||
.eq(MessageRecord::getType, MsgTypeEnum.PENDING_MESSAGE)
|
||||
.eq(MessageRecord::getIsDelete, YesNoEnum.NO.getCode())
|
||||
.ge(MessageRecord::getCreateAt, DateFormatUtil.toDate(queryFrom))
|
||||
.between(MessageRecord::getId, minRecordId, scrollId)
|
||||
.orderByDesc(MessageRecord::getId)
|
||||
.list();
|
||||
// while (!records.isEmpty()) {
|
||||
String profile = environment.getProperty("spring.profiles.active");
|
||||
if ("test".equals(profile) || "master".equals(profile)) {
|
||||
batchSavePendingMessage(records);
|
||||
} else {
|
||||
log.warn("目前只有测试test环境和生产master环境支持该操作!");
|
||||
}
|
||||
// scrollId = records.stream().min(Comparator.comparing(MessageRecord::getId))
|
||||
// .map(MessageRecord::getId).orElse(0L);
|
||||
// records = messageRecordDao.lambdaQuery()
|
||||
// .eq(MessageRecord::getType, MsgTypeEnum.PENDING_MESSAGE)
|
||||
// .eq(MessageRecord::getIsDelete, YesNoEnum.NO.getCode())
|
||||
// .ge(MessageRecord::getCreateAt, DateFormatUtil.toDate(queryFrom))
|
||||
// //.between(MessageRecord::getId, minRecordId, scrollId)
|
||||
// //modify by zuoqinbo
|
||||
// .between(MessageRecord::getId, scrollId, Long.MAX_VALUE)
|
||||
// .orderByDesc(MessageRecord::getId)
|
||||
// .list();
|
||||
// }
|
||||
}
|
||||
|
||||
private void batchSavePendingMessage(List<MessageRecord> records) {
|
||||
// TODO: [zuoqinbo]
|
||||
if (CollectionUtils.isEmpty(records)) {
|
||||
return;
|
||||
}
|
||||
List<PendingMessageRecord> pendingMessageRecords = records.stream().map(new Function<MessageRecord, PendingMessageRecord>() {
|
||||
@Override
|
||||
public PendingMessageRecord apply(MessageRecord messageRecord) {
|
||||
return convert(messageRecord);
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
//批量插入数据库
|
||||
pendingMessageRecordDao.saveOrUpdateBatch(pendingMessageRecords);
|
||||
}
|
||||
|
||||
private PendingMessageRecord convert(MessageRecord record) {
|
||||
PendingMessageRecord pendingMsgRecord = new PendingMessageRecord();
|
||||
pendingMsgRecord.setPromoterPersonId(SYSTEM.getId());
|
||||
pendingMsgRecord.setPromoterId(SYSTEM.getIdentity().getId());
|
||||
pendingMsgRecord.setPromoterType(SYSTEM.getIdentity().getType());
|
||||
pendingMsgRecord.setPromoterName(SYSTEM.getName());
|
||||
pendingMsgRecord.setExecutorPersonId(record.getPersonId());
|
||||
pendingMsgRecord.setExecutorId(record.getToId());
|
||||
pendingMsgRecord.setExecutorType(PersonIdentityUtil.toIdentityType(record.getReceiveType()));
|
||||
pendingMsgRecord.setTemplateCode(getTemplateCode(record.getRelationId()));
|
||||
pendingMsgRecord.setTitle(record.getTitle());
|
||||
pendingMsgRecord.setContent(record.getContent());
|
||||
pendingMsgRecord.setOrgType(OrganizationTypeEnum.valueOf(record.getTerminalType().name()));
|
||||
pendingMsgRecord.setOrgId(record.getTerminalId());
|
||||
pendingMsgRecord.setOrgName(record.getTerminalName());
|
||||
pendingMsgRecord.setState(PendingMessageStateEnum.codeOf(record.getState().getCode()));
|
||||
if (Objects.nonNull(record.getBizId()) && record.getBizId() > 0L) {
|
||||
pendingMsgRecord.setBizCode(String.valueOf(record.getBizId()));
|
||||
}
|
||||
pendingMsgRecord.setRouterParams(record.getRouterParams());
|
||||
pendingMsgRecord.setBizExtParam(record.getExtra());
|
||||
pendingMsgRecord.setOuId(record.getTenantId());
|
||||
pendingMsgRecord.setBizCategory(BizCategoryEnum.OTHER);
|
||||
pendingMsgRecord.setFailCause(String.valueOf(record.getId()));
|
||||
//
|
||||
pendingMsgRecord.setIdentityCode(UUIDUtil.uuidString());
|
||||
return pendingMsgRecord;
|
||||
}
|
||||
|
||||
private String getTemplateCode(Long relationId) {
|
||||
// TODO: [zuoqinbo]
|
||||
// 需要通过映射表获取 https://alidocs.dingtalk.com/i/nodes/YndMj49yWj7q1dB9h793q5dKV3pmz5aA?iframeQuery=utm_source%3Dportal%26utm_medium%3Dportal_recent
|
||||
String profile = environment.getProperty("spring.profiles.active");
|
||||
if ("test".equals(profile) || "master".equals(profile)) {
|
||||
String templateCode = msgTemplateMap.get(Integer.parseInt(String.valueOf(relationId)));
|
||||
return templateCode;
|
||||
}
|
||||
throw new ServiceException("系统环境[" + profile + "],不支持该接口操作");
|
||||
}
|
||||
|
||||
/**
|
||||
* 原模板ID与test环境新模板ID映射表
|
||||
*/
|
||||
private static final Map<Integer, String> msgTemplateMap = Maps.newHashMap();
|
||||
|
||||
static {
|
||||
msgTemplateMap.put(138, "b8115314233d478ca70e9f50ca0b0dc3");
|
||||
msgTemplateMap.put(193, "a97ff39e4d39484ab7fccc55d50ea714");
|
||||
msgTemplateMap.put(147, "fc2e584aa5b54fb382ab1894a89bd929");
|
||||
msgTemplateMap.put(148, "f40eef2ee88e4a80a699389d009a1561");
|
||||
msgTemplateMap.put(360, "e67a037581f948ec9343e2217b828034");
|
||||
msgTemplateMap.put(152, "d1d4793c84e14d20ae1cbc399338efa3");
|
||||
msgTemplateMap.put(210, "c3a4579f7f004af3bdeabe8f79ffcf1b");
|
||||
msgTemplateMap.put(151, "8e20637ab7b242c1a1e5590d8feb50fb");
|
||||
msgTemplateMap.put(197, "9ae74eb4e3c44dcbbabc77791b3dbf2d");
|
||||
msgTemplateMap.put(221, "5791020e815741e4876328c98aa3bd34");
|
||||
msgTemplateMap.put(232, "fdf662e201c945dba040fc54db50a702");
|
||||
msgTemplateMap.put(402, "52ae3e8ec48242e485e9389202e102ce");
|
||||
msgTemplateMap.put(403, "e5571b2bec7c433d997f70856ecd2929");
|
||||
msgTemplateMap.put(224, "367ba552bb374049a73e737ac3b8b08c");
|
||||
msgTemplateMap.put(447, "75047e6339484e81bcce244d56fb2363");
|
||||
msgTemplateMap.put(570, "472b5a4d89a646eaa1ba862246817366");
|
||||
msgTemplateMap.put(557, "e6a3d337a943454685a88dcf7e9f7879");
|
||||
msgTemplateMap.put(558, "c8a38bec34774bb39f6419e327136eac");
|
||||
msgTemplateMap.put(525, "9b372033b7f146eb9ef8c24cf203fb1f");
|
||||
msgTemplateMap.put(526, "9a114a56fa00482a9c4db9f495caa259");
|
||||
msgTemplateMap.put(546, "9fef5828b8574bc7b077dac9162817c7");
|
||||
msgTemplateMap.put(564, "fc35f169515e43e39d863b34e5226e5e");
|
||||
}
|
||||
|
||||
}
|
||||
@ -5,6 +5,7 @@ import cn.axzo.apollo.workspace.api.workspace.WorkspaceApi;
|
||||
import cn.axzo.apollo.workspace.api.workspace.res.SimpleWorkspaceRes;
|
||||
import cn.axzo.msg.center.common.enums.TableIsDeleteEnum;
|
||||
import cn.axzo.msg.center.common.exception.ServiceException;
|
||||
import cn.axzo.msg.center.common.utils.PageHelperUtil;
|
||||
import cn.axzo.msg.center.common.utils.PlaceholderResolver;
|
||||
import cn.axzo.msg.center.dal.PendingMessageRecordDao;
|
||||
import cn.axzo.msg.center.domain.entity.PendingMessageRecord;
|
||||
@ -54,7 +55,6 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
@ -117,6 +117,8 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
|
||||
@Override
|
||||
public Page<PendingMessageResponse> pageQuery(PendingMessagePageRequest request) {
|
||||
List<String> groupTreeRootNodeCodes = messageGroupNodeService
|
||||
.listGroupTreeRootNodeCodes(MessageGroupCategoryEnum.PENDING, request.getAppTerminalType());
|
||||
PersonDTO operator = PersonDTO.from(request.getPersonId(), request.getIdentityId(), request.getIdentityType());
|
||||
PendingMessageStateEnum pendingMessageState = fetchPendingMessageState(request.getRoleCategory(), request.getMsgState());
|
||||
BizFinalStateEnum bizFinalState = fetchBizFinalState(request.getRoleCategory(), request.getBizFinalState());
|
||||
@ -132,19 +134,32 @@ public class PendingMessageNewServiceImpl implements PendingMessageNewService {
|
||||
// 构建人维度的查询条件
|
||||
buildPersonCondition(query, request.getWithIdentify(), request.getRoleCategory(), operator);
|
||||
// 模板的分类,对代办进行分组过滤
|
||||
List<GroupTreeNodePathDTO> leafNodePaths = messageGroupNodeService
|
||||
.leafGroupNodeCodePathsByRootNodeCodes(groupTreeRootNodeCodes);
|
||||
List<String> paths = leafNodePaths.stream().map(GroupTreeNodePathDTO::getNodeCodePath).collect(Collectors.toList());
|
||||
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
|
||||
Optional<GroupTreeNodePathDTO> nodePath = messageGroupNodeService.queryLeafGroupNodeCodePath(request.getGroupNodeCode());
|
||||
List<String> templateCodes = nodePath
|
||||
.map(v -> messageTemplateGroupService.listMessageTemplateCodes(Lists.newArrayList(v.getNodeCodePath())))
|
||||
.orElseGet(Collections::emptyList);
|
||||
query.in(CollectionUtils.isNotEmpty(templateCodes), PendingMessageRecord::getTemplateCode, templateCodes);
|
||||
GroupTreeNodePathDTO nodePath = messageGroupNodeService.queryLeafGroupNodeCodePath(request.getGroupNodeCode())
|
||||
.orElse(null);
|
||||
if (Objects.isNull(nodePath) || !paths.contains(nodePath.getNodeCodePath())) {
|
||||
// 如果该分类未关联任何模板,直接返回空集合
|
||||
log.info("invalid group node code...");
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
paths = Lists.newArrayList(nodePath.getNodeCodePath());
|
||||
}
|
||||
List<String> templateCodes = messageTemplateGroupService.listMessageTemplateCodes(paths);
|
||||
if (CollectionUtils.isEmpty(templateCodes)) {
|
||||
// 如果该分类未关联任何模板,直接返回空集合
|
||||
log.info("there is not any template matched... appTerminal:[{}]", request.getAppTerminalType());
|
||||
return PageHelperUtil.emptyPage(request.getPage(), request.getPageSize());
|
||||
}
|
||||
query.in(PendingMessageRecord::getTemplateCode, templateCodes);
|
||||
// 构建排序条件
|
||||
buildSortCondition(query, request.getOrderFields());
|
||||
|
||||
IPage<PendingMessageRecord> page = request.toPage();
|
||||
IPage<PendingMessageRecord> result = query.page(page);
|
||||
List<String> templateCodes = result.getRecords().stream().map(PendingMessageRecord::getTemplateCode)
|
||||
templateCodes = result.getRecords().stream().map(PendingMessageRecord::getTemplateCode)
|
||||
.collect(Collectors.toList());
|
||||
List<MessageTemplateDTO> messageTemplates = messageTemplateNewService.listByTemplateCodes(templateCodes);
|
||||
List<PendingMessageResponse> responseRecords = result.getRecords().stream()
|
||||
|
||||
@ -34,4 +34,11 @@ public final class DateFormatUtil {
|
||||
.map(v -> v.atZone(ZoneOffset.systemDefault()).toInstant().toEpochMilli())
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
public static Date toDate(LocalDateTime dateTime) {
|
||||
return Optional.ofNullable(dateTime)
|
||||
.map(v -> toTimestamp(dateTime))
|
||||
.map(Date::new)
|
||||
.orElse(null);
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,6 +57,24 @@ public final class TreeHelperUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean containsMountTemplateChild(GroupTreeNodeDTO treeNode, String mountTemplateNodeName) {
|
||||
if (Objects.isNull(treeNode) || StringUtils.isBlank(mountTemplateNodeName)) {
|
||||
return false;
|
||||
}
|
||||
if (CollectionUtils.isEmpty(treeNode.getNodeChildren())) {
|
||||
return treeNode.canMountTemplate() && treeNode.getNodeName().contains(mountTemplateNodeName);
|
||||
}
|
||||
LinkedList<GroupTreeNodeDTO> stack = new LinkedList<>(treeNode.getNodeChildren());
|
||||
while (!stack.isEmpty()) {
|
||||
GroupTreeNodeDTO node = stack.pop();
|
||||
if (node.canMountTemplate()) {
|
||||
return node.getNodeName().contains(mountTemplateNodeName);
|
||||
}
|
||||
stack.addAll(node.getNodeChildren());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void buildTree(GroupTreeNodeDTO parentNode, List<MessageGroupNode> nodes) {
|
||||
List<MessageGroupNode> children = nodes.stream()
|
||||
.filter(e -> Objects.equals(e.getParentCode(), parentNode.getNodeCode()))
|
||||
|
||||
@ -0,0 +1,42 @@
|
||||
package cn.axzo.msg.center.service.admin;
|
||||
|
||||
import cn.axzo.msg.center.api.request.CmsMsgQueryReq;
|
||||
import cn.axzo.msg.center.api.response.MessageNewRes;
|
||||
import cn.axzo.msg.center.service.general.client.fallback.GeneralMessageClientFallback;
|
||||
import cn.axzo.msg.center.service.general.request.GeneralMessageOldDataStatisticRequest;
|
||||
import cn.axzo.msg.center.service.general.request.GeneralMessageSendRequest;
|
||||
import cn.axzo.msg.center.service.general.response.GeneralMessageOldDataStatisticResponse;
|
||||
import cn.azxo.framework.common.model.CommonResponse;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 普通消息模块
|
||||
*
|
||||
* @author cold_blade
|
||||
* @version 1.0
|
||||
* @date 2023/10/18
|
||||
*/
|
||||
@Component
|
||||
@FeignClient(value = "msg-center", url = "${server.serviceUrl:http://msg-center:8080}",
|
||||
fallback = GeneralMessageClientFallback.class)
|
||||
public interface MessageAdminConsoleClient {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param diffDays diffDays
|
||||
* @param minRecordId minRecordId
|
||||
* @return 消息的唯一标识
|
||||
*/
|
||||
@PostMapping("/admin/console/transform")
|
||||
CommonResponse<Void> transformPendingMessageRecord(@RequestParam(required = true) Integer diffDays,
|
||||
@RequestParam(required = true) Long minRecordId);
|
||||
|
||||
}
|
||||
@ -4,6 +4,9 @@ import lombok.AccessLevel;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @description
|
||||
*
|
||||
@ -24,4 +27,11 @@ public enum PendingMessageStateEnum {
|
||||
|
||||
private final Integer code;
|
||||
private final String message;
|
||||
|
||||
public static PendingMessageStateEnum codeOf(Integer code) {
|
||||
return Arrays.stream(values())
|
||||
.filter(e -> Objects.equals(e.code, code))
|
||||
.findFirst()
|
||||
.orElse(HAS_BEEN_SENT);
|
||||
}
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package cn.axzo.msg.center.service.pending.request;
|
||||
|
||||
import cn.axzo.basics.common.page.PageRequest;
|
||||
import cn.axzo.msg.center.service.dto.QueryOrderByDTO;
|
||||
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
|
||||
import cn.axzo.msg.center.service.enums.IdentityTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.PendingMessageRoleCategoryEnum;
|
||||
@ -38,6 +39,10 @@ public class PendingMessagePageRequest extends PageRequest implements Serializab
|
||||
* WECHAT_MINI_PROGRAM: 微信小程序页面
|
||||
*/
|
||||
private TerminalTypeEnum terminalType;
|
||||
/**
|
||||
* 应用终端
|
||||
*/
|
||||
private AppTerminalTypeEnum appTerminalType;
|
||||
/**
|
||||
* 当前登录账户的自然id(前端不care)
|
||||
*/
|
||||
|
||||
@ -160,10 +160,10 @@ public class SmsSendManagerComposite implements SmsSendManager, ApplicationConte
|
||||
private String handleSmsVariableSize(String str) {
|
||||
if (str != null) {
|
||||
int size = str.length();
|
||||
if ( size <= 25 ) {
|
||||
if ( size <= 35 ) {
|
||||
return str;
|
||||
}
|
||||
return str.substring(0, 22) + "...";
|
||||
return str.substring(0, 32) + "...";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user