REQ-3045: 处理迁移数据问题

This commit is contained in:
yanglin 2024-10-24 16:08:48 +08:00
parent fb530c27b8
commit fbd5a92fb0
5 changed files with 66 additions and 45 deletions

View File

@ -1,5 +1,6 @@
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;
@ -37,6 +38,7 @@ 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.RouterButtonSourceEnum;
import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.WebPageOpenStrategy;
@ -65,6 +67,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
@ -116,6 +119,8 @@ public class MigrateMessageTemplateV3Job {
for (int i = 0; i < baseTemplates.size(); i++) {
MessageBaseTemplate baseTemplate = baseTemplates.get(i);
log.info("migrating template: {}/{}", i + 1, baseTemplates.size());
MessageTemplateV3 templateV3 = messageTemplateV3Dao.findByCode(baseTemplate.getCode()).orElse(null);
if (templateV3 != null) continue;
semaphore.acquire();
tasks.runAsync(() -> {
try {
@ -209,6 +214,7 @@ public class MigrateMessageTemplateV3Job {
continue;
}
MessageTemplateButtonV3 button = new MessageTemplateButtonV3();
buttons.add(button);
button.setName(routeButton.getName());
button.setCode(routeButton.getBtnCode());
button.setTemplateCode(baseTemplate.getCode());
@ -216,25 +222,30 @@ public class MigrateMessageTemplateV3Job {
button.setSource(routeButton.getSource());
button.setCategory(routeButton.getCategory());
button.setApiUrl(routeButton.getApiUrl());
if (baseTemplate.getMsgCategory() == MessageCategoryEnum.APPROVAL_PENDING_MESSAGE) {
// 不要和上面的if合并, 不然业务上不对了
if (routeButton.getCategory() == RouterCategoryEnum.JUMP) {
searchRouter(routeButton.getRouterConfigs(), TerminalTypeEnum.WEB_VIEW).ifPresent(router -> {
UrlConfig urlConfig = new UrlConfig();
urlConfig.applyUrlAsDefaults(router.getUrl());
button.setUrlConfig(urlConfig);
});
}
} else {
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().setIsMigrated(true);
setOperatorAsSystem(button);
buttons.add(button);
if (routeButton.getCategory() != RouterCategoryEnum.JUMP)
continue;
if (baseTemplate.getMsgCategory() == MessageCategoryEnum.APPROVAL_PENDING_MESSAGE
&& routeButton.getSource() == RouterButtonSourceEnum.SYSTEM) {
Ref<Boolean> urlSet = Ref.create(false);
Consumer<TerminalTypeEnum> approvalButtonBuilder = terminalType -> {
if (urlSet.get()) return;
searchRouter(routeButton.getRouterConfigs(), terminalType).ifPresent(router -> {
UrlConfig urlConfig = new UrlConfig();
urlConfig.applyUrlAsDefaults(router.getUrl());
button.setUrlConfig(urlConfig);
urlSet.set(true);
});
};
approvalButtonBuilder.accept(TerminalTypeEnum.WEB_VIEW);
} else {
button.setUrlConfig(buildUrlConfig(groupRoot, baseTemplate, routeButton.getRouterConfigs()));
}
}
return buttons;
}
@ -303,6 +314,11 @@ public class MigrateMessageTemplateV3Job {
pcCms.setOpenStrategy(WebPageOpenStrategy.NEW_PAGE);
pcCms.setUrl(router.getUrl());
urlConfig.setPcCms(pcCms);
WebUrl pcOms = new WebUrl();
pcOms.setOpenStrategy(WebPageOpenStrategy.DRAWER);
pcOms.setUrl(router.getUrl());
urlConfig.setPcOms(pcOms);
});
List<PushTerminalEnum> terminals = determineTerminalTypes(groupRoot, baseTemplate);
searchRouter(routers, TerminalTypeEnum.IOS).ifPresent(router -> {

View File

@ -17,7 +17,6 @@ import cn.axzo.msg.center.service.pending.response.v3.model.SessionUrlSelector;
import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.function.Supplier;
/**
* @author yanglin
@ -57,34 +56,40 @@ public class ModelV2PropsPopulator implements ParsedModel3Visitor {
@Override
public void visitButton(ParsedButtonV3 buttonV3) {
Supplier<ButtonRouterDTO> factory = () -> {
ButtonRouterDTO buttonV2 = new ButtonRouterDTO();
buttonV2.setDesc(buttonV3.getName());
buttonV2.setCategory(buttonV3.getCategory());
buttonV2.setPresetButtonType(buttonV3.getPresetBtnType());
buttonV2.setStyle(buttonV3.parseStyle());
buttonV2.setExecutorShow(buttonV3.getExecutorShow());
buttonV2.setPendingShow(buttonV3.getPendingShow());
buttonV2.setKey(buttonV3.getCode());
buttonV2.setSource(buttonV3.getSource());
if (response.getButtonRouters() == null)
response.setButtonRouters(new ArrayList<>());
response.getButtonRouters().add(buttonV2);
return buttonV2;
};
if (buttonV3.getCategory() != RouterCategoryEnum.JUMP) {
ButtonRouterDTO buttonV2 = factory.get();
if (buttonV3.getCategory() == RouterCategoryEnum.ACTION) {
ButtonRouterDTO buttonV2 = addButtonV2(buttonV3);
buttonV2.setUrl(buttonV3.getApiUrl());
return;
}
}
@Override
public void visitButtonUrlConfig(ParsedButtonV3 buttonV3, UrlConfig urlConfig) {
if (buttonV3.getCategory() != RouterCategoryEnum.JUMP)
return;
if (sessionUrlSelector == null) return;
sessionUrlSelector.selectFrom(buttonV3.getUrlConfig()).ifPresent(session -> {
ButtonRouterDTO buttonV2 = factory.get();
ButtonRouterDTO buttonV2 = addButtonV2(buttonV3);
sessionUrlSelector.selectFrom(urlConfig).ifPresent(session -> {
buttonV2.setUrl(session.getUrl().getUrl());
buttonV2.setTerminalType(session.getTerminalType());
});
}
private ButtonRouterDTO addButtonV2(ParsedButtonV3 buttonV3) {
ButtonRouterDTO buttonV2 = new ButtonRouterDTO();
buttonV2.setDesc(buttonV3.getName());
buttonV2.setCategory(buttonV3.getCategory());
buttonV2.setPresetButtonType(buttonV3.getPresetBtnType());
buttonV2.setStyle(buttonV3.parseStyle());
buttonV2.setExecutorShow(buttonV3.getExecutorShow());
buttonV2.setPendingShow(buttonV3.getPendingShow());
buttonV2.setKey(buttonV3.getCode());
buttonV2.setSource(buttonV3.getSource());
if (response.getButtonRouters() == null)
response.setButtonRouters(new ArrayList<>());
response.getButtonRouters().add(buttonV2);
return buttonV2;
}
@Override
public void visitTemplateCardUrlConfig(UrlConfig urlConfig) {
if (sessionUrlSelector == null) return;

View File

@ -37,9 +37,7 @@ public class ParsedModel3Walker {
ParsedTemplateV3 template) {
if (template == null) return;
CardUrlConfig cardUrlConfig = template.getCardUrlConfig();
if (cardUrlConfig != null
&& cardUrlConfig.getUrlConfig() != null
&& cardUrlConfig.getUrlConfig().hasUrl()) {
if (cardUrlConfig != null && cardUrlConfig.getUrlConfig() != null) {
visitor.visitTemplateCardUrlConfig(cardUrlConfig.getUrlConfig());
visitor.exitTemplateCardUrlConfig(cardUrlConfig.getUrlConfig());
}
@ -94,8 +92,7 @@ public class ParsedModel3Walker {
ParsedGroupInfo groupInfo) {
if (groupInfo.getDetail() == null) return;
visitor.visitGroupDetailConfig(group, groupInfo.getDetail());
if (groupInfo.getDetail().getUrlConfig() != null
&& groupInfo.getDetail().getUrlConfig().hasUrl()) {
if (groupInfo.getDetail().getUrlConfig() != null) {
visitor.visitGroupDetailUrlConfig(group, groupInfo.getDetail().getUrlConfig());
visitor.exitGroupDetailUrlConfig(group, groupInfo.getDetail().getUrlConfig());
}
@ -117,8 +114,7 @@ public class ParsedModel3Walker {
private static void visitButton(ParsedModel3Visitor visitor,
ParsedButtonV3 button) {
visitor.visitButton(button);
if (button.getUrlConfig() != null
&& button.getUrlConfig().hasUrl()) {
if (button.getUrlConfig() != null) {
visitor.visitButtonUrlConfig(button, button.getUrlConfig());
visitor.exitButtonUrlConfig(button, button.getUrlConfig());
}

View File

@ -6,10 +6,17 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* @author yanglin
*/
@Slf4j
@Component
public class MessageTemplateV3Dao extends ServiceImpl<MessageTemplateV3Mapper, MessageTemplateV3> {
public Optional<MessageTemplateV3> findByCode(String code) {
return Optional.ofNullable(lambdaQuery().eq(MessageTemplateV3::getCode, code).one());
}
}

View File

@ -6,11 +6,8 @@ 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
*/
@ -22,7 +19,7 @@ class MigrateMessageTemplateV3JobTest {
@Test @Commit @Transactional
void exec() throws Exception {
//migrateMessageTemplateV3Job.execute("{\"templateCodes\":[\"429e7d99512f4411ad521e69f88f9b71\"]}");
//migrateMessageTemplateV3Job.execute("{\"templateCodes\":[\"8ccc605371144ae4be367d59cba086a6\"]}");
migrateMessageTemplateV3Job.execute(null);
}