Browse Source

游戏中奖修改

kk 2 months ago
parent
commit
7514c0a86b

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

@@ -26,6 +26,8 @@ public interface IAppGameBettingService extends IService<AppGameBetting> {
 
 
     List<AppGameBetting> selectListByGameId(Long gameId, Long userId, Integer isWinning, String strDate, Integer bettingType);
     List<AppGameBetting> selectListByGameId(Long gameId, Long userId, Integer isWinning, String strDate, Integer bettingType);
 
 
+    List<AppGameBetting> getNotLottery(Integer isWinning);
+
     /**
     /**
      * 根据日期查询投注情况
      * 根据日期查询投注情况
      * */
      * */

+ 2 - 0
game-business/src/main/java/com/game/business/service/IAppGameLotteryService.java

@@ -10,5 +10,7 @@ public interface IAppGameLotteryService extends IService<AppGameLottery> {
 
 
     long selectCount(Long classId, Long gameId, String gameDate);
     long selectCount(Long classId, Long gameId, String gameDate);
 
 
+    AppGameLottery selectLottery(Long classId, Long gameId, String gameDate);
+
     boolean save(AppGameLottery appGameLottery);
     boolean save(AppGameLottery appGameLottery);
 }
 }

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

@@ -88,6 +88,13 @@ public class AppGameBettingServiceImpl extends ServiceImpl<AppGameBettingMapper,
         return appGameBettingMapper.selectList(queryWrapper);
         return appGameBettingMapper.selectList(queryWrapper);
     }
     }
 
 
+    @Override
+    public List<AppGameBetting> getNotLottery(Integer isWinning) {
+        LambdaQueryWrapper<AppGameBetting> queryWrapper = Wrappers.lambdaQuery();;
+        queryWrapper.eq(AppGameBetting::getIsWinning, isWinning);
+        return appGameBettingMapper.selectList(queryWrapper);
+    }
+
     @Override
     @Override
     public List<AppGameBetting> selectListByDate(Long userId, String beginTime, String endTime,Long gameId) {
     public List<AppGameBetting> selectListByDate(Long userId, String beginTime, String endTime,Long gameId) {
         LambdaQueryWrapper<AppGameBetting> queryWrapper = Wrappers.lambdaQuery();;
         LambdaQueryWrapper<AppGameBetting> queryWrapper = Wrappers.lambdaQuery();;

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

@@ -24,6 +24,15 @@ public class AppGameLotteryServiceImpl extends ServiceImpl<AppGameLotteryMapper,
         return appGameLotteryMapper.selectCount(queryLotteryWrapper);
         return appGameLotteryMapper.selectCount(queryLotteryWrapper);
     }
     }
 
 
+    @Override
+    public AppGameLottery selectLottery(Long classId, Long gameId, String gameDate) {
+        LambdaQueryWrapper<AppGameLottery> queryLotteryWrapper = Wrappers.lambdaQuery();;
+        queryLotteryWrapper.eq(AppGameLottery::getClassId, classId);
+        queryLotteryWrapper.eq(AppGameLottery::getGameId, gameId);
+        queryLotteryWrapper.eq(AppGameLottery::getGameDate, gameDate);
+        return appGameLotteryMapper.selectOne(queryLotteryWrapper);
+    }
+
     @Override
     @Override
     public boolean save(AppGameLottery appGameLottery) {
     public boolean save(AppGameLottery appGameLottery) {
         return appGameLotteryMapper.insert(appGameLottery) > 0;
         return appGameLotteryMapper.insert(appGameLottery) > 0;

+ 5 - 1
game-business/src/main/java/com/game/business/task/AppGameBettingTask.java

@@ -240,6 +240,8 @@ public class AppGameBettingTask {
 
 
     public void updateItme(Long gameId, String gameLotterySucc){
     public void updateItme(Long gameId, String gameLotterySucc){
 
 
+        System.out.println("更新连中:" + gameId + ",连中选项:" + gameLotterySucc);
+
         // 获取上次开奖结果
         // 获取上次开奖结果
         List<AppItemCountDTO> itemCountList = new ArrayList<>();
         List<AppItemCountDTO> itemCountList = new ArrayList<>();
         String gameLotterySuccCache =  redisCache.getCacheObject("G:GameCount:" + gameId);
         String gameLotterySuccCache =  redisCache.getCacheObject("G:GameCount:" + gameId);
@@ -278,13 +280,15 @@ public class AppGameBettingTask {
         }
         }
 
 
         redisCache.setCacheObject("G:GameCount:" + gameId, JSON.toJSONString(nowItemCountList));
         redisCache.setCacheObject("G:GameCount:" + gameId, JSON.toJSONString(nowItemCountList));
+        System.out.println("更新连中结束");
     }
     }
 
 
     public void gameBettingTask(Long classId, Long gameId, String gameDate, String bettingItem){
     public void gameBettingTask(Long classId, Long gameId, String gameDate, String bettingItem){
-
+        System.out.println("更新投注记录,当前期号:" + gameDate + ",投注:" + bettingItem);
         List<AppGameBetting> list = appGameBettingService.getIsWinning(classId, gameId, gameDate, 0);
         List<AppGameBetting> list = appGameBettingService.getIsWinning(classId, gameId, gameDate, 0);
 
 
         if(list == null || list.isEmpty()){
         if(list == null || list.isEmpty()){
+            System.out.println("当前期号:" + gameDate + ",查询不到投注记录");
             return;
             return;
         }
         }
 
 

+ 190 - 0
game-business/src/main/java/com/game/business/task/AppGameLotteryTask.java

@@ -0,0 +1,190 @@
+package com.game.business.task;
+
+import com.alibaba.fastjson.JSON;
+import com.game.business.domain.AppGameBetting;
+import com.game.business.domain.AppGameLottery;
+import com.game.business.domain.AppUser;
+import com.game.business.domain.FinTranRecord;
+import com.game.business.service.IAppGameBettingService;
+import com.game.business.service.IAppGameLotteryService;
+import com.game.business.service.IAppUserService;
+import com.game.business.service.IFinTranRecordService;
+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.redis.RedisCache;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Component
+public class AppGameLotteryTask {
+
+
+    @Autowired
+    private IAppGameBettingService appGameBettingService;
+
+    @Autowired
+    private IAppGameLotteryService appGameLotteryService;
+
+    @Autowired
+    private IAppUserService appUserService;
+
+    @Autowired
+    private IFinTranRecordService finTranRecordService;
+
+    @Autowired
+    private RedisCache redisCache;
+
+//    @Scheduled(cron = "0 0/1 * * * ? ")
+    public void updateLottery(){
+
+        // 获取为开奖的投注记录
+        List<AppGameBetting> list = appGameBettingService.getNotLottery(0);
+
+        if(list == null || list.isEmpty()){
+            return;
+        }
+
+        for (int i = 0; i < list.size(); i++) {
+            AppGameBetting appGameBetting = list.get(i);
+            AppGameLottery appGameLottery = appGameLotteryService.selectLottery(appGameBetting.getClassId(), appGameBetting.getGameId(), appGameBetting.getGameDate());
+            if(appGameLottery != null){
+                if((System.currentTimeMillis() - appGameLottery.getGameRecordDate().getTime()) / 1000 / 60 >= 1){
+                    appGameBetting.setUpdateTime(new Date());
+
+                    String [] bettingItems = appGameLottery.getGameLotterySucc().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);
+
+                    }
+                }
+            }
+        }
+    }
+}