Parcourir la source

修复统计、增加周分红流水

dos il y a 2 mois
Parent
commit
7c93ffb0a7

+ 44 - 0
game-business/src/main/java/com/game/business/controller/AppUserCountDividendController.java

@@ -23,6 +23,7 @@ import com.game.common.core.domain.HttpRet;
 import com.game.common.core.domain.HttpRetPageArr;
 import com.game.common.core.domain.R;
 import com.game.common.core.redis.RedisCache;
+import com.game.common.utils.MoneyUtils;
 import com.game.common.utils.SecurityUtils;
 import com.game.common.utils.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -88,6 +89,7 @@ public class AppUserCountDividendController extends BaseController
     @PostMapping("/send")
     @ApiOperation(value = "发放分红", notes = "发放分红")
 //    @Transactional
+
     public HttpRet<Boolean> send(AppUserDividendSendDto dto)
     {
         String userId = dto.getUserId();
@@ -107,6 +109,13 @@ public class AppUserCountDividendController extends BaseController
         if(null == dividendList || dividendList.size() < 1){
             return HttpRet.fail("发放失败,不存在或已发放");
         }
+        AppUser curUser = appUserService.selectAppUserByUserid(Long.parseLong(userId));
+        if(curUser.getDiamondCoin() < dividendList.stream().mapToDouble(e->e.getDiamondCoin()).sum()){
+            return HttpRet.fail("发放失败,余额不足");
+        }
+        if(curUser.getCoin() < dividendList.stream().mapToDouble(e->e.getCoin()).sum()){
+            return HttpRet.fail("发放失败,金币不足");
+        }
         //开始发放
         List<Long> ids = dividendList.stream().map(AppUserCountDividend::getUserId).collect(Collectors.toList());
         List<AppUser> userList = appUserService.selectListByIds(ids);
@@ -116,8 +125,27 @@ public class AppUserCountDividendController extends BaseController
                 List<FinTranRecord> tranRecordList = new ArrayList<>();
                 AppUser appUser = userMap.get(String.valueOf(e.getUserId()));
                 AppUser updateAppUser = new AppUser();
+                AppUser curUpdateAppUser = new AppUser();//当前用户
                 updateAppUser.setUserid(appUser.getUserid());
                 if(null != e.getDiamondCoin() && e.getDiamondCoin()>0){
+                    //扣减发放用户
+                    curUser.setDiamondCoinCash(curUser.getDiamondCoinCash() - MoneyUtils.consumeCash(curUser.getDiamondCoin(),curUser.getDiamondCoinCash(),e.getDiamondCoin()));
+                    curUser.setDiamondCoin(curUser.getDiamondCoin() - e.getDiamondCoin());
+                    curUser.setDiamondCoinTotal(curUser.getDiamondCoinTotal() - e.getDiamondCoin());
+                    curUpdateAppUser.setUserid(curUser.getUserid());
+                    curUpdateAppUser.setDiamondCoinCash(curUser.getDiamondCoinCash());
+                    curUpdateAppUser.setDiamondCoin(curUser.getDiamondCoin());
+                    curUpdateAppUser.setDiamondCoinTotal(curUser.getDiamondCoinTotal());
+                    //发放用户扣减流水
+                    FinTranAddedInfo curAddedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+                    FinTranRecord curTran = FinTranRecord.initFinTranRecordSomeParams(curAddedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.U_Outcome_Balance, curUser);
+                    curTran.setDiamondCoinChange(e.getDiamondCoin() * -1);
+                    curTran.setAfterDiamondCoin(curUser.getDiamondCoin());
+                    curTran.setCurrencyType(TranCurrencyType.Balance.getType());
+                    curTran.setRemarks(e.getDateNo() + " 发放团队分红奖励");
+                    tranRecordList.add(curTran);
+
+                    //受益用户
                     updateAppUser.setDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
                     updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + e.getDiamondCoin());
                     updateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + e.getDiamondCoin());
@@ -131,6 +159,21 @@ public class AppUserCountDividendController extends BaseController
                     tranRecordList.add(tran);
                 }
                 if(null != e.getCoin() && e.getCoin()>0){
+                    //扣减发放用户
+                    curUser.setCoinCash(curUser.getCoinCash() - MoneyUtils.consumeCash(curUser.getCoin(),curUser.getCoinCash(),e.getCoin()));
+                    curUser.setCoin(curUser.getCoin() - e.getCoin());
+                    curUpdateAppUser.setUserid(curUser.getUserid());
+                    curUpdateAppUser.setCoinCash(curUser.getCoinCash());
+                    curUpdateAppUser.setCoin(curUser.getCoin());
+                    //发放用户扣减流水
+                    FinTranAddedInfo curAddedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+                    FinTranRecord curTran = FinTranRecord.initFinTranRecordSomeParams(curAddedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.U_Outcome_Coin, curUser);
+                    curTran.setDiamondCoinChange(e.getDiamondCoin() * -1);
+                    curTran.setAfterCoin(curUser.getCoin());
+                    curTran.setCurrencyType(TranCurrencyType.Coin.getType());
+                    curTran.setRemarks(e.getDateNo() + " 发放团队分红奖励");
+                    tranRecordList.add(curTran);
+
                     updateAppUser.setCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
                     //流水 余额
                     FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
@@ -142,6 +185,7 @@ public class AppUserCountDividendController extends BaseController
                     tranRecordList.add(tran);
                 }
                 appUserService.updateAppUser(updateAppUser);
+                appUserService.updateAppUser(curUpdateAppUser);
                 //清除用户缓存
                 redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
                 if(tranRecordList.size() > 0){

+ 2 - 0
game-business/src/main/java/com/game/business/service/impl/AppUserCountServiceImpl.java

@@ -15,6 +15,7 @@ import com.game.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.function.Function;
@@ -58,6 +59,7 @@ public class AppUserCountServiceImpl extends ServiceImpl<AppUserCountMapper, App
 
     @Override
 //    @Async
+    @Transactional
     public void createAppUserCount(AppUserCount appUserCount) {
         //查询当前用户当日是否已经生成记录
         LambdaQueryWrapper<AppUserCount> queryWrapper = new LambdaQueryWrapper<>();

+ 5 - 4
game-business/src/main/java/com/game/business/task/AppUserCountTask.java

@@ -169,6 +169,7 @@ public class AppUserCountTask {
     public void statisticsLive(){
         log.info("开始统计用户每日直播、游戏、佣金");
         try {
+            Long userId = null;
             Date curDate = new Date();
             String dateTime = DateUtil.format(curDate, "yyyy-MM-dd");
             Date lastDate = appUserCountService.selectLastDate();
@@ -180,10 +181,10 @@ public class AppUserCountTask {
             AppUser queryUser = new AppUser();
             queryUser.setAgentFlag(1);
             List<AppUser> list = appUserService.selectAppUserList(queryUser);//查询所有代理用户
-            List<AppUsersCharge> appUsersChargeList = appUsersChargeService.getChargeList(null, lastDateStr, endTimeStr);
-            List<AppUsersCashrecord> appUsersCashrecords = appUsersCashrecordService.getUserCashList(null, lastDateStr, endTimeStr);
-            List<FinTranRecord> finTranRecordList = finTranRecordService.getUserRecordList(null, lastDateStr, endTimeStr);
-            List<AppUserLiveDividedRecord> liveDividedRecordList = appUserLiveDividedRecordService.selectByDate(null, lastDateStr, endTimeStr);
+            List<AppUsersCharge> appUsersChargeList = appUsersChargeService.getChargeList(userId, lastDateStr, endTimeStr);
+            List<AppUsersCashrecord> appUsersCashrecords = appUsersCashrecordService.getUserCashList(userId, lastDateStr, endTimeStr);
+            List<FinTranRecord> finTranRecordList = finTranRecordService.getUserRecordList(String.valueOf(userId), lastDateStr, endTimeStr);
+            List<AppUserLiveDividedRecord> liveDividedRecordList = appUserLiveDividedRecordService.selectByDate(userId, lastDateStr, endTimeStr);
             if (null != list && list.size() > 0) {
                 List<AppUserCount> appUserCountList = new ArrayList<>();
                 String finalDateTime = dateTime;

+ 51 - 0
game-common/src/main/java/com/game/common/utils/MoneyUtils.java

@@ -0,0 +1,51 @@
+package com.game.common.utils;
+
+
+import cn.hutool.core.util.NumberUtil;
+
+public class MoneyUtils {
+
+    /**
+     * 金额转换  (正数转负数,负数转正数)
+     * @param coin
+     * @return
+     */
+    public static double getConsumeCoin(double coin) {
+        return NumberUtil.mul(coin, -1);
+    }
+
+    /**
+     * 百分数 转换成 小数  保留两位小数
+     *
+     * @param perc
+     * @return
+     */
+    public static double parsePerc2(double perc) {
+        return NumberUtil.div(perc, 100, 2);
+    }
+    
+    public static double parsePerc4(double perc) {
+        return NumberUtil.div(perc, 100, 4);
+    }
+
+    /**
+     * 计算需要扣除多少提现金额
+     * */
+    public static double consumeCash(double coin,double coinCash,double consumeUserCoin) {
+        if(coinCash < 1){
+            return 0;
+        }
+        boolean flag = false;
+        if(consumeUserCoin < 0){
+            consumeUserCoin = consumeUserCoin * -1; //转为为正数
+            flag = true;
+        }
+        if(coin - coinCash == 0){
+            return consumeUserCoin;
+        }else if(coinCash < consumeUserCoin){
+            return coinCash; //提现余额不足抵扣 则全扣除
+        }
+        double res = consumeUserCoin - (coinCash - coin);
+        return flag?res*-1:res;
+    }
+}