kk il y a 3 mois
Parent
commit
cbe52fa115
17 fichiers modifiés avec 767 ajouts et 84 suppressions
  1. 1 1
      game-business/src/main/java/com/game/business/config/GameOneConfig.java
  2. 22 0
      game-business/src/main/java/com/game/business/config/GameTwoConfig.java
  3. 33 3
      game-business/src/main/java/com/game/business/controller/AppGameBettingController.java
  4. 115 0
      game-business/src/main/java/com/game/business/controller/AppGameItemController.java
  5. 43 2
      game-business/src/main/java/com/game/business/controller/AppGameLotteryController.java
  6. 57 0
      game-business/src/main/java/com/game/business/domain/AppGameItem.java
  7. 61 0
      game-business/src/main/java/com/game/business/mapper/AppGameItemMapper.java
  8. 70 0
      game-business/src/main/java/com/game/business/service/IAppGameItemService.java
  9. 110 0
      game-business/src/main/java/com/game/business/service/impl/AppGameItemServiceImpl.java
  10. 86 73
      game-business/src/main/java/com/game/business/task/AppGameBettingTask.java
  11. 4 2
      game-business/src/main/java/com/game/business/util/Common.java
  12. 14 0
      game-business/src/main/java/com/game/business/vo/AppGameBettingVO.java
  13. 4 0
      game-business/src/main/java/com/game/business/vo/AppGameLotteryVO.java
  14. 7 0
      game-business/src/main/java/com/game/business/websocket/WebSocketConnent.java
  15. 4 3
      game-business/src/main/java/com/game/business/websocket/client/GameOneClient.java
  16. 65 0
      game-business/src/main/java/com/game/business/websocket/client/GameTwoClient.java
  17. 71 0
      game-business/src/main/resources/mapper/business/AppGameItemMapper.xml

+ 1 - 1
game-business/src/main/java/com/game/business/config/GameOneConfig.java

@@ -16,7 +16,7 @@ public class GameOneConfig implements CommandLineRunner {
     @Override
     @Async
     public void run(String... args) throws Exception {
-        webSocketConnent = new WebSocketConnent(Common.WS_GAME_URL, Common.GANME_ONE_NAME);
+        webSocketConnent = new WebSocketConnent(Common.WS_GAME_ONE_URL, Common.GANME_ONE_NAME);
         webSocketConnent.connect();
     }
 }

+ 22 - 0
game-business/src/main/java/com/game/business/config/GameTwoConfig.java

@@ -0,0 +1,22 @@
+package com.game.business.config;
+
+import com.game.business.util.Common;
+import com.game.business.websocket.WebSocketConnent;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.stereotype.Component;
+
+@Component
+@EnableAsync
+public class GameTwoConfig implements CommandLineRunner {
+
+    public static WebSocketConnent webSocketConnent;
+
+    @Override
+    @Async
+    public void run(String... args) throws Exception {
+        webSocketConnent = new WebSocketConnent(Common.WS_GAME_TWO_URL, Common.GANME_TWO_NAME);
+        webSocketConnent.connect();
+    }
+}

+ 33 - 3
game-business/src/main/java/com/game/business/controller/AppGameBettingController.java

@@ -5,6 +5,7 @@ import com.game.business.domain.*;
 import com.game.business.vo.AppGameBettingCountVO;
 import com.game.business.vo.AppGameBettingDetailsCountVO;
 import com.game.business.service.*;
+import com.game.business.vo.AppGameBettingVO;
 import com.game.common.annotation.Anonymous;
 import com.game.common.core.controller.BaseController;
 import com.game.common.core.domain.HttpRet;
@@ -13,6 +14,7 @@ import com.game.common.core.redis.RedisCache;
 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.web.bind.annotation.*;
 
@@ -42,6 +44,9 @@ public class AppGameBettingController extends BaseController{
     @Autowired
     private IAppGameLotteryService appGameLotteryService;
 
+    @Autowired
+    private IAppGameItemService appGameItemService;
+
     @Autowired
     private RedisCache redisCache;
 
@@ -88,6 +93,12 @@ public class AppGameBettingController extends BaseController{
             return HttpRet.fail("游戏已封盘,无法下单。");
         }
 
+        AppGameItem appGameItem = appGameItemService.selectAppGameItemByGameIdAndItemLocation(appGame.getId(), gameBetting.getBettingItem());
+        if(appGameItem == null){
+            return HttpRet.fail("游戏选项不存在,无法下单。");
+        }
+
+        gameBetting.setBettingMultiple(appGameItem.getItemMultiple());
 //        String[] timeArry = appGame.getGameTime().substring(0, 5).split(":");
 //        int m = Integer.parseInt(timeArry[1]);
 //
@@ -245,11 +256,30 @@ public class AppGameBettingController extends BaseController{
     @Anonymous
     @PostMapping(value = "/listByGameId")
     @ApiOperation(value = "游戏输赢统计(详情)", notes = "游戏输赢统计(详情)")
-    public HttpRetPageArr<AppGameBetting> getListByGameId(@RequestParam(name = "gameId") Long gameId, @RequestParam(name = "userId") Long userId,
-                                                          @RequestParam(name = "isWinning") Integer isWinning, @RequestParam(name = "strDate", required = false) String strDate)
+    public HttpRetPageArr<AppGameBettingVO> getListByGameId(@RequestParam(name = "gameId") Long gameId, @RequestParam(name = "userId") Long userId,
+                                                            @RequestParam(name = "isWinning") Integer isWinning, @RequestParam(name = "strDate", required = false) String strDate)
     {
         startPage();
         List<AppGameBetting> list = appGameBettingService.selectListByGameId(gameId, userId, isWinning, strDate);
-        return HttpRetPageArr.success("查询成功",getDataTable(list));
+        List<AppGameBettingVO> resultList = new ArrayList<>();
+        if(list != null && !list.isEmpty()){
+            AppGameItem appGameItem = new AppGameItem();
+            appGameItem.setGameId(gameId);
+            List<AppGameItem> itemList = appGameItemService.selectAppGameItemList(appGameItem);
+            Map<String, List<AppGameItem>> codeItmeMap = itemList.stream().collect(Collectors.groupingBy(AppGameItem::getItemLocation));
+            for (int i = 0; i <list.size(); i++) {
+                AppGameBetting appGameBetting  = list.get(i);
+                AppGameBettingVO appGameBettingVO = new AppGameBettingVO();
+                BeanUtils.copyProperties(appGameBetting, appGameBettingVO);
+
+                if(StringUtils.isNoneBlank(appGameBettingVO.getBettingItem())){
+                    if(codeItmeMap.containsKey(appGameBettingVO.getBettingItem())){
+                        appGameBettingVO.setItemName(codeItmeMap.get(appGameBettingVO.getBettingItem()).get(0).getItemName());
+                    }
+                }
+                resultList.add(appGameBettingVO);
+            }
+        }
+        return HttpRetPageArr.success("查询成功",getDataTable(resultList));
     }
 }

+ 115 - 0
game-business/src/main/java/com/game/business/controller/AppGameItemController.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.AppGameItem;
+import com.game.business.service.IAppGameItemService;
+import com.game.common.utils.poi.ExcelUtil;
+import com.game.common.core.page.TableDataInfo;
+
+/**
+ * 游戏选项Controller
+ * 
+ * @author game
+ * @date 2024-06-29
+ */
+@RestController
+@RequestMapping("/business/game_item")
+@Api(value = "AppGameItemController", description = "游戏选项接口", tags = {"游戏选项"})
+public class AppGameItemController extends BaseController
+{
+    @Autowired
+    private IAppGameItemService appGameItemService;
+
+    /**
+     * 查询游戏选项列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询游戏选项列表", notes = "获取游戏选项列表")
+    public TableDataInfo<AppGameItem> list(AppGameItem appGameItem)
+    {
+        startPage();
+        List<AppGameItem> list = appGameItemService.selectAppGameItemList(appGameItem);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出游戏选项列表
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:export')")
+    @Log(title = "游戏选项", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出游戏选项列表", notes = "导出游戏选项列表")
+    public void export(HttpServletResponse response, AppGameItem appGameItem)
+    {
+        List<AppGameItem> list = appGameItemService.selectAppGameItemList(appGameItem);
+        ExcelUtil<AppGameItem> util = new ExcelUtil<AppGameItem>(AppGameItem.class);
+        util.exportExcel(response, list, "游戏选项数据");
+    }
+
+    /**
+     * 获取游戏选项详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取游戏选项详细信息", notes = "获取游戏选项详细信息")
+    public R<AppGameItem> getInfo(@PathVariable("id") Long id)
+    {
+        return R.ok(appGameItemService.selectAppGameItemById(id));
+    }
+
+    /**
+     * 新增游戏选项
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:add')")
+    @Log(title = "游戏选项", businessType = BusinessType.INSERT)
+    @ApiOperation(value = "新增游戏选项", notes = "新增游戏选项")
+    @PostMapping
+    public R add(@RequestBody AppGameItem appGameItem)
+    {
+        return R.ok(appGameItemService.insertAppGameItem(appGameItem));
+    }
+
+    /**
+     * 修改游戏选项
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:edit')")
+    @Log(title = "游戏选项", businessType = BusinessType.UPDATE)
+    @ApiOperation(value = "修改游戏选项", notes = "修改游戏选项")
+    @PutMapping
+    public R edit(@RequestBody AppGameItem appGameItem)
+    {
+        return R.ok(appGameItemService.updateAppGameItem(appGameItem));
+    }
+
+    /**
+     * 删除游戏选项
+     */
+    @PreAuthorize("@ss.hasPermi('business:game_item:remove')")
+    @Log(title = "游戏选项", businessType = BusinessType.DELETE)
+    @ApiOperation(value = "删除游戏选项", notes = "删除游戏选项")
+	@DeleteMapping("/{ids}")
+    public R remove(@PathVariable Long[] ids)
+    {
+        return R.ok(appGameItemService.deleteAppGameItemByIds(ids));
+    }
+}

+ 43 - 2
game-business/src/main/java/com/game/business/controller/AppGameLotteryController.java

@@ -2,22 +2,29 @@ package com.game.business.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.game.business.domain.AppGameItem;
 import com.game.business.domain.AppGameLottery;
+import com.game.business.service.IAppGameItemService;
 import com.game.business.service.IAppGameLotteryService;
 import com.game.business.service.IAppGameService;
+import com.game.business.vo.AppGameLotteryVO;
 import com.game.common.annotation.Anonymous;
 import com.game.common.core.controller.BaseController;
 import com.game.common.core.domain.HttpRetPageArr;
 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.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 @RestController
 @RequestMapping("/business/lottery")
@@ -30,10 +37,13 @@ public class AppGameLotteryController extends BaseController{
     @Autowired
     private IAppGameService appGameService;
 
+    @Autowired
+    private IAppGameItemService appGameItemService;
+
     @Anonymous
     @PostMapping(value = "/list")
     @ApiOperation(value = "游戏开奖记录", notes = "游戏开奖记录")
-    public HttpRetPageArr<AppGameLottery> getListByGameId(@RequestParam(name = "gameId") Long gameId, @RequestParam(name= "gameDate", required = false) String gameDate
+    public HttpRetPageArr<AppGameLotteryVO> getListByGameId(@RequestParam(name = "gameId") Long gameId, @RequestParam(name= "gameDate", required = false) String gameDate
             , @RequestParam(name= "strDate", required = false) String strDate)
     {
         startPage();
@@ -48,6 +58,37 @@ public class AppGameLotteryController extends BaseController{
         }
         queryLotteryWrapper.orderByDesc(AppGameLottery::getGameRecordDate);
         List<AppGameLottery> list = appGameLotteryService.list(queryLotteryWrapper);
+        List<AppGameLotteryVO> resultList = new ArrayList<>();
+
+        if(list != null && !list.isEmpty()) {
+            AppGameItem appGameItem = new AppGameItem();
+            appGameItem.setGameId(gameId);
+            List<AppGameItem> itemList = appGameItemService.selectAppGameItemList(appGameItem);
+            Map<String, List<AppGameItem>> codeItmeMap = itemList.stream().collect(Collectors.groupingBy(AppGameItem::getItemLocation));
+            for (int i = 0; i <list.size(); i++) {
+                AppGameLottery appGameLottery  = list.get(i);
+                AppGameLotteryVO appGameLotteryVO = new AppGameLotteryVO();
+                BeanUtils.copyProperties(appGameLottery, appGameLotteryVO);
+
+                if(StringUtils.isNoneBlank(appGameLotteryVO.getGameLotterySucc())){
+
+                    String [] itmeArr = appGameLotteryVO.getGameLotterySucc().split(",");
+                    String itemName = "";
+                    for (int j = 0; j < itmeArr.length; j++) {
+                        String item = itmeArr[j];
+                        if(codeItmeMap.containsKey(item)){
+                            if(StringUtils.isNoneBlank(itemName)){
+                                itemName += "," + codeItmeMap.get(item).get(0).getItemName();
+                            }else{
+                                itemName += codeItmeMap.get(item).get(0).getItemName();
+                            }
+                        }
+                    }
+                    appGameLotteryVO.setItemName(itemName);
+                }
+                resultList.add(appGameLotteryVO);
+            }
+        }
 
 //        List<AppGameLotteryDTO> resultList = new ArrayList<>();
 //
@@ -72,6 +113,6 @@ public class AppGameLotteryController extends BaseController{
 //            }
 //        }
 
-        return HttpRetPageArr.success("查询成功",getDataTable(list));
+        return HttpRetPageArr.success("查询成功",getDataTable(resultList));
     }
 }

+ 57 - 0
game-business/src/main/java/com/game/business/domain/AppGameItem.java

@@ -0,0 +1,57 @@
+package com.game.business.domain;
+
+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_game_item
+ *
+ * @author game
+ * @date 2024-06-29
+ */
+@ApiModel(value = "app_game_item", description = "游戏选项")
+@TableName(value= "app_game_item")
+@Data
+public class AppGameItem
+        {
+private static final long serialVersionUID=1L;
+
+    /** 主键ID */
+    @ApiModelProperty(value = "主键ID")
+    @TableId(value = "id" , type = IdType.AUTO)
+    private Long id;
+
+    /** 游戏ID */
+    @ApiModelProperty(value = "游戏ID")
+    @Excel(name = "游戏ID")
+    @TableField(value = "game_id")
+    private Long gameId;
+
+    /** 选项名称 */
+    @ApiModelProperty(value = "选项名称")
+    @Excel(name = "选项名称")
+    @TableField(value = "item_name")
+    private String itemName;
+
+    /** 选项倍数 */
+    @ApiModelProperty(value = "选项倍数")
+    @Excel(name = "选项倍数")
+    @TableField(value = "item_multiple")
+    private Integer itemMultiple;
+
+    /** 选项值(第三方同步) */
+    @ApiModelProperty(value = "选项值(第三方同步)")
+    @Excel(name = "选项值" , readConverterExp = "第=三方同步")
+    @TableField(value = "item_location")
+    private String itemLocation;
+
+}

+ 61 - 0
game-business/src/main/java/com/game/business/mapper/AppGameItemMapper.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.AppGameItem;
+
+/**
+ * 游戏选项Mapper接口
+ *
+ * @author game
+ * @date 2024-06-29
+ */
+public interface AppGameItemMapper extends BaseMapper<AppGameItem> {
+    /**
+     * 查询游戏选项
+     *
+     * @param id 游戏选项主键
+     * @return 游戏选项
+     */
+    public AppGameItem selectAppGameItemById(Long id);
+
+    /**
+     * 查询游戏选项列表
+     *
+     * @param appGameItem 游戏选项
+     * @return 游戏选项集合
+     */
+    public List<AppGameItem> selectAppGameItemList(AppGameItem appGameItem);
+
+    /**
+     * 新增游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    public int insertAppGameItem(AppGameItem appGameItem);
+
+    /**
+     * 修改游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    public int updateAppGameItem(AppGameItem appGameItem);
+
+    /**
+     * 删除游戏选项
+     *
+     * @param id 游戏选项主键
+     * @return 结果
+     */
+    public int deleteAppGameItemById(Long id);
+
+    /**
+     * 批量删除游戏选项
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deleteAppGameItemByIds(Long[] ids);
+}

+ 70 - 0
game-business/src/main/java/com/game/business/service/IAppGameItemService.java

@@ -0,0 +1,70 @@
+package com.game.business.service;
+
+import java.util.List;
+import com.game.business.domain.AppGameItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 游戏选项Service接口
+ *
+ * @author game
+ * @date 2024-06-29
+ */
+public interface IAppGameItemService extends IService<AppGameItem> {
+    /**
+     * 查询游戏选项
+     *
+     * @param id 游戏选项主键
+     * @return 游戏选项
+     */
+    public AppGameItem selectAppGameItemById(Long id);
+
+    /**
+     * 查询游戏选项
+     *
+     * @param gameId 游戏选项主键
+     * @param itemLocation 游戏选项值
+     * @return 游戏选项
+     */
+    public AppGameItem selectAppGameItemByGameIdAndItemLocation(Long gameId, String itemLocation);
+
+    /**
+     * 查询游戏选项列表
+     *
+     * @param appGameItem 游戏选项
+     * @return 游戏选项集合
+     */
+    public List<AppGameItem> selectAppGameItemList(AppGameItem appGameItem);
+
+    /**
+     * 新增游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    public int insertAppGameItem(AppGameItem appGameItem);
+
+    /**
+     * 修改游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    public int updateAppGameItem(AppGameItem appGameItem);
+
+    /**
+     * 批量删除游戏选项
+     *
+     * @param ids 需要删除的游戏选项主键集合
+     * @return 结果
+     */
+    public int deleteAppGameItemByIds(Long[] ids);
+
+    /**
+     * 删除游戏选项信息
+     *
+     * @param id 游戏选项主键
+     * @return 结果
+     */
+    public int deleteAppGameItemById(Long id);
+}

+ 110 - 0
game-business/src/main/java/com/game/business/service/impl/AppGameItemServiceImpl.java

@@ -0,0 +1,110 @@
+package com.game.business.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import java.util.List;
+
+import com.game.business.domain.AppGameBetting;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.game.business.mapper.AppGameItemMapper;
+import com.game.business.domain.AppGameItem;
+import com.game.business.service.IAppGameItemService;
+import com.game.common.annotation.DataSource;
+import com.game.common.enums.DataSourceType;
+
+/**
+ * 游戏选项Service业务层处理
+ *
+ * @author game
+ * @date 2024-06-29
+ */
+@Service
+public class AppGameItemServiceImpl extends ServiceImpl<AppGameItemMapper, AppGameItem> implements IAppGameItemService {
+    @Autowired
+    private AppGameItemMapper appGameItemMapper;
+
+    /**
+     * 查询游戏选项
+     *
+     * @param id 游戏选项主键
+     * @return 游戏选项
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public AppGameItem selectAppGameItemById(Long id) {
+        return appGameItemMapper.selectAppGameItemById(id);
+    }
+
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public AppGameItem selectAppGameItemByGameIdAndItemLocation(Long gameId, String itemLocation) {
+
+        LambdaQueryWrapper<AppGameItem> queryWrapper = Wrappers.lambdaQuery();;
+        queryWrapper.eq(AppGameItem::getGameId, gameId);
+        queryWrapper.eq(AppGameItem::getItemLocation, itemLocation);
+
+        return appGameItemMapper.selectOne(queryWrapper);
+    }
+
+    /**
+     * 查询游戏选项列表
+     *
+     * @param appGameItem 游戏选项
+     * @return 游戏选项
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public List<AppGameItem> selectAppGameItemList(AppGameItem appGameItem) {
+        return appGameItemMapper.selectAppGameItemList(appGameItem);
+    }
+
+    /**
+     * 新增游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int insertAppGameItem(AppGameItem appGameItem) {
+            return appGameItemMapper.insertAppGameItem(appGameItem);
+    }
+
+    /**
+     * 修改游戏选项
+     *
+     * @param appGameItem 游戏选项
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int updateAppGameItem(AppGameItem appGameItem) {
+        return appGameItemMapper.updateAppGameItem(appGameItem);
+    }
+
+    /**
+     * 批量删除游戏选项
+     *
+     * @param ids 需要删除的游戏选项主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteAppGameItemByIds(Long[] ids) {
+        return appGameItemMapper.deleteAppGameItemByIds(ids);
+    }
+
+    /**
+     * 删除游戏选项信息
+     *
+     * @param id 游戏选项主键
+     * @return 结果
+     */
+    @Override
+    @DataSource(DataSourceType.SLAVE)
+    public int deleteAppGameItemById(Long id) {
+        return appGameItemMapper.deleteAppGameItemById(id);
+    }
+}

+ 86 - 73
game-business/src/main/java/com/game/business/task/AppGameBettingTask.java

@@ -40,7 +40,7 @@ public class AppGameBettingTask {
     private RedisCache redisCache;
 
     @Async("asyncExecutor")
-    public void gameDataTask(String message){
+    public void gameDataTask(String message, String gameCodeFinal){
 
         JSONArray dataArry = JSONArray.parseArray(message);
 
@@ -55,7 +55,7 @@ public class AppGameBettingTask {
         }
 
         if(type == null){
-            System.out.println("游戏socket推送类型为空。");
+//            System.out.println("游戏socket推送类型为空。");
             return;
         }
 
@@ -79,29 +79,29 @@ public class AppGameBettingTask {
             }
 
             if(classCode == null){
-                System.out.println("游戏socket推送倒计时,平台ID为空。");
+//                System.out.println("游戏socket推送倒计时,平台ID为空。");
                 return;
             }
 
             if(gameDataArry == null){
-                System.out.println("游戏socket推送倒计时,data对象为空。");
+//                System.out.println("游戏socket推送倒计时,data对象为空。");
                 return;
             }
 
             if(time == null || time.trim().isEmpty()){
-                System.out.println("游戏socket推送倒计时,time为空。");
+//                System.out.println("游戏socket推送倒计时,time为空。");
                 return;
             }
 
             AppGameClassify appGameClassify = appGameClassifyService.getByCode(classCode);
             if(appGameClassify == null){
-                System.out.println("开奖游戏平台不存在:" + classCode);
+//                System.out.println("开奖游戏平台不存在:" + classCode);
                 return;
             }
 
             List<AppGame> appGameList = appGameService.selectAppGameByClassId(appGameClassify.getId());
             if(appGameList == null || appGameList.isEmpty()){
-                System.out.println("开奖游戏平台没有游戏:" + classCode);
+//                System.out.println("开奖游戏平台没有游戏:" + classCode);
                 return;
             }
             Map<String, List<AppGame>> codeGameMap = appGameList.stream().collect(Collectors.groupingBy(AppGame::getCode));
@@ -110,11 +110,14 @@ public class AppGameBettingTask {
                 JSONObject jsonObject = gameDataArry.getJSONObject(i);
                 String gameCode = jsonObject.getString("id");
                 if(gameCode == null){
-                    System.out.println("游戏socket推送倒计时,游戏id为空。");
+//                    System.out.println("游戏socket推送倒计时,游戏id为空。");
+                    continue;
+                }
+                if(!gameCodeFinal.equals(gameCode)){
                     continue;
                 }
                 if(!codeGameMap.containsKey(gameCode)){
-                    System.out.println("开奖游戏不存在:" + gameCode);
+//                    System.out.println("开奖游戏不存在:" + gameCode);
                     continue;
                 }
                 AppGame appGame = codeGameMap.get(gameCode).get(0);
@@ -141,23 +144,23 @@ public class AppGameBettingTask {
         }
 
         if(gameArry == null){
-            System.out.println("游戏socket推送期号或开奖,gameTypeSortArrayVOS对象为空。");
+//            System.out.println("游戏socket推送期号或开奖,gameTypeSortArrayVOS对象为空。");
             return;
         }
 
         if(classCode == null){
-            System.out.println("游戏socket推送期号或开奖,平台ID为空。");
+//            System.out.println("游戏socket推送期号或开奖,平台ID为空。");
             return;
         }
 
         AppGameClassify appGameClassify = appGameClassifyService.getByCode(classCode);
         if(appGameClassify == null){
-            System.out.println("开奖游戏平台不存在:" + classCode);
+//            System.out.println("开奖游戏平台不存在:" + classCode);
         }
 
         List<AppGame> appGameList = appGameService.selectAppGameByClassId(appGameClassify.getId());
         if(appGameList == null || appGameList.isEmpty()){
-            System.out.println("开奖游戏平台没有游戏:" + classCode);
+//            System.out.println("开奖游戏平台没有游戏:" + classCode);
             return;
         }
         Map<String, List<AppGame>> codeGameMap = appGameList.stream().collect(Collectors.groupingBy(AppGame::getCode));
@@ -167,20 +170,23 @@ public class AppGameBettingTask {
             String gameCode = gameLotteryObject.getString("id");
 
             if(gameCode == null){
-                System.out.println("游戏socket推送期号或开奖,游戏ID为空。");
-                return;
+//                System.out.println("游戏socket推送期号或开奖,游戏ID为空。");
+                continue;
+            }
+            if(!gameCodeFinal.equals(gameCode)){
+                continue;
             }
 
             if(!codeGameMap.containsKey(gameCode)){
-                System.out.println("开奖游戏不存在:" + gameCode);
+//                System.out.println("开奖游戏不存在:" + gameCode);
                 continue;
             }
             AppGame appGame = codeGameMap.get(gameCode).get(0);
 
             String gameDate = gameLotteryObject.getString("gameDate");
             if(gameDate == null){
-                System.out.println("游戏socket推送期号或开奖,期号为空。");
-                return;
+//                System.out.println("游戏socket推送期号或开奖,期号为空。");
+                continue;
             }
 
             if(type == 3){
@@ -192,7 +198,7 @@ public class AppGameBettingTask {
             long count = appGameLotteryService.selectCount(appGame.getClassifyId(), appGame.getId(), gameDate);
 
             if(count > 0){
-                System.out.println("游戏socket推送开奖,当前期已开过将,游戏编码:" + gameCode + ",期号:" + gameDate);
+//                System.out.println("游戏socket推送开奖,当前期已开过将,游戏编码:" + gameCode + ",期号:" + gameDate);
                 continue;
             }
 
@@ -229,79 +235,86 @@ public class AppGameBettingTask {
         for (int i = 0; i < list.size(); i++) {
             AppGameBetting appGameBetting = list.get(i);
             appGameBetting.setUpdateTime(new Date());
-            if(!appGameBetting.getBettingItem().equals(bettingItem)){
-                appGameBetting.setIsWinning(2);
-                appGameBettingService.updateById(appGameBetting);
-                continue;
-            }
 
-            AppUser appUser = appUserService.selectAppUserByUserid(appGameBetting.getUserId());
-            if(appUser == null){
-                appGameBetting.setIsWinning(1);
-                appGameBettingService.updateById(appGameBetting);
-                continue;
-            }
+            String [] bettingItems = bettingItem.split(",");
+            for(int j = 0; j < bettingItems.length; j++){
+                String bettingItemStr = bettingItems[j];
+
+                if(!appGameBetting.getBettingItem().equals(bettingItemStr)){
+                    appGameBetting.setIsWinning(2);
+                    appGameBettingService.updateById(appGameBetting);
+                    continue;
+                }
+
+                AppUser appUser = appUserService.selectAppUserByUserid(appGameBetting.getUserId());
+                if(appUser == null){
+                    appGameBetting.setIsWinning(1);
+                    appGameBettingService.updateById(appGameBetting);
+                    continue;
+                }
+
+                // 更新用户余额
+                appUser.setDiamondCoin(appUser.getDiamondCoin() + (appGameBetting.getBettingAmount() * appGameBetting.getBettingMultiple()) );
+                appUser.setDiamondCoinTotal(appUser.getDiamondCoinCashTotal() + (appGameBetting.getBettingAmount() * appGameBetting.getBettingMultiple()));
+                appUserService.updateAppUser(appUser);
 
-            // 更新用户余额
-            appUser.setDiamondCoin(appUser.getDiamondCoin() + (appGameBetting.getBettingAmount() * appGameBetting.getBettingMultiple()) );
-            appUser.setDiamondCoinTotal(appUser.getDiamondCoinCashTotal() + (appGameBetting.getBettingAmount() * appGameBetting.getBettingMultiple()));
-            appUserService.updateAppUser(appUser);
+                redisCache.deleteObject("U:UserInfo:" + appUser.getUserid());
 
-            redisCache.deleteObject("U:UserInfo:" + appUser.getUserid());
+                appGameBetting.setIsWinning(1);
+                appGameBettingService.updateById(appGameBetting);
 
-            appGameBetting.setIsWinning(1);
-            appGameBettingService.updateById(appGameBetting);
+                FinTranRecord finTranRecord = new FinTranRecord();
 
-            FinTranRecord finTranRecord = new FinTranRecord();
+                finTranRecord.setAfterCoin(appUser.getCoin());
+                finTranRecord.setCoinChange(0.00);
 
-            finTranRecord.setAfterCoin(appUser.getCoin());
-            finTranRecord.setCoinChange(0.00);
+                finTranRecord.setAfterMoney(0.00);
+                finTranRecord.setMoneyChange(0.00);
 
-            finTranRecord.setAfterMoney(0.00);
-            finTranRecord.setMoneyChange(0.00);
+                finTranRecord.setAfterDiamondCoin(appUser.getDiamondCoin());
+                finTranRecord.setDiamondCoinChange(appGameBetting.getBettingAmount());
 
-            finTranRecord.setAfterDiamondCoin(appUser.getDiamondCoin());
-            finTranRecord.setDiamondCoinChange(appGameBetting.getBettingAmount());
+                finTranRecord.setAfterTicket(0.00);
+                finTranRecord.setTicketChange(0.00);
 
-            finTranRecord.setAfterTicket(0.00);
-            finTranRecord.setTicketChange(0.00);
+                finTranRecord.setToUid(appUser.getUserid());
+                finTranRecord.setUid(appUser.getUserid());
 
-            finTranRecord.setToUid(appUser.getUserid());
-            finTranRecord.setUid(appUser.getUserid());
+                finTranRecord.setSceneId1(0L);
+                finTranRecord.setSceneId2(null);
+                finTranRecord.setSceneType(0L);
 
-            finTranRecord.setSceneId1(0L);
-            finTranRecord.setSceneId2(null);
-            finTranRecord.setSceneType(0L);
+                finTranRecord.setTranGroupId(appGameBetting.getId());
+                finTranRecord.setTranType1(17L);
+                finTranRecord.setTranType2(200L);
+                finTranRecord.setTranType3(20001L);
 
-            finTranRecord.setTranGroupId(appGameBetting.getId());
-            finTranRecord.setTranType1(17L);
-            finTranRecord.setTranType2(200L);
-            finTranRecord.setTranType3(20001L);
+                finTranRecord.setRemarks("游戏中奖");
 
-            finTranRecord.setRemarks("游戏中奖");
+                finTranRecord.setConsumptionCoin(appGameBetting.getBettingAmount());
+                finTranRecord.setConsumptionMoney(0.00);
+                finTranRecord.setCommissionRelatedUid(0L);
+                finTranRecord.setAgentId(appUser.getAgentId());
 
-            finTranRecord.setConsumptionCoin(appGameBetting.getBettingAmount());
-            finTranRecord.setConsumptionMoney(0.00);
-            finTranRecord.setCommissionRelatedUid(0L);
-            finTranRecord.setAgentId(appUser.getAgentId());
+                finTranRecord.setCreateTime(new Date());
 
-            finTranRecord.setCreateTime(new Date());
+                finTranRecord.setCurrencyType(4L);
 
-            finTranRecord.setCurrencyType(4L);
+                finTranRecord.setFromUid(0L);
+                finTranRecord.setGoodsId(0L);
+                finTranRecord.setGuildId(0L);
+                finTranRecord.setManagerCoId(0L);
+                finTranRecord.setManagerId(0L);
 
-            finTranRecord.setFromUid(0L);
-            finTranRecord.setGoodsId(0L);
-            finTranRecord.setGuildId(0L);
-            finTranRecord.setManagerCoId(0L);
-            finTranRecord.setManagerId(0L);
+                finTranRecord.setPerc(0.00);
+                finTranRecord.setProId(0L);
+                finTranRecord.setProCount(0L);
 
-            finTranRecord.setPerc(0.00);
-            finTranRecord.setProId(0L);
-            finTranRecord.setProCount(0L);
+                finTranRecord.setOrderId(appGameBetting.getId());
+                finTranRecord.setId(IdUtil.getSnowflakeNextId());
+                finTranRecordService.insertFinTranRecord(finTranRecord);
 
-            finTranRecord.setOrderId(appGameBetting.getId());
-            finTranRecord.setId(IdUtil.getSnowflakeNextId());
-            finTranRecordService.insertFinTranRecord(finTranRecord);
+            }
         }
     }
 }

+ 4 - 2
game-business/src/main/java/com/game/business/util/Common.java

@@ -4,8 +4,10 @@ public class Common {
 
     public static final String GANME_ONE_NAME = "one";
     public static final String GAME_ONE_CODE = "1";
-    public static final String GANME_TWO_NAME = "";
+    public static final String GANME_TWO_NAME = "two";
+    public static final String GAME_TWO_CODE = "2";
     public static final String GANME_THREES_NAME = "";
 
-    public static final String WS_GAME_URL = "ws://47.115.49.14:8000/ws";
+    public static final String WS_GAME_ONE_URL = "ws://47.115.49.14:8000/ws";
+    public static final String WS_GAME_TWO_URL = "ws://47.115.54.173:8000/ws";
 }

+ 14 - 0
game-business/src/main/java/com/game/business/vo/AppGameBettingVO.java

@@ -0,0 +1,14 @@
+package com.game.business.vo;
+
+import com.game.business.domain.AppGameBetting;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "游戏投注", description = "游戏投注")
+public class AppGameBettingVO extends AppGameBetting {
+
+    @ApiModelProperty(value = "游戏选项名称")
+    private String itemName;
+}

+ 4 - 0
game-business/src/main/java/com/game/business/vo/AppGameLotteryVO.java

@@ -9,6 +9,7 @@ import lombok.Data;
 @ApiModel(value = "游戏开奖记录", description = "游戏开奖记录")
 public class AppGameLotteryVO extends AppGameLottery {
 
+
     @ApiModelProperty(value = "游戏名称")
     private String gameName;
 
@@ -17,4 +18,7 @@ public class AppGameLotteryVO extends AppGameLottery {
 
     @ApiModelProperty(value = "游戏路径")
     private String gamePath;
+
+    @ApiModelProperty(value = "游戏选项名称")
+    private String itemName;
 }

+ 7 - 0
game-business/src/main/java/com/game/business/websocket/WebSocketConnent.java

@@ -1,9 +1,11 @@
 package com.game.business.websocket;
 
 
+import com.game.business.config.GameTwoConfig;
 import com.game.business.config.SpringContextSetting;
 import com.game.business.util.Common;
 import com.game.business.websocket.client.GameOneClient;
+import com.game.business.websocket.client.GameTwoClient;
 
 import javax.websocket.ContainerProvider;
 import java.net.URI;
@@ -29,6 +31,11 @@ public class WebSocketConnent {
                     ContainerProvider.getWebSocketContainer().connectToServer(client, new URI(this.WS_URL));
                 }
 
+                if(Common.GANME_TWO_NAME.equals(this.WS_URL_NAME)){
+                    GameTwoClient client = SpringContextSetting.getBean(GameTwoClient.class);
+                    ContainerProvider.getWebSocketContainer().connectToServer(client, new URI(this.WS_URL));
+                }
+
                 System.out.println(this.WS_URL_NAME + " 已成功连接Websocket[" + this.WS_URL + "]");
                 this.WS_CONNENT_NUM = 0;
                 break;

+ 4 - 3
game-business/src/main/java/com/game/business/websocket/client/GameOneClient.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.websocket.*;
+import java.util.Date;
 
 
 @Component
@@ -37,7 +38,7 @@ public class GameOneClient {
 
     @OnClose
     public void onClose(Session session) throws Exception{
-        System.out.println("game on 游戏已断开 server");
+        System.out.println("game on 游戏已断开 server" + new Date());
         connect();
     }
 
@@ -52,7 +53,7 @@ public class GameOneClient {
             try {
                 GameOneConfig.webSocketConnent.connect();
             }catch (Exception e){
-                System.out.println("连接 game on [socket] 异常" + e.getMessage());
+                System.out.println("连接 game one [socket] 异常" + e.getMessage());
             }
         }
     }
@@ -66,7 +67,7 @@ public class GameOneClient {
             }
 
             System.out.println("game one 接收数据" + message);
-            appGameBettingTask.gameDataTask(message);
+            appGameBettingTask.gameDataTask(message, Common.GAME_ONE_CODE);
         }catch (Exception e){
             e.printStackTrace();
             System.out.println("game one 接收数据异常[" + e.getMessage() + "]");

+ 65 - 0
game-business/src/main/java/com/game/business/websocket/client/GameTwoClient.java

@@ -0,0 +1,65 @@
+package com.game.business.websocket.client;
+
+import com.game.business.config.GameOneConfig;
+import com.game.business.config.GameTwoConfig;
+import com.game.business.task.AppGameBettingTask;
+import com.game.business.util.Common;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import java.util.Date;
+
+
+@Component
+@ClientEndpoint
+public class GameTwoClient {
+
+    @Autowired
+    private AppGameBettingTask appGameBettingTask;
+
+    @OnOpen
+    public void onOpen(Session session) throws Exception{
+        System.out.println("game two 游戏已连接 server");
+//        session.getBasicRemote().sendText("{\"code\":\"" + Common.GAME_ONE_CODE + "\"}");
+    }
+
+    @OnClose
+    public void onClose(Session session) throws Exception{
+        System.out.println("game two 游戏已断开 server:" + new Date());
+        connect();
+    }
+
+    @OnError
+    public void onError(Session session, Throwable throwable) throws Exception{
+        System.out.println("game two 连接异常 [" + throwable.getMessage() + "]");
+        connect();
+    }
+
+    public void connect(){
+        synchronized (this){
+            try {
+                GameTwoConfig.webSocketConnent.connect();
+            }catch (Exception e){
+                System.out.println("连接 game two [socket] 异常" + e.getMessage());
+            }
+        }
+    }
+
+    @OnMessage
+    public void onMessage(Session session, String message){
+        try {
+            if(StringUtils.isBlank(message)){
+                System.out.println("game two 数据为空");
+                return;
+            }
+
+            System.out.println("game two 接收数据" + message);
+//            appGameBettingTask.gameDataTask(message, Common.GAME_TWO_CODE);
+        }catch (Exception e){
+            e.printStackTrace();
+            System.out.println("game one 接收数据异常[" + e.getMessage() + "]");
+        }
+    }
+}

+ 71 - 0
game-business/src/main/resources/mapper/business/AppGameItemMapper.xml

@@ -0,0 +1,71 @@
+<?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.AppGameItemMapper">
+    
+    <resultMap type="com.game.business.domain.AppGameItem" id="AppGameItemResult">
+        <result property="id"    column="id"    />
+        <result property="gameId"    column="game_id"    />
+        <result property="itemName"    column="item_name"    />
+        <result property="itemMultiple"    column="item_multiple"    />
+        <result property="itemLocation"    column="item_location"    />
+    </resultMap>
+
+    <sql id="selectAppGameItemVo">
+        select id, game_id, item_name, item_multiple, item_location from app_game_item
+    </sql>
+
+    <select id="selectAppGameItemList" parameterType="com.game.business.domain.AppGameItem" resultMap="AppGameItemResult">
+        <include refid="selectAppGameItemVo"/>
+        <where>  
+            <if test="gameId != null "> and game_id = #{gameId}</if>
+            <if test="itemName != null  and itemName != ''"> and item_name like concat('%', #{itemName}, '%')</if>
+            <if test="itemMultiple != null "> and item_multiple = #{itemMultiple}</if>
+            <if test="itemLocation != null  and itemLocation != ''"> and item_location = #{itemLocation}</if>
+        </where>
+    </select>
+    
+    <select id="selectAppGameItemById" parameterType="Long" resultMap="AppGameItemResult">
+        <include refid="selectAppGameItemVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertAppGameItem" parameterType="com.game.business.domain.AppGameItem" useGeneratedKeys="true" keyProperty="id">
+        insert into app_game_item
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="gameId != null">game_id,</if>
+            <if test="itemName != null">item_name,</if>
+            <if test="itemMultiple != null">item_multiple,</if>
+            <if test="itemLocation != null">item_location,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="gameId != null">#{gameId},</if>
+            <if test="itemName != null">#{itemName},</if>
+            <if test="itemMultiple != null">#{itemMultiple},</if>
+            <if test="itemLocation != null">#{itemLocation},</if>
+         </trim>
+    </insert>
+
+    <update id="updateAppGameItem" parameterType="com.game.business.domain.AppGameItem">
+        update app_game_item
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="gameId != null">game_id = #{gameId},</if>
+            <if test="itemName != null">item_name = #{itemName},</if>
+            <if test="itemMultiple != null">item_multiple = #{itemMultiple},</if>
+            <if test="itemLocation != null">item_location = #{itemLocation},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteAppGameItemById" parameterType="Long">
+        delete from app_game_item where id = #{id}
+    </delete>
+
+    <delete id="deleteAppGameItemByIds" parameterType="String">
+        delete from app_game_item where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>