Merge branch 'feature/REQ-1507' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev

This commit is contained in:
luofu 2023-11-17 18:22:36 +08:00
commit cba5a8d708
15 changed files with 362 additions and 36 deletions

View File

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

View File

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

View File

@ -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 {
}

View File

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

View File

@ -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);
/**
* 获取各个应用端对应的业务中心分类结点编码配置

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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)
*/

View File

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