代码迁移部分
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package com.example.workutils.demo.disburse.bo;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @desc: 状态机流转结果
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:01:13
|
||||
*/
|
||||
@Data
|
||||
public class StateTransitionResult {
|
||||
|
||||
/**
|
||||
* 状态流转是否成功
|
||||
*/
|
||||
public final boolean success;
|
||||
|
||||
/**
|
||||
* 流转后的放款状态
|
||||
*/
|
||||
public final DisburseStateEnum transitionAfterState;
|
||||
|
||||
/**
|
||||
* 挂起标识
|
||||
* false:未挂起,true:已挂起
|
||||
*/
|
||||
public final Boolean suspendedFlag;
|
||||
|
||||
/**
|
||||
* 撤销标识
|
||||
* false:未撤销,true:已撤销
|
||||
*/
|
||||
public final Boolean revokeFlag;
|
||||
|
||||
/**
|
||||
* 操作拒绝原因
|
||||
*/
|
||||
public final String failReason;
|
||||
|
||||
|
||||
private StateTransitionResult(boolean success, DisburseStateEnum transitionAfterState,
|
||||
Boolean suspendedFlag, Boolean revokeFlag, String failReason) {
|
||||
this.success = success;
|
||||
this.transitionAfterState = transitionAfterState;
|
||||
this.suspendedFlag = suspendedFlag;
|
||||
this.revokeFlag = revokeFlag;
|
||||
this.failReason = failReason;
|
||||
}
|
||||
|
||||
public static StateTransitionResult allow(DisburseStateEnum transitionAfterState,
|
||||
Boolean suspended,
|
||||
Boolean canceled) {
|
||||
return new StateTransitionResult(true, transitionAfterState, suspended, canceled, null);
|
||||
}
|
||||
|
||||
public static StateTransitionResult deny(String reason) {
|
||||
return new StateTransitionResult(false, null, null, null, reason);
|
||||
}
|
||||
|
||||
}
|
||||
+64
@@ -0,0 +1,64 @@
|
||||
package com.example.workutils.demo.disburse.context;
|
||||
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @desc: 放款状态流转上下文类
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:06:37
|
||||
*/
|
||||
@Data
|
||||
public class DisburseStatusTransitionContext {
|
||||
|
||||
/**
|
||||
* 放款状态枚举
|
||||
*/
|
||||
public DisburseStateEnum currentDisburseState;
|
||||
|
||||
/**
|
||||
* 挂起标识
|
||||
* false:未挂起,true:已挂起
|
||||
*/
|
||||
public boolean suspendedFlag;
|
||||
|
||||
/**
|
||||
* 撤销标识
|
||||
* false:未撤销,true:已撤销
|
||||
*/
|
||||
public boolean revokeFlag;
|
||||
|
||||
/**
|
||||
* 达到冷静期标识
|
||||
* false:未达到冷静期,true:已达到冷静期
|
||||
*/
|
||||
public boolean coolingReachedFlag;
|
||||
|
||||
/**
|
||||
* 自动确认标识
|
||||
* false:不自动确认,true:自动确认
|
||||
*/
|
||||
public boolean autoConfirmFlag;
|
||||
|
||||
/**
|
||||
* 自动审核标识
|
||||
* false:不自动审核,true:自动审核
|
||||
*/
|
||||
public boolean autoAuditFlag;
|
||||
|
||||
|
||||
public DisburseStatusTransitionContext(DisburseStateEnum currentDisburseState,
|
||||
boolean suspendedFlag,
|
||||
boolean revokeFlag,
|
||||
boolean coolingReachedFlag,
|
||||
boolean autoConfirmFlag,
|
||||
boolean autoAuditFlag) {
|
||||
this.currentDisburseState = currentDisburseState;
|
||||
this.suspendedFlag = suspendedFlag;
|
||||
this.revokeFlag = revokeFlag;
|
||||
this.coolingReachedFlag = coolingReachedFlag;
|
||||
this.autoConfirmFlag = autoConfirmFlag;
|
||||
this.autoAuditFlag = autoAuditFlag;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 放款操作枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/28
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseActionEnum {
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
COMMIT("提交"),
|
||||
|
||||
/**
|
||||
* 确认
|
||||
*/
|
||||
CONFIRM("确认"),
|
||||
|
||||
/**
|
||||
* 审核
|
||||
*/
|
||||
AUDIT("审核"),
|
||||
|
||||
/**
|
||||
* 放款成功
|
||||
*/
|
||||
DISBURSE_SUCCESS("放款成功"),
|
||||
|
||||
/**
|
||||
* 放款失败
|
||||
*/
|
||||
DISBURSE_FAIL("放款失败"),
|
||||
|
||||
/**
|
||||
* 挂起
|
||||
*/
|
||||
SUSPEND("挂起"),
|
||||
|
||||
/**
|
||||
* 挂起恢复
|
||||
*/
|
||||
SUSPEND_RESUME("挂起恢复"),
|
||||
|
||||
/**
|
||||
* 撤销
|
||||
*/
|
||||
REVOKE("撤销");
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String desc;
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 放款操作规则枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/28
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseActionRuleEnum {
|
||||
|
||||
/**
|
||||
* 提交
|
||||
*/
|
||||
COMMIT(DisburseActionEnum.COMMIT, StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY, false, false, true),
|
||||
|
||||
/**
|
||||
* 确认
|
||||
*/
|
||||
CONFIRM(DisburseActionEnum.CONFIRM, StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY, false, false, null),
|
||||
|
||||
/**
|
||||
* 审核
|
||||
*/
|
||||
AUDIT(DisburseActionEnum.AUDIT, StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY, false, false, null),
|
||||
|
||||
/**
|
||||
* 放款成功
|
||||
*/
|
||||
DISBURSE_SUCCESS(DisburseActionEnum.DISBURSE_SUCCESS, StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY,
|
||||
null, null, null),
|
||||
|
||||
/**
|
||||
* 放款失败
|
||||
*/
|
||||
DISBURSE_FAIL(DisburseActionEnum.DISBURSE_FAIL, StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY,
|
||||
null, null, null),
|
||||
|
||||
/**
|
||||
* 挂起
|
||||
*/
|
||||
SUSPEND(DisburseActionEnum.SUSPEND, StateTransitionStrategyEnum.SUSPEND_TRANSITION_STRATEGY, false, null, null),
|
||||
|
||||
/**
|
||||
* 挂起恢复
|
||||
*/
|
||||
SUSPEND_RESUME(DisburseActionEnum.SUSPEND_RESUME, StateTransitionStrategyEnum.SUSPEND_TRANSITION_STRATEGY,
|
||||
true, null, null),
|
||||
|
||||
/**
|
||||
* 撤销
|
||||
*/
|
||||
REVOKE(DisburseActionEnum.REVOKE, StateTransitionStrategyEnum.REVOKE_TRANSITION_STRATEGY, null, false, null);
|
||||
|
||||
/**
|
||||
* 放款操作枚举
|
||||
*/
|
||||
private DisburseActionEnum disburseActionEnum;
|
||||
|
||||
/**
|
||||
* 状态流转策略枚举
|
||||
*/
|
||||
private StateTransitionStrategyEnum stateTransitionStrategy;
|
||||
|
||||
/**
|
||||
* 要求挂起状态标识
|
||||
* false:未挂起,true:已挂起
|
||||
*/
|
||||
public Boolean requireSuspendFlag;
|
||||
|
||||
/**
|
||||
* 要求撤销状态标识
|
||||
* false:未撤销,true:已撤销
|
||||
*/
|
||||
public Boolean requireRevokeFlag;
|
||||
|
||||
/**
|
||||
* 要求达到冷静期标识
|
||||
* false:未达到冷静期,true:已达到冷静期
|
||||
*/
|
||||
public Boolean requireCoolingReachedFlag;
|
||||
|
||||
|
||||
public static DisburseActionRuleEnum getDisburseActionValidateEnum(DisburseActionEnum disburseActionEnum){
|
||||
for (DisburseActionRuleEnum ruleEnum : DisburseActionRuleEnum.values()) {
|
||||
if (ruleEnum.getDisburseActionEnum().equals(disburseActionEnum)){
|
||||
return ruleEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
|
||||
/**
|
||||
* @Description: 放款状态枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/28
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseStateEnum {
|
||||
|
||||
/**
|
||||
* 初始化
|
||||
*/
|
||||
INIT("初始化"),
|
||||
|
||||
/**
|
||||
* 待确认
|
||||
*/
|
||||
PENDING_CONFIRM("待确认"),
|
||||
|
||||
/**
|
||||
* 待审核
|
||||
*/
|
||||
PENDING_AUDIT("待审核"),
|
||||
|
||||
/**
|
||||
* 放款中
|
||||
*/
|
||||
DISBURSING("放款中"),
|
||||
|
||||
/**
|
||||
* 放款成功
|
||||
*/
|
||||
DISBURSE_SUCCESS("放款成功"),
|
||||
|
||||
/**
|
||||
* 放款失败
|
||||
*/
|
||||
DISBURSE_FAILED("放款失败"),
|
||||
;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String desc;
|
||||
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description:放款状态流转规则枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/28
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseStateTransitionRuleEnum {
|
||||
|
||||
/**
|
||||
* 提交操作状态流转规则
|
||||
*/
|
||||
COMMIT_STATE_TRANSITION_RULE(DisburseActionEnum.COMMIT, DisburseStateEnum.INIT, DisburseStateEnum.PENDING_CONFIRM),
|
||||
|
||||
/**
|
||||
* 确认操作状态流转规则
|
||||
*/
|
||||
CONFIRM_STATE_TRANSITION_RULE(DisburseActionEnum.CONFIRM, DisburseStateEnum.PENDING_CONFIRM,
|
||||
DisburseStateEnum.PENDING_AUDIT),
|
||||
|
||||
/**
|
||||
* 审核操作状态流转规则
|
||||
*/
|
||||
AUDIT_STATE_TRANSITION_RULE(DisburseActionEnum.AUDIT,DisburseStateEnum.PENDING_AUDIT, DisburseStateEnum.DISBURSING),
|
||||
|
||||
/**
|
||||
* 放款成功操作状态流转规则
|
||||
*/
|
||||
DISBURSE_SUCCESS_STATE_TRANSITION_RULE(DisburseActionEnum.DISBURSE_SUCCESS, DisburseStateEnum.DISBURSING,
|
||||
DisburseStateEnum.DISBURSE_SUCCESS),
|
||||
|
||||
/**
|
||||
* 放款失败操作状态流转规则
|
||||
*/
|
||||
DISBURSE_FAIL_STATE_TRANSITION_RULE(DisburseActionEnum.DISBURSE_FAIL, DisburseStateEnum.DISBURSING,
|
||||
DisburseStateEnum.DISBURSE_FAILED),
|
||||
;
|
||||
|
||||
/**
|
||||
* 放款操作枚举
|
||||
*/
|
||||
private DisburseActionEnum disburseActionEnum;
|
||||
|
||||
/**
|
||||
* 允许放款状态
|
||||
*/
|
||||
private DisburseStateEnum allowDisburseState;
|
||||
|
||||
/**
|
||||
* 目标放款状态
|
||||
*/
|
||||
private DisburseStateEnum targetDisburseState;
|
||||
|
||||
|
||||
public static DisburseStateTransitionRuleEnum getDisburseActionRule(DisburseActionEnum disburseActionEnum){
|
||||
for (DisburseStateTransitionRuleEnum ruleEnum : DisburseStateTransitionRuleEnum.values()) {
|
||||
if (ruleEnum.getDisburseActionEnum().equals(disburseActionEnum)){
|
||||
return ruleEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 状态流转策略枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/29
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum StateTransitionStrategyEnum {
|
||||
|
||||
DISBURSE_TRANSITION_STRATEGY("放款状态流转规则策略"),
|
||||
|
||||
SUSPEND_TRANSITION_STRATEGY("挂起状态流转规则策略"),
|
||||
|
||||
REVOKE_TRANSITION_STRATEGY("撤销状态流转规则策略"),
|
||||
;
|
||||
|
||||
private String desc;
|
||||
|
||||
}
|
||||
+58
@@ -0,0 +1,58 @@
|
||||
package com.example.workutils.demo.disburse.executor;
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.executor.service.StateTransitionRule;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @desc: 状态机流转执行器
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:01:13
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class StateTransitionExecutor {
|
||||
|
||||
@Resource
|
||||
private List<StateTransitionRule> stateTransitionRules;
|
||||
|
||||
|
||||
public StateTransitionResult transitionState(DisburseStatusTransitionContext context, DisburseActionEnum action) {
|
||||
//根据操作匹配处理规则
|
||||
DisburseActionRuleEnum disburseActionRuleEnum = DisburseActionRuleEnum.getDisburseActionValidateEnum(action);
|
||||
if (disburseActionRuleEnum == null){
|
||||
log.error("放款操作未命中任何决策规则,放款操作:{}不合法!", action.name());
|
||||
return StateTransitionResult.deny("放款操作未命中任何决策规则!");
|
||||
}
|
||||
|
||||
//根据处理规则匹配处理策略
|
||||
StateTransitionRule decisionRule = stateTransitionRules.stream()
|
||||
.filter(filter -> filter.getStateDecisionRule().equals(
|
||||
disburseActionRuleEnum.getStateTransitionStrategy().name()))
|
||||
.findFirst().orElse(null);
|
||||
if (decisionRule == null) {
|
||||
log.error("操作处理规则未命中任何决策处理策略,操作规则:{}不合理!",
|
||||
disburseActionRuleEnum.getStateTransitionStrategy().name());
|
||||
return StateTransitionResult.deny("操作处理规则未命中任何决策处理策略");
|
||||
}
|
||||
|
||||
//执行处理策略
|
||||
StateTransitionResult result = decisionRule.execute(context, disburseActionRuleEnum);
|
||||
if (result == null) {
|
||||
log.error("执行操作决策结果为空!");
|
||||
return StateTransitionResult.deny("执行操作决策结果为空");
|
||||
}
|
||||
|
||||
//TODO 是否修改Context参数
|
||||
context.setCurrentDisburseState(result.getTransitionAfterState());
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
package com.example.workutils.demo.disburse.executor.service;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
|
||||
/**
|
||||
* @desc: 状态决策规则接口
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:03:32
|
||||
*/
|
||||
public interface StateTransitionRule {
|
||||
|
||||
/**
|
||||
* 决策接口
|
||||
* @param context
|
||||
* @param ruleEnum
|
||||
* @return
|
||||
*/
|
||||
StateTransitionResult execute(DisburseStatusTransitionContext context, DisburseActionRuleEnum ruleEnum);
|
||||
|
||||
/**
|
||||
* 获取状态决策规则
|
||||
* @return
|
||||
*/
|
||||
String getStateDecisionRule();
|
||||
}
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
package com.example.workutils.demo.disburse.executor.service.impl;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.executor.service.StateTransitionRule;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
|
||||
/**
|
||||
* @desc: 抽象状态流转规则类
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 15:12:24
|
||||
*/
|
||||
@Slf4j
|
||||
public abstract class AbstractStateTransitionRule implements StateTransitionRule {
|
||||
|
||||
|
||||
@Override
|
||||
public final StateTransitionResult execute(DisburseStatusTransitionContext context,
|
||||
DisburseActionRuleEnum ruleEnum) {
|
||||
//挂起状态检查
|
||||
if (ruleEnum.getRequireSuspendFlag() != null &&
|
||||
!ruleEnum.getRequireSuspendFlag().equals(context.suspendedFlag)){
|
||||
log.info("目标挂起状态:{},实际挂起状态:{},状态不可推进!",ruleEnum.getRequireSuspendFlag(),context.suspendedFlag);
|
||||
return StateTransitionResult.deny("挂起时不可推进");
|
||||
}
|
||||
|
||||
//撤销状态检查
|
||||
if (ruleEnum.getRequireRevokeFlag() != null &&
|
||||
!ruleEnum.getRequireRevokeFlag().equals(context.revokeFlag)) {
|
||||
log.info("目标撤销状态:{}实际撤销状态:{},状态不可推进!", ruleEnum.getRequireRevokeFlag(), context.revokeFlag);
|
||||
return StateTransitionResult.deny("撤销后不可推进");
|
||||
}
|
||||
|
||||
//冷静期检查
|
||||
if (ruleEnum.getRequireCoolingReachedFlag() != null &&
|
||||
!ruleEnum.getRequireCoolingReachedFlag().equals(context.coolingReachedFlag)) {
|
||||
log.info("目标达到冷静期标识:{},实际达到冷静期状态:{},冷静期未到!",
|
||||
ruleEnum.getRequireCoolingReachedFlag(), context.coolingReachedFlag);
|
||||
return StateTransitionResult.deny("冷静期未到");
|
||||
}
|
||||
|
||||
return doEvaluate(context, ruleEnum);
|
||||
}
|
||||
|
||||
|
||||
protected abstract StateTransitionResult doEvaluate(DisburseStatusTransitionContext context,
|
||||
DisburseActionRuleEnum action);
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
package com.example.workutils.demo.disburse.executor.service.impl;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateTransitionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.enums.StateTransitionStrategyEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @desc: 放款状态操作处理器
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-29 10:39:40
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class DisburseStateTransitionRuleStrategy extends AbstractStateTransitionRule {
|
||||
|
||||
|
||||
@Override
|
||||
public StateTransitionResult doEvaluate(DisburseStatusTransitionContext context,
|
||||
DisburseActionRuleEnum actionRuleEnum) {
|
||||
DisburseStateTransitionRuleEnum ruleEnum =
|
||||
DisburseStateTransitionRuleEnum.getDisburseActionRule(actionRuleEnum.getDisburseActionEnum());
|
||||
if (ruleEnum == null){
|
||||
log.error("放款操作未匹配到放款状态流转规则!放款类型:{}", actionRuleEnum.getDisburseActionEnum().getDesc());
|
||||
return StateTransitionResult.deny("放款操作未匹配到放款状态流转规则");
|
||||
}
|
||||
|
||||
if (ruleEnum.getAllowDisburseState() != context.getCurrentDisburseState()){
|
||||
log.error("当前放款状态与要求放款状态不匹配,无法流转状态!放款操作:{}当前放款状态:{},要求放款状态:{}",
|
||||
actionRuleEnum.getDisburseActionEnum().getDesc(), context.getCurrentDisburseState(),
|
||||
ruleEnum.getAllowDisburseState());
|
||||
return StateTransitionResult.deny("当前放款状态与要求放款状态不匹配,当前放款状态:"+ context.getCurrentDisburseState()
|
||||
+ "不可推进为:" + ruleEnum.getTargetDisburseState());
|
||||
}
|
||||
|
||||
return StateTransitionResult.allow(ruleEnum.getTargetDisburseState(),
|
||||
context.isSuspendedFlag(), context.isRevokeFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStateDecisionRule() {
|
||||
return StateTransitionStrategyEnum.DISBURSE_TRANSITION_STRATEGY.name();
|
||||
}
|
||||
|
||||
}
|
||||
+56
@@ -0,0 +1,56 @@
|
||||
package com.example.workutils.demo.disburse.executor.service.impl;
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import com.example.workutils.demo.disburse.enums.StateTransitionStrategyEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @desc: 撤销状态操作处理器
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-29 10:36:34
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class RevokeStateTransitionTransitionRuleStrategy extends AbstractStateTransitionRule {
|
||||
|
||||
|
||||
private static final List<DisburseStateEnum> BEFORE_DISBURSE_STATE = Arrays.asList(
|
||||
DisburseStateEnum.INIT,
|
||||
DisburseStateEnum.PENDING_CONFIRM,
|
||||
DisburseStateEnum.PENDING_AUDIT
|
||||
);
|
||||
|
||||
/**
|
||||
* 执行决策接口
|
||||
*
|
||||
* @param context
|
||||
* @param ruleEnum
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public StateTransitionResult doEvaluate(DisburseStatusTransitionContext context,
|
||||
DisburseActionRuleEnum ruleEnum) {
|
||||
if (DisburseStateEnum.DISBURSE_FAILED.name().equals(context.getCurrentDisburseState())){
|
||||
log.info("放款状态:{}已经放款失败,无需撤销!");
|
||||
return StateTransitionResult.deny("放款状态已经为放款失败,无需撤销");
|
||||
}
|
||||
|
||||
DisburseStateEnum newStatus = BEFORE_DISBURSE_STATE.contains(context.getCurrentDisburseState())
|
||||
? DisburseStateEnum.DISBURSE_FAILED
|
||||
: context.getCurrentDisburseState();
|
||||
|
||||
return StateTransitionResult.allow(newStatus, context.isSuspendedFlag(), true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStateDecisionRule() {
|
||||
return StateTransitionStrategyEnum.REVOKE_TRANSITION_STRATEGY.name();
|
||||
}
|
||||
}
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
package com.example.workutils.demo.disburse.executor.service.impl;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.bo.StateTransitionResult;
|
||||
import com.example.workutils.demo.disburse.context.DisburseStatusTransitionContext;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionRuleEnum;
|
||||
import com.example.workutils.demo.disburse.enums.StateTransitionStrategyEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @desc: 挂起状态操作处理器
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-29 10:28:00
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class SuspendStateTransitionTransitionRuleStrategy extends AbstractStateTransitionRule {
|
||||
|
||||
/**
|
||||
* 决策接口
|
||||
*
|
||||
* @param context
|
||||
* @param ruleEnum
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public StateTransitionResult doEvaluate(DisburseStatusTransitionContext context, DisburseActionRuleEnum ruleEnum) {
|
||||
boolean newSuspended = ruleEnum.getDisburseActionEnum() == DisburseActionEnum.SUSPEND;
|
||||
|
||||
return StateTransitionResult.allow(context.getCurrentDisburseState(), newSuspended, context.isRevokeFlag());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getStateDecisionRule() {
|
||||
return StateTransitionStrategyEnum.SUSPEND_TRANSITION_STRATEGY.name();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
package com.example.workutils.demo;
|
||||
// 非该项目代码,仅用于代码片段的编写和AI优化
|
||||
Reference in New Issue
Block a user