删除以上代码
This commit is contained in:
@@ -1,63 +0,0 @@
|
||||
package com.example.workutils.demo.disburse.bo;
|
||||
|
||||
|
||||
import com.example.workutils.demo.disburse.enums.DisburseRevokeStatusEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @desc: 状态机流转结果
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:01:13
|
||||
*/
|
||||
@Getter
|
||||
public class StateTransitionResult {
|
||||
|
||||
/**
|
||||
* 状态流转是否成功
|
||||
*/
|
||||
private final boolean success;
|
||||
|
||||
/**
|
||||
* 流转后的放款状态
|
||||
*/
|
||||
private final DisburseStateEnum transitionAfterState;
|
||||
|
||||
/**
|
||||
* 挂起标识
|
||||
* false:未挂起,true:已挂起
|
||||
*/
|
||||
private final Boolean suspendedFlag;
|
||||
|
||||
/**
|
||||
* 撤销状态
|
||||
*/
|
||||
private final DisburseRevokeStatusEnum revokeStatus;
|
||||
|
||||
/**
|
||||
* 操作拒绝原因
|
||||
*/
|
||||
private final String failReason;
|
||||
|
||||
|
||||
private StateTransitionResult(boolean success, DisburseStateEnum transitionAfterState,
|
||||
Boolean suspendedFlag, DisburseRevokeStatusEnum revokeStatus,
|
||||
String failReason) {
|
||||
this.success = success;
|
||||
this.transitionAfterState = transitionAfterState;
|
||||
this.suspendedFlag = suspendedFlag;
|
||||
this.revokeStatus = revokeStatus;
|
||||
this.failReason = failReason;
|
||||
}
|
||||
|
||||
public static StateTransitionResult allow(DisburseStateEnum transitionAfterState,
|
||||
Boolean suspended,
|
||||
DisburseRevokeStatusEnum revokeStatus) {
|
||||
return new StateTransitionResult(true, transitionAfterState, suspended, revokeStatus, null);
|
||||
}
|
||||
|
||||
public static StateTransitionResult deny(String reason) {
|
||||
return new StateTransitionResult(false, null, null, null, reason);
|
||||
}
|
||||
|
||||
}
|
||||
-48
@@ -1,48 +0,0 @@
|
||||
package com.example.workutils.demo.disburse.context;
|
||||
|
||||
import com.example.workutils.demo.disburse.enums.DisburseRevokeStatusEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @desc: 放款状态流转上下文类
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:06:37
|
||||
*/
|
||||
@Getter
|
||||
public class DisburseStatusTransitionContext {
|
||||
|
||||
/**
|
||||
* 放款状态枚举
|
||||
*/
|
||||
private final DisburseStateEnum currentDisburseState;
|
||||
|
||||
/**
|
||||
* 挂起标识
|
||||
* false:未挂起,true:已挂起
|
||||
*/
|
||||
private final boolean suspendedFlag;
|
||||
|
||||
/**
|
||||
* 撤销状态
|
||||
*/
|
||||
private final DisburseRevokeStatusEnum revokeStatus;
|
||||
|
||||
/**
|
||||
* 达到冷静期标识
|
||||
* false:未达到冷静期,true:已达到冷静期
|
||||
*/
|
||||
private final boolean coolingReachedFlag;
|
||||
|
||||
|
||||
public DisburseStatusTransitionContext(DisburseStateEnum currentDisburseState,
|
||||
boolean suspendedFlag,
|
||||
DisburseRevokeStatusEnum revokeStatus,
|
||||
boolean coolingReachedFlag) {
|
||||
this.currentDisburseState = currentDisburseState;
|
||||
this.suspendedFlag = suspendedFlag;
|
||||
this.revokeStatus = revokeStatus;
|
||||
this.coolingReachedFlag = coolingReachedFlag;
|
||||
}
|
||||
|
||||
}
|
||||
-320
@@ -1,320 +0,0 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description: 放款操作允许规则枚举(决策表)
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/28
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseActionAllowRuleEnum {
|
||||
|
||||
// ==================== 挂起 ====================
|
||||
|
||||
/**
|
||||
* 操作:挂起
|
||||
* 允许操作的放款状态:初始化、待确认
|
||||
* 期望挂起状态:未挂起
|
||||
* 期望撤销状态:任意,不检查
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:保持不变
|
||||
* 目标挂起状态:已挂起
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
SUSPEND(DisburseActionEnum.SUSPEND, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.INIT,
|
||||
DisburseStateEnum.PENDING_CONFIRM), /* 允许状态 */
|
||||
false, /* 期望挂起 */
|
||||
null, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
null, /* 目标状态 */
|
||||
true, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 挂起恢复 ====================
|
||||
|
||||
/**
|
||||
* 操作:挂起恢复
|
||||
* 允许操作的放款状态:任意,不检查
|
||||
* 期望挂起状态:已挂起
|
||||
* 期望撤销状态:任意,不检查
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:保持不变
|
||||
* 目标挂起状态:未挂起
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
SUSPEND_RESUME(DisburseActionEnum.SUSPEND_RESUME, /* 操作 */
|
||||
null, /* 允许状态 */
|
||||
true, /* 期望挂起 */
|
||||
null, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
null, /* 目标状态 */
|
||||
false, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 提交 ====================
|
||||
|
||||
/**
|
||||
* 操作:提交
|
||||
* 允许操作的放款状态:初始化
|
||||
* 期望挂起状态:未挂起
|
||||
* 期望撤销状态:未撤销
|
||||
* 期望冷静期状态:已达到
|
||||
* 目标放款状态:待确认
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
COMMIT(DisburseActionEnum.COMMIT, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.INIT), /* 允许状态 */
|
||||
false, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.NOT_REVOKED, /* 期望撤销状态 */
|
||||
true, /* 期望冷静期 */
|
||||
DisburseStateEnum.PENDING_CONFIRM, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 确认 ====================
|
||||
|
||||
/**
|
||||
* 操作:确认
|
||||
* 允许操作的放款状态:待确认
|
||||
* 期望挂起状态:未挂起
|
||||
* 期望撤销状态:未撤销
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:待审核
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
CONFIRM(DisburseActionEnum.CONFIRM, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.PENDING_CONFIRM), /* 允许状态 */
|
||||
false, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.NOT_REVOKED, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
DisburseStateEnum.PENDING_AUDIT, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 审核 ====================
|
||||
|
||||
/**
|
||||
* 操作:审核
|
||||
* 允许操作的放款状态:待审核
|
||||
* 期望挂起状态:未挂起
|
||||
* 期望撤销状态:未撤销
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:放款中
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
AUDIT(DisburseActionEnum.AUDIT, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.PENDING_AUDIT), /* 允许状态 */
|
||||
false, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.NOT_REVOKED, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
DisburseStateEnum.DISBURSING, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 放款成功 ====================
|
||||
|
||||
/**
|
||||
* 操作:放款成功
|
||||
* 允许操作的放款状态:放款中
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:任意,不检查
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:放款成功
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
DISBURSE_SUCCESS(DisburseActionEnum.DISBURSE_SUCCESS, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.DISBURSING), /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
null, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
DisburseStateEnum.DISBURSE_SUCCESS, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 放款失败 ====================
|
||||
|
||||
/**
|
||||
* 操作:放款失败
|
||||
* 允许操作的放款状态:放款中
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:任意,不检查
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:放款失败
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:保持不变
|
||||
*/
|
||||
DISBURSE_FAIL(DisburseActionEnum.DISBURSE_FAIL, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.DISBURSING), /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
null, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
DisburseStateEnum.DISBURSE_FAILED, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
null), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 撤销 ====================
|
||||
|
||||
/**
|
||||
* 操作:撤销(放款前)
|
||||
* 允许操作的放款状态:初始化、待确认、待审核
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:未撤销
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:放款失败
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:已撤销
|
||||
*/
|
||||
REVOKE_BEFORE_DISBURSE(DisburseActionEnum.REVOKE, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.INIT,
|
||||
DisburseStateEnum.PENDING_CONFIRM,
|
||||
DisburseStateEnum.PENDING_AUDIT), /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.NOT_REVOKED, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
DisburseStateEnum.DISBURSE_FAILED, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKED), /* 目标撤销状态 */
|
||||
|
||||
/**
|
||||
* 操作:撤销(放款后)
|
||||
* 允许操作的放款状态:放款中、放款成功
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:未撤销
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:保持不变
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:处理中
|
||||
*/
|
||||
REVOKE_AFTER_DISBURSE(DisburseActionEnum.REVOKE, /* 操作 */
|
||||
Arrays.asList(DisburseStateEnum.DISBURSING,
|
||||
DisburseStateEnum.DISBURSE_SUCCESS), /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.NOT_REVOKED, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
null, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKING), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 撤销成功 ====================
|
||||
|
||||
/**
|
||||
* 操作:撤销成功
|
||||
* 允许操作的放款状态:任意,不检查
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:处理中
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:保持不变
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:撤销成功
|
||||
*/
|
||||
REVOKE_SUCCESS(DisburseActionEnum.REVOKE_SUCCESS, /* 操作 */
|
||||
null, /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKING, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
null, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKE_SUCCESS), /* 目标撤销状态 */
|
||||
|
||||
// ==================== 撤销失败 ====================
|
||||
|
||||
/**
|
||||
* 操作:撤销失败
|
||||
* 允许操作的放款状态:任意,不检查
|
||||
* 期望挂起状态:任意,不检查
|
||||
* 期望撤销状态:处理中
|
||||
* 期望冷静期状态:任意,不检查
|
||||
* 目标放款状态:保持不变
|
||||
* 目标挂起状态:保持不变
|
||||
* 目标撤销状态:撤销失败
|
||||
*/
|
||||
REVOKE_FAIL(DisburseActionEnum.REVOKE_FAIL, /* 操作 */
|
||||
null, /* 允许状态 */
|
||||
null, /* 期望挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKING, /* 期望撤销状态 */
|
||||
null, /* 期望冷静期 */
|
||||
null, /* 目标状态 */
|
||||
null, /* 目标挂起 */
|
||||
DisburseRevokeStatusEnum.REVOKE_FAIL), /* 目标撤销状态 */
|
||||
|
||||
;
|
||||
|
||||
/**
|
||||
* 放款操作枚举
|
||||
*/
|
||||
private final DisburseActionEnum disburseActionEnum;
|
||||
|
||||
/**
|
||||
* 允许的当前放款状态列表,null表示任意状态
|
||||
*/
|
||||
private final List<DisburseStateEnum> allowDisburseStates;
|
||||
|
||||
/**
|
||||
* 期望挂起状态
|
||||
* false:未挂起,true:已挂起,null:不检查
|
||||
*/
|
||||
private final Boolean expectSuspended;
|
||||
|
||||
/**
|
||||
* 期望撤销状态
|
||||
* 指定期望的撤销状态,null表示不检查
|
||||
*/
|
||||
private final DisburseRevokeStatusEnum expectRevokeStatus;
|
||||
|
||||
/**
|
||||
* 期望达到冷静期
|
||||
* false:未达到冷静期,true:已达到冷静期,null:不检查
|
||||
*/
|
||||
private final Boolean expectCoolingReached;
|
||||
|
||||
/**
|
||||
* 目标放款状态,null表示保持当前状态不变
|
||||
*/
|
||||
private final DisburseStateEnum targetDisburseState;
|
||||
|
||||
/**
|
||||
* 目标挂起标识
|
||||
* true:置为已挂起,false:置为未挂起,null:保持当前值不变
|
||||
*/
|
||||
private final Boolean targetSuspended;
|
||||
|
||||
/**
|
||||
* 目标撤销状态
|
||||
* 非null时设置为对应撤销状态,null表示保持当前值不变
|
||||
*/
|
||||
private final DisburseRevokeStatusEnum targetRevokeStatus;
|
||||
|
||||
|
||||
/**
|
||||
* 根据操作枚举获取匹配的允许规则列表(同一操作可能有多条规则)
|
||||
*/
|
||||
public static List<DisburseActionAllowRuleEnum> getRulesByAction(DisburseActionEnum action) {
|
||||
return Arrays.stream(values())
|
||||
.filter(rule -> rule.getDisburseActionEnum() == action)
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 拼接同操作所有允许规则的放款状态描述
|
||||
*/
|
||||
public static String buildAllowedStatesDesc(List<DisburseActionAllowRuleEnum> rules) {
|
||||
return rules.stream()
|
||||
.filter(r -> r.getAllowDisburseStates() != null)
|
||||
.flatMap(r -> r.getAllowDisburseStates().stream())
|
||||
.map(DisburseStateEnum::getDesc)
|
||||
.distinct()
|
||||
.collect(Collectors.joining("、"));
|
||||
}
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
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("撤销"),
|
||||
|
||||
/**
|
||||
* 撤销成功
|
||||
*/
|
||||
REVOKE_SUCCESS("撤销成功"),
|
||||
|
||||
/**
|
||||
* 撤销失败
|
||||
*/
|
||||
REVOKE_FAIL("撤销失败");
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
private String desc;
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 放款操作拒绝原因枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/30
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseDenyReasonEnum {
|
||||
|
||||
NO_RULE_MATCHED("放款操作未命中任何决策规则"),
|
||||
;
|
||||
|
||||
private final String reason;
|
||||
}
|
||||
@@ -1,43 +0,0 @@
|
||||
package com.example.workutils.demo.disburse.enums;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* @Description: 撤销状态枚举
|
||||
* @Author:zhaoyuhang
|
||||
* @Date: 2026/4/30
|
||||
**/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum DisburseRevokeStatusEnum {
|
||||
|
||||
/**
|
||||
* 未撤销
|
||||
*/
|
||||
NOT_REVOKED("未撤销"),
|
||||
|
||||
/**
|
||||
* 已撤销(放款前撤销的终态)
|
||||
*/
|
||||
REVOKED("已撤销"),
|
||||
|
||||
/**
|
||||
* 处理中(放款后撤销进入处理流程)
|
||||
*/
|
||||
REVOKING("处理中"),
|
||||
|
||||
/**
|
||||
* 撤销成功
|
||||
*/
|
||||
REVOKE_SUCCESS("撤销成功"),
|
||||
|
||||
/**
|
||||
* 撤销失败
|
||||
*/
|
||||
REVOKE_FAIL("撤销失败"),
|
||||
|
||||
;
|
||||
|
||||
private final String desc;
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
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;
|
||||
|
||||
}
|
||||
-97
@@ -1,97 +0,0 @@
|
||||
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.DisburseActionAllowRuleEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseActionEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseDenyReasonEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseRevokeStatusEnum;
|
||||
import com.example.workutils.demo.disburse.enums.DisburseStateEnum;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @desc: 状态机流转执行器
|
||||
* @author: zhaoyuhang
|
||||
* @date: 2026-04-28 10:01:13
|
||||
*/
|
||||
@Slf4j
|
||||
@Component
|
||||
public class StateTransitionExecutor {
|
||||
|
||||
|
||||
public StateTransitionResult transitionState(DisburseStatusTransitionContext context, DisburseActionEnum action) {
|
||||
// 1. 查找该操作的所有允许规则
|
||||
List<DisburseActionAllowRuleEnum> rules = DisburseActionAllowRuleEnum.getRulesByAction(action);
|
||||
if (rules.isEmpty()) {
|
||||
log.error("放款操作未命中任何决策规则,放款操作:{}不合法!", action.name());
|
||||
return StateTransitionResult.deny(DisburseDenyReasonEnum.NO_RULE_MATCHED.getReason());
|
||||
}
|
||||
|
||||
// 2. 根据上下文参数匹配唯一规则:放款状态 + 挂起 + 撤销 + 冷静期
|
||||
for (DisburseActionAllowRuleEnum rule : rules) {
|
||||
if (isConditionMatched(rule, context)) {
|
||||
return executeRule(context, rule);
|
||||
}
|
||||
}
|
||||
|
||||
// 3. 无匹配规则 → 拼接允许规则说明
|
||||
String reason = "当前状态不允许执行" + action.getDesc()
|
||||
+ ",允许的放款状态:" + DisburseActionAllowRuleEnum.buildAllowedStatesDesc(rules);
|
||||
log.info(reason);
|
||||
return StateTransitionResult.deny(reason);
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查规则的所有条件是否与上下文匹配
|
||||
*/
|
||||
private boolean isConditionMatched(DisburseActionAllowRuleEnum rule,
|
||||
DisburseStatusTransitionContext context) {
|
||||
if (!isStateAllowed(rule, context.getCurrentDisburseState())) {
|
||||
return false;
|
||||
}
|
||||
if (rule.getExpectSuspended() != null
|
||||
&& !rule.getExpectSuspended().equals(context.isSuspendedFlag())) {
|
||||
return false;
|
||||
}
|
||||
if (rule.getExpectRevokeStatus() != null
|
||||
&& !rule.getExpectRevokeStatus().equals(context.getRevokeStatus())) {
|
||||
return false;
|
||||
}
|
||||
if (rule.getExpectCoolingReached() != null
|
||||
&& !rule.getExpectCoolingReached().equals(context.isCoolingReachedFlag())) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前状态是否在规则的允许状态列表中
|
||||
*/
|
||||
private boolean isStateAllowed(DisburseActionAllowRuleEnum rule, DisburseStateEnum currentState) {
|
||||
return rule.getAllowDisburseStates() == null
|
||||
|| rule.getAllowDisburseStates().contains(currentState);
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行匹配的允许规则,计算目标状态
|
||||
*/
|
||||
private StateTransitionResult executeRule(DisburseStatusTransitionContext context,
|
||||
DisburseActionAllowRuleEnum rule) {
|
||||
DisburseStateEnum targetState = rule.getTargetDisburseState() != null
|
||||
? rule.getTargetDisburseState()
|
||||
: context.getCurrentDisburseState();
|
||||
|
||||
Boolean targetSuspended = rule.getTargetSuspended() != null
|
||||
? rule.getTargetSuspended()
|
||||
: context.isSuspendedFlag();
|
||||
|
||||
DisburseRevokeStatusEnum targetRevokeStatus = rule.getTargetRevokeStatus() != null
|
||||
? rule.getTargetRevokeStatus()
|
||||
: context.getRevokeStatus();
|
||||
|
||||
return StateTransitionResult.allow(targetState, targetSuspended, targetRevokeStatus);
|
||||
}
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
package com.example.workutils.demo;
|
||||
// 非该项目代码,仅用于代码片段的编写和AI优化
|
||||
Reference in New Issue
Block a user