소스 검색

Merge remote-tracking branch 'origin/master'

kk 1 개월 전
부모
커밋
bc1bee7138

+ 5 - 119
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.exception.ServiceException;
 import com.game.common.utils.MoneyUtils;
 import com.game.common.utils.SecurityUtils;
 import com.game.common.utils.StringUtils;
@@ -79,7 +80,7 @@ public class AppUserCountDividendController extends BaseController
     public HttpRetPageArr<AppUserCountDividend> list(AppUserDividendListDto dto)
     {
         startPage();
-        List<AppUserCountDividend> list = appUserCountDividendService.selectUserDividendList(SecurityUtils.getUserId());
+        List<AppUserCountDividend> list = appUserCountDividendService.selectUserDividendList(SecurityUtils.getUserId(),null,null);
         return HttpRetPageArr.success("查询成功", getDataTable(list));
     }
 
@@ -95,126 +96,11 @@ public class AppUserCountDividendController extends BaseController
         String userId = dto.getUserId();
         String dateNo = dto.getDateNum();
         Long curUserId = SecurityUtils.getUserId();
-        if(null == userId && StringUtils.isBlank(dateNo)){
+        /*if(null == userId && StringUtils.isBlank(dateNo)){
             return HttpRet.fail("发放失败,参数为空");
-        }
-        LambdaQueryWrapper<AppUserCountDividend> queryWrapper = new LambdaQueryWrapper<>();
-        if(StringUtils.isNotBlank(dateNo)){
-            queryWrapper.eq(AppUserCountDividend::getDateNo,dateNo);
-        }
-        if(null != userId){
-            queryWrapper.eq(AppUserCountDividend::getUserId,userId);
-        }
-        queryWrapper.eq(AppUserCountDividend::getStatus,0);
-        List<AppUserCountDividend> dividendList = appUserCountDividendService.list(queryWrapper);
-        if(null == dividendList || dividendList.size() < 1){
-            return HttpRet.fail("发放失败,不存在或已发放");
-        }
-        AppUser curUser = appUserService.selectAppUserByUserid(curUserId);
-        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);
-        if(null != userList && userList.size()>0) {
-            Map<String, AppUser> userMap = userList.stream().collect(Collectors.toMap(e -> String.valueOf(e.getUserid()), Function.identity(), (k1, k2) -> k2));
-            dividendList.forEach(e->{
-                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() + " 发放团队分红奖励");
-                    curTran.setFromUid(curUserId);
-                    tranRecordList.add(curTran);
+        }*/
 
-                    //受益用户
-                    /*updateAppUser.setDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + e.getDiamondCoin());
-                    updateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + e.getDiamondCoin());*/
-                    //流水 余额
-                    FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
-                    FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Diamond_Coin, appUser);
-                    tran.setDiamondCoinChange(e.getDiamondCoin());
-                    tran.setAfterDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    tran.setCurrencyType(TranCurrencyType.Balance.getType());
-                    tran.setRemarks(e.getDateNo() + " 团队周分红奖励");
-                    tran.setFromUid(curUserId);
-                    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() + " 发放团队分红奖励");
-                    curTran.setFromUid(curUserId);
-                    tranRecordList.add(curTran);
-
-//                    updateAppUser.setCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    //流水 余额
-                    FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
-                    FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Coin, appUser);
-                    tran.setDiamondCoinChange(e.getDiamondCoin());
-//                    tran.setAfterDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    tran.setCurrencyType(TranCurrencyType.Coin.getType());
-                    tran.setRemarks(e.getDateNo() + " 团队周分红奖励");
-                    tran.setFromUid(curUserId);
-                    tranRecordList.add(tran);
-                }
-                /*appUserService.updateAppUser(updateAppUser);
-                appUserService.updateAppUser(curUpdateAppUser);*/
-                //清除用户缓存
-//                redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
-                if(tranRecordList.size() > 0){
-                    /*tranRecordList.forEach(t->{
-//                        finTranRecordService.insertFinTranRecord(t);
-                        appUserService.updateUserAmount(t);
-                    });*/
-                    for(FinTranRecord finTranRecord :tranRecordList){
-                        try {
-                            appUserService.updateUserAmount(finTranRecord);
-                        } catch (Exception ex) {
-                            throw new RuntimeException(ex);
-                        }
-                    }
-                }
-                AppUserCountDividend userCountDividend = new AppUserCountDividend();
-                userCountDividend.setId(e.getId());
-                userCountDividend.setStatus(1);
-                appUserCountDividendService.updateAppUserCountDividend(userCountDividend);
-            });
-        }
-        return HttpRet.success("发放成功",true);
-        /*
-        return appUserCountDividendService.send(dto.getUserId(),dto.getDateNum());*/
+        return appUserCountDividendService.send(userId,dateNo,curUserId);
     }
 
 }

+ 1 - 1
game-business/src/main/java/com/game/business/mapper/AppUserCountDividendMapper.java

@@ -64,5 +64,5 @@ public interface AppUserCountDividendMapper extends BaseMapper<AppUserCountDivid
      * 查询用户团队分红列表
      *
      * */
-    public List<AppUserCountDividend> selectUserDividendList(@Param("pid") Long pid);
+    public List<AppUserCountDividend> selectUserDividendList(@Param("pid") Long pid,@Param("userId") Long userId,@Param("dateNum")String dateNum);
 }

+ 3 - 2
game-business/src/main/java/com/game/business/service/IAppUserCountDividendService.java

@@ -63,15 +63,16 @@ public interface IAppUserCountDividendService extends IService<AppUserCountDivid
     /**
      * 查询团队分红
      * */
-    public List<AppUserCountDividend> selectUserDividendList(Long userId);
+    public List<AppUserCountDividend> selectUserDividendList(Long pid,Long userId,String dateNum);
 
     /**
      * 发放分红
      * */
-    public HttpRet<Boolean> send(String userId,String dateNo);
+    public HttpRet<Boolean> send(String userId,String dateNo,Long sendUserId);
 
     /**
      * 重载团队盈亏缓存
      * */
     public void reloadCache(String dateTime,List<Long> userIds);
+
 }

+ 41 - 39
game-business/src/main/java/com/game/business/service/impl/AppUserAgentServiceImpl.java

@@ -224,45 +224,47 @@ public class AppUserAgentServiceImpl extends ServiceImpl<AppUserAgentMapper, App
                             return gameCommission;
                         }).collect(Collectors.toList()));
                     }
-                    //统计整条线用户数据
-                    /*List<AppUserCount> appUserCountList = appUserCountService.getAppUserCountNew(e.getUserId(), teamDto.getBeginTime(),teamDto.getEndTime());
-                    if(null != appUserCountList && appUserCountList.size() > 0) {
-                        DecimalFormat df = new DecimalFormat("#.##");
-                        //下注金额
-                        e.setBettingAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getGameBetting).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //直播返点
-                        e.setLiveCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getLiveCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //游戏返点
-                        e.setGameCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getGameCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //盈亏
-                        e.setGameAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(userCount->{
-                            return ((userCount.getGameWinAmount() - (userCount.getGameBetting() - userCount.getGameLoseAmount()))
-                                    - userCount.getGameLoseAmount()) + userCount.getGameCommission() + userCount.getRechargeGive();
-                        }).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //充值金额(由于统计的金额是扣除了手续费并且加上赠送金额的值 故这么计算出原始充值金额)
-                        e.setRechargeAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(userCount->{
-                            return userCount.getRechargeAmount() - userCount.getRechargeGive() + userCount.getRechargeCommission();
-                        }).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //充值手续费
-                        e.setRechargeCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getRechargeCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                        //充值赠送金额
-                        e.setRechargeGive(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getRechargeGive).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
-                    }else{
-                        //下注金额
-                        e.setBettingAmount(0.00);
-                        //直播返点
-                        e.setLiveCommission(0.00);
-                        //游戏返点
-                        e.setGameCommission(0.00);
-                        //盈亏
-                        e.setGameAmount(0.00);
-                        //充值金额(由于统计的金额是扣除了手续费并且加上赠送金额的值 故这么计算出原始充值金额)
-                        e.setRechargeAmount(0.00);
-                        //充值手续费
-                        e.setRechargeCommission(0.00);
-                        //充值赠送金额
-                        e.setRechargeGive(0.00);
-                    }*/
+                    if(!teamDto.getPid().equals(e.getUserId())) {
+                        //非当前用户则统计整条线用户数据
+                        List<AppUserCount> appUserCountList = appUserCountService.getAppUserCountNew(e.getUserId(), teamDto.getBeginTime(), teamDto.getEndTime());
+                        if (null != appUserCountList && appUserCountList.size() > 0) {
+                            DecimalFormat df = new DecimalFormat("#.##");
+                            //下注金额
+                            e.setBettingAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getGameBetting).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //直播返点
+                            e.setLiveCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getLiveCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //游戏返点
+                            e.setGameCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getGameCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //盈亏
+                            e.setGameAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(userCount -> {
+                                return ((userCount.getGameWinAmount() - (userCount.getGameBetting() - userCount.getGameLoseAmount()))
+                                        - userCount.getGameLoseAmount()) + userCount.getGameCommission() + userCount.getRechargeGive();
+                            }).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //充值金额(由于统计的金额是扣除了手续费并且加上赠送金额的值 故这么计算出原始充值金额)
+                            e.setRechargeAmount(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(userCount -> {
+                                return userCount.getRechargeAmount() - userCount.getRechargeGive() + userCount.getRechargeCommission();
+                            }).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //充值手续费
+                            e.setRechargeCommission(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getRechargeCommission).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                            //充值赠送金额
+                            e.setRechargeGive(BigDecimal.valueOf(appUserCountList.stream().mapToDouble(AppUserCount::getRechargeGive).sum()).setScale(2, RoundingMode.HALF_UP).doubleValue());
+                        } else {
+                            //下注金额
+                            e.setBettingAmount(0.00);
+                            //直播返点
+                            e.setLiveCommission(0.00);
+                            //游戏返点
+                            e.setGameCommission(0.00);
+                            //盈亏
+                            e.setGameAmount(0.00);
+                            //充值金额(由于统计的金额是扣除了手续费并且加上赠送金额的值 故这么计算出原始充值金额)
+                            e.setRechargeAmount(0.00);
+                            //充值手续费
+                            e.setRechargeCommission(0.00);
+                            //充值赠送金额
+                            e.setRechargeGive(0.00);
+                        }
+                    }
                 });
             }
         }

+ 127 - 53
game-business/src/main/java/com/game/business/service/impl/AppUserCountDividendServiceImpl.java

@@ -1,6 +1,7 @@
 package com.game.business.service.impl;
 
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -22,7 +23,9 @@ import com.game.common.constant.finance.FinTranType3;
 import com.game.common.constant.finance.TranCurrencyType;
 import com.game.common.core.domain.HttpRet;
 import com.game.common.core.redis.RedisCache;
+import com.game.common.exception.ServiceException;
 import com.game.common.utils.DateUtils;
+import com.game.common.utils.SecurityUtils;
 import com.game.common.utils.StringUtils;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -138,8 +141,8 @@ public class AppUserCountDividendServiceImpl extends ServiceImpl<AppUserCountDiv
     }
 
     @Override
-    public List<AppUserCountDividend> selectUserDividendList(Long userId) {
-        List<AppUserCountDividend> dividendList = appUserCountDividendMapper.selectUserDividendList(userId);
+    public List<AppUserCountDividend> selectUserDividendList(Long pid,Long userId,String dateNum) {
+        List<AppUserCountDividend> dividendList = appUserCountDividendMapper.selectUserDividendList(pid,userId,dateNum);
         if(null != dividendList && dividendList.size()>0){
             List<Long> ids = dividendList.stream().map(AppUserCountDividend::getUserId).collect(Collectors.toList());
             List<AppUser> userList = appUserService.selectListByIds(ids);
@@ -157,66 +160,137 @@ public class AppUserCountDividendServiceImpl extends ServiceImpl<AppUserCountDiv
     }
 
     @Override
-    @Transactional
-    public HttpRet<Boolean> send(String userId, String dateNo) {
-        if(null == userId && StringUtils.isBlank(dateNo)){
-            return HttpRet.fail("发放失败,参数为空");
-        }
-        LambdaQueryWrapper<AppUserCountDividend> queryWrapper = new LambdaQueryWrapper<>();
-        if(StringUtils.isNotBlank(dateNo)){
-            queryWrapper.eq(AppUserCountDividend::getDateNo,dateNo);
-        }
-        if(null != userId){
-            queryWrapper.eq(AppUserCountDividend::getUserId,userId);
-        }
-        queryWrapper.eq(AppUserCountDividend::getStatus,0);
-        List<AppUserCountDividend> dividendList = appUserCountDividendMapper.selectList(queryWrapper);
+    public HttpRet<Boolean> send(String userId, String dateNo,Long sendUserId) {
+        List<AppUserCountDividend> dividendList = this.selectUserDividendList(sendUserId, StringUtils.isBlank(userId)?null:Long.parseLong(userId),dateNo);
         if(null == dividendList || dividendList.size() < 1){
             return HttpRet.fail("发放失败,不存在或已发放");
         }
+        /*AppUser curUser = appUserService.selectAppUserByUserid(curUserId);
+        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);
         if(null != userList && userList.size()>0) {
             Map<String, AppUser> userMap = userList.stream().collect(Collectors.toMap(e -> String.valueOf(e.getUserid()), Function.identity(), (k1, k2) -> k2));
-            dividendList.forEach(e->{
-                List<FinTranRecord> tranRecordList = new ArrayList<>();
-                AppUser appUser = userMap.get(String.valueOf(e.getUserId()));
-                AppUser updateAppUser = new AppUser();
-                updateAppUser.setUserid(appUser.getUserid());
-                if(null != e.getDiamondCoin() && e.getDiamondCoin()>0){
-                    updateAppUser.setDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + e.getDiamondCoin());
-                    updateAppUser.setDiamondCoinCash(updateAppUser.getDiamondCoinCash() + e.getDiamondCoin());
-                    //流水 余额
-                    FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
-                    FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Diamond_Coin, appUser);
-                    tran.setDiamondCoinChange(e.getDiamondCoin());
-                    tran.setAfterDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    tran.setCurrencyType(TranCurrencyType.Balance.getType());
-                    tranRecordList.add(tran);
-                }
-                if(null != e.getCoin() && e.getCoin()>0){
-                    updateAppUser.setCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    //流水 余额
-                    FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
-                    FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Coin, appUser);
-                    tran.setDiamondCoinChange(e.getDiamondCoin());
-                    tran.setAfterDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
-                    tran.setCurrencyType(TranCurrencyType.Coin.getType());
-                    tranRecordList.add(tran);
-                }
-                appUserService.updateAppUser(updateAppUser);
-                if(tranRecordList.size() > 0){
-                    tranRecordList.forEach(t->{
-                        finTranRecordService.insertFinTranRecord(t);
-                    });
+            String errMsg = "";
+            for(AppUserCountDividend countDividend : dividendList){
+                Long errUserId = countDividend.getUserId();
+                try {
+                    List<FinTranRecord> tranRecordList = new ArrayList<>();
+                    AppUser appUser = userMap.get(String.valueOf(countDividend.getUserId()));
+                    AppUser curUser = appUserService.selectAppUserByUserid(sendUserId);
+                    if(!sendUserId.equals(appUser.getPid())){
+                        throw new ServiceException("只能给直属团队成员发放");
+                    }
+                    /*AppUser updateAppUser = new AppUser();
+                    AppUser curUpdateAppUser = new AppUser();//当前用户*/
+                    //                updateAppUser.setUserid(appUser.getUserid());
+                    if (null != countDividend.getDiamondCoin() && countDividend.getDiamondCoin() > 0) {
+                        if(null != countDividend.getDiamondCoin() && curUser.getDiamondCoin() < countDividend.getDiamondCoin()){
+                            throw new ServiceException("余额不足");
+                        }
+                        //扣减发放用户
+                        /*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(countDividend.getDiamondCoin() * -1);
+                        //                    curTran.setAfterDiamondCoin(curUser.getDiamondCoin());
+                        curTran.setCurrencyType(TranCurrencyType.Balance.getType());
+                        curTran.setRemarks(countDividend.getDateNo() + " 发放团队分红奖励");
+                        curTran.setFromUid(sendUserId);
+//                        tranRecordList.add(curTran);
+                        appUserService.updateUserAmount(curTran);
+
+                        //受益用户
+                        /*updateAppUser.setDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
+                        updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + e.getDiamondCoin());
+                        updateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + e.getDiamondCoin());*/
+                        //流水 余额
+                        FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+                        FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Diamond_Coin, appUser);
+                        tran.setDiamondCoinChange(countDividend.getDiamondCoin());
+                        tran.setAfterDiamondCoin(appUser.getDiamondCoin() + countDividend.getDiamondCoin());
+                        tran.setCurrencyType(TranCurrencyType.Balance.getType());
+                        tran.setRemarks(countDividend.getDateNo() + " 团队周分红奖励");
+                        tran.setFromUid(sendUserId);
+                        //                    tranRecordList.add(tran);
+                        appUserService.updateUserAmount(tran);
+                    }
+                    if (null != countDividend.getCoin() && countDividend.getCoin() > 0) {
+                        if(null != countDividend.getCoin() && curUser.getCoin() < countDividend.getCoin()){
+                            throw new ServiceException("金币不足");
+                        }
+                        //扣减发放用户
+                        /*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(countDividend.getDiamondCoin() * -1);
+                        //                    curTran.setAfterCoin(curUser.getCoin());
+                        curTran.setCurrencyType(TranCurrencyType.Coin.getType());
+                        curTran.setRemarks(countDividend.getDateNo() + " 发放团队分红奖励");
+                        curTran.setFromUid(sendUserId);
+//                        tranRecordList.add(curTran);
+                        appUserService.updateUserAmount(curTran);
+
+                        //                    updateAppUser.setCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
+                        //流水 余额
+                        FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+                        FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.AGENT_DIVIDED, FinTranType1.Agent_Income_Coin, appUser);
+                        tran.setDiamondCoinChange(countDividend.getDiamondCoin());
+                        //                    tran.setAfterDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
+                        tran.setCurrencyType(TranCurrencyType.Coin.getType());
+                        tran.setRemarks(countDividend.getDateNo() + " 团队周分红奖励");
+                        tran.setFromUid(sendUserId);
+                        appUserService.updateUserAmount(tran);
+                        //                    tranRecordList.add(tran);
+                    }
+                    /*appUserService.updateAppUser(updateAppUser);
+                    appUserService.updateAppUser(curUpdateAppUser);*/
+                    //清除用户缓存
+                    //                redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
+                    /*if(tranRecordList.size() > 0){
+                     *//*tranRecordList.forEach(t->{
+    //                        finTranRecordService.insertFinTranRecord(t);
+                            appUserService.updateUserAmount(t);
+                        });*//*
+                        for(FinTranRecord finTranRecord :tranRecordList){
+                            try {
+                                appUserService.updateUserAmount(finTranRecord);
+                            } catch (Exception ex) {
+                                throw new RuntimeException(ex);
+                            }
+                        }
+                    }*/
+                    AppUserCountDividend userCountDividend = new AppUserCountDividend();
+                    userCountDividend.setId(countDividend.getId());
+                    userCountDividend.setStatus(1);
+                    this.updateAppUserCountDividend(userCountDividend);
+                }catch (Exception ex){
+                    errMsg = "发放失败:" + ex.getMessage();
+                    log.info("{}发放失败:{}",errUserId,ex.getMessage());
+                    break;
                 }
-                AppUserCountDividend userCountDividend = new AppUserCountDividend();
-                userCountDividend.setId(e.getId());
-                userCountDividend.setStatus(1);
-                this.updateAppUserCountDividend(userCountDividend);
-            });
+            }
+            if(StringUtils.isNotBlank(errMsg)){
+                return HttpRet.fail(errMsg);
+            }
         }
         return HttpRet.success("发放成功",true);
     }

+ 19 - 2
game-business/src/main/java/com/game/business/task/AppUserCountTask.java

@@ -9,6 +9,7 @@ import com.game.business.service.*;
 import com.game.common.constant.CacheConstants;
 import com.game.common.constant.finance.FinTranType1;
 import com.game.common.constant.finance.FinTranType3;
+import com.game.common.core.domain.HttpRet;
 import com.game.common.core.redis.RedisCache;
 import com.game.common.entity.KeyValue;
 import com.game.common.utils.DateUtils;
@@ -259,8 +260,21 @@ public class AppUserCountTask {
     public void calculateDividends(String dateTime){
         try {
             log.info("开始每周代理分红");
-            dealDividendsNew(dateTime);
+            String dateNo =  dealDividendsNew(dateTime);
             log.info("每周代理分红完成");
+            log.info("开始给系统用户的直属下级自动发放分红");
+            AppUser queryUser = new AppUser();
+            queryUser.setPid(0L);
+            List<AppUser> list = appUserService.selectAppUserList(queryUser);
+            if(null != list && list.size() > 0){
+                for(AppUser appUser : list){
+                    HttpRet<Boolean> httpRet = appUserCountDividendService.send(null,dateNo,appUser.getUserid());
+                    if(HttpRet.FAIL == httpRet.getCode()){
+                        log.info("{}用户,{}",appUser.getUserid(),httpRet.getMsg());
+                    }
+                }
+            }
+            log.info("系统用户的直属下级自动发放分红完成");
         }catch (Exception e){
             log.info("每周分红失败:{}",e.getMessage());
         }
@@ -352,7 +366,8 @@ public class AppUserCountTask {
     /**
      * 分红
      * */
-    private void dealDividendsNew(String dateTime){
+    private String dealDividendsNew(String dateTime){
+        String resDate = "";
         Date curDate = DateUtil.offsetDay(DateUtils.getNowDate(), -1);
         if (StringUtils.isNotBlank(dateTime)) {
             curDate = DateUtil.parse(dateTime, "yyyy-MM-dd");
@@ -361,6 +376,7 @@ public class AppUserCountTask {
         }
         Date beginTime = DateUtil.beginOfWeek(curDate);
         Date endTime = DateUtil.endOfWeek(curDate);
+        resDate = DateUtil.format(endTime, "yyyy-MM-dd");
         //查询所有总代理用户
         AppUser queryUser = new AppUser();
         queryUser.setAgentFlag(1);
@@ -424,6 +440,7 @@ public class AppUserCountTask {
                 }
             });
         }
+        return resDate;
     }
 
     /**

+ 6 - 0
game-business/src/main/resources/mapper/business/AppUserCountDividendMapper.xml

@@ -101,5 +101,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     <select id="selectUserDividendList" resultMap="AppUserCountDividendResult">
         select a.* from app_user_count_dividend as a inner join app_user_agent as b on a.user_id = b.user_id
         where b.pid = #{pid}
+        <if test="userId != null">
+            and a.user_id = #{userId}
+        </if>
+        <if test="dateNum != null and dateNum != ''">
+            and a.date_no = #{dateNum}
+        </if>
     </select>
 </mapper>

+ 9 - 8
game-common/src/main/java/com/game/common/utils/MoneyUtils.java

@@ -32,20 +32,21 @@ public class MoneyUtils {
      * 计算需要扣除多少提现金额
      * */
     public static double consumeCash(double coin,double coinCash,double consumeUserCoin) {
+        if(consumeUserCoin > 0){
+            return consumeUserCoin; //非扣款则添加
+        }
         if(coinCash < 1){
             return 0;
         }
-        boolean flag = false;
-        if(consumeUserCoin < 0){
-            consumeUserCoin = consumeUserCoin * -1; //转为为正数
-            flag = true;
-        }
+//        if(consumeUserCoin < 0){
+        consumeUserCoin = consumeUserCoin * -1; //转为为正数
+//        }
         if(coin - coinCash == 0){
-            return consumeUserCoin;
+            return consumeUserCoin; //可提现等于总额则同步扣除
         }else if(coinCash < consumeUserCoin){
             return coinCash; //提现余额不足抵扣 则全扣除
         }
-        double res = consumeUserCoin - (coinCash - coin);
-        return flag?res*-1:res;
+        double res = consumeUserCoin - (coin - coinCash);
+        return res*-1; //转回负数
     }
 }