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 b716e2cc..cec82d95 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/feign/TallFeignClient.java @@ -29,7 +29,7 @@ import java.util.Map; */ @FeignClient(name = "tall", path = "v1.0", fallbackFactory = TallFeignClientFallBack.class) -public interface TallFeignClient { +public interface TallFeignClient { /** * 获取 * @param map diff --git a/game/src/main/java/com/ccsens/game/api/ClientController.java b/game/src/main/java/com/ccsens/game/api/ClientController.java index 0c582349..6feb5a25 100644 --- a/game/src/main/java/com/ccsens/game/api/ClientController.java +++ b/game/src/main/java/com/ccsens/game/api/ClientController.java @@ -4,6 +4,7 @@ import com.ccsens.cloudutil.annotation.MustLogin; import com.ccsens.game.bean.dto.ClientDto; import com.ccsens.game.bean.dto.ScreenDto; import com.ccsens.game.bean.vo.ClientVo; +import com.ccsens.game.bean.vo.ScreenVo; import com.ccsens.game.service.IClientService; import com.ccsens.game.service.IScreenService; import com.ccsens.util.JsonResponse; @@ -66,7 +67,7 @@ public class ClientController { }) @RequestMapping(value = "activityPrize", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) public JsonResponse> getGameActivityPrize(@ApiParam @RequestParam Long recordId) throws Exception { - log.info("获取游戏规则:{}",recordId); + log.info("查询游戏奖品:{}",recordId); List gameActivityRule = screenService.getGameActivityPrize(screenService.getGameTypeId(recordId)); return JsonResponse.newInstance().ok(gameActivityRule); } @@ -76,9 +77,18 @@ public class ClientController { }) @RequestMapping(value = "prizeInstructions", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) public JsonResponse> getGamePrizeInstructions(@ApiParam @RequestParam Long recordId) throws Exception { - log.info("获取游戏规则:{}",recordId); + log.info("查询奖券使用说明:{}",recordId); List gameActivityRule = screenService.getGamePrizeInstructions(screenService.getGameTypeId(recordId)); return JsonResponse.newInstance().ok(gameActivityRule); } + @ApiOperation(value = "根据游戏id获取分组信息", notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "group", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> getGroupByRecordId(@ApiParam @RequestParam Long recordId) throws Exception { + log.info("根据游戏id获取分组信息:{}",recordId); + List groupList = screenService.getGroupByRecordId(recordId); + return JsonResponse.newInstance().ok(groupList); + } } 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 13bd0786..ac0d4440 100644 --- a/game/src/main/java/com/ccsens/game/api/ScreenController.java +++ b/game/src/main/java/com/ccsens/game/api/ScreenController.java @@ -71,7 +71,7 @@ public class ScreenController { }) @RequestMapping(value = "startAgain", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse startAgain(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { - log.info("开始游戏:{}",params); + log.info("再玩一次:{}",params); String url = screenService.startAgain(params); return JsonResponse.newInstance().ok(url); } diff --git a/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java b/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java index 9c174fcc..9e976f8b 100644 --- a/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java +++ b/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketHandler.java @@ -76,6 +76,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler memberInfo = tallFeignClient.getMemberByUserId(userId, join.getProjectId()); - if(memberInfo.getData() == null){ + 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())){ + if (StrUtil.isNotEmpty(memberInfo.getData().getNickname())) { userJoin.setNickname(memberInfo.getData().getNickname()); - }else { - if(StrUtil.isNotEmpty(memberInfo.getData().getPhone())){ + } 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 { + } else { userJoin.setNickname(""); } } - if(StrUtil.isNotEmpty(memberInfo.getData().getAvatarUrl())){ + if (StrUtil.isNotEmpty(memberInfo.getData().getAvatarUrl())) { userJoin.setAvatarUrl(memberInfo.getData().getAvatarUrl()); - }else { + } else { userJoin.setAvatarUrl(""); } - }else{ + } else { userJoin.setAvatarUrl(""); userJoin.setNickname(""); } gameUserJoinDao.insertSelective(userJoin); - //如果是分组游戏,则添加用户与组的关联表 - if(isGroup){ - if(ObjectUtil.isNotNull(join.getGroupId())){ + //如果是分组游戏,则添加用户与组的关联表并添加redis + if (isGroup) { + if (ObjectUtil.isNull(join.getGroupId())) { log.info("分组信息为空"); throw new BaseException(CodeEnum.PARAM_ERROR); } @@ -153,16 +153,15 @@ public class ClientService implements IClientService { 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,isGroup,join.getGroupId()); + + //5.返回状态 + return joinResult(userJoin, gameRecord, isGroup, join.getGroupId()); } // private ClientVo.Join joinResultWithGroup(ClientDto.Join join, Long userId, GameRecord gameRecord ){ @@ -178,11 +177,14 @@ public class ClientService implements IClientService { // // } - private ClientVo.Join joinResult(GameUserJoin join, GameRecord gameRecord,Boolean isGroup,Long groupId){ + private ClientVo.Join joinResult(GameUserJoin join, GameRecord gameRecord, Boolean isGroup, Long groupId) { ClientVo.Join joinVo = initStatusAndCount(gameRecord); - if(isGroup && ObjectUtil.isNotNull(groupId)){ + if (isGroup && ObjectUtil.isNotNull(groupId)) { //获取分组的信息 GameGroup gameGroup = gameGroupDao.selectByPrimaryKey(groupId); + if (ObjectUtil.isNull(gameGroup)) { + throw new BaseException(CodeEnum.PARAM_ERROR); + } ClientVo.Group group = new ClientVo.Group(); group.setGroupId(gameGroup.getId()); group.setGroupName(gameGroup.getName()); @@ -191,49 +193,52 @@ public class ClientService implements IClientService { } switch (gameRecord.getGameStatus()) { - case GameConstant.GAME_PENDING : + case GameConstant.GAME_PENDING: // 未开始 joinVo.setPendingData(new ClientVo.PendingData()); break; - case GameConstant.GAME_PREPARATION : + case GameConstant.GAME_PREPARATION: // 准备中 ClientVo.PreparingData preparingData = new ClientVo.PreparingData(); preparingData.setStartLocalTime(join.getLocalStartTime() + join.getTimeDifference()); preparingData.setEndLocalTime(join.getLocalEndTime() + join.getTimeDifference()); joinVo.setPreparingData(preparingData); break; - case GameConstant.GAME_PROCESSING : + case GameConstant.GAME_PROCESSING: // 进行中 ClientVo.ProcessingData processingData = new ClientVo.ProcessingData(); processingData.setStartLocalTime(join.getLocalStartTime()); processingData.setEndLocalTime(join.getLocalEndTime()); joinVo.setProcessingData(processingData); break; - case GameConstant.GAME_COMPLETED : + case GameConstant.GAME_COMPLETED: //已结束 ClientVo.CompletedData completedData = new ClientVo.CompletedData(); completedData.setTimes(join.getTimes()); completedData.setScore(join.getScore()); Integer sort = gameUserJoinDao.getRanking(join.getUserId(), gameRecord.getId()); - if(ObjectUtil.isNotNull(sort)){ + if (ObjectUtil.isNotNull(sort)) { completedData.setSort(sort); - }else { + } else { completedData.setSort(1); } int low = gameUserJoinDao.overNum(gameRecord.getId(), join.getScore()); GameUserJoinExample joinExample = new GameUserJoinExample(); joinExample.createCriteria().andRecordIdEqualTo(gameRecord.getId()); long count = gameUserJoinDao.countByExample(joinExample); - completedData.setOver((int) (low * 100/count)); + completedData.setOver((int) (low * 100 / count)); joinVo.setCompletedData(completedData); break; - default: break; + default: + break; } log.info("参加游戏:{}", joinVo); return joinVo; } + /** * 设置状态和总人数 + * * @param gameRecord */ private ClientVo.Join initStatusAndCount(GameRecord gameRecord) { @@ -289,8 +294,10 @@ public class ClientService implements IClientService { // // return rankingAll; // } + /** * 查询总排名表 + * * @param params * @return */ @@ -306,7 +313,7 @@ public class ClientService implements IClientService { GameUserJoinExample userJoinExample = new GameUserJoinExample(); userJoinExample.createCriteria().andRecordIdEqualTo(gatRanking.getRecordId()); List userJoinList = gameUserJoinDao.selectByExample(userJoinExample); - totalMembers = userJoinList == null ? 0 : (long)userJoinList.size(); + totalMembers = userJoinList == null ? 0 : (long) userJoinList.size(); } rankingAll.setTotalMembers(totalMembers.intValue()); @@ -318,13 +325,13 @@ public class ClientService implements IClientService { if (CollectionUtil.isNotEmpty(typedTuples)) { List finalMemberInfo = memberInfo; typedTuples.forEach(type -> { - ClientDto.RedisUser user = JSON.parseObject((String)type.getValue(), ClientDto.RedisUser.class); + ClientDto.RedisUser user = JSON.parseObject((String) type.getValue(), ClientDto.RedisUser.class); ClientVo.MemberInfo info = new ClientVo.MemberInfo(); info.setId(user.getId()); info.setHeadImgUrl(user.getAvatarUrl()); info.setNickname(user.getNickname()); info.setScore(type.getScore().intValue()); - info.setTimes(type.getScore().intValue()/100); + info.setTimes(type.getScore().intValue() / 100); Long sort = redisUtil.zsReverseRank(userKey, type.getValue()); info.setSort(sort == null ? 1 : sort.intValue()); finalMemberInfo.add(info); @@ -344,20 +351,21 @@ public class ClientService implements IClientService { /** * 滑动时添加记录 + * * @param userId * @param recordId * @return */ @Override - public GameMessageCountOut clientAddTimes(String userId,String recordId) { + public GameMessageCountOut clientAddTimes(String userId, String recordId) { GameMessageCountOut gameMessageCountOut = new GameMessageCountOut(); log.info("userId:{}", userId); - if(ObjectUtil.isNotNull(userId)){ + if (ObjectUtil.isNotNull(userId)) { GameUserJoinExample gameUserJoinExample = new GameUserJoinExample(); gameUserJoinExample.createCriteria().andUserIdEqualTo(Long.valueOf(userId)).andRecordIdEqualTo(Long.valueOf(recordId)); List userJoinList = gameUserJoinDao.selectByExample(gameUserJoinExample); log.info("游戏对象:{}", userJoinList); - if(CollectionUtil.isNotEmpty(userJoinList)){ + if (CollectionUtil.isNotEmpty(userJoinList)) { GameUserJoin userJoin = userJoinList.get(0); userJoin.setTimes(userJoin.getTimes() + 1); userJoin.setScore(userJoin.getScore() + 100); @@ -365,9 +373,9 @@ public class ClientService implements IClientService { gameUserJoinDao.updateByPrimaryKeySelective(userJoin); //更新redis ClientDto.RedisUser user = ClientDto.RedisUser.getInstance(userJoin); - log.info("游戏id:{}, 对象:{}, 分数:{}", recordId, user,userJoin.getScore()); + log.info("游戏id:{}, 对象:{}, 分数:{}", recordId, user, userJoin.getScore()); redisUtil.zsSet(GameConstant.generateGameKey(Long.parseLong(recordId)), JSON.toJSONString(user), userJoin.getScore(), GameConstant.REDIS_TIME); - gameMessageCountOut = new GameMessageCountOut(userJoin.getTimes(),userJoin.getScore()); + gameMessageCountOut = new GameMessageCountOut(userJoin.getTimes(), userJoin.getScore()); } } return gameMessageCountOut; diff --git a/game/src/main/java/com/ccsens/game/service/IScreenService.java b/game/src/main/java/com/ccsens/game/service/IScreenService.java index 5d483045..e71883af 100644 --- a/game/src/main/java/com/ccsens/game/service/IScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/IScreenService.java @@ -37,4 +37,6 @@ public interface IScreenService { List getGamePrizeInstructions(Long gameTypeId); Long getGameTypeId(Long recordId); + + List getGroupByRecordId(Long recordId); } 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 a3c73ec1..ccdb3ebf 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -122,10 +122,12 @@ public class ScreenService implements IScreenService{ gameGroupBlue.setId(snowflake.nextId()); gameGroupBlue.setRecordId(gameRecord.getId()); gameGroupBlue.setName("蓝队"); + gameGroupDao.insertSelective(gameGroupBlue); GameGroup gameGroupRed = new GameGroup(); gameGroupRed.setId(snowflake.nextId()); gameGroupRed.setRecordId(gameRecord.getId()); gameGroupRed.setName("红队"); + gameGroupDao.insertSelective(gameGroupRed); } //5、查询该游戏的规则 @@ -336,13 +338,16 @@ public class ScreenService implements IScreenService{ List gameGroupList = gameGroupDao.selectByExample(gameGroupExample); if(CollectionUtil.isNotEmpty(gameGroupList)){ for(GameGroup gameGroup : gameGroupList){ - Map group = getGroupTotalScore(gameGroup.getId()); - List userJoinList = (List) group.get("userJoinList"); ScreenVo.GroupVo groupVo = new ScreenVo.GroupVo(); groupVo.setGroupId(gameGroup.getId()); groupVo.setGroupName(gameGroup.getName()); - groupVo.setScore((Integer) group.get("totalScore")); - groupVo.setTotalMembers(userJoinList.size()); + + Map group = getGroupTotalScore(gameGroup.getId()); + if(CollectionUtil.isNotEmpty(group)){ + List userJoinList = (List) group.get("userJoinList"); + groupVo.setScore((Integer) group.get("totalScore")); + groupVo.setTotalMembers(userJoinList.size()); + } groupVoList.add(groupVo); } } @@ -740,7 +745,7 @@ public class ScreenService implements IScreenService{ joinExample.createCriteria().andRecordIdEqualTo(gameRecord.getId()); List userJoins = gameUserJoinDao.selectByExample(joinExample); - if (CollectionUtil.isEmpty(userJoins)) { + if (CollectionUtil.isNotEmpty(userJoins)) { userJoins.forEach( userJoin -> { ClientDto.RedisUser user = ClientDto.RedisUser.getInstance(userJoin); redisUtil.zsSet(GameConstant.generateGameKey(gameRecord.getId()), JSON.toJSONString(user), 0, GameConstant.REDIS_TIME); @@ -822,4 +827,23 @@ public class ScreenService implements IScreenService{ } return gameTypeId; } + + @Override + public List getGroupByRecordId(Long recordId) { + List groupList = null; + //获取分组信息 + GameGroupExample gameGroupExample = new GameGroupExample(); + gameGroupExample.createCriteria().andRecordIdEqualTo(recordId); + List gameGroupList = gameGroupDao.selectByExample(gameGroupExample); + if(CollectionUtil.isNotEmpty(gameGroupList)){ + groupList = new ArrayList<>(); + for(GameGroup gameGroup:gameGroupList){ + ScreenVo.Group group = new ScreenVo.Group(); + group.setGroupId(gameGroup.getId()); + group.setGroupName(gameGroup.getName()); + groupList.add(group); + } + } + return groupList; + } } 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 ee2cd562..cc4a12c5 100644 --- a/game/src/main/java/com/ccsens/game/util/GameConstant.java +++ b/game/src/main/java/com/ccsens/game/util/GameConstant.java @@ -36,6 +36,15 @@ public class GameConstant { return recordId + GAME_SCORE_KEY; } + /** + * 生成分组游戏key + * @param recordId + * @return + */ + public static String generateGameGroupKey(Long recordId,Long groupId) { + return recordId + "_" + groupId + GAME_SCORE_KEY; + } + /** * 游戏状态key * @param recordId diff --git a/game/src/main/java/com/ccsens/game/util/SendMsg.java b/game/src/main/java/com/ccsens/game/util/SendMsg.java index 792bcdf7..35ee2d4d 100644 --- a/game/src/main/java/com/ccsens/game/util/SendMsg.java +++ b/game/src/main/java/com/ccsens/game/util/SendMsg.java @@ -5,7 +5,10 @@ import com.alibaba.fastjson.JSON; import com.ccsens.game.bean.dto.ClientDto; import com.ccsens.game.bean.dto.message.ChangeStatusMessageDto; import com.ccsens.game.bean.dto.message.GameMessageWithChangeStatusOut; +import com.ccsens.game.bean.po.GameGroup; +import com.ccsens.game.bean.po.GameGroupExample; import com.ccsens.game.bean.po.GameRecord; +import com.ccsens.game.persist.dao.GameGroupDao; import com.ccsens.game.persist.dao.GameUserJoinDao; import com.ccsens.util.JacksonUtil; import com.ccsens.util.RedisUtil; @@ -18,6 +21,7 @@ import org.springframework.data.redis.core.ZSetOperations; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; @@ -34,6 +38,8 @@ public class SendMsg { @Autowired private GameUserJoinDao gameUserJoinDao; @Autowired + private GameGroupDao gameGroupDao; + @Autowired private AmqpTemplate rabbitTemplate; @Autowired private RedisUtil redisUtil; @@ -103,6 +109,7 @@ public class SendMsg { } public List getAllScore(GameRecord gameRecord) { + String userKey = GameConstant.generateGameKey(gameRecord.getId()); Set> typedTuples = redisUtil.zsRevGetWithScore(userKey, 0, -1); if (CollectionUtil.isNotEmpty(typedTuples)) { diff --git a/mt/src/main/java/com/ccsens/mt/api/ScoreController.java b/mt/src/main/java/com/ccsens/mt/api/ScoreController.java index f5e7dad0..f9019be5 100644 --- a/mt/src/main/java/com/ccsens/mt/api/ScoreController.java +++ b/mt/src/main/java/com/ccsens/mt/api/ScoreController.java @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.math.BigDecimal; import java.util.List; @Api(tags = "评分插件相关" , description = "") @@ -54,6 +55,19 @@ public class ScoreController { return JsonResponse.newInstance().ok(); } + @ApiOperation(value = "提交单项评分",notes = "") + @ApiImplicitParams({ + }) + @RequestMapping(value = "/oneScore", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse submitScore(HttpServletRequest request, + @ApiParam @RequestBody ScoreDto.SubmitOnlyOneScore submitOnlyOneScore) throws Exception { + //获取userId + Long userId = userService.getUserIdByToken(request); + + scoreService.submitOnlyOneScore(userId,submitOnlyOneScore); + return JsonResponse.newInstance().ok(); + } + @ApiOperation(value = "获取评分",notes = "") @ApiImplicitParams({ @@ -119,4 +133,23 @@ public class ScoreController { return JsonResponse.newInstance().ok(); } + /** + * 普通成员获取自己给任务的评分 + */ + @RequestMapping(value = "/memberScore", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public BigDecimal getMemberScore(Long taskId,Long userId) throws Exception { + + BigDecimal memberScore = scoreService.getMemberScore(taskId,userId); + return memberScore; + } + + /** + * 项目经理获取任务的平均分 + */ + @RequestMapping(value = "/adminScore", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public BigDecimal getAdminScore(Long projectId,Long taskId) throws Exception { + + BigDecimal adminScore = scoreService.getAdminScore(projectId,taskId); + return adminScore; + } } diff --git a/mt/src/main/java/com/ccsens/mt/bean/dto/ScoreDto.java b/mt/src/main/java/com/ccsens/mt/bean/dto/ScoreDto.java index 6e2d04ac..f78d7887 100644 --- a/mt/src/main/java/com/ccsens/mt/bean/dto/ScoreDto.java +++ b/mt/src/main/java/com/ccsens/mt/bean/dto/ScoreDto.java @@ -80,4 +80,16 @@ public class ScoreDto { @ApiModelProperty("最小值") private BigDecimal minScore; } + + @Getter + @Setter + @ApiModel + public static class SubmitOnlyOneScore{ + @ApiModelProperty("角色id") + private Long roleId; + @ApiModelProperty("任务Id") + private Long playerId; + @ApiModelProperty("分数") + private BigDecimal score; + } } diff --git a/mt/src/main/java/com/ccsens/mt/service/IScoreService.java b/mt/src/main/java/com/ccsens/mt/service/IScoreService.java index 7b79eaef..6ef74a32 100644 --- a/mt/src/main/java/com/ccsens/mt/service/IScoreService.java +++ b/mt/src/main/java/com/ccsens/mt/service/IScoreService.java @@ -3,6 +3,7 @@ package com.ccsens.mt.service; import com.ccsens.mt.bean.dto.ScoreDto; import com.ccsens.mt.bean.vo.ScoreVo; +import java.math.BigDecimal; import java.util.List; public interface IScoreService { @@ -19,4 +20,10 @@ public interface IScoreService { void backScore(Long roleId, Long playerId); void backScoreAll(Long playerId); + + void submitOnlyOneScore(Long userId, ScoreDto.SubmitOnlyOneScore submitOnlyOneScore); + + BigDecimal getMemberScore(Long taskId, Long userId); + + BigDecimal getAdminScore(Long projectId,Long taskId); } diff --git a/mt/src/main/java/com/ccsens/mt/service/ScoreService.java b/mt/src/main/java/com/ccsens/mt/service/ScoreService.java index c80d165a..cd39eaa0 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ScoreService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ScoreService.java @@ -155,6 +155,49 @@ public class ScoreService implements IScoreService{ } } + /** + * 提交单项评分 + * @param userId + * @param submitOnlyOneScore + */ + @Override + public void submitOnlyOneScore(Long userId, ScoreDto.SubmitOnlyOneScore submitOnlyOneScore) { + if(ObjectUtil.isNull(userId)){ + throw new BaseException(CodeEnum.NOT_LOGIN); + } + TaskVo.TaskInfoWithFeign taskInfo = tallFeignClient.getProjectId(submitOnlyOneScore.getPlayerId()); + if(ObjectUtil.isNull(taskInfo)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + JsonResponse jMemberInfo = tallFeignClient.getMemberByUserId(userId,taskInfo.getProjectId()); + if(ObjectUtil.isNull(jMemberInfo)){ + throw new BaseException(CodeEnum.NOT_MEMBER); + } + MemberVo.MemberInfo memberInfo = jMemberInfo.getData(); + if(ObjectUtil.isNull(memberInfo)){ + throw new BaseException(CodeEnum.NOT_MEMBER); + } + //添加评委 + addJudge(memberInfo); + + MtScoreExample scoreExample = new MtScoreExample(); + scoreExample.createCriteria().andTaskIdEqualTo(taskInfo.getId()).andJudgeUserIdEqualTo(memberInfo.getId()); + List scoreList = scoreDao.selectByExample(scoreExample); + if (CollectionUtil.isEmpty(scoreList)) { + MtScore score = new MtScore(); + score.setId(snowflake.nextId()); + score.setJudgeUserId(memberInfo.getId()); + score.setTaskId(taskInfo.getId()); + score.setTaskName(taskInfo.getName()); + score.setScore(submitOnlyOneScore.getScore()); + //0已评分,1被退回 + score.setIsScore(0); + scoreDao.insertSelective(score); + } else { + throw new BaseException(CodeEnum.SCORE_REPEAT); + } + } + /** * 查看评分 * @param userId @@ -381,4 +424,35 @@ public class ScoreService implements IScoreService{ } } } + + /*=====================================================*/ + + @Override + public BigDecimal getMemberScore(Long taskId, Long userId) { + BigDecimal score = null; + BigDecimal scoreSum = scoreDao.sumScoreByJudgeId(userId, taskId); + if(ObjectUtil.isNotNull(scoreSum)){ + score = scoreSum; + } + return score; + } + + @Override + public BigDecimal getAdminScore(Long projectId,Long taskId) { + BigDecimal aveScore = null; + //获取每个评委对此任务的评分 + List judgeScoreList = findJudgeScore(projectId,taskId); + if(CollectionUtil.isNotEmpty(judgeScoreList)){ + aveScore = BigDecimal.valueOf(0); + for(ScoreVo.JudgeScore judgeScore : judgeScoreList){ + //获取此任务的总分 + if(ObjectUtil.isNotNull(judgeScore.getScore())){ + aveScore = aveScore.add(judgeScore.getScore()); + } + } + //平均分 + aveScore = aveScore.divide(BigDecimal.valueOf(judgeScoreList.size()), 2, ROUND_HALF_UP); + } + return aveScore; + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/IUserService.java b/tall/src/main/java/com/ccsens/tall/service/IUserService.java index 743e289c..91e175dd 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IUserService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IUserService.java @@ -3,6 +3,7 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.bean.po.SysUser; import com.ccsens.tall.bean.vo.UserVo; @@ -49,6 +50,9 @@ public interface IUserService { List selectUserIdByRoleId(Long roleId)throws Exception; + Boolean getIsAttention(Long currentUserId, Long projectId); + + void userAttentionProject(Long currentUserId, ProjectDto.ProjectIdDto projectIdDto); //默认注册 /** @@ -68,4 +72,6 @@ public interface IUserService { void relievePhone(Long userId,String phone); UserVo.UserSign changePhoneNotPassword(Long userId,UserDto.WxBindingPhone phoneInfo) throws Exception; + + } diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java index de18b21d..cd1b4889 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -193,38 +193,69 @@ public class TaskDeliverService implements ITaskDeliverService { } } //添加PostLog + ProTaskDeliverPostLog deliverPostLog = new ProTaskDeliverPostLog(); + deliverPostLog.setId(snowflake.nextId()); + deliverPostLog.setDeliverId(uploadDeliver.getDeliverId()); + deliverPostLog.setTaskSubTimeId(subTimeId); + //如果有文件则添加,没有不添加 if (CollectionUtil.isNotEmpty(uploadDeliver.getFileInfo())) { for (DeliverDto.fileInfo fileInfo : uploadDeliver.getFileInfo()) { SysCommitedFile file = commitedFileDao.selectByPrimaryKey(fileInfo.getId()); - if (ObjectUtil.isNotNull(file)) { - ProTaskDeliverPostLog deliverPostLog = new ProTaskDeliverPostLog(); - deliverPostLog.setId(snowflake.nextId()); - deliverPostLog.setDeliverId(uploadDeliver.getDeliverId()); - deliverPostLog.setTaskSubTimeId(subTimeId); - deliverPostLog.setFileId(fileInfo.getId()); - deliverPostLog.setUserId(currentUserId); - deliverPostLog.setDescription(uploadDeliver.getDescription()); - deliverPostLog.setTime(System.currentTimeMillis()); - deliverPostLog.setIsHistory(0); - deliverPostLogDao.insertSelective(deliverPostLog); - //添加交付物检查人表 - if (CollectionUtil.isNotEmpty(uploadDeliver.getCheckerIdList())) { - ProTaskDeliverPostLogChecker postLogChecker = null; - for (Long checkerId : uploadDeliver.getCheckerIdList()) { - postLogChecker = new ProTaskDeliverPostLogChecker(); - postLogChecker.setId(snowflake.nextId()); - postLogChecker.setDeliverPostLogId(deliverPostLog.getId()); - postLogChecker.setCheckerId(checkerId); - postLogCheckerDao.insertSelective(postLogChecker); - } - } else { - throw new BaseException(CodeEnum.NOT_CHECKER); - } - } else { - throw new BaseException(CodeEnum.NOT_DELIVER_FILE); - } + deliverPostLog.setFileId(fileInfo.getId()); } } + deliverPostLog.setUserId(currentUserId); + deliverPostLog.setDescription(uploadDeliver.getDescription()); + deliverPostLog.setTime(System.currentTimeMillis()); + deliverPostLog.setIsHistory(0); + deliverPostLogDao.insertSelective(deliverPostLog); + //添加交付物检查人表 + if (CollectionUtil.isNotEmpty(uploadDeliver.getCheckerIdList())) { + ProTaskDeliverPostLogChecker postLogChecker = null; + for (Long checkerId : uploadDeliver.getCheckerIdList()) { + postLogChecker = new ProTaskDeliverPostLogChecker(); + postLogChecker.setId(snowflake.nextId()); + postLogChecker.setDeliverPostLogId(deliverPostLog.getId()); + postLogChecker.setCheckerId(checkerId); + postLogCheckerDao.insertSelective(postLogChecker); + } + } else { + throw new BaseException(CodeEnum.NOT_CHECKER); + } + +// if (CollectionUtil.isNotEmpty(uploadDeliver.getFileInfo())) { +// for (DeliverDto.fileInfo fileInfo : uploadDeliver.getFileInfo()) { +// +// SysCommitedFile file = commitedFileDao.selectByPrimaryKey(fileInfo.getId()); +//// if (ObjectUtil.isNotNull(file)) { +// ProTaskDeliverPostLog deliverPostLog = new ProTaskDeliverPostLog(); +// deliverPostLog.setId(snowflake.nextId()); +// deliverPostLog.setDeliverId(uploadDeliver.getDeliverId()); +// deliverPostLog.setTaskSubTimeId(subTimeId); +// deliverPostLog.setFileId(fileInfo.getId()); +// deliverPostLog.setUserId(currentUserId); +// deliverPostLog.setDescription(uploadDeliver.getDescription()); +// deliverPostLog.setTime(System.currentTimeMillis()); +// deliverPostLog.setIsHistory(0); +// deliverPostLogDao.insertSelective(deliverPostLog); +// //添加交付物检查人表 +// if (CollectionUtil.isNotEmpty(uploadDeliver.getCheckerIdList())) { +// ProTaskDeliverPostLogChecker postLogChecker = null; +// for (Long checkerId : uploadDeliver.getCheckerIdList()) { +// postLogChecker = new ProTaskDeliverPostLogChecker(); +// postLogChecker.setId(snowflake.nextId()); +// postLogChecker.setDeliverPostLogId(deliverPostLog.getId()); +// postLogChecker.setCheckerId(checkerId); +// postLogCheckerDao.insertSelective(postLogChecker); +// } +// } else { +// throw new BaseException(CodeEnum.NOT_CHECKER); +// } +//// } else { +//// throw new BaseException(CodeEnum.NOT_DELIVER_FILE); +//// } +// } +// } //修改交付物状态 ProTaskDeliver deliver = new ProTaskDeliver(); diff --git a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java index 436c6b08..74b55e66 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java @@ -306,6 +306,18 @@ public class TaskSubTimeService implements ITaskSubTimeService { detail.setEndTime(addTask.getEndTime()); } taskDetailDao.insertSelective(detail); + if(ObjectUtil.isNotNull(addTask.getProjectId())){ + SysProject project = sysProjectDao.selectByPrimaryKey(addTask.getProjectId()); + if(ObjectUtil.isNotNull(project)) { + if (detail.getBeginTime() < project.getBeginTime()) { + project.setBeginTime(detail.getBeginTime()); + } + if (detail.getEndTime() > project.getEndTime()) { + project.setEndTime(detail.getEndTime()); + } + sysProjectDao.updateByPrimaryKeySelective(project); + } + } //TaskSubTime List proTaskSubTimeList = new ArrayList<>(); if(ObjectUtil.isNotNull(detail.getProjectId())){ diff --git a/tall/src/main/java/com/ccsens/tall/service/UserService.java b/tall/src/main/java/com/ccsens/tall/service/UserService.java index 6c7a0277..97dbf68a 100644 --- a/tall/src/main/java/com/ccsens/tall/service/UserService.java +++ b/tall/src/main/java/com/ccsens/tall/service/UserService.java @@ -7,6 +7,7 @@ import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.StrUtil; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.bean.po.*; import com.ccsens.tall.bean.vo.UserVo; @@ -24,6 +25,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import org.xhtmlrenderer.css.parser.property.PrimitivePropertyBuilders; import java.util.ArrayList; import java.util.List; @@ -51,6 +53,10 @@ public class UserService implements IUserService { private RedisUtil redisUtil; @Autowired private SysWxDao sysWxDao; + @Autowired + private SysProjectDao sysProjectDao; + @Autowired + private UserAttentionDao userAttentionDao; /** @@ -936,7 +942,55 @@ public class UserService implements IUserService { return userIdList; } -// @Override + /** + * 查询用户是否关注此项目 + * @param currentUserId + * @param projectId + * @return + */ + @Override + public Boolean getIsAttention(Long currentUserId, Long projectId) { + Boolean isAttention = false; + if(ObjectUtil.isNotNull(sysProjectDao.selectByPrimaryKey(projectId))){ + UserAttentionExample attentionExample = new UserAttentionExample(); + attentionExample.createCriteria().andProjectIdEqualTo(projectId).andUserIdEqualTo(currentUserId); + List attentionList = userAttentionDao.selectByExample(attentionExample); + if(CollectionUtil.isNotEmpty(attentionList)){ + isAttention = true; + } + }else { + throw new BaseException(CodeEnum.NOT_PROJECT); + } + return isAttention; + } + + /** + * 用户关注某个项目 + * @param currentUserId + * @param projectIdDto + */ + @Override + public void userAttentionProject(Long currentUserId, ProjectDto.ProjectIdDto projectIdDto) { + //查找项目 + SysProject project = sysProjectDao.selectByPrimaryKey(projectIdDto.getProjectId()); + if(ObjectUtil.isNotNull(project)){ + UserAttentionExample attentionExample = new UserAttentionExample(); + attentionExample.createCriteria().andProjectIdEqualTo(projectIdDto.getProjectId()).andUserIdEqualTo(currentUserId); + List attentionList = userAttentionDao.selectByExample(attentionExample); + if(CollectionUtil.isNotEmpty(attentionList)){ + throw new BaseException(CodeEnum.ALREADY_ATTENTION); + } + UserAttention attention = new UserAttention(); + attention.setId(snowflake.nextId()); + attention.setUserId(currentUserId); + attention.setProjectId(projectIdDto.getProjectId()); + userAttentionDao.insertSelective(attention); + }else { + throw new BaseException(CodeEnum.NOT_PROJECT); + } + } + + // @Override // public UserVo.TokenBean userManageSignin(UserDto.UserSginin dto){ // UserVo.TokenBean tokenBean = null; // JsonResponse tokenBeanJsonResponse = userManageFeign.userSignin(dto); 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 bb5f99a0..f8ce9d3b 100644 --- a/tall/src/main/java/com/ccsens/tall/web/UserController.java +++ b/tall/src/main/java/com/ccsens/tall/web/UserController.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.extra.servlet.ServletUtil; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.bean.po.SysUser; import com.ccsens.tall.bean.vo.MemberVo; @@ -273,7 +274,32 @@ public class UserController { return JsonResponse.newInstance().ok(tokenBean); } - /*===============================================================================================*/ + @ApiOperation(value = "查询用户是否关注某个项目",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name="projectId",value = "projectId",required = true,paramType = "query") + }) + @RequestMapping(value = "/attention",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) + public JsonResponse getIsAttention(HttpServletRequest request, + @RequestParam(required = true) Long projectId) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + + Boolean isAttention = userService.getIsAttention(currentUserId,projectId); + return JsonResponse.newInstance().ok(isAttention); + } + + @ApiOperation(value = "用户关注项目",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name="projectId",value = "projectId",required = true,paramType = "query") + }) + @RequestMapping(value = "/attention",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"}) + public JsonResponse userAttentionProject(HttpServletRequest request, + @ApiParam @Validated @RequestBody ProjectDto.ProjectIdDto projectIdDto) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + userService.userAttentionProject(currentUserId,projectIdDto); + return JsonResponse.newInstance().ok(); + } + + /*===============================================================================================*/ @ApiOperation(value = "根据token获取userId",notes = "") @ApiImplicitParams({ @ApiImplicitParam(name="token",value = "token",required = true,paramType = "query") diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index 7934f6c6..343b5949 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -92,7 +92,8 @@ public enum CodeEnum { MERGE_WX_PHONE(75,"该手机号已经注册过账号,是否将账号合并",true), ALREADY_EXIST_ACCOUNT(76,"该账号已存在",true), NOT_SIGN_FIELD(77,"签到的字段不可用",true), - ALREADY_SIGN(78,"您已经签到过了,请勿重复签到",true) + ALREADY_SIGN(78,"您已经签到过了,请勿重复签到",true), + ALREADY_ATTENTION(78,"您已经关注了这个项目",true) ; public CodeEnum addMsg(String msg){