Browse Source

fix: 消费服务
1.当消费金额为0时,不对钱包余额进行操作

luo.yibo@datuai.com 1 năm trước cách đây
mục cha
commit
24a797e0e0

+ 42 - 29
ruoyi-server/ruoyi-server-consume/src/main/java/org/dromara/server/consume/business/BaseBusiness.java

@@ -37,6 +37,7 @@ import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -138,7 +139,7 @@ public class BaseBusiness {
         List<XfConsumeDetailVo> detailVos = new ArrayList<>();
 
         for (PtBagVo bagVo : bagVos) {
-            log.info("钱包代码:{},钱包余额:{},消费金额:{}", bagVo.getBagCode(), bagVo.getBalance(), bo.getConsumeMoney());
+            log.info("扣费钱包代码:{},钱包余额:{},消费金额:{}", bagVo.getBagCode(), bagVo.getBalance(), bo.getConsumeMoney());
             XfConsumeDetailVo vo = createConsumeRecord(bo, userAccountVo, cardVo, bagVo, termVo, mealTypeVo, remark);
             // 多钱包扣费时,只要有一个钱包入消费明细表失败,则都失败
             if (ObjUtil.isEmpty(vo)) {
@@ -167,7 +168,7 @@ public class BaseBusiness {
 
         // 5.发送一条消费记录到kafka(教务就餐打卡)
         if (ObjectUtil.equals(defaultConfig.getLocationFlag(), DefaultConstants.LOCAL_FLAG)) {
-            this.sendConsumeToKafka(detailVos,userAccountVo);
+            this.sendConsumeToKafka(detailVos, userAccountVo);
         }
         return R.ok();
     }
@@ -212,7 +213,7 @@ public class BaseBusiness {
         CreditTypeEnum creditType = CreditTypeEnum.fromCode(bo.getCreditType());
         if (creditType != null) {
             switch (creditType) {
-                case TERM_CONSUME,HAND_CONSUME:
+                case TERM_CONSUME, HAND_CONSUME:
                     termTotalBo.setMealCount(1L);
                     termTotalBo.setMealAmount(bo.getConsumeMoney());
                     break;
@@ -235,30 +236,36 @@ public class BaseBusiness {
     public boolean updateBagBalance(List<PtBagVo> bagVos) {
         AtomicReference<Boolean> result = new AtomicReference<>();
         bagVos.parallelStream().forEach(bagVo -> {
-            PtBagBo bagBo = new PtBagBo();
-            bagBo.setUserId(bagVo.getUserId());
-            bagBo.setBagId(bagVo.getBagId());
-            bagBo.setBagCode(bagVo.getBagCode());
-            bagBo.setReceiptMoney(bagVo.getReceiptMoney());
-            bagBo.setOperationMode(BalanceUpdateEnum.CONSUME);
-            PtBagVo vo = bagService.updateBalanceByBo(bagBo);
-            // 多钱包更新余额时,只要有一个钱包更新余额失败,则都失败
-            if (ObjUtil.isEmpty(vo)) {
-                result.set(false);
+            if (bagVo.getReceiptMoney().compareTo(BigDecimal.ZERO) == 0) {
+                // 如果操作金额为0,不操作钱包余额
+                result.set(true);
+            } else {
+                PtBagBo bagBo = new PtBagBo();
+                bagBo.setUserId(bagVo.getUserId());
+                bagBo.setBagId(bagVo.getBagId());
+                bagBo.setBagCode(bagVo.getBagCode());
+                bagBo.setReceiptMoney(bagVo.getReceiptMoney());
+                bagBo.setOperationMode(BalanceUpdateEnum.CONSUME);
+                PtBagVo vo = bagService.updateBalanceByBo(bagBo);
+                // 多钱包更新余额时,只要有一个钱包更新余额失败,则都失败
+                if (ObjUtil.isEmpty(vo)) {
+                    result.set(false);
+                }
+                result.set(true);
             }
-            result.set(true);
         });
         return result.get();
     }
 
     /**
      * 请求云端消费业务的kafka消息推送
+     *
      * @param bo 请求消费数据
      */
     @Async
-    public void sendCloudConsume(ConsumptionBo bo){
+    public void sendCloudConsume(ConsumptionBo bo) {
         kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.TO_CLOUD_TOPIC, EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
-        //kafkaNormalProducer.sendKafkaMessage("test", EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
+        // kafkaNormalProducer.sendKafkaMessage("test", EventTypeConstants.CONSUME, EventSenderEnum.CONSUME.code(), bo);
     }
 
     /**
@@ -290,7 +297,7 @@ public class BaseBusiness {
             consumeDetailBo.setConsumeDate(bo.getConsumeDate());
             consumeDetailBo.setConsumeMoney(bo.getConsumeMoney());
             consumeDetailBo.setConsumeBalance(bo.getBalance());
-            //consumeDetailBo.setCardValue(bagVo.getBalance());
+            // consumeDetailBo.setCardValue(bagVo.getBalance());
             // 设置卡片信息
             consumeDetailBo.setCardNo(cardVo.getCardNo());
             consumeDetailBo.setFactoryId(cardVo.getFactoryId());
@@ -317,51 +324,56 @@ public class BaseBusiness {
             consumeDetailBo.setTenantId(bo.getTenantId());
 
             return consumeDetailService.createConsumeDetailRecord(consumeDetailBo);
-        } catch (Exception ex){
-            log.error("消费明细入库错误",ex);
+        } catch (Exception ex) {
+            log.error("消费明细入库错误", ex);
             return null;
         }
     }
 
     /**
      * 查询指定日期的消费对账记录
+     *
      * @param consumeDate 消费日期
      * @return 消费记录
      */
-    public List<ConsumptionBo> selectOriginalReconciliation(Date consumeDate){
+    public List<ConsumptionBo> selectOriginalReconciliation(Date consumeDate) {
         return TenantHelper.ignore(() -> originalService.selectReconciliationData(consumeDate));
     }
 
     /**
      * 查询注册信息,用来检查客户的公钥和么钥
      */
-    public void getRegisterInfo(){
-        if (ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PUB_KEY)) || ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PRI_KEY))) {
+    public void getRegisterInfo() {
+        if (ObjectUtil.isEmpty(RedisUtils.getCacheObject(CacheNames.CUSTOM_PUB_KEY)) || ObjectUtil.isEmpty(
+            RedisUtils.getCacheObject(CacheNames.CUSTOM_PRI_KEY))) {
             remoteRegisterInfoService.queryRegisterInfo();
         }
     }
 
     /**
      * 根据消费记录的状态标志获取
+     *
      * @param statusFlag 状态标志
-     *         1,4--消费机消费=25000
-     *         3-消费补扣=25020
-     *         0-错扣补款=25010
+     *                   1,4--消费机消费=25000
+     *                   3-消费补扣=25020
+     *                   0-错扣补款=25010
      * @return 根据状态转换的消费类型
      */
-    public Integer getCreditType(Integer statusFlag){
+    public Integer getCreditType(Integer statusFlag) {
         return switch (statusFlag) {
             case 0 -> CreditTypeEnum.ERROR_FILL.code();
             case 3 -> CreditTypeEnum.HAND_CONSUME.code();
             default -> CreditTypeEnum.TERM_CONSUME.code();
         };
     }
+
     /**
      * 将消费信息发送到kafka,教务消费此消息实现就餐打卡
+     *
      * @param consumeList 消费记录列表
-     * @param accountVo 消费人员信息
+     * @param accountVo   消费人员信息
      */
-    private void sendConsumeToKafka(List<XfConsumeDetailVo> consumeList,RemoteUserAccountVo accountVo){
+    private void sendConsumeToKafka(List<XfConsumeDetailVo> consumeList, RemoteUserAccountVo accountVo) {
         for (XfConsumeDetailVo vo : consumeList) {
             YcPushConsumeInfoVo ycSendConsumeInfo = new YcPushConsumeInfoVo();
             ycSendConsumeInfo.setRecordId(vo.getRecordId().toString());
@@ -387,7 +399,8 @@ public class BaseBusiness {
             ycSendConsumeInfo.setTermRecordID(vo.getTermRecordId());
             ycSendConsumeInfo.setPosRecordState(vo.getRecordStatus().intValue());
 
-            kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.OLD_SYNC_TOPIC, EventTypeConstants.CONSUME_RECORD, EventSenderEnum.OLD.code(), ycSendConsumeInfo);
+            kafkaNormalProducer.sendKafkaMessage(KafkaTopicConstants.OLD_SYNC_TOPIC, EventTypeConstants.CONSUME_RECORD, EventSenderEnum.OLD.code(),
+                                                 ycSendConsumeInfo);
         }
     }
 }