Pārlūkot izejas kodu

@
fix: 本地UUID作quotaId查询键,adjust仅支付宝侧真实ID才同步

- InstitutionService: 保留UUID生成,本地额度记录可用quota_id定位
- QuotaService.adjust: quota_id以"20"开头的支付宝侧ID才调API同步,
本地UUID仅更新DB
@

alphaH 9 stundas atpakaļ
vecāks
revīzija
fcd6d60301

+ 2 - 0
java/src/main/java/com/payment/platform/module/payment/expense/institution/service/InstitutionService.java

@@ -1516,6 +1516,7 @@ public class InstitutionService {
             }
 
             QuotaEntity quota = new QuotaEntity();
+            quota.setQuotaId(java.util.UUID.randomUUID().toString().replace("-", ""));
             quota.setEmployeeId(empId);
             quota.setInstitutionId(institutionId);
             quota.setQuotaType("period".equals(grantMode) ? "CAP" : null);
@@ -1613,6 +1614,7 @@ public class InstitutionService {
                 }
 
                 QuotaEntity quota = new QuotaEntity();
+                quota.setQuotaId(java.util.UUID.randomUUID().toString().replace("-", ""));
                 quota.setEmployeeId(empId);
                 quota.setInstitutionId(institutionId);
                 quota.setOutBizNo("inst_" + institutionId + "_" + empId);

+ 5 - 1
java/src/main/java/com/payment/platform/module/payment/expense/quota/service/QuotaService.java

@@ -250,7 +250,9 @@ public class QuotaService {
         }
 
         // 5. 调支付宝 alipay.ebpp.invoice.expensecontrol.quota.modify (ADD/DEDUCT)
-        if (diff.compareTo(BigDecimal.ZERO) != 0) {
+        //    仅当 quota_id 是支付宝侧真实 ID(以"20"开头的时间戳格式)时才同步
+        boolean isAlipayQuotaId = quotaId != null && quotaId.matches("^20\\d{26,}$");
+        if (diff.compareTo(BigDecimal.ZERO) != 0 && isAlipayQuotaId) {
             try {
                 AlipayEbppInvoiceExpensecontrolQuotaModifyModel model =
                         new AlipayEbppInvoiceExpensecontrolQuotaModifyModel();
@@ -283,6 +285,8 @@ public class QuotaService {
                 log.error("支付宝额度调整异常", e);
                 throw new BusinessException(500, "支付宝额度调整异常: " + e.getMessage());
             }
+        } else if (diff.compareTo(BigDecimal.ZERO) != 0) {
+            log.info("本地额度调整(无支付宝quota_id,仅更新本地): quotaId={}, diff={}", quotaId, diff);
         }
 
         // 6. 更新本地额度记录(同时更新 totalAmount 和 availableAmount)