From 407aa6cf3e2ac3ab3f888fe54206c4accc888a6d Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Thu, 20 Aug 2020 21:24:15 +0800 Subject: [PATCH] 0820_3.0 --- .../com/ccsens/game/bean/vo/ScreenVo.java | 2 + .../ccsens/game/service/ClientService.java | 45 +++++++++++++++---- .../ccsens/game/service/ScreenService.java | 39 +++++++++++++--- .../com/ccsens/game/util/GameConstant.java | 4 +- game/src/main/resources/application-test.yml | 2 +- .../com/ccsens/tall/config/SpringConfig.java | 1 + .../ccsens/tall/service/ProMemberService.java | 36 +++++++-------- .../com/ccsens/tall/web/UserController.java | 2 +- .../main/java/com/ccsens/util/PropUtil.java | 2 +- .../main/java/com/ccsens/util/StringUtil.java | 2 +- 10 files changed, 97 insertions(+), 38 deletions(-) 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 1fcd26d4..a602200f 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 @@ -160,6 +160,8 @@ public class ScreenVo { private String headPortraitUrl; @ApiModelProperty("该组的总分/均分") private Integer score; + @ApiModelProperty("该组的总次数/均次数") + private Integer times; @ApiModelProperty("该组总人数") private int totalMembers; @ApiModelProperty("code") 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 07aa70e4..83d9037b 100644 --- a/game/src/main/java/com/ccsens/game/service/ClientService.java +++ b/game/src/main/java/com/ccsens/game/service/ClientService.java @@ -8,14 +8,16 @@ 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.dto.message.GameMessageCountOut; import com.ccsens.game.bean.po.*; import com.ccsens.game.bean.vo.ClientVo; +import com.ccsens.game.bean.vo.ScreenVo; import com.ccsens.game.persist.dao.*; import com.ccsens.game.util.GameConstant; import com.ccsens.util.CodeEnum; import com.ccsens.util.JsonResponse; import com.ccsens.util.RedisUtil; +import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.exception.BaseException; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @@ -24,10 +26,12 @@ import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; -import com.ccsens.util.bean.dto.QueryDto; import javax.annotation.Resource; -import java.util.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; /** * @description: 游戏客户端接口 @@ -139,11 +143,13 @@ public class ClientService implements IClientService { userJoin.setLocalStartTime(prepare || processing ? gameRecord.getStartTime() + timeMore : 0); userJoin.setLocalEndTime(prepare || processing ? gameRecord.getEndTime() + timeMore : 0); // 获取头像和用户名 - JsonResponse memberInfo = tallFeignClient.getMemberInfoByUserIdAndTaskId(userId, gameRecord.getTaskId()); - if (memberInfo.getData() == null) { - memberInfo = tallFeignClient.getUserByUserId(userId); - } - if (memberInfo.getCode().intValue() == CodeEnum.SUCCESS.getCode().intValue() && memberInfo.getData() != null) { +// JsonResponse memberInfo = tallFeignClient.getMemberInfoByUserIdAndTaskId(userId, gameRecord.getTaskId()); +// if (memberInfo.getData() == null) { +// memberInfo = tallFeignClient.getUserByUserId(userId); +// } + JsonResponse memberInfo = tallFeignClient.getUserByUserId(userId); + + if (memberInfo != null && memberInfo.getCode().intValue() == CodeEnum.SUCCESS.getCode().intValue() && memberInfo.getData() != null) { userJoin.setAvatarUrl(memberInfo.getData().getAvatarUrl()); userJoin.setNickname(memberInfo.getData().getNickname()); @@ -179,6 +185,7 @@ public class ClientService implements IClientService { // 缓存小组人数 String key = join.getGroupId() + GameConstant.GAME_GROUP_NUM; Object o = redisUtil.get(key); + redisUtil.set(key, o == null ? 1 : (int)o + 1, GameConstant.REDIS_TIME_TWENTY); } // 3.更新redis(sort set key:分数 value:头像,姓名) @@ -294,6 +301,28 @@ public class ClientService implements IClientService { int otherGroupScore = 0; //查找所有队伍 + String groupKey = recordId + "_group"; + Set> typedTuples = redisUtil.zsRevGetWithScore(groupKey, 0, -1); + if(CollectionUtil.isNotEmpty(typedTuples)){ + List vos = new ArrayList<>(); + AtomicInteger index = new AtomicInteger(0); + typedTuples.forEach(type -> { + index.set(index.get() + 1); + GameGroup gameGroup = JSON.parseObject((String) type.getValue(), GameGroup.class); + if(gameGroup.getId().longValue() == groupId.longValue()){ + groupScore.setGroupScore(type.getScore().intValue()); + groupScore.setGroupTimes(type.getScore().intValue() / 100); + groupScore.setGroupSort(index.get()); + + } + }); + if(groupScore.getGroupSort() != null) { + return groupScore; + } + } + + + GameGroupExample gameGroupExample = new GameGroupExample(); gameGroupExample.createCriteria().andRecordIdEqualTo(recordId); List gameGroupList = gameGroupDao.selectByExample(gameGroupExample); 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 44e9975d..3ffd7ab2 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -227,8 +227,17 @@ public class ScreenService implements IScreenService { //比赛时长 XSSFRow durationRow = sheet.getRow(2); if(ObjectUtil.isNotNull(durationRow)){ - int duration = Integer.parseInt(ExcelUtil.getCellValue(durationRow.getCell(1))); - gameRecord.setDuration(duration); + String durationStr = ExcelUtil.getCellValue(durationRow.getCell(1)); + if(StrUtil.isNotEmpty(durationStr)){ + boolean match = StringUtil.isMatch(durationStr, StringUtil.NUMBER_DOUBLE); + if(match){ + int duration = (int) Double.parseDouble(durationStr) * 60; + gameRecord.setDuration(duration); + }else { + throw new BaseException(CodeEnum.NOT_CONFIG_OR_ERR); + } + } + } //人数上限 XSSFRow memberLimitRow = sheet.getRow(3); @@ -600,11 +609,29 @@ public class ScreenService implements IScreenService { ScreenVo.GroupVo groupVo = new ScreenVo.GroupVo(); groupVo.setGroupId(gameGroup.getId()); groupVo.setGroupName(gameGroup.getName()); - groupVo.setScore(score); - groupVo.setTotalMembers((int)redisUtil.get(gameGroup.getId() + GameConstant.GAME_GROUP_NUM)); + + Object o = redisUtil.get(gameGroup.getId() + GameConstant.GAME_GROUP_NUM); + if (ObjectUtil.isNotNull(o)) { + o = 0; + } + groupVo.setTotalMembers((int)o); + + if(gameRecord.getRankRule() == GameConstant.RANK_RULE_AVA){ + groupVo.setScore((int)o == 0 ? 0 : score / (int)o); + groupVo.setTimes(groupVo.getScore() /100); + + }else { + groupVo.setScore(score); + groupVo.setTimes(score / 100); + } + log.info("分数{},人数{}",score,o); +// groupVo.setTotalMembers((int)redisUtil.get(gameGroup.getId() + GameConstant.GAME_GROUP_NUM)); groupVo.setHeadPortraitUrl(gameGroup.getHeadPortraitUrl()); vos.add(groupVo); }); + if(gameRecord.getRankRule() == GameConstant.RANK_RULE_AVA){ + CollectionUtil.sort(vos, Comparator.comparingInt(ScreenVo.GroupVo::getScore)); + } return vos; } List vos = gameGroupDao.queryGroups(gameRecord.getId()); @@ -879,8 +906,8 @@ public class ScreenService implements IScreenService { String fileName = "/gameQrCode/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".png"; String path = WebConstant.UPLOAD_PATH_BASE + fileName; WxXcxUtil.getWxCode(WebConstant.QRCODE_GAME - , "id=" + gameRecord.getId() + "&type=" + gameType.getCode(), null, path,gameType.getCode()); - gameRecord.setQrCodeUrl(PropUtil.qrCode + fileName); + , "id=" + gameRecordNew.getId() + "&type=" + gameType.getCode(), null, path,gameType.getCode()); + gameRecordNew.setQrCodeUrl(PropUtil.qrCode + fileName); log.info("调用微信生成二维码"); } else { log.info("测试环境,不调用生成二维码"); diff --git a/game/src/main/java/com/ccsens/game/util/GameConstant.java b/game/src/main/java/com/ccsens/game/util/GameConstant.java index a31b956d..32fdea77 100644 --- a/game/src/main/java/com/ccsens/game/util/GameConstant.java +++ b/game/src/main/java/com/ccsens/game/util/GameConstant.java @@ -50,9 +50,9 @@ public class GameConstant { /**按总分排名*/ public static final String GAME_RANK_TOTAL = "按总分排名"; - /**排序规则:总分*/ + /**排序规则:平均分*/ public static final byte RANK_RULE_AVA = 1; - /**排序规则:均分*/ + /**排序规则:总分*/ public static final byte RANK_RULE_TOTAL = 0; /**游戏:分组*/ public static final byte GAME_GROUP = 1; diff --git a/game/src/main/resources/application-test.yml b/game/src/main/resources/application-test.yml index 6a261fde..4cbac764 100644 --- a/game/src/main/resources/application-test.yml +++ b/game/src/main/resources/application-test.yml @@ -34,4 +34,4 @@ gatewayUrl: https://test.tall.wiki/gateway/ notGatewayUrl: https://test.tall.wiki/ file: qrCode: https://test.tall.wiki/gateway/tall/v1.0/uploads/ - openWX: 1 \ No newline at end of file + openWX: 0 \ No newline at end of file diff --git a/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java b/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java index 097b2ea3..834da481 100644 --- a/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java +++ b/tall/src/main/java/com/ccsens/tall/config/SpringConfig.java @@ -147,6 +147,7 @@ public class SpringConfig implements WebMvcConfigurer { .excludePathPatterns("/users/userId") .excludePathPatterns("/users/mergeUserId") .excludePathPatterns("/users/code") + .excludePathPatterns("/users/userInfo") .addPathPatterns("/plugins/**") .excludePathPatterns("/plugins/sign") .excludePathPatterns("/plugins/fuzzy") diff --git a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java index 4c4f00da..ea297095 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProMemberService.java @@ -193,24 +193,24 @@ public class ProMemberService implements IProMemberService { memberInfo.setUserId(user.getId()); memberInfo.setNickname(user.getNickname()); memberInfo.setAvatarUrl(user.getAvatarUrl()); - //查询该用户的手机号 - SysAuthExample authExample = new SysAuthExample(); - authExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Phone.value) - .andUserIdEqualTo(user.getId()); - List authList = authDao.selectByExample(authExample); - if(CollectionUtil.isNotEmpty(authList)){ - memberInfo.setPhone(authList.get(0).getIdentifier()); - } - if(ObjectUtil.isNull(user.getNickname())){ - //查找账号名 - SysAuthExample sysAuthExample = new SysAuthExample(); - sysAuthExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value) - .andUserIdEqualTo(user.getId()); - List accountAuth = authDao.selectByExample(sysAuthExample); - if(CollectionUtil.isNotEmpty(accountAuth)){ - memberInfo.setNickname(accountAuth.get(0).getIdentifier()); - } - } +// //查询该用户的手机号 +// SysAuthExample authExample = new SysAuthExample(); +// authExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Phone.value) +// .andUserIdEqualTo(user.getId()); +// List authList = authDao.selectByExample(authExample); +// if(CollectionUtil.isNotEmpty(authList)){ +// memberInfo.setPhone(authList.get(0).getIdentifier()); +// } +// if(ObjectUtil.isNull(user.getNickname())){ +// //查找账号名 +// SysAuthExample sysAuthExample = new SysAuthExample(); +// sysAuthExample.createCriteria().andIdentifyTypeEqualTo((byte) WebConstant.IDENTIFY_TYPE.Account.value) +// .andUserIdEqualTo(user.getId()); +// List accountAuth = authDao.selectByExample(sysAuthExample); +// if(CollectionUtil.isNotEmpty(accountAuth)){ +// memberInfo.setNickname(accountAuth.get(0).getIdentifier()); +// } +// } } return memberInfo; } diff --git a/tall/src/main/java/com/ccsens/tall/web/UserController.java b/tall/src/main/java/com/ccsens/tall/web/UserController.java index e882e8de..15f342be 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserController.java @@ -449,7 +449,7 @@ public class UserController { * 查询user的信息 */ @RequestMapping(value = "userInfo", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) - public JsonResponse getUserInfoByUserId( Long userId) throws Exception { + public JsonResponse getUserInfoByUserId(Long userId) throws Exception { MemberVo.MemberInfo memberInfo = proMemberService.getUserInfoByUserId(userId); return JsonResponse.newInstance().ok(memberInfo); diff --git a/util/src/main/java/com/ccsens/util/PropUtil.java b/util/src/main/java/com/ccsens/util/PropUtil.java index 5f26e9a8..3d02c9c2 100644 --- a/util/src/main/java/com/ccsens/util/PropUtil.java +++ b/util/src/main/java/com/ccsens/util/PropUtil.java @@ -66,7 +66,7 @@ public class PropUtil { PropUtil.smsCode = smsCode; } @Value("${file.openWX:}") - public static void setOpenWx(String openWx) { + public void setOpenWx(String openWx) { PropUtil.openWx = openWx; } } diff --git a/util/src/main/java/com/ccsens/util/StringUtil.java b/util/src/main/java/com/ccsens/util/StringUtil.java index 40f5a754..84d83767 100644 --- a/util/src/main/java/com/ccsens/util/StringUtil.java +++ b/util/src/main/java/com/ccsens/util/StringUtil.java @@ -1,7 +1,6 @@ package com.ccsens.util; import cn.hutool.core.util.StrUtil; -import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.HashMap; @@ -44,6 +43,7 @@ public class StringUtil { public final static String NUMBER = "\\d+"; private static final String NUMBER_FORMAT = "^[-\\+]?\\d+$"; + public static final String NUMBER_DOUBLE = "([1-9]+[0-9]*|0)(\\.[\\d]+)?"; private static final String SEX_FORMAT = "^[01]$"; /**