sud小游戏-vo-门票

This commit is contained in:
2025-08-04 19:39:11 +08:00
committed by hokli
parent 4d098e6940
commit 058b15be40
11 changed files with 260 additions and 77 deletions

View File

@@ -1388,6 +1388,8 @@ public class Constant {
public static final String OFFICIAL_GOLD_ROLE_LIMIT_CONFIG = "official_gold_role_limit_config";
public static final String GAME_USD_TO_RECHARGE_USER_LIMIT = "game_usd_to_recharge_user_limit";
public static final String MINI_GAME_SUD_LUDO_CONFIG = "mini_game_sud_ludo_config";
}
public static class WithDrawStatus {

View File

@@ -0,0 +1,16 @@
package com.accompany.business.dto.miniGame;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Map;
@Data
public class MiniGameLudoConfigDto {
private String mgIdStr;
private Map<Integer, MiniGameLudoConfigDto> partitionMap;
private Boolean canWithoutTicket;
private BigDecimal ticket;
}

View File

@@ -0,0 +1,25 @@
package com.accompany.business.vo.miniGame;
import com.accompany.business.model.miniGame.MiniGame;
import lombok.Data;
import java.util.List;
/**
* @author: liaozetao
* @date: 2024/5/20 10:29
* @description:
*/
@Data
public class MiniGameNavVo extends MiniGame {
/**
* 游戏模式
*/
private List<GameModePlayVo> gameModes;
/**
* 房间内ICON
*/
private String gameRoomIcon;
}

View File

@@ -1,25 +1,103 @@
package com.accompany.business.vo.miniGame;
import com.accompany.business.model.miniGame.MiniGame;
import com.accompany.common.annotation.ReplaceAppDomain;
import com.accompany.core.annotation.I18n;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author: liaozetao
* @date: 2024/5/20 10:29
* @description:
*/
@ApiModel
@Data
public class MiniGameVo extends MiniGame {
public class MiniGameVo {
/**
* 第三方游戏ID
*/
@ApiModelProperty("第三方游戏ID")
@TableId(value = "mg_id", type = IdType.INPUT)
private Long mgId;
/**
* 游戏模式
* 游戏id字符串(避免js丢失精度问题)
*/
private List<GameModePlayVo> gameModes;
@ApiModelProperty("游戏id字符串(避免js丢失精度问题)")
private String mgIdStr;
/**
* 房间内ICON
* 游戏名称
*/
private String gameRoomIcon;
@ApiModelProperty("游戏名称")
@I18n(className = "MiniGame", fieldName = "name")
private String name;
/**
* 图片
*/
@ApiModelProperty("图片")
@I18n(className = "MiniGame", fieldName = "pic")
@ReplaceAppDomain
private String pic;
/**
* 图片2
*/
@ApiModelProperty("图片2")
@I18n(className = "MiniGame", fieldName = "pic2")
@ReplaceAppDomain
private String pic2;
/**
* 是否展示
*/
@ApiModelProperty("是否展示")
private Boolean isShow;
/**
* 顺序
*/
@ApiModelProperty("顺序")
private Integer seq;
/**
* 游戏房麦位数量
*/
@ApiModelProperty("游戏房麦位数量")
private Integer micNum;
/**
* 游戏配置
*/
@ApiModelProperty("游戏配置")
private String configJson;
/**
* 是否限制
*/
@ApiModelProperty("是否限制")
private Integer isAuthority;
/**
* 角色标识 0b1 房主 0b10 管理员
*/
@ApiModelProperty("角色标识 0b1 房主 0b10 管理员")
private Integer roleFlag;
/**
* 房间标识 0b1 游戏房 0b10 牌照房 0b100 普通房
*/
@ApiModelProperty("房间标识 0b1 游戏房 0b10 牌照房 0b100 普通房")
private Integer roomFlag;
@ApiModelProperty("是否可以不需要门票就玩")
private Boolean canWithoutTicket;
@ApiModelProperty("门票")
private BigDecimal ticket;
}

View File

@@ -3,7 +3,7 @@ package com.accompany.business.service.miniGame;
import com.accompany.business.dto.miniGame.MiniGameForNavConfigDto;
import com.accompany.business.model.miniGame.MiniGameMatch;
import com.accompany.business.vo.chat.ChatRoomVo;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.accompany.business.vo.miniGame.MiniGameNavVo;
/**
* @author: liaozetao
@@ -16,7 +16,7 @@ public interface MiniGameForNavService {
* 获取游戏配置
* @return
*/
MiniGameVo getConfig();
MiniGameNavVo getConfig();
/**
* 开始游戏

View File

@@ -2,6 +2,7 @@ package com.accompany.business.service.miniGame;
import com.accompany.business.model.miniGame.MiniGame;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -17,7 +18,6 @@ public interface MiniGameService extends IService<MiniGame> {
MiniGame queryMiniGameByMgId(Long mgId);
List<MiniGame> queryMiniGameByMgIdList(List<Long> mgIdList);
List<MiniGame> miniGameListByIsSHow(boolean isShow);
@@ -25,5 +25,7 @@ public interface MiniGameService extends IService<MiniGame> {
List<MiniGame> miniGameAllList(Integer partitionFlag);
Integer getMiniGameMinMicNum();
List<MiniGameVo> listVoByRoomUid(Long uid, Long roomUid);
}

View File

@@ -27,7 +27,7 @@ import com.accompany.business.service.user.UserInRoomService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.chat.ChatRoomVo;
import com.accompany.business.vo.miniGame.GameModePlayVo;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.accompany.business.vo.miniGame.MiniGameNavVo;
import com.accompany.common.constant.Constant;
import com.accompany.common.netease.ErBanNetEaseService;
import com.accompany.common.redis.RedisKey;
@@ -117,29 +117,29 @@ public class MiniGameForNavServiceImpl implements MiniGameForNavService {
private RedissonClient redissonClient;
@Override
public MiniGameVo getConfig() {
public MiniGameNavVo getConfig() {
MiniGameForNavConfigDto config = getConfigDto();
String mgId = config.getMgId();
MiniGameVo miniGameVo = new MiniGameVo();
MiniGameNavVo miniGameNavVo = new MiniGameNavVo();
MiniGame miniGame = miniGameService.getOne(Wrappers.<MiniGame>lambdaQuery()
.eq(MiniGame::getMgIdStr, mgId), false);
if (null == miniGame){
return miniGameVo;
return miniGameNavVo;
}
BeanUtils.copyProperties(miniGame, miniGameVo);
BeanUtils.copyProperties(miniGame, miniGameNavVo);
String locale = LocaleContextHolder.getLocale().getLanguage();
Map<String, String> gameIcon = config.getGameIcon();
if (CollectionUtil.isNotEmpty(gameIcon)) {
miniGameVo.setPic(gameIcon.get(locale));
miniGameNavVo.setPic(gameIcon.get(locale));
}
Map<String, String> gameRoomIcon = config.getGameRoomIcon();
if (CollectionUtil.isNotEmpty(gameRoomIcon)) {
miniGameVo.setGameRoomIcon(gameRoomIcon.get(locale));
miniGameNavVo.setGameRoomIcon(gameRoomIcon.get(locale));
}
List<GameModePlayVo> gameModes = new ArrayList<>();
@@ -179,9 +179,9 @@ public class MiniGameForNavServiceImpl implements MiniGameForNavService {
gameModes.add(gameModePlay);
}
miniGameVo.setGameModes(gameModes);
miniGameNavVo.setGameModes(gameModes);
return miniGameVo;
return miniGameNavVo;
}
@Transactional(rollbackFor = Exception.class)

View File

@@ -0,0 +1,38 @@
package com.accompany.business.service.miniGame.impl;
import com.accompany.business.dto.miniGame.MiniGameLudoConfigDto;
import com.accompany.common.constant.Constant;
import com.accompany.common.status.BusiStatus;
import com.accompany.core.exception.ServiceException;
import com.accompany.core.service.SysConfService;
import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
@Service
public class MiniGameLudoService {
@Autowired
private SysConfService sysConfService;
public MiniGameLudoConfigDto getConfig(){
String configStr = sysConfService.getSysConfValueById(Constant.SysConfId.MINI_GAME_SUD_LUDO_CONFIG);
if (!StringUtils.hasText(configStr)){
throw new ServiceException(BusiStatus.ALREADY_NOTEXISTS_CONFIG);
}
return JSON.parseObject(configStr, MiniGameLudoConfigDto.class);
}
public MiniGameLudoConfigDto getConfigByPartitionId(int partitionId){
MiniGameLudoConfigDto configDto = getConfig();
if (!configDto.getPartitionMap().containsKey(partitionId)){
return configDto;
}
MiniGameLudoConfigDto partitionConfigDto = configDto.getPartitionMap().get(partitionId);
partitionConfigDto.setMgIdStr(configDto.getMgIdStr());
return partitionConfigDto;
}
}

View File

@@ -1,16 +1,27 @@
package com.accompany.business.service.miniGame.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.accompany.business.config.BaiShunMiniGameConfig;
import com.accompany.business.constant.RoomTypeEnum;
import com.accompany.business.constant.game.MiniGameRoomFlagConstant;
import com.accompany.business.dto.miniGame.MiniGameLudoConfigDto;
import com.accompany.business.model.miniGame.MiniGame;
import com.accompany.business.mybatismapper.miniGame.MiniGameMapper;
import com.accompany.business.service.miniGame.MiniGameService;
import com.accompany.business.service.room.RoomService;
import com.accompany.business.service.user.UsersService;
import com.accompany.business.vo.miniGame.MiniGameNavVo;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.accompany.core.base.UidContextHolder;
import com.accompany.core.model.Room;
import com.accompany.core.model.Users;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -26,9 +37,55 @@ public class MiniGameServiceImpl extends ServiceImpl<MiniGameMapper, MiniGame> i
@Autowired
private MiniGameMapper miniGameMapper;
@Autowired
private BaiShunMiniGameConfig baiShunMiniGameConfig;
private UsersService usersService;
@Autowired
private RoomService roomService;
@Autowired
private MiniGameLudoService miniGameLudoService;
@Override
public List<MiniGameVo> listVoByRoomUid(Long uid, Long roomUid) {
List<MiniGame> poList = miniGameListByIsSHow(true);
if (CollectionUtil.isEmpty(poList)) {
return Collections.emptyList();
}
Users users = usersService.getNotNullUsersByUid(uid);
Integer partitionId = users.getPartitionId();
poList = poList.stream().filter(v -> v.getPartitionFlag() == null || v.getPartitionFlag() == 0 || (v.getPartitionFlag() & partitionId) != 0).collect(Collectors.toList());
if (roomUid != null) {
Room room = roomService.getRoomByUid(roomUid);
if (room != null) {
Byte roomType = room.getType();
poList = poList.stream().filter(v -> {
Integer roomFlag = v.getRoomFlag();
if (roomFlag == null || roomFlag == 0) {
return true;
}
if ((roomFlag & MiniGameRoomFlagConstant.MINI_GAME) != 0) {
return roomType.equals(RoomTypeEnum.MINI_GAME.getCode());
}
if ((roomFlag & MiniGameRoomFlagConstant.PERMIT) != 0 || (roomFlag & MiniGameRoomFlagConstant.NOT_PERMIT) != 0) {
return roomType.equals(RoomTypeEnum.NORMAL.getCode());
}
return true;
}).collect(Collectors.toList());
}
}
MiniGameLudoConfigDto ludoConfigDto = miniGameLudoService.getConfigByPartitionId(partitionId);
return poList.stream().map(miniGame -> {
MiniGameVo vo = new MiniGameVo();
BeanUtils.copyProperties(miniGame, vo);
if (miniGame.getMgIdStr().equals(ludoConfigDto.getMgIdStr())) {
vo.setCanWithoutTicket(ludoConfigDto.getCanWithoutTicket());
vo.setTicket(ludoConfigDto.getTicket());
}
return vo;
}).toList();
}
public MiniGame queryMiniGameByMgId(Long mgId) {
QueryWrapper<MiniGame> queryWrapper = new QueryWrapper<>();
@@ -67,4 +124,5 @@ public class MiniGameServiceImpl extends ServiceImpl<MiniGameMapper, MiniGame> i
public Integer getMiniGameMinMicNum() {
return miniGameMapper.getMiniGameMinMicNum();
}
}

View File

@@ -1,18 +1,13 @@
package com.accompany.business.controller.miniGame;
import cn.hutool.core.collection.CollectionUtil;
import com.accompany.business.common.BaseController;
import com.accompany.business.constant.RoomTypeEnum;
import com.accompany.business.constant.game.MiniGameRoomFlagConstant;
import com.accompany.business.model.miniGame.MiniGame;
import com.accompany.business.service.miniGame.MiniGameService;
import com.accompany.business.service.room.RoomService;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.accompany.common.annotation.Authorization;
import com.accompany.common.result.BusiResult;
import com.accompany.core.base.UidContextHolder;
import com.accompany.core.model.Room;
import com.accompany.core.model.Users;
import com.accompany.core.service.user.UsersBaseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@@ -20,7 +15,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.Collectors;
/**
@@ -37,46 +31,16 @@ public class MiniGameController extends BaseController {
@Autowired
private MiniGameService miniGameService;
@Autowired
private UsersBaseService usersBaseService;
@Autowired
private RoomService roomService;
@ApiOperation("游戏列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "userErBanNo", value = "用户平台ID"),
})
@Authorization
@PostMapping("/miniGameList")
public BusiResult<List<MiniGame>> miniGameShowList(Long roomUid) {
List<MiniGame> miniGames = miniGameService.miniGameListByIsSHow(true);
if (CollectionUtil.isNotEmpty(miniGames)) {
Long uid = UidContextHolder.get();
if (uid != null) {
Users users = usersBaseService.getUsersByUid(uid);
if (users != null) {
Integer partitionId = users.getPartitionId();
miniGames = miniGames.stream().filter(v -> v.getPartitionFlag() == null || v.getPartitionFlag() == 0 || (v.getPartitionFlag() & partitionId) != 0).collect(Collectors.toList());
}
}
if (roomUid != null) {
Room room = roomService.getRoomByUid(roomUid);
if (room != null) {
Byte roomType = room.getType();
miniGames = miniGames.stream().filter(v -> {
Integer roomFlag = v.getRoomFlag();
if (roomFlag == null || roomFlag == 0) {
return true;
}
if ((roomFlag & MiniGameRoomFlagConstant.MINI_GAME) != 0) {
return roomType.equals(RoomTypeEnum.MINI_GAME.getCode());
}
if ((roomFlag & MiniGameRoomFlagConstant.PERMIT) != 0 || (roomFlag & MiniGameRoomFlagConstant.NOT_PERMIT) != 0) {
return roomType.equals(RoomTypeEnum.NORMAL.getCode());
}
return true;
}).collect(Collectors.toList());
}
}
}
return BusiResult.success(miniGames);
public BusiResult<List<MiniGameVo>> miniGameShowList(Long roomUid) {
Long uid = getUid();
List<MiniGameVo> voList = miniGameService.listVoByRoomUid(uid, roomUid);
return BusiResult.success(voList);
}
}

View File

@@ -3,7 +3,7 @@ package com.accompany.business.controller.miniGame;
import com.accompany.business.service.chat.ChatRoomManageService;
import com.accompany.business.service.miniGame.MiniGameForNavService;
import com.accompany.business.vo.chat.ChatRoomVo;
import com.accompany.business.vo.miniGame.MiniGameVo;
import com.accompany.business.vo.miniGame.MiniGameNavVo;
import com.accompany.common.result.BusiResult;
import com.accompany.core.base.UidContextHolder;
import io.swagger.annotations.Api;
@@ -37,7 +37,7 @@ public class MiniGameForNavController {
*/
@ApiOperation("游戏配置")
@GetMapping("/config")
public BusiResult<MiniGameVo> config() {
public BusiResult<MiniGameNavVo> config() {
return BusiResult.success(miniGameForNavService.getConfig());
}