REQ-3045: 迁移老模版数据
This commit is contained in:
parent
af9e6f0940
commit
1f4ea41699
@ -0,0 +1,26 @@
|
||||
package cn.axzo.msg.center.message.domain.dto;
|
||||
|
||||
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 lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class MessageTemplateV3Model {
|
||||
|
||||
private MessageTemplateV3 template;
|
||||
private List<MessageTemplateGroupV3> groups;
|
||||
private List<MessageTemplateButtonV3> buttons;
|
||||
|
||||
public String getTemplateCode() {
|
||||
return template.getCode();
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,92 @@
|
||||
package cn.axzo.msg.center.message.service.impl;
|
||||
|
||||
import cn.axzo.msg.center.dal.MessageTemplateButtonV3Dao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateGroupV3Dao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateV3Dao;
|
||||
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.message.domain.dto.MessageTemplateV3Model;
|
||||
import cn.axzo.msg.center.service.enums.StatusEnum;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
import static java.util.stream.Collectors.groupingBy;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class MessageTemplateV3ModelService {
|
||||
|
||||
private final MessageTemplateV3Dao messageTemplateV3Dao;
|
||||
private final MessageTemplateGroupV3Dao messageTemplateGroupV3Dao;
|
||||
private final MessageTemplateButtonV3Dao messageTemplateButtonV3Dao;
|
||||
|
||||
public Optional<MessageTemplateV3Model> findEnabledByCode(String templateCode) {
|
||||
MessageTemplateV3 template = messageTemplateV3Dao.lambdaQuery()
|
||||
.eq(MessageTemplateV3::getCode, templateCode)
|
||||
.eq(MessageTemplateV3::getIsDelete, 0)
|
||||
.eq(MessageTemplateV3::getStatus, StatusEnum.ENABLE)
|
||||
.one();
|
||||
if (template == null)
|
||||
return Optional.empty();
|
||||
ModelBuilder builder = new ModelBuilder(templateCode);
|
||||
return Optional.of(builder.build(template));
|
||||
}
|
||||
|
||||
public List<MessageTemplateV3Model> getByCodes(List<String> templateCodes) {
|
||||
if (CollectionUtils.isEmpty(templateCodes))
|
||||
return Collections.emptyList();
|
||||
List<MessageTemplateV3> templates = messageTemplateV3Dao.lambdaQuery()
|
||||
.in(MessageTemplateV3::getCode, templateCodes)
|
||||
.eq(MessageTemplateV3::getIsDelete, 0)
|
||||
.list();
|
||||
ModelBuilder builder = new ModelBuilder(templateCodes.toArray(new String[0]));
|
||||
return templates.stream()
|
||||
.map(builder::build)
|
||||
.collect(toList());
|
||||
}
|
||||
|
||||
@RequiredArgsConstructor
|
||||
private class ModelBuilder {
|
||||
|
||||
final Map<String, List<MessageTemplateGroupV3>> templateCode2Groups;
|
||||
final Map<String, List<MessageTemplateButtonV3>> templateCode2Buttons;
|
||||
|
||||
ModelBuilder(String... templateCodes) {
|
||||
if (templateCodes.length > 0) {
|
||||
templateCode2Groups = messageTemplateGroupV3Dao.lambdaQuery()
|
||||
.in(MessageTemplateGroupV3::getTemplateCode, Arrays.asList(templateCodes))
|
||||
.list().stream()
|
||||
.collect(groupingBy(MessageTemplateGroupV3::getTemplateCode));
|
||||
templateCode2Buttons = messageTemplateButtonV3Dao.lambdaQuery()
|
||||
.in(MessageTemplateButtonV3::getTemplateCode, Arrays.asList(templateCodes))
|
||||
.list().stream()
|
||||
.collect(groupingBy(MessageTemplateButtonV3::getTemplateCode));
|
||||
} else {
|
||||
templateCode2Groups = Collections.emptyMap();
|
||||
templateCode2Buttons = Collections.emptyMap();
|
||||
}
|
||||
}
|
||||
|
||||
MessageTemplateV3Model build(MessageTemplateV3 template) {
|
||||
MessageTemplateV3Model model = new MessageTemplateV3Model();
|
||||
model.setTemplate(template);
|
||||
model.setGroups(templateCode2Groups.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
model.setButtons(templateCode2Buttons.getOrDefault(template.getCode(), Collections.emptyList()));
|
||||
return model;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,378 @@
|
||||
package cn.axzo.msg.center.message.xxl;
|
||||
|
||||
import cn.axzo.maokai.api.util.Ref;
|
||||
import cn.axzo.maokai.api.vo.response.tree.ValueNode;
|
||||
import cn.axzo.msg.center.dal.MessageBaseTemplateDao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateButtonV3Dao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateGroupDao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateGroupV3Dao;
|
||||
import cn.axzo.msg.center.dal.MessageTemplateV3Dao;
|
||||
import cn.axzo.msg.center.domain.entity.BaseEntityWithOperator;
|
||||
import cn.axzo.msg.center.domain.entity.MessageBaseTemplate;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateButtonV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroup;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
|
||||
import cn.axzo.msg.center.domain.entity.MessageTemplateV3;
|
||||
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
|
||||
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.dto.MessageTemplateRouterDTO.MessageRouterConfigDTO;
|
||||
import cn.axzo.msg.center.message.service.MessageTemplateNewService;
|
||||
import cn.axzo.msg.center.message.service.group.GroupTemplateService;
|
||||
import cn.axzo.msg.center.message.service.group.NodeWrapper;
|
||||
import cn.axzo.msg.center.message.service.group.RootNodeWrapper;
|
||||
import cn.axzo.msg.center.service.domain.CardUrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.DetailConfig;
|
||||
import cn.axzo.msg.center.service.domain.GroupConfig;
|
||||
import cn.axzo.msg.center.service.domain.KVConfig;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.url.AppUrl;
|
||||
import cn.axzo.msg.center.service.domain.url.WebUrl;
|
||||
import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
|
||||
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.BizDetailShowStrategyEnum;
|
||||
import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
|
||||
import cn.axzo.msg.center.service.enums.GroupType;
|
||||
import cn.axzo.msg.center.service.enums.KVContentType;
|
||||
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
|
||||
import cn.axzo.msg.center.service.enums.PushTerminalEnum;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.WebPageOpenStrategy;
|
||||
import cn.axzo.msg.center.service.enums.YesOrNo;
|
||||
import cn.axzo.msg.center.utils.JSONObjectUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.xxl.job.core.biz.model.ReturnT;
|
||||
import com.xxl.job.core.handler.annotation.XxlJob;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.transaction.support.TransactionTemplate;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class MigrateMessageTemplateV3Job {
|
||||
|
||||
private final TransactionTemplate transactionTemplate;
|
||||
private final MessageBaseTemplateDao messageBaseTemplateDao;
|
||||
private final MessageTemplateNewService messageTemplateNewService;
|
||||
private final MessageTemplateV3Dao messageTemplateV3Dao;
|
||||
private final GroupTemplateService groupTemplateService;
|
||||
private final MessageTemplateGroupV3Dao messageTemplateGroupV3Dao;
|
||||
private final MessageTemplateButtonV3Dao messageTemplateButtonV3Dao;
|
||||
private final MessageTemplateGroupDao messageTemplateGroupDao;
|
||||
private final PendingMessageBizConfig pendingMessageBizConfig;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@XxlJob("migrateMessageTemplateV3Job")
|
||||
public ReturnT<String> execute(String jsonStr) {
|
||||
try {
|
||||
Param param = StringUtils.isBlank(jsonStr)
|
||||
? new Param()
|
||||
: JSONObjectUtil.parseObject(jsonStr, Param.class);
|
||||
return executeImpl(param);
|
||||
} catch (Exception e) {
|
||||
log.warn("job failed", e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
private ReturnT<String> executeImpl(Param param) {
|
||||
RootNodeWrapper groupRoot = groupTemplateService.getGroupRoot();
|
||||
List<MessageBaseTemplate> baseTemplates = messageBaseTemplateDao.lambdaQuery()
|
||||
.eq(MessageBaseTemplate::getIsDelete, 0)
|
||||
.in(CollectionUtils.isNotEmpty(param.getTemplateCodes()),
|
||||
MessageBaseTemplate::getCode, param.getTemplateCodes())
|
||||
.list();
|
||||
for (int i = 0; i < baseTemplates.size(); i++) {
|
||||
MessageBaseTemplate baseTemplate = baseTemplates.get(i);
|
||||
log.info("migrating template: {}/{}", i + 1, baseTemplates.size());
|
||||
transactionTemplate.executeWithoutResult(unused -> migrateTemplate(groupRoot, baseTemplate));
|
||||
}
|
||||
return ReturnT.SUCCESS;
|
||||
}
|
||||
|
||||
private void migrateTemplate(RootNodeWrapper groupRoot, MessageBaseTemplate baseTemplate) {
|
||||
MessageTemplateDTO baseTemplateModel = messageTemplateNewService
|
||||
.listByTemplateCodes(Collections.singletonList(baseTemplate.getCode()))
|
||||
.get(0);
|
||||
|
||||
MessageTemplateV3 templateV3 = new MessageTemplateV3();
|
||||
templateV3.setName(baseTemplate.getName());
|
||||
templateV3.setCode(baseTemplate.getCode());
|
||||
templateV3.setMsgCategory(baseTemplate.getMsgCategory());
|
||||
templateV3.setTitle(baseTemplate.getTitle());
|
||||
templateV3.setContent(baseTemplate.getContent());
|
||||
templateV3.setDetailStyleCode(baseTemplate.getDetailStyleCode());
|
||||
templateV3.setIcon(baseTemplate.getIcon());
|
||||
templateV3.setMinAppVersion(baseTemplate.getMinAppVersion());
|
||||
templateV3.setStatus(baseTemplate.getStatus());
|
||||
templateV3.setPushTerminal(baseTemplate.getPushTerminal());
|
||||
templateV3.setPushData(baseTemplate.getPushData());
|
||||
templateV3.setImSendPriority(baseTemplate.getImSendPriority());
|
||||
templateV3.setDisplayOnList(YesOrNo.YES);
|
||||
templateV3.setIsDelete(0L);
|
||||
templateV3.setCreateAt(baseTemplate.getCreateAt());
|
||||
templateV3.getOrCreateRecordExt().setIsMigrated(true);
|
||||
setOperatorAsSystem(templateV3);
|
||||
|
||||
Runnable defaultCardUrlSetter = () -> templateV3.setCardUrlOpenStrategy(
|
||||
baseTemplate.getMsgCategory() == MessageCategoryEnum.GENERAL_MESSAGE
|
||||
? CardUrlOpenStrategy.NONE
|
||||
: CardUrlOpenStrategy.OPEN_TODO_DETAIL);
|
||||
List<MessageTemplateButtonV3> buttons = null;
|
||||
MessageTemplateRouterDTO baseTemplateRouter = baseTemplateModel.getMsgTemplateRouter();
|
||||
if (baseTemplateRouter != null) {
|
||||
if (baseTemplateRouter.getRouteDetail() != null)
|
||||
configureCardUrl(groupRoot, baseTemplate, baseTemplateRouter.getRouteDetail(), templateV3);
|
||||
else
|
||||
defaultCardUrlSetter.run();
|
||||
if (baseTemplateRouter.getRouteButtons() != null)
|
||||
buttons = migrateButtons(groupRoot, baseTemplate, baseTemplateRouter.getRouteButtons());
|
||||
} else {
|
||||
defaultCardUrlSetter.run();
|
||||
}
|
||||
|
||||
MessageTemplateGroupV3 group = migrateGroups(groupRoot, baseTemplate, baseTemplateModel);
|
||||
|
||||
messageTemplateV3Dao.save(templateV3);
|
||||
if (CollectionUtils.isNotEmpty(buttons))
|
||||
messageTemplateButtonV3Dao.saveBatch(buttons);
|
||||
if (group != null)
|
||||
messageTemplateGroupV3Dao.save(group);
|
||||
}
|
||||
|
||||
private void configureCardUrl(RootNodeWrapper groupRoot,
|
||||
MessageBaseTemplate baseTemplate,
|
||||
MessageRouteDetailDTO routeDetail,
|
||||
MessageTemplateV3 templateV3) {
|
||||
if (baseTemplate.getMsgCategory() == MessageCategoryEnum.GENERAL_MESSAGE) {
|
||||
templateV3.setCardUrlOpenStrategy(CardUrlOpenStrategy.OPEN_CUSTOM_PAGE);
|
||||
} else {
|
||||
if (routeDetail.getShowStrategy() == BizDetailShowStrategyEnum.INLINE)
|
||||
templateV3.setCardUrlOpenStrategy(CardUrlOpenStrategy.OPEN_TODO_DETAIL);
|
||||
else
|
||||
templateV3.setCardUrlOpenStrategy(CardUrlOpenStrategy.OPEN_CUSTOM_PAGE);
|
||||
}
|
||||
CardUrlConfig cardUrConfig = new CardUrlConfig();
|
||||
cardUrConfig.setUrlConfig(buildUrlConfig(groupRoot, baseTemplate, routeDetail.getRouterConfigs()));
|
||||
templateV3.setCardUrlConfig(cardUrConfig);
|
||||
}
|
||||
|
||||
private List<MessageTemplateButtonV3> migrateButtons(RootNodeWrapper groupRoot,
|
||||
MessageBaseTemplate baseTemplate,
|
||||
List<MessageRouteButtonDTO> routeButtons) {
|
||||
if (CollectionUtils.isEmpty(routeButtons)) return Collections.emptyList();
|
||||
ArrayList<MessageTemplateButtonV3> buttons = new ArrayList<>();
|
||||
for (MessageRouteButtonDTO routeButton : routeButtons) {
|
||||
MessageTemplateButtonV3 button = new MessageTemplateButtonV3();
|
||||
button.setName(routeButton.getName());
|
||||
button.setTemplateCode(baseTemplate.getCode());
|
||||
button.setPresetBtnType(routeButton.getPresetButtonType());
|
||||
button.setSource(routeButton.getSource());
|
||||
button.setCategory(routeButton.getCategory());
|
||||
button.setApiUrl(routeButton.getApiUrl());
|
||||
button.setUrlConfig(buildUrlConfig(groupRoot, baseTemplate, routeButton.getRouterConfigs()));
|
||||
button.setStyle(routeButton.getStyle());
|
||||
button.setExecutorShow(routeButton.getExecutorShow());
|
||||
button.setPendingShow(routeButton.getPendingShow());
|
||||
button.setPriority(routeButton.getPriority());
|
||||
button.getOrCreateRecordExt().setBtnCode(routeButton.getBtnCode());
|
||||
button.getOrCreateRecordExt().setIsMigrated(true);
|
||||
setOperatorAsSystem(button);
|
||||
buttons.add(button);
|
||||
}
|
||||
return buttons;
|
||||
}
|
||||
|
||||
private MessageTemplateGroupV3 migrateGroups(RootNodeWrapper groupRoot,
|
||||
MessageBaseTemplate baseTemplate,
|
||||
MessageTemplateDTO baseTemplateModel) {
|
||||
|
||||
if (StringUtils.isBlank(baseTemplate.getCardContent())) return null;
|
||||
|
||||
List<MessageCardContentItemDTO> cardItems = JSONObjectUtil
|
||||
.parseArray(baseTemplate.getCardContent(), MessageCardContentItemDTO.class);
|
||||
|
||||
cardItems = cardItems.stream()
|
||||
// 工人卡片的去掉,产品说他去配置
|
||||
.filter(cardItem -> !cardItem.getLabel().equals("customerPersonId"))
|
||||
.collect(toList());
|
||||
|
||||
if (CollectionUtils.isEmpty(cardItems)) return null;
|
||||
|
||||
GroupConfig groupConfig = new GroupConfig();
|
||||
groupConfig.setKeyValues(new ArrayList<>());
|
||||
for (int i = 0; i < cardItems.size(); i++) {
|
||||
MessageCardContentItemDTO cardItem = cardItems.get(i);
|
||||
KVConfig kv = new KVConfig();
|
||||
kv.setContentType(KVContentType.TEXT);
|
||||
kv.setKey(cardItem.getLabel());
|
||||
kv.setValue(cardItem.getValue());
|
||||
kv.setDisplayOnCard(i < 3);
|
||||
groupConfig.getKeyValues().add(kv);
|
||||
}
|
||||
|
||||
Supplier<MessageRouteDetailDTO> detailFactory = () -> {
|
||||
MessageTemplateRouterDTO templateRouter = baseTemplateModel.getMsgTemplateRouter();
|
||||
if (templateRouter == null) return null;
|
||||
return templateRouter.getRouteDetail();
|
||||
};
|
||||
|
||||
if (detailFactory.get() != null
|
||||
&& detailFactory.get().getShowStrategy() == BizDetailShowStrategyEnum.JUMP_TO) {
|
||||
DetailConfig detailConfig = new DetailConfig();
|
||||
detailConfig.setName("查看详情");
|
||||
detailConfig.setUrlConfig(buildUrlConfig(
|
||||
groupRoot, baseTemplate, detailFactory.get().getRouterConfigs()));
|
||||
groupConfig.setDetail(detailConfig);
|
||||
}
|
||||
|
||||
MessageTemplateGroupV3 group = new MessageTemplateGroupV3();
|
||||
group.setName("基本信息");
|
||||
group.setTemplateCode(baseTemplate.getCode());
|
||||
group.setSortOrder(1);
|
||||
group.setGroupType(GroupType.KV_VALUES);
|
||||
group.setGroupConfig(groupConfig);
|
||||
group.getOrCreateRecordExt().setIsMigrated(true);
|
||||
setOperatorAsSystem(group);
|
||||
return group;
|
||||
}
|
||||
|
||||
private UrlConfig buildUrlConfig(RootNodeWrapper groupRoot,
|
||||
MessageBaseTemplate baseTemplate,
|
||||
List<MessageRouterConfigDTO> routers) {
|
||||
UrlConfig urlConfig = new UrlConfig();
|
||||
Ref<Boolean> propsSet = Ref.create(false);
|
||||
|
||||
searchRouter(routers, TerminalTypeEnum.WEB).ifPresent(router -> {
|
||||
WebUrl pcCms = new WebUrl();
|
||||
pcCms.setOpenStrategy(WebPageOpenStrategy.NEW_PAGE);
|
||||
pcCms.setUrl(router.getUrl());
|
||||
urlConfig.setPcCms(pcCms);
|
||||
propsSet.set(true);
|
||||
});
|
||||
List<PushTerminalEnum> terminals = determineTerminalTypes(groupRoot, baseTemplate);
|
||||
searchRouter(routers, TerminalTypeEnum.IOS).ifPresent(router -> {
|
||||
AppUrl ios = new AppUrl();
|
||||
ios.setUrl(router.getUrl());
|
||||
if (terminals.contains(PushTerminalEnum.B_ENTERPRISE_APP)) {
|
||||
urlConfig.getOrCreateAppManager().setIos(ios);
|
||||
propsSet.set(true);
|
||||
}
|
||||
if (terminals.contains(PushTerminalEnum.C_WORKER_APP)) {
|
||||
urlConfig.getOrCrateAppWorker().setIos(ios);
|
||||
propsSet.set(true);
|
||||
}
|
||||
});
|
||||
searchRouter(routers, TerminalTypeEnum.ANDROID).ifPresent(router -> {
|
||||
AppUrl android = new AppUrl();
|
||||
android.setUrl(router.getUrl());
|
||||
if (terminals.contains(PushTerminalEnum.B_ENTERPRISE_APP)) {
|
||||
urlConfig.getOrCreateAppManager().setAndroid(android);
|
||||
propsSet.set(true);
|
||||
}
|
||||
if (terminals.contains(PushTerminalEnum.C_WORKER_APP)) {
|
||||
urlConfig.getOrCrateAppWorker().setAndroid(android);
|
||||
propsSet.set(true);
|
||||
}
|
||||
});
|
||||
searchRouter(routers,
|
||||
TerminalTypeEnum.WEB_VIEW,
|
||||
TerminalTypeEnum.MINI_PROGRAM,
|
||||
TerminalTypeEnum.WECHAT_MINI_PROGRAM).ifPresent(router -> {
|
||||
AppUrl appUrl = new AppUrl();
|
||||
appUrl.setUrl(router.getUrl());
|
||||
if (terminals.contains(PushTerminalEnum.B_ENTERPRISE_APP)) {
|
||||
urlConfig.getOrCreateAppManager().setIos(appUrl);
|
||||
urlConfig.getOrCreateAppManager().setAndroid(appUrl);
|
||||
propsSet.set(true);
|
||||
}
|
||||
if (terminals.contains(PushTerminalEnum.C_WORKER_APP)) {
|
||||
urlConfig.getOrCrateAppWorker().setIos(appUrl);
|
||||
urlConfig.getOrCrateAppWorker().setAndroid(appUrl);
|
||||
propsSet.set(true);
|
||||
}
|
||||
});
|
||||
|
||||
return propsSet.get() ? urlConfig : null;
|
||||
}
|
||||
|
||||
private Optional<MessageRouterConfigDTO> searchRouter(List<MessageRouterConfigDTO> routers,
|
||||
TerminalTypeEnum... terminalTypes) {
|
||||
List<TerminalTypeEnum> terminalTypesList = Arrays.asList(terminalTypes);
|
||||
return routers.stream()
|
||||
.filter(r -> terminalTypesList.contains(r.getTerminalType()))
|
||||
.findFirst();
|
||||
}
|
||||
|
||||
private List<PushTerminalEnum> determineTerminalTypes(RootNodeWrapper groupRoot,
|
||||
MessageBaseTemplate baseTemplate) {
|
||||
if (baseTemplate.getMsgCategory() == MessageCategoryEnum.GENERAL_MESSAGE) {
|
||||
return JSON.parseArray(baseTemplate.getPushTerminal(), PushTerminalEnum.class);
|
||||
}
|
||||
Set<String> paths = messageTemplateGroupDao.lambdaQuery()
|
||||
.eq(MessageTemplateGroup::getTemplateCode, baseTemplate.getCode())
|
||||
.list().stream()
|
||||
.map(MessageTemplateGroup::getPath)
|
||||
.collect(Collectors.toSet());
|
||||
Map<AppTerminalTypeEnum, List<Long>> appType2NodeIds = pendingMessageBizConfig.getMsgGroupConfig();
|
||||
Function<List<AppTerminalTypeEnum>, Boolean> appSelector = appTypes -> {
|
||||
for (Map.Entry<AppTerminalTypeEnum, List<Long>> e : appType2NodeIds.entrySet()) {
|
||||
if (!appTypes.contains(e.getKey()))
|
||||
continue;
|
||||
for (Long parentNodeId : e.getValue()) {
|
||||
ValueNode<NodeWrapper> parentNode = groupRoot
|
||||
.findValueNode(parentNodeId).orElse(null);
|
||||
if (parentNode == null) continue;
|
||||
String code = parentNode.getValue().unwrap().getCode();
|
||||
if (paths.stream().anyMatch(path -> path.contains(code))) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
};
|
||||
ArrayList<PushTerminalEnum> terminals = new ArrayList<>();
|
||||
if (appSelector.apply(Collections.singletonList(
|
||||
AppTerminalTypeEnum.C_WORKER_APP)))
|
||||
terminals.add(PushTerminalEnum.C_WORKER_APP);
|
||||
if (appSelector.apply(Arrays.asList(
|
||||
AppTerminalTypeEnum.B_ENTERPRISE_APP, AppTerminalTypeEnum.CMS_WEB_PC)))
|
||||
terminals.add(PushTerminalEnum.B_ENTERPRISE_APP);
|
||||
return terminals;
|
||||
}
|
||||
|
||||
private void setOperatorAsSystem(BaseEntityWithOperator<?> entity) {
|
||||
entity.setCreatePersonId(0L);
|
||||
entity.setCreatePersonName("system");
|
||||
entity.setUpdatePersonId(0L);
|
||||
entity.setUpdatePersonName("system");
|
||||
}
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public static class Param {
|
||||
private Set<String> templateCodes;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,36 @@
|
||||
package cn.axzo.msg.center.service.domain.parse;
|
||||
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
public class TerminalUrl {
|
||||
|
||||
public TerminalUrl(TerminalTypeEnum terminalType, String url) {
|
||||
this.terminalType = terminalType;
|
||||
this.url = url;
|
||||
}
|
||||
|
||||
/**
|
||||
* 路由编码
|
||||
*/
|
||||
private String routerCode;
|
||||
|
||||
/**
|
||||
* 路由的系统类型
|
||||
*/
|
||||
private TerminalTypeEnum terminalType;
|
||||
|
||||
/**
|
||||
* 路由地址
|
||||
*/
|
||||
private String url;
|
||||
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
package cn.axzo.msg.center.service.domain.parse;
|
||||
|
||||
import cn.axzo.msg.center.service.domain.MobileUrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.UrlConfig;
|
||||
import cn.axzo.msg.center.service.domain.url.WebUrl;
|
||||
import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
|
||||
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.B_ENTERPRISE_APP;
|
||||
import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.CMS_WEB_PC;
|
||||
import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.C_WORKER_APP;
|
||||
import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.OMS_WEB_PC;
|
||||
import static cn.axzo.msg.center.service.enums.AppTerminalTypeEnum.PC_GA_GENERAL;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
public class TerminalUrlParser {
|
||||
|
||||
private final UrlConfig config;
|
||||
private final AppTerminalTypeEnum requestType;
|
||||
|
||||
public List<TerminalUrl> parse() {
|
||||
ArrayList<TerminalUrl> urls = new ArrayList<>();
|
||||
|
||||
// !! 只会命中其一
|
||||
|
||||
// PC(CMS)
|
||||
selectWeb(CMS_WEB_PC, config.getPcCms()).ifPresent(urls::add);
|
||||
// PC(OMS)
|
||||
selectWeb(OMS_WEB_PC, config.getPcOms()).ifPresent(urls::add);
|
||||
// PC(政务系统)
|
||||
selectWeb(PC_GA_GENERAL, config.getPcGaGeneral()).ifPresent(urls::add);
|
||||
|
||||
// !! 只会命中其一
|
||||
|
||||
// APP工人端
|
||||
urls.addAll(selectApp(C_WORKER_APP, config.getAppWorker()));
|
||||
// APP管理端
|
||||
urls.addAll(selectApp(B_ENTERPRISE_APP, config.getAppManager()));
|
||||
|
||||
return urls;
|
||||
}
|
||||
|
||||
private Optional<TerminalUrl> selectWeb(
|
||||
AppTerminalTypeEnum selectType, WebUrl webUrl) {
|
||||
if (requestType != selectType)
|
||||
return Optional.empty();
|
||||
if (webUrl == null)
|
||||
return Optional.empty();
|
||||
return Optional.of(new TerminalUrl(TerminalTypeEnum.WEB, webUrl.getUrl()));
|
||||
}
|
||||
|
||||
private List<TerminalUrl> selectApp(
|
||||
AppTerminalTypeEnum selectType, MobileUrlConfig mobileUrl) {
|
||||
if (requestType != selectType)
|
||||
return Collections.emptyList();
|
||||
if (mobileUrl == null)
|
||||
return Collections.emptyList();
|
||||
ArrayList<TerminalUrl> urls = new ArrayList<>();
|
||||
urls.add(new TerminalUrl(TerminalTypeEnum.IOS, mobileUrl.getIos().getUrl()));
|
||||
urls.add(new TerminalUrl(TerminalTypeEnum.ANDROID, mobileUrl.getAndroid().getUrl()));
|
||||
return urls;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,28 @@
|
||||
package cn.axzo.msg.center.message.xxl;
|
||||
|
||||
import cn.axzo.msg.center.MsgCenterApplication;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.annotation.Commit;
|
||||
import org.springframework.test.annotation.Rollback;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@SpringBootTest(classes = MsgCenterApplication.class)
|
||||
@RequiredArgsConstructor(onConstructor_ = @Autowired)
|
||||
class MigrateMessageTemplateV3JobTest {
|
||||
|
||||
private final MigrateMessageTemplateV3Job migrateMessageTemplateV3Job;
|
||||
|
||||
@Test @Rollback @Transactional
|
||||
void exec() {
|
||||
migrateMessageTemplateV3Job.execute("{\"templateCodes\":[\"1c7effbba987411fbb6719619d2f5f07\"]}");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user