diff --git a/inside-notices/pom.xml b/inside-notices/pom.xml
index 8a06e915..73adc998 100644
--- a/inside-notices/pom.xml
+++ b/inside-notices/pom.xml
@@ -153,6 +153,10 @@
cn.axzo.im.center
im-center-api
+
+ cn.axzo.meepo
+ meepo-api
+
cn.axzo.basics
basics-profiles-api
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java
index 49726e7e..e54c55b0 100644
--- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/PendingMessageNewController.java
@@ -18,6 +18,7 @@ import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.GetPendingTodosRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest;
+import cn.axzo.msg.center.service.pending.request.PendingMessageDetailRequestV3;
import cn.axzo.msg.center.service.pending.request.PendingMessageFixedTemplatePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageIterateRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
@@ -158,6 +159,11 @@ public class PendingMessageNewController implements PendingMessageClient {
return CommonResponse.success(response);
}
+ @Override
+ public CommonResponse detailV3(PendingMessageDetailRequestV3 requestV3) {
+ return CommonResponse.success();
+ }
+
@Override
public CommonResponse getLatestTodoByBiz(
String templateCode, String bizCode, String subBizCode, String todoType) {
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3ExtPopulator.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3ExtPopulator.java
new file mode 100644
index 00000000..3cfb0c34
--- /dev/null
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3ExtPopulator.java
@@ -0,0 +1,132 @@
+package cn.axzo.msg.center.message.service.impl.v3;
+
+import cn.axzo.basics.profiles.api.UserProfileServiceApi;
+import cn.axzo.basics.profiles.dto.basic.BasicDto;
+import cn.axzo.basics.profiles.dto.basic.PersonProfileDto;
+import cn.axzo.basics.profiles.dto.basic.ProfessionTagDto;
+import cn.axzo.basics.profiles.dto.basic.WorkerProfileDto;
+import cn.axzo.meepo.api.BankCardApi;
+import cn.axzo.meepo.api.dto.response.WorkerBankCardRes;
+import cn.axzo.msg.center.common.utils.BizAssertions;
+import cn.axzo.msg.center.service.pending.response.v3.model.ComponentWorkerGroup;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.PersonInfo;
+import cn.axzo.msg.center.service.pending.response.v3.model.WorkerInfo;
+import cn.axzo.trade.datasecurity.core.util.DataSecurityHelper;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.groupingBy;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
+
+/**
+ * @author yanglin
+ */
+@Component
+@RequiredArgsConstructor
+public class ModelV3ExtPopulator {
+
+ private final UserProfileServiceApi userProfileServiceApi;
+ private final BankCardApi bankCardApi;
+
+ public void populate(ParsedModelV3... models) {
+ ArrayList personKeyValues = new ArrayList<>();
+ List componentWorkerGroups = new ArrayList<>();
+ for (ParsedModelV3 model : models) {
+ personKeyValues.addAll(model.getPersonKeyValues());
+ componentWorkerGroups.addAll(model.getComponentWorkerGroups());
+ }
+ populatePersonKV(personKeyValues);
+ populateComponentWorkGroup(componentWorkerGroups);
+ }
+
+ private void populatePersonKV(List keyValues) {
+ if (CollectionUtils.isEmpty(keyValues)) return;
+ List personIds = keyValues.stream()
+ .map(ParsedKV::getValueAsLong)
+ .filter(Objects::nonNull)
+ .distinct()
+ .collect(toList());
+ Map personId2Profile = BizAssertions.assertResponse(
+ userProfileServiceApi.postPersonProfiles(personIds)).stream()
+ .collect(toMap(BasicDto::getId, identity()));
+ for (ParsedKV kv : keyValues) {
+ Long personId = kv.getValueAsLong();
+ if (personId == null) continue;
+ PersonProfileDto profile = personId2Profile.get(personId);
+ if (profile == null) continue;
+ PersonInfo personInfo = new PersonInfo();
+ personInfo.setRealName(profile.getRealName());
+ personInfo.setAvatar(profile.getAvatarUrl());
+ personInfo.setMobilePhone(profile.getPhone());
+ personInfo.setMobilePhoneCiphertext(DataSecurityHelper.encrypt(profile.getPhone()));
+ kv.setPersonInfo(personInfo);
+ }
+ }
+
+ private void populateComponentWorkGroup(List groups) {
+ if (CollectionUtils.isEmpty(groups)) return;
+ List personIds = groups.stream()
+ .map(ComponentWorkerGroup::getPersonId)
+ .distinct()
+ .collect(toList());
+ Map personId2WorkerProfile = BizAssertions.assertResponse(
+ userProfileServiceApi.postWorkerProfileList(personIds)).stream()
+ .collect(toMap(workerProfileDto -> workerProfileDto.getPersonProfile().getId(), identity()));
+ Map> personId2BankCard = BizAssertions.assertResponse(
+ bankCardApi.batchGetBankByAxzoUserId(personIds)).stream()
+ .collect(groupingBy(WorkerBankCardRes::getPersonId));
+ for (ComponentWorkerGroup workerGroup : groups) {
+ WorkerProfileDto worker = personId2WorkerProfile.get(workerGroup.getPersonId());
+ if (worker == null) continue;
+ PersonProfileDto person = worker.getPersonProfile();
+ WorkerInfo workerInfo = new WorkerInfo();
+ workerInfo.setName(person.getRealName());
+ workerInfo.setIcon(person.getAvatarUrl());
+ workerInfo.setPhone(person.getPhone());
+ workerInfo.setPhoneCiphertext(DataSecurityHelper.encrypt(person.getPhone()));
+ workerInfo.setBirthday(person.getBirthday());
+ workerInfo.setNationality(person.getNationality());
+ workerInfo.setIdNumber(person.getIdNumber());
+ workerInfo.setIdNumberCiphertext(DataSecurityHelper.encrypt(person.getIdNumber()));
+ workerInfo.setIdentityValid(isWorkerIdentityValid(worker));
+ List bankCards = personId2BankCard.get(workerGroup.getPersonId());
+ workerInfo.setCardValid(CollectionUtils.isNotEmpty(bankCards)
+ && StringUtils.isNotBlank(bankCards.get(0).getBankCardNo()));
+ workerInfo.setProfessionNames(worker.getProfessionTags().stream()
+ .map(ProfessionTagDto::getProfessionName)
+ .collect(joining("、")));
+ workerGroup.getGroup().setWorkerInfo(workerInfo);
+ }
+ }
+
+ /**
+ * 从yoke拷贝过来的
+ */
+ private boolean isWorkerIdentityValid(WorkerProfileDto worker) {
+ if (worker == null) return false;
+ PersonProfileDto personProfile = worker.getPersonProfile();
+ return !(null == personProfile
+ || !StringUtils.isNotBlank(personProfile.getIdNumber())
+ || !StringUtils.isNotBlank(personProfile.getRealName())
+ || !StringUtils.isNotBlank(personProfile.getSex().toString())
+ || !StringUtils.isNotBlank(personProfile.getNationality())
+ || null == personProfile.getBirthday()
+ || !StringUtils.isNotBlank(personProfile.getIdAddress())
+ || !StringUtils.isNotBlank(personProfile.getIdAuthority())
+ || null == personProfile.getIdStartDate()
+ || null == personProfile.getIdEndDate()
+ || !StringUtils.isNotBlank(personProfile.getAvatarUrl()));
+ }
+}
\ No newline at end of file
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Parser.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java
similarity index 67%
rename from inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Parser.java
rename to inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java
index 60710ed7..71a4e9cd 100644
--- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Parser.java
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Parser.java
@@ -1,31 +1,37 @@
-package cn.axzo.msg.center.message.service.impl.v3.model;
+package cn.axzo.msg.center.message.service.impl.v3;
import cn.axzo.basics.common.BeanMapper;
import cn.axzo.framework.jackson.utility.JSON;
import cn.axzo.msg.center.domain.entity.MessageEntity;
+import cn.axzo.msg.center.domain.entity.MessageTemplateGroupV3;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
import cn.axzo.msg.center.message.domain.dto.ModelV3;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
-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.UrlConfigVisitor;
import cn.axzo.msg.center.service.domain.UrlConfigWalker;
import cn.axzo.msg.center.service.domain.url.AppUrl;
import cn.axzo.msg.center.service.domain.url.WebUrl;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedButtonV3;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedGroupV3;
+import cn.axzo.msg.center.service.enums.GroupType;
+import cn.axzo.msg.center.service.enums.KVContentType;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedModelV3;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedTemplateV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ComponentWorkerGroup;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Component;
import java.net.URLEncoder;
+import java.util.List;
import java.util.Map;
import static cn.axzo.msg.center.common.utils.PlaceholderResolver.getDefaultResolver;
@@ -38,6 +44,8 @@ import static cn.axzo.msg.center.common.utils.PlaceholderResolver.getDefaultReso
@RequiredArgsConstructor
public class ModelV3Parser {
+ private static final String CUSTOMER_PERSON_ID = "customerPersonId";
+
private final PendingMessageBizConfig cfg;
public ParsedModelV3 parseModel(ModelV3 model,
@@ -46,7 +54,7 @@ public class ModelV3Parser {
JSONObject routerParam) {
ParsedModelV3 parsedModel = new ParsedModelV3();
parsedModel.setTemplate(BeanMapper.copyBean(model, ParsedTemplateV3.class));
- parsedModel.setGroups(BeanMapper.copyList(model.getGroups(), ParsedGroupV3.class));
+ parsedModel.setGroups(copyGroups(model.getGroups()));
parsedModel.setButtons(BeanMapper.copyList(model.getButtons(), ParsedButtonV3.class));
UrlParser urlParser = new UrlParser(entity, routerParam);
ParsedModel3Walker.walkDown(parsedModel, new ParsedModel3Visitor() {
@@ -57,12 +65,26 @@ public class ModelV3Parser {
}
@Override
- public void visitGroupKeyValue(ParsedGroupV3 group, KVConfig kv) {
- kv.setValue(getDefaultResolver().resolveByMap(kv.getValue(), bizParam));
+ public void visitGroup(ParsedGroupV3 group) {
+ if (group.getGroupType() == GroupType.COMPONENT_WORKER) {
+ Long personId = bizParam.getLong(CUSTOMER_PERSON_ID);
+ if (personId != null && personId > 0)
+ parsedModel.addComponentWorkerGroup(new ComponentWorkerGroup(group, personId));
+ }
}
@Override
- public void exitGroupInfo(ParsedGroupV3 group, GroupConfig groupInfo) {
+ public void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {
+ kv.setValue(getDefaultResolver().resolveByMap(kv.getValue(), bizParam));
+ if (kv.getContentType() == KVContentType.PERSON_ID
+ && StringUtils.isNotBlank(kv.getValue())
+ && NumberUtils.isDigits(kv.getValue())) {
+ parsedModel.addPersonKV(kv);
+ }
+ }
+
+ @Override
+ public void exitGroupInfo(ParsedGroupV3 group, ParsedGroupInfo groupInfo) {
groupInfo.removeEmptyValues();
}
@@ -90,6 +112,11 @@ public class ModelV3Parser {
return parsedModel;
}
+ private List copyGroups(List groups) {
+ String jsonArray = JSON.toJSONString(groups);
+ return JSON.parseList(jsonArray, ParsedGroupV3.class);
+ }
+
public UrlConfig parseUrlConfig(UrlConfig urlConfig,
MessageEntity entity,
JSONObject routerParam) {
@@ -100,50 +127,48 @@ public class ModelV3Parser {
}
@RequiredArgsConstructor
- private class UrlParser {
+ private class UrlParser implements UrlConfigVisitor {
final MessageEntity entity;
final JSONObject routerParam;
void parseUrlConfig(UrlConfig urlConfig) {
- UrlConfigWalker.walkDown(urlConfig, new UrlConfigVisitor() {
+ UrlConfigWalker.walkDown(urlConfig, this);
+ }
- @Override
- public void visitPcOms(WebUrl pcOms) {
- pcOms.setUrl(parseUrl(pcOms.getUrl()));
- }
+ @Override
+ public void visitPcOms(WebUrl pcOms) {
+ pcOms.setUrl(parseUrl(pcOms.getUrl()));
+ }
- @Override
- public void visitPcCms(WebUrl pcCms) {
- pcCms.setUrl(parseUrl(pcCms.getUrl()));
- }
+ @Override
+ public void visitPcCms(WebUrl pcCms) {
+ pcCms.setUrl(parseUrl(pcCms.getUrl()));
+ }
- @Override
- public void visitPcGaGeneral(WebUrl pcGaGeneral) {
- pcGaGeneral.setUrl(parseUrl(pcGaGeneral.getUrl()));
- }
+ @Override
+ public void visitPcGaGeneral(WebUrl pcGaGeneral) {
+ pcGaGeneral.setUrl(parseUrl(pcGaGeneral.getUrl()));
+ }
- @Override
- public void visitAppWorkerIos(AppUrl ios) {
- ios.setUrl(parseUrl(ios.getUrl()));
- }
+ @Override
+ public void visitAppWorkerIos(AppUrl ios) {
+ ios.setUrl(parseUrl(ios.getUrl()));
+ }
- @Override
- public void visitAppWorkerAndroid(AppUrl android) {
- android.setUrl(parseUrl(android.getUrl()));
- }
+ @Override
+ public void visitAppWorkerAndroid(AppUrl android) {
+ android.setUrl(parseUrl(android.getUrl()));
+ }
- @Override
- public void visitAppManagerIos(AppUrl ios) {
- ios.setUrl(parseUrl(ios.getUrl()));
- }
+ @Override
+ public void visitAppManagerIos(AppUrl ios) {
+ ios.setUrl(parseUrl(ios.getUrl()));
+ }
- @Override
- public void visitAppManagerAndroid(AppUrl android) {
- android.setUrl(parseUrl(android.getUrl()));
- }
-
- });
+ @Override
+ public void visitAppManagerAndroid(AppUrl android) {
+ android.setUrl(parseUrl(android.getUrl()));
}
String parseUrl(String url) {
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Service.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Service.java
similarity index 98%
rename from inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Service.java
rename to inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Service.java
index 535fcce2..11e28b6a 100644
--- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/model/ModelV3Service.java
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/v3/ModelV3Service.java
@@ -1,4 +1,4 @@
-package cn.axzo.msg.center.message.service.impl.v3.model;
+package cn.axzo.msg.center.message.service.impl.v3;
import cn.axzo.msg.center.dal.MessageTemplateButtonV3Dao;
import cn.axzo.msg.center.dal.MessageTemplateGroupV3Dao;
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoManager.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoManager.java
index d23e4111..4767a1b8 100644
--- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoManager.java
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoManager.java
@@ -16,7 +16,7 @@ import cn.axzo.msg.center.domain.persistence.BaseEntityExt;
import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig;
import cn.axzo.msg.center.message.domain.dto.ModelV3;
import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam;
-import cn.axzo.msg.center.message.service.impl.v3.model.ModelV3Service;
+import cn.axzo.msg.center.message.service.impl.v3.ModelV3Service;
import cn.axzo.msg.center.message.service.todo.manage.broadcast.TodoBroadcaster;
import cn.axzo.msg.center.message.service.todo.manage.broadcast.TodoMqBroadcaster;
import cn.axzo.msg.center.message.service.todo.manage.event.HandoverEvent;
diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java
index 7d3edea8..f0494b9c 100644
--- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java
+++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/event/TodoPushSender.java
@@ -5,7 +5,7 @@ import cn.axzo.msg.center.dal.TodoBusinesses;
import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.domain.entity.TodoBusiness;
import cn.axzo.msg.center.message.domain.dto.ModelV3;
-import cn.axzo.msg.center.message.service.impl.v3.model.ModelV3Parser;
+import cn.axzo.msg.center.message.service.impl.v3.ModelV3Parser;
import cn.axzo.msg.center.message.service.todo.manage.TodoExt;
import cn.axzo.msg.center.message.service.youmeng.YoumengPush;
import cn.axzo.msg.center.message.service.youmeng.YoumengPush.PushNavigation;
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/UrlConfig.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/UrlConfig.java
index e31b3750..7dd29897 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/UrlConfig.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/UrlConfig.java
@@ -1,18 +1,13 @@
package cn.axzo.msg.center.service.domain;
-import cn.axzo.msg.center.service.domain.parse.TerminalUrl;
-import cn.axzo.msg.center.service.domain.parse.TerminalUrlParser;
import cn.axzo.msg.center.service.domain.url.AppUrl;
import cn.axzo.msg.center.service.domain.url.WebUrl;
-import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.WebPageOpenStrategy;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
-import java.util.List;
-
/**
* REQ-3045
*
@@ -47,10 +42,6 @@ public class UrlConfig {
*/
private MobileUrlConfig appManager;
- public List parse(AppTerminalTypeEnum appType) {
- return new TerminalUrlParser(this, appType).parse();
- }
-
@JsonIgnore @JSONField(serialize = false)
public WebUrl getOrCreatePcOms() {
if (pcOms == null)
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/parse/TerminalUrlParser.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/parse/TerminalUrlParser.java
deleted file mode 100644
index 5ef34266..00000000
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/domain/parse/TerminalUrlParser.java
+++ /dev/null
@@ -1,78 +0,0 @@
-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;
-
- /**
- * 根据请求客户端真实的终端类型来选择对应的URL
- */
- public List parse() {
- ArrayList 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 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 selectApp(
- AppTerminalTypeEnum selectType, MobileUrlConfig mobileUrl) {
- if (requestType != selectType)
- return Collections.emptyList();
- if (mobileUrl == null)
- return Collections.emptyList();
- ArrayList urls = new ArrayList<>();
- if (mobileUrl.getIos() != null)
- urls.add(new TerminalUrl(TerminalTypeEnum.IOS, mobileUrl.getIos().getUrl()));
- if (mobileUrl.getAndroid() != null)
- urls.add(new TerminalUrl(TerminalTypeEnum.ANDROID, mobileUrl.getAndroid().getUrl()));
- return urls;
- }
-
-}
\ No newline at end of file
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java
index 73c84b75..f13b4a01 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/client/PendingMessageClient.java
@@ -9,6 +9,7 @@ import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.GetPendingTodosRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageByBizCodeRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageCountUncompletedRequest;
+import cn.axzo.msg.center.service.pending.request.PendingMessageDetailRequestV3;
import cn.axzo.msg.center.service.pending.request.PendingMessageFixedTemplatePageRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessageIterateRequest;
import cn.axzo.msg.center.service.pending.request.PendingMessagePageRequest;
@@ -159,12 +160,18 @@ public interface PendingMessageClient {
* @param terminalType APP终端类型
* @return 代办详情
*/
+ @Deprecated
@PostMapping(value = "/pending-message/record/detail", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse detail(@RequestParam("msgIdentityCode") String msgIdentityCode,
@RequestParam("terminalType") TerminalTypeEnum terminalType,
@RequestParam(value = "queryType", required = false)
TodoQueryType queryType);
+ @Deprecated
+ @PostMapping(value = "/pending-message/record/detailV3", produces = {MediaType.APPLICATION_JSON_VALUE})
+ CommonResponse detailV3(
+ @RequestBody @Valid PendingMessageDetailRequestV3 requestV3);
+
/**
* 根据bizCode查询待办详情
*
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/GetPendingTodosRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/GetPendingTodosRequest.java
index 8bc24855..d5c6d60d 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/GetPendingTodosRequest.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/GetPendingTodosRequest.java
@@ -1,5 +1,6 @@
package cn.axzo.msg.center.service.pending.request;
+import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import lombok.Getter;
import lombok.Setter;
@@ -36,6 +37,8 @@ public class GetPendingTodosRequest {
private TerminalTypeEnum terminalType;
+ private AppTerminalTypeEnum appTerminalType;
+
public int determineLimit() {
if (limit <= 0)
return 10;
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageDetailRequestV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageDetailRequestV3.java
new file mode 100644
index 00000000..dba5ba73
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageDetailRequestV3.java
@@ -0,0 +1,19 @@
+package cn.axzo.msg.center.service.pending.request;
+
+import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
+import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
+import cn.axzo.msg.center.service.enums.TodoQueryType;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author yanglin
+ */
+@Setter
+@Getter
+public class PendingMessageDetailRequestV3 {
+ private String msgIdentityCode;
+ private TerminalTypeEnum terminalType;
+ private AppTerminalTypeEnum appTerminalType;
+ private TodoQueryType queryType;
+}
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageQueryRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageQueryRequest.java
index 131cc44d..21500cd0 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageQueryRequest.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/request/PendingMessageQueryRequest.java
@@ -1,5 +1,6 @@
package cn.axzo.msg.center.service.pending.request;
+import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
@@ -34,6 +35,7 @@ public class PendingMessageQueryRequest implements Serializable {
* WECHAT_MINI_PROGRAM: 微信小程序页面
*/
private TerminalTypeEnum terminalType;
+ private AppTerminalTypeEnum appTerminalType;
/**
* 代办消息状态
* UNSENT: 未发送
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/PendingMessageResponse.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/PendingMessageResponse.java
index 2a07e1bc..d5901ee9 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/PendingMessageResponse.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/PendingMessageResponse.java
@@ -3,7 +3,6 @@ package cn.axzo.msg.center.service.pending.response;
import cn.axzo.msg.center.api.custombutton.ProposedButtonFilter;
import cn.axzo.msg.center.api.custombutton.ProposedButtons;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
-import cn.axzo.msg.center.service.domain.KVConfig;
import cn.axzo.msg.center.service.dto.ButtonRouterDTO;
import cn.axzo.msg.center.service.dto.DetailRouterDTO;
import cn.axzo.msg.center.service.dto.IdentityDTO;
@@ -15,13 +14,12 @@ import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
import cn.axzo.msg.center.service.enums.MessageCategoryEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import cn.axzo.msg.center.service.enums.PendingMessageStateEnum;
+import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
import cn.axzo.msg.center.service.enums.TodoQueryType;
import cn.axzo.msg.center.service.enums.TodoType;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedButtonV3;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedGroupV3;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Visitor;
+import cn.axzo.msg.center.service.pending.response.v3.ModelV2PropsPopulator;
import cn.axzo.msg.center.service.pending.response.v3.ParsedModel3Walker;
-import cn.axzo.msg.center.service.pending.response.v3.ParsedModelV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
import cn.axzo.msg.center.service.template.response.MessageDetailStyle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -271,24 +269,13 @@ public class PendingMessageResponse implements Serializable, TodoButtonProvider
*/
private CardUrlConfig cardUrlConfig;
- public void populatePreviousModelProps(AppTerminalTypeEnum appType) {
+ public void populateV2Props(TerminalTypeEnum terminalTypeInRequest,
+ AppTerminalTypeEnum appTypeInRequest) {
if (modelV3 == null) return;
cardItems = new ArrayList<>();
buttonRouters = new ArrayList<>();
- ParsedModel3Walker.walkDown(modelV3, new ParsedModel3Visitor() {
- @Override
- public void visitGroupKeyValue(ParsedGroupV3 group, KVConfig kv) {
- MessageCardContentItemDTO cardItem = new MessageCardContentItemDTO();
- cardItem.setLabel(kv.getKey());
- cardItem.setValue(kv.getValue());
- cardItems.add(cardItem);
- }
-
- @Override
- public void visitButton(ParsedButtonV3 button) {
- buttonRouters.add(new ButtonRouterDTO());
- }
- });
+ ParsedModel3Walker.walkDown(modelV3, new ModelV2PropsPopulator(
+ this, terminalTypeInRequest, appTypeInRequest));
}
public void adjustProposedButtons(boolean forPromoter) {
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ModelV2PropsPopulator.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ModelV2PropsPopulator.java
new file mode 100644
index 00000000..11794471
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ModelV2PropsPopulator.java
@@ -0,0 +1,118 @@
+package cn.axzo.msg.center.service.pending.response.v3;
+
+import cn.axzo.msg.center.service.domain.MobileUrlConfig;
+import cn.axzo.msg.center.service.domain.UrlConfig;
+import cn.axzo.msg.center.service.domain.parse.TerminalUrl;
+import cn.axzo.msg.center.service.domain.url.WebUrl;
+import cn.axzo.msg.center.service.dto.ButtonRouterDTO;
+import cn.axzo.msg.center.service.dto.MessageCardContentItemDTO;
+import cn.axzo.msg.center.service.enums.AppTerminalTypeEnum;
+import cn.axzo.msg.center.service.enums.RouterCategoryEnum;
+import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
+import cn.axzo.msg.center.service.pending.response.PendingMessageResponse;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Optional;
+import java.util.function.Supplier;
+
+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 ModelV2PropsPopulator implements ParsedModel3Visitor {
+
+ private final PendingMessageResponse response;
+ private final TerminalTypeEnum terminalTypeInRequest;
+ private final AppTerminalTypeEnum appTypeInRequest;
+
+ @Override
+ public void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {
+ MessageCardContentItemDTO cardItem = new MessageCardContentItemDTO();
+ cardItem.setLabel(kv.getKey());
+ cardItem.setValue(kv.getValue());
+ response.getCardItems().add(cardItem);
+ }
+
+ @Override
+ public void visitButton(ParsedButtonV3 buttonV3) {
+ Supplier factory = () -> {
+ ButtonRouterDTO buttonV2 = new ButtonRouterDTO();
+ buttonV2.setDesc("from model v3");
+ 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());
+ response.getButtonRouters().add(buttonV2);
+ return buttonV2;
+ };
+ if (buttonV3.getCategory() != RouterCategoryEnum.JUMP) {
+ ButtonRouterDTO buttonV2 = factory.get();
+ buttonV2.setUrl(buttonV3.getApiUrl());
+ return;
+ }
+ parseTerminalUrl(buttonV3.getUrlConfig()).ifPresent(terminalUrl -> {
+ ButtonRouterDTO buttonV2 = factory.get();
+ buttonV2.setUrl(terminalUrl.getUrl());
+ buttonV2.setTerminalType(terminalUrl.getTerminalType());
+ });
+ }
+
+ /**
+ * 根据请求客户端真实的终端类型来选择对应的URL
+ */
+ public Optional parseTerminalUrl(UrlConfig config) {
+ if (appTypeInRequest == null)
+ return Optional.empty();
+ if (config == null) return Optional.empty();
+ // PC(CMS)
+ TerminalUrl pcCms = selectWeb(CMS_WEB_PC, config.getPcCms());
+ if (pcCms != null) return Optional.of(pcCms);
+ // PC(OMS)
+ TerminalUrl pcOms = selectWeb(OMS_WEB_PC, config.getPcOms());
+ if (pcOms != null) return Optional.of(pcOms);
+ // PC(政务系统)
+ TerminalUrl pcGaGeneral = selectWeb(PC_GA_GENERAL, config.getPcGaGeneral());
+ if (pcGaGeneral != null) return Optional.of(pcGaGeneral);
+ // APP工人端
+ TerminalUrl appWorker = selectApp(C_WORKER_APP, config.getAppWorker());
+ if (appWorker != null) return Optional.of(appWorker);
+ // APP管理端
+ TerminalUrl appManager = selectApp(B_ENTERPRISE_APP, config.getAppManager());
+ return Optional.ofNullable(appManager);
+ }
+
+ private TerminalUrl selectWeb(
+ AppTerminalTypeEnum selectAppType, WebUrl webUrl) {
+ if (appTypeInRequest != selectAppType)
+ return null;
+ if (webUrl == null)
+ return null;
+ return new TerminalUrl(TerminalTypeEnum.WEB, webUrl.getUrl());
+ }
+
+ private TerminalUrl selectApp(
+ AppTerminalTypeEnum selectAppType, MobileUrlConfig mobileUrl) {
+ if (appTypeInRequest != selectAppType)
+ return null;
+ if (mobileUrl == null)
+ return null;
+ if (mobileUrl.getIos() != null && terminalTypeInRequest == TerminalTypeEnum.IOS)
+ return new TerminalUrl(TerminalTypeEnum.IOS, mobileUrl.getIos().getUrl());
+ if (mobileUrl.getAndroid() != null && terminalTypeInRequest == TerminalTypeEnum.ANDROID)
+ return new TerminalUrl(TerminalTypeEnum.ANDROID, mobileUrl.getAndroid().getUrl());
+ return null;
+ }
+
+}
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Visitor.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Visitor.java
index 59ae9dc0..bf9084c3 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Visitor.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Visitor.java
@@ -1,9 +1,13 @@
package cn.axzo.msg.center.service.pending.response.v3;
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.pending.response.v3.model.ParsedButtonV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
/**
* @author yanglin
@@ -26,13 +30,13 @@ public interface ParsedModel3Visitor {
default void exitGroup(ParsedGroupV3 group) {}
- default void visitGroupInfo(ParsedGroupV3 group, GroupConfig groupInfo) {}
+ default void visitGroupInfo(ParsedGroupV3 group, ParsedGroupInfo groupInfo) {}
- default void exitGroupInfo(ParsedGroupV3 group, GroupConfig groupInfo) {}
+ default void exitGroupInfo(ParsedGroupV3 group, ParsedGroupInfo groupInfo) {}
- default void visitGroupKeyValue(ParsedGroupV3 group, KVConfig kv) {}
+ default void visitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {}
- default void exitGroupKeyValue(ParsedGroupV3 group, KVConfig kv) {}
+ default void exitGroupKeyValue(ParsedGroupV3 group, ParsedKV kv) {}
default void visitGroupDetail(ParsedGroupV3 group, DetailConfig detailConfig) {}
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Walker.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Walker.java
index cafc8383..6770b37e 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Walker.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModel3Walker.java
@@ -1,8 +1,12 @@
package cn.axzo.msg.center.service.pending.response.v3;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
-import cn.axzo.msg.center.service.domain.GroupConfig;
-import cn.axzo.msg.center.service.domain.KVConfig;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedButtonV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupInfo;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedGroupV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedKV;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedModelV3;
+import cn.axzo.msg.center.service.pending.response.v3.model.ParsedTemplateV3;
/**
* @author yanglin
@@ -34,7 +38,7 @@ public class ParsedModel3Walker {
private static void visitGroup(ParsedModel3Visitor visitor, ParsedGroupV3 group) {
visitor.visitGroup(group);
- GroupConfig groupInfo = group.getGroupInfo();
+ ParsedGroupInfo groupInfo = group.getGroupInfo();
if (groupInfo != null) {
visitor.visitGroupInfo(group, groupInfo);
visitGroupKeyValues(visitor, group, groupInfo);
@@ -46,9 +50,9 @@ public class ParsedModel3Walker {
private static void visitGroupKeyValues(ParsedModel3Visitor visitor,
ParsedGroupV3 group,
- GroupConfig groupInfo) {
+ ParsedGroupInfo groupInfo) {
if (groupInfo.getKeyValues() == null) return;
- for (KVConfig kv : groupInfo.getKeyValues()) {
+ for (ParsedKV kv : groupInfo.getKeyValues()) {
visitor.visitGroupKeyValue(group, kv);
visitor.exitGroupKeyValue(group, kv);
}
@@ -56,7 +60,7 @@ public class ParsedModel3Walker {
private static void visitGroupDetail(ParsedModel3Visitor visitor,
ParsedGroupV3 group,
- GroupConfig groupInfo) {
+ ParsedGroupInfo groupInfo) {
if (groupInfo.getDetail() == null) return;
visitor.visitGroupDetail(group, groupInfo.getDetail());
if (groupInfo.getDetail().getUrlConfig() != null) {
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ComponentWorkerGroup.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ComponentWorkerGroup.java
new file mode 100644
index 00000000..7d1c33e7
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ComponentWorkerGroup.java
@@ -0,0 +1,14 @@
+package cn.axzo.msg.center.service.pending.response.v3.model;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * @author yanglin
+ */
+@Getter
+@RequiredArgsConstructor
+public class ComponentWorkerGroup {
+ private final ParsedGroupV3 group;
+ private final Long personId;
+}
\ No newline at end of file
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedButtonV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedButtonV3.java
similarity index 77%
rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedButtonV3.java
rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedButtonV3.java
index fca9798a..cde75152 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedButtonV3.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedButtonV3.java
@@ -1,13 +1,18 @@
-package cn.axzo.msg.center.service.pending.response.v3;
+package cn.axzo.msg.center.service.pending.response.v3.model;
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 com.alibaba.fastjson.JSONArray;
import lombok.Getter;
import lombok.Setter;
+import java.util.Collections;
+import java.util.List;
+
/**
* @author yanglin
*/
@@ -72,4 +77,8 @@ public class ParsedButtonV3 {
*/
private Integer priority;
+ public List parseStyle() {
+ if (style == null) return Collections.emptyList();
+ return JSON.parseArray(style.toJSONString(), ButtonStyleEnum.class);
+ }
}
\ No newline at end of file
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupInfo.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupInfo.java
new file mode 100644
index 00000000..3187a4c0
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupInfo.java
@@ -0,0 +1,30 @@
+package cn.axzo.msg.center.service.pending.response.v3.model;
+
+import cn.axzo.msg.center.service.domain.DetailConfig;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @author yanglin
+ */
+@Setter
+@Getter
+public class ParsedGroupInfo {
+
+ /**
+ * key/value的列表
+ */
+ private List keyValues;
+
+ /**
+ * 详情的配置
+ */
+ private DetailConfig detail;
+
+ public void removeEmptyValues() {
+ if (keyValues == null) return;
+ keyValues.removeIf(ParsedKV::isValueEmpty);
+ }
+}
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedGroupV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupV3.java
similarity index 78%
rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedGroupV3.java
rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupV3.java
index 4aa77f6a..c2da3744 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedGroupV3.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedGroupV3.java
@@ -1,7 +1,5 @@
-package cn.axzo.msg.center.service.pending.response.v3;
+package cn.axzo.msg.center.service.pending.response.v3.model;
-import cn.axzo.msg.center.service.domain.GroupConfig;
-import cn.axzo.msg.center.service.domain.KVConfig;
import cn.axzo.msg.center.service.enums.GroupType;
import lombok.Getter;
import lombok.Setter;
@@ -34,7 +32,7 @@ public class ParsedGroupV3 {
/**
* 分组信息. groupType=KV_VALUES读这个信息
*/
- private GroupConfig groupInfo;
+ private ParsedGroupInfo groupInfo;
/**
* 工人卡片信息. groupType=COMPONENT_WORKER读这个信息
@@ -44,7 +42,7 @@ public class ParsedGroupV3 {
private WorkerInfo workerInfo;
@NotNull
- public List getKeyValues() {
+ public List getKeyValues() {
return groupInfo == null ? Collections.emptyList() : groupInfo.getKeyValues();
}
}
\ No newline at end of file
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java
new file mode 100644
index 00000000..6ac88291
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedKV.java
@@ -0,0 +1,54 @@
+package cn.axzo.msg.center.service.pending.response.v3.model;
+
+import cn.axzo.msg.center.service.enums.KVContentType;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.math.NumberUtils;
+
+/**
+ * @author yanglin
+ */
+@Setter
+@Getter
+public class ParsedKV {
+
+ /**
+ * 内容的类型. TEXT: 文本, PHONE: 手机号, ATTACHMENT: 附件, PERSON_ID: 自然人ID
+ */
+ private KVContentType contentType;
+
+ /**
+ * 键: 项目
+ */
+ private String key;
+
+ /**
+ * 值
+ */
+ private String value;
+
+ /**
+ * 是否显示在卡片上
+ */
+ private boolean displayOnCard;
+
+ public boolean isValueEmpty() {
+ return StringUtils.isBlank(value) || "null".equalsIgnoreCase(value);
+ }
+
+ public Long getValueAsLong() {
+ if (isValueEmpty())
+ return null;
+ if (!NumberUtils.isDigits(value))
+ return null;
+ return Long.parseLong(value);
+ }
+
+ // !! 额外信息
+
+ /**
+ * contentType=PERSON_ID时的人员信息, 由yoke填充
+ */
+ private PersonInfo personInfo;
+}
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java
similarity index 64%
rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3.java
rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java
index 480f8e67..743a32a3 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedModelV3.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedModelV3.java
@@ -1,4 +1,4 @@
-package cn.axzo.msg.center.service.pending.response.v3;
+package cn.axzo.msg.center.service.pending.response.v3.model;
import cn.axzo.msg.center.service.enums.GroupType;
import com.alibaba.fastjson.annotation.JSONField;
@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -21,7 +22,8 @@ public class ParsedModelV3 {
/**
* 模板. 对前端来说没用
*/
- @JsonIgnore @JSONField(serialize = false) private ParsedTemplateV3 template;
+ @JsonIgnore @JSONField(serialize = false)
+ private ParsedTemplateV3 template;
/**
* 分组
*/
@@ -32,6 +34,26 @@ public class ParsedModelV3 {
*/
private List buttons;
+ /**
+ * 前端忽略
+ */
+ @JsonIgnore @JSONField(serialize = false)
+ private List personKeyValues = new ArrayList<>();
+
+ /**
+ * 前端忽略
+ */
+ @JsonIgnore @JSONField(serialize = false)
+ private List componentWorkerGroups = new ArrayList<>();
+
+ public void addPersonKV(ParsedKV kv) {
+ personKeyValues.add(kv);
+ }
+
+ public void addComponentWorkerGroup(ComponentWorkerGroup group) {
+ componentWorkerGroups.add(group);
+ }
+
public List getGroups(GroupType type) {
return determineGroups().stream()
.filter(group -> group.getGroupType() == type)
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedTemplateV3.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedTemplateV3.java
similarity index 96%
rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedTemplateV3.java
rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedTemplateV3.java
index f23330c3..f90facd7 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/ParsedTemplateV3.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/ParsedTemplateV3.java
@@ -1,4 +1,4 @@
-package cn.axzo.msg.center.service.pending.response.v3;
+package cn.axzo.msg.center.service.pending.response.v3.model;
import cn.axzo.msg.center.service.domain.CardUrlConfig;
import cn.axzo.msg.center.service.enums.CardUrlOpenStrategy;
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/PersonInfo.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/PersonInfo.java
new file mode 100644
index 00000000..d4390af4
--- /dev/null
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/PersonInfo.java
@@ -0,0 +1,33 @@
+package cn.axzo.msg.center.service.pending.response.v3.model;
+
+import cn.axzo.trade.datasecurity.sd.extension.annotation.SDCellPhoneField;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author yanglin
+ */
+@Setter
+@Getter
+public class PersonInfo {
+ /**
+ * 用户姓名
+ */
+ private String realName;
+
+ /**
+ * 用户头像
+ */
+ private String avatar;
+
+ /**
+ * 手机号, 未加密
+ */
+ @SDCellPhoneField
+ private String mobilePhone;
+
+ /**
+ * 加密手机号
+ */
+ private String mobilePhoneCiphertext;
+}
\ No newline at end of file
diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/WorkerInfo.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/WorkerInfo.java
similarity index 94%
rename from msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/WorkerInfo.java
rename to msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/WorkerInfo.java
index 14d8b989..256cdf98 100644
--- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/WorkerInfo.java
+++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/pending/response/v3/model/WorkerInfo.java
@@ -1,4 +1,4 @@
-package cn.axzo.msg.center.service.pending.response.v3;
+package cn.axzo.msg.center.service.pending.response.v3.model;
import cn.axzo.trade.datasecurity.sd.extension.annotation.SDCellPhoneField;
import cn.axzo.trade.datasecurity.sd.extension.annotation.SDIdCardField;
diff --git a/start/src/main/java/cn/axzo/msg/center/MsgCenterApplication.java b/start/src/main/java/cn/axzo/msg/center/MsgCenterApplication.java
index f433d020..7045ae72 100644
--- a/start/src/main/java/cn/axzo/msg/center/MsgCenterApplication.java
+++ b/start/src/main/java/cn/axzo/msg/center/MsgCenterApplication.java
@@ -25,7 +25,8 @@ import org.springframework.core.env.Environment;
"cn.axzo.pluto.api",
"cn.axzo.basics.profiles.api",
"cn.axzo.apollo.api",
- "cn.axzo.msg.center.inside.notices.service.impl"
+ "cn.axzo.msg.center.inside.notices.service.impl",
+ "cn.axzo.meepo.api"
})
/*@EnableAsync*/
public class MsgCenterApplication {
diff --git a/start/src/test/java/cn/axzo/msg/center/message/service/youmeng/YoumengTemplateClientTest.java b/start/src/test/java/cn/axzo/msg/center/message/service/youmeng/YoumengTemplateClientTest.java
deleted file mode 100644
index 9b334f2f..00000000
--- a/start/src/test/java/cn/axzo/msg/center/message/service/youmeng/YoumengTemplateClientTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package cn.axzo.msg.center.message.service.youmeng;
-
-import cn.axzo.msg.center.MsgCenterApplication;
-import cn.axzo.msg.center.service.enums.TerminalTypeEnum;
-import com.google.common.util.concurrent.Uninterruptibles;
-import lombok.RequiredArgsConstructor;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-
-import java.util.Collections;
-import java.util.concurrent.TimeUnit;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-/**
- * @author yanglin
- */
-@SpringBootTest(classes = MsgCenterApplication.class)
-@RequiredArgsConstructor(onConstructor_ = @Autowired)
-class YoumengTemplateClientTest {
-
- private final YoumengTemplateClient youmengTemplateClient;
-
- @Test
- void foo() {
- YoumengPush push = new YoumengPush();
- push.setTitle("aaa");
- push.setContent("bbb");
- push.setReceiverOuId(3L);
- push.setReceiverPersonId(444L);
- YoumengPush.PushNavigation navigation = new YoumengPush.PushNavigation();
- navigation.setUrl("test_url");
- navigation.setPlatform(TerminalTypeEnum.ANDROID);
- push.setNavigations(Collections.singletonList(navigation));
- youmengTemplateClient.syncSend(590L, Collections.singletonList(push));
- Uninterruptibles.sleepUninterruptibly(1, TimeUnit.MINUTES);
- }
-
-}
\ No newline at end of file