Explorar el Código

fix: 消费服务
1.原始消费记录对账改为串行处理,解决同一人多次并行补扣时会查询余额成相同值

luoyb hace 9 meses
padre
commit
a76bf96960

+ 15 - 5
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/ConsumeBusiness.java

@@ -21,6 +21,7 @@ import org.dromara.common.core.enums.SystemUseTypeEnum;
 import org.dromara.common.core.exception.consume.ConsumeException;
 import org.dromara.common.core.utils.SpringUtils;
 import org.dromara.common.json.utils.JsonUtils;
+import org.dromara.server.common.constant.ConsumeConstants;
 import org.dromara.server.common.domain.consume.bo.ConsumptionBo;
 import org.dromara.server.consume.check.AllowConsumeValidationContext;
 import org.dromara.server.consume.check.CommonCheck;
@@ -54,6 +55,7 @@ public class ConsumeBusiness {
     private final ConsumeRequestCheck requestCheck;
     private final ConsumeUploadCheck uploadCheck;
     private final BaseBusiness baseBusiness;
+    private final TermBusiness termBusiness;
 
     /**
      * 请求消费
@@ -286,9 +288,17 @@ public class ConsumeBusiness {
                 ApiErrorTypeConstants.NOT_FOUND,
                 "没有待入账的原始消费记录"));
         }
-
-        // 2. 并行处理记录
-        ReconciliationResult result = processRecordsInParallel(records);
+        //过滤海康设备不进行对账
+        List<ConsumptionBo> needList = new ArrayList<>();
+        records.forEach(record -> {
+            XfTermVo termVo = termBusiness.getTermFromCache(record.getTermNo().toString(), ConsumeConstants.TERM_NO);
+            if (ObjectUtil.isNotEmpty(termVo) && !termVo.getBrand().equals("hk")) {
+                needList.add(record);
+            }
+        });
+         // 2. 并行处理记录
+        //ReconciliationResult result = processRecordsInParallel(records);
+        ReconciliationResult result = processRecordsInParallel(needList);
 
         // 3. 记录处理结果
         result.getMessages().forEach(log::info);
@@ -309,8 +319,8 @@ public class ConsumeBusiness {
     private ReconciliationResult processRecordsInParallel(List<ConsumptionBo> records) {
         ReconciliationResult result = new ReconciliationResult();
 
-        // 使用并行流处理
-        records.parallelStream().forEach(record -> {
+        // 循环处理
+        records.forEach(record -> {
             try {
                 R<ErrorInfo> response = postOrder(record, "", "");