Browse Source

新建导入接口

master
zhangye 3 years ago
parent
commit
064fe254ac
  1. 35
      src/main/java/com/ccsens/braintraining/api/BrainController.java
  2. 2
      src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java
  3. 22
      src/main/java/com/ccsens/braintraining/persist/dao/RaffleActiveDao.java
  4. 37
      src/main/java/com/ccsens/braintraining/service/BrainService.java
  5. 15
      src/main/java/com/ccsens/braintraining/service/IImportService.java
  6. 27
      src/main/java/com/ccsens/braintraining/service/ImportService.java
  7. 18
      src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java
  8. 2
      src/main/resources/application.yml
  9. 9
      src/main/resources/mapper_dao/BrainDao.xml
  10. 20
      src/main/resources/mapper_dao/RaffleActiveDao.xml

35
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.dto.BrainDto;
import com.ccsens.braintraining.bean.vo.BrainVo; import com.ccsens.braintraining.bean.vo.BrainVo;
import com.ccsens.braintraining.service.IBrainService; import com.ccsens.braintraining.service.IBrainService;
import com.ccsens.braintraining.service.IImportService;
import com.ccsens.util.JsonResponse; import com.ccsens.util.JsonResponse;
import com.ccsens.util.UploadFileUtil_Servlet3;
import com.ccsens.util.WebConstant;
import com.ccsens.util.bean.dto.QueryDto; import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api; import io.swagger.annotations.*;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.http.Part;
import java.io.File;
import java.util.List; import java.util.List;
/** /**
@ -32,6 +32,8 @@ public class BrainController {
@Resource @Resource
private IBrainService brainService; private IBrainService brainService;
@Resource
private IImportService importService;
@ApiOperation(value = "脑力测评排名") @ApiOperation(value = "脑力测评排名")
@RequestMapping(value = "/rank", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RequestMapping(value = "/rank", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
@ -70,6 +72,8 @@ public class BrainController {
log.info("保存答案结束"); log.info("保存答案结束");
return JsonResponse.newInstance().ok(); return JsonResponse.newInstance().ok();
} }
@MustLogin
@ApiOperation(value = "查询认知筛查报告") @ApiOperation(value = "查询认知筛查报告")
@RequestMapping(value = "/queryGrade", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) @RequestMapping(value = "/queryGrade", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<BrainVo.ActiveUserScore> queryGrade(@ApiParam @Validated @RequestBody QueryDto<BrainDto.ActiveUser> params) { public JsonResponse<BrainVo.ActiveUserScore> queryGrade(@ApiParam @Validated @RequestBody QueryDto<BrainDto.ActiveUser> params) {
@ -79,4 +83,21 @@ public class BrainController {
return JsonResponse.newInstance().ok(score); 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();
}
} }

2
src/main/java/com/ccsens/braintraining/bean/vo/BrainVo.java

@ -27,6 +27,8 @@ public class BrainVo {
public static class ActiveUserScore { public static class ActiveUserScore {
@ApiModelProperty("活动用户ID") @ApiModelProperty("活动用户ID")
private Long activeUserId; private Long activeUserId;
@ApiModelProperty("设备id")
private Long equipmentId;
@ApiModelProperty("头像,无,则给默认头像") @ApiModelProperty("头像,无,则给默认头像")
private String avatarUrl; private String avatarUrl;
@ApiModelProperty("测评时间") @ApiModelProperty("测评时间")

22
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);
}

37
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.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; 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.RuleGenerateVo;
import com.ccsens.braintraining.bean.vo.RuleScoreVo; import com.ccsens.braintraining.bean.vo.RuleScoreVo;
import com.ccsens.braintraining.persist.dao.BrainDao; import com.ccsens.braintraining.persist.dao.BrainDao;
import com.ccsens.braintraining.persist.dao.RaffleActiveDao;
import com.ccsens.braintraining.persist.mapper.*; import com.ccsens.braintraining.persist.mapper.*;
import com.ccsens.braintraining.util.BrainTrainingCodeError; import com.ccsens.braintraining.util.BrainTrainingCodeError;
import com.ccsens.braintraining.util.BrainTrainingConstant; import com.ccsens.braintraining.util.BrainTrainingConstant;
@ -53,6 +55,10 @@ public class BrainService implements IBrainService {
private TrainRuleScoreMapper trainRuleScoreMapper; private TrainRuleScoreMapper trainRuleScoreMapper;
@Resource @Resource
private TrainClassifyMapper trainClassifyMapper; private TrainClassifyMapper trainClassifyMapper;
@Resource
private RaffleActiveDao raffleActiveDao;
@Resource
private RaffleTimesMapper raffleTimesMapper;
@Override @Override
public BrainVo.Active generateTest(BrainDto.Equipment param, Long userId) { 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); record.setFinishStatus(BrainTrainingConstant.Train.TRAINING_FINISH_CLOSE);
trainActiveUserMapper.updateByPrimaryKeySelective(record); trainActiveUserMapper.updateByPrimaryKeySelective(record);
log.info("修改用户活动:{}的状态为完成", param.getActiveUserId()); 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<RaffleTimes> 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; return score;
} }
@ -274,9 +307,7 @@ public class BrainService implements IBrainService {
private BigDecimal getSpaceScore(Long activeUserId, Long classifyId, Long now, List<BrainDto.UserAnswer> answerParams, String calculateParam) { private BigDecimal getSpaceScore(Long activeUserId, Long classifyId, Long now, List<BrainDto.UserAnswer> answerParams, String calculateParam) {
// 正确的个数 // 正确的个数
List<Long> questionIds = new ArrayList<>(); List<Long> questionIds = new ArrayList<>();
answerParams.forEach(answerParam->{ answerParams.forEach(answerParam-> questionIds.add(answerParam.getQuestionId()));
questionIds.add(answerParam.getQuestionId());
});
List<BrainVo.QuestionAnswer> answers = brainDao.queryQuestionAnswers(activeUserId, questionIds); List<BrainVo.QuestionAnswer> answers = brainDao.queryQuestionAnswers(activeUserId, questionIds);
Map<Long, List<String>> answerMap = new HashMap<>(); Map<Long, List<String>> answerMap = new HashMap<>();
answers.forEach(questionAnswer->{ answers.forEach(questionAnswer->{

15
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;
}

27
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<String> questionType = BrainTrainingConstant.QUESTION_TYPE;
for (String sheetName: questionType) {
List<Object[]> questions = PoiUtil.readExce(excelFile, -1, sheetName,1, true);
saveQuestions(questions, sheetName);
}
}
private void saveQuestions(List<Object[]> questions, String sheetName) {
System.out.println(questions);
System.out.println(sheetName);
}
}

18
src/main/java/com/ccsens/braintraining/util/BrainTrainingConstant.java

@ -2,6 +2,11 @@ package com.ccsens.braintraining.util;
import com.ccsens.util.WebConstant; import com.ccsens.util.WebConstant;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/** /**
* @description: * @description:
* @author: whj * @author: whj
@ -101,4 +106,17 @@ public class BrainTrainingConstant extends WebConstant {
public final static byte PRIZE_TYPE_THANKS = 0; public final static byte PRIZE_TYPE_THANKS = 0;
} }
/**测评分类*/
public final static List<String> 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");
}
} }

2
src/main/resources/application.yml

@ -1,4 +1,4 @@
spring: spring:
profiles: profiles:
active: test active: dev
include: common include: common

9
src/main/resources/mapper_dao/BrainDao.xml

@ -31,6 +31,7 @@
<result column="avatarUrl" property="avatarUrl"/> <result column="avatarUrl" property="avatarUrl"/>
<result column="trainTime" property="trainTime"/> <result column="trainTime" property="trainTime"/>
<result column="finishStatus" property="finishStatus"/> <result column="finishStatus" property="finishStatus"/>
<result column="equipmentId" property="equipmentId"/>
<collection property="scores" ofType="com.ccsens.braintraining.bean.vo.BrainVo$CapacityScore"> <collection property="scores" ofType="com.ccsens.braintraining.bean.vo.BrainVo$CapacityScore">
<id column="capacity" property="capacity"/> <id column="capacity" property="capacity"/>
<id column="score" property="score"/> <id column="score" property="score"/>
@ -260,21 +261,25 @@
au.created_at AS trainTime, au.created_at AS trainTime,
au.finish_status AS finishStatus, au.finish_status AS finishStatus,
c.capacity, c.capacity,
sum( s.score ) AS score sum( s.score ) AS score,
a.equipment_id AS equipmentId
FROM FROM
t_train_active_user au, t_train_active_user au,
t_user u, t_user u,
t_train_active_score s, t_train_active_score s,
t_train_classify c t_train_classify c,
t_train_active a
WHERE WHERE
au.user_id = u.id au.user_id = u.id
AND au.id = s.active_user_id AND au.id = s.active_user_id
AND s.classify_id = c.id AND s.classify_id = c.id
AND au.active_id = a.id
AND au.id = #{activeUserId} AND au.id = #{activeUserId}
AND au.rec_status = 0 AND au.rec_status = 0
AND u.rec_status = 0 AND u.rec_status = 0
AND s.rec_status = 0 AND s.rec_status = 0
AND c.rec_status = 0 AND c.rec_status = 0
AND a.rec_status = 0
GROUP BY GROUP BY
au.id, au.id,
c.capacity c.capacity

20
src/main/resources/mapper_dao/RaffleActiveDao.xml

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ccsens.braintraining.persist.dao.RaffleActiveDao">
<select id="queryTrainTask" resultType="java.lang.Long">
SELECT
t.id
FROM
t_raffle_active a,
t_raffle_task t
WHERE
a.id = t.active_id
and t.type = 2
and a.equipment_id = #{equipmentId}
and a.start_time &lt;= #{now}
and a.end_time > #{now}
and a.rec_status = 0
and t.rec_status = 0
</select>
</mapper>
Loading…
Cancel
Save