| | |
| | | * 1) 企业状态校验(未归属/不存在/停用 -> 失败码2),账户模式取企业配置(默认共享); |
| | | * 2) 企业充电授权校验:站点范围(超范围 -> 失败码2)、可用时段(不在时段 -> 失败码2),未配置授权按放行处理; |
| | | * 3) 可用余额校验(共享=企业可用余额,分配=卡可用余额,<=0 -> 失败码3); |
| | | * 4) 下发金额 = min(授权下发额, 可用余额),锁定额度与下发金额一致;授权截止时间用于监控提前停充。 |
| | | * 4) 下发金额:共享模式=min(授权下发额, 可用余额),分配模式=卡账户余额;锁定额度与下发金额一致;授权截止时间用于监控提前停充。 |
| | | */ |
| | | private ChargeAccountSupport.ChargeContext resolveCardChargeContext(Integer siteId, Integer strategyId, |
| | | TChargingCard card) { |
| | |
| | | return ChargeAccountSupport.ChargeContext.fail(3, "账户可用余额不足"); |
| | | } |
| | | |
| | | // 4. 下发金额 = min(授权下发额, 可用余额),锁定金额与下发金额一致 |
| | | BigDecimal dispatchAmount = authorization == null || authorization.getDispatchAmount() == null |
| | | ? ChargeAccountSupport.DEFAULT_DISPATCH_AMOUNT : authorization.getDispatchAmount(); |
| | | if (dispatchAmount.compareTo(usable) > 0) { |
| | | // 4. 下发金额:共享模式=min(授权下发额, 可用余额),分配模式=卡账户余额;锁定金额与下发金额一致 |
| | | BigDecimal dispatchAmount; |
| | | if (Integer.valueOf(ChargeAccountSupport.ACCOUNT_MODE_ALLOCATED).equals(accountMode)) { |
| | | dispatchAmount = usable; |
| | | } else { |
| | | dispatchAmount = authorization == null || authorization.getDispatchAmount() == null |
| | | ? ChargeAccountSupport.DEFAULT_DISPATCH_AMOUNT : authorization.getDispatchAmount(); |
| | | if (dispatchAmount.compareTo(usable) > 0) { |
| | | dispatchAmount = usable; |
| | | } |
| | | } |
| | | if (dispatchAmount.compareTo(BigDecimal.ZERO) <= 0) { |
| | | return ChargeAccountSupport.ChargeContext.fail(3, "账户可用余额不足"); |