diff --git a/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketEncoder.java b/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketEncoder.java index 2c3c6ddb..43ca6691 100644 --- a/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketEncoder.java +++ b/game/src/main/java/com/ccsens/game/netty/wsserver/WebSocketEncoder.java @@ -25,6 +25,12 @@ public class WebSocketEncoder extends MessageToByteEncoder { ctx.writeAndFlush(new TextWebSocketFrame(msg)); logger.info("Websocket send: {}",msg); + } + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { + cause.printStackTrace(); + super.exceptionCaught(ctx, cause); + } } diff --git a/game/src/main/java/com/ccsens/game/service/MessageService.java b/game/src/main/java/com/ccsens/game/service/MessageService.java index d6262a56..f699fc5a 100644 --- a/game/src/main/java/com/ccsens/game/service/MessageService.java +++ b/game/src/main/java/com/ccsens/game/service/MessageService.java @@ -109,7 +109,7 @@ public class MessageService implements IMessageService { gameMessages.forEach(gameMessage -> { gameMessage.setType(WebConstant.Message_Type.ChangeStatus.phase); log.info("============ {}",gameMessage); - sendTo(gameMessage.getUserId().toString(), gameMessage); + sendTo(gameMessage.getUserId().toString(), gameMessage.getData()); }); } } 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 c80d53a3..0e720d93 100644 --- a/game/src/main/java/com/ccsens/game/service/ScreenService.java +++ b/game/src/main/java/com/ccsens/game/service/ScreenService.java @@ -299,27 +299,28 @@ public class ScreenService implements IScreenService{ if(ObjectUtil.isNull(gameType)){ throw new BaseException(CodeEnum.NOT_GAME_TYPE); } - //添加一场新的游戏记录 - GameRecord gameRecordNew = new GameRecord(); - gameRecordNew.setId(snowflake.nextId()); - gameRecordNew.setUserPayId(gameUserPay.getId()); - gameRecordNew.setUrl(WebConstant.TEST_URL_GAME + gameRecordNew.getId() + File.separator + gameType.getScreenUrl()); - gameRecordNew.setQrCodeUrl(WebConstant.TEST_URL_GAME + gameRecordNew.getId() + File.separator + gameType.getClientUrl()); - gameRecordDao.insertSelective(gameRecordNew); - //修改购买的游戏的使用次数 - gameUserPay.setUsedCount(gameUserPay.getUsedCount() + 1); - gameUserPayDao.updateByPrimaryKeySelective(gameUserPay); +// //添加一场新的游戏记录 +// GameRecord gameRecordNew = new GameRecord(); +// gameRecordNew.setId(snowflake.nextId()); +// gameRecordNew.setUserPayId(gameUserPay.getId()); +// gameRecordNew.setUrl(WebConstant.TEST_URL_GAME + gameRecordNew.getId() + File.separator + gameType.getScreenUrl()); +// gameRecordNew.setQrCodeUrl(WebConstant.TEST_URL_GAME + gameRecordNew.getId() + File.separator + gameType.getClientUrl()); +// gameRecordDao.insertSelective(gameRecordNew); +// //修改购买的游戏的使用次数 +// gameUserPay.setUsedCount(gameUserPay.getUsedCount() + 1); +// gameUserPayDao.updateByPrimaryKeySelective(gameUserPay); if(gameUserPay.getUsedCount() >= gameUserPay.getTotalCount()){ throw new BaseException(CodeEnum. GAME_NOT_TIMES); } + GameRecord gameRecordNew = null; if(gameRecord.getGameStatus() == 3){ //添加一场新的游戏记录 gameRecordNew = new GameRecord(); gameRecordNew.setId(snowflake.nextId()); gameRecordNew.setUserPayId(gameUserPay.getId()); - gameRecordNew.setUrl(WebConstant.TEST_URL_GAME + gameType.getScreenUrl() + "?id="+gameRecord.getId()); + gameRecordNew.setUrl(WebConstant.TEST_URL_GAME + gameType.getScreenUrl() + "?id="+gameRecordNew.getId()); gameRecordNew.setQrCodeUrl(WebConstant.TEST_URL_GAME + gameRecordNew.getId() + File.separator + gameType.getClientUrl()); gameRecordDao.insertSelective(gameRecordNew); //修改购买的游戏的使用次数 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 8ed520f3..f5e7dad0 100644 --- a/mt/src/main/java/com/ccsens/mt/api/ScoreController.java +++ b/mt/src/main/java/com/ccsens/mt/api/ScoreController.java @@ -72,30 +72,28 @@ public class ScoreController { } - // -// @ApiOperation(value = "退回单个评委的评分",notes = "") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "roleId", value = "评委id", required = true, paramType = "path"), -// @ApiImplicitParam(name = "playerId", value = "参赛项目id", required = true, paramType = "path"), -// }) -// @RequestMapping(value = "/back", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) -// public JsonResponse backScore(HttpServletRequest request, -// @RequestParam(required = true) Long roleId, -// @RequestParam(required = true) Long playerId) throws Exception { -// scoreService.backScore(roleId,playerId); -// return JsonResponse.newInstance().ok(); -// } -// -// @ApiOperation(value = "退回所有评委的评分",notes = "") -// @ApiImplicitParams({ -// @ApiImplicitParam(name = "playerId", value = "参赛项目id", required = true, paramType = "path"), -// }) -// @RequestMapping(value = "/backAll", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) -// public JsonResponse backScoreAll(HttpServletRequest request, -// @RequestParam(required = true) Long playerId) throws Exception { -// scoreService.backScoreAll(playerId); -// return JsonResponse.newInstance().ok(); -// } + + @ApiOperation(value = "退回单个评委的评分",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "评委id", required = true, paramType = "path"), + @ApiImplicitParam(name = "playerId", value = "参赛项目id", required = true, paramType = "path"), + }) + @RequestMapping(value = "/back", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) + public JsonResponse backScore(@RequestParam(required = true) Long roleId, + @RequestParam(required = true) Long playerId) throws Exception { + scoreService.backScore(roleId,playerId); + return JsonResponse.newInstance().ok(); + } + + @ApiOperation(value = "退回所有评委的评分",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name = "playerId", value = "参赛项目id", required = true, paramType = "path"), + }) + @RequestMapping(value = "/backAll", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) + public JsonResponse backScoreAll(@RequestParam(required = true) Long playerId) throws Exception { + scoreService.backScoreAll(playerId); + return JsonResponse.newInstance().ok(); + } @ApiOperation(value = "查看项目排名及详细分数",notes = "") @ApiImplicitParams({ diff --git a/mt/src/main/java/com/ccsens/mt/api/SigninController.java b/mt/src/main/java/com/ccsens/mt/api/SigninController.java index 41ea1368..407ac87c 100644 --- a/mt/src/main/java/com/ccsens/mt/api/SigninController.java +++ b/mt/src/main/java/com/ccsens/mt/api/SigninController.java @@ -14,6 +14,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; +import java.util.List; @Api(tags = "签到" , description = "") @RestController @@ -53,4 +54,19 @@ public class SigninController { return JsonResponse.newInstance().ok(signinVoInfo); } + + @ApiOperation(value = "查看所有人的签到信息", notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "签到任务的id", required = true, paramType = ""), + }) + @RequestMapping(value = "all", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) + public JsonResponse> getSignAllByTaskId(HttpServletRequest request, + @RequestParam(required = true) Long taskId) throws Exception { + log.info("查看自己的签到信息"); + //获取userId + Long userId = userService.getUserIdByToken(request); + List signinVoInfo = signinService.getSignAllByTaskId(taskId,userId); + + return JsonResponse.newInstance().ok(signinVoInfo); + } } 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 7fe2412d..7b79eaef 100644 --- a/mt/src/main/java/com/ccsens/mt/service/IScoreService.java +++ b/mt/src/main/java/com/ccsens/mt/service/IScoreService.java @@ -15,4 +15,8 @@ public interface IScoreService { List getRanking(Long projectId); void showScore(Long projectId, Long playerId) throws Exception; + + void backScore(Long roleId, Long playerId); + + void backScoreAll(Long playerId); } diff --git a/mt/src/main/java/com/ccsens/mt/service/ISigninService.java b/mt/src/main/java/com/ccsens/mt/service/ISigninService.java index 5d995966..5dc39f74 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ISigninService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ISigninService.java @@ -3,8 +3,12 @@ package com.ccsens.mt.service; import com.ccsens.mt.bean.dto.SigninDto; import com.ccsens.mt.bean.vo.SigninVo; +import java.util.List; + public interface ISigninService { SigninVo.SigninVoInfo signin(SigninDto.SigninInfo signinInfo, Long userId); SigninVo.SigninVoInfo getSignByTaskId(Long taskId, Long userId); + + List getSignAllByTaskId(Long taskId, Long userId); } 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 673db477..ef433720 100644 --- a/mt/src/main/java/com/ccsens/mt/service/ScoreService.java +++ b/mt/src/main/java/com/ccsens/mt/service/ScoreService.java @@ -271,12 +271,14 @@ public class ScoreService implements IScoreService{ if (CollectionUtil.isNotEmpty(judgeList)) { for (MtJudge judge : judgeList) { BigDecimal scoreSUM = scoreDao.sumScoreByJudgeId(judge.getId(), taskId); - judgeScore = new ScoreVo.JudgeScore(); - judgeScore.setJudgeId(judge.getId()); - judgeScore.setJudgeName(judge.getNickname()); - judgeScore.setScore(scoreSUM); + if(ObjectUtil.isNotNull(scoreSUM)) { + judgeScore = new ScoreVo.JudgeScore(); + judgeScore.setJudgeId(judge.getId()); + judgeScore.setJudgeName(judge.getNickname()); + judgeScore.setScore(scoreSUM); - judgeScoreList.add(judgeScore); + judgeScoreList.add(judgeScore); + } } } return judgeScoreList; @@ -314,7 +316,9 @@ public class ScoreService implements IScoreService{ judge.setScore(judgeScore.getScore()); judgeList.add(judge); //获取此任务的总分 - aveScore = aveScore.add(judgeScore.getScore()); + if(ObjectUtil.isNotNull(judgeScore.getScore())){ + aveScore = aveScore.add(judgeScore.getScore()); + } } //平均分 aveScore = aveScore.divide(BigDecimal.valueOf(judgeScoreList.size()), 2, ROUND_HALF_UP); @@ -336,4 +340,45 @@ public class ScoreService implements IScoreService{ //发送消息 messageService.sendSyncMessageWithShow(scoreShow); } + + /** + * 退回单个评委的评分 + */ + @Override + public void backScore(Long roleId, Long taskId) { + TaskVo.TaskInfoWithFeign taskInfo = tallFeignClient.getProjectId(taskId); + if(ObjectUtil.isNull(taskInfo)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + MtScoreExample mtScoreExample = new MtScoreExample(); + mtScoreExample.createCriteria().andJudgeUserIdEqualTo(roleId).andTaskIdEqualTo(taskInfo.getId()); + List mtScoreList = scoreDao.selectByExample(mtScoreExample); + if(CollectionUtil.isNotEmpty(mtScoreList)){ + for(MtScore score : mtScoreList){ + score.setRecStatus((byte) 2); + scoreDao.updateByPrimaryKeySelective(score); + } + } + } + + /** + * 退回该任务的所有评分 + */ + @Override + public void backScoreAll(Long taskId) { + TaskVo.TaskInfoWithFeign taskInfo = tallFeignClient.getProjectId(taskId); + if(ObjectUtil.isNull(taskInfo)){ + throw new BaseException(CodeEnum.NOT_TASK); + } + + MtScoreExample mtScoreExample = new MtScoreExample(); + mtScoreExample.createCriteria().andTaskIdEqualTo(taskInfo.getId()); + List mtScoreList = scoreDao.selectByExample(mtScoreExample); + if(CollectionUtil.isNotEmpty(mtScoreList)){ + for(MtScore score : mtScoreList){ + score.setRecStatus((byte) 2); + scoreDao.updateByPrimaryKeySelective(score); + } + } + } } diff --git a/mt/src/main/java/com/ccsens/mt/service/SigninService.java b/mt/src/main/java/com/ccsens/mt/service/SigninService.java index 9eb5aae8..7b1cd8c0 100644 --- a/mt/src/main/java/com/ccsens/mt/service/SigninService.java +++ b/mt/src/main/java/com/ccsens/mt/service/SigninService.java @@ -12,6 +12,7 @@ import com.ccsens.util.exception.BaseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; @Service @@ -21,6 +22,12 @@ public class SigninService implements ISigninService{ @Autowired private Snowflake snowflake; + /** + * 签到 + * @param signinInfo + * @param userId + * @return + */ @Override public SigninVo.SigninVoInfo signin(SigninDto.SigninInfo signinInfo, Long userId) { MtSigninExample signinExample = new MtSigninExample(); @@ -56,7 +63,12 @@ public class SigninService implements ISigninService{ return signinVoInfo; } - + /** + * 查看自己的签到信息 + * @param taskId + * @param userId + * @return + */ @Override public SigninVo.SigninVoInfo getSignByTaskId(Long taskId, Long userId) { SigninVo.SigninVoInfo signinVoInfo = new SigninVo.SigninVoInfo(); @@ -72,4 +84,30 @@ public class SigninService implements ISigninService{ } return signinVoInfo; } + + /** + * 查看任务的全部签到信息 + * @param taskId + * @param userId + * @return + */ + @Override + public List getSignAllByTaskId(Long taskId, Long userId) { + List signinVoInfoList = new ArrayList<>(); + + MtSigninExample signinExample = new MtSigninExample(); + signinExample.createCriteria().andTaskIdEqualTo(taskId); + List signinList = mtSigninDao.selectByExample(signinExample); + if(CollectionUtil.isNotEmpty(signinList)){ + for(MtSignin mtSignin : signinList){ + SigninVo.SigninVoInfo signinVoInfo = new SigninVo.SigninVoInfo(); + signinVoInfo.setName(mtSignin.getName()); + signinVoInfo.setPhone(mtSignin.getPhone()); + signinVoInfo.setSequence(mtSignin.getSequence()); + signinVoInfo.setSignTime(mtSignin.getSigninTime()); + signinVoInfoList.add(signinVoInfo); + } + } + return signinVoInfoList; + } } diff --git a/mt/src/main/resources/mapper_dao/ScoreDao.xml b/mt/src/main/resources/mapper_dao/ScoreDao.xml index 9f3a7136..f9071261 100644 --- a/mt/src/main/resources/mapper_dao/ScoreDao.xml +++ b/mt/src/main/resources/mapper_dao/ScoreDao.xml @@ -12,6 +12,8 @@ task_id=#{playerId} AND judge_user_id = #{judgeId} + AND + rec_status = 0 @@ -44,6 +50,8 @@ score = (SELECT MIN(score) FROM `t_mt_score` WHERE task_id=#{playerId}) AND task_id=#{playerId} + AND + rec_status = 0 LIMIT 0,1 diff --git a/tall/src/main/java/com/ccsens/tall/service/ExcelService.java b/tall/src/main/java/com/ccsens/tall/service/ExcelService.java index 8470d90a..a9663c28 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ExcelService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ExcelService.java @@ -600,12 +600,14 @@ public class ExcelService implements IExcelService { // if(StrUtil.isEmpty(task2)){ // throw new BaseException(CodeEnum.WBS_NOT_TASK_NAME.addMsg(wbsSheet.getSheetName()+i)); // } - //TODO 一级任务(时间暂时为空) + //一级任务 if (StrUtil.isNotEmpty(task1)) { ProTaskDetail firstTaskDetail = new ProTaskDetail(); firstTaskDetail.setId(snowflake.nextId()); firstTaskDetail.setName(task1); firstTaskDetail.setProjectId(sysProject.getId()); + firstTaskDetail.setBeginTime(sysProject.getBeginTime()); + firstTaskDetail.setEndTime(sysProject.getEndTime()); firstTaskDetail.setDelay((byte) WebConstant.TASK_DELAY.SelfMotion.value); firstTaskDetail.setVirtual((byte) WebConstant.TASK_VIRTUAL.Normal.value); firstTaskDetail.setLevel((byte) WebConstant.TASK_LEVEL.FirstTask.value); @@ -765,6 +767,26 @@ public class ExcelService implements IExcelService { //添加任务 proTaskDetailService.saveTaskDetail(taskDetail); taskDetails.add(taskDetail); + //给一级任务时间赋值 + if(CollectionUtil.isNotEmpty(taskDetails)){ + for(ProTaskDetail firstTaskDetail : taskDetails){ + if(firstTaskDetail.getId().longValue() == firstTaskDetailId){ + //开始时间 + if(ObjectUtil.isNull(firstTaskDetail.getBeginTime())){ + firstTaskDetail.setBeginTime(taskDetail.getBeginTime()); + }else if(firstTaskDetail.getBeginTime() > taskDetail.getBeginTime()){ + firstTaskDetail.setBeginTime(taskDetail.getBeginTime()); + } + //结束时间 + if(ObjectUtil.isNull(firstTaskDetail.getEndTime())){ + firstTaskDetail.setEndTime(taskDetail.getEndTime()); + }else if(firstTaskDetail.getEndTime() < taskDetail.getEndTime()){ + firstTaskDetail.setEndTime(taskDetail.getEndTime()); + } + break; + } + } + } } } //添加一个结束虚拟节点 @@ -956,8 +978,8 @@ public class ExcelService implements IExcelService { public void saveProTaskSubTime(List taskDetails) throws Exception { if (CollectionUtil.isNotEmpty(taskDetails)) { for (ProTaskDetail taskDetail : taskDetails) { - //虚拟任务或一级任务不拆分 - if (taskDetail.getVirtual() == WebConstant.TASK_VIRTUAL.Virtual.value || taskDetail.getLevel() == 1) { + //虚拟任务不拆分 + if (taskDetail.getVirtual() == WebConstant.TASK_VIRTUAL.Virtual.value) { continue; } //cycle为空或者组任务,只加一条数据 @@ -1053,7 +1075,7 @@ public class ExcelService implements IExcelService { //获取任务Id if (StrUtil.isNotEmpty(task)) { for (ProTaskDetail proTask : taskDetails) { - if (task.equals(proTask.getName())) { + if (task.equals(proTask.getName()) && proTask.getLevel() == 2) { if (proTask.getHasGroup() == 1) { taskNameList = hasGroupMap.get(proTask.getName()); break; diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index e7f0c328..763853f6 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -123,7 +123,7 @@ public class ProTaskDetailService implements IProTaskDetailService { normalTask = new TaskVo.NormalTask(); BeanUtil.copyProperties(firstTaskDetail, normalTask); normalTask.setDetailId(firstTaskDetail.getId()); - normalTask.setId(null); + normalTask.setId(taskDeliverService.isTaskOrSubTime(firstTaskDetail.getId())); normalTask.setSequence(sequence); //查找一级任务下的二级任务 List secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectId, firstTaskDetail.getId(), startTime, endTime,roleId); @@ -393,7 +393,7 @@ public class ProTaskDetailService implements IProTaskDetailService { //查找项目下的一级任务 ProTaskDetailExample firstTaskExample = new ProTaskDetailExample(); firstTaskExample.createCriteria().andProjectIdEqualTo(projectId) - .andVirtualEqualTo((byte) WebConstant.TASK_VIRTUAL.Normal.value).andParentIdEqualTo(0L); + .andVirtualEqualTo((byte) WebConstant.TASK_VIRTUAL.Normal.value).andLevelEqualTo((byte) 1); List firstTaskList = taskDetailDao.selectByExample(firstTaskExample); if (CollectionUtil.isNotEmpty(firstTaskList)) { for (ProTaskDetail firstTask : firstTaskList) { @@ -429,7 +429,9 @@ public class ProTaskDetailService implements IProTaskDetailService { Long now = System.currentTimeMillis(); System.out.println(task.getName()); TaskVo.TaskIdAndSubTimeIdByParentIdAndTime taskAndSubTime = taskDetailDao.selectSubTimeByTaskParentIdAndTime(task.getId(), now); - taskDeliverByMVP.setDelivers(taskDeliverService.selectDeliverOrInputByTask(taskAndSubTime.getTaskId(), 0)); + if(ObjectUtil.isNotNull(taskAndSubTime)){ + taskDeliverByMVP.setDelivers(taskDeliverService.selectDeliverOrInputByTask(taskAndSubTime.getTaskId(), 0)); + } } //查找任务的输入文档 taskDeliverByMVP.setInputs(taskDeliverService.selectDeliverOrInputByTask(task.getId(), 1)); 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 12fad84c..4d57b851 100644 --- a/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java +++ b/tall/src/main/java/com/ccsens/tall/service/TaskDeliverService.java @@ -307,7 +307,9 @@ public class TaskDeliverService implements ITaskDeliverService { } else { TaskVo.TaskIdAndSubTimeIdByParentIdAndTime taskAndSubTime = taskDetailDao.selectSubTimeByTaskParentIdAndTime(taskDetail.getId(), now); - subTimeId = taskAndSubTime.getSubTimeId(); + if(ObjectUtil.isNotNull(taskAndSubTime)){ + subTimeId = taskAndSubTime.getSubTimeId(); + } } } }