Merge branch 'dev' of axzsource.com:universal/infrastructure/backend/msg-center-plat into dev
This commit is contained in:
commit
b64b2c6c93
@ -161,6 +161,10 @@
|
||||
<groupId>cn.axzo.apollo</groupId>
|
||||
<artifactId>apollo-api</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.checkerframework</groupId>
|
||||
<artifactId>checker-qual</artifactId>
|
||||
|
||||
@ -3,11 +3,10 @@ package cn.axzo.msg.center.message.domain.param;
|
||||
import cn.axzo.msg.center.common.exception.ServiceException;
|
||||
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.MessageTemplateV3DeleteRequest;
|
||||
import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest;
|
||||
import cn.axzo.msg.center.utils.MessageTemplateCategoryUtil;
|
||||
@ -140,6 +139,7 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable {
|
||||
.title(request.getMsgTitle())
|
||||
.content(request.getMsgContent())
|
||||
.groups(request.getGroups())
|
||||
.cardJump(request.getCardJump())
|
||||
.minAppVersion(request.getMinAppVersion())
|
||||
.icon(request.getMsgIcon())
|
||||
.operatorId(request.getOperatorId())
|
||||
|
||||
@ -1,12 +1,9 @@
|
||||
package cn.axzo.msg.center.message.service;
|
||||
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
|
||||
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;
|
||||
|
||||
/**
|
||||
* 消息模板分类管理
|
||||
@ -30,4 +27,6 @@ public interface MessageTemplateButtonV3Service {
|
||||
|
||||
void deleteTemplateButton(String templateNode);
|
||||
|
||||
List<MessageTemplateButtonV3> listMessageTemplateButtonByCode(String messageTemplateCode);
|
||||
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@ 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 com.google.common.collect.Lists;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
@ -65,4 +66,16 @@ public class MessageTemplateButtonV3ServiceImpl implements MessageTemplateButton
|
||||
.setSql("is_delete = id")
|
||||
.update();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MessageTemplateButtonV3> listMessageTemplateButtonByCode(String messageTemplateCode) {
|
||||
if (StringUtils.isBlank(messageTemplateCode)) {
|
||||
log.info("messageTemplateCode is blank.");
|
||||
return Lists.newArrayList();
|
||||
}
|
||||
return messageTemplateButtonV3Dao.lambdaQuery()
|
||||
.eq(MessageTemplateButtonV3::getTemplateCode, messageTemplateCode)
|
||||
.eq(MessageTemplateButtonV3::getIsDelete, 0)
|
||||
.list();
|
||||
}
|
||||
}
|
||||
|
||||
@ -16,6 +16,15 @@ import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
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 org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
@ -26,14 +35,6 @@ import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
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 org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @description
|
||||
@ -79,7 +80,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
return;
|
||||
}
|
||||
saveDetailRouter(router.getRouteDetail());
|
||||
batchSaveButtonRouter(router.getRouteButtons());
|
||||
batchSaveButtonRouter(router.getRouteButtons(), isUpdate);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -220,7 +221,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
messageRouterConfigDao.saveBatch(detailRouter.fetchMessageRouterConfigs());
|
||||
}
|
||||
|
||||
private void batchSaveButtonRouter(List<MessageRouteButtonDTO> buttonRouters) {
|
||||
private void batchSaveButtonRouter(List<MessageRouteButtonDTO> buttonRouters, boolean isUpdate) {
|
||||
if (CollectionUtils.isEmpty(buttonRouters)) {
|
||||
log.info("buttonRouters is empty.");
|
||||
return;
|
||||
@ -230,7 +231,7 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
.map(e -> MessageRouteButtonWrapper.of(e.fetchMessageRouteButton(), e))
|
||||
.collect(Collectors.toList());
|
||||
// 生成自定义按钮的唯一标识和顺序
|
||||
buildButtonCodeAndPriority(routeButtonWrappers);
|
||||
buildButtonCodeAndPriority(routeButtonWrappers, isUpdate);
|
||||
// 保存模板对应的按钮路由
|
||||
List<MessageRouteButton> routeButtons = routeButtonWrappers.stream()
|
||||
.map(MessageRouteButtonWrapper::getRouteButton)
|
||||
@ -243,10 +244,10 @@ public class MessageTemplateRouterServiceImpl implements MessageTemplateRouterSe
|
||||
messageRouterConfigDao.saveBatch(routerConfigs);
|
||||
}
|
||||
|
||||
private void buildButtonCodeAndPriority(List<MessageRouteButtonWrapper> routeButtonWrappers) {
|
||||
private void buildButtonCodeAndPriority(List<MessageRouteButtonWrapper> routeButtonWrappers, boolean isUpdate) {
|
||||
for (int i = 0; i < routeButtonWrappers.size(); i++) {
|
||||
MessageRouteButton button = routeButtonWrappers.get(i).getRouteButton();
|
||||
if (RouterButtonSourceEnum.CUSTOM.equals(button.getSource())) {
|
||||
if (!isUpdate && RouterButtonSourceEnum.CUSTOM.equals(button.getSource())) {
|
||||
// 这里仅对自定义的按钮设置按钮标识
|
||||
button.setBtnCode(UUIDUtil.uuidString());
|
||||
}
|
||||
|
||||
@ -8,14 +8,14 @@ import cn.axzo.msg.center.common.utils.PageHelperUtil;
|
||||
import cn.axzo.msg.center.dal.MessageBaseTemplateDao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateV3Dao;
|
||||
import cn.axzo.msg.center.domain.entity.MessageBaseTemplate;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
|
||||
import cn.axzo.msg.center.inside.notices.config.DetailStyleInfo;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
import cn.axzo.msg.center.message.domain.dto.GroupTreeNodePathDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO;
|
||||
import cn.axzo.msg.center.message.domain.dto.MessageTemplateRouterDTO.MessageRouteButtonDTO;
|
||||
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;
|
||||
@ -25,23 +25,24 @@ import cn.axzo.msg.center.message.service.MessageTemplateRouterService;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateV3Service;
|
||||
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.dto.MessageTemplateCardJumpV3DTO;
|
||||
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.enums.YesOrNo;
|
||||
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.MessageTemplateGroupV3DTO;
|
||||
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;
|
||||
import cn.axzo.msg.center.utils.MessageRouterUtil;
|
||||
import cn.axzo.msg.center.utils.MessageTemplateCategoryUtil;
|
||||
import cn.axzo.msg.center.utils.UUIDUtil;
|
||||
import cn.azxo.framework.common.model.Page;
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
@ -132,7 +133,7 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
|
||||
messageTemplateV3Dao.lambdaUpdate()
|
||||
.eq(MessageTemplateV3::getCode, param.getTemplateCode())
|
||||
.eq(MessageTemplateV3::getIsDelete, TableIsDeleteEnum.NORMAL.value)
|
||||
.setSql("is_delete = id")
|
||||
.set(MessageTemplateV3::getDisplayOnList, YesOrNo.NO.getCode())
|
||||
.update();
|
||||
}
|
||||
|
||||
@ -152,10 +153,15 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
|
||||
}
|
||||
// 卡片分组
|
||||
List<MessageTemplateGroupV3> templateGroupV3List = messageTemplateGroupV3Service.listMessageTemplateGroupByCode(templateCode);
|
||||
// 获取模板配置的路由信息
|
||||
// MessageTemplateRouterDTO msgTemplateRouter = messageTemplateRouterService.queryByTemplateCode(templateCode)
|
||||
// .orElse(null);
|
||||
return convert(baseTemplate, templateGroupV3List, null);
|
||||
|
||||
//按钮列表
|
||||
List<MessageTemplateButtonV3> buttonV3List = messageTemplateButtonV3Service.listMessageTemplateButtonByCode(templateCode);
|
||||
|
||||
// 获取模板关联分类的path列表
|
||||
List<String> groupNodePaths = messageTemplateGroupService.listMessageTemplateGroupPaths(
|
||||
Lists.newArrayList(templateCode)).getOrDefault(templateCode, Collections.emptyList());
|
||||
|
||||
return convert(baseTemplate, templateGroupV3List, buttonV3List, groupNodePaths);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -362,7 +368,7 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
|
||||
.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())
|
||||
,MessageTemplateV3::getCardUrlConfig, JSON.toJSONString(param.getCardJump().getCardUrlConfig()))
|
||||
.set(StringUtils.isNotBlank(param.getDetailStyleCode()),
|
||||
MessageTemplateV3::getDetailStyleCode, param.getDetailStyleCode())
|
||||
.set(MessageTemplateV3::getUpdatePersonId, param.getOperatorId())
|
||||
@ -474,18 +480,24 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
|
||||
}
|
||||
|
||||
private MessageTemplateV3DetailResponse convert(MessageTemplateV3 record, List<MessageTemplateGroupV3> messageTemplateGroups,
|
||||
MessageTemplateRouterDTO msgTemplateRouter) {
|
||||
List<MessageTemplateButtonV3> buttonV3List, List<String> groupNodePaths) {
|
||||
List<String> groupNodeCodes = Lists.newArrayList();
|
||||
// if (CollUtil.isNotEmpty(groupNodePaths)) {
|
||||
// // 将path解析中解析出分类结点(路径叶结点)的编码
|
||||
// groupNodeCodes = groupNodePaths.stream()
|
||||
// .map(GroupTreeNodePathDTO::parseLeafNodeCode)
|
||||
// .collect(Collectors.toList());
|
||||
// }
|
||||
if (CollUtil.isNotEmpty(groupNodePaths)) {
|
||||
// 将path解析中解析出分类结点(路径叶结点)的编码
|
||||
groupNodeCodes = groupNodePaths.stream()
|
||||
.map(GroupTreeNodePathDTO::parseLeafNodeCode)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
MessageDetailStyle styleType = pendingBizConfig
|
||||
.findMessageDetailType(record.getDetailStyleCode())
|
||||
.orElse(null);
|
||||
MessageTemplateCardJumpV3DTO cardJumpV3DTO = MessageTemplateCardJumpV3DTO.builder().build();
|
||||
if (Objects.nonNull(record)) {
|
||||
cardJumpV3DTO = MessageTemplateCardJumpV3DTO.builder().cardUrlConfig(record.getCardUrlConfig()).cardUrlOpenStrategy(record.getCardUrlOpenStrategy()).build();
|
||||
}
|
||||
|
||||
return MessageTemplateV3DetailResponse.builder()
|
||||
.templateCode(record.getCode())
|
||||
.templateName(record.getName())
|
||||
.detailStyle(styleType)
|
||||
.category(MessageTemplateCategoryUtil.parentCategory(record.getMsgCategory()))
|
||||
@ -494,10 +506,10 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service {
|
||||
.pushTerminals(JSON.parseArray(record.getPushTerminal(), PushTerminalEnum.class))
|
||||
.msgTitle(record.getTitle())
|
||||
.msgContent(record.getContent())
|
||||
.messageTemplateGroups(CollectionUtils.isNotEmpty(messageTemplateGroups) ? BeanUtil.copyToList(messageTemplateGroups, MessageTemplateGroupV3DTO.class) : Lists.newArrayList())
|
||||
.groups(CollectionUtils.isNotEmpty(messageTemplateGroups) ? BeanUtil.copyToList(messageTemplateGroups, MessageTemplateGroupV3DTO.class) : Lists.newArrayList())
|
||||
.buttons(CollectionUtils.isNotEmpty(buttonV3List) ? BeanUtil.copyToList(buttonV3List, MessageTemplateButtonV3DTO.class) : Lists.newArrayList())
|
||||
.cardJump(cardJumpV3DTO)
|
||||
.msgIcon(record.getIcon())
|
||||
// .detailStrategy(MessageRouterUtil.fetchBizDetailShowStrategy(msgTemplateRouter).orElse(null))
|
||||
// .routers(MessageRouterUtil.fetchMessageRouterButtonStrategies(msgTemplateRouter))
|
||||
.minAppVersion(record.getMinAppVersion())
|
||||
.createTimestamp(record.getCreateAt().getTime())
|
||||
.updateTimestamp(record.getUpdateAt().getTime())
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
package cn.axzo.msg.center.service.domain;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class DetailConfig {
|
||||
|
||||
/**
|
||||
* 详情名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 链接配置
|
||||
*/
|
||||
private UrlConfig urlConfig;
|
||||
|
||||
}
|
||||
@ -20,6 +20,6 @@ public class GroupConfig {
|
||||
/**
|
||||
* 详情的配置
|
||||
*/
|
||||
private UrlConfig detail;
|
||||
private DetailConfig detail;
|
||||
|
||||
}
|
||||
@ -35,7 +35,7 @@ public class MessageTemplateButtonV3DTO implements Serializable {
|
||||
/**
|
||||
* 预设按钮类型
|
||||
*/
|
||||
private PresetButtonType presetBtnCode;
|
||||
private PresetButtonType presetBtnType;
|
||||
|
||||
/**
|
||||
* 按钮来源
|
||||
@ -87,7 +87,7 @@ public class MessageTemplateButtonV3DTO implements Serializable {
|
||||
// return StringUtils.isNotBlank(apiUrl);
|
||||
// }
|
||||
if (RouterCategoryEnum.PRESET_BUTTON.equals(category)) {
|
||||
return presetBtnCode != null;
|
||||
return presetBtnType != null;
|
||||
}
|
||||
//TODO
|
||||
return true;
|
||||
|
||||
@ -22,7 +22,6 @@ public enum RouterCategoryEnum {
|
||||
/**
|
||||
* 接口调用
|
||||
*/
|
||||
@Deprecated
|
||||
ACTION("接口调用"),
|
||||
/**
|
||||
* 预设按钮
|
||||
|
||||
@ -38,7 +38,7 @@ public interface MessageTemplateV3Client {
|
||||
* @param request 模板数据模型
|
||||
* @return 模板编码
|
||||
*/
|
||||
@PostMapping(value = "/message/template/add/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/add", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<String> save(@RequestBody @Valid MessageTemplateV3CreateRequest request);
|
||||
|
||||
/**
|
||||
@ -46,7 +46,7 @@ public interface MessageTemplateV3Client {
|
||||
*
|
||||
* @param request 模板数据模型
|
||||
*/
|
||||
@PostMapping(value = "/message/template/update/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/update", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Void> update(@RequestBody @Valid MessageTemplateV3UpdateRequest request);
|
||||
|
||||
/**
|
||||
@ -54,7 +54,7 @@ public interface MessageTemplateV3Client {
|
||||
*
|
||||
* @param request 模板数据模型
|
||||
*/
|
||||
@PostMapping(value = "/message/template/delete/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/delete", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Void> delete(@RequestBody @Valid MessageTemplateV3DeleteRequest request);
|
||||
|
||||
/**
|
||||
@ -63,7 +63,7 @@ public interface MessageTemplateV3Client {
|
||||
* @param templateCode 消息模板编码
|
||||
* @return 消息模板详情
|
||||
*/
|
||||
@PostMapping(value = "/message/template/detail/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/detail", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<MessageTemplateV3DetailResponse> detail(@RequestParam("templateCode") String templateCode);
|
||||
|
||||
/**
|
||||
@ -72,7 +72,7 @@ public interface MessageTemplateV3Client {
|
||||
* @param request 分页查询参数
|
||||
* @return 模板列表
|
||||
*/
|
||||
@PostMapping(value = "/message/template/page/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/page", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Page<MessageTemplateV3PageResponse>> page(@RequestBody MessageTemplateV3PageRequest request);
|
||||
|
||||
/**
|
||||
@ -81,7 +81,7 @@ public interface MessageTemplateV3Client {
|
||||
* @param templateCodes 模板编码集合
|
||||
* @return 模板列表
|
||||
*/
|
||||
@PostMapping(value = "/message/template/list/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/list", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<List<MessageTemplatePageResponse>> listByCodes(@RequestParam("templateCodes") Collection<String> templateCodes);
|
||||
|
||||
/**
|
||||
@ -89,25 +89,25 @@ public interface MessageTemplateV3Client {
|
||||
*
|
||||
* @param request 模板状态
|
||||
*/
|
||||
@PostMapping(value = "/message/template/update-status/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/update-status", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Void> updateStatus(@RequestBody @Valid MessageTemplateV3UpdateStatusRequest request);
|
||||
|
||||
/**
|
||||
* 查询消息模板
|
||||
*/
|
||||
@PostMapping(value = "/message/template/sync/get/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/sync/get", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<MessageTemplateSyncDto> getSyncMessageTemplate(@RequestBody @Valid MessageTemplateSyncQueryRequest request);
|
||||
|
||||
/**
|
||||
* 同步消息模板
|
||||
* req-1896 说明:仅pre环境能同步
|
||||
*/
|
||||
@PostMapping(value = "/message/template/sync/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@PostMapping(value = "/message/template/v3/sync", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<Void> syncTemplate(@RequestBody @Valid MessageTemplateSyncDto request);
|
||||
|
||||
/**
|
||||
* 获取所有消息样式
|
||||
*/
|
||||
@GetMapping(value = "/message/template/list-template-detail-styles/v3", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
@GetMapping(value = "/message/template/v3/list-template-detail-styles", produces = {MediaType.APPLICATION_JSON_VALUE})
|
||||
CommonResponse<List<MessageDetailStyle>> listTemplateDetailStyles();
|
||||
}
|
||||
|
||||
@ -29,8 +29,13 @@ public class MessageTemplateV3DeleteRequest implements Serializable {
|
||||
/**
|
||||
* 操作者的自然人id
|
||||
*/
|
||||
@NotNull(message = "operatorId is required")
|
||||
private Long operatorId;
|
||||
|
||||
/**
|
||||
* 操作人姓名
|
||||
*/
|
||||
private String operatorName;
|
||||
|
||||
/**
|
||||
* 模板编码
|
||||
*/
|
||||
|
||||
@ -2,6 +2,8 @@ package cn.axzo.msg.center.service.template.request;
|
||||
|
||||
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 com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
@ -29,8 +31,11 @@ public class MessageTemplateV3UpdateRequest implements Serializable {
|
||||
/**
|
||||
* 操作者的自然人id
|
||||
*/
|
||||
@NotNull(message = "operatorId is required")
|
||||
private Long operatorId;
|
||||
/**
|
||||
* 操作人人姓名
|
||||
*/
|
||||
private String operatorName;
|
||||
/**
|
||||
* 模板编码
|
||||
*/
|
||||
@ -40,6 +45,22 @@ public class MessageTemplateV3UpdateRequest implements Serializable {
|
||||
* 模板名称
|
||||
*/
|
||||
private String templateName;
|
||||
|
||||
/**
|
||||
* 消息类型
|
||||
* NOTIFICATION: 通知
|
||||
* PENDING: 待办
|
||||
*/
|
||||
@NotNull(message = "category is required")
|
||||
private MessageGroupCategoryEnum category;
|
||||
|
||||
/**
|
||||
* 消息类型
|
||||
* BIZ_PENDING_MESSAGE: 业务待办
|
||||
* APPROVAL_PENDING_MESSAGE: 审批待办
|
||||
*/
|
||||
private MessageCategoryEnum subCategory;
|
||||
|
||||
/**
|
||||
* 消息分类树的叶结点的结点编码列表
|
||||
*/
|
||||
@ -82,10 +103,7 @@ public class MessageTemplateV3UpdateRequest implements Serializable {
|
||||
* 待办样式, BIZ_COMMON: 业务待办能用, FLOW_COMMON: 审批待办能用, 其它动态配置的
|
||||
*/
|
||||
private String detailStyleCode;
|
||||
/**
|
||||
* 操作人人姓名
|
||||
*/
|
||||
private String operatorName;
|
||||
|
||||
|
||||
private JSONObject pushData;
|
||||
|
||||
|
||||
@ -1,7 +1,5 @@
|
||||
package cn.axzo.msg.center.service.template.response;
|
||||
|
||||
import cn.axzo.msg.center.service.dto.MessageButtonRouteStrategyDTO;
|
||||
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;
|
||||
@ -11,9 +9,8 @@ import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
@ -23,8 +20,7 @@ import java.util.List;
|
||||
* @date 2023/10/11
|
||||
* @version 1.0
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@ -32,6 +28,11 @@ public class MessageTemplateV3DetailResponse implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 6772912658753264863L;
|
||||
|
||||
/**
|
||||
* 模板编码
|
||||
*/
|
||||
private String templateCode;
|
||||
|
||||
/**
|
||||
* 模板名称
|
||||
*/
|
||||
@ -77,7 +78,7 @@ public class MessageTemplateV3DetailResponse implements Serializable {
|
||||
/**
|
||||
* 卡片分组
|
||||
*/
|
||||
private List<MessageTemplateGroupV3DTO> messageTemplateGroups;
|
||||
private List<MessageTemplateGroupV3DTO> groups;
|
||||
/**
|
||||
* 卡片跳转
|
||||
*/
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package cn.axzo.msg.center.domain.entity;
|
||||
|
||||
import cn.axzo.msg.center.domain.utils.IgnorePropsJsonTypeHandler;
|
||||
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;
|
||||
@ -12,8 +12,6 @@ import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@ -35,7 +33,7 @@ public class MessageTemplateButtonV3 extends BaseEntityWithOperator<MessageTempl
|
||||
/**
|
||||
* 预设按钮类型
|
||||
*/
|
||||
private PresetButtonType presetBtnCode;
|
||||
private PresetButtonType presetBtnType;
|
||||
|
||||
/**
|
||||
* 按钮来源
|
||||
@ -47,17 +45,22 @@ public class MessageTemplateButtonV3 extends BaseEntityWithOperator<MessageTempl
|
||||
*/
|
||||
private RouterCategoryEnum category;
|
||||
|
||||
/**
|
||||
* API地址,仅当按钮是接口调用类型时有值
|
||||
*/
|
||||
private String apiUrl;
|
||||
|
||||
/**
|
||||
* 按钮链接配置
|
||||
*/
|
||||
@TableField(typeHandler = FastjsonTypeHandler.class)
|
||||
@TableField(typeHandler = IgnorePropsJsonTypeHandler.class)
|
||||
private UrlConfig urlConfig;
|
||||
|
||||
/**
|
||||
* 按钮style配置
|
||||
*/
|
||||
@TableField(typeHandler = FastjsonTypeHandler.class)
|
||||
private List<ButtonStyleEnum> style;
|
||||
private JSONArray style;
|
||||
|
||||
/**
|
||||
* 执行人可见:true 不可见:false
|
||||
@ -74,4 +77,18 @@ public class MessageTemplateButtonV3 extends BaseEntityWithOperator<MessageTempl
|
||||
*/
|
||||
private Integer priority;
|
||||
|
||||
@TableField(typeHandler = FastjsonTypeHandler.class)
|
||||
private RecordExt recordExt;
|
||||
|
||||
public RecordExt getOrCreateRecordExt() {
|
||||
if (recordExt == null) recordExt = new RecordExt();
|
||||
return recordExt;
|
||||
}
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public static class RecordExt {
|
||||
private String btnCode;
|
||||
}
|
||||
|
||||
}
|
||||
@ -11,12 +11,14 @@ import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Accessors(chain = true)
|
||||
@TableName(value = "message_template_v3", autoResultMap = true)
|
||||
public class MessageTemplateV3 extends BaseEntityWithOperator<MessageTemplateV3> {
|
||||
|
||||
|
||||
@ -89,6 +89,10 @@
|
||||
<artifactId>msg-center-common</artifactId>
|
||||
<version>1.0.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<!-- <build>-->
|
||||
|
||||
@ -1,80 +0,0 @@
|
||||
package cn.axzo.msg.center.notices.client.config;
|
||||
|
||||
import cn.axzo.trade.datasecurity.mybatisplus.interceptor.MybatisPlusCryptInterceptor;
|
||||
import com.google.common.collect.Sets;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.plugin.InterceptorChain;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Slf4j
|
||||
//@Component
|
||||
public class MybatisInterceptorAnalyzeProcessor implements BeanPostProcessor {
|
||||
|
||||
private static final Set<Class<?>> EXPECTED_INTERCEPTORS = Sets.newHashSet(
|
||||
MybatisPlusCryptInterceptor.class);
|
||||
|
||||
@Override
|
||||
public Object postProcessBeforeInitialization(
|
||||
@NotNull Object bean, @NotNull String beanName) throws BeansException {
|
||||
if (bean instanceof SqlSessionFactory) {
|
||||
try {
|
||||
analyze((SqlSessionFactory) bean);
|
||||
} catch (Exception e) {
|
||||
log.warn("SqlSessionFactory analyze error", e);
|
||||
}
|
||||
}
|
||||
return bean;
|
||||
}
|
||||
|
||||
private void analyze(SqlSessionFactory sessionFactory) {
|
||||
org.apache.ibatis.session.Configuration configuration = sessionFactory.getConfiguration();
|
||||
InterceptorChain oldChain = getFieldValue(configuration, "interceptorChain");
|
||||
List<Interceptor> oldInterceptors = getFieldValue(oldChain, "interceptors");
|
||||
AnalyzeInterceptorChain newChain = new AnalyzeInterceptorChain();
|
||||
for (Interceptor interceptor : oldInterceptors)
|
||||
newChain.addInterceptor(interceptor);
|
||||
setFieldValue(configuration, "interceptorChain", newChain);
|
||||
}
|
||||
|
||||
@SuppressWarnings({"unchecked", "DataFlowIssue"})
|
||||
private static <T> T getFieldValue(Object obj, String fieldName) {
|
||||
Field field = ReflectionUtils.findField(obj.getClass(), fieldName);
|
||||
field.setAccessible(true);
|
||||
return (T)ReflectionUtils.getField(field, obj);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
private static void setFieldValue(Object obj, String fieldName, Object value) {
|
||||
Field field = ReflectionUtils.findField(obj.getClass(), fieldName);
|
||||
Field modifiers = ReflectionUtils.findField(Field.class, "modifiers");
|
||||
field.setAccessible(true);
|
||||
modifiers.setAccessible(true);
|
||||
ReflectionUtils.setField(modifiers, field, field.getModifiers() & ~Modifier.FINAL);
|
||||
ReflectionUtils.setField(field, obj, value);
|
||||
}
|
||||
|
||||
private static class AnalyzeInterceptorChain extends InterceptorChain {
|
||||
@Override
|
||||
public void addInterceptor(Interceptor interceptor) {
|
||||
super.addInterceptor(interceptor);
|
||||
if (EXPECTED_INTERCEPTORS.contains(interceptor.getClass()))
|
||||
log.info("Adding interceptor={}", interceptor.getClass().getName());
|
||||
else
|
||||
log.warn("Unexpected interceptor={}", interceptor.getClass().getName(), new RuntimeException());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
13
pom.xml
13
pom.xml
@ -37,6 +37,8 @@
|
||||
<lombok.version>1.18.22</lombok.version>
|
||||
<binarywang.weixin-java.version>4.5.0</binarywang.weixin-java.version>
|
||||
<mapstruct.version>1.4.2.Final</mapstruct.version>
|
||||
<feign-httpclient.version>11.8</feign-httpclient.version>
|
||||
<jetbrains.version>26.0.0</jetbrains.version>
|
||||
</properties>
|
||||
|
||||
<dependencyManagement>
|
||||
@ -87,9 +89,14 @@
|
||||
<version>${msg-center-api-version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>4.10.0</version>
|
||||
<groupId>io.github.openfeign</groupId>
|
||||
<artifactId>feign-httpclient</artifactId>
|
||||
<version>${feign-httpclient.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.jetbrains</groupId>
|
||||
<artifactId>annotations</artifactId>
|
||||
<version>${jetbrains.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
@ -78,6 +78,10 @@
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.github.openfeign</groupId>
|
||||
<artifactId>feign-httpclient</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user