Преглед на файлове

feat: 领红包添加公司余额

xdd преди 4 дни
родител
ревизия
c03b34a3c6
променени са 1 файла, в които са добавени 42 реда и са изтрити 18 реда
  1. 42 18
      fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

+ 42 - 18
fs-service/src/main/java/com/fs/course/service/impl/FsUserCourseVideoServiceImpl.java

@@ -113,13 +113,26 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
     private Boolean isNewWxMerchant;
     private static final Logger logger = LoggerFactory.getLogger(FsUserCourseVideoServiceImpl.class);
 
+    /**
+     * 红包账户锁
+     */
     private static final String REDPACKET_POOL_LOCK = "redpacket_pool_lock";
 
     /**
      * 公司红包金额
      */
     private static final String REDPACKET_COMPANY_MONEY = "redpacket_money";
-    private static final String REDPACKET_COMPANY_MONEY_CHANGE = "redpacket_money_CHANGE";
+
+    /**
+     * 红包改变记录
+     */
+    private static final String REDPACKET_COMPANY_MONEY_CHANGE = "redpacket_money_change";
+
+    /**
+     * 是否开启红包账户扣减
+     */
+    @Value("${enableRedPackAccount:0}")
+    private String ENABLE_RED_PACK_ACCOUNT;
 
     private static final String miniappRealLink = "/pages_course/video.html?course=";
     private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
@@ -1136,17 +1149,23 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
 
     private R sendRedPacketRewardToUser(FsCourseSendRewardUParam param, FsCourseWatchLog log, CourseConfig config, WxSendRedPacketParam packetParam, BigDecimal amount) {
 
-        BigDecimal companyMoney = redisCache.getCacheObject(REDPACKET_COMPANY_MONEY);
-        if(ObjectUtils.isNull(companyMoney)){
-            SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("company.money");
-            String configValue = sysConfig.getConfigValue();
-            companyMoney = new BigDecimal(configValue);
-            logger.info("缓存公司余额为空,从数据库读取 companyMoney: {}",companyMoney);
-        }
+        BigDecimal companyMoney = null;
+        if(StringUtils.equals(ENABLE_RED_PACK_ACCOUNT,"1")) {
+            companyMoney = redisCache.getCacheObject(REDPACKET_COMPANY_MONEY);
+            if(ObjectUtils.isNull(companyMoney)){
+                SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("company.money");
+                if(ObjectUtils.isNull(sysConfig)){
+                    throw new IllegalArgumentException("润天公司账户余额不能为空!请检查配置!");
+                }
+                String configValue = sysConfig.getConfigValue();
+                companyMoney = new BigDecimal(configValue);
+                logger.info("缓存公司余额为空,从数据库读取 companyMoney: {}",companyMoney);
+            }
 
-        if (companyMoney.compareTo(BigDecimal.ZERO) <= 0) {
-            logger.info("润天账户余额: {} 不足!", companyMoney);
-            return R.error("[红包领取] 账户余额不足,请联系管理员!");
+            if (companyMoney.compareTo(BigDecimal.ZERO) <= 0) {
+                logger.info("润天账户余额: {} 不足!", companyMoney);
+                return R.error("[红包领取] 账户余额不足,请联系管理员!");
+            }
         }
 
         // 发送红包
@@ -1173,8 +1192,10 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
             redPacketLog.setAmount(amount);
             redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
             redPacketLog.setPeriodId(param.getPeriodId());
-            redPacketLog.setAccBalanceBefore(companyMoney);
-            redPacketLog.setAccBalanceAfter(companyMoney.subtract(amount));
+            if(StringUtils.equals(ENABLE_RED_PACK_ACCOUNT,"1")) {
+                redPacketLog.setAccBalanceBefore(companyMoney);
+                redPacketLog.setAccBalanceAfter(companyMoney.subtract(amount));
+            }
 
             CompletableFuture.runAsync(() -> {
                 redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
@@ -1183,12 +1204,15 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
                 courseWatchLogMapper.updateFsCourseWatchLog(log);
             });
 
-            // 更新账户余额
-            logger.info("[更新账户余额] 当前余额{} 更新后余额{}",companyMoney.toPlainString(),companyMoney.subtract(amount).toPlainString());
-            redisCache.setCacheList(REDPACKET_COMPANY_MONEY_CHANGE, Arrays.asList(companyMoney,companyMoney.subtract(amount)));
+            if(StringUtils.equals(ENABLE_RED_PACK_ACCOUNT,"1")) {
+                // 更新账户余额
+                logger.info("[更新账户余额] 当前余额{} 更新后余额{}",companyMoney.toPlainString(),companyMoney.subtract(amount).toPlainString());
+
+                redisCache.setCacheList(REDPACKET_COMPANY_MONEY_CHANGE, Arrays.asList(companyMoney,companyMoney.subtract(amount)));
 
-            companyMoney = companyMoney.subtract(amount);
-            redisCache.setCacheObject(REDPACKET_COMPANY_MONEY,companyMoney);
+                companyMoney = companyMoney.subtract(amount);
+                redisCache.setCacheObject(REDPACKET_COMPANY_MONEY,companyMoney);
+            }
             return sendRedPacket;
         } else {
             return R.error("奖励发送失败,请联系客服");