dos 2 ヶ月 前
コミット
e92d04f92a

+ 87 - 2
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;
+
     /**
      * 查询用户代理分红列表
      */
@@ -61,10 +83,73 @@ public class AppUserCountDividendController extends BaseController
      */
     @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(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);
+                    });
+                }
+                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());*/
     }
 
 }