feat:(REQ-3201) 定时任务更新模版中的appVersionChannel/监控卡片预设MQ

This commit is contained in:
xudawei 2024-12-17 16:20:35 +08:00
parent cda7854843
commit cb2d40170f
13 changed files with 279 additions and 53 deletions

View File

@ -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);
}
}

View File

@ -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<String> save(MessageTemplateV3CreateRequest request) {
@ -130,4 +133,13 @@ public class MessageTemplateV3Controller implements MessageTemplateV3Client {
public CommonResponse<List<MessageTemplateV3ConfigStateResponse>> configState() {
return CommonResponse.success(MessageTemplateV3ConfigStateResponse.cardStateToResp());
}
/**
* 定时更新模版V3信息
*/
@Override
public CommonResponse<Void> updateChannelStyleVersionJob(@RequestBody @Valid TemplateV3UpdateChannelStyleJobRequest request) throws Exception {
updateTemplateV3ChannelStyleVersionJob.execute(request.getParams());
return CommonResponse.success();
}
}

View File

@ -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();
}

View File

@ -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());
}

View File

@ -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<Todo> 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<Todo> 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<Todo> 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<CardUpdateStateRequest> 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<CardUpdateStateRequest> buildCardStateByTodoList(List<Todo> todoList, CardBizState bizState, CardState cardState) {
if (CollectionUtils.isNotEmpty(todoList)) {
return Lists.newArrayList();
}
List<CardUpdateStateRequest> 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());

View File

@ -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<Todo> todos) {
public void logTodosUpdated(TodoRequestContext ctx, List<Todo> todos) {
if (CollectionUtils.isEmpty(todos))
return;
TodoBusinesses businesses = todoBusinessDao.getBusinesses(todos);

View File

@ -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(

View File

@ -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<CardElementConfig> cardExtFields = JSON.parseArray("[{\"type\":\"\",\"name\":\"\",\"code\":\"\",\"value\":\"\"}]", CardElementConfig.class);
private final static List<CardElementConfig> cardExtFields = JSON.parseArray("[{\"type\":\"ICON\",\"name\":\"name1216-1\",\"code\":\"code1216-1\",\"value\":\"value1216-1\"}]", CardElementConfig.class);
/**
* app最低版本控制
*/
private final static List<AppVersionConfig> appVersionConfigs = JSON.parseArray("[{\"appType\":\"\",\"minVersion\":\"\"}]", AppVersionConfig.class);
private final static List<AppVersionConfig> appVersionConfigs = JSON.parseArray("[{\"appType\":\"CMP\",\"minVersion\":\"6.6.0\"}]", AppVersionConfig.class);
@XxlJob("updateTemplateV3ChannelStyleVersionJob")
@Override
@ -75,11 +75,12 @@ public class UpdateTemplateV3ChannelStyleVersionJob extends IJobHandler {
Supplier<List<MessageTemplateV3>> cursor = templateV3sCursor();
int count = 0;
for (List<MessageTemplateV3> 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<MessageChannel> updateChannels = !CollectionUtils.isEmpty(templateV3.getChannels()) ? templateV3.getChannels() : channels;
String updateCardStyleCode = StringUtils.hasText(templateV3.getCardStyleCode()) ? templateV3.getCardStyleCode() : cardStyleCode;
List<CardElementConfig> updateCardExtFields = !CollectionUtils.isEmpty(templateV3.getCardExtFields()) ? templateV3.getCardExtFields() : cardExtFields;
List<AppVersionConfig> updateAppVersionConfigs = !CollectionUtils.isEmpty(templateV3.getAppVersionConfigs()) ? templateV3.getAppVersionConfigs() : appVersionConfigs;
//DB中有值则以DB中的值为准
// List<MessageChannel> updateChannels = !CollectionUtils.isEmpty(templateV3.getChannels()) ? templateV3.getChannels() : channels;
// String updateCardStyleCode = StringUtils.hasText(templateV3.getCardStyleCode()) ? templateV3.getCardStyleCode() : cardStyleCode;
// List<CardElementConfig> updateCardExtFields = !CollectionUtils.isEmpty(templateV3.getCardExtFields()) ? templateV3.getCardExtFields() : cardExtFields;
// List<AppVersionConfig> updateAppVersionConfigs = !CollectionUtils.isEmpty(templateV3.getAppVersionConfigs()) ? templateV3.getAppVersionConfigs() : appVersionConfigs;
//无论DB中是否有值则直接更新
List<MessageChannel> updateChannels = channels;
String updateCardStyleCode = cardStyleCode;
List<CardElementConfig> updateCardExtFields = cardExtFields;
List<AppVersionConfig> 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());

View File

@ -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<MessageExt> {
@Autowired
private EventConsumer eventConsumer;
@Override
public void onMessage(MessageExt message) {
log.info("CardChangeStateSyncTodoListener onMessage,message:{}", JSON.toJSONString(message));
super.onEvent(message, eventConsumer);
}
}
}

View File

@ -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<List<MessageTemplateV3ConfigStateResponse>> configState();
/**
* 定时更新模版V3信息
*/
@PostMapping(value = "/message/template/v3/update/channel-style-version-job", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Void> updateChannelStyleVersionJob(@RequestBody @Valid TemplateV3UpdateChannelStyleJobRequest request) throws Exception;
}

View File

@ -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;
}

View File

@ -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<TodoMapper, Todo> {
.set(Todo::getHideUntil, expireTime)
.update();
}
public List<Todo> 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();
}
}

View File

@ -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";
/**
* 消息模板变量表达式
*/