dos hai 2 meses
pai
achega
8311ba91a6
Modificáronse 44 ficheiros con 4659 adicións e 34 borrados
  1. 79 12
      game-business/src/main/java/com/game/business/controller/AppAgentController.java
  2. 81 0
      game-business/src/main/java/com/game/business/controller/AppGameBettingController.java
  3. 35 5
      game-business/src/main/java/com/game/business/controller/AppUserController.java
  4. 115 0
      game-business/src/main/java/com/game/business/controller/AppUsersCashAccountController.java
  5. 174 0
      game-business/src/main/java/com/game/business/controller/ShopBusinessOrderController.java
  6. 115 0
      game-business/src/main/java/com/game/business/controller/ShopSubOrderController.java
  7. 3 0
      game-business/src/main/java/com/game/business/domain/AppUserGameRecordCount.java
  8. 84 0
      game-business/src/main/java/com/game/business/domain/AppUsersCashAccount.java
  9. 2 0
      game-business/src/main/java/com/game/business/domain/FinTranRecord.java
  10. 246 0
      game-business/src/main/java/com/game/business/domain/ShopBusinessOrder.java
  11. 133 0
      game-business/src/main/java/com/game/business/domain/ShopSubOrder.java
  12. 20 0
      game-business/src/main/java/com/game/business/dto/OrderSendDTO.java
  13. 49 0
      game-business/src/main/java/com/game/business/mapper/AppGameBettingMapper.java
  14. 6 0
      game-business/src/main/java/com/game/business/mapper/AppUserAgentMapper.java
  15. 61 0
      game-business/src/main/java/com/game/business/mapper/AppUsersCashAccountMapper.java
  16. 61 0
      game-business/src/main/java/com/game/business/mapper/ShopBusinessOrderMapper.java
  17. 61 0
      game-business/src/main/java/com/game/business/mapper/ShopSubOrderMapper.java
  18. 48 0
      game-business/src/main/java/com/game/business/service/IAppGameBettingService.java
  19. 5 0
      game-business/src/main/java/com/game/business/service/IAppUserAgentService.java
  20. 5 0
      game-business/src/main/java/com/game/business/service/IAppUserGameRecordCountService.java
  21. 61 0
      game-business/src/main/java/com/game/business/service/IAppUsersCashAccountService.java
  22. 61 0
      game-business/src/main/java/com/game/business/service/IShopBusinessOrderService.java
  23. 61 0
      game-business/src/main/java/com/game/business/service/IShopSubOrderService.java
  24. 69 0
      game-business/src/main/java/com/game/business/service/impl/AppGameBettingServiceImpl.java
  25. 9 0
      game-business/src/main/java/com/game/business/service/impl/AppUserAgentServiceImpl.java
  26. 22 0
      game-business/src/main/java/com/game/business/service/impl/AppUserGameRecordCountServiceImpl.java
  27. 95 0
      game-business/src/main/java/com/game/business/service/impl/AppUsersCashAccountServiceImpl.java
  28. 95 0
      game-business/src/main/java/com/game/business/service/impl/ShopBusinessOrderServiceImpl.java
  29. 95 0
      game-business/src/main/java/com/game/business/service/impl/ShopSubOrderServiceImpl.java
  30. 23 0
      game-business/src/main/java/com/game/business/vo/AppUserDetailVo.java
  31. 128 0
      game-business/src/main/resources/mapper/business/AppGameBettingMapper.xml
  32. 15 0
      game-business/src/main/resources/mapper/business/AppUserAgentMapper.xml
  33. 93 0
      game-business/src/main/resources/mapper/business/AppUsersCashAccountMapper.xml
  34. 1 0
      game-business/src/main/resources/mapper/business/FinTranRecordMapper.xml
  35. 223 0
      game-business/src/main/resources/mapper/business/ShopBusinessOrderMapper.xml
  36. 133 0
      game-business/src/main/resources/mapper/business/ShopSubOrderMapper.xml
  37. 44 0
      game-ui/src/api/business/account.js
  38. 44 0
      game-ui/src/api/business/betting.js
  39. 52 0
      game-ui/src/api/business/order.js
  40. 24 0
      game-ui/src/api/business/user.js
  41. 341 0
      game-ui/src/views/business/account/index.vue
  42. 494 0
      game-ui/src/views/business/betting/index.vue
  43. 597 0
      game-ui/src/views/business/order/index.vue
  44. 496 17
      game-ui/src/views/business/user/index.vue

+ 79 - 12
game-business/src/main/java/com/game/business/controller/AppAgentController.java

@@ -2,22 +2,18 @@ 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.domain.FinTranRecord;
+import com.game.business.domain.*;
 import com.game.business.dto.*;
-import com.game.business.service.IAppUserAgentService;
-import com.game.business.service.IAppUserCountService;
-import com.game.business.service.IAppUserService;
-import com.game.business.service.IFinTranRecordService;
+import com.game.business.service.*;
 import com.game.business.vo.AppAgentTeamVo;
 import com.game.business.vo.AppUserAgentJournalIndexVO;
+import com.game.business.vo.AppUserDetailVo;
 import com.game.business.vo.AppUserTeamTranserRecordVo;
 import com.game.common.constant.CacheConstants;
 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.domain.R;
 import com.game.common.core.page.TableDataInfo;
 import com.game.common.core.redis.RedisCache;
 import com.game.common.utils.MessageUtils;
@@ -28,10 +24,7 @@ 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 org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
@@ -59,6 +52,18 @@ public class AppAgentController extends BaseController {
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IAppGameCommissionService appGameCommissionService;
+
+    @Autowired
+    private IAppUsersCashAccountService appUsersCashAccountService;
+
+    @Autowired
+    private IShopBusinessOrderService shopBusinessOrderService;
+
+    @Autowired
+    private IShopSubOrderService shopSubOrderService;
+
 
     /**
      * 首页
@@ -308,6 +313,68 @@ public class AppAgentController extends BaseController {
         return HttpRetPageArr.success(MessageUtils.message("11022"),resultDataInfo);
     }
 
+    /**
+     * 查询用户详情
+     */
+    @GetMapping(value = "/userDetail")
+    @ApiOperation(value = "查询用户详情", notes = "查询用户详情")
+    public R<AppUserDetailVo> selectSuperList(Long userId)
+    {
+        AppUserDetailVo appUserDetailVo = new AppUserDetailVo();
+        if(null == userId){
+            return R.ok(appUserDetailVo);
+        }
+        AppUser appUser = appUserService.selectAppUserByUserid(userId);
+        if(null == appUser){
+            return R.ok(appUserDetailVo);
+        }
+        List<AppUserAgent> list = appUserAgentService.selectSuperList(userId);
+        appUserDetailVo.setSuperUserList(list);
+        AppUserAgent appUserAgent = null!=list.stream().filter(e->e.getUserId().equals(userId)).collect(Collectors.toList())?
+                list.stream().filter(e->e.getUserId().equals(userId)).collect(Collectors.toList()).get(0):null;
+        if(null != appUserAgent) {
+            appUserDetailVo.setLiveRate(appUserAgent.getLiveRate());
+            appUserDetailVo.setDividendGuaranteeRate(appUserAgent.getDividendGuaranteeRate());
+        }
+
+        List<AppGameCommission> gameCommissionList = appGameCommissionService.getByIds(Arrays.asList(userId));
+        appUserDetailVo.setGameCommissionList(gameCommissionList);
+
+       /* AppUser queryIpUser = new AppUser();
+        queryIpUser.setIpaddr(appUser.getIpaddr());
+        List<AppUser> ipUserList = appUserService.selectAppUserList(queryIpUser);
+        appUserDetailVo.setIpUserList(ipUserList);*/
+
+        /*AppUsersCashAccount queryCashAccount = new AppUsersCashAccount();
+        queryCashAccount.setUid(userId);
+        List<AppUsersCashAccount> usersCashAccounts = appUsersCashAccountService.selectAppUsersCashAccountList(queryCashAccount);
+        appUserDetailVo.setUsersCashAccounts(usersCashAccounts);*/
+
+        /*ShopBusinessOrder queryOrder = new ShopBusinessOrder();
+        queryOrder.setUid(userId);
+        List<ShopBusinessOrder> businessOrders = shopBusinessOrderService.selectShopBusinessOrderList(queryOrder);
+        if(null != businessOrders && businessOrders.size() > 0){
+            businessOrders.forEach(e->{
+                ShopSubOrder query = new ShopSubOrder();
+                query.setBusinessOrderId(e.getId());
+                List<ShopSubOrder> shopSubOrders = shopSubOrderService.selectShopSubOrderList(query);
+                if(null != shopSubOrders && shopSubOrders.size() > 0){
+                    String productNames = "";
+                    for(ShopSubOrder shopSubOrder : shopSubOrders){
+                        if(StringUtils.isNotBlank(productNames)){
+                            productNames = productNames.concat(",");
+                        }
+                        productNames = productNames.concat(shopSubOrder.getGoodsName());
+                    }
+                    e.setProductNames(productNames);
+                }
+            });
+        }
+        appUserDetailVo.setBusinessOrders(businessOrders);*/
+
+        return R.ok(appUserDetailVo,MessageUtils.message("11022"));
+    }
+
     //查询用户是否为下级代理
     private boolean isTeam(Long pid,Long userId){
         //查询当前用户代理信息

+ 81 - 0
game-business/src/main/java/com/game/business/controller/AppGameBettingController.java

@@ -9,22 +9,29 @@ import com.game.business.util.Common;
 import com.game.business.vo.*;
 import com.game.business.service.*;
 import com.game.common.annotation.Anonymous;
+import com.game.common.annotation.Log;
 import com.game.common.constant.finance.FinTranType1;
 import com.game.common.constant.finance.FinTranType2;
 import com.game.common.constant.finance.FinTranType3;
 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.domain.R;
+import com.game.common.core.page.TableDataInfo;
 import com.game.common.core.redis.RedisCache;
+import com.game.common.enums.BusinessType;
 import com.game.common.utils.SecurityUtils;
+import com.game.common.utils.poi.ExcelUtil;
 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.security.access.prepost.PreAuthorize;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
+import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -520,4 +527,78 @@ public class AppGameBettingController extends BaseController{
         }
         return itemMultiple;
     }
+
+    /**
+     * 查询用户下注记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询用户下注记录列表", notes = "获取用户下注记录列表")
+    public TableDataInfo<AppGameBetting> list(AppGameBetting appGameBetting)
+    {
+        startPage();
+        List<AppGameBetting> list = appGameBettingService.selectAppGameBettingList(appGameBetting);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出用户下注记录列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:export')")
+    @Log(title = "用户下注记录", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出用户下注记录列表", notes = "导出用户下注记录列表")
+    public void export(HttpServletResponse response, AppGameBetting appGameBetting)
+    {
+        List<AppGameBetting> list = appGameBettingService.selectAppGameBettingList(appGameBetting);
+        ExcelUtil<AppGameBetting> util = new ExcelUtil<AppGameBetting>(AppGameBetting.class);
+        util.exportExcel(response, list, "用户下注记录数据");
+    }
+
+    /**
+     * 获取用户下注记录详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取用户下注记录详细信息", notes = "获取用户下注记录详细信息")
+    public R<AppGameBetting> getInfo(@PathVariable("id") Long id)
+    {
+        return R.ok(appGameBettingService.selectAppGameBettingById(id));
+    }
+
+    /**
+     * 新增用户下注记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:add')")
+    @Log(title = "用户下注记录", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增用户下注记录", notes = "新增用户下注记录")
+    @PostMapping
+    public R add(@RequestBody AppGameBetting appGameBetting)
+    {
+        return R.ok(appGameBettingService.insertAppGameBetting(appGameBetting));
+    }
+
+    /**
+     * 修改用户下注记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:edit')")
+    @Log(title = "用户下注记录", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "修改用户下注记录", notes = "修改用户下注记录")
+    @PutMapping
+    public R edit(@RequestBody AppGameBetting appGameBetting)
+    {
+        return R.ok(appGameBettingService.updateAppGameBetting(appGameBetting));
+    }
+
+    /**
+     * 删除用户下注记录
+     */
+    @PreAuthorize("@ss.hasPermi('business:betting:remove')")
+    @Log(title = "用户下注记录", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除用户下注记录", notes = "删除用户下注记录")
+    @DeleteMapping("/{ids}")
+    public R remove(@PathVariable Long[] ids)
+    {
+        return R.ok(appGameBettingService.deleteAppGameBettingByIds(ids));
+    }
 }

+ 35 - 5
game-business/src/main/java/com/game/business/controller/AppUserController.java

@@ -19,10 +19,7 @@ import com.game.business.util.Md5Utils;
 import com.game.business.util.im.HttpClientUtils;
 import com.game.business.util.im.TencentCloudImUtil;
 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.constant.finance.*;
 import com.game.common.core.domain.HttpRet;
 import com.game.common.core.domain.R;
 import com.game.common.core.redis.RedisCache;
@@ -89,6 +86,9 @@ public class AppUserController extends BaseController
     @Autowired
     private ISysConfigService sysConfigService;
 
+    @Autowired
+    private IAppUserGameRecordCountService appUserGameRecordCountService;
+
     /**
      * 查询app用户列表
      */
@@ -109,6 +109,36 @@ public class AppUserController extends BaseController
         return getDataTable(list);
     }
 
+    /**
+     * 查询用户直播间返佣
+     */
+    @PreAuthorize("@ss.hasPermi('business:user:list')")
+    @GetMapping("/liveCommission")
+    @ApiOperation(value = "查询用户直播间返佣", notes = "查询用户直播间返佣")
+    public TableDataInfo liveCommission(Long userId)
+    {
+        startPage();
+        List<AppUserGameRecordCount> list = appUserGameRecordCountService.liveCommission(userId);
+        return getDataTable(list);
+    }
+
+    /**
+     * 查询用户收到的礼物
+     */
+    @PreAuthorize("@ss.hasPermi('business:user:list')")
+    @GetMapping("/getGift")
+    @ApiOperation(value = "查询用户收到的礼物", notes = "查询用户收到的礼物")
+    public TableDataInfo getGift(Long userId)
+    {
+        startPage();
+        FinTranRecord finTranRecord = new FinTranRecord();
+        finTranRecord.setTranType1(FinTranType1.U_Income_Coin.getType());
+        finTranRecord.setTranType2(FinTranType2.CONSUM_SEND_GIFT.getType());
+        finTranRecord.setToUid(userId);
+        List<FinTranRecord> list = finTranRecordService.selectFinTranRecordList(finTranRecord);
+        return getDataTable(list);
+    }
+
     /**
      * 重置密码
      */
@@ -316,7 +346,7 @@ public class AppUserController extends BaseController
      * 开关播
      */
     @PreAuthorize("@ss.hasPermi('business:user:charge')")
-    @Log(title = "app用户", businessType = BusinessType.UPDATE)
+    @Log(title = "开关播", businessType = BusinessType.UPDATE)
     @PostMapping("/openLive")
     @ApiOperation(value = "开关播", notes = "开关播")
     public R<String> openLive(HttpServletResponse response, @RequestBody LiveLive liveLive)

+ 115 - 0
game-business/src/main/java/com/game/business/controller/AppUsersCashAccountController.java

@@ -0,0 +1,115 @@
+package com.game.business.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.game.common.core.domain.R;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.game.common.annotation.Log;
+import com.game.common.core.controller.BaseController;
+import com.game.common.core.domain.AjaxResult;
+import com.game.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.game.business.domain.AppUsersCashAccount;
+import com.game.business.service.IAppUsersCashAccountService;
+import com.game.common.utils.poi.ExcelUtil;
+import com.game.common.core.page.TableDataInfo;
+
+/**
+ * 用户提现账号Controller
+ * 
+ * @author game
+ * @date 2024-09-07
+ */
+@RestController
+@RequestMapping("/business/account")
+@Api(value = "AppUsersCashAccountController", description = "用户提现账号接口", tags = {"用户提现账号"})
+public class AppUsersCashAccountController extends BaseController
+{
+    @Autowired
+    private IAppUsersCashAccountService appUsersCashAccountService;
+
+    /**
+     * 查询用户提现账号列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询用户提现账号列表", notes = "获取用户提现账号列表")
+    public TableDataInfo<AppUsersCashAccount> list(AppUsersCashAccount appUsersCashAccount)
+    {
+        startPage();
+        List<AppUsersCashAccount> list = appUsersCashAccountService.selectAppUsersCashAccountList(appUsersCashAccount);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出用户提现账号列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:export')")
+    @Log(title = "用户提现账号", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出用户提现账号列表", notes = "导出用户提现账号列表")
+    public void export(HttpServletResponse response, AppUsersCashAccount appUsersCashAccount)
+    {
+        List<AppUsersCashAccount> list = appUsersCashAccountService.selectAppUsersCashAccountList(appUsersCashAccount);
+        ExcelUtil<AppUsersCashAccount> util = new ExcelUtil<AppUsersCashAccount>(AppUsersCashAccount.class);
+        util.exportExcel(response, list, "用户提现账号数据");
+    }
+
+    /**
+     * 获取用户提现账号详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取用户提现账号详细信息", notes = "获取用户提现账号详细信息")
+    public R<AppUsersCashAccount> getInfo(@PathVariable("id") Long id)
+    {
+        return R.ok(appUsersCashAccountService.selectAppUsersCashAccountById(id));
+    }
+
+    /**
+     * 新增用户提现账号
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:add')")
+    @Log(title = "用户提现账号", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增用户提现账号", notes = "新增用户提现账号")
+    @PostMapping
+    public R add(@RequestBody AppUsersCashAccount appUsersCashAccount)
+    {
+        return R.ok(appUsersCashAccountService.insertAppUsersCashAccount(appUsersCashAccount));
+    }
+
+    /**
+     * 修改用户提现账号
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:edit')")
+    @Log(title = "用户提现账号", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "修改用户提现账号", notes = "修改用户提现账号")
+    @PutMapping
+    public R edit(@RequestBody AppUsersCashAccount appUsersCashAccount)
+    {
+        return R.ok(appUsersCashAccountService.updateAppUsersCashAccount(appUsersCashAccount));
+    }
+
+    /**
+     * 删除用户提现账号
+     */
+    @PreAuthorize("@ss.hasPermi('business:account:remove')")
+    @Log(title = "用户提现账号", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除用户提现账号", notes = "删除用户提现账号")
+	@DeleteMapping("/{ids}")
+    public R remove(@PathVariable Long[] ids)
+    {
+        return R.ok(appUsersCashAccountService.deleteAppUsersCashAccountByIds(ids));
+    }
+}

+ 174 - 0
game-business/src/main/java/com/game/business/controller/ShopBusinessOrderController.java

@@ -0,0 +1,174 @@
+package com.game.business.controller;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.game.business.domain.LiveLive;
+import com.game.business.domain.ShopSubOrder;
+import com.game.business.dto.OrderSendDTO;
+import com.game.business.service.IShopSubOrderService;
+import com.game.business.util.im.HttpClientUtils;
+import com.game.business.util.im.TencentCloudImUtil;
+import com.game.common.core.domain.R;
+import com.game.system.service.ISysConfigService;
+import lombok.extern.log4j.Log4j2;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.game.common.annotation.Log;
+import com.game.common.core.controller.BaseController;
+import com.game.common.core.domain.AjaxResult;
+import com.game.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.game.business.domain.ShopBusinessOrder;
+import com.game.business.service.IShopBusinessOrderService;
+import com.game.common.utils.poi.ExcelUtil;
+import com.game.common.core.page.TableDataInfo;
+
+/**
+ * 购物订单Controller
+ * 
+ * @author game
+ * @date 2024-09-06
+ */
+@RestController
+@RequestMapping("/business/order")
+@Api(value = "ShopBusinessOrderController", description = "购物订单接口", tags = {"购物订单"})
+@Log4j2
+public class ShopBusinessOrderController extends BaseController
+{
+    @Autowired
+    private IShopBusinessOrderService shopBusinessOrderService;
+
+    @Autowired
+    private IShopSubOrderService shopSubOrderService;
+
+    @Autowired
+    private ISysConfigService sysConfigService;
+
+    /**
+     * 查询购物订单列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询购物订单列表", notes = "获取购物订单列表")
+    public TableDataInfo<ShopBusinessOrder> list(ShopBusinessOrder shopBusinessOrder)
+    {
+        startPage();
+        List<ShopBusinessOrder> list = shopBusinessOrderService.selectShopBusinessOrderList(shopBusinessOrder);
+        if(null != list && list.size() > 0){
+            list.forEach(e->{
+                ShopSubOrder query = new ShopSubOrder();
+                query.setBusinessOrderId(e.getId());
+                List<ShopSubOrder> shopSubOrders = shopSubOrderService.selectShopSubOrderList(query);
+                if(null != shopSubOrders && shopSubOrders.size() > 0){
+                    String productNames = "";
+                    for(ShopSubOrder shopSubOrder : shopSubOrders){
+                        if(StringUtils.isNotBlank(productNames)){
+                            productNames = productNames.concat(",");
+                        }
+                        productNames = productNames.concat(shopSubOrder.getGoodsName());
+                    }
+                    e.setProductNames(productNames);
+                }
+            });
+        }
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出购物订单列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:export')")
+    @Log(title = "购物订单", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出购物订单列表", notes = "导出购物订单列表")
+    public void export(HttpServletResponse response, ShopBusinessOrder shopBusinessOrder)
+    {
+        List<ShopBusinessOrder> list = shopBusinessOrderService.selectShopBusinessOrderList(shopBusinessOrder);
+        ExcelUtil<ShopBusinessOrder> util = new ExcelUtil<ShopBusinessOrder>(ShopBusinessOrder.class);
+        util.exportExcel(response, list, "购物订单数据");
+    }
+
+    /**
+     * 获取购物订单详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取购物订单详细信息", notes = "获取购物订单详细信息")
+    public R<ShopBusinessOrder> getInfo(@PathVariable("id") Long id)
+    {
+        return R.ok(shopBusinessOrderService.selectShopBusinessOrderById(id));
+    }
+
+    /**
+     * 新增购物订单
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:add')")
+    @Log(title = "购物订单", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增购物订单", notes = "新增购物订单")
+    @PostMapping
+    public R add(@RequestBody ShopBusinessOrder shopBusinessOrder)
+    {
+        return R.ok(shopBusinessOrderService.insertShopBusinessOrder(shopBusinessOrder));
+    }
+
+    /**
+     * 修改购物订单
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:edit')")
+    @Log(title = "购物订单", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "修改购物订单", notes = "修改购物订单")
+    @PutMapping
+    public R edit(@RequestBody ShopBusinessOrder shopBusinessOrder)
+    {
+        return R.ok(shopBusinessOrderService.updateShopBusinessOrder(shopBusinessOrder));
+    }
+
+    /**
+     * 删除购物订单
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:remove')")
+    @Log(title = "购物订单", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除购物订单", notes = "删除购物订单")
+	@DeleteMapping("/{ids}")
+    public R remove(@PathVariable Long[] ids)
+    {
+        return R.ok(shopBusinessOrderService.deleteShopBusinessOrderByIds(ids));
+    }
+
+    /**
+     * 发货
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:send')")
+    @Log(title = "发货", businessType = BusinessType.UPDATE)
+    @PostMapping("/send")
+    @ApiOperation(value = "发货", notes = "发货")
+    public R<String> openLive(HttpServletResponse response, @RequestBody OrderSendDTO orderSendDTO)
+    {
+        String url = sysConfigService.selectConfigByKey("sys_live_apiurl").concat("/api/shopOrderOther/confirmSent");
+        Map<String, String> map = new HashMap<>();
+        map.put("id", String.valueOf(orderSendDTO.getId()));
+        map.put("logisticsNum", orderSendDTO.getLogisticsNum());
+        map.put("logisticsName", orderSendDTO.getLogisticsName());
+
+        String res = HttpClientUtils.ajaxPost(url,map);
+        if(StringUtils.isBlank(res) || !JSONObject.parseObject(res).getString("code").equals("1")){
+            log.info("失败===============》》".concat(res));
+            return R.fail("发货失败");
+        }
+        return R.ok("发货成功","发货成功");
+    }
+}

+ 115 - 0
game-business/src/main/java/com/game/business/controller/ShopSubOrderController.java

@@ -0,0 +1,115 @@
+package com.game.business.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.game.common.core.domain.R;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.game.common.annotation.Log;
+import com.game.common.core.controller.BaseController;
+import com.game.common.core.domain.AjaxResult;
+import com.game.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import com.game.business.domain.ShopSubOrder;
+import com.game.business.service.IShopSubOrderService;
+import com.game.common.utils.poi.ExcelUtil;
+import com.game.common.core.page.TableDataInfo;
+
+/**
+ * 订单商品Controller
+ * 
+ * @author game
+ * @date 2024-09-06
+ */
+@RestController
+@RequestMapping("/business/subOrder")
+@Api(value = "ShopSubOrderController", description = "订单商品接口", tags = {"订单商品"})
+public class ShopSubOrderController extends BaseController
+{
+    @Autowired
+    private IShopSubOrderService shopSubOrderService;
+
+    /**
+     * 查询订单商品列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询订单商品列表", notes = "获取订单商品列表")
+    public TableDataInfo<ShopSubOrder> list(ShopSubOrder shopSubOrder)
+    {
+        startPage();
+        List<ShopSubOrder> list = shopSubOrderService.selectShopSubOrderList(shopSubOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出订单商品列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:export')")
+    @Log(title = "订单商品", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出订单商品列表", notes = "导出订单商品列表")
+    public void export(HttpServletResponse response, ShopSubOrder shopSubOrder)
+    {
+        List<ShopSubOrder> list = shopSubOrderService.selectShopSubOrderList(shopSubOrder);
+        ExcelUtil<ShopSubOrder> util = new ExcelUtil<ShopSubOrder>(ShopSubOrder.class);
+        util.exportExcel(response, list, "订单商品数据");
+    }
+
+    /**
+     * 获取订单商品详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取订单商品详细信息", notes = "获取订单商品详细信息")
+    public R<ShopSubOrder> getInfo(@PathVariable("id") Long id)
+    {
+        return R.ok(shopSubOrderService.selectShopSubOrderById(id));
+    }
+
+    /**
+     * 新增订单商品
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:add')")
+    @Log(title = "订单商品", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增订单商品", notes = "新增订单商品")
+    @PostMapping
+    public R add(@RequestBody ShopSubOrder shopSubOrder)
+    {
+        return R.ok(shopSubOrderService.insertShopSubOrder(shopSubOrder));
+    }
+
+    /**
+     * 修改订单商品
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:edit')")
+    @Log(title = "订单商品", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "修改订单商品", notes = "修改订单商品")
+    @PutMapping
+    public R edit(@RequestBody ShopSubOrder shopSubOrder)
+    {
+        return R.ok(shopSubOrderService.updateShopSubOrder(shopSubOrder));
+    }
+
+    /**
+     * 删除订单商品
+     */
+    @PreAuthorize("@ss.hasPermi('business:order:remove')")
+    @Log(title = "订单商品", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除订单商品", notes = "删除订单商品")
+	@DeleteMapping("/{ids}")
+    public R remove(@PathVariable Long[] ids)
+    {
+        return R.ok(shopSubOrderService.deleteShopSubOrderByIds(ids));
+    }
+}

+ 3 - 0
game-business/src/main/java/com/game/business/domain/AppUserGameRecordCount.java

@@ -61,4 +61,7 @@ public class AppUserGameRecordCount {
     @ApiModelProperty(value = "游戏分佣费率")
     private Date createTime;
 
+    @TableField(exist = false)
+    private String gameName;
+
 }

+ 84 - 0
game-business/src/main/java/com/game/business/domain/AppUsersCashAccount.java

@@ -0,0 +1,84 @@
+package com.game.business.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.game.common.annotation.Excel;
+import com.game.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 用户提现账号对象 app_users_cash_account
+ *
+ * @author game
+ * @date 2024-09-07
+ */
+@ApiModel(value = "app_users_cash_account", description = "用户提现账号")
+@TableName(value= "app_users_cash_account")
+@Data
+public class AppUsersCashAccount
+        {
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "$column.columnComment")
+    @TableId(value = "id" , type = IdType.AUTO)
+    private Long id;
+
+    /** 账号 */
+    @ApiModelProperty(value = "账号")
+    @Excel(name = "账号")
+    @TableField(value = "account")
+    private String account;
+
+    /** 银行名称 */
+    @ApiModelProperty(value = "银行名称")
+    @Excel(name = "银行名称")
+    @TableField(value = "account_bank")
+    private String accountBank;
+
+    /** 添加时间 */
+    @ApiModelProperty(value = "添加时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "添加时间" , width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(value = "addtime")
+    private Date addtime;
+
+    /** 支行 */
+    @ApiModelProperty(value = "支行")
+    @Excel(name = "支行")
+    @TableField(value = "branch")
+    private String branch;
+
+    /** 是否默认 1:默认 0:非默认 */
+    @ApiModelProperty(value = "是否默认 1:默认 0:非默认")
+    @Excel(name = "是否默认 1:默认 0:非默认")
+    @TableField(value = "is_default")
+    private Long isDefault;
+
+    /** 姓名 */
+    @ApiModelProperty(value = "姓名")
+    @Excel(name = "姓名")
+    @TableField(value = "name")
+    private String name;
+
+    /** 账号类型 1:表示支付宝 2:表示微信 3:表示银行卡 */
+    @ApiModelProperty(value = "账号类型 1:表示支付宝 2:表示微信 3:表示银行卡")
+    @Excel(name = "账号类型 1:表示支付宝 2:表示微信 3:表示银行卡")
+    @TableField(value = "type")
+    private Long type;
+
+    /** 用户ID */
+    @ApiModelProperty(value = "用户ID")
+    @Excel(name = "用户ID")
+    @TableField(value = "uid")
+    private Long uid;
+
+}

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.game.common.annotation.Excel;
 import com.game.common.constant.finance.FinTranAddedInfo;
 import com.game.common.constant.finance.FinTranType1;
@@ -95,6 +96,7 @@ private static final long serialVersionUID=1L;
     /** 创建时间 */
     @ApiModelProperty(value = "创建时间")
     @TableField(value = "create_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
     private Date createTime;
 
     /** 货币类型 1:人民币 2:金币 3:映票 4:余额 */

+ 246 - 0
game-business/src/main/java/com/game/business/domain/ShopBusinessOrder.java

@@ -0,0 +1,246 @@
+package com.game.business.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.game.common.annotation.Excel;
+import com.game.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 购物订单对象 shop_business_order
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+@ApiModel(value = "shop_business_order", description = "购物订单")
+@TableName(value= "shop_business_order")
+@Data
+public class ShopBusinessOrder
+        {
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "$column.columnComment")
+    @TableId(value = "id" , type = IdType.AUTO)
+    private Long id;
+
+    /** 添加时间 */
+    @ApiModelProperty(value = "添加时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "添加时间" , width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(value = "add_time")
+    private Date addTime;
+
+    /**  收货人地址 */
+    @ApiModelProperty(value = " 收货人地址")
+    @Excel(name = " 收货人地址")
+    @TableField(value = "address")
+    private String address;
+
+    /**  收货人地址id */
+    @ApiModelProperty(value = " 收货人地址id")
+    @Excel(name = " 收货人地址id")
+    @TableField(value = "address_id")
+    private Long addressId;
+
+    /**  用户id */
+    @ApiModelProperty(value = " 用户id")
+    @Excel(name = " 用户id")
+    @TableField(value = "anchor_id")
+    private Long anchorId;
+
+    /**  申请退款审核不通过原因 */
+    @ApiModelProperty(value = " 申请退款审核不通过原因")
+    @Excel(name = " 申请退款审核不通过原因")
+    @TableField(value = "audit_failure_reason")
+    private String auditFailureReason;
+
+    /**  商家id */
+    @ApiModelProperty(value = " 商家id")
+    @Excel(name = " 商家id")
+    @TableField(value = "business_id")
+    private Long businessId;
+
+    /**  商家logo */
+    @ApiModelProperty(value = " 商家logo")
+    @Excel(name = " 商家logo")
+    @TableField(value = "business_logo")
+    private String businessLogo;
+
+    /**  商家名称 */
+    @ApiModelProperty(value = " 商家名称")
+    @Excel(name = " 商家名称")
+    @TableField(value = "business_name")
+    private String businessName;
+
+    /**  订单来源id */
+    @ApiModelProperty(value = " 订单来源id")
+    @Excel(name = " 订单来源id")
+    @TableField(value = "goods_channel_id")
+    private Long goodsChannelId;
+
+    /** 是否人工退款 1:是 2:否 */
+    @ApiModelProperty(value = "是否人工退款 1:是 2:否")
+    @Excel(name = "是否人工退款 1:是 2:否")
+    @TableField(value = "is_manual_refund")
+    private Long isManualRefund;
+
+    /**  发货物流id */
+    @ApiModelProperty(value = " 发货物流id")
+    @Excel(name = " 发货物流id")
+    @TableField(value = "logistics_id")
+    private Long logisticsId;
+
+    /** 人工退款金额 */
+    @ApiModelProperty(value = "人工退款金额")
+    @Excel(name = "人工退款金额")
+    @TableField(value = "manual_refund_money")
+    private BigDecimal manualRefundMoney;
+
+    /** 人工退款操作人 */
+    @ApiModelProperty(value = "人工退款操作人")
+    @Excel(name = "人工退款操作人")
+    @TableField(value = "manual_refund_operator")
+    private String manualRefundOperator;
+
+    /** 人工退款方式 1:支付宝 2:微信 3:人工转账 */
+    @ApiModelProperty(value = "人工退款方式 1:支付宝 2:微信 3:人工转账")
+    @Excel(name = "人工退款方式 1:支付宝 2:微信 3:人工转账")
+    @TableField(value = "manual_refund_type")
+    private Long manualRefundType;
+
+    /**  收货人姓名 */
+    @ApiModelProperty(value = " 收货人姓名")
+    @Excel(name = " 收货人姓名")
+    @TableField(value = "name")
+    private String name;
+
+    /**  订单金额 */
+    @ApiModelProperty(value = " 订单金额")
+    @Excel(name = " 订单金额")
+    @TableField(value = "order_amount")
+    private BigDecimal orderAmount;
+
+    /**  订单号 */
+    @ApiModelProperty(value = " 订单号")
+    @Excel(name = " 订单号")
+    @TableField(value = "order_num")
+    private String orderNum;
+
+    /**  父订单(支付订单)id */
+    @ApiModelProperty(value = " 父订单(支付订单)id")
+    @Excel(name = " 父订单(支付订单)id")
+    @TableField(value = "pay_id")
+    private Long payId;
+
+    /**  收货人手机号 */
+    @ApiModelProperty(value = " 收货人手机号")
+    @Excel(name = " 收货人手机号")
+    @TableField(value = "phone_num")
+    private String phoneNum;
+
+    /**  用户支付订单号(平台的) */
+    @ApiModelProperty(value = " 用户支付订单号(平台的)")
+    @Excel(name = " 用户支付订单号" , readConverterExp = "平=台的")
+    @TableField(value = "platform_pay_order")
+    private String platformPayOrder;
+
+    /** 退货订单状态 1:待审核 2:待发货 3:待收货 4:退款中 5:退款完成 6:退款失败 7:审核拒绝 */
+    @ApiModelProperty(value = "退货订单状态 1:待审核 2:待发货 3:待收货 4:退款中 5:退款完成 6:退款失败 7:审核拒绝")
+    @Excel(name = "退货订单状态 1:待审核 2:待发货 3:待收货 4:退款中 5:退款完成 6:退款失败 7:审核拒绝")
+    @TableField(value = "quit_status")
+    private Long quitStatus;
+
+    /**  申请退款原因 */
+    @ApiModelProperty(value = " 申请退款原因")
+    @Excel(name = " 申请退款原因")
+    @TableField(value = "reason")
+    private String reason;
+
+    /**  退货物流id */
+    @ApiModelProperty(value = " 退货物流id")
+    @Excel(name = " 退货物流id")
+    @TableField(value = "refund_logistics_id")
+    private Long refundLogisticsId;
+
+    /** 申请退款备注 */
+    @ApiModelProperty(value = "申请退款备注")
+    @Excel(name = "申请退款备注")
+    @TableField(value = "refund_notes")
+    private String refundNotes;
+
+    /** 退款备注图片 */
+    @ApiModelProperty(value = "退款备注图片")
+    @Excel(name = "退款备注图片")
+    @TableField(value = "refund_notes_images")
+    private String refundNotesImages;
+
+    /** 退款订单号 */
+    @ApiModelProperty(value = "退款订单号")
+    @Excel(name = "退款订单号")
+    @TableField(value = "refund_order_num")
+    private String refundOrderNum;
+
+    /** 退款完成时间 */
+    @ApiModelProperty(value = "退款完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "退款完成时间" , width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(value = "refund_time")
+    private Date refundTime;
+
+    /** 退款类型 1.仅退款 2.退货退款 */
+    @ApiModelProperty(value = "退款类型 1.仅退款 2.退货退款")
+    @Excel(name = "退款类型 1.仅退款 2.退货退款")
+    @TableField(value = "refund_type")
+    private Long refundType;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    @Excel(name = "备注")
+    @TableField(value = "remake")
+    private String remake;
+
+    /** 订单状态 1:待付款 2:待发货 3:待收货 4:订单完成 5:已取消 */
+    @ApiModelProperty(value = "订单状态 1:待付款 2:待发货 3:待收货 4:订单完成 5:已取消")
+    @Excel(name = "订单状态 1:待付款 2:待发货 3:待收货 4:订单完成 5:已取消")
+    @TableField(value = "status")
+    private Long status;
+
+    /**  任务id */
+    @ApiModelProperty(value = " 任务id")
+    @Excel(name = " 任务id")
+    @TableField(value = "task_id")
+    private Long taskId;
+
+    /**  交易金额(实付金额) */
+    @ApiModelProperty(value = " 交易金额(实付金额)")
+    @Excel(name = " 交易金额(实付金额)")
+    @TableField(value = "transaction_amount")
+    private BigDecimal transactionAmount;
+
+    /** 交易成功时间 */
+    @ApiModelProperty(value = "交易成功时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "交易成功时间" , width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(value = "transaction_time")
+    private Date transactionTime;
+
+    /**  用户id */
+    @ApiModelProperty(value = " 用户id")
+    @Excel(name = " 用户id")
+    @TableField(value = "uid")
+    private Long uid;
+
+    @TableField(exist = false)
+    private String productNames;
+
+}

+ 133 - 0
game-business/src/main/java/com/game/business/domain/ShopSubOrder.java

@@ -0,0 +1,133 @@
+package com.game.business.domain;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.game.common.annotation.Excel;
+import com.game.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 订单商品对象 shop_sub_order
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+@ApiModel(value = "shop_sub_order", description = "订单商品")
+@TableName(value= "shop_sub_order")
+@Data
+public class ShopSubOrder
+        {
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @ApiModelProperty(value = "$column.columnComment")
+    @TableId(value = "id" , type = IdType.AUTO)
+    private Long id;
+
+    /** 添加时间 */
+    @ApiModelProperty(value = "添加时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "添加时间" , width = 30, dateFormat = "yyyy-MM-dd")
+    @TableField(value = "add_time")
+    private Date addTime;
+
+    /**  商家id */
+    @ApiModelProperty(value = " 商家id")
+    @Excel(name = " 商家id")
+    @TableField(value = "business_id")
+    private Long businessId;
+
+    /**  商家订单id */
+    @ApiModelProperty(value = " 商家订单id")
+    @Excel(name = " 商家订单id")
+    @TableField(value = "business_order_id")
+    private Long businessOrderId;
+
+    /**  skuId */
+    @ApiModelProperty(value = " skuId")
+    @Excel(name = " skuId")
+    @TableField(value = "compose_id")
+    private Long composeId;
+
+    /**  商品id */
+    @ApiModelProperty(value = " 商品id")
+    @Excel(name = " 商品id")
+    @TableField(value = "goods_id")
+    private Long goodsId;
+
+    /**  商品名称 */
+    @ApiModelProperty(value = " 商品名称")
+    @Excel(name = " 商品名称")
+    @TableField(value = "goods_name")
+    private String goodsName;
+
+    /**  商品数量 */
+    @ApiModelProperty(value = " 商品数量")
+    @Excel(name = " 商品数量")
+    @TableField(value = "goods_num")
+    private Long goodsNum;
+
+    /** 商品简介图片地址  */
+    @ApiModelProperty(value = "商品简介图片地址 ")
+    @Excel(name = "商品简介图片地址 ")
+    @TableField(value = "goods_picture")
+    private String goodsPicture;
+
+    /**  商品价格 */
+    @ApiModelProperty(value = " 商品价格")
+    @Excel(name = " 商品价格")
+    @TableField(value = "goods_price")
+    private BigDecimal goodsPrice;
+
+    /**  物流名称 */
+    @ApiModelProperty(value = " 物流名称")
+    @Excel(name = " 物流名称")
+    @TableField(value = "logistics_name")
+    private String logisticsName;
+
+    /**  物流单号 */
+    @ApiModelProperty(value = " 物流单号")
+    @Excel(name = " 物流单号")
+    @TableField(value = "logistics_num")
+    private String logisticsNum;
+
+    /**  订单号 */
+    @ApiModelProperty(value = " 订单号")
+    @Excel(name = " 订单号")
+    @TableField(value = "order_num")
+    private String orderNum;
+
+    /**  父订单(支付订单)id */
+    @ApiModelProperty(value = " 父订单(支付订单)id")
+    @Excel(name = " 父订单(支付订单)id")
+    @TableField(value = "pay_id")
+    private Long payId;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注")
+    @Excel(name = "备注")
+    @TableField(value = "remake")
+    private String remake;
+
+    /**  sku组合名称 */
+    @ApiModelProperty(value = " sku组合名称")
+    @Excel(name = " sku组合名称")
+    @TableField(value = "sku_name")
+    private String skuName;
+
+    /** 订单状态 1:待付款 2:待发货 3:待收货 4:已完成 5:已取消 */
+    @ApiModelProperty(value = "订单状态 1:待付款 2:待发货 3:待收货 4:已完成 5:已取消")
+    @Excel(name = "订单状态 1:待付款 2:待发货 3:待收货 4:已完成 5:已取消")
+    @TableField(value = "status")
+    private Long status;
+
+}

+ 20 - 0
game-business/src/main/java/com/game/business/dto/OrderSendDTO.java

@@ -0,0 +1,20 @@
+package com.game.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class OrderSendDTO implements Serializable {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "物流名称")
+    private String logisticsName;
+
+    @ApiModelProperty(value = "物流单号")
+    private String logisticsNum;
+
+}

+ 49 - 0
game-business/src/main/java/com/game/business/mapper/AppGameBettingMapper.java

@@ -23,4 +23,53 @@ public interface AppGameBettingMapper extends BaseMapper<AppGameBetting> {
 
     Integer getBettingCount(@Param(value = "userId") Long userId, @Param(value = "gameId") Long gameId, @Param(value = "gameDate") String gameDate, @Param(value = "bettingItem") String bettingItem);
     BigDecimal getBettingAmount(@Param(value = "userId") Long userId, @Param(value = "gameId") Long gameId, @Param(value = "gameDate") String gameDate, @Param(value = "bettingItem") String bettingItem);
+
+    /**
+     * 查询用户下注记录
+     *
+     * @param id 用户下注记录主键
+     * @return 用户下注记录
+     */
+    public AppGameBetting selectAppGameBettingById(Long id);
+
+    /**
+     * 查询用户下注记录列表
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 用户下注记录集合
+     */
+    public List<AppGameBetting> selectAppGameBettingList(AppGameBetting appGameBetting);
+
+    /**
+     * 新增用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    public int insertAppGameBetting(AppGameBetting appGameBetting);
+
+    /**
+     * 修改用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    public int updateAppGameBetting(AppGameBetting appGameBetting);
+
+    /**
+     * 删除用户下注记录
+     *
+     * @param id 用户下注记录主键
+     * @return 结果
+     */
+    public int deleteAppGameBettingById(Long id);
+
+    /**
+     * 批量删除用户下注记录
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAppGameBettingByIds(Long[] ids);
+
 }

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

@@ -85,4 +85,10 @@ public interface AppUserAgentMapper extends BaseMapper<AppUserAgent> {
      *
      */
     public List<AppUserAgent> selectAllAgentList(@Param("pid") Long pid, @Param("userId") Long userId,@Param("beginTime") String beginTime, @Param("endTime") String endTime);
+
+    /**
+     * 查询上级用户列表(递归)
+     *
+     */
+    public List<AppUserAgent> selectSuperList(@Param("userId") Long userId);
 }

+ 61 - 0
game-business/src/main/java/com/game/business/mapper/AppUsersCashAccountMapper.java

@@ -0,0 +1,61 @@
+package com.game.business.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.game.business.domain.AppUsersCashAccount;
+
+/**
+ * 用户提现账号Mapper接口
+ *
+ * @author game
+ * @date 2024-09-07
+ */
+public interface AppUsersCashAccountMapper extends BaseMapper<AppUsersCashAccount> {
+    /**
+     * 查询用户提现账号
+     *
+     * @param id 用户提现账号主键
+     * @return 用户提现账号
+     */
+    public AppUsersCashAccount selectAppUsersCashAccountById(Long id);
+
+    /**
+     * 查询用户提现账号列表
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 用户提现账号集合
+     */
+    public List<AppUsersCashAccount> selectAppUsersCashAccountList(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 新增用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    public int insertAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 修改用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    public int updateAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 删除用户提现账号
+     *
+     * @param id 用户提现账号主键
+     * @return 结果
+     */
+    public int deleteAppUsersCashAccountById(Long id);
+
+    /**
+     * 批量删除用户提现账号
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAppUsersCashAccountByIds(Long[] ids);
+}

+ 61 - 0
game-business/src/main/java/com/game/business/mapper/ShopBusinessOrderMapper.java

@@ -0,0 +1,61 @@
+package com.game.business.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.game.business.domain.ShopBusinessOrder;
+
+/**
+ * 购物订单Mapper接口
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+public interface ShopBusinessOrderMapper extends BaseMapper<ShopBusinessOrder> {
+    /**
+     * 查询购物订单
+     *
+     * @param id 购物订单主键
+     * @return 购物订单
+     */
+    public ShopBusinessOrder selectShopBusinessOrderById(Long id);
+
+    /**
+     * 查询购物订单列表
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 购物订单集合
+     */
+    public List<ShopBusinessOrder> selectShopBusinessOrderList(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 新增购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    public int insertShopBusinessOrder(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 修改购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    public int updateShopBusinessOrder(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 删除购物订单
+     *
+     * @param id 购物订单主键
+     * @return 结果
+     */
+    public int deleteShopBusinessOrderById(Long id);
+
+    /**
+     * 批量删除购物订单
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteShopBusinessOrderByIds(Long[] ids);
+}

+ 61 - 0
game-business/src/main/java/com/game/business/mapper/ShopSubOrderMapper.java

@@ -0,0 +1,61 @@
+package com.game.business.mapper;
+
+import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.game.business.domain.ShopSubOrder;
+
+/**
+ * 订单商品Mapper接口
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+public interface ShopSubOrderMapper extends BaseMapper<ShopSubOrder> {
+    /**
+     * 查询订单商品
+     *
+     * @param id 订单商品主键
+     * @return 订单商品
+     */
+    public ShopSubOrder selectShopSubOrderById(Long id);
+
+    /**
+     * 查询订单商品列表
+     *
+     * @param shopSubOrder 订单商品
+     * @return 订单商品集合
+     */
+    public List<ShopSubOrder> selectShopSubOrderList(ShopSubOrder shopSubOrder);
+
+    /**
+     * 新增订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    public int insertShopSubOrder(ShopSubOrder shopSubOrder);
+
+    /**
+     * 修改订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    public int updateShopSubOrder(ShopSubOrder shopSubOrder);
+
+    /**
+     * 删除订单商品
+     *
+     * @param id 订单商品主键
+     * @return 结果
+     */
+    public int deleteShopSubOrderById(Long id);
+
+    /**
+     * 批量删除订单商品
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteShopSubOrderByIds(Long[] ids);
+}

+ 48 - 0
game-business/src/main/java/com/game/business/service/IAppGameBettingService.java

@@ -43,4 +43,52 @@ public interface IAppGameBettingService extends IService<AppGameBetting> {
     Integer getBettingCount(Long userId, Long gameId, String gameDate, String bettingItem);
 
     BigDecimal getBettingAmount(Long userId, Long gameId, String gameDate, String bettingItem);
+
+    /**
+     * 查询用户下注记录
+     *
+     * @param id 用户下注记录主键
+     * @return 用户下注记录
+     */
+    public AppGameBetting selectAppGameBettingById(Long id);
+
+    /**
+     * 查询用户下注记录列表
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 用户下注记录集合
+     */
+    public List<AppGameBetting> selectAppGameBettingList(AppGameBetting appGameBetting);
+
+    /**
+     * 新增用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    public int insertAppGameBetting(AppGameBetting appGameBetting);
+
+    /**
+     * 修改用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    public int updateAppGameBetting(AppGameBetting appGameBetting);
+
+    /**
+     * 批量删除用户下注记录
+     *
+     * @param ids 需要删除的用户下注记录主键集合
+     * @return 结果
+     */
+    public int deleteAppGameBettingByIds(Long[] ids);
+
+    /**
+     * 删除用户下注记录信息
+     *
+     * @param id 用户下注记录主键
+     * @return 结果
+     */
+    public int deleteAppGameBettingById(Long id);
 }

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

@@ -96,5 +96,10 @@ public interface IAppUserAgentService extends IService<AppUserAgent> {
      * */
     public List<AppUserAgent> selectAllAgentList(Long pid,Long userId,String beginTime,String endTime);
 
+    /**
+     * 递归查询所有上级代理(包含自己)
+     * */
+    public List<AppUserAgent> selectSuperList(Long userId);
+
     public AppUserAgent selectInfo(Long userId);
 }

+ 5 - 0
game-business/src/main/java/com/game/business/service/IAppUserGameRecordCountService.java

@@ -12,4 +12,9 @@ public interface IAppUserGameRecordCountService extends IService<AppUserGameReco
      * */
     public List<AppUserGameRecordCount> selectByDate(Long userId, String startDate, String endDate,Long gameId,String gameDate);
 
+    /**
+     * 根据日期查询用户当日统计情况
+     * */
+    public List<AppUserGameRecordCount> liveCommission(Long userId);
+
 }

+ 61 - 0
game-business/src/main/java/com/game/business/service/IAppUsersCashAccountService.java

@@ -0,0 +1,61 @@
+package com.game.business.service;
+
+import java.util.List;
+import com.game.business.domain.AppUsersCashAccount;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 用户提现账号Service接口
+ *
+ * @author game
+ * @date 2024-09-07
+ */
+public interface IAppUsersCashAccountService extends IService<AppUsersCashAccount> {
+    /**
+     * 查询用户提现账号
+     *
+     * @param id 用户提现账号主键
+     * @return 用户提现账号
+     */
+    public AppUsersCashAccount selectAppUsersCashAccountById(Long id);
+
+    /**
+     * 查询用户提现账号列表
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 用户提现账号集合
+     */
+    public List<AppUsersCashAccount> selectAppUsersCashAccountList(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 新增用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    public int insertAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 修改用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    public int updateAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount);
+
+    /**
+     * 批量删除用户提现账号
+     *
+     * @param ids 需要删除的用户提现账号主键集合
+     * @return 结果
+     */
+    public int deleteAppUsersCashAccountByIds(Long[] ids);
+
+    /**
+     * 删除用户提现账号信息
+     *
+     * @param id 用户提现账号主键
+     * @return 结果
+     */
+    public int deleteAppUsersCashAccountById(Long id);
+}

+ 61 - 0
game-business/src/main/java/com/game/business/service/IShopBusinessOrderService.java

@@ -0,0 +1,61 @@
+package com.game.business.service;
+
+import java.util.List;
+import com.game.business.domain.ShopBusinessOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 购物订单Service接口
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+public interface IShopBusinessOrderService extends IService<ShopBusinessOrder> {
+    /**
+     * 查询购物订单
+     *
+     * @param id 购物订单主键
+     * @return 购物订单
+     */
+    public ShopBusinessOrder selectShopBusinessOrderById(Long id);
+
+    /**
+     * 查询购物订单列表
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 购物订单集合
+     */
+    public List<ShopBusinessOrder> selectShopBusinessOrderList(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 新增购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    public int insertShopBusinessOrder(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 修改购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    public int updateShopBusinessOrder(ShopBusinessOrder shopBusinessOrder);
+
+    /**
+     * 批量删除购物订单
+     *
+     * @param ids 需要删除的购物订单主键集合
+     * @return 结果
+     */
+    public int deleteShopBusinessOrderByIds(Long[] ids);
+
+    /**
+     * 删除购物订单信息
+     *
+     * @param id 购物订单主键
+     * @return 结果
+     */
+    public int deleteShopBusinessOrderById(Long id);
+}

+ 61 - 0
game-business/src/main/java/com/game/business/service/IShopSubOrderService.java

@@ -0,0 +1,61 @@
+package com.game.business.service;
+
+import java.util.List;
+import com.game.business.domain.ShopSubOrder;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 订单商品Service接口
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+public interface IShopSubOrderService extends IService<ShopSubOrder> {
+    /**
+     * 查询订单商品
+     *
+     * @param id 订单商品主键
+     * @return 订单商品
+     */
+    public ShopSubOrder selectShopSubOrderById(Long id);
+
+    /**
+     * 查询订单商品列表
+     *
+     * @param shopSubOrder 订单商品
+     * @return 订单商品集合
+     */
+    public List<ShopSubOrder> selectShopSubOrderList(ShopSubOrder shopSubOrder);
+
+    /**
+     * 新增订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    public int insertShopSubOrder(ShopSubOrder shopSubOrder);
+
+    /**
+     * 修改订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    public int updateShopSubOrder(ShopSubOrder shopSubOrder);
+
+    /**
+     * 批量删除订单商品
+     *
+     * @param ids 需要删除的订单商品主键集合
+     * @return 结果
+     */
+    public int deleteShopSubOrderByIds(Long[] ids);
+
+    /**
+     * 删除订单商品信息
+     *
+     * @param id 订单商品主键
+     * @return 结果
+     */
+    public int deleteShopSubOrderById(Long id);
+}

+ 69 - 0
game-business/src/main/java/com/game/business/service/impl/AppGameBettingServiceImpl.java

@@ -10,6 +10,7 @@ import com.game.business.mapper.AppGameBettingMapper;
 import com.game.business.service.IAppGameBettingService;
 import com.game.business.vo.AppUserGameBettingCountVO;
 import com.game.business.vo.AppUserGameBettingDetailsCountVO;
+import com.game.common.utils.DateUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -141,5 +142,73 @@ public class AppGameBettingServiceImpl extends ServiceImpl<AppGameBettingMapper,
         return appGameBettingMapper.getBettingAmount(userId, gameId, gameDate, bettingItem);
     }
 
+    /**
+     * 查询用户下注记录
+     *
+     * @param id 用户下注记录主键
+     * @return 用户下注记录
+     */
+    @Override
+    public AppGameBetting selectAppGameBettingById(Long id) {
+        return appGameBettingMapper.selectAppGameBettingById(id);
+    }
+
+    /**
+     * 查询用户下注记录列表
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 用户下注记录
+     */
+    @Override
+    public List<AppGameBetting> selectAppGameBettingList(AppGameBetting appGameBetting) {
+        return appGameBettingMapper.selectAppGameBettingList(appGameBetting);
+    }
+
+    /**
+     * 新增用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    @Override
+    public int insertAppGameBetting(AppGameBetting appGameBetting) {
+        appGameBetting.setCreateTime(DateUtils.getNowDate());
+        return appGameBettingMapper.insertAppGameBetting(appGameBetting);
+    }
+
+    /**
+     * 修改用户下注记录
+     *
+     * @param appGameBetting 用户下注记录
+     * @return 结果
+     */
+    @Override
+    public int updateAppGameBetting(AppGameBetting appGameBetting) {
+        appGameBetting.setUpdateTime(DateUtils.getNowDate());
+        return appGameBettingMapper.updateAppGameBetting(appGameBetting);
+    }
+
+    /**
+     * 批量删除用户下注记录
+     *
+     * @param ids 需要删除的用户下注记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAppGameBettingByIds(Long[] ids) {
+        return appGameBettingMapper.deleteAppGameBettingByIds(ids);
+    }
+
+    /**
+     * 删除用户下注记录信息
+     *
+     * @param id 用户下注记录主键
+     * @return 结果
+     */
+    @Override
+    public int deleteAppGameBettingById(Long id) {
+        return appGameBettingMapper.deleteAppGameBettingById(id);
+    }
+
 
 }

+ 9 - 0
game-business/src/main/java/com/game/business/service/impl/AppUserAgentServiceImpl.java

@@ -339,6 +339,15 @@ public class AppUserAgentServiceImpl extends ServiceImpl<AppUserAgentMapper, App
         return list;
     }
 
+    @Override
+    public List<AppUserAgent> selectSuperList(Long userId) {
+        List<AppUserAgent> list = appUserAgentMapper.selectSuperList(userId);
+        if(null == list){
+            list = new ArrayList<>();
+        }
+        return list;
+    }
+
     @Override
     public AppUserAgent selectInfo(Long userId) {
         LambdaQueryWrapper<AppUserAgent> queryWrapper = new LambdaQueryWrapper<>();

+ 22 - 0
game-business/src/main/java/com/game/business/service/impl/AppUserGameRecordCountServiceImpl.java

@@ -2,8 +2,10 @@ package com.game.business.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.game.business.domain.AppGame;
 import com.game.business.domain.AppUserGameRecordCount;
 import com.game.business.mapper.AppUserGameRecordCountMapper;
+import com.game.business.service.IAppGameService;
 import com.game.business.service.IAppUserGameRecordCountService;
 import com.game.business.util.StringUtils;
 import com.game.common.annotation.DataSource;
@@ -20,6 +22,9 @@ public class AppUserGameRecordCountServiceImpl extends ServiceImpl<AppUserGameRe
     @Autowired
     private AppUserGameRecordCountMapper appUserGameRecordCountMapper;
 
+    @Autowired
+    private IAppGameService appGameService;
+
     @Override
     public List<AppUserGameRecordCount> selectByDate(Long userId, String startDate, String endDate,Long gameId,String gameDate) {
         LambdaQueryWrapper<AppUserGameRecordCount> queryWrapper = new LambdaQueryWrapper<>();
@@ -41,4 +46,21 @@ public class AppUserGameRecordCountServiceImpl extends ServiceImpl<AppUserGameRe
         return appUserGameRecordCountMapper.selectList(queryWrapper);
     }
 
+    @Override
+    public List<AppUserGameRecordCount> liveCommission(Long userId) {
+        LambdaQueryWrapper<AppUserGameRecordCount> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper.eq(AppUserGameRecordCount::getType,1);
+        queryWrapper.eq(AppUserGameRecordCount::getUserId, userId);
+        List<AppUserGameRecordCount> list = appUserGameRecordCountMapper.selectList(queryWrapper);
+        if(null != list && list.size() > 0){
+            list.forEach(e->{
+                AppGame appGame = appGameService.selectAppGameById(e.getGameId());
+                if(null != appGame){
+                    e.setGameName(appGame.getName());
+                }
+            });
+        }
+        return list;
+    }
+
 }

+ 95 - 0
game-business/src/main/java/com/game/business/service/impl/AppUsersCashAccountServiceImpl.java

@@ -0,0 +1,95 @@
+package com.game.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.game.business.mapper.AppUsersCashAccountMapper;
+import com.game.business.domain.AppUsersCashAccount;
+import com.game.business.service.IAppUsersCashAccountService;
+import com.game.common.annotation.DataSource;
+import com.game.common.enums.DataSourceType;
+
+/**
+ * 用户提现账号Service业务层处理
+ *
+ * @author game
+ * @date 2024-09-07
+ */
+@Service
+public class AppUsersCashAccountServiceImpl extends ServiceImpl<AppUsersCashAccountMapper, AppUsersCashAccount> implements IAppUsersCashAccountService {
+    @Autowired
+    private AppUsersCashAccountMapper appUsersCashAccountMapper;
+
+    /**
+     * 查询用户提现账号
+     *
+     * @param id 用户提现账号主键
+     * @return 用户提现账号
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public AppUsersCashAccount selectAppUsersCashAccountById(Long id) {
+        return appUsersCashAccountMapper.selectAppUsersCashAccountById(id);
+    }
+
+    /**
+     * 查询用户提现账号列表
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 用户提现账号
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public List<AppUsersCashAccount> selectAppUsersCashAccountList(AppUsersCashAccount appUsersCashAccount) {
+        return appUsersCashAccountMapper.selectAppUsersCashAccountList(appUsersCashAccount);
+    }
+
+    /**
+     * 新增用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int insertAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount) {
+            return appUsersCashAccountMapper.insertAppUsersCashAccount(appUsersCashAccount);
+    }
+
+    /**
+     * 修改用户提现账号
+     *
+     * @param appUsersCashAccount 用户提现账号
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int updateAppUsersCashAccount(AppUsersCashAccount appUsersCashAccount) {
+        return appUsersCashAccountMapper.updateAppUsersCashAccount(appUsersCashAccount);
+    }
+
+    /**
+     * 批量删除用户提现账号
+     *
+     * @param ids 需要删除的用户提现账号主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteAppUsersCashAccountByIds(Long[] ids) {
+        return appUsersCashAccountMapper.deleteAppUsersCashAccountByIds(ids);
+    }
+
+    /**
+     * 删除用户提现账号信息
+     *
+     * @param id 用户提现账号主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteAppUsersCashAccountById(Long id) {
+        return appUsersCashAccountMapper.deleteAppUsersCashAccountById(id);
+    }
+}

+ 95 - 0
game-business/src/main/java/com/game/business/service/impl/ShopBusinessOrderServiceImpl.java

@@ -0,0 +1,95 @@
+package com.game.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.game.business.mapper.ShopBusinessOrderMapper;
+import com.game.business.domain.ShopBusinessOrder;
+import com.game.business.service.IShopBusinessOrderService;
+import com.game.common.annotation.DataSource;
+import com.game.common.enums.DataSourceType;
+
+/**
+ * 购物订单Service业务层处理
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+@Service
+public class ShopBusinessOrderServiceImpl extends ServiceImpl<ShopBusinessOrderMapper, ShopBusinessOrder> implements IShopBusinessOrderService {
+    @Autowired
+    private ShopBusinessOrderMapper shopBusinessOrderMapper;
+
+    /**
+     * 查询购物订单
+     *
+     * @param id 购物订单主键
+     * @return 购物订单
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public ShopBusinessOrder selectShopBusinessOrderById(Long id) {
+        return shopBusinessOrderMapper.selectShopBusinessOrderById(id);
+    }
+
+    /**
+     * 查询购物订单列表
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 购物订单
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public List<ShopBusinessOrder> selectShopBusinessOrderList(ShopBusinessOrder shopBusinessOrder) {
+        return shopBusinessOrderMapper.selectShopBusinessOrderList(shopBusinessOrder);
+    }
+
+    /**
+     * 新增购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int insertShopBusinessOrder(ShopBusinessOrder shopBusinessOrder) {
+            return shopBusinessOrderMapper.insertShopBusinessOrder(shopBusinessOrder);
+    }
+
+    /**
+     * 修改购物订单
+     *
+     * @param shopBusinessOrder 购物订单
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int updateShopBusinessOrder(ShopBusinessOrder shopBusinessOrder) {
+        return shopBusinessOrderMapper.updateShopBusinessOrder(shopBusinessOrder);
+    }
+
+    /**
+     * 批量删除购物订单
+     *
+     * @param ids 需要删除的购物订单主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteShopBusinessOrderByIds(Long[] ids) {
+        return shopBusinessOrderMapper.deleteShopBusinessOrderByIds(ids);
+    }
+
+    /**
+     * 删除购物订单信息
+     *
+     * @param id 购物订单主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteShopBusinessOrderById(Long id) {
+        return shopBusinessOrderMapper.deleteShopBusinessOrderById(id);
+    }
+}

+ 95 - 0
game-business/src/main/java/com/game/business/service/impl/ShopSubOrderServiceImpl.java

@@ -0,0 +1,95 @@
+package com.game.business.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.game.business.mapper.ShopSubOrderMapper;
+import com.game.business.domain.ShopSubOrder;
+import com.game.business.service.IShopSubOrderService;
+import com.game.common.annotation.DataSource;
+import com.game.common.enums.DataSourceType;
+
+/**
+ * 订单商品Service业务层处理
+ *
+ * @author game
+ * @date 2024-09-06
+ */
+@Service
+public class ShopSubOrderServiceImpl extends ServiceImpl<ShopSubOrderMapper, ShopSubOrder> implements IShopSubOrderService {
+    @Autowired
+    private ShopSubOrderMapper shopSubOrderMapper;
+
+    /**
+     * 查询订单商品
+     *
+     * @param id 订单商品主键
+     * @return 订单商品
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public ShopSubOrder selectShopSubOrderById(Long id) {
+        return shopSubOrderMapper.selectShopSubOrderById(id);
+    }
+
+    /**
+     * 查询订单商品列表
+     *
+     * @param shopSubOrder 订单商品
+     * @return 订单商品
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public List<ShopSubOrder> selectShopSubOrderList(ShopSubOrder shopSubOrder) {
+        return shopSubOrderMapper.selectShopSubOrderList(shopSubOrder);
+    }
+
+    /**
+     * 新增订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int insertShopSubOrder(ShopSubOrder shopSubOrder) {
+            return shopSubOrderMapper.insertShopSubOrder(shopSubOrder);
+    }
+
+    /**
+     * 修改订单商品
+     *
+     * @param shopSubOrder 订单商品
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int updateShopSubOrder(ShopSubOrder shopSubOrder) {
+        return shopSubOrderMapper.updateShopSubOrder(shopSubOrder);
+    }
+
+    /**
+     * 批量删除订单商品
+     *
+     * @param ids 需要删除的订单商品主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteShopSubOrderByIds(Long[] ids) {
+        return shopSubOrderMapper.deleteShopSubOrderByIds(ids);
+    }
+
+    /**
+     * 删除订单商品信息
+     *
+     * @param id 订单商品主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteShopSubOrderById(Long id) {
+        return shopSubOrderMapper.deleteShopSubOrderById(id);
+    }
+}

+ 23 - 0
game-business/src/main/java/com/game/business/vo/AppUserDetailVo.java

@@ -0,0 +1,23 @@
+package com.game.business.vo;
+
+import com.game.business.domain.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class AppUserDetailVo implements Serializable {
+
+    @ApiModelProperty(value = "上级用户列表")
+    private List<AppUserAgent> superUserList;
+
+    private Double dividendGuaranteeRate;
+    private Double liveRate;
+    List<AppGameCommission> gameCommissionList;
+    List<AppUser> ipUserList;
+    List<AppUsersCashAccount> usersCashAccounts;
+    List<ShopBusinessOrder> businessOrders;
+
+}

+ 128 - 0
game-business/src/main/resources/mapper/business/AppGameBettingMapper.xml

@@ -4,6 +4,27 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.game.business.mapper.AppGameBettingMapper">
 
+    <resultMap type="com.game.business.domain.AppGameBetting" id="AppGameBettingResult">
+        <result property="id"    column="id"    />
+        <result property="classId"    column="class_id"    />
+        <result property="gameId"    column="game_id"    />
+        <result property="userId"    column="user_id"    />
+        <result property="gameDate"    column="game_date"    />
+        <result property="liveUserId"    column="live_user_id"    />
+        <result property="liveRoomId"    column="live_room_id"    />
+        <result property="moneyId"    column="money_id"    />
+        <result property="isLive"    column="is_live"    />
+        <result property="bettingType"    column="betting_type"    />
+        <result property="bettingGameType"    column="betting_game_type"    />
+        <result property="bettingItem"    column="betting_item"    />
+        <result property="bettingMultiple"    column="betting_multiple"    />
+        <result property="bettingAmount"    column="betting_amount"    />
+        <result property="bettingCommission"    column="betting_commission"    />
+        <result property="isWinning"    column="is_winning"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateTime"    column="update_time"    />
+    </resultMap>
+
     <select id="getCount" resultType="com.game.business.vo.AppGameBettingDetailsCountVO">
         select
         game_id as gameId,
@@ -87,4 +108,111 @@
             and betting_item = #{bettingItem}
         </if>
     </select>
+
+    <sql id="selectAppGameBettingVo">
+        select id, class_id, game_id, user_id, game_date, live_user_id, live_room_id, money_id, is_live, betting_type, betting_game_type, betting_item, betting_multiple, betting_amount, betting_commission, is_winning, create_time, update_time from app_game_betting
+    </sql>
+
+    <select id="selectAppGameBettingList" parameterType="com.game.business.domain.AppGameBetting" resultMap="AppGameBettingResult">
+        <include refid="selectAppGameBettingVo"/>
+        <where>
+            <if test="classId != null "> and class_id = #{classId}</if>
+            <if test="gameId != null "> and game_id = #{gameId}</if>
+            <if test="userId != null "> and user_id = #{userId}</if>
+            <if test="gameDate != null  and gameDate != ''"> and game_date = #{gameDate}</if>
+            <if test="liveUserId != null "> and live_user_id = #{liveUserId}</if>
+            <if test="liveRoomId != null "> and live_room_id = #{liveRoomId}</if>
+            <if test="moneyId != null "> and money_id = #{moneyId}</if>
+            <if test="isLive != null  and isLive != ''"> and is_live = #{isLive}</if>
+            <if test="bettingType != null  and bettingType != ''"> and betting_type = #{bettingType}</if>
+            <if test="bettingGameType != null  and bettingGameType != ''"> and betting_game_type = #{bettingGameType}</if>
+            <if test="bettingItem != null  and bettingItem != ''"> and betting_item = #{bettingItem}</if>
+            <if test="bettingMultiple != null "> and betting_multiple = #{bettingMultiple}</if>
+            <if test="bettingAmount != null "> and betting_amount = #{bettingAmount}</if>
+            <if test="bettingCommission != null "> and betting_commission = #{bettingCommission}</if>
+            <if test="isWinning != null  and isWinning != ''"> and is_winning = #{isWinning}</if>
+        </where>
+    </select>
+
+    <select id="selectAppGameBettingById" parameterType="Long" resultMap="AppGameBettingResult">
+        <include refid="selectAppGameBettingVo"/>
+        where id = #{id}
+    </select>
+
+    <insert id="insertAppGameBetting" parameterType="com.game.business.domain.AppGameBetting" useGeneratedKeys="true" keyProperty="id">
+        insert into app_game_betting
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="classId != null">class_id,</if>
+            <if test="gameId != null">game_id,</if>
+            <if test="userId != null">user_id,</if>
+            <if test="gameDate != null">game_date,</if>
+            <if test="liveUserId != null">live_user_id,</if>
+            <if test="liveRoomId != null">live_room_id,</if>
+            <if test="moneyId != null">money_id,</if>
+            <if test="isLive != null">is_live,</if>
+            <if test="bettingType != null">betting_type,</if>
+            <if test="bettingGameType != null">betting_game_type,</if>
+            <if test="bettingItem != null">betting_item,</if>
+            <if test="bettingMultiple != null">betting_multiple,</if>
+            <if test="bettingAmount != null">betting_amount,</if>
+            <if test="bettingCommission != null">betting_commission,</if>
+            <if test="isWinning != null">is_winning,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateTime != null">update_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="classId != null">#{classId},</if>
+            <if test="gameId != null">#{gameId},</if>
+            <if test="userId != null">#{userId},</if>
+            <if test="gameDate != null">#{gameDate},</if>
+            <if test="liveUserId != null">#{liveUserId},</if>
+            <if test="liveRoomId != null">#{liveRoomId},</if>
+            <if test="moneyId != null">#{moneyId},</if>
+            <if test="isLive != null">#{isLive},</if>
+            <if test="bettingType != null">#{bettingType},</if>
+            <if test="bettingGameType != null">#{bettingGameType},</if>
+            <if test="bettingItem != null">#{bettingItem},</if>
+            <if test="bettingMultiple != null">#{bettingMultiple},</if>
+            <if test="bettingAmount != null">#{bettingAmount},</if>
+            <if test="bettingCommission != null">#{bettingCommission},</if>
+            <if test="isWinning != null">#{isWinning},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateAppGameBetting" parameterType="com.game.business.domain.AppGameBetting">
+        update app_game_betting
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="classId != null">class_id = #{classId},</if>
+            <if test="gameId != null">game_id = #{gameId},</if>
+            <if test="userId != null">user_id = #{userId},</if>
+            <if test="gameDate != null">game_date = #{gameDate},</if>
+            <if test="liveUserId != null">live_user_id = #{liveUserId},</if>
+            <if test="liveRoomId != null">live_room_id = #{liveRoomId},</if>
+            <if test="moneyId != null">money_id = #{moneyId},</if>
+            <if test="isLive != null">is_live = #{isLive},</if>
+            <if test="bettingType != null">betting_type = #{bettingType},</if>
+            <if test="bettingGameType != null">betting_game_type = #{bettingGameType},</if>
+            <if test="bettingItem != null">betting_item = #{bettingItem},</if>
+            <if test="bettingMultiple != null">betting_multiple = #{bettingMultiple},</if>
+            <if test="bettingAmount != null">betting_amount = #{bettingAmount},</if>
+            <if test="bettingCommission != null">betting_commission = #{bettingCommission},</if>
+            <if test="isWinning != null">is_winning = #{isWinning},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAppGameBettingById" parameterType="Long">
+        delete from app_game_betting where id = #{id}
+    </delete>
+
+    <delete id="deleteAppGameBettingByIds" parameterType="String">
+        delete from app_game_betting where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
 </mapper>

+ 15 - 0
game-business/src/main/resources/mapper/business/AppUserAgentMapper.xml

@@ -248,4 +248,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         union all
         select * from app_user_agent where user_id = #{pid}
     </select>
+
+    <select id="selectSuperList"  resultMap="AppUserAgentResult">
+        WITH RECURSIVE useragent AS
+           (
+               SELECT *
+               FROM app_user_agent
+               WHERE user_id = #{userId}
+               UNION ALL
+
+               SELECT o.*
+               FROM app_user_agent o
+                        JOIN useragent s ON o.user_id = s.pid
+           )
+        SELECT * FROM useragent where 1=1
+    </select>
 </mapper>

+ 93 - 0
game-business/src/main/resources/mapper/business/AppUsersCashAccountMapper.xml

@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.game.business.mapper.AppUsersCashAccountMapper">
+    
+    <resultMap type="com.game.business.domain.AppUsersCashAccount" id="AppUsersCashAccountResult">
+        <result property="id"    column="id"    />
+        <result property="account"    column="account"    />
+        <result property="accountBank"    column="account_bank"    />
+        <result property="addtime"    column="addtime"    />
+        <result property="branch"    column="branch"    />
+        <result property="isDefault"    column="is_default"    />
+        <result property="name"    column="name"    />
+        <result property="type"    column="type"    />
+        <result property="uid"    column="uid"    />
+    </resultMap>
+
+    <sql id="selectAppUsersCashAccountVo">
+        select id, account, account_bank, addtime, branch, is_default, name, type, uid from app_users_cash_account
+    </sql>
+
+    <select id="selectAppUsersCashAccountList" parameterType="com.game.business.domain.AppUsersCashAccount" resultMap="AppUsersCashAccountResult">
+        <include refid="selectAppUsersCashAccountVo"/>
+        <where>  
+            <if test="account != null  and account != ''"> and account = #{account}</if>
+            <if test="accountBank != null  and accountBank != ''"> and account_bank = #{accountBank}</if>
+            <if test="addtime != null "> and addtime = #{addtime}</if>
+            <if test="branch != null  and branch != ''"> and branch = #{branch}</if>
+            <if test="isDefault != null "> and is_default = #{isDefault}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="type != null "> and type = #{type}</if>
+            <if test="uid != null "> and uid = #{uid}</if>
+        </where>
+    </select>
+    
+    <select id="selectAppUsersCashAccountById" parameterType="Long" resultMap="AppUsersCashAccountResult">
+        <include refid="selectAppUsersCashAccountVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertAppUsersCashAccount" parameterType="com.game.business.domain.AppUsersCashAccount">
+        insert into app_users_cash_account
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="account != null">account,</if>
+            <if test="accountBank != null">account_bank,</if>
+            <if test="addtime != null">addtime,</if>
+            <if test="branch != null">branch,</if>
+            <if test="isDefault != null">is_default,</if>
+            <if test="name != null">name,</if>
+            <if test="type != null">type,</if>
+            <if test="uid != null">uid,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="account != null">#{account},</if>
+            <if test="accountBank != null">#{accountBank},</if>
+            <if test="addtime != null">#{addtime},</if>
+            <if test="branch != null">#{branch},</if>
+            <if test="isDefault != null">#{isDefault},</if>
+            <if test="name != null">#{name},</if>
+            <if test="type != null">#{type},</if>
+            <if test="uid != null">#{uid},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAppUsersCashAccount" parameterType="com.game.business.domain.AppUsersCashAccount">
+        update app_users_cash_account
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="account != null">account = #{account},</if>
+            <if test="accountBank != null">account_bank = #{accountBank},</if>
+            <if test="addtime != null">addtime = #{addtime},</if>
+            <if test="branch != null">branch = #{branch},</if>
+            <if test="isDefault != null">is_default = #{isDefault},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="type != null">type = #{type},</if>
+            <if test="uid != null">uid = #{uid},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAppUsersCashAccountById" parameterType="Long">
+        delete from app_users_cash_account where id = #{id}
+    </delete>
+
+    <delete id="deleteAppUsersCashAccountByIds" parameterType="String">
+        delete from app_users_cash_account where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 1 - 0
game-business/src/main/resources/mapper/business/FinTranRecordMapper.xml

@@ -83,6 +83,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="uid != null "> and uid = #{uid}</if>
             <if test="withdrawFlag != null "> and withdraw_flag = #{withdrawFlag}</if>
         </where>
+        order by create_time desc
     </select>
     
     <select id="selectFinTranRecordById" parameterType="Long" resultMap="FinTranRecordResult">

+ 223 - 0
game-business/src/main/resources/mapper/business/ShopBusinessOrderMapper.xml

@@ -0,0 +1,223 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.game.business.mapper.ShopBusinessOrderMapper">
+    
+    <resultMap type="com.game.business.domain.ShopBusinessOrder" id="ShopBusinessOrderResult">
+        <result property="id"    column="id"    />
+        <result property="addTime"    column="add_time"    />
+        <result property="address"    column="address"    />
+        <result property="addressId"    column="address_id"    />
+        <result property="anchorId"    column="anchor_id"    />
+        <result property="auditFailureReason"    column="audit_failure_reason"    />
+        <result property="businessId"    column="business_id"    />
+        <result property="businessLogo"    column="business_logo"    />
+        <result property="businessName"    column="business_name"    />
+        <result property="goodsChannelId"    column="goods_channel_id"    />
+        <result property="isManualRefund"    column="is_manual_refund"    />
+        <result property="logisticsId"    column="logistics_id"    />
+        <result property="manualRefundMoney"    column="manual_refund_money"    />
+        <result property="manualRefundOperator"    column="manual_refund_operator"    />
+        <result property="manualRefundType"    column="manual_refund_type"    />
+        <result property="name"    column="name"    />
+        <result property="orderAmount"    column="order_amount"    />
+        <result property="orderNum"    column="order_num"    />
+        <result property="payId"    column="pay_id"    />
+        <result property="phoneNum"    column="phone_num"    />
+        <result property="platformPayOrder"    column="platform_pay_order"    />
+        <result property="quitStatus"    column="quit_status"    />
+        <result property="reason"    column="reason"    />
+        <result property="refundLogisticsId"    column="refund_logistics_id"    />
+        <result property="refundNotes"    column="refund_notes"    />
+        <result property="refundNotesImages"    column="refund_notes_images"    />
+        <result property="refundOrderNum"    column="refund_order_num"    />
+        <result property="refundTime"    column="refund_time"    />
+        <result property="refundType"    column="refund_type"    />
+        <result property="remake"    column="remake"    />
+        <result property="status"    column="status"    />
+        <result property="taskId"    column="task_id"    />
+        <result property="transactionAmount"    column="transaction_amount"    />
+        <result property="transactionTime"    column="transaction_time"    />
+        <result property="uid"    column="uid"    />
+    </resultMap>
+
+    <sql id="selectShopBusinessOrderVo">
+        select id, add_time, address, address_id, anchor_id, audit_failure_reason, business_id, business_logo, business_name, goods_channel_id, is_manual_refund, logistics_id, manual_refund_money, manual_refund_operator, manual_refund_type, name, order_amount, order_num, pay_id, phone_num, platform_pay_order, quit_status, reason, refund_logistics_id, refund_notes, refund_notes_images, refund_order_num, refund_time, refund_type, remake, status, task_id, transaction_amount, transaction_time, uid from shop_business_order
+    </sql>
+
+    <select id="selectShopBusinessOrderList" parameterType="com.game.business.domain.ShopBusinessOrder" resultMap="ShopBusinessOrderResult">
+        <include refid="selectShopBusinessOrderVo"/>
+        <where>  
+            <if test="addTime != null "> and add_time = #{addTime}</if>
+            <if test="address != null  and address != ''"> and address = #{address}</if>
+            <if test="addressId != null "> and address_id = #{addressId}</if>
+            <if test="anchorId != null "> and anchor_id = #{anchorId}</if>
+            <if test="auditFailureReason != null  and auditFailureReason != ''"> and audit_failure_reason = #{auditFailureReason}</if>
+            <if test="businessId != null "> and business_id = #{businessId}</if>
+            <if test="businessLogo != null  and businessLogo != ''"> and business_logo = #{businessLogo}</if>
+            <if test="businessName != null  and businessName != ''"> and business_name like concat('%', #{businessName}, '%')</if>
+            <if test="goodsChannelId != null "> and goods_channel_id = #{goodsChannelId}</if>
+            <if test="isManualRefund != null "> and is_manual_refund = #{isManualRefund}</if>
+            <if test="logisticsId != null "> and logistics_id = #{logisticsId}</if>
+            <if test="manualRefundMoney != null "> and manual_refund_money = #{manualRefundMoney}</if>
+            <if test="manualRefundOperator != null  and manualRefundOperator != ''"> and manual_refund_operator = #{manualRefundOperator}</if>
+            <if test="manualRefundType != null "> and manual_refund_type = #{manualRefundType}</if>
+            <if test="name != null  and name != ''"> and name like concat('%', #{name}, '%')</if>
+            <if test="orderAmount != null "> and order_amount = #{orderAmount}</if>
+            <if test="orderNum != null  and orderNum != ''"> and order_num = #{orderNum}</if>
+            <if test="payId != null "> and pay_id = #{payId}</if>
+            <if test="phoneNum != null  and phoneNum != ''"> and phone_num = #{phoneNum}</if>
+            <if test="platformPayOrder != null  and platformPayOrder != ''"> and platform_pay_order = #{platformPayOrder}</if>
+            <if test="quitStatus != null "> and quit_status = #{quitStatus}</if>
+            <if test="reason != null  and reason != ''"> and reason = #{reason}</if>
+            <if test="refundLogisticsId != null "> and refund_logistics_id = #{refundLogisticsId}</if>
+            <if test="refundNotes != null  and refundNotes != ''"> and refund_notes = #{refundNotes}</if>
+            <if test="refundNotesImages != null  and refundNotesImages != ''"> and refund_notes_images = #{refundNotesImages}</if>
+            <if test="refundOrderNum != null  and refundOrderNum != ''"> and refund_order_num = #{refundOrderNum}</if>
+            <if test="refundTime != null "> and refund_time = #{refundTime}</if>
+            <if test="refundType != null "> and refund_type = #{refundType}</if>
+            <if test="remake != null  and remake != ''"> and remake = #{remake}</if>
+            <if test="status != null "> and status = #{status}</if>
+            <if test="taskId != null "> and task_id = #{taskId}</if>
+            <if test="transactionAmount != null "> and transaction_amount = #{transactionAmount}</if>
+            <if test="transactionTime != null "> and transaction_time = #{transactionTime}</if>
+            <if test="uid != null "> and uid = #{uid}</if>
+        </where>
+    </select>
+    
+    <select id="selectShopBusinessOrderById" parameterType="Long" resultMap="ShopBusinessOrderResult">
+        <include refid="selectShopBusinessOrderVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertShopBusinessOrder" parameterType="com.game.business.domain.ShopBusinessOrder">
+        insert into shop_business_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="addTime != null">add_time,</if>
+            <if test="address != null">address,</if>
+            <if test="addressId != null">address_id,</if>
+            <if test="anchorId != null">anchor_id,</if>
+            <if test="auditFailureReason != null">audit_failure_reason,</if>
+            <if test="businessId != null">business_id,</if>
+            <if test="businessLogo != null">business_logo,</if>
+            <if test="businessName != null">business_name,</if>
+            <if test="goodsChannelId != null">goods_channel_id,</if>
+            <if test="isManualRefund != null">is_manual_refund,</if>
+            <if test="logisticsId != null">logistics_id,</if>
+            <if test="manualRefundMoney != null">manual_refund_money,</if>
+            <if test="manualRefundOperator != null">manual_refund_operator,</if>
+            <if test="manualRefundType != null">manual_refund_type,</if>
+            <if test="name != null">name,</if>
+            <if test="orderAmount != null">order_amount,</if>
+            <if test="orderNum != null">order_num,</if>
+            <if test="payId != null">pay_id,</if>
+            <if test="phoneNum != null">phone_num,</if>
+            <if test="platformPayOrder != null">platform_pay_order,</if>
+            <if test="quitStatus != null">quit_status,</if>
+            <if test="reason != null">reason,</if>
+            <if test="refundLogisticsId != null">refund_logistics_id,</if>
+            <if test="refundNotes != null">refund_notes,</if>
+            <if test="refundNotesImages != null">refund_notes_images,</if>
+            <if test="refundOrderNum != null">refund_order_num,</if>
+            <if test="refundTime != null">refund_time,</if>
+            <if test="refundType != null">refund_type,</if>
+            <if test="remake != null">remake,</if>
+            <if test="status != null">status,</if>
+            <if test="taskId != null">task_id,</if>
+            <if test="transactionAmount != null">transaction_amount,</if>
+            <if test="transactionTime != null">transaction_time,</if>
+            <if test="uid != null">uid,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="addTime != null">#{addTime},</if>
+            <if test="address != null">#{address},</if>
+            <if test="addressId != null">#{addressId},</if>
+            <if test="anchorId != null">#{anchorId},</if>
+            <if test="auditFailureReason != null">#{auditFailureReason},</if>
+            <if test="businessId != null">#{businessId},</if>
+            <if test="businessLogo != null">#{businessLogo},</if>
+            <if test="businessName != null">#{businessName},</if>
+            <if test="goodsChannelId != null">#{goodsChannelId},</if>
+            <if test="isManualRefund != null">#{isManualRefund},</if>
+            <if test="logisticsId != null">#{logisticsId},</if>
+            <if test="manualRefundMoney != null">#{manualRefundMoney},</if>
+            <if test="manualRefundOperator != null">#{manualRefundOperator},</if>
+            <if test="manualRefundType != null">#{manualRefundType},</if>
+            <if test="name != null">#{name},</if>
+            <if test="orderAmount != null">#{orderAmount},</if>
+            <if test="orderNum != null">#{orderNum},</if>
+            <if test="payId != null">#{payId},</if>
+            <if test="phoneNum != null">#{phoneNum},</if>
+            <if test="platformPayOrder != null">#{platformPayOrder},</if>
+            <if test="quitStatus != null">#{quitStatus},</if>
+            <if test="reason != null">#{reason},</if>
+            <if test="refundLogisticsId != null">#{refundLogisticsId},</if>
+            <if test="refundNotes != null">#{refundNotes},</if>
+            <if test="refundNotesImages != null">#{refundNotesImages},</if>
+            <if test="refundOrderNum != null">#{refundOrderNum},</if>
+            <if test="refundTime != null">#{refundTime},</if>
+            <if test="refundType != null">#{refundType},</if>
+            <if test="remake != null">#{remake},</if>
+            <if test="status != null">#{status},</if>
+            <if test="taskId != null">#{taskId},</if>
+            <if test="transactionAmount != null">#{transactionAmount},</if>
+            <if test="transactionTime != null">#{transactionTime},</if>
+            <if test="uid != null">#{uid},</if>
+         </trim>
+    </insert>
+
+    <update id="updateShopBusinessOrder" parameterType="com.game.business.domain.ShopBusinessOrder">
+        update shop_business_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="addTime != null">add_time = #{addTime},</if>
+            <if test="address != null">address = #{address},</if>
+            <if test="addressId != null">address_id = #{addressId},</if>
+            <if test="anchorId != null">anchor_id = #{anchorId},</if>
+            <if test="auditFailureReason != null">audit_failure_reason = #{auditFailureReason},</if>
+            <if test="businessId != null">business_id = #{businessId},</if>
+            <if test="businessLogo != null">business_logo = #{businessLogo},</if>
+            <if test="businessName != null">business_name = #{businessName},</if>
+            <if test="goodsChannelId != null">goods_channel_id = #{goodsChannelId},</if>
+            <if test="isManualRefund != null">is_manual_refund = #{isManualRefund},</if>
+            <if test="logisticsId != null">logistics_id = #{logisticsId},</if>
+            <if test="manualRefundMoney != null">manual_refund_money = #{manualRefundMoney},</if>
+            <if test="manualRefundOperator != null">manual_refund_operator = #{manualRefundOperator},</if>
+            <if test="manualRefundType != null">manual_refund_type = #{manualRefundType},</if>
+            <if test="name != null">name = #{name},</if>
+            <if test="orderAmount != null">order_amount = #{orderAmount},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="payId != null">pay_id = #{payId},</if>
+            <if test="phoneNum != null">phone_num = #{phoneNum},</if>
+            <if test="platformPayOrder != null">platform_pay_order = #{platformPayOrder},</if>
+            <if test="quitStatus != null">quit_status = #{quitStatus},</if>
+            <if test="reason != null">reason = #{reason},</if>
+            <if test="refundLogisticsId != null">refund_logistics_id = #{refundLogisticsId},</if>
+            <if test="refundNotes != null">refund_notes = #{refundNotes},</if>
+            <if test="refundNotesImages != null">refund_notes_images = #{refundNotesImages},</if>
+            <if test="refundOrderNum != null">refund_order_num = #{refundOrderNum},</if>
+            <if test="refundTime != null">refund_time = #{refundTime},</if>
+            <if test="refundType != null">refund_type = #{refundType},</if>
+            <if test="remake != null">remake = #{remake},</if>
+            <if test="status != null">status = #{status},</if>
+            <if test="taskId != null">task_id = #{taskId},</if>
+            <if test="transactionAmount != null">transaction_amount = #{transactionAmount},</if>
+            <if test="transactionTime != null">transaction_time = #{transactionTime},</if>
+            <if test="uid != null">uid = #{uid},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteShopBusinessOrderById" parameterType="Long">
+        delete from shop_business_order where id = #{id}
+    </delete>
+
+    <delete id="deleteShopBusinessOrderByIds" parameterType="String">
+        delete from shop_business_order where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 133 - 0
game-business/src/main/resources/mapper/business/ShopSubOrderMapper.xml

@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.game.business.mapper.ShopSubOrderMapper">
+    
+    <resultMap type="com.game.business.domain.ShopSubOrder" id="ShopSubOrderResult">
+        <result property="id"    column="id"    />
+        <result property="addTime"    column="add_time"    />
+        <result property="businessId"    column="business_id"    />
+        <result property="businessOrderId"    column="business_order_id"    />
+        <result property="composeId"    column="compose_id"    />
+        <result property="goodsId"    column="goods_id"    />
+        <result property="goodsName"    column="goods_name"    />
+        <result property="goodsNum"    column="goods_num"    />
+        <result property="goodsPicture"    column="goods_picture"    />
+        <result property="goodsPrice"    column="goods_price"    />
+        <result property="logisticsName"    column="logistics_name"    />
+        <result property="logisticsNum"    column="logistics_num"    />
+        <result property="orderNum"    column="order_num"    />
+        <result property="payId"    column="pay_id"    />
+        <result property="remake"    column="remake"    />
+        <result property="skuName"    column="sku_name"    />
+        <result property="status"    column="status"    />
+    </resultMap>
+
+    <sql id="selectShopSubOrderVo">
+        select id, add_time, business_id, business_order_id, compose_id, goods_id, goods_name, goods_num, goods_picture, goods_price, logistics_name, logistics_num, order_num, pay_id, remake, sku_name, status from shop_sub_order
+    </sql>
+
+    <select id="selectShopSubOrderList" parameterType="com.game.business.domain.ShopSubOrder" resultMap="ShopSubOrderResult">
+        <include refid="selectShopSubOrderVo"/>
+        <where>  
+            <if test="addTime != null "> and add_time = #{addTime}</if>
+            <if test="businessId != null "> and business_id = #{businessId}</if>
+            <if test="businessOrderId != null "> and business_order_id = #{businessOrderId}</if>
+            <if test="composeId != null "> and compose_id = #{composeId}</if>
+            <if test="goodsId != null "> and goods_id = #{goodsId}</if>
+            <if test="goodsName != null  and goodsName != ''"> and goods_name like concat('%', #{goodsName}, '%')</if>
+            <if test="goodsNum != null "> and goods_num = #{goodsNum}</if>
+            <if test="goodsPicture != null  and goodsPicture != ''"> and goods_picture = #{goodsPicture}</if>
+            <if test="goodsPrice != null "> and goods_price = #{goodsPrice}</if>
+            <if test="logisticsName != null  and logisticsName != ''"> and logistics_name like concat('%', #{logisticsName}, '%')</if>
+            <if test="logisticsNum != null  and logisticsNum != ''"> and logistics_num = #{logisticsNum}</if>
+            <if test="orderNum != null  and orderNum != ''"> and order_num = #{orderNum}</if>
+            <if test="payId != null "> and pay_id = #{payId}</if>
+            <if test="remake != null  and remake != ''"> and remake = #{remake}</if>
+            <if test="skuName != null  and skuName != ''"> and sku_name like concat('%', #{skuName}, '%')</if>
+            <if test="status != null "> and status = #{status}</if>
+        </where>
+    </select>
+    
+    <select id="selectShopSubOrderById" parameterType="Long" resultMap="ShopSubOrderResult">
+        <include refid="selectShopSubOrderVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertShopSubOrder" parameterType="com.game.business.domain.ShopSubOrder">
+        insert into shop_sub_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">id,</if>
+            <if test="addTime != null">add_time,</if>
+            <if test="businessId != null">business_id,</if>
+            <if test="businessOrderId != null">business_order_id,</if>
+            <if test="composeId != null">compose_id,</if>
+            <if test="goodsId != null">goods_id,</if>
+            <if test="goodsName != null">goods_name,</if>
+            <if test="goodsNum != null">goods_num,</if>
+            <if test="goodsPicture != null">goods_picture,</if>
+            <if test="goodsPrice != null">goods_price,</if>
+            <if test="logisticsName != null">logistics_name,</if>
+            <if test="logisticsNum != null">logistics_num,</if>
+            <if test="orderNum != null">order_num,</if>
+            <if test="payId != null">pay_id,</if>
+            <if test="remake != null">remake,</if>
+            <if test="skuName != null">sku_name,</if>
+            <if test="status != null">status,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">#{id},</if>
+            <if test="addTime != null">#{addTime},</if>
+            <if test="businessId != null">#{businessId},</if>
+            <if test="businessOrderId != null">#{businessOrderId},</if>
+            <if test="composeId != null">#{composeId},</if>
+            <if test="goodsId != null">#{goodsId},</if>
+            <if test="goodsName != null">#{goodsName},</if>
+            <if test="goodsNum != null">#{goodsNum},</if>
+            <if test="goodsPicture != null">#{goodsPicture},</if>
+            <if test="goodsPrice != null">#{goodsPrice},</if>
+            <if test="logisticsName != null">#{logisticsName},</if>
+            <if test="logisticsNum != null">#{logisticsNum},</if>
+            <if test="orderNum != null">#{orderNum},</if>
+            <if test="payId != null">#{payId},</if>
+            <if test="remake != null">#{remake},</if>
+            <if test="skuName != null">#{skuName},</if>
+            <if test="status != null">#{status},</if>
+         </trim>
+    </insert>
+
+    <update id="updateShopSubOrder" parameterType="com.game.business.domain.ShopSubOrder">
+        update shop_sub_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="addTime != null">add_time = #{addTime},</if>
+            <if test="businessId != null">business_id = #{businessId},</if>
+            <if test="businessOrderId != null">business_order_id = #{businessOrderId},</if>
+            <if test="composeId != null">compose_id = #{composeId},</if>
+            <if test="goodsId != null">goods_id = #{goodsId},</if>
+            <if test="goodsName != null">goods_name = #{goodsName},</if>
+            <if test="goodsNum != null">goods_num = #{goodsNum},</if>
+            <if test="goodsPicture != null">goods_picture = #{goodsPicture},</if>
+            <if test="goodsPrice != null">goods_price = #{goodsPrice},</if>
+            <if test="logisticsName != null">logistics_name = #{logisticsName},</if>
+            <if test="logisticsNum != null">logistics_num = #{logisticsNum},</if>
+            <if test="orderNum != null">order_num = #{orderNum},</if>
+            <if test="payId != null">pay_id = #{payId},</if>
+            <if test="remake != null">remake = #{remake},</if>
+            <if test="skuName != null">sku_name = #{skuName},</if>
+            <if test="status != null">status = #{status},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteShopSubOrderById" parameterType="Long">
+        delete from shop_sub_order where id = #{id}
+    </delete>
+
+    <delete id="deleteShopSubOrderByIds" parameterType="String">
+        delete from shop_sub_order where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 44 - 0
game-ui/src/api/business/account.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询用户提现账号列表
+export function listAccount(query) {
+  return request({
+    url: '/business/account/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户提现账号详细
+export function getAccount(id) {
+  return request({
+    url: '/business/account/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户提现账号
+export function addAccount(data) {
+  return request({
+    url: '/business/account',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户提现账号
+export function updateAccount(data) {
+  return request({
+    url: '/business/account',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户提现账号
+export function delAccount(id) {
+  return request({
+    url: '/business/account/' + id,
+    method: 'delete'
+  })
+}

+ 44 - 0
game-ui/src/api/business/betting.js

@@ -0,0 +1,44 @@
+import request from '@/utils/request'
+
+// 查询用户下注记录列表
+export function listBetting(query) {
+  return request({
+    url: '/business/betting/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询用户下注记录详细
+export function getBetting(id) {
+  return request({
+    url: '/business/betting/' + id,
+    method: 'get'
+  })
+}
+
+// 新增用户下注记录
+export function addBetting(data) {
+  return request({
+    url: '/business/betting',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改用户下注记录
+export function updateBetting(data) {
+  return request({
+    url: '/business/betting',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除用户下注记录
+export function delBetting(id) {
+  return request({
+    url: '/business/betting/' + id,
+    method: 'delete'
+  })
+}

+ 52 - 0
game-ui/src/api/business/order.js

@@ -0,0 +1,52 @@
+import request from '@/utils/request'
+
+// 查询购物订单列表
+export function listOrder(query) {
+  return request({
+    url: '/business/order/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询购物订单详细
+export function getOrder(id) {
+  return request({
+    url: '/business/order/' + id,
+    method: 'get'
+  })
+}
+
+// 新增购物订单
+export function addOrder(data) {
+  return request({
+    url: '/business/order',
+    method: 'post',
+    data: data
+  })
+}
+// 发货
+export function send(data) {
+  return request({
+    url: '/business/order/send',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改购物订单
+export function updateOrder(data) {
+  return request({
+    url: '/business/order',
+    method: 'put',
+    data: data
+  })
+}
+
+// 删除购物订单
+export function delOrder(id) {
+  return request({
+    url: '/business/order/' + id,
+    method: 'delete'
+  })
+}

+ 24 - 0
game-ui/src/api/business/user.js

@@ -16,6 +16,30 @@ export function listUser(query) {
     params: query
   })
 }
+// 查询上级推荐人列表
+export function userDetail(query) {
+  return request({
+    url: '/business/agent/userDetail',
+    method: 'get',
+    params: query
+  })
+}
+// 查询上级推荐人列表
+export function liveCommission(query) {
+  return request({
+    url: '/business/user/liveCommission',
+    method: 'get',
+    params: query
+  })
+}
+// 查询上级推荐人列表
+export function getGift(query) {
+  return request({
+    url: '/business/user/getGift',
+    method: 'get',
+    params: query
+  })
+}
 // 查询app用户列表
 export function channelList() {
   return request({

+ 341 - 0
game-ui/src/views/business/account/index.vue

@@ -0,0 +1,341 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="用户ID" prop="uid">
+        <el-input
+          v-model="queryParams.uid"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="账号" prop="account">
+        <el-input
+          v-model="queryParams.account"
+          placeholder="请输入账号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="银行名称" prop="accountBank">
+        <el-input
+          v-model="queryParams.accountBank"
+          placeholder="请输入银行名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="账号类型" prop="type">
+        <el-select v-model="queryParams.type" placeholder="请选择账号类型" clearable>
+          <el-option
+            v-for="dict in dict.type.app_user_cash_account"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['business:account:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['business:account:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['business:account:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['business:account:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="accountList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="ID" align="center" prop="id" />
+      <el-table-column label="UID" align="center" prop="uid" />
+      <el-table-column label="姓名" align="center" prop="name" />
+      <el-table-column label="账号类型" align="center" prop="type">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.app_user_cash_account" :value="scope.row.type"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="账号" align="center" prop="account" />
+      <el-table-column label="银行名称" align="center" prop="accountBank" />
+      <el-table-column label="支行" align="center" prop="branch" />
+      <el-table-column label="添加时间" align="center" prop="addtime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.addtime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['business:account:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['business:account:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改用户提现账号对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="账号" prop="account">
+          <el-input v-model="form.account" placeholder="请输入账号" />
+        </el-form-item>
+        <el-form-item label="银行名称" prop="accountBank">
+          <el-input v-model="form.accountBank" placeholder="请输入银行名称" />
+        </el-form-item>
+        <el-form-item label="添加时间" prop="addtime">
+          <el-date-picker clearable
+            v-model="form.addtime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择添加时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="支行" prop="branch">
+          <el-input v-model="form.branch" placeholder="请输入支行" />
+        </el-form-item>
+        <el-form-item label="是否默认 1:默认 0:非默认" prop="isDefault">
+          <el-input v-model="form.isDefault" placeholder="请输入是否默认 1:默认 0:非默认" />
+        </el-form-item>
+        <el-form-item label="姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入姓名" />
+        </el-form-item>
+        <el-form-item label="账号类型 1:表示支付宝 2:表示微信 3:表示银行卡" prop="type">
+          <el-select v-model="form.type" placeholder="请选择账号类型 1:表示支付宝 2:表示微信 3:表示银行卡">
+            <el-option
+              v-for="dict in dict.type.app_user_cash_account"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="用户ID" prop="uid">
+          <el-input v-model="form.uid" placeholder="请输入用户ID" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listAccount, getAccount, delAccount, addAccount, updateAccount } from "@/api/business/account";
+
+export default {
+  name: "Account",
+  dicts: ['app_user_cash_account'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户提现账号表格数据
+      accountList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        account: null,
+        accountBank: null,
+        addtime: null,
+        branch: null,
+        isDefault: null,
+        name: null,
+        type: null,
+        uid: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询用户提现账号列表 */
+    getList() {
+      this.loading = true;
+      listAccount(this.queryParams).then(response => {
+        this.accountList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        account: null,
+        accountBank: null,
+        addtime: null,
+        branch: null,
+        isDefault: null,
+        name: null,
+        type: null,
+        uid: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加用户提现账号";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getAccount(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改用户提现账号";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateAccount(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addAccount(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除用户提现账号编号为"' + ids + '"的数据项?').then(function() {
+        return delAccount(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('business/account/export', {
+        ...this.queryParams
+      }, `account_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 494 - 0
game-ui/src/views/business/betting/index.vue

@@ -0,0 +1,494 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="110px">
+      <el-form-item label="游戏" prop="gameId">
+        <el-select v-model="queryParams.gameId" placeholder="请选择">
+          <el-option
+            v-for="item in typeList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="用户ID" prop="userId">
+        <el-input
+          v-model="queryParams.userId"
+          placeholder="请输入用户ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="游戏期号" prop="gameDate">
+        <el-input
+          v-model="queryParams.gameDate"
+          placeholder="请输入游戏期号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="主播ID" prop="liveUserId">
+        <el-input
+          v-model="queryParams.liveUserId"
+          placeholder="请输入主播ID"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="直播房间号" prop="liveRoomId">
+        <el-input
+          v-model="queryParams.liveRoomId"
+          placeholder="请输入直播房间号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="是否直播间投注" prop="isLive">
+        <el-select v-model="queryParams.isLive" placeholder="请选择是否直播间投注" clearable>
+          <el-option
+            v-for="dict in dict.type.app_betting_is_live"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="投注类型" prop="bettingType">
+        <el-select v-model="queryParams.bettingType" placeholder="请选择投注类型" clearable>
+          <el-option
+            v-for="dict in dict.type.app_game_betting_type"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item label="是否中奖" prop="isWinning">
+        <el-select v-model="queryParams.isWinning" placeholder="请选择是否中奖" clearable>
+          <el-option
+            v-for="dict in dict.type.app_game_betting_winning"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['business:betting:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['business:betting:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['business:betting:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['business:betting:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="bettingList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键ID" align="center" prop="id" />
+      <el-table-column label="游戏" align="center" prop="gameId">
+        <template slot-scope="scope">
+          <span>{{ getTypeName(scope.row.gameId) }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="用户ID" align="center" prop="userId" />
+      <el-table-column label="游戏期号" align="center" prop="gameDate" />
+      <el-table-column label="主播ID" align="center" prop="liveUserId" />
+      <el-table-column label="直播房间号" align="center" prop="liveRoomId" />
+      <el-table-column label="是否直播间投注 " align="center" prop="isLive">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.app_betting_is_live" :value="scope.row.isLive"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="投注类型" align="center" prop="bettingType">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.app_game_betting_type" :value="scope.row.bettingType"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="投注选项" align="center" prop="bettingItem">
+        <template slot-scope="scope">
+          {{getItemName(scope.row)}}
+        </template>
+      </el-table-column>
+      <el-table-column label="投注选项倍数" align="center" prop="bettingMultiple" />
+      <el-table-column label="投注金额" align="center" prop="bettingAmount" />
+      <el-table-column label="投注佣金" align="center" prop="bettingCommission" />
+      <el-table-column label="是否中奖" align="center" prop="isWinning">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.app_game_betting_winning" :value="scope.row.isWinning"/>
+        </template>
+      </el-table-column>
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['business:betting:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['business:betting:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改用户下注记录对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="游戏类型ID" prop="classId">
+          <el-input v-model="form.classId" placeholder="请输入游戏类型ID" />
+        </el-form-item>
+        <el-form-item label="游戏ID" prop="gameId">
+          <el-input v-model="form.gameId" placeholder="请输入游戏ID" />
+        </el-form-item>
+        <el-form-item label="用户ID" prop="userId">
+          <el-input v-model="form.userId" placeholder="请输入用户ID" />
+        </el-form-item>
+        <el-form-item label="游戏期号" prop="gameDate">
+          <el-input v-model="form.gameDate" placeholder="请输入游戏期号" />
+        </el-form-item>
+        <el-form-item label="主播ID" prop="liveUserId">
+          <el-input v-model="form.liveUserId" placeholder="请输入主播ID" />
+        </el-form-item>
+        <el-form-item label="直播房间号" prop="liveRoomId">
+          <el-input v-model="form.liveRoomId" placeholder="请输入直播房间号" />
+        </el-form-item>
+        <el-form-item label="投注金额ID" prop="moneyId">
+          <el-input v-model="form.moneyId" placeholder="请输入投注金额ID" />
+        </el-form-item>
+        <el-form-item label="是否直播间投注 0:否 1:是" prop="isLive">
+          <el-select v-model="form.isLive" placeholder="请选择是否直播间投注 0:否 1:是">
+            <el-option
+              v-for="dict in dict.type.app_betting_is_live"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="投注类型:0:余额 1:金币" prop="bettingType">
+          <el-select v-model="form.bettingType" placeholder="请选择投注类型:0:余额 1:金币">
+            <el-option
+              v-for="dict in dict.type.app_game_betting_type"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="投注选项倍数" prop="bettingMultiple">
+          <el-input v-model="form.bettingMultiple" placeholder="请输入投注选项倍数" />
+        </el-form-item>
+        <el-form-item label="投注金额" prop="bettingAmount">
+          <el-input v-model="form.bettingAmount" placeholder="请输入投注金额" />
+        </el-form-item>
+        <el-form-item label="投注佣金" prop="bettingCommission">
+          <el-input v-model="form.bettingCommission" placeholder="请输入投注佣金" />
+        </el-form-item>
+        <el-form-item label="是否中奖 0 未开奖 1 是 2 否" prop="isWinning">
+          <el-select v-model="form.isWinning" placeholder="请选择是否中奖 0 未开奖 1 是 2 否">
+            <el-option
+              v-for="dict in dict.type.app_game_betting_winning"
+              :key="dict.value"
+              :label="dict.label"
+              :value="dict.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listBetting, getBetting, delBetting, addBetting, updateBetting } from "@/api/business/betting";
+import {allGameList } from "@/api/business/game_item";
+import {allList} from "@/api/business/lottery";
+
+export default {
+  name: "Betting",
+  dicts: ['app_betting_is_live', 'app_game_betting_winning', 'app_game_betting_type'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 用户下注记录表格数据
+      bettingList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      typeMap:{},
+      typeList:[],
+      gameItemMap:{},
+      gameItemList:[],
+      gameItemShowList:[],
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        classId: null,
+        gameId: null,
+        userId: null,
+        gameDate: null,
+        liveUserId: null,
+        liveRoomId: null,
+        moneyId: null,
+        isLive: null,
+        bettingType: null,
+        bettingGameType: null,
+        bettingItem: null,
+        bettingMultiple: null,
+        bettingAmount: null,
+        bettingCommission: null,
+        isWinning: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        classId: [
+          { required: true, message: "游戏类型ID不能为空", trigger: "blur" }
+        ],
+        gameId: [
+          { required: true, message: "游戏ID不能为空", trigger: "blur" }
+        ],
+        userId: [
+          { required: true, message: "用户ID不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    var that = this;
+    allList().then(response => {
+      if(response.data){
+        for(var i in response.data){
+          var item = response.data[i];
+          that.gameItemMap[item.itemLocation.toString() + "_" + item.gameId] = item.itemName;
+          that.gameItemList.push({
+            value:item.itemLocation+"_"+item.gameId,
+            label:item.itemName,
+            gameId:item.gameId
+          })
+        }
+      }
+    });
+    allGameList().then(response => {
+      if(response.data){
+        for(var i in response.data){
+          var item = response.data[i];
+          that.typeMap[item.id.toString()] = item.name;
+          that.typeList.push({
+            value:item.id,
+            label:item.name
+          })
+        }
+      }
+      that.getList();
+
+    });
+  },
+  methods: {
+    getItemName(row){
+      let that = this;
+      let bettingGameType = row.bettingGameType;
+      let bettingItem = row.bettingItem;
+      let gameId = row.gameId;
+      if("0" == bettingGameType){
+        return that.gameItemMap[bettingItem+"_"+gameId];
+      }else{
+        let name = "";
+        let arr = JSON.parse(bettingItem);
+        for(var i in arr){
+          let item = arr[i];
+          if("" != name){
+            name = name + ",";
+          }
+          name = name + that.gameItemMap[item["bettingItem"]+"_"+gameId];
+        }
+        return name;
+      }
+    },
+    getTypeName(id) {
+      return this.typeMap[id.toString()];
+    },
+    /** 查询用户下注记录列表 */
+    getList() {
+      this.loading = true;
+      listBetting(this.queryParams).then(response => {
+        this.bettingList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        classId: null,
+        gameId: null,
+        userId: null,
+        gameDate: null,
+        liveUserId: null,
+        liveRoomId: null,
+        moneyId: null,
+        isLive: null,
+        bettingType: null,
+        bettingGameType: null,
+        bettingItem: null,
+        bettingMultiple: null,
+        bettingAmount: null,
+        bettingCommission: null,
+        isWinning: null,
+        createTime: null,
+        updateTime: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加用户下注记录";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getBetting(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改用户下注记录";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateBetting(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addBetting(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除用户下注记录编号为"' + ids + '"的数据项?').then(function() {
+        return delBetting(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('business/betting/export', {
+        ...this.queryParams
+      }, `betting_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 597 - 0
game-ui/src/views/business/order/index.vue

@@ -0,0 +1,597 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
+<!--      <el-form-item label="添加时间" prop="addTime">
+        <el-date-picker clearable
+          v-model="queryParams.addTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择添加时间">
+        </el-date-picker>
+      </el-form-item>-->
+      <el-form-item label="收货人姓名" prop="name">
+        <el-input
+          v-model="queryParams.name"
+          placeholder="请输入 收货人姓名"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="订单号" prop="orderNum">
+        <el-input
+          v-model="queryParams.orderNum"
+          placeholder="请输入 订单号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+<!--      <el-form-item label=" 父订单(支付订单)号" prop="payId">
+        <el-input
+          v-model="queryParams.payId"
+          placeholder="请输入 父订单(支付订单)id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>-->
+      <el-form-item label="收货人手机号" prop="phoneNum">
+        <el-input
+          v-model="queryParams.phoneNum"
+          placeholder="请输入 收货人手机号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="订单状态" prop="status">
+        <el-select v-model="queryParams.status" placeholder="请选择订单状态" clearable>
+          <el-option
+            v-for="dict in dict.type.app_goods_order_status"
+            :key="dict.value"
+            :label="dict.label"
+            :value="dict.value"
+          />
+        </el-select>
+      </el-form-item>
+<!--      <el-form-item label="交易成功时间" prop="transactionTime">
+        <el-date-picker clearable
+          v-model="queryParams.transactionTime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择交易成功时间">
+        </el-date-picker>
+      </el-form-item>-->
+      <el-form-item label="UID" prop="uid">
+        <el-input
+          v-model="queryParams.uid"
+          placeholder="请输入 用户id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['business:order:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['business:order:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['business:order:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['business:order:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="orderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="id" align="center" prop="id" />
+      <el-table-column label="用户id" align="center" prop="uid" />
+      <el-table-column label="商品" align="center" prop="productNames" width="150"/>
+      <el-table-column label="下单时间" align="center" prop="addTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.addTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="收货人地址" align="center" prop="address" width="200"/>
+<!--      <el-table-column label=" 收货人地址id" align="center" prop="addressId" />
+      <el-table-column label=" 用户id" align="center" prop="anchorId" />-->
+<!--      <el-table-column label=" 申请退款审核不通过原因" align="center" prop="auditFailureReason" />-->
+<!--      <el-table-column label=" 商家id" align="center" prop="businessId" />-->
+<!--      <el-table-column label=" 商家logo" align="center" prop="businessLogo" />-->
+      <el-table-column label="商家名称" align="center" prop="businessName" />
+<!--      <el-table-column label=" 订单来源id" align="center" prop="goodsChannelId" />-->
+<!--      <el-table-column label="是否人工退款 1:是 2:否" align="center" prop="isManualRefund" />-->
+      <el-table-column label="发货物流id" align="center" prop="logisticsId" />
+<!--      <el-table-column label="人工退款金额" align="center" prop="manualRefundMoney" />-->
+<!--      <el-table-column label="人工退款操作人" align="center" prop="manualRefundOperator" />-->
+<!--      <el-table-column label="人工退款方式 1:支付宝 2:微信 3:人工转账" align="center" prop="manualRefundType" />-->
+      <el-table-column label="收货人姓名" align="center" prop="name" />
+      <el-table-column label="订单金额" align="center" prop="orderAmount" />
+      <el-table-column label="订单号" align="center" prop="orderNum" />
+      <el-table-column label="父订单(支付订单)id" align="center" prop="payId" />
+      <el-table-column label="收货人手机号" align="center" prop="phoneNum" />
+      <el-table-column label="用户支付订单号" align="center" prop="platformPayOrder" />
+<!--      <el-table-column label="退货订单状态 1:待审核 2:待发货 3:待收货 4:退款中 5:退款完成 6:退款失败 7:审核拒绝" align="center" prop="quitStatus" />-->
+<!--      <el-table-column label=" 申请退款原因" align="center" prop="reason" />-->
+<!--      <el-table-column label=" 退货物流id" align="center" prop="refundLogisticsId" />-->
+<!--      <el-table-column label="申请退款备注" align="center" prop="refundNotes" />-->
+<!--      <el-table-column label="退款备注图片" align="center" prop="refundNotesImages" />-->
+<!--      <el-table-column label="退款订单号" align="center" prop="refundOrderNum" />-->
+<!--      <el-table-column label="退款完成时间" align="center" prop="refundTime" width="180">-->
+<!--        <template slot-scope="scope">-->
+<!--          <span>{{ parseTime(scope.row.refundTime, '{y}-{m}-{d}') }}</span>-->
+<!--        </template>-->
+<!--      </el-table-column>-->
+<!--      <el-table-column label="退款类型 1.仅退款 2.退货退款" align="center" prop="refundType" />-->
+      <el-table-column label="备注" align="center" prop="remake" />
+      <el-table-column label="订单状态" align="center" prop="status">
+        <template slot-scope="scope">
+          <dict-tag :options="dict.type.app_goods_order_status" :value="scope.row.status"/>
+        </template>
+      </el-table-column>
+<!--      <el-table-column label=" 任务id" align="center" prop="taskId" />-->
+      <el-table-column label="交易金额(实付金额)" align="center" prop="transactionAmount" />
+      <el-table-column label="交易成功时间" align="center" prop="transactionTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.transactionTime, '{y}-{m}-{d}').indexOf("1970")!=-1?"-":parseTime(scope.row.transactionTime, '{y}-{m}-{d}')}}</span>
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleSend(scope.row)"
+            v-hasPermi="['business:order:send']"
+            v-if="scope.row.status == 2"
+          >发货</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['business:order:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['business:order:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改购物订单对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="添加时间" prop="addTime">
+          <el-date-picker clearable
+            v-model="form.addTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择添加时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 收货人地址" prop="address">
+          <el-input v-model="form.address" placeholder="请输入 收货人地址" />
+        </el-form-item>
+        <el-form-item label=" 收货人地址id" prop="addressId">
+          <el-input v-model="form.addressId" placeholder="请输入 收货人地址id" />
+        </el-form-item>
+        <el-form-item label=" 用户id" prop="anchorId">
+          <el-input v-model="form.anchorId" placeholder="请输入 用户id" />
+        </el-form-item>
+        <el-form-item label=" 申请退款审核不通过原因" prop="auditFailureReason">
+          <el-input v-model="form.auditFailureReason" placeholder="请输入 申请退款审核不通过原因" />
+        </el-form-item>
+        <el-form-item label=" 商家id" prop="businessId">
+          <el-input v-model="form.businessId" placeholder="请输入 商家id" />
+        </el-form-item>
+        <el-form-item label=" 商家logo" prop="businessLogo">
+          <el-input v-model="form.businessLogo" placeholder="请输入 商家logo" />
+        </el-form-item>
+        <el-form-item label=" 商家名称" prop="businessName">
+          <el-input v-model="form.businessName" placeholder="请输入 商家名称" />
+        </el-form-item>
+        <el-form-item label=" 订单来源id" prop="goodsChannelId">
+          <el-input v-model="form.goodsChannelId" placeholder="请输入 订单来源id" />
+        </el-form-item>
+        <el-form-item label="是否人工退款 1:是 2:否" prop="isManualRefund">
+          <el-input v-model="form.isManualRefund" placeholder="请输入是否人工退款 1:是 2:否" />
+        </el-form-item>
+        <el-form-item label=" 发货物流id" prop="logisticsId">
+          <el-input v-model="form.logisticsId" placeholder="请输入 发货物流id" />
+        </el-form-item>
+        <el-form-item label="人工退款金额" prop="manualRefundMoney">
+          <el-input v-model="form.manualRefundMoney" placeholder="请输入人工退款金额" />
+        </el-form-item>
+        <el-form-item label="人工退款操作人" prop="manualRefundOperator">
+          <el-input v-model="form.manualRefundOperator" placeholder="请输入人工退款操作人" />
+        </el-form-item>
+        <el-form-item label=" 收货人姓名" prop="name">
+          <el-input v-model="form.name" placeholder="请输入 收货人姓名" />
+        </el-form-item>
+        <el-form-item label=" 订单金额" prop="orderAmount">
+          <el-input v-model="form.orderAmount" placeholder="请输入 订单金额" />
+        </el-form-item>
+        <el-form-item label=" 订单号" prop="orderNum">
+          <el-input v-model="form.orderNum" placeholder="请输入 订单号" />
+        </el-form-item>
+        <el-form-item label=" 父订单(支付订单)id" prop="payId">
+          <el-input v-model="form.payId" placeholder="请输入 父订单(支付订单)id" />
+        </el-form-item>
+        <el-form-item label=" 收货人手机号" prop="phoneNum">
+          <el-input v-model="form.phoneNum" placeholder="请输入 收货人手机号" />
+        </el-form-item>
+        <el-form-item label=" 用户支付订单号" prop="platformPayOrder">
+          <el-input v-model="form.platformPayOrder" placeholder="请输入 用户支付订单号" />
+        </el-form-item>
+        <el-form-item label=" 申请退款原因" prop="reason">
+          <el-input v-model="form.reason" placeholder="请输入 申请退款原因" />
+        </el-form-item>
+        <el-form-item label=" 退货物流id" prop="refundLogisticsId">
+          <el-input v-model="form.refundLogisticsId" placeholder="请输入 退货物流id" />
+        </el-form-item>
+        <el-form-item label="申请退款备注" prop="refundNotes">
+          <el-input v-model="form.refundNotes" placeholder="请输入申请退款备注" />
+        </el-form-item>
+        <el-form-item label="退款备注图片" prop="refundNotesImages">
+          <el-input v-model="form.refundNotesImages" type="textarea" placeholder="请输入内容" />
+        </el-form-item>
+        <el-form-item label="退款订单号" prop="refundOrderNum">
+          <el-input v-model="form.refundOrderNum" placeholder="请输入退款订单号" />
+        </el-form-item>
+        <el-form-item label="退款完成时间" prop="refundTime">
+          <el-date-picker clearable
+            v-model="form.refundTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择退款完成时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备注" prop="remake">
+          <el-input v-model="form.remake" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="订单状态 1:待付款 2:待发货 3:待收货 4:订单完成 5:已取消" prop="status">
+          <el-select v-model="form.status" placeholder="请选择订单状态 1:待付款 2:待发货 3:待收货 4:订单完成 5:已取消">
+            <el-option
+              v-for="dict in dict.type.app_goods_order_status"
+              :key="dict.value"
+              :label="dict.label"
+              :value="parseInt(dict.value)"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label=" 任务id" prop="taskId">
+          <el-input v-model="form.taskId" placeholder="请输入 任务id" />
+        </el-form-item>
+        <el-form-item label=" 交易金额(实付金额)" prop="transactionAmount">
+          <el-input v-model="form.transactionAmount" placeholder="请输入 交易金额(实付金额)" />
+        </el-form-item>
+        <el-form-item label="交易成功时间" prop="transactionTime">
+          <el-date-picker clearable
+            v-model="form.transactionTime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择交易成功时间">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label=" 用户id" prop="uid">
+          <el-input v-model="form.uid" placeholder="请输入 用户id" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 添加或修改购物订单对话框 -->
+    <el-dialog :title="title" :visible.sync="wlOpen" width="500px" append-to-body>
+      <el-form ref="wlForm" :model="wlForm" :rules="wlRules" label-width="80px">
+        <el-form-item label="物流名称" prop="logisticsName">
+          <el-input v-model="wlForm.logisticsName" placeholder="请输入 物流名称" />
+        </el-form-item>
+        <el-form-item label="物流单号" prop="logisticsNum">
+          <el-input v-model="wlForm.logisticsNum" placeholder="请输入 物流单号" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitSendForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listOrder, getOrder, delOrder, addOrder, updateOrder,send } from "@/api/business/order";
+
+export default {
+  name: "Order",
+  dicts: ['app_goods_order_status'],
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 购物订单表格数据
+      orderList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      wlOpen:false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        addTime: null,
+        address: null,
+        addressId: null,
+        anchorId: null,
+        auditFailureReason: null,
+        businessId: null,
+        businessLogo: null,
+        businessName: null,
+        goodsChannelId: null,
+        isManualRefund: null,
+        logisticsId: null,
+        manualRefundMoney: null,
+        manualRefundOperator: null,
+        manualRefundType: null,
+        name: null,
+        orderAmount: null,
+        orderNum: null,
+        payId: null,
+        phoneNum: null,
+        platformPayOrder: null,
+        quitStatus: null,
+        reason: null,
+        refundLogisticsId: null,
+        refundNotes: null,
+        refundNotesImages: null,
+        refundOrderNum: null,
+        refundTime: null,
+        refundType: null,
+        remake: null,
+        status: null,
+        taskId: null,
+        transactionAmount: null,
+        transactionTime: null,
+        uid: null
+      },
+      // 表单参数
+      form: {},
+      wlForm:{},
+      // 表单校验
+      rules: {
+      },
+      // 表单校验
+      wlRules: {
+        logisticsName: [
+          { required: true, message: "物流名称不能为空", trigger: "blur" }
+        ],
+        logisticsNum: [
+          { required: true, message: "物流单号不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询购物订单列表 */
+    getList() {
+      this.loading = true;
+      listOrder(this.queryParams).then(response => {
+        this.orderList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.wlOpen = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        addTime: null,
+        address: null,
+        addressId: null,
+        anchorId: null,
+        auditFailureReason: null,
+        businessId: null,
+        businessLogo: null,
+        businessName: null,
+        goodsChannelId: null,
+        isManualRefund: null,
+        logisticsId: null,
+        manualRefundMoney: null,
+        manualRefundOperator: null,
+        manualRefundType: null,
+        name: null,
+        orderAmount: null,
+        orderNum: null,
+        payId: null,
+        phoneNum: null,
+        platformPayOrder: null,
+        quitStatus: null,
+        reason: null,
+        refundLogisticsId: null,
+        refundNotes: null,
+        refundNotesImages: null,
+        refundOrderNum: null,
+        refundTime: null,
+        refundType: null,
+        remake: null,
+        status: null,
+        taskId: null,
+        transactionAmount: null,
+        transactionTime: null,
+        uid: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加购物订单";
+    },
+    /** 修改按钮操作 */
+    handleSend(row) {
+      this.wlForm = {
+        id:row.id,
+        logisticsName:null,
+        logisticsNum:null
+      };
+      this.wlOpen = true;
+      this.title = "发货";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getOrder(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改购物订单";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updateOrder(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addOrder(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 提交按钮 */
+    submitSendForm() {
+      this.$refs["wlForm"].validate(valid => {
+        if (valid) {
+          const loading = this.$loading({
+            lock: true,
+            text: '加载中',
+            spinner: 'el-icon-loading',
+            background: 'rgba(0, 0, 0, 0.7)'
+          });
+          send(this.wlForm).then(response => {
+            this.$modal.msgSuccess("发货成功");
+            this.wlOpen = false;
+            this.getList();
+            loading.close();
+          });
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除购物订单编号为"' + ids + '"的数据项?').then(function() {
+        return delOrder(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('business/order/export', {
+        ...this.queryParams
+      }, `order_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 496 - 17
game-ui/src/views/business/user/index.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="app-container">
-    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
       <el-form-item label="UID" prop="userid">
         <el-input
           v-model="queryParams.userid"
@@ -25,6 +25,14 @@
           @keyup.enter.native="handleQuery"
         />
       </el-form-item>
+      <el-form-item label="登录ip地址" prop="ipaddr">
+        <el-input
+          v-model="queryParams.ipaddr"
+          placeholder="请输入手机号 "
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
       <el-form-item label="在线状态" prop="onlineStatus">
         <el-select v-model="queryParams.onlineStatus" placeholder="请选择" clearable>
           <el-option
@@ -109,15 +117,21 @@
     <el-table v-loading="loading" :data="userList" style="width: 100%" @scroll="handleScroll" @selection-change="handleSelectionChange">
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column fixed label="UID" align="center" prop="userid" />
-      <el-table-column fixed label="昵称 " align="center" prop="username" />
+      <el-table-column fixed label="昵称 " align="center" prop="username" width="200"/>
       <el-table-column label="头像" align="center" prop="avatar" width="100">
         <template slot-scope="scope">
           <image-preview :src="scope.row.avatar" :width="50" :height="50"/>
         </template>
       </el-table-column>
-      <el-table-column label="金币" align="center" prop="coin" />
-      <el-table-column label="余额" align="center" prop="diamondCoin" />
-      <el-table-column label=" 手机号" align="center" prop="mobile" />
+      <el-table-column label="金币" align="center" prop="coin" width="150"/>
+      <el-table-column label="余额" align="center" prop="diamondCoin" width="150"/>
+      <el-table-column label="手机号" align="center" prop="mobile" width="150"/>
+      <el-table-column label="最近一次登录ip" align="center" prop="ipaddr" width="150"/>
+      <el-table-column label=" 上次登录时间" align="center" prop="lastLoginTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.lastLoginTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="最大连续签到天数" align="center" prop="maxSignCount" />
       <el-table-column label="主播等级" align="center" prop="anchorGrade" />
       <el-table-column label="主播积分" align="center" prop="anchorPoint" />
@@ -125,25 +139,19 @@
       <el-table-column label="魅力等级" align="center" prop="charmGrade" />
       <el-table-column label="魅力积分" align="center" prop="charmPoint" />
       <el-table-column label="可兑换" align="center" prop="coinCash" />
-      <el-table-column label="消费总额(财富积分)" align="center" prop="consumption" />
+      <el-table-column label="消费总额(财富积分)" align="center" prop="consumption" width="150"/>
       <el-table-column label="注册时间" align="center" prop="createTime" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
         </template>
       </el-table-column>
       <el-table-column label="邀请码" align="center" prop="inviteCode" />
-      <el-table-column label="用户当前的位置" align="center" prop="ipaddr" />
       <el-table-column label="主播是否认证" align="center" prop="isAnchorAuth">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.is_anchor_auth" :value="scope.row.isAnchorAuth"/>
         </template>
       </el-table-column>
-      <el-table-column label="最后登录ip" align="center" prop="lastLoginIp" />
-      <el-table-column label=" 上次登录时间" align="center" prop="lastLoginTime" width="180">
-        <template slot-scope="scope">
-          <span>{{ parseTime(scope.row.lastLoginTime, '{y}-{m}-{d}') }}</span>
-        </template>
-      </el-table-column>
+<!--      <el-table-column label="最后登录ip" align="center" prop="lastLoginIp" />-->
       <el-table-column label=" 离线时间" align="center" prop="lastOffLineTime" width="180">
         <template slot-scope="scope">
           <span>{{ parseTime(scope.row.lastOffLineTime, '{y}-{m}-{d}') }}</span>
@@ -174,7 +182,7 @@
           <dict-tag :options="dict.type.app_user_status" :value="scope.row.status"/>
         </template>
       </el-table-column>
-      <el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width">
+      <el-table-column fixed="right" label="操作" align="center" width="200" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
             size="mini"
@@ -183,6 +191,12 @@
             v-if="scope.row.role == 1 && scope.row.liveLive"
             @click="handleLive(scope.row)"
           >{{scope.row.liveLive.islive==1?'关播':'虚拟开播'}}</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="getUserDetail(scope.row)"
+          >查看详情</el-button>
           <el-button
             size="mini"
             type="text"
@@ -484,19 +498,288 @@
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
+
+    <!-- 用户详情对话框 -->
+    <el-dialog :title="title" :visible.sync="superOpen" width="80%" append-to-body>
+      <el-form >
+        <el-form-item label="">
+          <span>
+            <image-preview :src="userInfo.avatar" :width="50" :height="50"/>&nbsp;&nbsp;
+          </span>
+          <span style="margin-left: 1rem;">{{userInfo.userid}} {{userInfo.role==0?"普通用户":"主播"}}</span>
+          <span style="margin-left: 1rem;">注册IP:{{userInfo.registerIp}}</span>
+          <span style="margin-left: 1rem;">最后登录IP:{{userInfo.ipaddr}}</span>
+        </el-form-item>
+        <el-form-item label="">
+          <span>
+            金币:{{userInfo.coin}}
+          </span>
+          <span style="margin-left: 1rem;">
+            余额:{{userInfo.diamondCoin}}
+          </span>
+        </el-form-item>
+
+        <el-form-item label="">
+          <el-tabs v-model="activeName" @tab-click="handleClick" style="width: 100%">
+            <el-tab-pane label="上级推荐人列表" name="first">
+              <el-table
+                :data="superUserList"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="userId"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="pid"
+                  label="上级UID">
+                </el-table-column>
+              </el-table>
+            </el-tab-pane>
+            <el-tab-pane label="用户待遇" name="second">
+              <el-form-item label="">
+                <span>
+                  直播分红:{{undefined!=userInfo.infoDetail?userInfo.infoDetail.liveRate+"%":"-"}}
+                </span>
+                <span style="margin-left: 1rem;">
+                  保底分红:{{undefined!=userInfo.infoDetail?userInfo.infoDetail.dividendGuaranteeRate+"%":"-"}}
+                </span>
+                <el-table
+                  :data="undefined!=userInfo.infoDetail?userInfo.infoDetail.gameCommissionList:[]"
+                  stripe
+                  style="width: 100%">
+                  <el-table-column
+                    prop="gameName"
+                    label="游戏">
+                  </el-table-column>
+                  <el-table-column
+                    prop="gameRate"
+                    label="返佣">
+                    <template slot-scope="scope">
+                      {{scope.row.gameRate + "%"}}
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-form-item>
+            </el-tab-pane>
+            <el-tab-pane label="同IP登录用户" name="three">
+              <el-table
+                v-loading="ipLoading"
+                :data="ipUserList"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="userid"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="username"
+                  label="昵称">
+                </el-table-column>
+                <el-table-column
+                  prop="ipaddr"
+                  label="最后登录ip">
+                </el-table-column>
+              </el-table>
+              <pagination
+                v-show="ipTotal>0"
+                :total="ipTotal"
+                :page.sync="queryIpParams.pageNum"
+                :limit.sync="queryIpParams.pageSize"
+                @pagination="getIpList"
+              />
+            </el-tab-pane>
+            <el-tab-pane label="绑定提现账号" name="four">
+              <el-table
+                :data="accountList"
+                v-loading="accountLoading"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="uid"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="account"
+                  label="账号">
+                </el-table-column>
+              </el-table>
+              <pagination
+                v-show="accountTotal>0"
+                :total="accountTotal"
+                :page.sync="queryAccountParams.pageNum"
+                :limit.sync="queryAccountParams.pageSize"
+                @pagination="getAccountList"
+              />
+            </el-tab-pane>
+            <el-tab-pane label="兑换记录" name="five">
+              <el-table
+                :data="orderList"
+                v-loading="orderLoading"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="uid"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="productNames"
+                  label="商品">
+                </el-table-column>
+                <el-table-column label="交易金额(实付金额)" align="center" prop="transactionAmount" />
+                <el-table-column label="收货人地址" align="center" prop="address" width="200"/>
+                <el-table-column label="订单状态" align="center" prop="status">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.app_goods_order_status" :value="scope.row.status"/>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <pagination
+                v-show="orderTotal>0"
+                :total="orderTotal"
+                :page.sync="queryOrderParams.pageNum"
+                :limit.sync="queryOrderParams.pageSize"
+                @pagination="getOrderList"
+              />
+            </el-tab-pane>
+            <el-tab-pane label="直播获得的游戏投注返佣" name="six">
+              <el-table
+                :data="liveList"
+                v-loading="liveLoading"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="userId"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="gameName"
+                  label="游戏">
+                </el-table-column>
+                <el-table-column label="期号" align="center" prop="gameDate" />
+                <el-table-column label="佣金" align="center" prop="commission" />
+              </el-table>
+              <pagination
+                v-show="liveTotal>0"
+                :total="liveTotal"
+                :page.sync="queryLiveParams.pageNum"
+                :limit.sync="queryLiveParams.pageSize"
+                @pagination="getLiveList"
+              />
+            </el-tab-pane>
+            <el-tab-pane label="收到的礼物" name="seven">
+              <el-table
+                :data="giftList"
+                v-loading="giftLoading"
+                stripe
+                style="width: 100%">
+                <el-table-column
+                  prop="fromUid"
+                  label="UID">
+                </el-table-column>
+                <el-table-column
+                  prop="coinChange"
+                  label="礼物收益">
+                </el-table-column>
+                <el-table-column
+                  prop="remarks"
+                  label="礼物">
+                </el-table-column>
+                <el-table-column
+                  prop="createTime"
+                  label="时间">
+                </el-table-column>
+              </el-table>
+              <pagination
+                v-show="giftTotal>0"
+                :total="giftTotal"
+                :page.sync="queryGiftParams.pageNum"
+                :limit.sync="queryGiftParams.pageSize"
+                @pagination="getGiftList"
+              />
+            </el-tab-pane>
+            <el-tab-pane label="下注记录" name="eight">
+              <el-table
+                :data="bettingList"
+                v-loading="bettingLoading"
+                stripe
+                style="width: 100%">
+                <el-table-column label="游戏" align="center" prop="gameId">
+                  <template slot-scope="scope">
+                    <span>{{ getTypeName(scope.row.gameId) }}</span>
+                  </template>
+                </el-table-column>
+                <el-table-column label="用户ID" align="center" prop="userId" />
+                <el-table-column label="游戏期号" align="center" prop="gameDate" />
+                <el-table-column label="主播ID" align="center" prop="liveUserId" />
+                <el-table-column label="直播房间号" align="center" prop="liveRoomId" />
+                <el-table-column label="是否直播间投注 " align="center" prop="isLive">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.app_betting_is_live" :value="scope.row.isLive"/>
+                  </template>
+                </el-table-column>
+                <el-table-column label="投注类型" align="center" prop="bettingType">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.app_game_betting_type" :value="scope.row.bettingType"/>
+                  </template>
+                </el-table-column>
+                <el-table-column label="投注选项" align="center" prop="bettingItem">
+                  <template slot-scope="scope">
+                    {{getItemName(scope.row)}}
+                  </template>
+                </el-table-column>
+                <el-table-column label="投注选项倍数" align="center" prop="bettingMultiple" />
+                <el-table-column label="投注金额" align="center" prop="bettingAmount" />
+                <el-table-column label="投注佣金" align="center" prop="bettingCommission" />
+                <el-table-column label="是否中奖" align="center" prop="isWinning">
+                  <template slot-scope="scope">
+                    <dict-tag :options="dict.type.app_game_betting_winning" :value="scope.row.isWinning"/>
+                  </template>
+                </el-table-column>
+              </el-table>
+              <pagination
+                v-show="bettingTotal>0"
+                :total="bettingTotal"
+                :page.sync="queryBettingParams.pageNum"
+                :limit.sync="queryBettingParams.pageSize"
+                @pagination="getBettingList"
+              />
+            </el-tab-pane>
+          </el-tabs>
+        </el-form-item>
+
+      </el-form>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="cancel">关闭</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-import { listUser, getUser, delUser, addUser, updateUser,resetUser,userCharge,channelList,withdraw,openLive } from "@/api/business/user";
+import { listUser, getUser, delUser, addUser, updateUser,resetUser,userCharge,channelList,withdraw,openLive,userDetail,liveCommission,getGift  } from "@/api/business/user";
+import { listAccount} from "@/api/business/account";
+import { listOrder } from "@/api/business/order";
+import { listBetting} from "@/api/business/betting";
+import {allGameList } from "@/api/business/game_item";
+import {allList} from "@/api/business/lottery";
 
 export default {
   name: "User",
-  dicts: ['is_anchor_auth', 'app_user_role', 'app_user_status', 'app_user_online_status','app_user_coin_type','app_charge_rate'],
+  dicts: ['is_anchor_auth', 'app_user_role', 'app_user_status', 'app_user_online_status','app_user_coin_type','app_charge_rate','app_goods_order_status','app_betting_is_live','app_game_betting_type','app_game_betting_winning'],
   data() {
     return {
+      activeName:"first",
       // 遮罩层
       loading: true,
+      ipLoading: true,
+      accountLoading: true,
+      orderLoading: true,
+      liveLoading: true,
+      giftLoading: true,
+      bettingLoading: true,
       // 选中数组
       ids: [],
       // 非单个禁用
@@ -507,8 +790,20 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
+      ipTotal: 0,
+      accountTotal: 0,
+      orderTotal: 0,
+      liveTotal: 0,
+      giftTotal: 0,
+      bettingTotal: 0,
       // app用户表格数据
       userList: [],
+      ipUserList: [],
+      accountList: [],
+      orderList: [],
+      liveList: [],
+      giftList: [],
+      bettingList: [],
       // 弹出层标题
       title: "",
       // 是否显示弹出层
@@ -525,7 +820,45 @@ export default {
       channelMap:{},
       liveLive:{},
       liveOpen:false,
+      superOpen:false,
+      userInfo:{},
       closeMsg:null,
+      superUserList:[],
+      typeMap:{},
+      typeList:[],
+      gameItemMap:{},
+      gameItemList:[],
+      gameItemShowList:[],
+      queryIpParams: {
+        pageNum: 1,
+        pageSize: 10,
+        ipaddr: null,
+      },
+      queryAccountParams: {
+        pageNum: 1,
+        pageSize: 10,
+        uid: null,
+      },
+      queryOrderParams: {
+        pageNum: 1,
+        pageSize: 10,
+        uid: null,
+      },
+      queryLiveParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userId: null,
+      },
+      queryGiftParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userId: null,
+      },
+      queryBettingParams: {
+        pageNum: 1,
+        pageSize: 10,
+        userId: null,
+      },
       // 查询参数
       queryParams: {
         pageNum: 1,
@@ -596,7 +929,34 @@ export default {
     };
   },
   created() {
-    this.getList();
+    let that = this;
+    allList().then(response => {
+      if(response.data){
+        for(var i in response.data){
+          var item = response.data[i];
+          that.gameItemMap[item.itemLocation.toString() + "_" + item.gameId] = item.itemName;
+          that.gameItemList.push({
+            value:item.itemLocation+"_"+item.gameId,
+            label:item.itemName,
+            gameId:item.gameId
+          })
+        }
+      }
+    });
+    allGameList().then(response => {
+      if(response.data){
+        for(var i in response.data){
+          var item = response.data[i];
+          that.typeMap[item.id.toString()] = item.name;
+          that.typeList.push({
+            value:item.id,
+            label:item.name
+          })
+        }
+      }
+      that.getList();
+
+    });
   },
   computed: {
     currentRules:function(){
@@ -611,6 +971,29 @@ export default {
     },
   },
   methods: {
+    getItemName(row){
+      let that = this;
+      let bettingGameType = row.bettingGameType;
+      let bettingItem = row.bettingItem;
+      let gameId = row.gameId;
+      if("0" == bettingGameType){
+        return that.gameItemMap[bettingItem+"_"+gameId];
+      }else{
+        let name = "";
+        let arr = JSON.parse(bettingItem);
+        for(var i in arr){
+          let item = arr[i];
+          if("" != name){
+            name = name + ",";
+          }
+          name = name + that.gameItemMap[item["bettingItem"]+"_"+gameId];
+        }
+        return name;
+      }
+    },
+    getTypeName(id) {
+      return this.typeMap[id.toString()];
+    },
     /** 查询app用户列表 */
     getList() {
       this.loading = true;
@@ -620,6 +1003,66 @@ export default {
         this.loading = false;
       });
     },
+    /** 查询同ip app用户列表 */
+    getIpList() {
+      this.ipLoading = true;
+      this.queryIpParams.ipaddr = this.userInfo.ipaddr;
+      listUser(this.queryIpParams).then(response => {
+        this.ipUserList = response.rows;
+        this.ipTotal = response.total;
+        this.ipLoading = false;
+      });
+    },
+    /** 查询提现账号列表 */
+    getAccountList() {
+      this.accountLoading = true;
+      this.queryAccountParams.uid = this.userInfo.userid;
+      listAccount(this.queryIpParams).then(response => {
+        this.accountList = response.rows;
+        this.accountTotal = response.total;
+        this.accountLoading = false;
+      });
+    },
+    /** 查询兑换列表 */
+    getOrderList() {
+      this.orderLoading = true;
+      this.queryOrderParams.uid = this.userInfo.userid;
+      listOrder(this.queryOrderParams).then(response => {
+        this.orderList = response.rows;
+        this.orderTotal = response.total;
+        this.orderLoading = false;
+      });
+    },
+    /** 查询兑换列表 */
+    getLiveList() {
+      this.liveLoading = true;
+      this.queryLiveParams.userId = this.userInfo.userid;
+      liveCommission(this.queryLiveParams).then(response => {
+        this.liveList = response.rows;
+        this.liveTotal = response.total;
+        this.liveLoading = false;
+      });
+    },
+    /** 查询礼物列表 */
+    getGiftList() {
+      this.giftLoading = true;
+      this.queryGiftParams.userId = this.userInfo.userid;
+      getGift(this.queryGiftParams).then(response => {
+        this.giftList = response.rows;
+        this.giftTotal = response.total;
+        this.giftLoading = false;
+      });
+    },
+    /** 查询下注记录 */
+    getBettingList() {
+      this.bettingLoading = true;
+      this.queryBettingParams.userId = this.userInfo.userid;
+      listBetting(this.queryBettingParams).then(response => {
+        this.bettingList = response.rows;
+        this.bettingTotal = response.total;
+        this.bettingLoading = false;
+      });
+    },
     // 取消按钮
     cancel() {
       this.open = false;
@@ -627,6 +1070,7 @@ export default {
       this.chargeopen = false;
       this.resetWithdrawopen = false;
       this.liveOpen = false;
+      this.superOpen = false;
       this.reset();
       this.resetPwd();
       this.resetCharge();
@@ -1078,7 +1522,42 @@ export default {
         this.rate = rate;
       }
       // this.chargeRules = rule;
+    },
+    getUserDetail(row){
+      let that = this;
+      that.title = "用户详情"
+      that.activeName = "first";
+      that.userInfo = row;
+      that.userInfo["infoDetail"] = {};
+      userDetail({"userId":row.userid}).then(response => {
+          that.superUserList = response.data.superUserList;
+          this.userInfo["infoDetail"] = response.data;
+          that.superOpen = true;
+      });
+    },
+    handleClick(tab, event) {
+      if("three" == tab.$options.propsData.name){
+        this.getIpList();
+      }
+      if("four" == tab.$options.propsData.name){
+        this.getAccountList();
+      }
+      if("five" == tab.$options.propsData.name){
+        this.getOrderList();
+      }
+      if("six" == tab.$options.propsData.name){
+        this.getLiveList();
+      }
+      if("seven" == tab.$options.propsData.name){
+        this.getGiftList();
+      }
+      if("eight" == tab.$options.propsData.name){
+        this.getBettingList();
+      }
     }
   }
 };
 </script>
+<style scoped>
+
+</style>