HouseInfoServiceImpl.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556
  1. package com.izouma.awesomeadmin.service.impl;
  2. import java.math.BigDecimal;
  3. import java.util.*;
  4. import com.izouma.awesomeadmin.dao.CompetitionSeasonMapper;
  5. import com.izouma.awesomeadmin.dto.Result;
  6. import com.izouma.awesomeadmin.model.*;
  7. import com.izouma.awesomeadmin.service.*;
  8. import com.izouma.awesomeadmin.util.DateTimeTool;
  9. import com.izouma.awesomeadmin.util.MbappUtil;
  10. import org.apache.commons.collections.CollectionUtils;
  11. import org.apache.log4j.Logger;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.stereotype.Service;
  14. import com.izouma.awesomeadmin.constant.AppConstant;
  15. import com.izouma.awesomeadmin.dto.Page;
  16. import com.izouma.awesomeadmin.dao.HouseInfoMapper;
  17. /**
  18. * service接口实现类
  19. */
  20. @Service
  21. public class HouseInfoServiceImpl implements HouseInfoService {
  22. private static Logger logger = Logger.getLogger(HouseInfoServiceImpl.class);
  23. @Autowired
  24. private HouseInfoMapper houseInfoMapper;
  25. @Autowired
  26. private CompetitionSeasonMapper competitionSeasonMapper;
  27. @Autowired
  28. private UserInfoService userInfoService;
  29. @Autowired
  30. private MemberCoinService memberCoinService;
  31. @Autowired
  32. private PlayerInfoService playerInfoService;
  33. @Autowired
  34. private SystemNoticeService systemNoticeService;
  35. @Override
  36. public List<HouseInfo> getHouseInfoList(HouseInfo record) {
  37. logger.info("getHouseInfoList");
  38. try {
  39. return houseInfoMapper.queryAllHouseInfo(record);
  40. } catch (Exception e) {
  41. logger.error("getHouseInfoList", e);
  42. }
  43. return null;
  44. }
  45. @Override
  46. public List<HouseInfo> getHouseInfoByPage(Page page, HouseInfo record) {
  47. logger.info("getHouseInfoByPage");
  48. try {
  49. Map<String, Object> parameter = new HashMap<String, Object>();
  50. parameter.put("record", record);
  51. parameter.put(AppConstant.PAGE, page);
  52. return houseInfoMapper.queryHouseInfoByPage(parameter);
  53. } catch (Exception e) {
  54. logger.error("getHouseInfoByPage", e);
  55. }
  56. return null;
  57. }
  58. @Override
  59. public HouseInfo getHouseInfoById(String id) {
  60. logger.info("getHouseInfoyId");
  61. try {
  62. return houseInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
  63. } catch (Exception e) {
  64. logger.error("getHouseInfoById", e);
  65. }
  66. return null;
  67. }
  68. @Override
  69. public HouseInfo getHouseInfoPlayerNum(String id) {
  70. logger.info("getHouseInfoPlayerNum");
  71. try {
  72. return houseInfoMapper.getHouseInfoPlayerNum(Integer.valueOf(id));
  73. } catch (Exception e) {
  74. logger.error("getHouseInfoPlayerNum", e);
  75. }
  76. return null;
  77. }
  78. @Override
  79. public HouseInfo getHouseInfo(HouseInfo record) {
  80. logger.info("getHouseInfo");
  81. try {
  82. return houseInfoMapper.queryHouseInfo(record);
  83. } catch (Exception e) {
  84. logger.error("getHouseInfo", e);
  85. }
  86. return null;
  87. }
  88. @Override
  89. public boolean createHouseInfo(HouseInfo record) {
  90. logger.info("createHouseInfo");
  91. try {
  92. record.setHouseCode(MbappUtil.getCodeByUUId());
  93. CompetitionSeason competitionSeason = new CompetitionSeason();
  94. competitionSeason.setGameId(record.getGameId());
  95. competitionSeason.setStatusFlag(AppConstant.SeasonStatus.START);
  96. competitionSeason = competitionSeasonMapper.queryCompetitionSeason(competitionSeason);
  97. if (competitionSeason != null) {
  98. record.setSeasonId(competitionSeason.getId());
  99. }
  100. int updates = houseInfoMapper.insertSelective(record);
  101. if (updates > 0) {
  102. return true;
  103. }
  104. } catch (Exception e) {
  105. logger.error("createHouseInfo", e);
  106. }
  107. return false;
  108. }
  109. @Override
  110. public boolean deleteHouseInfo(HouseInfo record) {
  111. logger.info("deleteHouseInfo");
  112. try {
  113. int updates = houseInfoMapper.delete(record);
  114. if (updates > 0) {
  115. return true;
  116. }
  117. } catch (Exception e) {
  118. logger.error("deleteHouseInfo", e);
  119. }
  120. return false;
  121. }
  122. @Override
  123. public boolean updateHouseInfo(HouseInfo record) {
  124. logger.info("updateHouseInfo");
  125. try {
  126. int updates = houseInfoMapper.updateByPrimaryKeySelective(record);
  127. if (updates > 0) {
  128. return true;
  129. }
  130. } catch (Exception e) {
  131. logger.error("updateHouseInfo", e);
  132. }
  133. return false;
  134. }
  135. /**
  136. * 房间比赛结果结算。
  137. *
  138. * @param record
  139. * @return
  140. */
  141. @Override
  142. public boolean settlementHouse(HouseInfo record) {
  143. logger.info("settlementHouse");
  144. try {
  145. HouseInfo houseInfo = new HouseInfo();
  146. houseInfo.setId(record.getId());
  147. houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
  148. if (houseInfo != null) {
  149. if (houseInfo.getStatusFlag() == AppConstant.HouseStatus.END) {//只有结束比赛的才能结束
  150. HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
  151. BigDecimal firstRatio = houseLevel.getFirstRatio();
  152. BigDecimal secondRatio = houseLevel.getSecondRatio();
  153. BigDecimal thirdRatio = houseLevel.getThirdRatio();
  154. BigDecimal poolRatio = houseLevel.getPoolRatio();
  155. PlayerInfo param = new PlayerInfo();
  156. param.setHouseId(record.getId());
  157. List<PlayerInfo> playerInfoList = playerInfoService.getSettlementPlayer(param);
  158. if (CollectionUtils.isNotEmpty(playerInfoList)) {
  159. for (int i = 0; i < playerInfoList.size(); i++) {
  160. PlayerInfo playerInfo = playerInfoList.get(i);
  161. playerInfo.setHouseRank(i + 1);
  162. BigDecimal bonus = BigDecimal.ZERO;
  163. if (1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
  164. if (i == 0) {//第一名
  165. bonus = BigDecimal.valueOf((firstRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  166. }
  167. if (i == 1) {//第二名
  168. bonus = BigDecimal.valueOf((secondRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  169. }
  170. if (i == 2) {//第三名
  171. bonus = BigDecimal.valueOf((thirdRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  172. }
  173. }
  174. playerInfo.setBonus(bonus);
  175. if (AppConstant.PlayerStatus.END == playerInfo.getStatusFlag()) {//如果是正常结束的则更新为结束完成
  176. playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
  177. SystemNotice systemNotice = new SystemNotice();
  178. systemNotice.setGameId(playerInfo.getGameId());
  179. systemNotice.setHouseId(playerInfo.getHouseId());
  180. systemNotice.setUserId(playerInfo.getUserId());
  181. systemNotice.setSeasonId(playerInfo.getSeasonId());
  182. systemNotice.setPlayerId(playerInfo.getId());
  183. systemNotice.setRemark("定时任务");
  184. String content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  185. + "开始的游戏竞赛 " + houseInfo.getHouseName() + "获得了第" + playerInfo.getHouseRank()
  186. + "名,赶快领取你的奖励吧。";
  187. systemNotice.setContent(content);
  188. systemNotice.setTypeFlag(AppConstant.NoticeType.RESULT);
  189. systemNoticeService.createSystemNotice(systemNotice);
  190. }
  191. playerInfoService.updatePlayerInfo(playerInfo);
  192. }
  193. }
  194. if (poolRatio.doubleValue() > 0) {
  195. BigDecimal pool = BigDecimal.valueOf((poolRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  196. //TODO 加入到赛季奖金池中
  197. }
  198. return true;
  199. }
  200. }
  201. } catch (Exception e) {
  202. logger.error("settlementHouse", e);
  203. }
  204. return false;
  205. }
  206. /**
  207. * 加入房间
  208. *
  209. * @param record
  210. * @return
  211. */
  212. @Override
  213. public Result joinHouseInfo(PlayerInfo record) {
  214. logger.info("joinHouseInfo");
  215. try {
  216. if (record.getUserId() == null) {
  217. return new Result(false, "加入失败,用户不存在!");
  218. }
  219. if (record.getHouseId() == null) {
  220. return new Result(false, "加入失败,房间不存在!");
  221. }
  222. UserInfo userInfo = new UserInfo();
  223. userInfo.setId(record.getUserId());
  224. userInfo = userInfoService.getSingleUserInfo(userInfo);
  225. if (userInfo == null) {
  226. return new Result(false, "加入失败,用户不存在!");
  227. }
  228. HouseInfo houseInfo = new HouseInfo();
  229. houseInfo.setId(record.getHouseId());
  230. houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
  231. if (houseInfo == null) {
  232. return new Result(false, "加入失败,房间不存在!");
  233. }
  234. if (houseInfo.getStatusFlag() > AppConstant.HouseStatus.READY) {
  235. return new Result(false, "加入失败,游戏已开始!");
  236. }
  237. //检查是否重复加入
  238. PlayerInfo playerInfo = playerInfoService.getPlayerInfo(record);
  239. if (playerInfo != null) {
  240. return new Result(false, "加入失败,不能重复加入");
  241. }
  242. double entryCoin = 50;
  243. HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
  244. if (houseLevel != null) {
  245. entryCoin = houseLevel.getEntryCoin().doubleValue();
  246. }
  247. /**
  248. * 余额
  249. */
  250. double moneyCoin = userInfo.getMoneyCoin();
  251. if (entryCoin > moneyCoin) {
  252. return new Result(false, "加入失败,余额不足");
  253. }
  254. record.setGameId(houseInfo.getGameId());
  255. record.setHouseId(houseInfo.getId());
  256. record.setJoinTime(new Date());
  257. record.setPrincipal(BigDecimal.valueOf(entryCoin));
  258. record.setSeasonId(houseInfo.getSeasonId());
  259. playerInfoService.createPlayerInfo(record);
  260. // 只能用余额支付
  261. if (entryCoin > 0) {
  262. MemberCoin memberCoin = new MemberCoin();
  263. memberCoin.setCreateUser("系统");
  264. memberCoin.setHouseId(houseInfo.getId());
  265. memberCoin.setUserId(userInfo.getId());
  266. memberCoin.setGameId(houseInfo.getGameId());
  267. memberCoin.setSeasonId(houseInfo.getSeasonId());
  268. memberCoin.setPlayerId(record.getId());
  269. memberCoin.setMoney(BigDecimal.valueOf(-entryCoin));
  270. memberCoin.setBalance(BigDecimal.valueOf(moneyCoin - entryCoin));
  271. memberCoin.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
  272. memberCoin.setRemark("加入房间:" + houseInfo.getHouseCode());
  273. memberCoinService.createMemberCoin(memberCoin);
  274. }
  275. UserInfo updateUser = new UserInfo();
  276. updateUser.setId(userInfo.getId());
  277. updateUser.setMoneyCoin(moneyCoin - entryCoin);
  278. userInfoService.updateUserInfo(updateUser);
  279. HouseInfo joinHouseInfo = new HouseInfo();
  280. joinHouseInfo.setId(houseInfo.getId());
  281. joinHouseInfo.setPlayerNumber(1);
  282. joinHouseInfo.setBonus(BigDecimal.valueOf(entryCoin));
  283. houseInfoMapper.joinHouseInfo(joinHouseInfo);
  284. return new Result(true, "加入成功");
  285. } catch (Exception e) {
  286. logger.error("joinHouseInfo", e);
  287. }
  288. return new Result(false, "加入失败");
  289. }
  290. @Override
  291. public Result autoBegin(HouseInfo record) {
  292. logger.info("autoBegin");
  293. try {
  294. List<HouseInfo> houseInfoList = houseInfoMapper.autoBeginHouseInfo(record);
  295. for (HouseInfo houseInfo : houseInfoList) {
  296. houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
  297. houseInfo.setBeginTime(new Date());
  298. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  299. }
  300. return new Result(true, "开始成功");
  301. } catch (Exception e) {
  302. logger.error("autoBegin", e);
  303. }
  304. return new Result(false, "开始失败");
  305. }
  306. @Override
  307. public Result handBegin(HouseInfo record) {
  308. logger.info("handBegin");
  309. try {
  310. HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
  311. if (houseInfo != null) {
  312. if (AppConstant.HouseStatus.START > houseInfo.getStatusFlag()) {//房间为未开始状态
  313. houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
  314. houseInfo.setBeginTime(new Date());
  315. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  316. return new Result(true, "开始成功");
  317. }
  318. }
  319. } catch (Exception e) {
  320. logger.error("handBegin", e);
  321. }
  322. return new Result(false, "开始失败");
  323. }
  324. @Override
  325. public Result autoEnd(HouseInfo record) {
  326. logger.info("autoEnd");
  327. try {
  328. List<HouseInfo> houseInfoList = houseInfoMapper.autoEndHouseInfo(record);
  329. for (HouseInfo houseInfo : houseInfoList) {
  330. houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
  331. houseInfo.setEndTime(new Date());
  332. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  333. //更新比赛超时的
  334. PlayerInfo playerInfo = new PlayerInfo();
  335. playerInfo.setHouseId(houseInfo.getId());
  336. playerInfoService.overTimePlayer(playerInfo);
  337. settlementHouse(houseInfo);//比赛结果结算。
  338. }
  339. return new Result(true, "结束成功");
  340. } catch (Exception e) {
  341. logger.error("autoEnd", e);
  342. }
  343. return new Result(false, "结束失败");
  344. }
  345. @Override
  346. public Result handEnd(HouseInfo record) {
  347. logger.info("handEnd");
  348. try {
  349. HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
  350. if (houseInfo != null) {
  351. if (AppConstant.HouseStatus.START == houseInfo.getStatusFlag()) {//房间为开始状态
  352. houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
  353. houseInfo.setEndTime(new Date());
  354. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  355. //更新比赛超时的
  356. PlayerInfo playerInfo = new PlayerInfo();
  357. playerInfo.setHouseId(houseInfo.getId());
  358. playerInfoService.overTimePlayer(playerInfo);
  359. settlementHouse(houseInfo);//比赛结果结算。
  360. return new Result(true, "结束成功");
  361. }
  362. }
  363. } catch (Exception e) {
  364. logger.error("handEnd", e);
  365. }
  366. return new Result(false, "结束失败");
  367. }
  368. @Override
  369. public Result autoNoStartPlay(HouseInfo record) {
  370. logger.info("autoNoStartPlay");
  371. try {
  372. List<PlayerInfo> playerInfoList = playerInfoService.getNoStartPlayer(record);
  373. for (PlayerInfo playerInfo : playerInfoList) {
  374. playerInfo.setStatusFlag(AppConstant.PlayerStatus.NO_MATCH);
  375. playerInfo.setExamineUser("系统定时任务");
  376. playerInfo.setExamineTime(new Date());
  377. playerInfo.setExamineType(AppConstant.ExamineType.NO_MATCH);
  378. playerInfoService.updatePlayerInfo(playerInfo);
  379. SystemNotice systemNotice = new SystemNotice();
  380. systemNotice.setGameId(playerInfo.getGameId());
  381. systemNotice.setHouseId(playerInfo.getHouseId());
  382. systemNotice.setUserId(playerInfo.getUserId());
  383. systemNotice.setSeasonId(playerInfo.getSeasonId());
  384. systemNotice.setPlayerId(playerInfo.getId());
  385. systemNotice.setRemark("定时任务");
  386. systemNotice.setContent("房间比赛开始未按规定时间开始游戏,未参赛!");
  387. systemNotice.setTypeFlag(AppConstant.NoticeType.NO_MATCH);
  388. systemNoticeService.createSystemNotice(systemNotice);
  389. }
  390. return new Result(true, "开始成功");
  391. } catch (Exception e) {
  392. logger.error("autoNoStartPlay", e);
  393. }
  394. return new Result(false, "开始失败");
  395. }
  396. }