HouseInfoServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  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 com.izouma.awesomeadmin.util.PushUtil;
  11. import org.apache.commons.collections.CollectionUtils;
  12. import org.apache.log4j.Logger;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.stereotype.Service;
  15. import com.izouma.awesomeadmin.constant.AppConstant;
  16. import com.izouma.awesomeadmin.dto.Page;
  17. import com.izouma.awesomeadmin.dao.HouseInfoMapper;
  18. /**
  19. * service接口实现类
  20. */
  21. @Service
  22. public class HouseInfoServiceImpl implements HouseInfoService {
  23. private static Logger logger = Logger.getLogger(HouseInfoServiceImpl.class);
  24. @Autowired
  25. private HouseInfoMapper houseInfoMapper;
  26. @Autowired
  27. private CompetitionSeasonMapper competitionSeasonMapper;
  28. @Autowired
  29. private UserInfoService userInfoService;
  30. @Autowired
  31. private MemberCoinService memberCoinService;
  32. @Autowired
  33. private PlayerInfoService playerInfoService;
  34. @Autowired
  35. private SystemNoticeService systemNoticeService;
  36. @Autowired
  37. private BonusRecordService bonusRecordService;
  38. @Autowired
  39. private CompetitionService competitionService;
  40. @Autowired
  41. private ParticipatingInfoService participatingInfoService;
  42. @Override
  43. public List<HouseInfo> getHouseInfoList(HouseInfo record) {
  44. logger.info("getHouseInfoList");
  45. try {
  46. return houseInfoMapper.queryAllHouseInfo(record);
  47. } catch (Exception e) {
  48. logger.error("getHouseInfoList", e);
  49. }
  50. return null;
  51. }
  52. @Override
  53. public List<HouseInfo> getHouseInfoByPage(Page page, HouseInfo record) {
  54. logger.info("getHouseInfoByPage");
  55. try {
  56. Map<String, Object> parameter = new HashMap<String, Object>();
  57. parameter.put("record", record);
  58. parameter.put(AppConstant.PAGE, page);
  59. return houseInfoMapper.queryHouseInfoByPage(parameter);
  60. } catch (Exception e) {
  61. logger.error("getHouseInfoByPage", e);
  62. }
  63. return null;
  64. }
  65. @Override
  66. public HouseInfo getHouseInfoById(String id) {
  67. logger.info("getHouseInfoyId");
  68. try {
  69. return houseInfoMapper.selectByPrimaryKey(Integer.valueOf(id));
  70. } catch (Exception e) {
  71. logger.error("getHouseInfoById", e);
  72. }
  73. return null;
  74. }
  75. @Override
  76. public HouseInfo getHouseInfoPlayerNum(String id) {
  77. logger.info("getHouseInfoPlayerNum");
  78. try {
  79. return houseInfoMapper.getHouseInfoPlayerNum(Integer.valueOf(id));
  80. } catch (Exception e) {
  81. logger.error("getHouseInfoPlayerNum", e);
  82. }
  83. return null;
  84. }
  85. @Override
  86. public HouseInfo getHouseInfo(HouseInfo record) {
  87. logger.info("getHouseInfo");
  88. try {
  89. return houseInfoMapper.queryHouseInfo(record);
  90. } catch (Exception e) {
  91. logger.error("getHouseInfo", e);
  92. }
  93. return null;
  94. }
  95. @Override
  96. public boolean createHouseInfo(HouseInfo record) {
  97. logger.info("createHouseInfo");
  98. try {
  99. record.setHouseCode(MbappUtil.getCodeByUUId());
  100. CompetitionSeason competitionSeason = new CompetitionSeason();
  101. competitionSeason.setGameId(record.getGameId());
  102. competitionSeason.setStatusFlag(AppConstant.SeasonStatus.START);
  103. competitionSeason = competitionSeasonMapper.queryCompetitionSeason(competitionSeason);
  104. if (competitionSeason != null) {
  105. record.setSeasonId(competitionSeason.getId());
  106. }
  107. int updates = houseInfoMapper.insertSelective(record);
  108. if (updates > 0) {
  109. return true;
  110. }
  111. } catch (Exception e) {
  112. logger.error("createHouseInfo", e);
  113. }
  114. return false;
  115. }
  116. @Override
  117. public boolean deleteHouseInfo(HouseInfo record) {
  118. logger.info("deleteHouseInfo");
  119. try {
  120. int updates = houseInfoMapper.delete(record);
  121. if (updates > 0) {
  122. return true;
  123. }
  124. } catch (Exception e) {
  125. logger.error("deleteHouseInfo", e);
  126. }
  127. return false;
  128. }
  129. @Override
  130. public boolean updateHouseInfo(HouseInfo record) {
  131. logger.info("updateHouseInfo");
  132. try {
  133. int updates = houseInfoMapper.updateByPrimaryKeySelective(record);
  134. if (updates > 0) {
  135. return true;
  136. }
  137. } catch (Exception e) {
  138. logger.error("updateHouseInfo", e);
  139. }
  140. return false;
  141. }
  142. /**
  143. * 房间比赛结果结算。
  144. *
  145. * @param record
  146. * @return
  147. */
  148. @Override
  149. public boolean settlementHouse(HouseInfo record) {
  150. logger.info("settlementHouse");
  151. try {
  152. HouseInfo houseInfo = new HouseInfo();
  153. houseInfo.setId(record.getId());
  154. houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
  155. if (houseInfo == null || !houseInfo.getStatusFlag().equals(AppConstant.HouseStatus.ANALYSIS)) {
  156. //只有结束比赛的才能结算
  157. return false;
  158. }
  159. List<PlayerInfo> playerInfos = playerInfoService.getHouseRank(record.getId());
  160. if (CollectionUtils.isEmpty(playerInfos)) {
  161. return false;
  162. }
  163. // Competition competition = competitionService.getCompetitionById(record.getCompetitionId().toString());
  164. for (PlayerInfo playerInfo : playerInfos) {
  165. double rankRate = playerInfo.getRank() * 100 / (double) playerInfos.size();
  166. double points = 0;
  167. if (playerInfo.getRank() == 1) {
  168. points = 40;
  169. } else if (rankRate <= 10) {
  170. points = 20;
  171. } else if (rankRate <= 20) {
  172. points = 10;
  173. } else if (rankRate <= 30) {
  174. points = 0;
  175. } else {
  176. points = -10;
  177. }
  178. if (playerInfo.getRanking() != null && playerInfo.getRanking() == 1) {
  179. points += 10;
  180. }
  181. playerInfo.setPoints(new BigDecimal(points));
  182. playerInfo.setHouseRank(playerInfo.getRank());
  183. String content = "你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  184. + "开始的比赛\"" + houseInfo.getHouseName() + "\"中获得了第" + playerInfo.getHouseRank()
  185. + "名," + (points >= 0 ? "获得" : "扣除") + points + "积分。";
  186. SystemNotice systemNotice = new SystemNotice();
  187. systemNotice.setGameId(playerInfo.getGameId());
  188. systemNotice.setHouseId(playerInfo.getHouseId());
  189. systemNotice.setUserId(playerInfo.getUserId());
  190. systemNotice.setSeasonId(playerInfo.getSeasonId());
  191. systemNotice.setPlayerId(playerInfo.getId());
  192. systemNotice.setRemark("定时任务");
  193. systemNotice.setContent(content);
  194. systemNotice.setTypeFlag(AppConstant.NoticeType.RESULT);
  195. systemNoticeService.createSystemNotice(systemNotice);
  196. //推送
  197. try {
  198. UserInfo userInfo = new UserInfo();
  199. userInfo.setId(playerInfo.getUserId());
  200. userInfo = userInfoService.getSingleUserInfo(userInfo);
  201. if (userInfo != null) {
  202. if ("Y".equals(userInfo.getNoticeFlag())) {
  203. PushUtil.pushMsg(userInfo.getId().toString(), content);
  204. }
  205. }
  206. } catch (Exception e) {
  207. logger.error("结算推送消息异常。", e);
  208. }
  209. if (AppConstant.PlayerStatus.PROCESSED == playerInfo.getStatusFlag()) {//如果正常结束的则更新状态
  210. playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
  211. }
  212. playerInfoService.updatePlayerInfo(playerInfo);
  213. }
  214. //更新为结算完成状态。
  215. houseInfo.setStatusFlag(AppConstant.HouseStatus.SETTLEMENT);
  216. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  217. } catch (Exception e) {
  218. logger.error(e);
  219. }
  220. return false;
  221. }
  222. public boolean settlementHouse_bak(HouseInfo record) {
  223. logger.info("settlementHouse");
  224. try {
  225. HouseInfo houseInfo = new HouseInfo();
  226. houseInfo.setId(record.getId());
  227. houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
  228. if (houseInfo == null || !houseInfo.getStatusFlag().equals(AppConstant.HouseStatus.ANALYSIS)) {
  229. //只有结束比赛的才能结算
  230. return false;
  231. }
  232. HouseLevel houseLevel = houseInfo.getHouseLevelInfo();
  233. BigDecimal firstRatio = houseLevel.getFirstRatio();
  234. BigDecimal secondRatio = houseLevel.getSecondRatio();
  235. BigDecimal thirdRatio = houseLevel.getThirdRatio();
  236. BigDecimal poolRatio = houseLevel.getPoolRatio();
  237. BigDecimal avgRatio = houseLevel.getAvgRatio();
  238. int winNum = 0;//吃鸡人数
  239. PlayerInfo param = new PlayerInfo();
  240. if (houseInfo.getScoreType() > 0) {
  241. param.setScoreType(1);
  242. }
  243. param.setHouseId(record.getId());
  244. List<PlayerInfo> playerInfoList = playerInfoService.getSettlementPlayer(param);
  245. if (CollectionUtils.isNotEmpty(playerInfoList)) {
  246. if (houseInfo.getScoreType() > 0) {//如果是平分模式,获取吃鸡人数。
  247. param.setRanking(1);
  248. List<PlayerInfo> winList = playerInfoService.getSettlementPlayer(param);
  249. winNum = winList.size();
  250. }
  251. for (int i = 0; i < playerInfoList.size(); i++) {
  252. PlayerInfo playerInfo = playerInfoList.get(i);
  253. playerInfo.setHouseRank(i + 1);
  254. BigDecimal bonus = BigDecimal.ZERO;
  255. String content = "";
  256. int typeFlag = AppConstant.NoticeType.RECEIVE;
  257. if (AppConstant.PlayerStatus.PROCESSED_FAIL == playerInfo.getStatusFlag()) {
  258. content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  259. + "开始的游戏竞赛 " + houseInfo.getHouseName()
  260. + ",未解析到结果,无法获得奖励。";
  261. typeFlag = AppConstant.NoticeType.RESULT;
  262. } else if (AppConstant.PlayerStatus.OVERTIME == playerInfo.getStatusFlag()) {
  263. content = "很遗憾,你在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  264. + "开始的游戏竞赛 " + houseInfo.getHouseName()
  265. + ",比赛超时,无法获得奖励。";
  266. typeFlag = AppConstant.NoticeType.RESULT;
  267. } else {
  268. if (houseInfo.getScoreType() == 0) {//吃鸡模式
  269. if (playerInfo.getRanking() != null && 1 == playerInfo.getRanking()) {//只有吃鸡才能获得奖励
  270. if (i == 0) {//第一名
  271. bonus = BigDecimal.valueOf((firstRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  272. }
  273. if (i == 1) {//第二名
  274. bonus = BigDecimal.valueOf((secondRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  275. }
  276. if (i == 2) {//第三名
  277. bonus = BigDecimal.valueOf((thirdRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  278. }
  279. content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  280. + "开始的游戏竞赛 " + houseInfo.getHouseName() + "(吃鸡模式)获得了第" + playerInfo.getHouseRank()
  281. + "名,获得" + bonus + "积分,赶快领取你的奖励吧。";
  282. } else {
  283. content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  284. + "开始的游戏竞赛 " + houseInfo.getHouseName() + "(吃鸡模式)获得了第" + playerInfo.getHouseRank()
  285. + "名,但未能吃鸡,因此无法获得奖励。";
  286. typeFlag = AppConstant.NoticeType.RESULT;
  287. }
  288. } else {
  289. if (playerInfo.getRanking() != null && 1 == playerInfo.getRanking()) {//只有评分大于0才能获得奖励
  290. if (winNum > 0) {//吃鸡人数大于0
  291. bonus = BigDecimal.valueOf(((avgRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue()) / winNum);
  292. }
  293. content = "恭喜你,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  294. + "开始的游戏竞赛 " + houseInfo.getHouseName() + "(平分模式)获得了第" + playerInfo.getHouseRank()
  295. + "名,获得" + bonus + "积分,赶快领取你的奖励吧。";
  296. } else {
  297. content = "很遗憾,在" + DateTimeTool.dateTimeToTimeYYYYHHmmStr(houseInfo.getBeginTime())
  298. + "开始的游戏竞赛 " + houseInfo.getHouseName() + "(平分模式)获得了第" + playerInfo.getHouseRank()
  299. + "名,但未吃鸡,因此无法获得奖励。";
  300. typeFlag = AppConstant.NoticeType.RESULT;
  301. }
  302. }
  303. }
  304. //todo: 这里临时改成了积分
  305. playerInfo.setPoints(bonus);
  306. SystemNotice systemNotice = new SystemNotice();
  307. systemNotice.setGameId(playerInfo.getGameId());
  308. systemNotice.setHouseId(playerInfo.getHouseId());
  309. systemNotice.setUserId(playerInfo.getUserId());
  310. systemNotice.setSeasonId(playerInfo.getSeasonId());
  311. systemNotice.setPlayerId(playerInfo.getId());
  312. systemNotice.setRemark("定时任务");
  313. systemNotice.setContent(content);
  314. systemNotice.setTypeFlag(typeFlag);
  315. systemNoticeService.createSystemNotice(systemNotice);
  316. //推送
  317. try {
  318. UserInfo userInfo = new UserInfo();
  319. userInfo.setId(playerInfo.getUserId());
  320. userInfo = userInfoService.getSingleUserInfo(userInfo);
  321. if (userInfo != null) {
  322. if ("Y".equals(userInfo.getNoticeFlag())) {
  323. String[] ids = new String[]{userInfo.getId().toString()};
  324. PushUtil.pushMsg(ids, content);
  325. }
  326. }
  327. } catch (Exception e) {
  328. logger.error("结算推送消息异常。", e);
  329. }
  330. if (AppConstant.PlayerStatus.PROCESSED == playerInfo.getStatusFlag()) {//如果正常结束的则更新状态
  331. playerInfo.setStatusFlag(AppConstant.PlayerStatus.SETTLEMENT);
  332. }
  333. playerInfoService.updatePlayerInfo(playerInfo);
  334. }
  335. }
  336. if (poolRatio.doubleValue() > 0) {
  337. //加入到赛季奖金池中
  338. try {
  339. BigDecimal pool = BigDecimal.valueOf((poolRatio.doubleValue() / 100) * houseInfo.getBonus().doubleValue());
  340. CompetitionSeason competitionSeason = competitionSeasonMapper.selectByPrimaryKey(houseInfo.getSeasonId());
  341. if (competitionSeason != null) {
  342. double balance = competitionSeason.getBonus().doubleValue();
  343. double moneyCoin = balance + pool.doubleValue();
  344. BonusRecord bonusRecord = new BonusRecord();
  345. bonusRecord.setMoney(pool);
  346. bonusRecord.setBonus(BigDecimal.valueOf(moneyCoin));
  347. bonusRecord.setSeasonId(houseInfo.getSeasonId());
  348. bonusRecord.setGameId(houseInfo.getGameId());
  349. //todo: 这里临时改成了比赛id
  350. bonusRecord.setCompetitionId(houseInfo.getId());
  351. bonusRecord.setTypeFlag(0);
  352. bonusRecord.setRemark(houseInfo.getHouseName() + "比赛结算," + pool.doubleValue() + " 积分");
  353. bonusRecordService.createBonusRecord(bonusRecord);
  354. CompetitionSeason addBonus = new CompetitionSeason();
  355. addBonus.setId(competitionSeason.getId());
  356. addBonus.setBonus(pool);
  357. competitionSeasonMapper.addBonus(addBonus);
  358. }
  359. } catch (Exception e) {
  360. logger.error("赛季奖金池添加奖金异常!", e);
  361. }
  362. }
  363. //更新为结算完成状态。
  364. houseInfo.setStatusFlag(AppConstant.HouseStatus.SETTLEMENT);
  365. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  366. return true;
  367. } catch (Exception e) {
  368. logger.error("settlementHouse", e);
  369. }
  370. return false;
  371. }
  372. /**
  373. * 加入房间
  374. *
  375. * @param record
  376. * @return
  377. */
  378. @Override
  379. public Result joinHouseInfo(PlayerInfo record) {
  380. logger.info("joinHouseInfo");
  381. try {
  382. if (record.getUserId() == null) {
  383. return new Result(false, "加入失败,用户不存在!");
  384. }
  385. if (record.getHouseId() == null) {
  386. return new Result(false, "加入失败,房间不存在!");
  387. }
  388. UserInfo userInfo = new UserInfo();
  389. userInfo.setId(record.getUserId());
  390. userInfo = userInfoService.getSingleUserInfo(userInfo);
  391. if (userInfo == null) {
  392. return new Result(false, "加入失败,用户不存在!");
  393. }
  394. HouseInfo houseInfo = new HouseInfo();
  395. houseInfo.setId(record.getHouseId());
  396. houseInfo = houseInfoMapper.queryHouseInfo(houseInfo);
  397. if (houseInfo == null) {
  398. return new Result(false, "加入失败,房间不存在!");
  399. }
  400. if (houseInfo.getStatusFlag() > AppConstant.HouseStatus.READY) {
  401. return new Result(false, "加入失败,游戏已开始!");
  402. }
  403. //检查是否重复加入
  404. PlayerInfo playerInfo = playerInfoService.getPlayerInfo(record);
  405. if (playerInfo != null) {
  406. return new Result(false, "加入失败,不能重复加入");
  407. }
  408. //todo: 检查剩余次数
  409. //todo: 使用道具
  410. double entryCoin = 0;
  411. double moneyCoin = userInfo.getMoneyCoin();
  412. record.setGameId(houseInfo.getGameId());
  413. record.setHouseId(houseInfo.getId());
  414. record.setJoinTime(new Date());
  415. record.setPrincipal(BigDecimal.valueOf(entryCoin));
  416. record.setSeasonId(houseInfo.getSeasonId());
  417. record.setCompetitionId(houseInfo.getCompetitionId());
  418. playerInfoService.createPlayerInfo(record);
  419. // 只能用余额支付
  420. MemberCoin memberCoin = new MemberCoin();
  421. memberCoin.setCreateUser("系统");
  422. memberCoin.setHouseId(houseInfo.getId());
  423. memberCoin.setUserId(userInfo.getId());
  424. memberCoin.setGameId(houseInfo.getGameId());
  425. memberCoin.setSeasonId(houseInfo.getSeasonId());
  426. memberCoin.setPlayerId(record.getId());
  427. memberCoin.setMoney(BigDecimal.valueOf(-entryCoin));
  428. memberCoin.setBalance(BigDecimal.valueOf(moneyCoin - entryCoin));
  429. memberCoin.setTypeFlag(AppConstant.CoinType.CONSUMPTION);
  430. memberCoin.setRemark("加入房间:" + houseInfo.getHouseCode());
  431. memberCoinService.createMemberCoin(memberCoin);
  432. UserInfo updateUser = new UserInfo();
  433. updateUser.setId(userInfo.getId());
  434. updateUser.setMoneyCoin(moneyCoin - entryCoin);
  435. userInfoService.updateUserInfo(updateUser);
  436. HouseInfo joinHouseInfo = new HouseInfo();
  437. joinHouseInfo.setId(houseInfo.getId());
  438. joinHouseInfo.setPlayerNumber(1);
  439. joinHouseInfo.setBonus(BigDecimal.valueOf(entryCoin));
  440. houseInfoMapper.joinHouseInfo(joinHouseInfo);
  441. // 创建联赛参赛信息
  442. ParticipatingInfo participatingInfo = participatingInfoService.participate(record.getUserId(), houseInfo.getCompetitionId());
  443. return new Result(true, "加入成功");
  444. } catch (Exception e) {
  445. logger.error("joinHouseInfo", e);
  446. }
  447. return new Result(false, "加入失败");
  448. }
  449. @Override
  450. public Result autoBegin(HouseInfo record) {
  451. logger.info("autoBegin");
  452. try {
  453. List<HouseInfo> houseInfoList = houseInfoMapper.autoBeginHouseInfo(record);
  454. for (HouseInfo houseInfo : houseInfoList) {
  455. houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
  456. houseInfo.setBeginTime(new Date());
  457. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  458. }
  459. return new Result(true, "开始成功");
  460. } catch (Exception e) {
  461. logger.error("autoBegin", e);
  462. }
  463. return new Result(false, "开始失败");
  464. }
  465. @Override
  466. public Result handBegin(HouseInfo record) {
  467. logger.info("handBegin");
  468. try {
  469. HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
  470. if (houseInfo != null) {
  471. if (AppConstant.HouseStatus.START > houseInfo.getStatusFlag()) {//房间为未开始状态
  472. houseInfo.setStatusFlag(AppConstant.HouseStatus.START);
  473. houseInfo.setBeginTime(new Date());
  474. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  475. return new Result(true, "开始成功");
  476. }
  477. }
  478. } catch (Exception e) {
  479. logger.error("handBegin", e);
  480. }
  481. return new Result(false, "开始失败");
  482. }
  483. @Override
  484. public Result autoEnd(HouseInfo record) {
  485. logger.info("autoEnd");
  486. try {
  487. List<HouseInfo> houseInfoList = houseInfoMapper.autoEndHouseInfo(record);
  488. for (HouseInfo houseInfo : houseInfoList) {
  489. houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
  490. houseInfo.setEndTime(new Date());
  491. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  492. //更新比赛超时的
  493. PlayerInfo playerInfo = new PlayerInfo();
  494. playerInfo.setHouseId(houseInfo.getId());
  495. playerInfoService.overTimePlayer(playerInfo);
  496. //settlementHouse(houseInfo);//比赛结果结算。
  497. }
  498. return new Result(true, "结束成功");
  499. } catch (Exception e) {
  500. logger.error("autoEnd", e);
  501. }
  502. return new Result(false, "结束失败");
  503. }
  504. /**
  505. * 自动结算
  506. *
  507. * @param record
  508. * @return
  509. */
  510. @Override
  511. public Result autoSettlement(HouseInfo record) {
  512. logger.info("autoSettlement");
  513. try {
  514. record.setStatusFlag(AppConstant.HouseStatus.ANALYSIS);//获取解析完成带结算的房间。
  515. List<HouseInfo> houseInfoList = houseInfoMapper.queryAllHouseInfo(record);
  516. for (HouseInfo houseInfo : houseInfoList) {
  517. settlementHouse(houseInfo);//比赛结果结算。
  518. }
  519. return new Result(true, "结束成功");
  520. } catch (Exception e) {
  521. logger.error("autoSettlement", e);
  522. }
  523. return new Result(false, "结束失败");
  524. }
  525. @Override
  526. public Result updateToAnalysis(HouseInfo record) {
  527. logger.info("updateToAnalysis");
  528. try {
  529. int updates = houseInfoMapper.updateToAnalysis(record);
  530. if (updates > 0) {
  531. return new Result(true, "更新成功");
  532. }
  533. } catch (Exception e) {
  534. logger.error("updateToAnalysis", e);
  535. }
  536. return new Result(false, "更新失败");
  537. }
  538. @Override
  539. public Result handEnd(HouseInfo record) {
  540. logger.info("handEnd");
  541. try {
  542. HouseInfo houseInfo = houseInfoMapper.queryHouseInfo(record);
  543. if (houseInfo != null) {
  544. if (AppConstant.HouseStatus.START == houseInfo.getStatusFlag()) {//房间为开始状态
  545. houseInfo.setStatusFlag(AppConstant.HouseStatus.END);
  546. houseInfo.setEndTime(new Date());
  547. houseInfoMapper.updateByPrimaryKeySelective(houseInfo);
  548. //更新比赛超时的
  549. PlayerInfo playerInfo = new PlayerInfo();
  550. playerInfo.setHouseId(houseInfo.getId());
  551. playerInfoService.overTimePlayer(playerInfo);
  552. //settlementHouse(houseInfo);//比赛结果结算。
  553. return new Result(true, "结束成功");
  554. }
  555. }
  556. } catch (Exception e) {
  557. logger.error("handEnd", e);
  558. }
  559. return new Result(false, "结束失败");
  560. }
  561. @Override
  562. public Result autoNoStartPlay(HouseInfo record) {
  563. logger.info("autoNoStartPlay");
  564. try {
  565. List<PlayerInfo> playerInfoList = playerInfoService.getNoStartPlayer(record);
  566. for (PlayerInfo playerInfo : playerInfoList) {
  567. playerInfo.setStatusFlag(AppConstant.PlayerStatus.NO_MATCH);
  568. playerInfo.setExamineUser("系统定时任务");
  569. playerInfo.setExamineTime(new Date());
  570. playerInfo.setExamineType(AppConstant.ExamineType.NO_MATCH);
  571. playerInfoService.updatePlayerInfo(playerInfo);
  572. SystemNotice systemNotice = new SystemNotice();
  573. systemNotice.setGameId(playerInfo.getGameId());
  574. systemNotice.setHouseId(playerInfo.getHouseId());
  575. systemNotice.setUserId(playerInfo.getUserId());
  576. systemNotice.setSeasonId(playerInfo.getSeasonId());
  577. systemNotice.setPlayerId(playerInfo.getId());
  578. systemNotice.setRemark("定时任务");
  579. systemNotice.setContent("房间比赛开始未按规定时间开始游戏,未参赛!");
  580. systemNotice.setTypeFlag(AppConstant.NoticeType.NO_MATCH);
  581. systemNoticeService.createSystemNotice(systemNotice);
  582. //推送
  583. try {
  584. UserInfo userInfo = new UserInfo();
  585. userInfo.setId(playerInfo.getUserId());
  586. userInfo = userInfoService.getSingleUserInfo(userInfo);
  587. if (userInfo != null) {
  588. if ("Y".equals(userInfo.getNoticeFlag())) {
  589. String[] ids = new String[]{userInfo.getId().toString()};
  590. PushUtil.pushMsg(ids, "房间比赛开始未按规定时间开始游戏,未参赛!");
  591. }
  592. }
  593. } catch (Exception e) {
  594. logger.error("推送消息异常。", e);
  595. }
  596. }
  597. return new Result(true, "开始成功");
  598. } catch (Exception e) {
  599. logger.error("autoNoStartPlay", e);
  600. }
  601. return new Result(false, "开始失败");
  602. }
  603. }