diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/customer/customermoney/api/impl/CustomerAccountApiImpl.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/customer/customermoney/api/impl/CustomerAccountApiImpl.java index a3b8587b..5119fbdb 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/customer/customermoney/api/impl/CustomerAccountApiImpl.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/customer/customermoney/api/impl/CustomerAccountApiImpl.java @@ -249,6 +249,9 @@ public class CustomerAccountApiImpl implements ICustomerAccountApi String currency = resolveCurrency(command.getCurrency()); String username = currentUsername(); Long userId = currentUserId(); + // 计费开单准入:客户被停用(含删除)时直接拦截,与账户状态接口口径保持一致。 + // 仅占用(新增计费)校验;释放/核销等清欠动作不受限,避免客户被停用后无法平账。 + assertCustomerActive(customerId); CustomerAccount account = lockAccountForUsage(customerId, currency, username); if (account == null) { @@ -259,10 +262,20 @@ public class CustomerAccountApiImpl implements ICustomerAccountApi BigDecimal beforeUsed = nz(account.getUsedCredit()); BigDecimal totalAvailable = nz(account.getTotalCredit()).add(nz(account.getExtraCredit())) .subtract(beforeUsed); - if (Boolean.TRUE.equals(command.getCheckAvailable()) && totalAvailable.compareTo(amount) < 0) + if (Boolean.TRUE.equals(command.getCheckAvailable())) { - throw new ServiceException("客户可用额度不足,当前可用额度:" + totalAvailable.toPlainString() - + " " + currency + ",本次需占用:" + amount.toPlainString()); + // 已处于超额(欠费)状态:可用额度已为负,任何新增计费一律拦截 + if (totalAvailable.compareTo(BigDecimal.ZERO) < 0) + { + throw new ServiceException("客户已超额(欠费),当前可用额度:" + totalAvailable.toPlainString() + + " " + currency + ",请先回款核销恢复额度后再计费开单"); + } + if (totalAvailable.compareTo(amount) < 0) + { + throw new ServiceException("客户可用额度不足,当前可用额度:" + totalAvailable.toPlainString() + + " " + currency + ",本次需占用:" + amount.toPlainString() + + ",请回款核销或申请调整额度"); + } } BigDecimal afterUsed = beforeUsed.add(amount).setScale(MONEY_SCALE, RoundingMode.HALF_UP); account.setUsedCredit(afterUsed); @@ -558,6 +571,23 @@ public class CustomerAccountApiImpl implements ICustomerAccountApi customerMoneyMapper.insertCreditFlow(flow); } + /** + * 计费开单准入:客户档案必须存在且为启用状态(is_enable='0')。 + * 删除(del_flag='1',查询返回null)或停用(is_enable='1')均拒绝新增授信占用。 + */ + private void assertCustomerActive(Long customerId) + { + BmsCustomer customer = bmsCustomerMapper.selectBmsCustomerByCustomerId(customerId); + if (customer == null) + { + throw new ServiceException("客户不存在或已删除,不可计费开单(客户ID:" + customerId + ")"); + } + if ("1".equals(customer.getIsEnable())) + { + throw new ServiceException("客户【" + customer.getCustomerName() + "】已停用,不可计费开单"); + } + } + private void validateUsageCommand(CreditUsageCommand command) { if (command == null || (command.getCustomerId() == null && !StringUtils.hasText(command.getCustomerCode()))) diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/domain/BmsExchangeRate.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/domain/BmsExchangeRate.java index cfa4ee5d..fdbfca70 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/domain/BmsExchangeRate.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/domain/BmsExchangeRate.java @@ -22,14 +22,15 @@ public class BmsExchangeRate extends BaseEntity /** 系统本位币 */ public static final String BASE_CURRENCY = "CNY"; - /** 汇率类型:即期汇率 */ + /** 汇率类型:即期汇率(当前系统仅启用即期汇率) */ public static final String RATE_TYPE_SPOT = "0"; - /** 汇率类型:月初汇率 */ - public static final String RATE_TYPE_MONTH_BEGIN = "1"; - /** 汇率类型:月末汇率 */ - public static final String RATE_TYPE_MONTH_END = "2"; - /** 汇率类型:固定汇率 */ - public static final String RATE_TYPE_FIXED = "3"; + // 月初/月末/固定汇率暂不启用,先只做即期,后续需要时再恢复: + // /** 汇率类型:月初汇率 */ + // public static final String RATE_TYPE_MONTH_BEGIN = "1"; + // /** 汇率类型:月末汇率 */ + // public static final String RATE_TYPE_MONTH_END = "2"; + // /** 汇率类型:固定汇率 */ + // public static final String RATE_TYPE_FIXED = "3"; /** 汇率ID */ private Long rateId; @@ -42,8 +43,8 @@ public class BmsExchangeRate extends BaseEntity @Excel(name = "目标币种") private String toCurrency; - /** 汇率类型(0即期 1月初 2月末 3固定) */ - @Excel(name = "汇率类型", readConverterExp = "0=即期汇率,1=月初汇率,2=月末汇率,3=固定汇率") + /** 汇率类型(当前仅 0即期;月初/月末/固定暂不启用) */ + @Excel(name = "汇率类型", readConverterExp = "0=即期汇率") private String rateType; /** 汇率值(1源币种=?目标币种) */ diff --git a/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BmsExchangeRateServiceImpl.java b/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BmsExchangeRateServiceImpl.java index f1ec4516..6c473ad0 100644 --- a/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BmsExchangeRateServiceImpl.java +++ b/bms-back/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/BmsExchangeRateServiceImpl.java @@ -31,6 +31,8 @@ public class BmsExchangeRateServiceImpl implements IBmsExchangeRateService @Override public List selectExchangeRateList(BmsExchangeRate exchangeRate) { + // 当前仅启用即期汇率:列表/导出只展示即期配置 + exchangeRate.setRateType(BmsExchangeRate.RATE_TYPE_SPOT); return exchangeRateMapper.selectExchangeRateList(exchangeRate); } @@ -77,7 +79,9 @@ public class BmsExchangeRateServiceImpl implements IBmsExchangeRateService { String from = normalizeCurrency(fromCurrency); String to = normalizeCurrency(toCurrency); - String type = StringUtils.isNotEmpty(rateType) ? rateType : BmsExchangeRate.RATE_TYPE_SPOT; + // 当前系统只启用即期汇率:忽略外部传入的 rateType,统一按即期处理。 + // 后续启用月初/月末/固定汇率时,恢复为:StringUtils.isNotEmpty(rateType) ? rateType : RATE_TYPE_SPOT + String type = BmsExchangeRate.RATE_TYPE_SPOT; Date date = truncateToDay(bizDate != null ? bizDate : DateUtils.getNowDate()); // 同币种 @@ -212,10 +216,8 @@ public class BmsExchangeRateServiceImpl implements IBmsExchangeRateService { rate.setFromCurrency(normalizeCurrency(rate.getFromCurrency())); rate.setToCurrency(normalizeCurrency(rate.getToCurrency())); - if (StringUtils.isEmpty(rate.getRateType())) - { - rate.setRateType(BmsExchangeRate.RATE_TYPE_SPOT); - } + // 当前仅启用即期汇率,新增/编辑统一落即期(月初/月末/固定暂不启用) + rate.setRateType(BmsExchangeRate.RATE_TYPE_SPOT); if (StringUtils.isEmpty(rate.getSource())) { rate.setSource("手工录入"); @@ -273,9 +275,10 @@ public class BmsExchangeRateServiceImpl implements IBmsExchangeRateService { switch (type) { - case BmsExchangeRate.RATE_TYPE_MONTH_BEGIN: return "月初汇率"; - case BmsExchangeRate.RATE_TYPE_MONTH_END: return "月末汇率"; - case BmsExchangeRate.RATE_TYPE_FIXED: return "固定汇率"; + // 月初/月末/固定汇率暂不启用,先只做即期: + // case BmsExchangeRate.RATE_TYPE_MONTH_BEGIN: return "月初汇率"; + // case BmsExchangeRate.RATE_TYPE_MONTH_END: return "月末汇率"; + // case BmsExchangeRate.RATE_TYPE_FIXED: return "固定汇率"; case BmsExchangeRate.RATE_TYPE_SPOT: default: return "即期汇率"; } diff --git a/bms-front/src/views/customersuppliermanagement/customerinfo/customermoney/index.vue b/bms-front/src/views/customersuppliermanagement/customerinfo/customermoney/index.vue index c02d32ef..87b9b0f0 100644 --- a/bms-front/src/views/customersuppliermanagement/customerinfo/customermoney/index.vue +++ b/bms-front/src/views/customersuppliermanagement/customerinfo/customermoney/index.vue @@ -295,13 +295,14 @@ - - - + + + + + + + + @@ -61,11 +56,6 @@ - - - - - @@ -97,11 +87,6 @@ {{ scope.row.toCurrency }} - - -