REQ-2595-业务待办更新,调整消息发送方式

This commit is contained in:
yangqicheng 2024-11-14 17:56:07 +08:00
parent 0cc9c55969
commit 0594364757
3 changed files with 32 additions and 6 deletions

View File

@ -4,6 +4,7 @@ import cn.axzo.msg.center.domain.entity.Todo;
import cn.axzo.msg.center.domain.entity.TodoBusiness;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;
import java.util.List;
@ -17,6 +18,14 @@ class StateAdvanceResult {
private final TodoBusiness business;
private final List<Todo> advancedTodos;
@Setter
private Runnable broadcastHandler;
public void broadcast() {
if (broadcastHandler != null)
broadcastHandler.run();
}
Long getBusinessId() {
return business == null ? 0L : business.getId();
}

View File

@ -336,7 +336,9 @@ public class TodoManager {
*/
@Transactional(rollbackFor = Exception.class)
public boolean completeByIdentityCodes(CompletePendingMessageByCodesRequest request) {
TodoRequestContext ctx = TodoRequestContext.create("completeByIdentityCodes", request);
TodoRequestContext ctx = TodoRequestContext
.create("completeByIdentityCodes", request)
.broadcast(false);
StateAdvanceResult advanceResult = advanceState(ctx, execAdvanceBuilder()
.in(CollectionUtils.isNotEmpty(request.getIdentityCodes()), Todo::getIdentityCode, request.getIdentityCodes().toArray())
.set(Todo::getState, PendingMessageStateEnum.COMPLETED));
@ -353,6 +355,7 @@ public class TodoManager {
if (advanceResult.isAdvanced()) {
todoLogger.logTodoCompleted(ctx, advanceResult.getAdvancedTodos());
}
advanceResult.broadcast();
return advanceResult.isAdvanced() || businessUpdated;
}
@ -693,19 +696,27 @@ public class TodoManager {
return new StateAdvanceResult(false, noStateTodos.business, Collections.emptyList());
}
boolean updated = builder.getUpdate().update();
Runnable broadcastHandler = null;
if (updated) {
ctx.addLogContent("stateAdvanced", true);
Set<Long> updatedTodoIds = advanceTodos.todos.stream()
.map(BaseEntityExt::getId)
.collect(toSet());
if (!updatedTodoIds.isEmpty()) {
List<Todo> updatedTodos = todoDao.listByIds(updatedTodoIds);
todoBroadcaster.fireTodoUpdates(ctx.getName(), updatedTodos);
}
broadcastHandler = () -> {
if (!updatedTodoIds.isEmpty()) {
List<Todo> updatedTodos = todoDao.listByIds(updatedTodoIds);
todoBroadcaster.fireTodoUpdates(ctx.getName(), updatedTodos);
}
};
if (ctx.isBroadcast())
broadcastHandler.run();
} else {
advanceFailLogger.get();
}
return new StateAdvanceResult(updated, advanceTodos.business, advanceTodos.todos);
StateAdvanceResult result = new StateAdvanceResult(updated, advanceTodos.business, advanceTodos.todos);
if (!ctx.isBroadcast())
result.setBroadcastHandler(broadcastHandler);
return result;
}
private StateAdvanceBuilder execAdvanceBuilder() {

View File

@ -17,6 +17,7 @@ public class TodoRequestContext {
private final String name;
private final String requestNo;
private final Map<String, Object> logContents = new LinkedHashMap<>();
private boolean broadcast = true;
private TodoRequestContext(String name, String requestNo, Object request) {
this.name = name;
@ -47,6 +48,11 @@ public class TodoRequestContext {
return this;
}
public TodoRequestContext broadcast(boolean broadcast) {
this.broadcast = broadcast;
return this;
}
public TodoRequestContext addLogContent(String name, Object value) {
if (name == null || value == null)
return this;