diff --git a/src/main/java/com/example/workutils/demo/disburse/enums/DisburseActionAllowRuleEnum.java b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseActionAllowRuleEnum.java new file mode 100644 index 0000000..614e3ca --- /dev/null +++ b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseActionAllowRuleEnum.java @@ -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 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 getRulesByAction(DisburseActionEnum action) { + return Arrays.stream(values()) + .filter(rule -> rule.getDisburseActionEnum() == action) + .collect(Collectors.toList()); + } + + /** + * 拼接同操作所有允许规则的放款状态描述 + */ + public static String buildAllowedStatesDesc(List rules) { + return rules.stream() + .filter(r -> r.getAllowDisburseStates() != null) + .flatMap(r -> r.getAllowDisburseStates().stream()) + .map(DisburseStateEnum::getDesc) + .distinct() + .collect(Collectors.joining("、")); + } +} diff --git a/src/main/java/com/example/workutils/demo/disburse/enums/DisburseDenyReasonEnum.java b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseDenyReasonEnum.java new file mode 100644 index 0000000..a57e51a --- /dev/null +++ b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseDenyReasonEnum.java @@ -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; +} diff --git a/src/main/java/com/example/workutils/demo/disburse/enums/DisburseRevokeStatusEnum.java b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseRevokeStatusEnum.java new file mode 100644 index 0000000..d8e4843 --- /dev/null +++ b/src/main/java/com/example/workutils/demo/disburse/enums/DisburseRevokeStatusEnum.java @@ -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; +}