Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

kk 2 miesięcy temu
rodzic
commit
af0c8fee6f

+ 90 - 3
game-business/src/main/java/com/game/business/controller/AppUserCountDividendController.java

@@ -1,16 +1,32 @@
 package com.game.business.controller;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 import javax.servlet.http.HttpServletResponse;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.game.business.domain.AppUser;
+import com.game.business.domain.FinTranRecord;
 import com.game.business.dto.AppUserDividendListDto;
 import com.game.business.dto.AppUserDividendSendDto;
+import com.game.business.service.IAppUserService;
+import com.game.business.service.IFinTranRecordService;
+import com.game.common.constant.AppSceneType;
+import com.game.common.constant.finance.FinTranAddedInfo;
+import com.game.common.constant.finance.FinTranType1;
+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.domain.HttpRetPageArr;
 import com.game.common.core.domain.R;
 import com.game.common.utils.SecurityUtils;
+import com.game.common.utils.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.PutMapping;
@@ -44,6 +60,12 @@ public class AppUserCountDividendController extends BaseController
     @Autowired
     private IAppUserCountDividendService appUserCountDividendService;
 
+    @Autowired
+    private IAppUserService appUserService;
+
+    @Autowired
+    private IFinTranRecordService finTranRecordService;
+
     /**
      * 查询用户代理分红列表
      */
@@ -59,12 +81,77 @@ public class AppUserCountDividendController extends BaseController
     /**
      * 发放分红
      */
-    @GetMapping("/send")
+    @PostMapping("/send")
     @ApiOperation(value = "发放分红", notes = "发放分红")
+//    @Transactional
     public HttpRet<Boolean> send(AppUserDividendSendDto dto)
     {
-
-        return appUserCountDividendService.send(dto.getUserId(),dto.getDateNum());
+        String userId = dto.getUserId();
+        String dateNo = dto.getDateNum();
+        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("发放失败,不存在或已发放");
+        }
+        //开始发放
+        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(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() + " 团队周分红奖励");
+                    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());
+                    tran.setRemarks(e.getDateNo() + " 团队周分红奖励");
+                    tranRecordList.add(tran);
+                }
+                appUserService.updateAppUser(updateAppUser);
+                if(tranRecordList.size() > 0){
+                    tranRecordList.forEach(t->{
+                        finTranRecordService.insertFinTranRecord(t);
+                    });
+                }
+                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());*/
     }
 
 }

+ 5 - 0
game-business/src/main/java/com/game/business/domain/AppUserCount.java

@@ -45,6 +45,11 @@ public class AppUserCount {
     @ApiModelProperty(value = "充值手续费")
     private double rechargeCommission;
 
+    @Excel(name = "充值赠送(余额)")
+    @TableField(value = "recharge_give")
+    @ApiModelProperty(value = "充值赠送(余额)")
+    private double rechargeGive;
+
     @Excel(name = "提现金额")
     @TableField(value = "withdrawal_amount")
     @ApiModelProperty(value = "提现金额")

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

@@ -1,6 +1,7 @@
 package com.game.business.task;
 
 import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.game.business.domain.*;
 import com.game.business.service.*;
@@ -90,6 +91,12 @@ public class AppUserCountTask {
                     appUserCount.setWithdrawalAmount(appUsersCashrecords.stream().filter(e -> e.getUid().equals(appUser.getUserid())).mapToDouble(e -> e.getMoney().doubleValue()).sum());
                     //充值服务费/手续费
                     appUserCount.setRechargeCommission(appUsersChargeList.stream().filter(e -> e.getUid().equals(appUser.getUserid())).mapToDouble(e -> e.getPlatformService()).sum());
+                    //充值赠送余额
+                    appUserCount.setRechargeGive(finTranRecordList.stream().filter(e -> {
+                        return e.getUid().equals(appUser.getUserid()) &&
+                                e.getTranType1().intValue() == FinTranType1.U_Income_Coin_Balance.getType() &&
+                                e.getTranType3().intValue() == FinTranType3.CHARGE_IN_REWARD.getType();
+                    }).mapToDouble(e->e.getCoinChange()).sum());
                     //提现服务费/手续费
                     appUserCount.setWithdrawalCommission(appUsersCashrecords.stream().filter(e -> e.getUid().equals(appUser.getUserid())).mapToDouble(e -> e.getService().doubleValue()).sum());
                     //直播消费金额
@@ -111,7 +118,7 @@ public class AppUserCountTask {
                             e.getBettingAmount()
                     ).sum());
                     //游戏赢
-                    appUserCount.setGameLoseAmount(gameBettingList.stream().filter(
+                    appUserCount.setGameWinAmount(gameBettingList.stream().filter(
                             e -> e.getUserId().equals(appUser.getUserid()) && e.getIsWinning().intValue() == 1
                     ).mapToDouble(e ->
                             e.getBettingAmount() * e.getBettingMultiple()
@@ -193,9 +200,12 @@ public class AppUserCountTask {
                         double gameCommission = appUserCountList.stream().mapToDouble(e -> e.getGameCommission()).sum();
                         //直播佣金
                         double liveCommission = appUserCountList.stream().mapToDouble(e -> e.getLiveCommission()).sum();
+                        //充值赠送
+                        double rechargeGive = appUserCountList.stream().mapToDouble(e -> e.getRechargeGive()).sum();
 
-                        //计算分红金额
-                        double money = (loseAmount - winAmount) - withdrawalCommission - gameCommission - liveCommission;
+                        //计算分红金额 (输-赢)
+//                        double money = (loseAmount - winAmount) - withdrawalCommission - gameCommission - liveCommission;
+                        double money = (loseAmount - winAmount)  - gameCommission - rechargeGive;
                         if (money > 0) {
                             //金额大于0 满足分红
 
@@ -211,7 +221,7 @@ public class AppUserCountTask {
                                         return;
                                     }
                                     double rate = userAgent.getDividendGuaranteeRate();
-                                    double dividends = money * rate;
+                                    double dividends = money * rate/100;
                                     AppUserCountDividend appUserCountDividend = new AppUserCountDividend();
                                     appUserCountDividend.setUserId(userAgent.getUserId());
                                     appUserCountDividend.setDateNo(DateUtil.format(endTime, "yyyy-MM-dd"));