From 327c6562980b822b60ffaab06611777ee3029a43 Mon Sep 17 00:00:00 2001 From: zhangye <654600784@qq.com> Date: Mon, 17 Feb 2020 16:20:59 +0800 Subject: [PATCH] 20200217 --- .../cloudutil/feign/TallFeignClient.java | 10 +++ .../com/ccsens/game/api/ScreenController.java | 2 +- .../com/ccsens/game/bean/dto/ClientDto.java | 3 +- .../com/ccsens/game/bean/po/GameUserJoin.java | 11 +++ .../game/bean/po/GameUserJoinExample.java | 70 +++++++++++++++ .../com/ccsens/game/bean/vo/ClientVo.java | 15 ++++ .../com/ccsens/game/bean/vo/ScreenVo.java | 4 +- .../ccsens/game/service/ClientService.java | 89 +++++++++++++++++-- .../ccsens/game/service/ScreenService.java | 1 + game/src/main/resources/application.yml | 4 +- .../resources/mapper_dao/GameUserJoinDao.xml | 6 +- .../mapper_raw/GameUserJoinMapper.xml | 35 +++++--- game/src/main/resources/mbg.xml | 8 +- .../com/ccsens/mt/api/SigninController.java | 60 ++++++------- .../java/com/ccsens/mt/bean/vo/SigninVo.java | 22 +++++ .../com/ccsens/mt/service/ISigninService.java | 4 + .../com/ccsens/mt/service/SigninService.java | 81 +++++++++++++++++ mt/src/main/resources/application.yml | 4 +- .../java/com/ccsens/tall/bean/vo/TaskVo.java | 2 + .../tall/persist/dao/TaskDetailDao.java | 2 +- .../com/ccsens/tall/service/ExcelService.java | 33 ++++++- .../tall/service/IProMemberService.java | 2 + .../tall/service/IProTaskDetailService.java | 2 + .../tall/service/ITaskSubTimeService.java | 2 +- .../ccsens/tall/service/ProMemberService.java | 46 +++++++++- .../tall/service/ProTaskDetailService.java | 24 ++++- .../tall/service/TaskPluginService.java | 15 +++- .../tall/service/TaskSubTimeService.java | 16 +++- .../com/ccsens/tall/service/UserService.java | 8 +- .../com/ccsens/tall/web/UserController.java | 10 +++ .../resources/mapper_dao/SysPluginDao.xml | 2 + .../resources/mapper_dao/TaskDetailDao.xml | 27 ++++-- .../java/com/ccsens/util/wx/WxXcxUtil.java | 39 +++++++- .../test/java/com/ccsens/util/Base64Test.java | 3 +- 34 files changed, 575 insertions(+), 87 deletions(-) diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java index b08e505b..b716e2cc 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java @@ -92,6 +92,12 @@ public interface TallFeignClient { */ @GetMapping("/users/member") JsonResponse getMemberByUserId(@RequestParam( name = "userId") Long userId,@RequestParam( name = "projectId") Long projectId); + /** + * 当用户不在项目中时查询该用户信息 + * @return + */ + @GetMapping("/users/userInfo") + JsonResponse getUserByUserId(@RequestParam( name = "userId") Long userId); /** @@ -174,6 +180,10 @@ class TallFeignClientFallBack implements FallbackFactory { public JsonResponse getMemberByUserId(Long userId,Long projectId) { return JsonResponse.newInstance().fail(); } + @Override + public JsonResponse getUserByUserId(Long userId) { + return JsonResponse.newInstance().fail(); + } @Override public List getMemberIdListByProject(Long projectId) { diff --git a/game/src/main/java/com/ccsens/game/api/ScreenController.java b/game/src/main/java/com/ccsens/game/api/ScreenController.java index 268261c2..13bd0786 100644 --- a/game/src/main/java/com/ccsens/game/api/ScreenController.java +++ b/game/src/main/java/com/ccsens/game/api/ScreenController.java @@ -59,7 +59,7 @@ public class ScreenController { @ApiImplicitParams({ }) @RequestMapping(value = "start", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse startGame(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + public JsonResponse startGame(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { log.info("开始游戏:{}",params); ScreenVo.StartGame startGame = screenService.startGame(params.getParam()); return JsonResponse.newInstance().ok(startGame); diff --git a/game/src/main/java/com/ccsens/game/bean/dto/ClientDto.java b/game/src/main/java/com/ccsens/game/bean/dto/ClientDto.java index 62063e01..33e002f9 100644 --- a/game/src/main/java/com/ccsens/game/bean/dto/ClientDto.java +++ b/game/src/main/java/com/ccsens/game/bean/dto/ClientDto.java @@ -26,7 +26,8 @@ public class ClientDto { @ApiModelProperty @NotNull(message = "请选择项目") private Long projectId; - + @ApiModelProperty("分组id,不是分组游戏则为空") + private Long groupId; } @Data diff --git a/game/src/main/java/com/ccsens/game/bean/po/GameUserJoin.java b/game/src/main/java/com/ccsens/game/bean/po/GameUserJoin.java index 7b8f44d5..795ffc47 100644 --- a/game/src/main/java/com/ccsens/game/bean/po/GameUserJoin.java +++ b/game/src/main/java/com/ccsens/game/bean/po/GameUserJoin.java @@ -12,6 +12,8 @@ public class GameUserJoin implements Serializable { private String avatarUrl; + private String phone; + private Long recordId; private Integer times; @@ -64,6 +66,14 @@ public class GameUserJoin implements Serializable { this.avatarUrl = avatarUrl == null ? null : avatarUrl.trim(); } + public String getPhone() { + return phone; + } + + public void setPhone(String phone) { + this.phone = phone == null ? null : phone.trim(); + } + public Long getRecordId() { return recordId; } @@ -146,6 +156,7 @@ public class GameUserJoin implements Serializable { sb.append(", userId=").append(userId); sb.append(", nickname=").append(nickname); sb.append(", avatarUrl=").append(avatarUrl); + sb.append(", phone=").append(phone); sb.append(", recordId=").append(recordId); sb.append(", times=").append(times); sb.append(", score=").append(score); diff --git a/game/src/main/java/com/ccsens/game/bean/po/GameUserJoinExample.java b/game/src/main/java/com/ccsens/game/bean/po/GameUserJoinExample.java index f5fb6150..5d0d431b 100644 --- a/game/src/main/java/com/ccsens/game/bean/po/GameUserJoinExample.java +++ b/game/src/main/java/com/ccsens/game/bean/po/GameUserJoinExample.java @@ -365,6 +365,76 @@ public class GameUserJoinExample { return (Criteria) this; } + public Criteria andPhoneIsNull() { + addCriterion("phone is null"); + return (Criteria) this; + } + + public Criteria andPhoneIsNotNull() { + addCriterion("phone is not null"); + return (Criteria) this; + } + + public Criteria andPhoneEqualTo(String value) { + addCriterion("phone =", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneNotEqualTo(String value) { + addCriterion("phone <>", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneGreaterThan(String value) { + addCriterion("phone >", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneGreaterThanOrEqualTo(String value) { + addCriterion("phone >=", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneLessThan(String value) { + addCriterion("phone <", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneLessThanOrEqualTo(String value) { + addCriterion("phone <=", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneLike(String value) { + addCriterion("phone like", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneNotLike(String value) { + addCriterion("phone not like", value, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneIn(List values) { + addCriterion("phone in", values, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneNotIn(List values) { + addCriterion("phone not in", values, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneBetween(String value1, String value2) { + addCriterion("phone between", value1, value2, "phone"); + return (Criteria) this; + } + + public Criteria andPhoneNotBetween(String value1, String value2) { + addCriterion("phone not between", value1, value2, "phone"); + return (Criteria) this; + } + public Criteria andRecordIdIsNull() { addCriterion("record_id is null"); return (Criteria) this; diff --git a/game/src/main/java/com/ccsens/game/bean/vo/ClientVo.java b/game/src/main/java/com/ccsens/game/bean/vo/ClientVo.java index 77f103b3..b5cc791f 100644 --- a/game/src/main/java/com/ccsens/game/bean/vo/ClientVo.java +++ b/game/src/main/java/com/ccsens/game/bean/vo/ClientVo.java @@ -19,6 +19,10 @@ public class ClientVo { private Byte gameStatus; @ApiModelProperty("游戏总人数") private Long countMembers; + + @ApiModelProperty("分组的信息") + private Group group; + @ApiModelProperty("未开始") private PendingData pendingData; @ApiModelProperty("准备中") @@ -67,6 +71,8 @@ public class ClientVo { private Integer sort; @ApiModelProperty("超过百分之多少人") private Integer over; + @ApiModelProperty("是否是胜利组") + private Boolean isWin; } @Data @ApiModel("RankingAll") @@ -103,5 +109,14 @@ public class ClientVo { private Long userId; private int rank; } + + @Data + @ApiModel + public static class Group{ + @ApiModelProperty("分组id") + private Long groupId ; + @ApiModelProperty("分组名称") + private String groupName ; + } } diff --git a/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java b/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java index 557e34ad..e1edfd82 100644 --- a/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java +++ b/game/src/main/java/com/ccsens/game/bean/vo/ScreenVo.java @@ -49,7 +49,7 @@ public class ScreenVo { } @Data - @ApiModel("准备中") + @ApiModel public static class Group{ @ApiModelProperty("分组id") private Long groupId ; @@ -137,6 +137,8 @@ public class ScreenVo { public static class StartGame{ @ApiModelProperty("本地开始时间") private Long startLocalTime; + @ApiModelProperty("本地结束时间") + private Long endLocalTime; } @Data diff --git a/game/src/main/java/com/ccsens/game/service/ClientService.java b/game/src/main/java/com/ccsens/game/service/ClientService.java index f85413ff..cd09c26d 100644 --- a/game/src/main/java/com/ccsens/game/service/ClientService.java +++ b/game/src/main/java/com/ccsens/game/service/ClientService.java @@ -3,16 +3,15 @@ package com.ccsens.game.service; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.ccsens.cloudutil.bean.tall.vo.MemberVo; import com.ccsens.cloudutil.feign.TallFeignClient; import com.ccsens.game.bean.dto.ClientDto; import com.ccsens.game.bean.dto.message.*; -import com.ccsens.game.bean.po.GameRecord; -import com.ccsens.game.bean.po.GameUserJoin; -import com.ccsens.game.bean.po.GameUserJoinExample; +import com.ccsens.game.bean.po.*; import com.ccsens.game.bean.vo.ClientVo; -import com.ccsens.game.persist.dao.GameUserJoinDao; +import com.ccsens.game.persist.dao.*; import com.ccsens.game.util.GameConstant; import com.ccsens.util.CodeEnum; import com.ccsens.util.JsonResponse; @@ -37,10 +36,17 @@ import java.util.*; @Service @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class ClientService implements IClientService { - + @Autowired + private GameUserPayDao gameUserPayDao; + @Autowired + private GameTypeDao gameTypeDao; @Autowired private GameUserJoinDao gameUserJoinDao; @Autowired + private GameGroupDao gameGroupDao; + @Autowired + private GameUserJoinGroupDao userJoinGroupDao; + @Autowired private Snowflake snowflake; @Autowired private RedisUtil redisUtil; @@ -58,6 +64,11 @@ public class ClientService implements IClientService { log.info("{}时间差:{}", userId, timeMore); //获取游戏信息 GameRecord gameRecord = screenService.getGameRecord(join.getUrlId()); + //获取游戏的购买记录和类型 + GameUserPay gameUserPay = gameUserPayDao.selectByPrimaryKey(gameRecord.getUserPayId()); + GameType gameType = gameTypeDao.selectByPrimaryKey(gameUserPay.getGameTypeId()); + Boolean isGroup = gameType.getIsGroup() == 1; + log.info("游戏信息:{}", gameRecord); if (gameRecord == null) { @@ -72,7 +83,7 @@ public class ClientService implements IClientService { // 已加入 if (CollectionUtil.isNotEmpty(gameUserJoins)) { //查询结果,返回对应的信息 - return joinResult(gameUserJoins.get(0), gameRecord); + return joinResult(gameUserJoins.get(0), gameRecord,isGroup,join.getGroupId()); } //游戏已结束 @@ -86,7 +97,6 @@ public class ClientService implements IClientService { joinVo.setCompletedData(completedData); return joinVo; } - //准备中 boolean prepare = gameRecord.getGameStatus().byteValue() == GameConstant.GAME_PREPARATION; //进行中 @@ -103,22 +113,83 @@ public class ClientService implements IClientService { userJoin.setLocalEndTime(prepare || processing ? gameRecord.getEndTime() + timeMore : 0); // 获取头像和用户名 JsonResponse memberInfo = tallFeignClient.getMemberByUserId(userId, join.getProjectId()); + if(memberInfo.getData() == null){ + memberInfo = tallFeignClient.getUserByUserId(userId); + } if (memberInfo.getCode().intValue() == CodeEnum.SUCCESS.getCode() && memberInfo.getData() != null) { userJoin.setAvatarUrl(memberInfo.getData().getAvatarUrl()); userJoin.setNickname(memberInfo.getData().getNickname()); + + if(StrUtil.isNotEmpty(memberInfo.getData().getNickname())){ + userJoin.setNickname(memberInfo.getData().getNickname()); + }else { + if(StrUtil.isNotEmpty(memberInfo.getData().getPhone())){ + String phone = memberInfo.getData().getPhone(); + String phoneNumber = phone.substring(0, 3) + "****" + phone.substring(7, phone.length()); + userJoin.setNickname(phoneNumber); + }else { + userJoin.setNickname(""); + } + } + + if(StrUtil.isNotEmpty(memberInfo.getData().getAvatarUrl())){ + userJoin.setAvatarUrl(memberInfo.getData().getAvatarUrl()); + }else { + userJoin.setAvatarUrl(""); + } + }else{ + userJoin.setAvatarUrl(""); + userJoin.setNickname(""); } gameUserJoinDao.insertSelective(userJoin); + //如果是分组游戏,则添加用户与组的关联表 + if(isGroup){ + if(ObjectUtil.isNotNull(join.getGroupId())){ + log.info("分组信息为空"); + throw new BaseException(CodeEnum.PARAM_ERROR); + } + GameUserJoinGroup userJoinGroup = new GameUserJoinGroup(); + userJoinGroup.setId(snowflake.nextId()); + userJoinGroup.setUserJoinId(userJoin.getId()); + userJoinGroup.setGameGroupId(join.getGroupId()); + userJoinGroupDao.insertSelective(userJoinGroup); + + } + // 3.更新redis(sort set key:分数 value:头像,姓名) if (prepare || processing) { ClientDto.RedisUser user = ClientDto.RedisUser.getInstance(userJoin); redisUtil.zsSet(GameConstant.generateGameKey(gameRecord.getId()), JSON.toJSONString(user), 0, GameConstant.REDIS_TIME); } //5.返回状态 - return joinResult(userJoin, gameRecord); + return joinResult(userJoin, gameRecord,isGroup,join.getGroupId()); } - private ClientVo.Join joinResult(GameUserJoin join, GameRecord gameRecord){ +// private ClientVo.Join joinResultWithGroup(ClientDto.Join join, Long userId, GameRecord gameRecord ){ +// //根据游戏ID和用户ID查询用户是否加入 +// GameUserJoinExample example = new GameUserJoinExample(); +// example.createCriteria().andRecordIdEqualTo(join.getUrlId()).andUserIdEqualTo(userId); +// List gameUserJoins = gameUserJoinDao.selectByExample(example); +// // 已加入 +// if (CollectionUtil.isNotEmpty(gameUserJoins)) { +// //查询结果,返回对应的信息 +// return joinResult(gameUserJoins.get(0), gameRecord); +// } +// +// } + + private ClientVo.Join joinResult(GameUserJoin join, GameRecord gameRecord,Boolean isGroup,Long groupId){ ClientVo.Join joinVo = initStatusAndCount(gameRecord); + if(isGroup && ObjectUtil.isNotNull(groupId)){ + //获取分组的信息 + GameGroup gameGroup = gameGroupDao.selectByPrimaryKey(groupId); + ClientVo.Group group = new ClientVo.Group(); + group.setGroupId(gameGroup.getId()); + group.setGroupName(gameGroup.getName()); + + joinVo.setGroup(group); + } + switch (gameRecord.getGameStatus()) { case GameConstant.GAME_PENDING : // 未开始 diff --git a/game/src/main/java/com/ccsens/game/service/ScreenService.java b/game/src/main/java/com/ccsens/game/service/ScreenService.java index e217a260..a3c73ec1 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -733,6 +733,7 @@ public class ScreenService implements IScreenService{ //返回大屏开始时间 ScreenVo.StartGame startGame = new ScreenVo.StartGame(); startGame.setStartLocalTime(gameRecord.getStartTime() + moreTime); + startGame.setEndLocalTime(gameRecord.getEndTime() + moreTime); // 查询参与游戏的用户,添加到redis GameUserJoinExample joinExample = new GameUserJoinExample(); diff --git a/game/src/main/resources/application.yml b/game/src/main/resources/application.yml index 5c2cd5c4..5889ff7f 100644 --- a/game/src/main/resources/application.yml +++ b/game/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: dev - include: common, util-dev \ No newline at end of file + active: test + include: common, util-test \ No newline at end of file diff --git a/game/src/main/resources/mapper_dao/GameUserJoinDao.xml b/game/src/main/resources/mapper_dao/GameUserJoinDao.xml index 462ffb2a..470e2f27 100644 --- a/game/src/main/resources/mapper_dao/GameUserJoinDao.xml +++ b/game/src/main/resources/mapper_dao/GameUserJoinDao.xml @@ -58,7 +58,11 @@ WHERE c.user_id= #{userId,jdbcType=BIGINT} limit 1 diff --git a/game/src/main/resources/mapper_raw/GameUserJoinMapper.xml b/game/src/main/resources/mapper_raw/GameUserJoinMapper.xml index 8b46c85e..86876691 100644 --- a/game/src/main/resources/mapper_raw/GameUserJoinMapper.xml +++ b/game/src/main/resources/mapper_raw/GameUserJoinMapper.xml @@ -6,6 +6,7 @@ + @@ -75,8 +76,8 @@ - id, user_id, nickname, avatar_url, record_id, times, score, time_difference, local_start_time, - local_end_time, created_at, updated_at, rec_status + id, user_id, nickname, avatar_url, phone, record_id, times, score, time_difference, + local_start_time, local_end_time, created_at, updated_at, rec_status