| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698 |
- package com.izouma.awesomeadmin.service.impl;
- import java.math.BigDecimal;
- import java.util.*;
- import com.izouma.awesomeadmin.dao.BonusRecordMapper;
- import com.izouma.awesomeadmin.dao.CompetitionSeasonMapper;
- import com.izouma.awesomeadmin.dto.Result;
- import com.izouma.awesomeadmin.model.*;
- import com.izouma.awesomeadmin.service.*;
- import com.izouma.awesomeadmin.util.DateTimeTool;
- import com.izouma.awesomeadmin.util.MbappUtil;
- import com.izouma.awesomeadmin.util.PushUtil;
- import org.apache.commons.collections.CollectionUtils;
- import org.apache.log4j.Logger;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import com.izouma.awesomeadmin.constant.AppConstant;
- import com.izouma.awesomeadmin.dto.Page;
- import com.izouma.awesomeadmin.dao.HouseInfoMapper;
- /**
- * service接口实现类
- */
- @Service
- public class HouseInfoServiceImpl implements HouseInfoService {
- private static Logger logger = Logger.getLogger(HouseInfoServiceImpl.class);
- @Autowired
- private HouseInfoMapper houseInfoMapper;
- @Autowired
- private CompetitionSeasonMapper competitionSeasonMapper;
- @Autowired
- private UserInfoService userInfoService;
- @Autowired
- private MemberCoinService memberCoinService;
- @Autowired
- private PlayerInfoService playerInfoService;
- @Autowired
- private SystemNoticeService systemNoticeService;
- @Autowired
- private BonusRecordService bonusRecordService;
- @Override
- public List<HouseInfo> getHouseInfoList(HouseInfo record) {
- logger.info("getHouseInfoList");
- try {
- return houseInfoMapper.queryAllHouseInfo(record);
- } catch (Exception e) {
- logger.error("getHouseInfoList", e);
- }
- return null;
- }
- @Override
- public List<HouseInfo> getHouseInfoByPage(Page page, HouseInfo record) {
- logger.info("getHouseInfoByPage");
- try {
- Map<String, Object> parameter = new HashMap<String, Object>();
- parameter.put("record", record);
- parameter.put(AppConstant.PAGE, page);
- return houseInfoMapper.queryHouseInfoByPage(parameter);
- } catch (Exception e) {
- logger.error("getHouseInfoByPage", e);
- }
- return null;
- }
- @Override
- public HouseInfo getHouseInfoById(String id) {
- logger.info("getHouseInfoyId");
- try {
- return houseInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
- } catch (Exception e) {
- logger.error("getHouseInfoById", e);
- }
- return null;
- }
- @Override
- public HouseInfo getHouseInfoPlayerNum(String id) {
- logger.info("getHouseInfoPlayerNum");
- try {
- return houseInfoMapper.getHouseInfoPlayerNum(Integer.valueOf(id));
- } catch (Exception e) {
- logger.error("getHouseInfoPlayerNum", e);
- }
- return null;
- }
- @Override
- public HouseInfo getHouseInfo(HouseInfo record) {
- logger.info("getHouseInfo");
- try {
- return houseInfoMapper.queryHouseInfo(record);
- } catch (Exception e) {
- logger.error("getHouseInfo", e);
- }
- return null;
- }
- @Override
- public boolean createHouseInfo(HouseInfo record) {
- logger.info("createHouseInfo");
- try {
- record.setHouseCode(MbappUtil.getCodeByUUId());
- CompetitionSeason competitionSeason = new CompetitionSeason();
- competitionSeason.setGameId(record.getGameId());
- competitionSeason.setStatusFlag(AppConstant.SeasonStatus.START);
- competitionSeason = competitionSeasonMapper.queryCompetitionSeason(competitionSeason);
- if (competitionSeason != null) {
- record.setSeasonId(competitionSeason.getId());
- }
- int updates = houseInfoMapper.insertSelective(record);
- if (updates > 0) {
- return true;
- }
- } catch (Exception e) {
- logger.error("createHouseInfo", e);
- }
- return false;
- }
- @Override
- public boolean deleteHouseInfo(HouseInfo record) {
- logger.info("deleteHouseInfo");
- try {
- int updates = houseInfoMapper.delete(record);
- if (updates > 0) {
- return true;
- }
- } catch (Exception e) {
- logger.error("deleteHouseInfo", e);
- }
- return false;
- }
- @Override
- public boolean updateHouseInfo(HouseInfo record) {
- logger.info("updateHouseInfo");
- try {
- int updates = houseInfoMapper.updateByPrimaryKeySelective(record);
- if (updates > 0) {
- return true;
- }
- } catch (Exception e) {
- logger.error("updateHouseInfo", e);
- }
- return false;
- }
- /**
- * 房间比赛结果结算。
- *
- * @param record
- * @return
- */
- @Override
- public boolean settlementHouse(HouseInfo record) {
- logger.info("settlementHouse");
- try {
- HouseInfo houseInfo = new HouseInfo();
- houseInfo.setId(record.getId());
- houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
- if (houseInfo != null) {
- if (houseInfo.getStatusFlag() == AppConstant.HouseStatus.ANALYSIS) {//只有结束比赛的才能结算
- HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
- BigDecimal firstRatio = houseLevel.getFirstRatio();
- BigDecimal secondRatio = houseLevel.getSecondRatio();
- BigDecimal thirdRatio = houseLevel.getThirdRatio();
- BigDecimal poolRatio = houseLevel.getPoolRatio();
- PlayerInfo param = new PlayerInfo();
- param.setHouseId(record.getId());
- List<PlayerInfo> playerInfoList = playerInfoService.getSettlementPlayer(param);
- if (CollectionUtils.isNotEmpty(playerInfoList)) {
- for (int i = 0; i < playerInfoList.size(); i++) {
- PlayerInfo playerInfo = playerInfoList.get(i);
- playerInfo.setHouseRank(i + 1);
- BigDecimal bonus = BigDecimal.ZERO;
- String content = "";
- int typeFlag = AppConstant.NoticeType.RECEIVE;
- if (playerInfo.getRanking() != null && 1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
- if (i == 0) {//第一名
- bonus = BigDecimal.valueOf((firstRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
- }
- if (i == 1) {//第二名
- bonus = BigDecimal.valueOf((secondRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
- }
- if (i == 2) {//第三名
- bonus = BigDecimal.valueOf((thirdRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
- }
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
- + "开始的游戏竞赛 " + houseInfo.getHouseName() + "获得了第" + playerInfo.getHouseRank()
- + "名,获得" + bonus + "积分,赶快领取你的奖励吧。";
- } else {
- content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
- + "开始的游戏竞赛 " + houseInfo.getHouseName() + "获得了第" + playerInfo.getHouseRank()
- + "名,但未能吃鸡。";
- typeFlag = AppConstant.NoticeType.RESULT;
- }
- playerInfo.setBonus(bonus);
- if (AppConstant.PlayerStatus.PROCESSED == playerInfo.getStatusFlag()) {//如果是正常结束且解析完成的则更新为结束完成
- playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
- SystemNotice systemNotice = new SystemNotice();
- systemNotice.setGameId(playerInfo.getGameId());
- systemNotice.setHouseId(playerInfo.getHouseId());
- systemNotice.setUserId(playerInfo.getUserId());
- systemNotice.setSeasonId(playerInfo.getSeasonId());
- systemNotice.setPlayerId(playerInfo.getId());
- systemNotice.setRemark("定时任务");
- systemNotice.setContent(content);
- systemNotice.setTypeFlag(typeFlag);
- systemNoticeService.createSystemNotice(systemNotice);
- //推送
- try {
- UserInfo userInfo = new UserInfo();
- userInfo.setId(playerInfo.getUserId());
- userInfo = userInfoService.getSingleUserInfo(userInfo);
- if (userInfo != null) {
- if ("Y".equals(userInfo.getNoticeFlag())) {
- String[] ids = new String[]{userInfo.getId().toString()};
- PushUtil.pushMsg(ids, content);
- }
- }
- } catch (Exception e) {
- logger.error("结算推送消息异常。", e);
- }
- }
- playerInfoService.updatePlayerInfo(playerInfo);
- }
- }
- if (poolRatio.doubleValue() > 0) {
- //加入到赛季奖金池中
- try {
- BigDecimal pool = BigDecimal.valueOf((poolRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
- CompetitionSeason competitionSeason = competitionSeasonMapper.selectByPrimaryKey(houseInfo.getSeasonId());
- if (competitionSeason != null) {
- double balance = competitionSeason.getBonus().doubleValue();
- double moneyCoin = balance + pool.doubleValue();
- BonusRecord bonusRecord = new BonusRecord();
- bonusRecord.setMoney(pool);
- bonusRecord.setBonus(BigDecimal.valueOf(moneyCoin));
- bonusRecord.setSeasonId(houseInfo.getSeasonId());
- bonusRecord.setGameId(houseInfo.getGameId());
- bonusRecord.setHouseId(houseInfo.getId());
- bonusRecord.setTypeFlag(0);
- bonusRecord.setRemark(houseInfo.getHouseName() + "比赛结算," + pool.doubleValue() + " 积分");
- bonusRecordService.createBonusRecord(bonusRecord);
- CompetitionSeason addBonus = new CompetitionSeason();
- addBonus.setId(houseInfo.getId());
- addBonus.setBonus(pool);
- competitionSeasonMapper.addBonus(addBonus);
- }
- } catch (Exception e) {
- logger.error("赛季奖金池添加奖金异常!", e);
- }
- }
- //更新为结算完成状态。
- houseInfo.setStatusFlag(AppConstant.HouseStatus.SETTLEMENT);
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
- return true;
- }
- }
- } catch (Exception e) {
- logger.error("settlementHouse", e);
- }
- return false;
- }
- /**
- * 加入房间
- *
- * @param record
- * @return
- */
- @Override
- public Result joinHouseInfo(PlayerInfo record) {
- logger.info("joinHouseInfo");
- try {
- if (record.getUserId() == null) {
- return new Result(false, "加入失败,用户不存在!");
- }
- if (record.getHouseId() == null) {
- return new Result(false, "加入失败,房间不存在!");
- }
- UserInfo userInfo = new UserInfo();
- userInfo.setId(record.getUserId());
- userInfo = userInfoService.getSingleUserInfo(userInfo);
- if (userInfo == null) {
- return new Result(false, "加入失败,用户不存在!");
- }
- HouseInfo houseInfo = new HouseInfo();
- houseInfo.setId(record.getHouseId());
- houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
- if (houseInfo == null) {
- return new Result(false, "加入失败,房间不存在!");
- }
- if (houseInfo.getStatusFlag() > AppConstant.HouseStatus.READY) {
- return new Result(false, "加入失败,游戏已开始!");
- }
- //检查是否重复加入
- PlayerInfo playerInfo = playerInfoService.getPlayerInfo(record);
- if (playerInfo != null) {
- return new Result(false, "加入失败,不能重复加入");
- }
- double entryCoin = 50;
- HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
- if (houseLevel != null) {
- entryCoin = houseLevel.getEntryCoin().doubleValue();
- }
- /**
- * 余额
- */
- double moneyCoin = userInfo.getMoneyCoin();
- if (entryCoin > moneyCoin) {
- return new Result(false, "加入失败,余额不足");
- }
- record.setGameId(houseInfo.getGameId());
- record.setHouseId(houseInfo.getId());
- record.setJoinTime(new Date());
- record.setPrincipal(BigDecimal.valueOf(entryCoin));
- record.setSeasonId(houseInfo.getSeasonId());
- playerInfoService.createPlayerInfo(record);
- // 只能用余额支付
- if (entryCoin > 0) {
- MemberCoin memberCoin = new MemberCoin();
- memberCoin.setCreateUser("系统");
- memberCoin.setHouseId(houseInfo.getId());
- memberCoin.setUserId(userInfo.getId());
- memberCoin.setGameId(houseInfo.getGameId());
- memberCoin.setSeasonId(houseInfo.getSeasonId());
- memberCoin.setPlayerId(record.getId());
- memberCoin.setMoney(BigDecimal.valueOf(-entryCoin));
- memberCoin.setBalance(BigDecimal.valueOf(moneyCoin - entryCoin));
- memberCoin.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
- memberCoin.setRemark("加入房间:" + houseInfo.getHouseCode());
- memberCoinService.createMemberCoin(memberCoin);
- }
- UserInfo updateUser = new UserInfo();
- updateUser.setId(userInfo.getId());
- updateUser.setMoneyCoin(moneyCoin - entryCoin);
- userInfoService.updateUserInfo(updateUser);
- HouseInfo joinHouseInfo = new HouseInfo();
- joinHouseInfo.setId(houseInfo.getId());
- joinHouseInfo.setPlayerNumber(1);
- joinHouseInfo.setBonus(BigDecimal.valueOf(entryCoin));
- houseInfoMapper.joinHouseInfo(joinHouseInfo);
- return new Result(true, "加入成功");
- } catch (Exception e) {
- logger.error("joinHouseInfo", e);
- }
- return new Result(false, "加入失败");
- }
- @Override
- public Result autoBegin(HouseInfo record) {
- logger.info("autoBegin");
- try {
- List<HouseInfo> houseInfoList = houseInfoMapper.autoBeginHouseInfo(record);
- for (HouseInfo houseInfo : houseInfoList) {
- houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
- houseInfo.setBeginTime(new Date());
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
- }
- return new Result(true, "开始成功");
- } catch (Exception e) {
- logger.error("autoBegin", e);
- }
- return new Result(false, "开始失败");
- }
- @Override
- public Result handBegin(HouseInfo record) {
- logger.info("handBegin");
- try {
- HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
- if (houseInfo != null) {
- if (AppConstant.HouseStatus.START > houseInfo.getStatusFlag()) {//房间为未开始状态
- houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
- houseInfo.setBeginTime(new Date());
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
- return new Result(true, "开始成功");
- }
- }
- } catch (Exception e) {
- logger.error("handBegin", e);
- }
- return new Result(false, "开始失败");
- }
- @Override
- public Result autoEnd(HouseInfo record) {
- logger.info("autoEnd");
- try {
- List<HouseInfo> houseInfoList = houseInfoMapper.autoEndHouseInfo(record);
- for (HouseInfo houseInfo : houseInfoList) {
- houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
- houseInfo.setEndTime(new Date());
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
- //更新比赛超时的
- PlayerInfo playerInfo = new PlayerInfo();
- playerInfo.setHouseId(houseInfo.getId());
- playerInfoService.overTimePlayer(playerInfo);
- //settlementHouse(houseInfo);//比赛结果结算。
- }
- return new Result(true, "结束成功");
- } catch (Exception e) {
- logger.error("autoEnd", e);
- }
- return new Result(false, "结束失败");
- }
- /**
- * 自动结算
- *
- * @param record
- * @return
- */
- @Override
- public Result autoSettlement(HouseInfo record) {
- logger.info("autoSettlement");
- try {
- record.setStatusFlag(AppConstant.HouseStatus.ANALYSIS);//获取解析完成带结算的房间。
- List<HouseInfo> houseInfoList = houseInfoMapper.queryAllHouseInfo(record);
- for (HouseInfo houseInfo : houseInfoList) {
- settlementHouse(houseInfo);//比赛结果结算。
- }
- return new Result(true, "结束成功");
- } catch (Exception e) {
- logger.error("autoSettlement", e);
- }
- return new Result(false, "结束失败");
- }
- @Override
- public Result updateToAnalysis(HouseInfo record) {
- logger.info("updateToAnalysis");
- try {
- int updates = houseInfoMapper.updateToAnalysis(record);
- if (updates > 0) {
- return new Result(true, "更新成功");
- }
- } catch (Exception e) {
- logger.error("updateToAnalysis", e);
- }
- return new Result(false, "更新失败");
- }
- @Override
- public Result handEnd(HouseInfo record) {
- logger.info("handEnd");
- try {
- HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
- if (houseInfo != null) {
- if (AppConstant.HouseStatus.START == houseInfo.getStatusFlag()) {//房间为开始状态
- houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
- houseInfo.setEndTime(new Date());
- houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
- //更新比赛超时的
- PlayerInfo playerInfo = new PlayerInfo();
- playerInfo.setHouseId(houseInfo.getId());
- playerInfoService.overTimePlayer(playerInfo);
- //settlementHouse(houseInfo);//比赛结果结算。
- return new Result(true, "结束成功");
- }
- }
- } catch (Exception e) {
- logger.error("handEnd", e);
- }
- return new Result(false, "结束失败");
- }
- @Override
- public Result autoNoStartPlay(HouseInfo record) {
- logger.info("autoNoStartPlay");
- try {
- List<PlayerInfo> playerInfoList = playerInfoService.getNoStartPlayer(record);
- for (PlayerInfo playerInfo : playerInfoList) {
- playerInfo.setStatusFlag(AppConstant.PlayerStatus.NO_MATCH);
- playerInfo.setExamineUser("系统定时任务");
- playerInfo.setExamineTime(new Date());
- playerInfo.setExamineType(AppConstant.ExamineType.NO_MATCH);
- playerInfoService.updatePlayerInfo(playerInfo);
- SystemNotice systemNotice = new SystemNotice();
- systemNotice.setGameId(playerInfo.getGameId());
- systemNotice.setHouseId(playerInfo.getHouseId());
- systemNotice.setUserId(playerInfo.getUserId());
- systemNotice.setSeasonId(playerInfo.getSeasonId());
- systemNotice.setPlayerId(playerInfo.getId());
- systemNotice.setRemark("定时任务");
- systemNotice.setContent("房间比赛开始未按规定时间开始游戏,未参赛!");
- systemNotice.setTypeFlag(AppConstant.NoticeType.NO_MATCH);
- systemNoticeService.createSystemNotice(systemNotice);
- //推送
- try {
- UserInfo userInfo = new UserInfo();
- userInfo.setId(playerInfo.getUserId());
- userInfo = userInfoService.getSingleUserInfo(userInfo);
- if (userInfo != null) {
- if ("Y".equals(userInfo.getNoticeFlag())) {
- String[] ids = new String[]{userInfo.getId().toString()};
- PushUtil.pushMsg(ids, "房间比赛开始未按规定时间开始游戏,未参赛!");
- }
- }
- } catch (Exception e) {
- logger.error("推送消息异常。", e);
- }
- }
- return new Result(true, "开始成功");
- } catch (Exception e) {
- logger.error("autoNoStartPlay", e);
- }
- return new Result(false, "开始失败");
- }
- }
|