REQ-3502: fix bugs

This commit is contained in:
yanglin 2025-01-17 09:50:32 +08:00
parent 3b5e749903
commit 7428c69723
4 changed files with 27 additions and 14 deletions

View File

@ -36,6 +36,7 @@ import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.TransactionTemplate;
import java.util.Optional;
@ -62,6 +63,7 @@ public class TodoSyncCardService {
private final TodoLogger todoLogger;
private final MessageTemplateV3Dao messageTemplateV3Dao;
private final TodoManager todoManager;
private final TransactionTemplate transactionTemplate;
void onMessage(Event event, TodoUpdateMessage message) {
log.info("received TodoUpdateMessage: {}", message);
@ -214,8 +216,10 @@ public class TodoSyncCardService {
TodoRequestContext ctx = TodoRequestContext.create(
"syncCardPresetButtonPressed:finished", message.getBatchNo(), message);
try {
if (todoManager.firePresetButtonPressed(request, false))
todoLogger.logTodoUpdated(ctx, todo);
execTransactional(() -> {
if (todoManager.firePresetButtonPressed(request, false))
todoLogger.logTodoUpdated(ctx, todo);
});
} catch (Exception e) {
log.warn("[syncCardPresetButtonPressed] onCardPresetButtonPressed: error, message={}", message, e);
todoLogger.logTodoUpdated(ctx.copy().addLogContent("exception", e), todo);
@ -251,8 +255,10 @@ public class TodoSyncCardService {
request.setOperatorName("");
TodoRequestContext ctx = TodoRequestContext.create("syncTodoPresetButtonPressed:finished", message);
try {
if (cardManager.firePresetButtonPressed(request))
todoLogger.logTodoUpdated(ctx, todo);
execTransactional(() -> {
if (cardManager.firePresetButtonPressed(request))
todoLogger.logTodoUpdated(ctx, todo);
});
} catch (Exception e) {
log.warn("[syncTodoPresetButtonPressed] error, message={}", message, e);
todoLogger.logTodoUpdated(ctx.copy().addLogContent("exception", e), todo);
@ -306,4 +312,7 @@ public class TodoSyncCardService {
private Todo todo;
}
private void execTransactional(Runnable runnable) {
transactionTemplate.executeWithoutResult(unused -> runnable.run());
}
}

View File

@ -321,9 +321,8 @@ public class TodoManager {
"businessUpdated", businessUpdated);
todoLogger.logBusinessUpdated(ctx, advanceResult.getBusiness());
}
if (advanceResult.isAdvanced()) {
if (advanceResult.isAdvanced())
todoLogger.logTodoCompleted(ctx, advanceResult.getAdvancedTodos());
}
if (businessUpdated)
todoBroadcaster.fireTodoUpdates("completeById", advanceResult.getBusinessId(), true);
else
@ -688,7 +687,7 @@ public class TodoManager {
"currentStateSample", noStateBusinessTodos.sampleTodo());
// @formatter:on
if (cfg.isLogAdvanceTodoStateFail())
todoLogger.logTodosUpdated(ctx, noStateBusinessTodos.todos);
todoLogger.logTodosUpdated(ctx.copy(String.format("%s:fail", ctx.getName())), noStateBusinessTodos.todos);
// throw an error? dunno
log.warn("尝试推进待办状态, 但是 {}. ctx={}, query={}, currentStateSample={}",
failReason, ctx, QueryFormatter.format(builder.getQuery()), noStateBusinessTodos.sampleTodo());

View File

@ -5,6 +5,7 @@ import cn.axzo.msg.center.utils.UUIDUtil;
import com.alibaba.fastjson.JSON;
import com.google.common.base.Throwables;
import lombok.Getter;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.LinkedHashMap;
@ -37,7 +38,8 @@ public class TodoRequestContext {
}
public static TodoRequestContext create(String name, String requestNo, Object request) {
return new TodoRequestContext(name, requestNo, request);
String finalRequestNo = StringUtils.isBlank(requestNo) ? UUIDUtil.uuidString() : requestNo;
return new TodoRequestContext(name, finalRequestNo, request);
}
public TodoRequestContext addLogContent(String name, Object... fields) {
@ -73,6 +75,10 @@ public class TodoRequestContext {
}
public TodoRequestContext copy() {
return copy(this.name);
}
public TodoRequestContext copy(String name) {
TodoRequestContext copy = new TodoRequestContext(name, requestNo);
copy.logContents.putAll(logContents);
return copy;

View File

@ -1,8 +1,7 @@
package cn.axzo.msg.center.message.service.todo.card;
import cn.axzo.framework.rocketmq.Event;
import cn.axzo.msg.center.MsgCenterApplication;
import cn.axzo.msg.center.api.mq.TodoUpdateMessage;
import cn.axzo.msg.center.api.mq.CardPresetButtonPressedMessage;
import com.alibaba.fastjson.JSON;
import lombok.RequiredArgsConstructor;
import org.junit.jupiter.api.Test;
@ -18,10 +17,10 @@ class TodoSyncCardServiceTest {
private final TodoSyncCardService todoSyncCardService;
@Test
void exec() {
String json = "{\"messageId\": \"8a771827-f17f-4527-87b9-8a7d182404d6\", \"messageSendTime\": 1737022307826, \"messageSendTimeStr\": \"2025-01-16 18:11:47\", \"operation\": \"updateBusinessFinalBizState\", \"updateCard\": true, \"updatedTodo\": {\"bizCategory\": \"FLOW\", \"bizCode\": \"202501161807200000000\", \"bizDesc\": \"抄送节点\", \"bizExtParam\": {\"processInstanceId\": \"202501161807200000000\", \"[_INTERNAL_INITIATOR_]\": {\"assignerName\": \"杨期成\", \"ouId\": \"10401\", \"tenantId\": \"4949\", \"personId\": \"9000400630\", \"avatar\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/cac12b80cac342b5b9fcef5f470b189e.jpg\", \"assignee\": \"1229802\", \"assigneeType\": \"3\"}, \"[_INTERNAL_PROCESS_WORKSPACE_TYPE]\": 2, \"activityName\": \"抄送节点\", \"businessName\": \"工作流开发测试项目业务\", \"processResult\": \"审批中\", \"initiatorUserName\": \"杨期成\", \"[_CREATE_INSTANCE_PARAMS]\": \"{\\\"processDefinitionKey\\\":\\\"wfTestProj\\\",\\\"tenantId\\\":\\\"4949\\\",\\\"variables\\\":{\\\"[_INTERNAL_PROCESS_WORKSPACE_TYPE]\\\":2,\\\"[_INTERNAL_INITIATOR_]\\\":\\\"{\\\\\\\"assignee\\\\\\\":\\\\\\\"1229802\\\\\\\",\\\\\\\"assigneeType\\\\\\\":\\\\\\\"3\\\\\\\",\\\\\\\"assignerName\\\\\\\":\\\\\\\"杨期成\\\\\\\",\\\\\\\"avatar\\\\\\\":\\\\\\\"https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/cac12b80cac342b5b9fcef5f470b189e.jpg\\\\\\\",\\\\\\\"ouId\\\\\\\":\\\\\\\"10401\\\\\\\",\\\\\\\"personId\\\\\\\":\\\\\\\"9000400630\\\\\\\",\\\\\\\"tenantId\\\\\\\":\\\\\\\"4949\\\\\\\"}\\\",\\\"[_BIZ_ORG_RELATION_]\\\":{\\\"orgScopes\\\":[{\\\"workspaceType\\\":2,\\\"workspaceId\\\":4949,\\\"ouId\\\":10401,\\\"nodeId\\\":21335}]},\\\"[_WORKFLOW_ENGINE_VERSION_]\\\":\\\"1.5.2\\\",\\\"[_PENDING_VARIABLES]\\\":{},\\\"[_INTERNAL_PROCESS_AGENT]\\\":true},\\\"pendingVariables\\\":{},\\\"cooperationOrg\\\":{\\\"orgScopes\\\":[{\\\"workspaceType\\\":2,\\\"workspaceId\\\":4949,\\\"ouId\\\":10401,\\\"nodeId\\\":21335}]},\\\"businessKey\\\":\\\"40\\\",\\\"initiator\\\":{\\\"assignee\\\":\\\"1229802\\\",\\\"assigneeType\\\":\\\"3\\\",\\\"assignerName\\\":\\\"杨期成\\\",\\\"personId\\\":\\\"9000400630\\\",\\\"tenantId\\\":\\\"4949\\\",\\\"ouId\\\":\\\"10401\\\",\\\"avatar\\\":\\\"https://axzo-public.oss-cn-chengdu.aliyuncs.com/oms/oms/cac12b80cac342b5b9fcef5f470b189e.jpg\\\"},\\\"async\\\":false,\\\"startFormVariables\\\":{}}\", \"taskStartTime\": \"2025-01-16 18:07:23\", \"[_INTERNAL_PROCESS_AGENT]\": true, \"activityId\": \"node_157456498639\", \"[_WORKFLOW_ENGINE_VERSION_]\": \"1.5.2\", \"processStartTime\": \"2025-01-16 18:07:23\", \"tenantId\": \"4949\", \"businessKey\": \"40\", \"operatorType\": \"\", \"taskId\": \"202501161807200000033\", \"[_PENDING_VARIABLES]\": {}, \"processInstanceName\": \"工作流业务测试项目流程\"}, \"bizFinalState\": \"REJECTED\", \"bizFlag\": \"\", \"content\": \"杨期成发起的工作流开发测试项目业务流程抄送给您,请及时查看。\", \"deadline\": null, \"executorId\": 0, \"executorName\": \"张永强\", \"executorOuId\": 9550, \"executorPersonId\": 40695, \"executorType\": \"NOT_SUPPORT\", \"executorWorkspaceId\": 3561, \"executorWorkspaceName\": \"上海棋院(上海市棋牌运动管理中心)\", \"identityCode\": \"7a0eb00f68884824b356240eb7fb8d38\", \"orgType\": \"ENT\", \"promoterId\": 0, \"promoterName\": \"杨期成\", \"promoterOuId\": 10401, \"promoterPersonId\": 9000400630, \"promoterType\": \"NOT_SUPPORT\", \"promoterWorkspaceId\": 4949, \"promoterWorkspaceName\": \"核西南院设计有限公司\", \"requestNo\": \"54f148e904374dad95f2abf2329afa0f\", \"routerParams\": {\"processNodeCode\": \"node_157456498639\", \"processInstanceId\": \"202501161807200000000\", \"creator\": \"杨期成\", \"title\": \"工作流业务测试项目流程\", \"userAgreeSignature\": true, \"businessTypeName\": \"抄送节点\", \"tenantId\": \"3561\", \"businessKey\": \"40\", \"startTime\": \"2025-01-16 18:07:23\", \"initiatorTenantId\": \"4949\", \"taskId\": \"202501161807200000033\", \"processNodeName\": \"抄送节点\"}, \"srcTemplateCode\": \"8733f93de8db49699a78eda5a342763c\", \"state\": \"CREATED\", \"subBizCode\": \"202501161807200000033\", \"templateCode\": \"8733f93de8db49699a78eda5a342763c\", \"title\": \"抄送消息\", \"todoBusinessId\": 249849, \"todoId\": 1016974, \"type\": \"COPIED_TO_ME\"}}";
TodoUpdateMessage message = JSON.parseObject(json, TodoUpdateMessage.class);
todoSyncCardService.onMessage(new Event(), message);
void syncCardPresetButtonPressed() {
String json = "{\"cardInfo\": {\"appCode\": \"msg-center:todo\", \"batchNo\": \"fd301a68203a430cbc6e6928c0164fe5\", \"bizCode\": \"test-14\", \"bizMessageId\": \"2e1119e4a96345049870558d53939700\", \"bizParam\": {\"assistLogName\": \"测试\", \"extInfo\": {\"todoType\": \"EXECUTABLE\", \"todoCategory\": \"OTHER\", \"todoPromoterWorkspaceId\": 0, \"todoIdentityCode\": \"80978834809443febcf579b0eecf560b\", \"todoExecutorWorkspaceId\": 0}}, \"buttonStates\": [{\"buttonCode\": \"f6a77000fc50487ab9be215201bf233a\", \"isActionPerformed\": true}], \"cardContent\": {\"bizCode\": \"test-14\", \"cardStyleCode\": \"common_style_001\", \"updateTime\": 1737025348622, \"cardContent\": \"系统提示,无需关注\", \"debugInfo\": {\"isUpdatable\": true, \"bizCode\": \"test-14\", \"bizState\": \"AGREED\", \"subBizCode\": \"aaaa\", \"cardState\": \"COMPLETED\"}, \"templateCode\": \"7aceab1f31ec4570a98cdaf7f8940c61\", \"sendTimestamp\": 1737025348622, \"cardTitle\": \"系统提示\", \"extInfo\": {\"todoType\": \"EXECUTABLE\", \"todoCategory\": \"OTHER\", \"todoPromoterWorkspaceId\": 0, \"todoIdentityCode\": \"80978834809443febcf579b0eecf560b\", \"todoExecutorWorkspaceId\": 0}, \"cardBannerUrl\": \"\", \"subBizCode\": \"aaaa\", \"stateImage\": \"https://axzo-public.oss-cn-chengdu.aliyuncs.com/msg-center/todo_card_state/card_biz_state_agreed_20241220.png\", \"cardButtons\": [{\"presetButtonType\": \"AGREE\", \"actionPerformed\": true, \"senderShow\": false, \"buttonCode\": \"f6a77000fc50487ab9be215201bf233a\", \"isHighlight\": true, \"action\": \"PRESET_BUTTON\", \"source\": \"CUSTOM\", \"title\": \"已同意\", \"executorShow\": true}]}, \"content\": \"系统提示,无需关注\", \"id\": 167756, \"identityCode\": \"726de22e936c4f3bb640693e5f2c0968\", \"imTaskId\": 756527, \"isSenderRobot\": \"YES\", \"receiverAppType\": \"CMP\", \"receiverOuId\": 10616, \"receiverPersonId\": 9000399522, \"receiverWorkspaceId\": 0, \"routerParam\": {}, \"senderAppType\": \"SYSTEM\", \"senderOuId\": 0, \"senderPersonId\": 6678911, \"senderWorkspaceId\": 0, \"state\": null, \"subBizCode\": \"aaaa\", \"subtitle\": \"\", \"templateCode\": \"7aceab1f31ec4570a98cdaf7f8940c61\", \"title\": \"系统提示\"}, \"messageId\": \"490ddb1e-5879-4088-bbda-7ca8f15bd4f2\", \"messageSendTime\": 1737025348697, \"messageSendTimeStr\": \"2025-01-16 19:02:28\", \"operatorId\": 9000399522, \"operatorName\": \"罗福\", \"presetButtonType\": \"AGREE\"}";
CardPresetButtonPressedMessage message = JSON.parseObject(json, CardPresetButtonPressedMessage.class);
todoSyncCardService.syncCardPresetButtonPressed(message);
}
}