123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- package com.game.business.task;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson2.JSONArray;
- import com.alibaba.fastjson2.JSONObject;
- import com.game.business.domain.*;
- import com.game.business.dto.AppItemCountDTO;
- import com.game.business.service.*;
- import com.game.business.vo.AppGameItemBettingVO;
- 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.domain.HttpRet;
- import com.game.common.core.redis.RedisCache;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.Async;
- import org.springframework.stereotype.Component;
- import java.util.*;
- import java.util.stream.Collectors;
- @Component
- public class AppGameBettingTask {
- @Autowired
- private IAppGameBettingService appGameBettingService;
- @Autowired
- private IAppUserService appUserService;
- @Autowired
- private IFinTranRecordService finTranRecordService;
- @Autowired
- private IAppGameLotteryService appGameLotteryService;
- @Autowired
- private IAppGameService appGameService;
- @Autowired
- private IAppGameClassifyService appGameClassifyService;
- @Autowired
- private IAppGameItemService appGameItemService;
- @Autowired
- private RedisCache redisCache;
- @Autowired
- private IAppUserCountService appUserCountService;
- @Async("asyncExecutor")
- public void gameDataTask(String message, String gameCodeFinal){
- JSONArray dataArry = JSONArray.parseArray(message);
- Integer type = null;
- for (int i = 0; i < dataArry.size(); i++) {
- JSONObject jsonObject = dataArry.getJSONObject(i);
- if(jsonObject.containsKey("type")){
- type = jsonObject.getInteger("type");
- break;
- }
- }
- if(type == null){
- // System.out.println("游戏socket推送类型为空。");
- return;
- }
- // 更新倒计时
- if(type == 1){
- // JSONArray gameDataArry = null;
- String gameCode = null;
- String time = null;
- String classCode = null;
- for (int i = 0; i < dataArry.size(); i++) {
- JSONObject jsonObject = dataArry.getJSONObject(i);
- if(jsonObject.containsKey("data")){
- // gameDataArry = jsonObject.getJSONArray("data");
- gameCode = jsonObject.getString("id");
- }
- if(jsonObject.containsKey("time")){
- time = jsonObject.getString("time");
- }
- if(jsonObject.containsKey("id")){
- classCode = jsonObject.getString("id");
- }
- }
- if(classCode == null){
- // System.out.println("游戏socket推送倒计时,平台ID为空。");
- return;
- }
- if(gameCode == null){
- // System.out.println("游戏socket推送倒计时,data对象为空。");
- return;
- }
- if(time == null || time.trim().isEmpty()){
- // System.out.println("游戏socket推送倒计时,time为空。");
- return;
- }
- AppGameClassify appGameClassify = appGameClassifyService.getByCode(classCode);
- if(appGameClassify == null){
- // System.out.println("开奖游戏平台不存在:" + classCode);
- return;
- }
- List<AppGame> appGameList = appGameService.selectAppGameByClassId(appGameClassify.getId());
- if(appGameList == null || appGameList.isEmpty()){
- // System.out.println("开奖游戏平台没有游戏:" + classCode);
- return;
- }
- Map<String, List<AppGame>> codeGameMap = appGameList.stream().collect(Collectors.groupingBy(AppGame::getCode));
- if(!gameCodeFinal.equals(gameCode)){
- return;
- }
- if(!codeGameMap.containsKey(gameCode)){
- // System.out.println("开奖游戏不存在:" + gameCode);
- return;
- }
- AppGame appGame = codeGameMap.get(gameCode).get(0);
- appGame.setGameTime(time);
- appGameService.updateAppGame(appGame);
- return;
- }
- if(type != 2 && type != 3){
- return;
- }
- JSONArray gameArry = null;
- String classCode = null;
- for (int i = 0; i < dataArry.size(); i++) {
- JSONObject jsonObject = dataArry.getJSONObject(i);
- if(jsonObject.containsKey("gameTypeSortArrayVOS")){
- gameArry = jsonObject.getJSONArray("gameTypeSortArrayVOS");
- }
- if(jsonObject.containsKey("id")){
- classCode = jsonObject.getString("id");
- }
- }
- if(gameArry == null){
- // System.out.println("游戏socket推送期号或开奖,gameTypeSortArrayVOS对象为空。");
- return;
- }
- if(classCode == null){
- // System.out.println("游戏socket推送期号或开奖,平台ID为空。");
- return;
- }
- AppGameClassify appGameClassify = appGameClassifyService.getByCode(classCode);
- if(appGameClassify == null){
- // System.out.println("开奖游戏平台不存在:" + classCode);
- return;
- }
- List<AppGame> appGameList = appGameService.selectAppGameByClassId(appGameClassify.getId());
- if(appGameList == null || appGameList.isEmpty()){
- // System.out.println("开奖游戏平台没有游戏:" + classCode);
- return;
- }
- Map<String, List<AppGame>> codeGameMap = appGameList.stream().collect(Collectors.groupingBy(AppGame::getCode));
- for (int i = 0; i < gameArry.size(); i++) {
- JSONObject gameLotteryObject = gameArry.getJSONObject(i);
- String gameCode = gameLotteryObject.getString("id");
- if(gameCode == null){
- // System.out.println("游戏socket推送期号或开奖,游戏ID为空。");
- continue;
- }
- if(!gameCodeFinal.equals(gameCode)){
- continue;
- }
- if(!codeGameMap.containsKey(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推送期号或开奖,期号为空。");
- continue;
- }
- if(type == 3){
- appGame.setGameDate(gameDate);
- appGameService.updateAppGame(appGame);
- continue;
- }
- Integer isLottery = gameLotteryObject.getInteger("isLottery");
- String gameLotterySucc = gameLotteryObject.getString("gameLotterySucc");
- if(isLottery != 1){
- continue;
- }
- if(gameLotterySucc == null || gameLotterySucc.trim().isEmpty()){
- // System.out.println("游戏socket推送倒计时,time为空。");
- continue;
- }
- long count = appGameLotteryService.selectCount(appGame.getClassifyId(), appGame.getId(), gameDate);
- if(count > 0){
- // System.out.println("游戏socket推送开奖,当前期已开过将,游戏编码:" + gameCode + ",期号:" + gameDate);
- continue;
- }
- // 保存开奖记录
- AppGameLottery appGameLottery = new AppGameLottery();
- appGameLottery.setGameId(appGame.getId());
- appGameLottery.setClassId(appGame.getClassifyId());
- appGameLottery.setGameDate(gameDate);
- appGameLottery.setIsLottery(isLottery);
- appGameLottery.setGameRecordDate(new Date());
- appGameLottery.setGameLotterySucc(gameLotterySucc);
- appGameLotteryService.save(appGameLottery);
- this.updateItme(appGame.getId(), gameLotterySucc);
- this.gameBettingTask(appGameClassify.getId(), appGame.getId(), gameDate, gameLotterySucc);
- appUserCountService.staticsUserCount(appGame.getId(),null);
- }
- }
- public void updateItme(Long gameId, String gameLotterySucc){
- // 获取上次开奖结果
- List<AppItemCountDTO> itemCountList = new ArrayList<>();
- String gameLotterySuccCache = redisCache.getCacheObject("G:GameCount:" + gameId);
- if(gameLotterySuccCache != null && !gameLotterySuccCache.trim().isEmpty()){
- itemCountList = JSONArray.parseArray(gameLotterySuccCache, AppItemCountDTO.class);
- }
- // 修改游戏选项
- String [] bettingItems = gameLotterySucc.split(",");
- List<AppItemCountDTO> nowItemCountList = new ArrayList<>();
- for(int j = 0; j < bettingItems.length; j++) {
- String bettingItemStr = bettingItems[j];
- AppItemCountDTO appItemCountDTO = new AppItemCountDTO();
- appItemCountDTO.setGameId(gameId);
- appItemCountDTO.setItemLocation(bettingItemStr);
- appItemCountDTO.setConsecutive(1);
- AppGameItem appGameItem = new AppGameItem();
- appGameItem.setGameId(gameId);
- appGameItem.setItemLocation(bettingItemStr);
- // 开奖次数
- appGameItemService.updateLotteryCount(appGameItem);
- if(!itemCountList.isEmpty()){
- for (AppItemCountDTO appItemCount : itemCountList){
- if(appItemCount.getItemLocation().equals(bettingItemStr)){
- appItemCountDTO.setConsecutive(appItemCount.getConsecutive() + 1);
- }
- }
- }
- // 更新连中
- appGameItemService.updateConsecutive(appItemCountDTO);
- nowItemCountList.add(appItemCountDTO);
- }
- redisCache.setCacheObject("G:GameCount:" + gameId, JSON.toJSONString(nowItemCountList));
- }
- public void gameBettingTask(Long classId, Long gameId, String gameDate, String bettingItem){
- List<AppGameBetting> list = appGameBettingService.getIsWinning(classId, gameId, gameDate, 0);
- if(list == null || list.isEmpty()){
- return;
- }
- for (int i = 0; i < list.size(); i++) {
- AppGameBetting appGameBetting = list.get(i);
- appGameBetting.setUpdateTime(new Date());
- String [] bettingItems = bettingItem.split(",");
- for(int j = 0; j < bettingItems.length; j++){
- String bettingItemStr = bettingItems[j];
- double bettingAmount = appGameBetting.getBettingAmount() * appGameBetting.getBettingMultiple();
- if(appGameBetting.getBettingGameType() == 0){
- if(!appGameBetting.getBettingItem().equals(bettingItemStr)){
- appGameBetting.setIsWinning(2);
- appGameBettingService.updateById(appGameBetting);
- continue;
- }
- }else if(appGameBetting.getBettingGameType() == 1 || appGameBetting.getBettingGameType() == 2){
- List<AppGameItemBettingVO> itemList = JSON.parseArray(appGameBetting.getBettingItem(), AppGameItemBettingVO.class);
- if(itemList == null || itemList.isEmpty()){
- appGameBetting.setIsWinning(2);
- appGameBettingService.updateById(appGameBetting);
- continue;
- }
- List<String> bettingItemList = itemList.stream().map(AppGameItemBettingVO::getBettingItem).collect(Collectors.toList());
- if(!bettingItemList.contains(bettingItemStr)){
- appGameBetting.setIsWinning(2);
- appGameBettingService.updateById(appGameBetting);
- continue;
- }
- if(appGameBetting.getBettingGameType() == 2){
- for (int k = 0; k < itemList.size(); k++) {
- AppGameItemBettingVO appGameItemBettingVO = itemList.get(k);
- if(appGameItemBettingVO.getBettingItem().equals(bettingItemStr)){
- bettingAmount = appGameBetting.getBettingAmount() * appGameItemBettingVO.getBettingMultiple();
- }
- }
- }
- }
- AppUser appUser = appUserService.selectAppUserByUserid(appGameBetting.getUserId());
- if(appUser == null){
- appGameBetting.setIsWinning(1);
- appGameBettingService.updateById(appGameBetting);
- continue;
- }
- // 更新用户余额
- if(appGameBetting.getBettingType() == 0){
- appUser.setDiamondCoin(appUser.getDiamondCoin() + bettingAmount );
- appUser.setDiamondCoinTotal(appUser.getDiamondCoinCashTotal() + bettingAmount);
- appUser.setDiamondCoinCash(appUser.getDiamondCoinCash() + bettingAmount);
- // 更新用户金币
- }else{
- appUser.setCoin(appUser.getCoin() + bettingAmount);
- // if(appUser.getRole() == 1){
- // appUser.setCoinCash(appUser.getCoinCash() + bettingAmount);
- // }
- }
- appUserService.updateAppUser(appUser);
- redisCache.deleteObject("U:UserInfo:" + appUser.getUserid());
- appGameBetting.setIsWinning(1);
- appGameBettingService.updateById(appGameBetting);
- FinTranRecord finTranRecord = new FinTranRecord();
- finTranRecord.setAfterCoin(appUser.getCoin());
- finTranRecord.setAfterDiamondCoin(appUser.getDiamondCoin());
- if(appGameBetting.getBettingType() == 0){
- finTranRecord.setCurrencyType(4);
- finTranRecord.setDiamondCoinChange(bettingAmount);
- finTranRecord.setCoinChange(0.00);
- }else{
- finTranRecord.setCurrencyType(2);
- finTranRecord.setCoinChange(bettingAmount);
- finTranRecord.setDiamondCoinChange(0.00);
- }
- finTranRecord.setAfterMoney(0.00);
- finTranRecord.setMoneyChange(0.00);
- finTranRecord.setAfterTicket(0.00);
- finTranRecord.setTicketChange(0.00);
- finTranRecord.setToUid(appUser.getUserid());
- finTranRecord.setUid(appUser.getUserid());
- finTranRecord.setSceneId1(0L);
- finTranRecord.setSceneId2(null);
- finTranRecord.setSceneType(0L);
- finTranRecord.setTranGroupId(appGameBetting.getId());
- if(appGameBetting.getBettingType() == 0){
- finTranRecord.setTranType1(FinTranType1.U_Income_Coin_Balance.getType());
- }else{
- finTranRecord.setTranType1(FinTranType1.U_Income_Coin.getType());
- }
- finTranRecord.setTranType2(FinTranType2.GAME_REWARD.getType());
- finTranRecord.setTranType3(FinTranType3.CHARGE_WIN_GAME.getType());
- finTranRecord.setRemarks("游戏中奖");
- finTranRecord.setConsumptionCoin(appGameBetting.getBettingAmount());
- finTranRecord.setConsumptionMoney(0.00);
- finTranRecord.setCommissionRelatedUid(0L);
- finTranRecord.setAgentId(appUser.getAgentId());
- finTranRecord.setCreateTime(new Date());
- finTranRecord.setFromUid(appGameBetting.getUserId());
- finTranRecord.setGoodsId(0L);
- finTranRecord.setGuildId(0L);
- finTranRecord.setManagerCoId(0L);
- finTranRecord.setManagerId(0L);
- finTranRecord.setPerc(0.00);
- finTranRecord.setProId(0L);
- finTranRecord.setProCount(0L);
- finTranRecord.setOrderId(appGameBetting.getId());
- finTranRecordService.insertFinTranRecord(finTranRecord);
- }
- }
- }
- }
|