代码提交

This commit is contained in:
张家训
2026-05-01 09:57:00 +08:00
parent fce4f29a64
commit 4f9acedd8a
3 changed files with 382 additions and 0 deletions
@@ -0,0 +1,320 @@
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("、"));
}
}
@@ -0,0 +1,19 @@
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;
}
@@ -0,0 +1,43 @@
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;
}