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