REQ-3502: 减少更新卡片的次数

This commit is contained in:
yanglin 2025-01-16 09:36:56 +08:00
parent 5cc26c4c3a
commit b805ed8137

View File

@ -174,7 +174,7 @@ public class TodoSyncCardService implements ApplicationListener<CardUpdateEvent>
}
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<CardUpdateEvent>
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<CardUpdateEvent>
@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) {