From cb2d40170f600d6b41535e5c709fc526812cd0c5 Mon Sep 17 00:00:00 2001 From: xudawei Date: Tue, 17 Dec 2024 16:20:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:(REQ-3201)=20=E5=AE=9A=E6=97=B6=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E6=9B=B4=E6=96=B0=E6=A8=A1=E7=89=88=E4=B8=AD=E7=9A=84?= =?UTF-8?q?appVersionChannel/=E7=9B=91=E6=8E=A7=E5=8D=A1=E7=89=87=E9=A2=84?= =?UTF-8?q?=E8=AE=BEMQ?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CardChangeStateSyncTodoEventHandler.java | 79 ++++++++++++ .../MessageTemplateV3Controller.java | 12 ++ .../MessageTemplateV3SaveOrUpdateParam.java | 9 +- .../impl/MessageTemplateV3ServiceImpl.java | 8 +- .../service/todo/TodoWithCardWrapper.java | 117 +++++++++++++----- .../service/todo/manage/TodoLogger.java | 4 +- .../service/todo/manage/TodoManager.java | 2 +- ...pdateTemplateV3ChannelStyleVersionJob.java | 32 +++-- .../cn/axzo/msg/center/mq/RocketMQConfig.java | 23 ++++ .../client/MessageTemplateV3Client.java | 7 ++ ...emplateV3UpdateChannelStyleJobRequest.java | 22 ++++ .../java/cn/axzo/msg/center/dal/TodoDao.java | 12 ++ .../common/constans/CommonConstants.java | 5 + 13 files changed, 279 insertions(+), 53 deletions(-) create mode 100644 inside-notices/src/main/java/cn/axzo/msg/center/event/card/CardChangeStateSyncTodoEventHandler.java create mode 100644 msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/TemplateV3UpdateChannelStyleJobRequest.java diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/event/card/CardChangeStateSyncTodoEventHandler.java b/inside-notices/src/main/java/cn/axzo/msg/center/event/card/CardChangeStateSyncTodoEventHandler.java new file mode 100644 index 00000000..4414e1aa --- /dev/null +++ b/inside-notices/src/main/java/cn/axzo/msg/center/event/card/CardChangeStateSyncTodoEventHandler.java @@ -0,0 +1,79 @@ +package cn.axzo.msg.center.event.card; + +import cn.axzo.framework.rocketmq.Event; +import cn.axzo.framework.rocketmq.EventConsumer; +import cn.axzo.framework.rocketmq.EventHandler; +import cn.axzo.msg.center.api.mq.CardPresetButtonPressedMessage; +import cn.axzo.msg.center.message.service.todo.TodoWithCardWrapper; +import cn.axzo.msg.center.notices.common.constans.CommonConstants; +import cn.axzo.msg.center.service.enums.MqMessageType; +import com.alibaba.fastjson.JSON; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.Objects; + +/** + * @author xudawei@axzo.cn + * @date 2024/11/07 + * @desc 群聊创建MQ消费 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class CardChangeStateSyncTodoEventHandler implements EventHandler, InitializingBean { + + @Autowired + private EventConsumer eventConsumer; + + @Autowired + private TodoWithCardWrapper todoWithCardWrapper; + + + @Override + public void onEvent(Event event, EventConsumer.Context context) { + if (!MqMessageType.CARD_PRESET_BUTTON_PRESSED.getEventName().equalsIgnoreCase(event.getEventCode().getName())) { + return; + } + + log.info("CardChangeStateSyncTodoEventHandler-start - handle mq event, event={}", JSON.toJSONString(event)); + try { + long start = System.currentTimeMillis(); + handleMqMessage(event); + long end = System.currentTimeMillis(); + log.warn("CardChangeStateSyncTodoEventHandler-handle mq event, used={}ms, event={}", end - start, JSON.toJSONString(event)); + } catch (Exception e) { + log.warn("CardChangeStateSyncTodoEventHandler-error - handle mq event, event={}", JSON.toJSONString(event), e); + } + + } + /** + * 业务逻辑 + */ + private void handleMqMessage(Event event) { + //解析数据 + CardPresetButtonPressedMessage payload = event.normalizedData(CardPresetButtonPressedMessage.class); + if (Objects.isNull(payload)) { + return; + } + if (Objects.isNull(payload.getCardInfo())) { + return; + } + if (!CommonConstants.TODO_SYSN_CARD_APP_CODE.equalsIgnoreCase(payload.getCardInfo().getAppCode())) { + return; + } + Long operatorId = StringUtils.hasText(event.getOperatorId()) ? Long.valueOf(event.getOperatorId()) : 0L; + todoWithCardWrapper.fireTodoWhenPresetButtonPressedByCard(payload.getPresetButtonType(), payload.getCardInfo(), operatorId); + + } + + @Override + public void afterPropertiesSet() { + Event.EventCode eventCode = new Event.EventCode(MqMessageType.CARD_PRESET_BUTTON_PRESSED.getEventModel(), MqMessageType.CARD_PRESET_BUTTON_PRESSED.getEventName()); + eventConsumer.registerHandler(eventCode, this); + } +} diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateV3Controller.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateV3Controller.java index 6d7043de..0aea9ee3 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateV3Controller.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/controller/MessageTemplateV3Controller.java @@ -7,6 +7,7 @@ import cn.axzo.msg.center.message.service.MessageTemplateNewService; import cn.axzo.msg.center.message.service.MessageTemplateV3Service; import cn.axzo.msg.center.message.service.RelationTemplateMapService; import cn.axzo.msg.center.message.service.impl.MessageTemplateV3SyncService; +import cn.axzo.msg.center.message.xxl.UpdateTemplateV3ChannelStyleVersionJob; import cn.axzo.msg.center.service.template.client.MessageTemplateV3Client; import cn.axzo.msg.center.service.template.request.MessageTemplateSyncQueryRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateV3CreateRequest; @@ -16,6 +17,7 @@ import cn.axzo.msg.center.service.template.request.MessageTemplateV3SyncRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateV3SyncResponse; import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateStatusRequest; +import cn.axzo.msg.center.service.template.request.TemplateV3UpdateChannelStyleJobRequest; import cn.axzo.msg.center.service.template.response.MessageDetailStyle; import cn.axzo.msg.center.service.template.response.MessageTemplateV3ConfigStateResponse; import cn.axzo.msg.center.service.template.response.MessageTemplateV3DetailResponse; @@ -51,6 +53,7 @@ public class MessageTemplateV3Controller implements MessageTemplateV3Client { private final RelationTemplateMapService relationTemplateMapService; private final MessageTemplateV3SyncService messageTemplateV3SyncService; private final MessageTemplateV3Service messageTemplateV3Service; + private final UpdateTemplateV3ChannelStyleVersionJob updateTemplateV3ChannelStyleVersionJob; @Override public CommonResponse save(MessageTemplateV3CreateRequest request) { @@ -130,4 +133,13 @@ public class MessageTemplateV3Controller implements MessageTemplateV3Client { public CommonResponse> configState() { return CommonResponse.success(MessageTemplateV3ConfigStateResponse.cardStateToResp()); } + + /** + * 定时更新模版V3信息 + */ + @Override + public CommonResponse updateChannelStyleVersionJob(@RequestBody @Valid TemplateV3UpdateChannelStyleJobRequest request) throws Exception { + updateTemplateV3ChannelStyleVersionJob.execute(request.getParams()); + return CommonResponse.success(); + } } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateV3SaveOrUpdateParam.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateV3SaveOrUpdateParam.java index 0f3d6394..08e6f540 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateV3SaveOrUpdateParam.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/domain/param/MessageTemplateV3SaveOrUpdateParam.java @@ -29,6 +29,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.compress.utils.Lists; import java.io.Serializable; import java.util.List; @@ -308,15 +309,15 @@ public class MessageTemplateV3SaveOrUpdateParam implements Serializable { .groups(request.getGroups()) .pushData(request.getPushData()) //推送终端/最低版本 - .appVersionConfigs(request.getAppVersionConfigs()) + .appVersionConfigs(CollectionUtils.isNotEmpty(request.getAppVersionConfigs()) ? request.getAppVersionConfigs() : Lists.newArrayList()) //消息通道,IM/代办 - .channels(request.getChannels()) + .channels(CollectionUtils.isNotEmpty(request.getChannels()) ? request.getChannels() : Lists.newArrayList()) //卡片样式编码 .cardStyleCode(request.getCardStyleCode()) //卡片样式扩展字段 - .cardExtFields(request.getCardExtFields()) + .cardExtFields(CollectionUtils.isNotEmpty(request.getCardExtFields()) ? request.getCardExtFields() : Lists.newArrayList()) //配置状态戳 - .stateImageConfigs(request.getStateImageConfigs()) + .stateImageConfigs(CollectionUtils.isNotEmpty(request.getStateImageConfigs()) ? request.getStateImageConfigs() : Lists.newArrayList()) .build(); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateV3ServiceImpl.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateV3ServiceImpl.java index 071f4c0a..36d0232c 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateV3ServiceImpl.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/impl/MessageTemplateV3ServiceImpl.java @@ -403,15 +403,15 @@ public class MessageTemplateV3ServiceImpl implements MessageTemplateV3Service { .set(Objects.nonNull(pushData), MessageTemplateV3::getPushData, pushData == null ? null : pushData.toJSONString()) //推送终端/最低版本 - .set(CollectionUtils.isNotEmpty(param.getAppVersionConfigs()), MessageTemplateV3::getAppVersionConfigs, JSON.toJSONString(param.getAppVersionConfigs())) + .set(MessageTemplateV3::getAppVersionConfigs, JSON.toJSONString(param.getAppVersionConfigs())) //消息通道:IM/待办 - .set(CollectionUtils.isNotEmpty(param.getChannels()), MessageTemplateV3::getChannels, JSON.toJSONString(param.getChannels())) + .set( MessageTemplateV3::getChannels, JSON.toJSONString(param.getChannels())) //卡片样式编码 .set(StringUtils.isNotBlank(param.getCardStyleCode()), MessageTemplateV3::getCardStyleCode, param.getCardStyleCode()) //卡片样式扩展字段 - .set(CollectionUtils.isNotEmpty(param.getCardExtFields()), MessageTemplateV3::getCardExtFields, JSON.toJSONString(param.getCardExtFields())) + .set( MessageTemplateV3::getCardExtFields, JSON.toJSONString(param.getCardExtFields())) //配置状态戳 - .set(CollectionUtils.isNotEmpty(param.getStateImageConfigs()), MessageTemplateV3::getStateImageConfigs, JSON.toJSONString(param.getStateImageConfigs())) + .set( MessageTemplateV3::getStateImageConfigs, JSON.toJSONString(param.getStateImageConfigs())) .update(); BizAssertions.assertTrue(updated, "模版不存在:", param.getTemplateCode()); } diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWithCardWrapper.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWithCardWrapper.java index 41f4b0ab..6627daa5 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWithCardWrapper.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/TodoWithCardWrapper.java @@ -1,12 +1,20 @@ package cn.axzo.msg.center.message.service.todo; +import cn.axzo.msg.center.api.mq.CardInfo; +import cn.axzo.msg.center.dal.TodoDao; import cn.axzo.msg.center.domain.entity.Todo; import cn.axzo.msg.center.message.domain.param.PendingMessagePushParam; import cn.axzo.msg.center.message.service.card.CardManager; +import cn.axzo.msg.center.message.service.todo.manage.TodoLogger; +import cn.axzo.msg.center.message.service.todo.manage.TodoManager; +import cn.axzo.msg.center.message.service.todo.manage.TodoRequestContext; +import cn.axzo.msg.center.notices.common.constans.CommonConstants; +import cn.axzo.msg.center.notices.common.constans.CommonConstants; import cn.axzo.msg.center.service.dto.PeerPerson; import cn.axzo.msg.center.service.dto.PersonDTO; import cn.axzo.msg.center.service.enums.CardBizState; import cn.axzo.msg.center.service.enums.CardState; +import cn.axzo.msg.center.service.enums.PresetButtonType; import cn.axzo.msg.center.service.pending.request.CardSendRequest; import cn.axzo.msg.center.service.pending.request.CardStateInfo; import cn.axzo.msg.center.service.pending.request.CardUpdatePresetButtonRequest; @@ -19,10 +27,10 @@ import com.google.common.collect.Sets; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.compress.utils.Lists; import org.springframework.stereotype.Component; import java.util.List; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -38,10 +46,60 @@ public class TodoWithCardWrapper { private final CardManager cardManager; - private static final String APP_CODE = "msg-center"; + private final TodoManager todoManager; + + private final TodoLogger todoLogger; + + private final TodoDao todoDao; + + /** + * 卡片预设按钮,同步待办 + * 注:卡片预设同步待办状态 + * @param presetButtonType 预设类型 + * @param cardInfo 卡片 + */ + public void fireTodoWhenPresetButtonPressedByCard(PresetButtonType presetButtonType, CardInfo cardInfo, Long operatorId) { + if (Objects.isNull(presetButtonType) || Objects.isNull(cardInfo)) { + return; + } + if (StringUtils.isBlank(cardInfo.getTemplateCode()) || StringUtils.isBlank(cardInfo.getBizCode())) { + return; + } + log.info("TodoWithCardWrapper#fireTodoWhenPresetButtonPressedByCard start,presetButtonType:{},cardInfo:{}", presetButtonType, JSON.toJSONString(cardInfo)); + try { + //1 查询待办(Todo对象),根据templateCode/bizCode/subBizCode/receiverPresonId/receiverOuId/receiverWorkspaceId 理论上只能查询一条[待办]记录 + List todoList = todoDao.findByCondition(cardInfo.getTemplateCode(), cardInfo.getBizCode(), cardInfo.getSubBizCode(), cardInfo.getReceiverPersonId(), cardInfo.getReceiverOuId(), cardInfo.getReceiverWorkspaceId()); + if (CollectionUtils.isEmpty(todoList)) { + return; + } + //2 同步待办预设状态, + for (Todo todo : todoList) { + PresetButtonPressedRequest presetButtonPressedRequest = this.buildPresetButtonPressedRequest(todo.getIdentityCode(), presetButtonType, operatorId); + this.todoManager.firePresetButtonPressed( presetButtonPressedRequest, false); + } + TodoRequestContext ctx = TodoRequestContext.create("cardPresetTodo", cardInfo); + ctx.addLogContent("presetButtonType", presetButtonType); + ctx.addLogContent("operatorId", operatorId); + todoLogger.logTodosUpdated(ctx, todoList); + } catch (Exception e) { + log.warn("TodoWithCardWrapper#fireTodoWhenPresetButtonPressedByCard exception,presetButtonType:{},cardInfo:{}", presetButtonType, JSON.toJSONString(cardInfo),e); + } + } + + /** + * 构建预设按钮对象 + */ + private PresetButtonPressedRequest buildPresetButtonPressedRequest(String identityCode, PresetButtonType presetButtonType, Long operatorId) { + return PresetButtonPressedRequest.builder() + .identityCode(identityCode) + .presetButtonType(presetButtonType) + .operatorId(operatorId) + .build(); + } /** * 点击预设按钮-同步卡片 + * 注:待办预设同步卡片状态 */ public void fireCardWhenPresetButtonPressedByTodo(PresetButtonPressedRequest request, Todo todo, boolean isSyncCard) { //是否同步卡片信息,true:同步;false:不同步 @@ -64,7 +122,7 @@ public class TodoWithCardWrapper { */ private CardUpdatePresetButtonRequest buildCardUpdatePresetButtonRequest(PresetButtonPressedRequest request, Todo todo) { CardUpdatePresetButtonRequest cardRequest = new CardUpdatePresetButtonRequest(); - cardRequest.setAppCode(APP_CODE); + cardRequest.setAppCode(CommonConstants.TODO_SYSN_CARD_APP_CODE); cardRequest.setTemplateCode(todo.getTemplateCode()); cardRequest.setBizCode(todo.getBizCode()); cardRequest.setSubBizCode(todo.getSubBizCode()); @@ -81,13 +139,15 @@ public class TodoWithCardWrapper { /** * 发送卡片信息 */ - public void send(PendingMessagePushParam param) { + public void send(PendingMessagePushParam param,List todos) { log.info("TodoWithCardWrapper#send start,param:{}", JSON.toJSONString(param)); try { //1 构建对象 CardSendRequest cardSendRequest = this.buildCardSendRequest(param); //2 发送 cardManager.send(cardSendRequest); + TodoRequestContext ctx = TodoRequestContext.create("todoSyncCardSend", param); + todoLogger.logTodosUpdated(ctx, todos); } catch (Exception e) { log.warn("TodoWithCardWrapper#send,param:{}", JSON.toJSONString(param), e); } @@ -127,42 +187,41 @@ public class TodoWithCardWrapper { */ private void cardUpdateStateByTodoList(List todoList, CardBizState bizState, CardState cardState) { log.info("TodoWithCardWrapper#cardUpdateStateByTodoList start,todoList:{},bizState:{},cardState:{}", JSON.toJSONString(todoList), bizState, cardState); + if (CollectionUtils.isEmpty(todoList)) { + return; + } try { - //1 构建对象 - List list = this.buildCardStateByTodoList(todoList,bizState, cardState); - for (CardUpdateStateRequest request : list) { + for (Todo todo : todoList) { + //1 构建对象 + CardUpdateStateRequest updateStateRequest = this.buildCardUpdateStateRequest(todo, bizState, cardState); //2 更新状态 - cardManager.updateState(request); + cardManager.updateState(updateStateRequest); } + TodoRequestContext ctx = TodoRequestContext.create("todoSyncCardState", todoList); + ctx.addLogContent("bizState", bizState); + ctx.addLogContent("cardState", cardState); + todoLogger.logTodosUpdated(ctx, todoList); } catch (Exception e) { log.warn("TodoWithCardWrapper#cardCompleteState,todoList:{}", JSON.toJSONString(todoList), e); } } /** - * 构建卡片完成状态 + * 构建卡片状态更新对象 */ - private List buildCardStateByTodoList(List todoList, CardBizState bizState, CardState cardState) { - if (CollectionUtils.isNotEmpty(todoList)) { - return Lists.newArrayList(); - } - List list = Lists.newArrayList(); - for (Todo todo : todoList) { - CardUpdateStateRequest updateStateRequest = new CardUpdateStateRequest(); + private CardUpdateStateRequest buildCardUpdateStateRequest(Todo todo, CardBizState bizState, CardState cardState) { + CardUpdateStateRequest updateStateRequest = new CardUpdateStateRequest(); - CardStateInfo cardStateInfo - = CardStateInfo.create(cardState, bizState); - updateStateRequest.setStateInfo(cardStateInfo); + CardStateInfo cardStateInfo + = CardStateInfo.create(bizState, cardState); + updateStateRequest.setStateInfo(cardStateInfo); - updateStateRequest.setAppCode(APP_CODE); - updateStateRequest.setTemplateCode(todo.getTemplateCode()); - updateStateRequest.setBizCode(todo.getBizCode()); - updateStateRequest.setSubBizCode(todo.getSubBizCode()); - updateStateRequest.setReceivers(Sets.newHashSet(PeerPerson.newPeerPerson(todo.getExecutorPersonId(), todo.getOuId(), todo.getReceiverWorkspaceId())));//TODO - - list.add(updateStateRequest); - } - return list; + updateStateRequest.setAppCode(CommonConstants.TODO_SYSN_CARD_APP_CODE); + updateStateRequest.setTemplateCode(todo.getTemplateCode()); + updateStateRequest.setBizCode(todo.getBizCode()); + updateStateRequest.setSubBizCode(todo.getSubBizCode()); + updateStateRequest.setReceivers(Sets.newHashSet(PeerPerson.newPeerPerson(todo.getExecutorPersonId(), todo.getOuId(), todo.getReceiverWorkspaceId())));//TODO + return updateStateRequest; } /** @@ -170,7 +229,7 @@ public class TodoWithCardWrapper { */ private CardSendRequest buildCardSendRequest(PendingMessagePushParam param) { CardSendRequest sendRequest = new CardSendRequest(); - sendRequest.setAppCode(APP_CODE); + sendRequest.setAppCode(CommonConstants.TODO_SYSN_CARD_APP_CODE); sendRequest.setTemplateCode(param.getTemplateCode()); sendRequest.setBizCode(param.getBizCode()); sendRequest.setSubBizCode(param.getSubBizCode()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoLogger.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoLogger.java index ee3efe19..c4b34227 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoLogger.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/manage/TodoLogger.java @@ -23,7 +23,7 @@ import java.util.List; */ @Component @RequiredArgsConstructor -class TodoLogger { +public class TodoLogger { private final TodoLogDao todoLogDao; private final TodoBusinessDao todoBusinessDao; @@ -59,7 +59,7 @@ class TodoLogger { logTodosUpdated(ctx, Collections.singletonList(todo)); } - void logTodosUpdated(TodoRequestContext ctx, List todos) { + public void logTodosUpdated(TodoRequestContext ctx, List todos) { if (CollectionUtils.isEmpty(todos)) return; TodoBusinesses businesses = todoBusinessDao.getBusinesses(todos); 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 cb56e272..c586a6f4 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 @@ -186,7 +186,7 @@ public class TodoManager { todoLogger.logBusinessUpdated(ctx, business); todoLogger.logTodosUpdated(ctx, todos); applicationContext.publishEvent(new NewTodoEvent(this, templateModel, todos)); - todoWithCardWrapper.send(request); + todoWithCardWrapper.send(request, todos); return todos.stream() .map(todo -> new PushPendingMessageDTO( diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/xxl/UpdateTemplateV3ChannelStyleVersionJob.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/xxl/UpdateTemplateV3ChannelStyleVersionJob.java index 8afb2174..354996fa 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/xxl/UpdateTemplateV3ChannelStyleVersionJob.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/xxl/UpdateTemplateV3ChannelStyleVersionJob.java @@ -39,15 +39,15 @@ public class UpdateTemplateV3ChannelStyleVersionJob extends IJobHandler { /** * 卡片样式编码 */ - private final static String cardStyleCode = "";//TODO 待产品提供 + private final static String cardStyleCode = "cardStyleCodeTest-1216-1";//TODO 待产品提供 /** * 卡片样式扩展字段 */ - private final static List cardExtFields = JSON.parseArray("[{\"type\":\"\",\"name\":\"\",\"code\":\"\",\"value\":\"\"}]", CardElementConfig.class); + private final static List cardExtFields = JSON.parseArray("[{\"type\":\"ICON\",\"name\":\"name1216-1\",\"code\":\"code1216-1\",\"value\":\"value1216-1\"}]", CardElementConfig.class); /** * app最低版本控制 */ - private final static List appVersionConfigs = JSON.parseArray("[{\"appType\":\"\",\"minVersion\":\"\"}]", AppVersionConfig.class); + private final static List appVersionConfigs = JSON.parseArray("[{\"appType\":\"CMP\",\"minVersion\":\"6.6.0\"}]", AppVersionConfig.class); @XxlJob("updateTemplateV3ChannelStyleVersionJob") @Override @@ -75,11 +75,12 @@ public class UpdateTemplateV3ChannelStyleVersionJob extends IJobHandler { Supplier> cursor = templateV3sCursor(); int count = 0; for (List templateV3List = cursor.get(); !templateV3List.isEmpty(); templateV3List = cursor.get()) { - XxlJobLogger.log("update MessageTemplateV3 info, count: {}", count += templateV3List.size()); + XxlJobLogger.log("update MessageTemplateV3 info, count: {},v3List:{}", count += templateV3List.size(), JSON.toJSONString(templateV3List)); //更新逻辑 this.updateTemplateV3ChannelStyleVersion(templateV3List, channels, cardStyleCode, cardExtFields, appVersionConfigs); } + XxlJobLogger.log("doUpdateAll end"); } /** @@ -106,18 +107,23 @@ public class UpdateTemplateV3ChannelStyleVersionJob extends IJobHandler { } for (MessageTemplateV3 templateV3 : templateV3List) { - // - List updateChannels = !CollectionUtils.isEmpty(templateV3.getChannels()) ? templateV3.getChannels() : channels; - String updateCardStyleCode = StringUtils.hasText(templateV3.getCardStyleCode()) ? templateV3.getCardStyleCode() : cardStyleCode; - List updateCardExtFields = !CollectionUtils.isEmpty(templateV3.getCardExtFields()) ? templateV3.getCardExtFields() : cardExtFields; - List updateAppVersionConfigs = !CollectionUtils.isEmpty(templateV3.getAppVersionConfigs()) ? templateV3.getAppVersionConfigs() : appVersionConfigs; + //DB中有值,则以DB中的值为准 +// List updateChannels = !CollectionUtils.isEmpty(templateV3.getChannels()) ? templateV3.getChannels() : channels; +// String updateCardStyleCode = StringUtils.hasText(templateV3.getCardStyleCode()) ? templateV3.getCardStyleCode() : cardStyleCode; +// List updateCardExtFields = !CollectionUtils.isEmpty(templateV3.getCardExtFields()) ? templateV3.getCardExtFields() : cardExtFields; +// List updateAppVersionConfigs = !CollectionUtils.isEmpty(templateV3.getAppVersionConfigs()) ? templateV3.getAppVersionConfigs() : appVersionConfigs; + //无论DB中是否有值,则直接更新 + List updateChannels = channels; + String updateCardStyleCode = cardStyleCode; + List updateCardExtFields = cardExtFields; + List updateAppVersionConfigs = appVersionConfigs; messageTemplateV3Dao.lambdaUpdate().eq(MessageTemplateV3::getId, templateV3.getId()) - .set(!CollectionUtils.isEmpty(updateChannels), MessageTemplateV3::getChannels, updateChannels) + .set(!CollectionUtils.isEmpty(updateChannels), MessageTemplateV3::getChannels, JSON.toJSONString(updateChannels)) .set(StringUtils.hasText(updateCardStyleCode), MessageTemplateV3::getCardStyleCode, updateCardStyleCode) - .set(!CollectionUtils.isEmpty(updateCardExtFields), MessageTemplateV3::getCardExtFields, updateCardExtFields) - .set(!CollectionUtils.isEmpty(updateAppVersionConfigs), MessageTemplateV3::getAppVersionConfigs, updateAppVersionConfigs).update(); + .set(!CollectionUtils.isEmpty(updateCardExtFields), MessageTemplateV3::getCardExtFields, JSON.toJSONString(updateCardExtFields)) + .set(!CollectionUtils.isEmpty(updateAppVersionConfigs), MessageTemplateV3::getAppVersionConfigs, JSON.toJSONString(updateAppVersionConfigs)).update(); } } @@ -129,7 +135,7 @@ public class UpdateTemplateV3ChannelStyleVersionJob extends IJobHandler { .eq(MessageTemplateV3::getIsDelete, TableIsDeleteEnum.NORMAL.value) .gt(MessageTemplateV3::getId, maxId.get()) .orderByAsc(MessageTemplateV3::getId) - .last("LIMIT 200") + .last("LIMIT 20") .list(); if (!accounts.isEmpty()) { maxId.set(accounts.get(accounts.size() - 1).getId()); diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/mq/RocketMQConfig.java b/inside-notices/src/main/java/cn/axzo/msg/center/mq/RocketMQConfig.java index 0d62229c..f7b87a3f 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/mq/RocketMQConfig.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/mq/RocketMQConfig.java @@ -11,6 +11,7 @@ import cn.axzo.framework.rocketmq.RocketMQEventProducer.RocketMQMessageMeta; import cn.axzo.framework.rocketmq.utils.TraceUtils; import cn.axzo.msg.center.api.mq.MqMessage; import cn.axzo.msg.center.inside.notices.config.PendingMessageBizConfig; +import com.alibaba.fastjson.JSON; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Maps; import lombok.RequiredArgsConstructor; @@ -139,4 +140,26 @@ public class RocketMQConfig { }); } + /** + * 卡片变更,同步状态至待办TODO + */ + @Slf4j + @Component + @RocketMQMessageListener(topic = "topic_msg_center_${spring.profiles.active}", + consumerGroup = "GID_topic_card_change_state_sync_todo_${spring.application.name}_${spring.profiles.active}", + consumeMode = ConsumeMode.ORDERLY, + nameServer = "${rocketmq.name-server}" + ) + public static class CardChangeStateSyncTodoListener extends BaseListener implements RocketMQListener { + + @Autowired + private EventConsumer eventConsumer; + + @Override + public void onMessage(MessageExt message) { + log.info("CardChangeStateSyncTodoListener onMessage,message:{}", JSON.toJSONString(message)); + super.onEvent(message, eventConsumer); + } + } + } \ No newline at end of file diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateV3Client.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateV3Client.java index 8c0924bc..f67341a1 100644 --- a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateV3Client.java +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/client/MessageTemplateV3Client.java @@ -8,6 +8,7 @@ import cn.axzo.msg.center.service.template.request.MessageTemplateV3SyncRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateV3SyncResponse; import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateRequest; import cn.axzo.msg.center.service.template.request.MessageTemplateV3UpdateStatusRequest; +import cn.axzo.msg.center.service.template.request.TemplateV3UpdateChannelStyleJobRequest; import cn.axzo.msg.center.service.template.response.MessageDetailStyle; import cn.axzo.msg.center.service.template.response.MessageTemplateV3ConfigStateResponse; import cn.axzo.msg.center.service.template.response.MessageTemplateV3DetailResponse; @@ -118,4 +119,10 @@ public interface MessageTemplateV3Client { @PostMapping(value = "/message/template/config/state", produces = {MediaType.APPLICATION_JSON_VALUE}) CommonResponse> configState(); + /** + * 定时更新模版V3信息 + */ + @PostMapping(value = "/message/template/v3/update/channel-style-version-job", produces = {MediaType.APPLICATION_JSON_VALUE}) + CommonResponse updateChannelStyleVersionJob(@RequestBody @Valid TemplateV3UpdateChannelStyleJobRequest request) throws Exception; + } diff --git a/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/TemplateV3UpdateChannelStyleJobRequest.java b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/TemplateV3UpdateChannelStyleJobRequest.java new file mode 100644 index 00000000..b5958bdd --- /dev/null +++ b/msg-center-api/src/main/java/cn/axzo/msg/center/service/template/request/TemplateV3UpdateChannelStyleJobRequest.java @@ -0,0 +1,22 @@ +package cn.axzo.msg.center.service.template.request; + +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.List; + +/** + * @author xudawei@axzo.cn + * @date 2024/12/16 + * @description 消息模版创建 + */ +@Setter +@Getter +public class TemplateV3UpdateChannelStyleJobRequest implements Serializable { + + private static final long serialVersionUID = -2894419272913799317L; + + private String params; + +} diff --git a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/TodoDao.java b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/TodoDao.java index 6ec21c5d..4e39eeba 100644 --- a/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/TodoDao.java +++ b/msg-center-dal/src/main/java/cn/axzo/msg/center/dal/TodoDao.java @@ -19,6 +19,7 @@ import javax.annotation.Nullable; import java.util.Collections; import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.Optional; import java.util.Set; @@ -165,4 +166,15 @@ public class TodoDao extends ServiceImpl { .set(Todo::getHideUntil, expireTime) .update(); } + + public List findByCondition(String templateCode, String bizCode, String subBizCode, Long executorPersonId, Long ouId, Long workspaceId) { + return lambdaQuery() + .eq(StringUtils.isNotBlank(templateCode), Todo::getTemplateCode, templateCode) + .eq(StringUtils.isNotBlank(bizCode), Todo::getBizCode, bizCode) + .eq(StringUtils.isNotBlank(subBizCode), Todo::getSubBizCode, subBizCode) + .eq(Objects.nonNull(executorPersonId), Todo::getExecutorPersonId, executorPersonId) + .eq(Objects.nonNull(ouId), Todo::getOuId, ouId) + .eq(Objects.nonNull(workspaceId), Todo::getReceiverWorkspaceId, workspaceId) + .list(); + } } \ No newline at end of file diff --git a/msg-notices/msg-notices-common/src/main/java/cn/axzo/msg/center/notices/common/constans/CommonConstants.java b/msg-notices/msg-notices-common/src/main/java/cn/axzo/msg/center/notices/common/constans/CommonConstants.java index 9cf81d2a..ce267e77 100644 --- a/msg-notices/msg-notices-common/src/main/java/cn/axzo/msg/center/notices/common/constans/CommonConstants.java +++ b/msg-notices/msg-notices-common/src/main/java/cn/axzo/msg/center/notices/common/constans/CommonConstants.java @@ -38,6 +38,11 @@ public abstract class CommonConstants { /** 指定渠道 */ public static final String ASSIGN_CHANNEL = "assign_channel"; + /** + * 待办同步卡片的APP_CODE + */ + public static final String TODO_SYSN_CARD_APP_CODE = "msg-center-todo"; + /** * 消息模板变量表达式 */