diff --git a/src/main/java/com/ccsens/braintraining/api/BrainController.java b/src/main/java/com/ccsens/braintraining/api/BrainController.java index cbad023..f7d79f2 100644 --- a/src/main/java/com/ccsens/braintraining/api/BrainController.java +++ b/src/main/java/com/ccsens/braintraining/api/BrainController.java @@ -4,19 +4,19 @@ import com.ccsens.braintraining.annotation.MustLogin; import com.ccsens.braintraining.bean.dto.BrainDto; import com.ccsens.braintraining.bean.vo.BrainVo; import com.ccsens.braintraining.service.IBrainService; +import com.ccsens.braintraining.service.IImportService; import com.ccsens.util.JsonResponse; +import com.ccsens.util.UploadFileUtil_Servlet3; +import com.ccsens.util.WebConstant; import com.ccsens.util.bean.dto.QueryDto; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiParam; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import javax.servlet.http.Part; +import java.io.File; import java.util.List; /** @@ -32,6 +32,8 @@ public class BrainController { @Resource private IBrainService brainService; + @Resource + private IImportService importService; @ApiOperation(value = "脑力测评排名") @RequestMapping(value = "/rank", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @@ -70,6 +72,8 @@ public class BrainController { log.info("保存答案结束"); return JsonResponse.newInstance().ok(); } + + @MustLogin @ApiOperation(value = "查询认知筛查报告") @RequestMapping(value = "/queryGrade", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) public JsonResponse queryGrade(@ApiParam @Validated @RequestBody QueryDto params) { @@ -79,4 +83,21 @@ public class BrainController { return JsonResponse.newInstance().ok(score); } + + @ApiOperation(value = "导入试题",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") + @ApiImplicitParams({ + @ApiImplicitParam(name = "file", value = "医疗项目表", required = true, paramType = "form",dataType = "__file") + }) + @RequestMapping(value = "/import", method = RequestMethod.POST) + public JsonResponse importEvaluation(@RequestParam(required = true) Part file) throws Exception{ + + //1.上传文件 + String allowedExts = "xls,xlsx"; + String dir = WebConstant.UPLOAD_PROJECT_WBS + File.separator; + String path = UploadFileUtil_Servlet3.uploadFile(file, allowedExts, dir); + File excelFile = new File(dir+path); + importService.importQuestion(excelFile); + log.info("导入试题"); + return JsonResponse.newInstance().ok(); + } } diff --git a/src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java b/src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java index c82fb48..fae6139 100644 --- a/src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java +++ b/src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java @@ -27,6 +27,8 @@ public class BrainVo { public static class ActiveUserScore { @ApiModelProperty("活动用户ID") private Long activeUserId; + @ApiModelProperty("设备id") + private Long equipmentId; @ApiModelProperty("头像,无,则给默认头像") private String avatarUrl; @ApiModelProperty("测评时间") diff --git a/src/main/java/com/ccsens/braintraining/persist/dao/RaffleActiveDao.java b/src/main/java/com/ccsens/braintraining/persist/dao/RaffleActiveDao.java new file mode 100644 index 0000000..e949d9a --- /dev/null +++ b/src/main/java/com/ccsens/braintraining/persist/dao/RaffleActiveDao.java @@ -0,0 +1,22 @@ +package com.ccsens.braintraining.persist.dao; + +import com.ccsens.braintraining.persist.mapper.RaffleActiveMapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + * @author 逗 + */ +@Repository +public interface RaffleActiveDao extends RaffleActiveMapper { + + /** + * 通过设备id和时间查找活动,并查找活动下的脑力测评任务 + * @param equipmentId 设备id + * @param now 当前时间 + * @return + */ + Long queryTrainTask(@Param("equipmentId") Long equipmentId, @Param("now") long now); + + +} diff --git a/src/main/java/com/ccsens/braintraining/service/BrainService.java b/src/main/java/com/ccsens/braintraining/service/BrainService.java index 1eb2506..b94d4d1 100644 --- a/src/main/java/com/ccsens/braintraining/service/BrainService.java +++ b/src/main/java/com/ccsens/braintraining/service/BrainService.java @@ -2,6 +2,7 @@ package com.ccsens.braintraining.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.JSONArray; import com.alibaba.fastjson.JSONObject; @@ -11,6 +12,7 @@ import com.ccsens.braintraining.bean.vo.BrainVo; import com.ccsens.braintraining.bean.vo.RuleGenerateVo; import com.ccsens.braintraining.bean.vo.RuleScoreVo; import com.ccsens.braintraining.persist.dao.BrainDao; +import com.ccsens.braintraining.persist.dao.RaffleActiveDao; import com.ccsens.braintraining.persist.mapper.*; import com.ccsens.braintraining.util.BrainTrainingCodeError; import com.ccsens.braintraining.util.BrainTrainingConstant; @@ -53,6 +55,10 @@ public class BrainService implements IBrainService { private TrainRuleScoreMapper trainRuleScoreMapper; @Resource private TrainClassifyMapper trainClassifyMapper; + @Resource + private RaffleActiveDao raffleActiveDao; + @Resource + private RaffleTimesMapper raffleTimesMapper; @Override public BrainVo.Active generateTest(BrainDto.Equipment param, Long userId) { @@ -201,6 +207,33 @@ public class BrainService implements IBrainService { record.setFinishStatus(BrainTrainingConstant.Train.TRAINING_FINISH_CLOSE); trainActiveUserMapper.updateByPrimaryKeySelective(record); log.info("修改用户活动:{}的状态为完成", param.getActiveUserId()); + //根据时间和设备id查询抽奖活动 判断当前抽奖下是否有脑力训练的任务 + Long taskId = raffleActiveDao.queryTrainTask(score.getEquipmentId(),System.currentTimeMillis()); + if(ObjectUtil.isNull(taskId)){ + return score; + } + //用户是否完成过该任务 + RaffleTimesExample raffleTimesExample = new RaffleTimesExample(); + raffleTimesExample.createCriteria().andUserIdEqualTo(userId).andTaskIdEqualTo(taskId) + .andFinishTypeNotEqualTo(BrainTrainingConstant.Raffle.TASK_FINISH_NO); + List raffleTimesList = raffleTimesMapper.selectByExample(raffleTimesExample); + if(CollectionUtil.isNotEmpty(raffleTimesList)){ + //已经完成直接返回 + return score; + } + //未完成,删除未完成的记录 + raffleTimesExample.createCriteria().andUserIdEqualTo(userId).andTaskIdEqualTo(taskId) + .andFinishTypeEqualTo(BrainTrainingConstant.Raffle.TASK_FINISH_NO); + RaffleTimes raffleTimes = new RaffleTimes(); + raffleTimes.setRecStatus(BrainTrainingConstant.REC_STATUS.Deleted.value); + raffleTimesMapper.updateByExampleSelective(raffleTimes,raffleTimesExample); + //添加完成记录 + raffleTimes.setId(snowflake.nextId()); + raffleTimes.setFinishType(BrainTrainingConstant.Raffle.TASK_FINISH_BEFORE); + raffleTimes.setUserId(userId); + raffleTimes.setTaskId(taskId); + raffleTimes.setRecStatus(BrainTrainingConstant.REC_STATUS.Normal.value); + raffleTimesMapper.insertSelective(raffleTimes); return score; } @@ -274,9 +307,7 @@ public class BrainService implements IBrainService { private BigDecimal getSpaceScore(Long activeUserId, Long classifyId, Long now, List answerParams, String calculateParam) { // 正确的个数 List questionIds = new ArrayList<>(); - answerParams.forEach(answerParam->{ - questionIds.add(answerParam.getQuestionId()); - }); + answerParams.forEach(answerParam-> questionIds.add(answerParam.getQuestionId())); List answers = brainDao.queryQuestionAnswers(activeUserId, questionIds); Map> answerMap = new HashMap<>(); answers.forEach(questionAnswer->{ diff --git a/src/main/java/com/ccsens/braintraining/service/IImportService.java b/src/main/java/com/ccsens/braintraining/service/IImportService.java new file mode 100644 index 0000000..a37556e --- /dev/null +++ b/src/main/java/com/ccsens/braintraining/service/IImportService.java @@ -0,0 +1,15 @@ +package com.ccsens.braintraining.service; + +import java.io.File; + +/** + * @author 逗 + */ +public interface IImportService { + + /** + * 导入试题 + * @param excelFile 文件 + */ + void importQuestion(File excelFile) throws Exception; +} diff --git a/src/main/java/com/ccsens/braintraining/service/ImportService.java b/src/main/java/com/ccsens/braintraining/service/ImportService.java new file mode 100644 index 0000000..7e5c479 --- /dev/null +++ b/src/main/java/com/ccsens/braintraining/service/ImportService.java @@ -0,0 +1,27 @@ +package com.ccsens.braintraining.service; + +import com.ccsens.braintraining.util.BrainTrainingConstant; +import com.ccsens.util.PoiUtil; + +import java.io.File; +import java.util.List; + +/** + * @author 逗 + */ +public class ImportService implements IImportService { + + @Override + public void importQuestion(File excelFile) throws Exception { + List questionType = BrainTrainingConstant.QUESTION_TYPE; + for (String sheetName: questionType) { + List questions = PoiUtil.readExce(excelFile, -1, sheetName,1, true); + saveQuestions(questions, sheetName); + } + } + + private void saveQuestions(List questions, String sheetName) { + System.out.println(questions); + System.out.println(sheetName); + } +} diff --git a/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java b/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java index ae3279b..4f5f017 100644 --- a/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java +++ b/src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java @@ -2,6 +2,11 @@ package com.ccsens.braintraining.util; import com.ccsens.util.WebConstant; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * @description: * @author: whj @@ -101,4 +106,17 @@ public class BrainTrainingConstant extends WebConstant { public final static byte PRIZE_TYPE_THANKS = 0; } + /**测评分类*/ + public final static List QUESTION_TYPE = new ArrayList<>(); + static { + QUESTION_TYPE.add("DSHY"); + QUESTION_TYPE.add("JTPX"); + QUESTION_TYPE.add("CXNL"); + QUESTION_TYPE.add("ZSYS"); + QUESTION_TYPE.add("SJGN"); + QUESTION_TYPE.add("KJDW"); + QUESTION_TYPE.add("SZZC"); + QUESTION_TYPE.add("LXJF"); + } + } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0ee65bb..95706ce 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,4 @@ spring: profiles: - active: test + active: dev include: common diff --git a/src/main/resources/mapper_dao/BrainDao.xml b/src/main/resources/mapper_dao/BrainDao.xml index d25b3b1..8550273 100644 --- a/src/main/resources/mapper_dao/BrainDao.xml +++ b/src/main/resources/mapper_dao/BrainDao.xml @@ -31,6 +31,7 @@ + @@ -260,21 +261,25 @@ au.created_at AS trainTime, au.finish_status AS finishStatus, c.capacity, - sum( s.score ) AS score + sum( s.score ) AS score, + a.equipment_id AS equipmentId FROM t_train_active_user au, t_user u, t_train_active_score s, - t_train_classify c + t_train_classify c, + t_train_active a WHERE au.user_id = u.id AND au.id = s.active_user_id AND s.classify_id = c.id + AND au.active_id = a.id AND au.id = #{activeUserId} AND au.rec_status = 0 AND u.rec_status = 0 AND s.rec_status = 0 AND c.rec_status = 0 + AND a.rec_status = 0 GROUP BY au.id, c.capacity diff --git a/src/main/resources/mapper_dao/RaffleActiveDao.xml b/src/main/resources/mapper_dao/RaffleActiveDao.xml new file mode 100644 index 0000000..fc874ed --- /dev/null +++ b/src/main/resources/mapper_dao/RaffleActiveDao.xml @@ -0,0 +1,20 @@ + + + + + + \ No newline at end of file