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

This commit is contained in:
yanglin 2024-10-09 10:07:23 +08:00
commit 0257f5552e
17 changed files with 335 additions and 127 deletions

View File

@ -1,7 +1,6 @@
package cn.axzo.msg.center.message.controller;
import cn.axzo.basics.common.util.AssertUtil;
import cn.axzo.msg.center.message.domain.param.MessageTemplateSaveOrUpdateParam;
import cn.axzo.msg.center.message.domain.param.MessageTemplateV3SaveOrUpdateParam;
import cn.axzo.msg.center.message.domain.param.RelationTemplateMapInitParam;
import cn.axzo.msg.center.message.domain.vo.RelationTemplateMapInitRequest;
@ -11,11 +10,8 @@ import cn.axzo.msg.center.message.service.MessageTemplateV3Service;
import cn.axzo.msg.center.message.service.RelationTemplateMapService;
import cn.axzo.msg.center.service.template.client.MessageTemplateV3Client;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3CreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateSyncDto;
import cn.axzo.msg.center.service.template.request.MessageTemplateSyncQueryRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateStatusRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3DeleteRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3PageRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest;
@ -29,6 +25,7 @@ import cn.azxo.framework.common.model.CommonResponse;
import cn.azxo.framework.common.model.Page;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
@ -59,29 +56,34 @@ public class MessageTemplateV3Controller implements MessageTemplateV3Client {
@Override
public CommonResponse<String> save(MessageTemplateV3CreateRequest request) {
log.info("MessageTemplateV3Controller#save,request:{}", JSON.toJSONString(request));
return CommonResponse.success(
messageTemplateV3Service.createTemplate(MessageTemplateV3SaveOrUpdateParam.from(request)));
}
@Override
public CommonResponse<Void> update(MessageTemplateV3UpdateRequest request) {
log.info("MessageTemplateV3Controller#update,request:{}", JSON.toJSONString(request));
messageTemplateV3Service.updateTemplate(MessageTemplateV3SaveOrUpdateParam.from(request));
return CommonResponse.success();
}
@Override
public CommonResponse<Void> delete(MessageTemplateV3DeleteRequest request) {
log.info("MessageTemplateV3Controller#delete,request:{}", JSON.toJSONString(request));
messageTemplateV3Service.deleteTemplate(MessageTemplateV3SaveOrUpdateParam.from(request));
return CommonResponse.success();
}
@Override
public CommonResponse<MessageTemplateV3DetailResponse> detail(String templateCode) {
log.info("MessageTemplateV3Controller#detail,templateCode:{}", templateCode);
return CommonResponse.success(messageTemplateV3Service.detail(templateCode));
}
@Override
public CommonResponse<Page<MessageTemplateV3PageResponse>> page(MessageTemplateV3PageRequest request) {
log.info("MessageTemplateV3Controller#detail,request:{}", JSON.toJSONString(request));
return CommonResponse.success(messageTemplateV3Service.page(request));
}

View File

@ -1,15 +1,13 @@
package cn.axzo.msg.center.message.domain.param;
import cn.axzo.msg.center.common.exception.ServiceException;
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageDetailRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.dto.MessageTemplateCardJumpV3DTO;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3CreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateSyncDto;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3DeleteRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest;
import cn.axzo.msg.center.utils.MessageTemplateCategoryUtil;
@ -92,15 +90,15 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable {
/**
* 消息卡片信息标签列表可为空
*/
private List<MessageTemplateGroupV3CreateRequest> messageTemplateGroups;
private List<MessageTemplateGroupV3CreateRequest> groups;
/**
* 业务详情展示策略
* 卡片跳转
*/
private MessageDetailRouteStrategyDTO bizDetailShowStrategy;
private MessageTemplateCardJumpV3DTO cardJump;
/**
* 路由策略列表
* 按钮列表
*/
private List<MessageButtonRouteStrategyDTO> routers;
private List<MessageTemplateButtonV3DTO> buttons;
/**
* 待办样式, BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
*/
@ -121,13 +119,13 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable {
.leafGroupNodes(request.getLeafGroupNodes())
.title(request.getMsgTitle())
.content(request.getMsgContent())
.messageTemplateGroups(request.getMessageTemplateGroups())
.groups(request.getGroups())
.icon(request.getMsgIcon())
.minAppVersion(request.getMinAppVersion())
.operatorId(request.getOperatorId())
.routers(request.getRouters())
.buttons(request.getButtons())
.pushTerminals(request.getPushTerminals())
.bizDetailShowStrategy(request.getDetailStrategy())
.cardJump(request.getCardJump())
.pushData(request.getPushData())
.build();
}
@ -141,14 +139,14 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable {
.leafGroupNodes(request.getLeafGroupNodes())
.title(request.getMsgTitle())
.content(request.getMsgContent())
.messageTemplateGroups(request.getMessageTemplateGroups())
.groups(request.getGroups())
.minAppVersion(request.getMinAppVersion())
.icon(request.getMsgIcon())
.operatorId(request.getOperatorId())
.operatorName(request.getOperatorName())
.routers(request.getRouters())
.buttons(request.getButtons())
.pushTerminals(request.getPushTerminals())
.bizDetailShowStrategy(request.getDetailStrategy())
.groups(request.getGroups())
.pushData(request.getPushData())
.build();
}
@ -161,25 +159,6 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable {
}
public static MessageTemplateV3SaveOrUpdateParam fromSync(MessageTemplateSyncDto request) {
MessageCategoryEnum category = MessageTemplateCategoryUtil
.checkAndReturnSubCategory(request.getCategory(), request.getSubCategory())
.orElseThrow(() -> new ServiceException("无效的参数"));
return MessageTemplateV3SaveOrUpdateParam.builder()
.templateName(request.getTemplateName())
.msgCategory(category)
.leafGroupNodes(request.getLeafGroupNodes())
.title(request.getMsgTitle())
.content(request.getMsgContent())
// .msgCardContentItems(request.getCardContentItems())
.icon(request.getMsgIcon())
.minAppVersion(request.getMinAppVersion())
.operatorId(request.getOperatorId())
.routers(request.getRouters())
.pushTerminals(request.getPushTerminals())
.bizDetailShowStrategy(request.getDetailStrategy())
.build();
}
@Override
public String toString() {

View File

@ -0,0 +1,33 @@
package cn.axzo.msg.center.message.service;
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 消息模板分类管理
*
* @author cold_blade
* @date 2023/10/5
* @version 1.0
*/
public interface MessageTemplateButtonV3Service {
/**
* 保存按钮
*/
void saveTemplateButton(String messageTemplateCode, List<MessageTemplateButtonV3DTO> buttonV3List);
/**
* 更新按钮
*/
void updateTemplateButton(String messageTemplateCode, List<MessageTemplateButtonV3DTO> buttonV3List);
void deleteTemplateButton(String templateNode);
}

View File

@ -0,0 +1,68 @@
package cn.axzo.msg.center.message.service.impl;
import cn.axzo.msg.center.dal.MessageTemplateButtonV3Dao;
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
import cn.axzo.msg.center.message.service.MessageTemplateButtonV3Service;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author cold_blade
* @date 2023/10/5
* @version 1.0
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class MessageTemplateButtonV3ServiceImpl implements MessageTemplateButtonV3Service {
private final MessageTemplateButtonV3Dao messageTemplateButtonV3Dao;
@Override
public void saveTemplateButton(String messageTemplateCode, List<MessageTemplateButtonV3DTO> buttonV3List) {
log.info("ButtonV3#saveTemplateButton,code:{},buttonV3List:{}",messageTemplateCode, JSON.toJSONString(buttonV3List));
if (StringUtils.isBlank(messageTemplateCode) || CollectionUtils.isEmpty(buttonV3List)) {
return;
}
List<MessageTemplateButtonV3> buttonV3s = buttonV3List.stream().map(item -> {
MessageTemplateButtonV3 buttonV3 = BeanUtil.copyProperties(item, MessageTemplateButtonV3.class);
buttonV3.setTemplateCode(messageTemplateCode);
return buttonV3;
}).collect(Collectors.toList());
log.info("ButtonV3#saveTemplateButton,code:{},buttonV3s:{}",messageTemplateCode, JSON.toJSONString(buttonV3s));
messageTemplateButtonV3Dao.saveBatch(buttonV3s);
}
@Override
public void updateTemplateButton(String messageTemplateCode, List<MessageTemplateButtonV3DTO> buttonV3List) {
log.info("ButtonV3#updateTemplateButton,code:{},buttonV3List:{}",messageTemplateCode, JSON.toJSONString(buttonV3List));
//逻辑删除
this.deleteTemplateButton(messageTemplateCode);
// 保存
this.saveTemplateButton(messageTemplateCode, buttonV3List);
}
@Override
public void deleteTemplateButton(String templateNode) {
log.info("ButtonV3#deleteTemplateButton,code:{}",templateNode);
if (StringUtils.isBlank(templateNode)) {
log.info("the templateNode is blank.");
return;
}
messageTemplateButtonV3Dao.lambdaUpdate()
.eq(MessageTemplateButtonV3::getTemplateCode, templateNode)
.eq(MessageTemplateButtonV3::getIsDelete, 0)
.setSql("is_delete = id")
.update();
}
}

View File

@ -8,10 +8,10 @@ import cn.axzo.msg.center.dal.MessageTemplateGroupV3Dao;
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
import cn.axzo.msg.center.message.service.MessageTemplateGroupV3Service;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import cn.hutool.core.bean.BeanUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.RequiredArgsConstructor;
@ -132,6 +132,7 @@ public class MessageTemplateGroupV3ServiceImpl implements MessageTemplateGroupV3
@Override
public void saveTemplateGroup(String messageTemplateCode, List<MessageTemplateGroupV3CreateRequest> groupV3List) {
log.info("groupV3#saveTemplateGroup,templateCode:{},groupV3List:{}", messageTemplateCode, JSON.toJSONString(groupV3List));
if (CollectionUtils.isEmpty(groupV3List)) {
log.info("groupV3List is empty.");
return;
@ -142,11 +143,13 @@ public class MessageTemplateGroupV3ServiceImpl implements MessageTemplateGroupV3
messageTemplateGroupV3.setTemplateCode(messageTemplateCode);
return messageTemplateGroupV3;
}).collect(Collectors.toList());
log.info("groupV3#saveTemplateGroup,templateCode:{},templateGroupV3List:{}", messageTemplateCode, JSON.toJSONString(templateGroupV3List));
messageTemplateGroupV3Dao.saveBatch(templateGroupV3List);
}
@Override
public void updateTemplateGroup(String messageTemplateCode, List<MessageTemplateGroupV3CreateRequest> groupV3List) {
log.info("groupV3#updateTemplateGroup,templateCode:{},groupV3List:{}", messageTemplateCode, JSON.toJSONString(groupV3List));
// 删除卡片分组
deleteTemplateGroup(messageTemplateCode);
// 插入新的分组

View File

@ -18,6 +18,7 @@ import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageRou
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageRouteDetailDTO;
import cn.axzo.msg.center.message.domain.param.MessageTemplateV3SaveOrUpdateParam;
import cn.axzo.msg.center.message.service.MessageGroupNodeService;
import cn.axzo.msg.center.message.service.MessageTemplateButtonV3Service;
import cn.axzo.msg.center.message.service.MessageTemplateGroupService;
import cn.axzo.msg.center.message.service.MessageTemplateGroupV3Service;
import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
@ -26,16 +27,13 @@ import cn.axzo.msg.center.message.service.group.GroupTemplateService;
import cn.axzo.msg.center.service.dto.MessageBaseTemplateDTO;
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import cn.axzo.msg.center.service.enums.StatusEnum;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3PageRequest;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplateGroupV3DTO;
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplateV3DetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplateV3PageResponse;
import cn.axzo.msg.center.utils.JSONObjectUtil;
@ -92,33 +90,41 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
private final GroupTemplateService groupTemplateService;
private final MessageTemplateV3Dao messageTemplateV3Dao;
private final MessageTemplateGroupV3Service messageTemplateGroupV3Service;
private final MessageTemplateButtonV3Service messageTemplateButtonV3Service;
@Override
@Transactional(rollbackFor = Exception.class)
public String createTemplate(MessageTemplateV3SaveOrUpdateParam param) {
// 创建模板基础数据
log.info("MessageTemplateV3ServiceImpl#createTemplate,param:{}", JSON.toJSONString(param));
//1 创建模板基础数据
String templateCode = saveTemplate(param);
// 创建模板的路由数据
// saveTemplateRouters(param, templateCode);
// 创建模板与分类的关联关系数据
messageTemplateGroupV3Service.saveTemplateGroup(templateCode,param.getMessageTemplateGroups());
//2 创建模板与分类的关联关系数据
messageTemplateGroupV3Service.saveTemplateGroup(templateCode,param.getGroups());
//3 保存按钮列表
messageTemplateButtonV3Service.saveTemplateButton(templateCode, param.getButtons());
//4 创建模板与分类的关联关系数据
messageTemplateGroupService.templateGroup(templateCode, param.getLeafGroupNodes());
return templateCode;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateTemplate(MessageTemplateV3SaveOrUpdateParam param) {
// 更新模板基础数据
log.info("MessageTemplateV3ServiceImpl#updateTemplate,param:{}", JSON.toJSONString(param));
//1 更新模板基础数据
updateMessageTemplate(param);
// 更新模板分类信息
//2 更新分组
messageTemplateGroupV3Service.updateTemplateGroup(param.getTemplateCode(), param.getGroups());
//3 更新按钮列表
messageTemplateButtonV3Service.updateTemplateButton(param.getTemplateCode(), param.getButtons());
//4 更新模板分类信息
updateTemplateGroupRelation(param);
// 更新模板路由信息
// updateTemplateRouters(param);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteTemplate(MessageTemplateV3SaveOrUpdateParam param) {
log.info("MessageTemplateV3ServiceImpl#deleteTemplate,param:{}", JSON.toJSONString(param));
if (Objects.isNull(param) || StringUtils.isBlank(param.getTemplateCode())) {
log.info("messageTemplateCode is blank");
return;
@ -132,6 +138,7 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
@Override
public MessageTemplateV3DetailResponse detail(String templateCode) {
log.info("MessageTemplateV3ServiceImpl#deleteTemplate,templateCode:{}", templateCode);
if (StringUtils.isBlank(templateCode)) {
return null;
}
@ -276,6 +283,7 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
private String saveTemplate(MessageTemplateV3SaveOrUpdateParam param) {
String templateCode = UUIDUtil.uuidString();
MessageTemplateV3 template = convert(param);
log.info("templateV3#saveTemplate,template:{}", JSON.toJSONString(template));
boolean result = doSaveTemplate(template, templateCode);
int retryCnt = 0;
while (!result && retryCnt++ < RETRY_CNT_MAX) {
@ -297,6 +305,7 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
return false;
}
template.setCode(templateCode);
log.info("templateV3#doSaveTemplate,template:{}", JSON.toJSONString(template));
messageTemplateV3Dao.save(template);
return true;
} finally {
@ -318,7 +327,6 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
template.setTitle(param.getTitle());
template.setContent(param.getContent());
template.setDetailStyleCode(param.getDetailStyleCode());
// template.setCardContent(JSONObjectUtil.toJSONString(param.getMsgCardContentItems()));
template.setIcon(param.getIcon());
template.setPushTerminal(JSONObjectUtil.toJSONString(param.getPushTerminals()));
template.setMinAppVersion(param.getMinAppVersion());
@ -329,15 +337,15 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
template.setUpdatePersonId(param.getOperatorId());
template.setUpdatePersonName(param.getOperatorName());
template.setPushData(param.getPushData());
return template;
}
public void saveTemplateRouters(MessageTemplateV3SaveOrUpdateParam param, String templateCode) {
MessageTemplateRouterDTO templateRouter = buildTemplateRouter(param, templateCode);
if (templateRouter.isValid()) {
// 模板配置了路由的场景
messageTemplateRouterService.saveOrUpdate(templateRouter, false, templateCode);
if (Objects.nonNull(param) && Objects.nonNull(param.getCardJump())) {
if (Objects.nonNull(param.getCardJump().getCardUrlOpenStrategy())) {
template.setCardUrlOpenStrategy(param.getCardJump().getCardUrlOpenStrategy());
}
if (Objects.nonNull(param.getCardJump().getCardUrlConfig())) {
template.setCardUrlConfig(param.getCardJump().getCardUrlConfig());
}
}
return template;
}
private void updateMessageTemplate(MessageTemplateV3SaveOrUpdateParam param) {
@ -351,6 +359,10 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
.set(StringUtils.isNotBlank(param.getTitle()), MessageTemplateV3::getTitle, param.getTitle())
// .set(MessageBaseTemplate::getCardContent, JSONObjectUtil.toJSONString(param.getMsgCardContentItems()))
.set(MessageTemplateV3::getContent, param.getContent())
.set(Objects.nonNull(param.getCardJump()) && Objects.nonNull(param.getCardJump().getCardUrlOpenStrategy())
,MessageTemplateV3::getCardUrlOpenStrategy,param.getCardJump().getCardUrlOpenStrategy())
.set(Objects.nonNull(param.getCardJump()) && Objects.nonNull(param.getCardJump().getCardUrlConfig())
,MessageTemplateV3::getCardUrlConfig, param.getCardJump().getCardUrlConfig())
.set(StringUtils.isNotBlank(param.getDetailStyleCode()),
MessageTemplateV3::getDetailStyleCode, param.getDetailStyleCode())
.set(MessageTemplateV3::getUpdatePersonId, param.getOperatorId())
@ -370,17 +382,6 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
messageTemplateGroupService.updateTemplateGroup(param.getTemplateCode(), param.getLeafGroupNodes());
}
private void updateTemplateRouters(MessageTemplateV3SaveOrUpdateParam param) {
MessageTemplateRouterDTO templateRouter = buildTemplateRouter(param, param.getTemplateCode());
boolean isCleanOldFlag = Objects.isNull(param.getBizDetailShowStrategy())
|| CollectionUtils.isEmpty(param.getBizDetailShowStrategy().getTerminals())
|| CollectionUtils.isEmpty(param.getRouters());
if (templateRouter.isValid() || isCleanOldFlag) {
// 模板修改了路由的场景
messageTemplateRouterService.saveOrUpdate(templateRouter, true, param.getTemplateCode());
}
}
private IPage<MessageTemplateV3> pageQueryBaseTemplate(MessageTemplateV3PageRequest request) {
List<String> templateCodes = Lists.newArrayList();
if (StringUtils.isNotBlank(request.getGroupNodeCode())) {
@ -495,8 +496,8 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
.msgContent(record.getContent())
.messageTemplateGroups(CollectionUtils.isNotEmpty(messageTemplateGroups) ? BeanUtil.copyToList(messageTemplateGroups, MessageTemplateGroupV3DTO.class) : Lists.newArrayList())
.msgIcon(record.getIcon())
.detailStrategy(MessageRouterUtil.fetchBizDetailShowStrategy(msgTemplateRouter).orElse(null))
.routers(MessageRouterUtil.fetchMessageRouterButtonStrategies(msgTemplateRouter))
// .detailStrategy(MessageRouterUtil.fetchBizDetailShowStrategy(msgTemplateRouter).orElse(null))
// .routers(MessageRouterUtil.fetchMessageRouterButtonStrategies(msgTemplateRouter))
.minAppVersion(record.getMinAppVersion())
.createTimestamp(record.getCreateAt().getTime())
.updateTimestamp(record.getUpdateAt().getTime())
@ -507,21 +508,4 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
.pushData(record.getPushData())
.build();
}
private MessageTemplateRouterDTO buildTemplateRouter(MessageTemplateV3SaveOrUpdateParam param, String templateCode) {
MessageTemplateRouterDTO templateRouter = MessageTemplateRouterDTO.builder().build();
if (Objects.nonNull(param.getBizDetailShowStrategy())
&& CollectionUtils.isNotEmpty(param.getBizDetailShowStrategy().getTerminals())) {
MessageRouteDetailDTO detailRouter = MessageRouteDetailDTO.from(param.getBizDetailShowStrategy(), templateCode);
templateRouter.setRouteDetail(detailRouter);
}
if (CollectionUtils.isNotEmpty(param.getRouters())) {
List<MessageRouteButtonDTO> btnRouters = param.getRouters().stream()
.filter(MessageButtonRouteStrategyDTO::isValid)
.map(e -> MessageRouteButtonDTO.from(e, templateCode))
.collect(Collectors.toList());
templateRouter.setRouteButtons(btnRouters);
}
return templateRouter;
}
}

View File

@ -0,0 +1,100 @@
package cn.axzo.msg.center.service.dto;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.enums.ButtonStyleEnum;
import cn.axzo.msg.center.service.enums.PresetButtonType;
import cn.axzo.msg.center.service.enums.RouterButtonSourceEnum;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.List;
/**
* @description
*
* @author cold_blade
* @date 2023/9/23
* @version 1.0
*/
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MessageTemplateButtonV3DTO implements Serializable {
private static final long serialVersionUID = -9083376003614521781L;
/**
* 预设按钮类型
*/
private PresetButtonType presetBtnCode;
/**
* 按钮来源
* SYSTEM: 系统
* CUSTOM: 自定义
*/
private RouterButtonSourceEnum source;
/**
* 路由分类
* JUMP: 直接跳转
* ACTION: 接口调用
* PRESET_BUTTON: 预设按钮
*/
private RouterCategoryEnum category;
/**
* 路由按钮的跳转url配置
*/
private UrlConfig urlConfig;
/**
* 按钮样式配置
* HIGH_LIGHT: 按钮高亮展示
* OVER_CARD: 按钮显示在卡片上
*/
private List<ButtonStyleEnum> style;
/**
* 执行人可见true 不可见false
*/
private Boolean executorShow;
/**
* 待办状态可见可见true 不可见false
*/
private Boolean pendingShow;
/**
* 按钮优先级数值越大优先级越低
*/
private Integer priority;
/**
* <p>要改2处都要记得改
*/
public boolean isValid() {
// if (RouterCategoryEnum.ACTION.equals(category)) {
// return StringUtils.isNotBlank(apiUrl);
// }
if (RouterCategoryEnum.PRESET_BUTTON.equals(category)) {
return presetBtnCode != null;
}
//TODO
return true;
}
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -0,0 +1,42 @@
package cn.axzo.msg.center.service.dto;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import java.io.Serializable;
/**
* @author cold_blade
* @date 2023/11/6
* @version 1.0
*/
@Setter
@Getter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class MessageTemplateCardJumpV3DTO implements Serializable {
private static final long serialVersionUID = -3496745332397525305L;
/**
* 卡片跳转方式. NONE: 无跳转, OPEN_TODO_DETAIL: 打开待办详情, OPEN_CUSTOM_PAGE: 打开指定页面
*/
private CardUrlOpenStrategy cardUrlOpenStrategy;
/**
* 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
*/
private CardUrlConfig cardUrlConfig;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,17 +1,13 @@
package cn.axzo.msg.center.service.template.client;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3CreateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplatePageRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateSyncDto;
import cn.axzo.msg.center.service.template.request.MessageTemplateSyncQueryRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateUpdateStatusRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3DeleteRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3PageRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest;
import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateStatusRequest;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import cn.axzo.msg.center.service.template.response.MessageTemplateDetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplatePageResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplateV3DetailResponse;
import cn.axzo.msg.center.service.template.response.MessageTemplateV3PageResponse;

View File

@ -4,8 +4,6 @@ import cn.axzo.msg.center.service.domain.GroupConfig;
import cn.axzo.msg.center.service.enums.GroupType;
import lombok.Data;
import java.util.List;
/**
* @description
*

View File

@ -1,8 +1,7 @@
package cn.axzo.msg.center.service.template.request;
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageDetailRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.dto.MessageTemplateCardJumpV3DTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
@ -33,7 +32,6 @@ public class MessageTemplateV3CreateRequest implements Serializable {
/**
* 操作者的自然人id
*/
@NotNull(message = "operatorId is required")
private Long operatorId;
/**
* 操作人人姓名
@ -87,17 +85,19 @@ public class MessageTemplateV3CreateRequest implements Serializable {
*/
private String msgIcon;
/**
* 消息卡片信息标签列表可为空
* 卡片分组
*/
private List<MessageTemplateGroupV3CreateRequest> messageTemplateGroups;
private List<MessageTemplateGroupV3CreateRequest> groups;
/**
* 详情展示策略
* 卡片跳转
*/
private MessageDetailRouteStrategyDTO detailStrategy;
private MessageTemplateCardJumpV3DTO cardJump;
/**
* 路由策略列表
* 按钮列表
*/
private List<MessageButtonRouteStrategyDTO> routers;
private List<MessageTemplateButtonV3DTO> buttons;
/**
* 待办样式, BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
*/

View File

@ -1,8 +1,7 @@
package cn.axzo.msg.center.service.template.request;
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageDetailRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.dto.MessageTemplateCardJumpV3DTO;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@ -70,15 +69,15 @@ public class MessageTemplateV3UpdateRequest implements Serializable {
/**
* 卡片分组
*/
private List<MessageTemplateGroupV3CreateRequest> messageTemplateGroups;
private List<MessageTemplateGroupV3CreateRequest> groups;
/**
* 详情展示策略
* 卡片跳转
*/
private MessageDetailRouteStrategyDTO detailStrategy;
private MessageTemplateCardJumpV3DTO cardJump;
/**
* 路由策略列表
* 按钮列表
*/
private List<MessageButtonRouteStrategyDTO> routers;
private List<MessageTemplateButtonV3DTO> buttons;
/**
* 待办样式, BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
*/

View File

@ -44,7 +44,6 @@ public class MessageTemplateGroupV3DTO{
/**
* 分组配置
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private GroupConfig groupConfig;
}

View File

@ -1,12 +1,12 @@
package cn.axzo.msg.center.service.template.response;
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
import cn.axzo.msg.center.service.dto.MessageDetailRouteStrategyDTO;
import cn.axzo.msg.center.service.dto.MessageTemplateButtonV3DTO;
import cn.axzo.msg.center.service.dto.MessageTemplateCardJumpV3DTO;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.MessageGroupCategoryEnum;
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
import cn.axzo.msg.center.service.template.request.MessageTemplateGroupV3CreateRequest;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.AllArgsConstructor;
@ -79,13 +79,13 @@ public class MessageTemplateV3DetailResponse implements Serializable {
*/
private List<MessageTemplateGroupV3DTO> messageTemplateGroups;
/**
* 详情展示策略
* 卡片跳转
*/
private MessageDetailRouteStrategyDTO detailStrategy;
private MessageTemplateCardJumpV3DTO cardJump;
/**
* 路由策略列表
* 按钮列表
*/
private List<MessageButtonRouteStrategyDTO> routers;
private List<MessageTemplateButtonV3DTO> buttons;
/**
* 模板创建时间戳
*/

View File

@ -2,12 +2,14 @@ package cn.axzo.msg.center.domain.entity;
import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
* @author yanglin
*/
@Data
@Setter
@Getter
public abstract class BaseEntityWithOperator<T extends Model<T>> extends BaseEntityExt<T> {
/**
* 创建人id

View File

@ -1,6 +1,7 @@
package cn.axzo.msg.center.domain.entity;
import cn.axzo.msg.center.service.domain.UrlConfig;
import cn.axzo.msg.center.service.enums.ButtonStyleEnum;
import cn.axzo.msg.center.service.enums.PresetButtonType;
import cn.axzo.msg.center.service.enums.RouterButtonSourceEnum;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
@ -11,6 +12,8 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
/**
* @author yanglin
*/
@ -54,7 +57,7 @@ public class MessageTemplateButtonV3 extends BaseEntityWithOperator<MessageTempl
* 按钮style配置
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private JSONArray style;
private List<ButtonStyleEnum> style;
/**
* 执行人可见true 不可见false

View File

@ -79,7 +79,7 @@ public class MessageTemplateV3 extends BaseEntityWithOperator<MessageTemplateV3>
* 卡片跳转配置. 在links的基础上再包一层, 避免以后卡片增加自己的配置
*/
@TableField(typeHandler = FastjsonTypeHandler.class)
private CardUrlConfig cardUrConfig;
private CardUrlConfig cardUrlConfig;
/**
* IM发送优先级