REQ-2135: 提供新的接口来更新业务终态

This commit is contained in:
yanglin 2024-04-10 17:37:00 +08:00
parent 2cf4ffd09c
commit e1ee74f721
5 changed files with 77 additions and 4 deletions

View File

@ -27,6 +27,7 @@ import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest
import cn.axzo.msg.center.service.pending.request.PresetButtonPressedRequest;
import cn.axzo.msg.center.service.pending.request.RevokePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.SetHideRequest;
import cn.axzo.msg.center.service.pending.request.UpdateBusinessFinalBizStateRequest;
import cn.axzo.msg.center.service.pending.request.UpdatePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.response.AnalysisPage;
import cn.axzo.msg.center.service.pending.response.PendingMessageIterateResponse;
@ -181,6 +182,12 @@ public class PendingMessageNewController implements PendingMessageClient {
return CommonResponse.success(todoManager.completeByBizCode(param));
}
@Override
public CommonResponse<Boolean> updateBusinessFinalBizState(UpdateBusinessFinalBizStateRequest param) {
log.info("updateBusinessFinalBizState, request={}", JSON.toJSONString(param));
return CommonResponse.success(todoManager.updateBusinessFinalBizState(param));
}
@Override
public CommonResponse<Boolean> completeByTemplateCodeSubBizCode(CompletePendingBySubCodeRequest param) {
log.info("completeByTemplateCodeSubBizCode, request={}", JSON.toJSONString(param));

View File

@ -25,6 +25,7 @@ import cn.axzo.msg.center.service.pending.request.CompletePendingMessageRequest;
import cn.axzo.msg.center.service.pending.request.PresetButtonPressedRequest;
import cn.axzo.msg.center.service.pending.request.RevokePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.SetHideRequest;
import cn.axzo.msg.center.service.pending.request.UpdateBusinessFinalBizStateRequest;
import cn.axzo.msg.center.service.pending.request.UpdatePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.response.PushPendingMessageDTO;
import cn.axzo.msg.center.service.util.JSONUtils;
@ -47,7 +48,6 @@ import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Nullable;
import java.util.Collections;
import java.util.Date;
import java.util.List;
@ -108,7 +108,7 @@ public class TodoManager {
// 如果已经存在对应的待办业务, 就把待办追加到对应的待办业务上
// 流程会并发, 这里对业务进行加锁
TodoBusiness business = todoBusinessDao
.findForUpdate(request.getTemplateCode(), request.getBizCode())
.findByBiz(request.getTemplateCode(), request.getBizCode(), true)
.orElse(null);
boolean businessCreated = false;
TodoExt ext = new TodoExt(request, template);
@ -221,6 +221,21 @@ public class TodoManager {
return advanceResult.isAdvanced() || businessUpdated;
}
@Transactional
public boolean updateBusinessFinalBizState(UpdateBusinessFinalBizStateRequest request) {
TodoBusiness business = todoBusinessDao
.findByBiz(request.getTemplateCode(), request.getBizCode(), false)
.orElse(null);
BizAssertions.assertNotNull(business, "未找到对应的待办. templateCode={}, bizCode={}",
request.getTemplateCode(), request.getBizCode());
boolean updated = todoBusinessDao.updateBizFinalState(
request.getTemplateCode(), request.getBizCode(), request.getBizFinalStateEnum());
TodoRequestContext ctx = TodoRequestContext.create("updateBusinessFinalBizState", request)
.addLogContent("updated", updated);
todoLogger.logBusinessUpdated(ctx, business);
return updated;
}
/**
* 完成待办
*/

View File

@ -18,6 +18,7 @@ import cn.axzo.msg.center.service.pending.request.PendingMessageStatisticRequest
import cn.axzo.msg.center.service.pending.request.PresetButtonPressedRequest;
import cn.axzo.msg.center.service.pending.request.RevokePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.request.SetHideRequest;
import cn.axzo.msg.center.service.pending.request.UpdateBusinessFinalBizStateRequest;
import cn.axzo.msg.center.service.pending.request.UpdatePendingMessageByIdRequest;
import cn.axzo.msg.center.service.pending.response.AnalysisPage;
import cn.axzo.msg.center.service.pending.response.PendingMessageIterateResponse;
@ -214,6 +215,10 @@ public interface PendingMessageClient {
@PostMapping(value = "/pending-message/complete/by-biz-code", produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Boolean> completeByTemplateCodeBizCode(@RequestBody @Valid CompletePendingMessageRequest param);
@PostMapping(value = "/pending-message/update-business-final-biz-state",
produces = {MediaType.APPLICATION_JSON_VALUE})
CommonResponse<Boolean> updateBusinessFinalBizState(UpdateBusinessFinalBizStateRequest param);
/**
* 通过模版编号和业务编号和子业务编号完成代办
*

View File

@ -0,0 +1,37 @@
package cn.axzo.msg.center.service.pending.request;
import cn.axzo.msg.center.service.enums.BizFinalStateEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* @author haiyangjin
* @date 2023/11/15
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class UpdateBusinessFinalBizStateRequest implements Serializable {
/**
* 关联业务主键
*/
@NotNull(message = "bizCode is required")
private String bizCode;
/**
* 模版code
*/
@NotNull(message = "templateCode is required")
private String templateCode;
/**
* 业务终态的状态枚举
*/
private BizFinalStateEnum bizFinalStateEnum;
}

View File

@ -25,11 +25,11 @@ import static java.util.stream.Collectors.toSet;
@Component
public class TodoBusinessDao extends ServiceImpl<TodoBusinessMapper, TodoBusiness> {
public Optional<TodoBusiness> findForUpdate(String templateCode, String bizCode) {
public Optional<TodoBusiness> findByBiz(String templateCode, String bizCode, boolean forUpdate) {
TodoBusiness business = lambdaQuery()
.eq(TodoBusiness::getTemplateCode, templateCode)
.eq(TodoBusiness::getBizCode, bizCode)
.last("FOR UPDATE")
.last(forUpdate, "FOR UPDATE")
.one();
return Optional.ofNullable(business);
}
@ -70,4 +70,13 @@ public class TodoBusinessDao extends ServiceImpl<TodoBusinessMapper, TodoBusines
.set(TodoBusiness::getBizFinalState, bizFinalState)
.update();
}
public boolean updateBizFinalState(String templateCode, String bizCode, BizFinalStateEnum bizFinalState) {
return lambdaUpdate()
.eq(TodoBusiness::getTemplateCode, templateCode)
.eq(TodoBusiness::getBizCode, bizCode)
.set(TodoBusiness::getBizFinalState, bizFinalState)
.update();
}
}