diff --git a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardService.java b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardService.java index 05ec05b6..f5bf96f9 100644 --- a/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardService.java +++ b/inside-notices/src/main/java/cn/axzo/msg/center/message/service/todo/card/TodoSyncCardService.java @@ -174,7 +174,7 @@ public class TodoSyncCardService implements ApplicationListener } private void updateCardState(Event event, TodoUpdateMessage message, TodoBusiness business, Todo todo) { - synchronized (getTodoLock(todo)) { + synchronized (getLock(todo)) { TodoCardState lastState = todoStates.getIfPresent(todo.getId()); if (lastState != null && lastState.equals(TodoCardState.create(business, todo))) { log.info("updateCardState: no change, todo={}", todo); @@ -296,12 +296,14 @@ public class TodoSyncCardService implements ApplicationListener Todo todo = ((TodoCardUpdateStateRequest) event.getSource()).getTodo(); TodoBusiness business = todoBusinessDao.getBusinesses(todo).findBusiness(todo).orElse(null); if (business == null) return; - synchronized (getTodoLock(todo)) { - todoStates.put(todo.getId(), TodoCardState.create(business, todo)); + synchronized (getLock(todo)) { + TodoCardState state = TodoCardState.create(business, todo); + if (state.isTodoCompleted) + todoStates.put(todo.getId(), state); } } - private Object getTodoLock(Todo todo) { + private Object getLock(Todo todo) { String identityCode = todo.getIdentityCode(); try { return locks.get(identityCode, () -> identityCode); @@ -321,7 +323,7 @@ public class TodoSyncCardService implements ApplicationListener @EqualsAndHashCode @RequiredArgsConstructor private static class TodoCardState { - private final Boolean isTodoCompleted; + private final boolean isTodoCompleted; private final BizFinalStateEnum bizFinalState; static TodoCardState create(TodoBusiness business, Todo todo) {