|
@@ -4,6 +4,7 @@ import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.Wrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.fs.common.BeanCopyUtils;
|
|
|
import com.fs.common.core.domain.R;
|
|
@@ -65,6 +66,7 @@ import com.fs.system.mapper.SysDictDataMapper;
|
|
|
import com.fs.system.service.ISysConfigService;
|
|
|
import com.fs.voice.utils.StringUtil;
|
|
|
import com.github.binarywang.wxpay.bean.transfer.TransferBillsResult;
|
|
|
+import com.google.common.collect.Sets;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
import org.apache.commons.lang.exception.ExceptionUtils;
|
|
@@ -88,6 +90,7 @@ import java.time.Instant;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.CompletableFuture;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicLong;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -116,6 +119,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
* 公司红包金额
|
|
|
*/
|
|
|
private static final String REDPACKET_COMPANY_MONEY = "redpacket_money";
|
|
|
+ private static final String REDPACKET_COMPANY_MONEY_CHANGE = "redpacket_money_CHANGE";
|
|
|
|
|
|
private static final String miniappRealLink = "/pages_course/video.html?course=";
|
|
|
private static final String REAL_LINK_PREFIX = "/courseH5/pages/course/learning?course=";
|
|
@@ -1080,8 +1084,7 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
packetParam.setAppId(param.getAppId());
|
|
|
packetParam.setUser(user);
|
|
|
|
|
|
- System.out.println("红包金额"+amount);
|
|
|
- System.out.println("红包商户号"+packetParam);
|
|
|
+ logger.info("红包金额 {},红包商户号 {}",amount,packetParam);
|
|
|
//2025.6.19 红包金额为0的时候
|
|
|
if (amount.compareTo(BigDecimal.ZERO)>0){
|
|
|
|
|
@@ -1132,11 +1135,17 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
}
|
|
|
|
|
|
private R sendRedPacketRewardToUser(FsCourseSendRewardUParam param, FsCourseWatchLog log, CourseConfig config, WxSendRedPacketParam packetParam, BigDecimal amount) {
|
|
|
- SysConfig sysConfig = sysConfigService.selectConfigByConfigKey("company.money");
|
|
|
- String configValue = sysConfig.getConfigValue();
|
|
|
- BigDecimal companyMoney = new BigDecimal(configValue);
|
|
|
+
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
if (companyMoney.compareTo(BigDecimal.ZERO) <= 0) {
|
|
|
- logger.info("润天账户余额: {} 不足!", configValue);
|
|
|
+ logger.info("润天账户余额: {} 不足!", companyMoney);
|
|
|
return R.error("[红包领取] 账户余额不足,请联系管理员!");
|
|
|
}
|
|
|
|
|
@@ -1164,18 +1173,22 @@ public class FsUserCourseVideoServiceImpl implements IFsUserCourseVideoService
|
|
|
redPacketLog.setAmount(amount);
|
|
|
redPacketLog.setWatchLogId(log.getLogId() != null ? log.getLogId() : null);
|
|
|
redPacketLog.setPeriodId(param.getPeriodId());
|
|
|
- redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
|
|
|
+ redPacketLog.setAccBalanceBefore(companyMoney);
|
|
|
+ redPacketLog.setAccBalanceAfter(companyMoney.subtract(amount));
|
|
|
|
|
|
- // 更新观看记录的奖励类型
|
|
|
- log.setRewardType(config.getRewardType());
|
|
|
- courseWatchLogMapper.updateFsCourseWatchLog(log);
|
|
|
+ CompletableFuture.runAsync(() -> {
|
|
|
+ redPacketLogMapper.insertFsCourseRedPacketLog(redPacketLog);
|
|
|
+ // 更新观看记录的奖励类型
|
|
|
+ log.setRewardType(config.getRewardType());
|
|
|
+ courseWatchLogMapper.updateFsCourseWatchLog(log);
|
|
|
+ });
|
|
|
|
|
|
// 更新账户余额
|
|
|
logger.info("[更新账户余额] 当前余额{} 更新后余额{}",companyMoney.toPlainString(),companyMoney.subtract(amount).toPlainString());
|
|
|
- companyMoney = companyMoney.subtract(amount);
|
|
|
- sysConfig.setConfigValue(companyMoney.setScale(4,RoundingMode.HALF_UP).toPlainString());
|
|
|
- sysConfigService.updateConfig(sysConfig);
|
|
|
+ redisCache.setCacheList(REDPACKET_COMPANY_MONEY_CHANGE, Arrays.asList(companyMoney,companyMoney.subtract(amount)));
|
|
|
|
|
|
+ companyMoney = companyMoney.subtract(amount);
|
|
|
+ redisCache.setCacheObject(REDPACKET_COMPANY_MONEY,companyMoney);
|
|
|
return sendRedPacket;
|
|
|
} else {
|
|
|
return R.error("奖励发送失败,请联系客服");
|