REQ-2595-业务待办更新,调整消息发送方式
This commit is contained in:
parent
0cc9c55969
commit
0594364757
@ -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();
|
||||
}
|
||||
|
||||
@ -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() {
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user