dos 1 tháng trước cách đây
mục cha
commit
3b2c6fed25

+ 28 - 20
game-business/src/main/java/com/game/business/controller/AppUserCountDividendController.java

@@ -90,7 +90,7 @@ public class AppUserCountDividendController extends BaseController
     @ApiOperation(value = "发放分红", notes = "发放分红")
 //    @Transactional
 
-    public HttpRet<Boolean> send(AppUserDividendSendDto dto)
+    public HttpRet<Boolean> send(AppUserDividendSendDto dto) throws Exception
     {
         String userId = dto.getUserId();
         String dateNo = dto.getDateNum();
@@ -125,32 +125,32 @@ public class AppUserCountDividendController extends BaseController
             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());
+                /*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.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());
+                    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.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.setDiamondCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
                     updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + e.getDiamondCoin());
-                    updateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + 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);
@@ -163,40 +163,48 @@ public class AppUserCountDividendController extends BaseController
                 }
                 if(null != e.getCoin() && e.getCoin()>0){
                     //扣减发放用户
-                    curUser.setCoinCash(curUser.getCoinCash() - MoneyUtils.consumeCash(curUser.getCoin(),curUser.getCoinCash(),e.getCoin()));
+                    /*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());
+                    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.setAfterCoin(curUser.getCoin());
                     curTran.setCurrencyType(TranCurrencyType.Coin.getType());
                     curTran.setRemarks(e.getDateNo() + " 发放团队分红奖励");
                     curTran.setFromUid(curUserId);
                     tranRecordList.add(curTran);
 
-                    updateAppUser.setCoin(appUser.getDiamondCoin() + e.getDiamondCoin());
+//                    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.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);
+                /*appUserService.updateAppUser(updateAppUser);
+                appUserService.updateAppUser(curUpdateAppUser);*/
                 //清除用户缓存
-                redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
+//                redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
                 if(tranRecordList.size() > 0){
-                    tranRecordList.forEach(t->{
-                        finTranRecordService.insertFinTranRecord(t);
-                    });
+                    /*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());

+ 19 - 6
game-business/src/main/java/com/game/business/service/impl/AppUserServiceImpl.java

@@ -1,5 +1,6 @@
 package com.game.business.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
@@ -11,6 +12,7 @@ import java.util.concurrent.TimeUnit;
 import com.game.business.domain.FinTranRecord;
 import com.game.business.service.IFinTranRecordService;
 import com.game.common.annotation.DataSource;
+import com.game.common.core.redis.RedisCache;
 import com.game.common.enums.DataSourceType;
 import com.game.common.utils.DateUtils;
 import com.game.common.utils.MoneyUtils;
@@ -43,6 +45,9 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
     @Autowired
     private IFinTranRecordService finTranRecordService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询app用户
      *
@@ -167,6 +172,7 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
     @DataSource(DataSourceType.SLAVE)
     public int updateUserAmount(FinTranRecord finTranRecord) throws Exception{
         int res = 0;
+        int finRes = 0;
         RLock rLock = redisson.getLock("app_user_amount_".concat(String.valueOf(finTranRecord.getUid())));
         boolean tryLock = false;
         try {
@@ -179,22 +185,24 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
                     if(2 == finTranRecord.getCurrencyType().intValue()){
                         //金币
                         updateAppUser.setCoin(finTranRecord.getCoinChange());
-                        updateAppUser.setCoinCash(MoneyUtils.consumeCash(updateAppUser.getCoin(),updateAppUser.getCoinCash(),finTranRecord.getCoinChange()));
+                        updateAppUser.setCoinCash(MoneyUtils.consumeCash(appUser.getCoin(),appUser.getCoinCash(),finTranRecord.getCoinChange()));
                     }else if(4 == finTranRecord.getCurrencyType().intValue()){
                         //余额
                         updateAppUser.setDiamondCoin(finTranRecord.getDiamondCoinChange());
                         updateAppUser.setDiamondCoinTotal(finTranRecord.getDiamondCoinChange());
-                        updateAppUser.setDiamondCoinCash(MoneyUtils.consumeCash(updateAppUser.getDiamondCoin(),updateAppUser.getDiamondCoinCash(),finTranRecord.getDiamondCoinChange()));
+                        updateAppUser.setDiamondCoinCash(MoneyUtils.consumeCash(appUser.getDiamondCoin(),appUser.getDiamondCoinCash(),finTranRecord.getDiamondCoinChange()));
                     }
                     res = appUserMapper.updateUserMoney(updateAppUser);
                     if(res > 0) {
+                        //清除用户缓存
+                        redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
                         AppUser afterUser = appUserMapper.selectAppUserByUserid(finTranRecord.getUid());
                         if (2 == finTranRecord.getCurrencyType().intValue()) {
-                            finTranRecord.setAfterCoin(afterUser.getCoin() + finTranRecord.getCoinChange());
+                            finTranRecord.setAfterCoin(afterUser.getCoin());
                         } else if (4 == finTranRecord.getCurrencyType().intValue()) {
-                            finTranRecord.setAfterDiamondCoin(afterUser.getDiamondCoin() + finTranRecord.getDiamondCoinChange());
+                            finTranRecord.setAfterDiamondCoin(afterUser.getDiamondCoin());
                         }
-                        res = finTranRecordService.insertFinTranRecord(finTranRecord);
+                        finRes = finTranRecordService.insertFinTranRecord(finTranRecord);
                     }
                 }
             }else{
@@ -203,7 +211,12 @@ public class AppUserServiceImpl extends ServiceImpl<AppUserMapper, AppUser> impl
         } catch (InterruptedException e) {
             log.info("用户{}钱包更新失败:{}",finTranRecord.getUid(),e);
         } finally {
-            if(res < 1){
+            if(finRes < 1){
+                String params = "";
+                if(null != finTranRecord){
+                    params = JSONObject.toJSONString(finTranRecord);
+                }
+                log.info("res:{},finRes:{},更新失败:{}",res,finRes,params);
                 throw new Exception("更新失败");
             }
             rLock.unlock();