dos 2 сар өмнө
parent
commit
7f07d87d92
16 өөрчлөгдсөн 482 нэмэгдсэн , 11 устгасан
  1. 132 3
      game-business/src/main/java/com/game/business/controller/AppAgentController.java
  2. 6 0
      game-business/src/main/java/com/game/business/controller/AppUserCountDividendController.java
  3. 2 0
      game-business/src/main/java/com/game/business/domain/FinTranRecord.java
  4. 8 0
      game-business/src/main/java/com/game/business/dto/AppAgentTeamDto.java
  5. 27 0
      game-business/src/main/java/com/game/business/dto/AppUserTeamTranserDto.java
  6. 35 0
      game-business/src/main/java/com/game/business/dto/AppUserTeamTranserRecordDto.java
  7. 6 0
      game-business/src/main/java/com/game/business/mapper/AppUserAgentMapper.java
  8. 11 0
      game-business/src/main/java/com/game/business/service/IAppUserAgentService.java
  9. 14 0
      game-business/src/main/java/com/game/business/service/IFinTranRecordService.java
  10. 35 4
      game-business/src/main/java/com/game/business/service/impl/AppUserAgentServiceImpl.java
  11. 119 0
      game-business/src/main/java/com/game/business/service/impl/FinTranRecordServiceImpl.java
  12. 5 2
      game-business/src/main/java/com/game/business/vo/AppAgentTeamVo.java
  13. 39 0
      game-business/src/main/java/com/game/business/vo/AppUserTeamTranserRecordVo.java
  14. 27 1
      game-business/src/main/resources/mapper/business/AppUserAgentMapper.xml
  15. 6 1
      game-common/src/main/java/com/game/common/constant/finance/FinTranType2.java
  16. 10 0
      game-common/src/main/java/com/game/common/constant/finance/FinTranType3.java

+ 132 - 3
game-business/src/main/java/com/game/business/controller/AppAgentController.java

@@ -1,29 +1,38 @@
 package com.game.business.controller;
 
 import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.game.business.domain.AppUser;
+import com.game.business.domain.AppUserAgent;
 import com.game.business.domain.AppUserCount;
-import com.game.business.dto.AppAgentEditDto;
-import com.game.business.dto.AppAgentTeamDto;
+import com.game.business.domain.FinTranRecord;
+import com.game.business.dto.*;
 import com.game.business.service.IAppUserAgentService;
-import com.game.business.dto.AgentIndexDTO;
 import com.game.business.service.IAppUserCountService;
 import com.game.business.service.IAppUserService;
+import com.game.business.service.IFinTranRecordService;
 import com.game.business.vo.AppAgentTeamVo;
 import com.game.business.vo.AppUserAgentJournalIndexVO;
+import com.game.business.vo.AppUserTeamTranserRecordVo;
 import com.game.common.core.controller.BaseController;
 import com.game.common.core.domain.HttpRet;
 import com.game.common.core.domain.HttpRetPageArr;
+import com.game.common.core.page.TableDataInfo;
 import com.game.common.utils.MessageUtils;
 import com.game.common.utils.SecurityUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 @RestController
@@ -40,6 +49,10 @@ public class AppAgentController extends BaseController {
     @Autowired
     private IAppUserAgentService appUserAgentService;
 
+    @Autowired
+    private IFinTranRecordService finTranRecordService;
+
+
     /**
      * 首页
      */
@@ -59,6 +72,7 @@ public class AppAgentController extends BaseController {
         String formatP = "yyyy-MM-dd";
         Date beginDate = DateUtil.beginOfMonth(nowDate);
         Date endDate = DateUtil.endOfMonth(nowDate);
+
         List<AppUserCount> appUserCountList = appUserCountService.getAppUserCount(userId,DateUtil.format(beginDate,formatP),DateUtil.format(endDate,formatP));
 
         if(null != appUserCountList){
@@ -113,4 +127,119 @@ public class AppAgentController extends BaseController {
         return HttpRetPageArr.success(MessageUtils.message("11022"),getDataTable(list));
     }
 
+    /**
+     * 团队转账
+     */
+    @PostMapping(value = "/transfer")
+    @ApiOperation(value = "团队转账", notes = "团队转账")
+    public HttpRet<Boolean> transfer(@RequestBody @Validated AppUserTeamTranserDto transerDto)
+    {
+        Long userId = SecurityUtils.getUserId();
+       //查询当前用户代理信息
+       LambdaQueryWrapper<AppUserAgent> queryWrapper = new LambdaQueryWrapper<>();
+       queryWrapper.eq(AppUserAgent::getUserId,userId);
+       queryWrapper.eq(AppUserAgent::getAuditStatus,1);
+       AppUserAgent appUserAgent = appUserAgentService.getOne(queryWrapper);
+       if(null == appUserAgent){
+           return HttpRet.fail("转账失败,受益人不是代理");
+       }
+       if(appUserAgent.getPid().longValue() == 0 || isTwoLevel(appUserAgent.getPid())){
+           List<AppUserAgent> appUserAgentList = appUserAgentService.selectAllAgentList(userId,transerDto.getToUserId());
+           if(null == appUserAgentList || appUserAgentList.size() < 1){
+               return HttpRet.fail("转账失败,只能给团队成员转账");
+           }
+       }else{
+            if(!isTeam(userId,transerDto.getToUserId())){
+                return HttpRet.fail("转账失败,只能给下级成员转账");
+            }
+       }
+       return finTranRecordService.transfer(transerDto);
+    }
+
+    /**
+     * 团队转账记录
+     */
+    @PostMapping(value = "/transferRecord")
+    @ApiOperation(value = "团队转账记录(分页)", notes = "团队转账记录(分页)")
+    public HttpRetPageArr<AppUserTeamTranserRecordVo> transferRecord(@RequestBody @Validated AppUserTeamTranserRecordDto transerDto)
+    {
+        startPage();
+        List<FinTranRecord> list = finTranRecordService.transferRecord(transerDto);
+        TableDataInfo<FinTranRecord> tableDataInfo = getDataTable(list);
+        TableDataInfo resultDataInfo = new TableDataInfo();
+        BeanUtils.copyProperties(tableDataInfo,resultDataInfo);
+        if(null != tableDataInfo.getRows() && tableDataInfo.getRows().size() > 0){
+            List<AppUser> appUsers = null;
+            if(0 == transerDto.getType()){
+                //转出
+                appUsers = appUserService.selectListByIds(
+                        tableDataInfo.getRows().stream().map(e->e.getFromUid()).collect(Collectors.toList())
+                );
+            }else{
+                //转入
+                appUsers = appUserService.selectListByIds(
+                        tableDataInfo.getRows().stream().map(e->e.getToUid()).collect(Collectors.toList())
+                );
+            }
+            Map<String,AppUser> userMap = new HashMap<>();
+            if(null != appUsers && appUsers.size() > 0){
+                userMap = appUsers.stream().collect(Collectors.toMap(e->{return String.valueOf(e.getUserid());}, Function.identity(),(k1,k2)->k2));
+            }
+            Map<String, AppUser> finalUserMap = userMap;
+            resultDataInfo.setRows(tableDataInfo.getRows().stream().map(e->{
+                AppUserTeamTranserRecordVo vo = new AppUserTeamTranserRecordVo();
+                vo.setMoney(e.getDiamondCoinChange());
+                vo.setTime(e.getCreateTime());
+                AppUser appUser = null;
+                if(0 == transerDto.getType()){
+                    //转出
+                    long userId = e.getToUid();
+                    appUser = finalUserMap.get(String.valueOf(userId));
+                    vo.setUserId(userId);
+                    if(null != appUser){
+                        vo.setNickName(appUser.getUsername());
+                    }
+                }else{
+                    //转入
+                    long userId = e.getFromUid();
+                    appUser = finalUserMap.get(String.valueOf(userId));
+                    vo.setUserId(userId);
+                    if(null != appUser){
+                        vo.setNickName(appUser.getUsername());
+                    }
+                }
+                return vo;
+            }).collect(Collectors.toList()));
+        }else{
+            resultDataInfo.setRows(new ArrayList());
+        }
+        return HttpRetPageArr.success(MessageUtils.message("11022"),resultDataInfo);
+    }
+
+    //查询用户是否为下级代理
+    private boolean isTeam(Long pid,Long userId){
+        //查询当前用户代理信息
+        LambdaQueryWrapper<AppUserAgent> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppUserAgent::getUserId,userId);
+        queryWrapper.eq(AppUserAgent::getAuditStatus,1);
+        AppUserAgent appUserAgent = appUserAgentService.getOne(queryWrapper);
+        if(null != appUserAgent && appUserAgent.getPid().longValue() == pid){
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 查询是否为第二级代理
+     * */
+    private boolean isTwoLevel(Long userId){
+        LambdaQueryWrapper<AppUserAgent> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppUserAgent::getUserId,userId);
+        AppUserAgent appUserAgent = appUserAgentService.getOne(queryWrapper);
+        if(appUserAgent.getPid().longValue() == 0){
+            return true;
+        }
+        return false;
+    }
+
 }

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

@@ -22,6 +22,7 @@ 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.core.redis.RedisCache;
 import com.game.common.utils.SecurityUtils;
 import com.game.common.utils.StringUtils;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -66,6 +67,9 @@ public class AppUserCountDividendController extends BaseController
     @Autowired
     private IFinTranRecordService finTranRecordService;
 
+    @Autowired
+    private RedisCache redisCache;
+
     /**
      * 查询用户代理分红列表
      */
@@ -138,6 +142,8 @@ public class AppUserCountDividendController extends BaseController
                     tranRecordList.add(tran);
                 }
                 appUserService.updateAppUser(updateAppUser);
+                //清除用户缓存
+                redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
                 if(tranRecordList.size() > 0){
                     tranRecordList.forEach(t->{
                         finTranRecordService.insertFinTranRecord(t);

+ 2 - 0
game-business/src/main/java/com/game/business/domain/FinTranRecord.java

@@ -260,6 +260,8 @@ private static final long serialVersionUID=1L;
         tran.afterTicket = user.getVotes();
         tran.afterDiamondCoin = user.getDiamondCoin();
         tran.createTime = new Date();
+        tran.fromUid = user.getUserid();
+        tran.toUid = user.getUserid();
         return tran;
     }
 

+ 8 - 0
game-business/src/main/java/com/game/business/dto/AppAgentTeamDto.java

@@ -23,6 +23,14 @@ public class AppAgentTeamDto implements Serializable {
     @ApiModelProperty(value = "用户昵称 搜索用")
     private String nickName;
 
+    /** 开始时间 */
+    @ApiModelProperty(value = "开始时间 格式yyyy-MM-dd")
+    private String beginTime;
+
+    /** 结束时间 */
+    @ApiModelProperty(value = "结束时间 格式yyyy-MM-dd")
+    private String endTime;
+
     @JsonIgnore
     private long pid;
 

+ 27 - 0
game-business/src/main/java/com/game/business/dto/AppUserTeamTranserDto.java

@@ -0,0 +1,27 @@
+package com.game.business.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+@Data
+@ApiModel("代理转账")
+public class AppUserTeamTranserDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 用户id */
+    @ApiModelProperty(value = "受益用户id")
+    @NotNull(message = "受益用户不能为空")
+    private Long toUserId;
+
+    /** 金额 **/
+    @ApiModelProperty(value = "金额")
+    @NotNull(message = "金额不能为空")
+    private Double money;
+
+}

+ 35 - 0
game-business/src/main/java/com/game/business/dto/AppUserTeamTranserRecordDto.java

@@ -0,0 +1,35 @@
+package com.game.business.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.sql.Date;
+
+@Data
+@ApiModel("代理转账记录")
+public class AppUserTeamTranserRecordDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id")
+    @NotNull(message = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "开始时间")
+    @NotNull(message = "开始时间不能为空")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    @NotNull(message = "结束时间不能为空")
+    private String endTime;
+
+
+    @ApiModelProperty(value = "类型:0:转出  1:转入")
+    @NotNull(message = "类型不能为空")
+    private int type;
+
+}

+ 6 - 0
game-business/src/main/java/com/game/business/mapper/AppUserAgentMapper.java

@@ -73,4 +73,10 @@ public interface AppUserAgentMapper extends BaseMapper<AppUserAgent> {
      *
      */
     public List<AppAgentTeamVo> teamList(@Param("teamDto") AppAgentTeamDto teamDto);
+
+    /**
+     * 查询所有下级团队列表(递归)
+     *
+     */
+    public List<AppUserAgent> selectAllAgentList(@Param("pid") Long pid, @Param("userId") Long userId);
 }

+ 11 - 0
game-business/src/main/java/com/game/business/service/IAppUserAgentService.java

@@ -6,6 +6,7 @@ import com.game.business.domain.AppUserAgent;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.game.business.dto.AppAgentEditDto;
 import com.game.business.dto.AppAgentTeamDto;
+import com.game.business.dto.AppUserTeamTranserDto;
 import com.game.business.vo.AppAgentTeamVo;
 import com.game.common.core.domain.HttpRet;
 
@@ -84,4 +85,14 @@ public interface IAppUserAgentService extends IService<AppUserAgent> {
      * 团队列表
      * */
     public List<AppAgentTeamVo> teamList(AppAgentTeamDto teamDto);
+
+    /**
+     * 团队转账
+     * */
+    public HttpRet<String> transfer(AppUserTeamTranserDto transfer);
+
+    /**
+     * 递归查询所有下级代理
+     * */
+    public List<AppUserAgent> selectAllAgentList(Long pid,Long userId);
 }

+ 14 - 0
game-business/src/main/java/com/game/business/service/IFinTranRecordService.java

@@ -3,6 +3,10 @@ package com.game.business.service;
 import java.util.List;
 import com.game.business.domain.FinTranRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.game.business.dto.AppUserTeamTranserDto;
+import com.game.business.dto.AppUserTeamTranserRecordDto;
+import com.game.business.vo.AppUserTeamTranserRecordVo;
+import com.game.common.core.domain.HttpRet;
 
 /**
  * 消费记录Service接口
@@ -69,4 +73,14 @@ public interface IFinTranRecordService extends IService<FinTranRecord> {
     public List<FinTranRecord> getUserRecordList(String userId,String beginTime,String endTime);
 
     Long nextId();
+
+    /**
+     * 余额转账
+     * */
+    public HttpRet<Boolean> transfer(AppUserTeamTranserDto transfer);
+
+    /**
+     * 代存记录
+     * */
+    public List<FinTranRecord> transferRecord(AppUserTeamTranserRecordDto transerRecordDto);
 }

+ 35 - 4
game-business/src/main/java/com/game/business/service/impl/AppUserAgentServiceImpl.java

@@ -5,19 +5,24 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.rmi.ServerException;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
-import com.game.business.domain.AppGame;
-import com.game.business.domain.AppGameCommission;
-import com.game.business.domain.AppUser;
+import com.game.business.domain.*;
 import com.game.business.dto.AppAgentEditDto;
 import com.game.business.dto.AppAgentTeamDto;
+import com.game.business.dto.AppUserTeamTranserDto;
 import com.game.business.service.IAppGameCommissionService;
 import com.game.business.service.IAppGameService;
 import com.game.business.service.IAppUserService;
 import com.game.business.vo.AppAgentTeamVo;
+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.utils.DateUtils;
 import com.game.common.utils.MessageUtils;
@@ -29,7 +34,6 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.game.business.mapper.AppUserAgentMapper;
-import com.game.business.domain.AppUserAgent;
 import com.game.business.service.IAppUserAgentService;
 import com.game.common.annotation.DataSource;
 import com.game.common.enums.DataSourceType;
@@ -215,4 +219,31 @@ public class AppUserAgentServiceImpl extends ServiceImpl<AppUserAgentMapper, App
         return list;
     }
 
+    @Override
+    public HttpRet<String> transfer(AppUserTeamTranserDto transfer) {
+        AppUser toAppUser = appUserService.selectAppUserByUserid(transfer.getToUserId());
+        AppUser appUser = appUserService.selectAppUserByUserid(SecurityUtils.getUserId());
+        if(null == toAppUser){
+            return HttpRet.fail("受益用户不存在");
+        }
+        if(appUser.getDiamondCoin().longValue() < transfer.getMoney().longValue()){
+            return HttpRet.fail("转账金额不足");
+        }
+        //当前用户扣减余额
+        AppUser updateAppUser = new AppUser();
+        updateAppUser.setUserid(appUser.getUserid());
+        updateAppUser.setDiamondCoin(appUser.getDiamondCoin() - transfer.getMoney());
+        FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+        FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.TRANSFER_TO_TEAM_DiamondCoin, FinTranType1.U_Outcome_Balance, appUser);
+        tran.setDiamondCoinChange(transfer.getMoney());
+        tran.setAfterDiamondCoin(appUser.getDiamondCoin() + transfer.getMoney());
+        tran.setCurrencyType(TranCurrencyType.Balance.getType());
+        return null;
+    }
+
+    @Override
+    public List<AppUserAgent> selectAllAgentList(Long pid, Long userId) {
+        return appUserAgentMapper.selectAllAgentList(pid,userId);
+    }
+
 }

+ 119 - 0
game-business/src/main/java/com/game/business/service/impl/FinTranRecordServiceImpl.java

@@ -1,20 +1,37 @@
 package com.game.business.service.impl;
 
+import com.baomidou.dynamic.datasource.annotation.DSTransactional;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 
 import java.util.Collections;
 import java.util.List;
 
+import com.game.business.domain.AppUser;
+import com.game.business.domain.CfgCommon;
+import com.game.business.dto.AppUserTeamTranserDto;
+import com.game.business.dto.AppUserTeamTranserRecordDto;
+import com.game.business.service.IAppUserService;
+import com.game.business.service.ICfgCommonService;
+import com.game.business.vo.AppUserTeamTranserRecordVo;
 import com.game.common.annotation.DataSource;
+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.redis.RedisCache;
 import com.game.common.enums.DataSourceType;
 import com.game.common.utils.DateUtils;
+import com.game.common.utils.SecurityUtils;
 import com.game.common.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.game.business.mapper.FinTranRecordMapper;
 import com.game.business.domain.FinTranRecord;
 import com.game.business.service.IFinTranRecordService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 消费记录Service业务层处理
@@ -28,6 +45,18 @@ public class FinTranRecordServiceImpl extends ServiceImpl<FinTranRecordMapper, F
     @Autowired
     private FinTranRecordMapper finTranRecordMapper;
 
+    @Autowired
+    private IAppUserService appUserService;
+
+    @Autowired
+    private IFinTranRecordService finTranRecordService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @Autowired
+    private ICfgCommonService cfgCommonService;
+
     /**
      * 查询消费记录
      *
@@ -119,4 +148,94 @@ public class FinTranRecordServiceImpl extends ServiceImpl<FinTranRecordMapper, F
         Long id = finTranRecordMapper.nextId();
         return  id < 10000 ? 10000 : id;
     }
+
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    @DSTransactional
+    public HttpRet<Boolean> transfer(AppUserTeamTranserDto transfer) {
+        AppUser toAppUser = appUserService.selectAppUserByUserid(transfer.getToUserId());
+        AppUser appUser = appUserService.selectAppUserByUserid(SecurityUtils.getUserId());
+        if(null == toAppUser){
+            return HttpRet.fail("受益用户不存在");
+        }
+        if(appUser.getDiamondCoin().longValue() < transfer.getMoney().longValue()){
+            return HttpRet.fail("转账金额不足");
+        }
+        //查询当日限额
+        CfgCommon cfgCommon = cfgCommonService.getCfg(0);
+        if(null != cfgCommon){
+            double limit = Double.parseDouble(cfgCommon.getCfgValue());
+            //查询当前总转账金额
+            LambdaQueryWrapper<FinTranRecord> queryWrapper = new LambdaQueryWrapper<>();
+            queryWrapper.eq(FinTranRecord::getFromUid,SecurityUtils.getUserId());
+            queryWrapper.eq(FinTranRecord::getTranType1,FinTranType1.U_Outcome_Coin.getType());
+            queryWrapper.eq(FinTranRecord::getTranType3,FinTranType3.TRANSFER_TO_TEAM_DiamondCoin.getType());
+            List<FinTranRecord> finTranRecords = finTranRecordMapper.selectList(queryWrapper);
+            if(null != finTranRecords && finTranRecords.size()>0){
+                double curMoney = finTranRecords.stream().mapToDouble(FinTranRecord::getDiamondCoinChange).sum();
+                if(curMoney >= limit){
+                    return HttpRet.fail("转账失败,超出当日转账限额".concat(String.valueOf(limit)));
+                }
+            }
+        }
+        //当前用户扣减余额
+        AppUser updateAppUser = new AppUser();
+        updateAppUser.setUserid(appUser.getUserid());
+        updateAppUser.setDiamondCoin(appUser.getDiamondCoin() - transfer.getMoney());
+        updateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() - transfer.getMoney());
+        updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + transfer.getMoney());
+        //扣减余额
+        appUserService.updateAppUser(appUser);
+
+        FinTranAddedInfo addedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+        FinTranRecord tran = FinTranRecord.initFinTranRecordSomeParams(addedInfo, FinTranType3.TRANSFER_TO_TEAM_DiamondCoin, FinTranType1.U_Outcome_Balance, appUser);
+        tran.setDiamondCoinChange(transfer.getMoney() * -1);
+        tran.setAfterDiamondCoin(appUser.getDiamondCoin() + transfer.getMoney());
+        tran.setCurrencyType(TranCurrencyType.Balance.getType());
+        finTranRecordService.insertFinTranRecord(tran);
+
+        //受益用户增加余额
+        AppUser toUpdateAppUser = new AppUser();
+        toUpdateAppUser.setUserid(appUser.getUserid());
+        toUpdateAppUser.setDiamondCoin(appUser.getDiamondCoin() + transfer.getMoney());
+        toUpdateAppUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + transfer.getMoney());
+        updateAppUser.setDiamondCoinTotal(appUser.getDiamondCoinTotal() + transfer.getMoney());
+        //增加余额
+        appUserService.updateAppUser(appUser);
+
+        FinTranAddedInfo toAddedInfo = FinTranAddedInfo.createTranInfo(appUser.getUserid(), 0, 0, AppSceneType.Scene_None, "");
+        FinTranRecord toTran = FinTranRecord.initFinTranRecordSomeParams(toAddedInfo, FinTranType3.TRANSFER_TO_TEAM_DiamondCoin, FinTranType1.U_Income_Coin_Balance, toAppUser);
+        toTran.setDiamondCoinChange(transfer.getMoney());
+        toTran.setAfterDiamondCoin(appUser.getDiamondCoin() + transfer.getMoney());
+        toTran.setCurrencyType(TranCurrencyType.Balance.getType());
+        toTran.setFromUid(appUser.getUserid());
+        finTranRecordService.insertFinTranRecord(toTran);
+        //清除用户缓存
+        redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(appUser.getUserid())));
+        redisCache.deleteObject("U:UserInfo:".concat(String.valueOf(toAppUser.getUserid())));
+        return HttpRet.success("转账成功");
+    }
+
+    @Override
+    public List<FinTranRecord> transferRecord(AppUserTeamTranserRecordDto transerRecordDto) {
+        LambdaQueryWrapper<FinTranRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.between(FinTranRecord::getCreateTime,transerRecordDto.getBeginTime(),transerRecordDto.getEndTime());
+        queryWrapper.eq(FinTranRecord::getTranType3,FinTranType3.TRANSFER_TO_TEAM_DiamondCoin.getType());
+        queryWrapper.eq(FinTranRecord::getTranType1,FinTranType1.U_Income_Coin_Balance);
+        if(transerRecordDto.getType() == 0){
+            //转出
+            queryWrapper.eq(FinTranRecord::getFromUid,SecurityUtils.getUserId());
+            if(null != transerRecordDto.getUserId()){
+                queryWrapper.eq(FinTranRecord::getToUid,transerRecordDto.getUserId());
+            }
+        }else if(transerRecordDto.getType() == 1){
+            //转入
+            queryWrapper.eq(FinTranRecord::getToUid,SecurityUtils.getUserId());
+            if(null != transerRecordDto.getUserId()){
+                queryWrapper.eq(FinTranRecord::getFromUid,transerRecordDto.getUserId());
+            }
+        }
+        List<FinTranRecord> list = finTranRecordMapper.selectList(queryWrapper);
+        return list;
+    }
 }

+ 5 - 2
game-business/src/main/java/com/game/business/vo/AppAgentTeamVo.java

@@ -28,8 +28,11 @@ public class AppAgentTeamVo {
     @ApiModelProperty(value = "投注金额")
     private double bettingAmount;
 
-    @ApiModelProperty(value = "返点")
-    private double commission;
+    @ApiModelProperty(value = "直播返点")
+    private double liveCommission;
+
+    @ApiModelProperty(value = "游戏返点")
+    private double gameCommission;
 
     @ApiModelProperty(value = "盈亏")
     private double gameAmount;

+ 39 - 0
game-business/src/main/java/com/game/business/vo/AppUserTeamTranserRecordVo.java

@@ -0,0 +1,39 @@
+package com.game.business.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@ApiModel("代理转账记录")
+public class AppUserTeamTranserRecordVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /** 用户id */
+    @ApiModelProperty(value = "用户id")
+    @NotNull(message = "用户id")
+    private Long userId;
+
+    /** 用户id */
+    @ApiModelProperty(value = "昵称")
+    @NotNull(message = "昵称")
+    private String nickName;
+
+    /** 金额 **/
+    @ApiModelProperty(value = "金额")
+    @NotNull(message = "金额")
+    private Double money;
+
+    /** 金额 **/
+    @ApiModelProperty(value = "到账时间")
+    @NotNull(message = "到账时间")
+    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
+    private Date time;
+
+}

+ 27 - 1
game-business/src/main/resources/mapper/business/AppUserAgentMapper.xml

@@ -102,7 +102,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             c.username as nickName,
             a.pid as pid,
             (select IFNULL(sum(betting_amount),0) from app_game_betting as b where b.user_id = a.user_id) as bettingAmount,
-            (select IFNULL(sum(d.live_commission + d.game_commission),0) from app_user_count as d where d.user_id = a.user_id) as commission,
+            (select IFNULL(sum(d.game_commission),0) from app_user_count as d where d.user_id = a.user_id) as gameCommission,
+            (select IFNULL(sum(d.live_commission),0) from app_user_count as d where d.user_id = a.user_id) as liveCommission,
             (select IFNULL(sum(e.game_win_amount - e.game_lose_amount),0) from app_user_count as e where e.user_id = a.user_id) as gameAmount,
             a.live_rate as liveRate,
             a.dividend_guarantee_rate as dividendGuaranteeRate
@@ -113,5 +114,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="teamDto.nickName != null and teamDto.nickName != ''">
              and c.username = #{teamDto.nickName}
         </if>
+        <if test="teamDto.beginTime != null and teamDto.beginTime != ''">
+             and <![CDATA[ a.str_date >= #{teamDto.beginTime} ]]>
+        </if>
+        <if test="teamDto.endTime != null and teamDto.endTime != ''">
+             and <![CDATA[ a.str_date <= #{teamDto.endTime} ]]>
+        </if>
+    </select>
+
+    <select id="selectAllAgentList" resultMap="AppUserAgentResult">
+        WITH RECURSIVE useragent AS
+       (
+           SELECT *
+           FROM app_user_agent
+           WHERE pid = #{pid}
+
+           UNION ALL
+
+           SELECT o.*
+           FROM app_user_agent o
+                    JOIN useragent s ON o.pid = s.user_id
+       )
+        SELECT * FROM useragent where 1=1
+        <if test="userId != null">
+            and user_id = #{userId}
+        </if>
     </select>
 </mapper>

+ 6 - 1
game-common/src/main/java/com/game/common/constant/finance/FinTranType2.java

@@ -38,7 +38,12 @@ public enum FinTranType2 {
     /**
      * 游戏中奖
      */
-    GAME_REWARD(14, "11215"),
+    GAME_REWARD(15, "11215"),
+
+    /**
+     * 转账
+     */
+    USER_TRANSFER(16, "11215"),
     /**
      * 打赏
      */

+ 10 - 0
game-common/src/main/java/com/game/common/constant/finance/FinTranType3.java

@@ -98,6 +98,16 @@ public enum FinTranType3 {
      */
     COIN_TO_DiamondCoin(FinTranType2.EXCHANGE_COIN, 1304, ProjConfig.getCoinName() + MessageUtils.message("11214") + ProjConfig.getD_ticketName(),0),
 
+    /**
+     * 兑换 - 余额兑换实物
+     */
+    COIN_TO_SHOP(FinTranType2.EXCHANGE_COIN, 1305, ProjConfig.getCoinName() + MessageUtils.message("11214") + MessageUtils.message("11574"),0),
+
+    /**
+     * 转账 - 团队余额转账
+     */
+    TRANSFER_TO_TEAM_DiamondCoin(FinTranType2.USER_TRANSFER, 1601, ProjConfig.getCoinName() + MessageUtils.message("11214") + ProjConfig.getD_ticketName(),0),
+
     /**
      * 赠送礼物 - 直播房间内
      */