diff --git a/tcm/src/main/java/com/ccsens/tcm/api/DebugController.java b/tcm/src/main/java/com/ccsens/tcm/api/DebugController.java index ae5014cb..5e9e3c22 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/DebugController.java +++ b/tcm/src/main/java/com/ccsens/tcm/api/DebugController.java @@ -32,13 +32,5 @@ public class DebugController { return JsonResponse.newInstance().ok("测试"); } - @ApiOperation(value = "/测试",notes = "") - @ApiImplicitParams({ - }) - @RequestMapping(value="aaa",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) - public JsonResponse question(HttpServletRequest request) throws Exception { - List reportCodeVoList = importService.getQuestion(); - return JsonResponse.newInstance().ok(reportCodeVoList); - } } diff --git a/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java b/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java new file mode 100644 index 00000000..a48aa914 --- /dev/null +++ b/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java @@ -0,0 +1,42 @@ +package com.ccsens.tcm.api; + +import com.ccsens.tcm.bean.dto.CodeVo; +import com.ccsens.tcm.bean.vo.QuestionVo; +import com.ccsens.tcm.service.IImportService; +import com.ccsens.util.JsonResponse; +import com.ccsens.util.bean.dto.QueryDto; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +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 javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +/** + * @author 逗 + */ +@Slf4j +@Api(tags = "试题相关接口") +@RestController +@RequestMapping("/question") +public class QuestionController { + @Resource + private IImportService importService; + + @ApiOperation(value = "按code查看题目信息,code为空则查询全部",notes = "") + @ApiImplicitParams({}) + @RequestMapping(value="/queryAll",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"}) + public JsonResponse question(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + List reportCodeVoList = importService.getQuestion(params.getParam()); + return JsonResponse.newInstance().ok(reportCodeVoList); + } + +} diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/CodeVo.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/CodeVo.java new file mode 100644 index 00000000..f5169e7e --- /dev/null +++ b/tcm/src/main/java/com/ccsens/tcm/bean/dto/CodeVo.java @@ -0,0 +1,19 @@ +package com.ccsens.tcm.bean.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author 逗 + */ +@Data +public class CodeVo { + @Data + @ApiModel("试题类型") + public static class QuestionCode { + @ApiModelProperty("code") + private String code; + } + +} diff --git a/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java b/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java index 0b3de52d..666bc7f8 100644 --- a/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java +++ b/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java @@ -26,4 +26,11 @@ public interface QuestionDao extends QuestionMapper { * @return code下的题目信息包括选项 */ List queryQuestionByCode(@Param("code") String code); + + /** + * 通过选项id查看选项关联的题目信息 + * @param optionId 选项id + * @return 返回题目id + */ + List queryQuestionByOption(@Param("optionId")Long optionId); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java b/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java index f2ee9cae..8d00842a 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java @@ -1,5 +1,6 @@ package com.ccsens.tcm.service; +import com.ccsens.tcm.bean.dto.CodeVo; import com.ccsens.tcm.bean.vo.QuestionVo; import java.io.File; @@ -29,7 +30,8 @@ public interface IImportService { /** * 查询所有题目 - * @return + * @return 返回题目信息 + * @param param code */ - List getQuestion(); + List getQuestion(CodeVo.QuestionCode param); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java b/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java index 81cd7761..47c41706 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java @@ -2,6 +2,9 @@ package com.ccsens.tcm.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.ccsens.tcm.bean.dto.CodeVo; import com.ccsens.tcm.bean.po.*; import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.persist.dao.QuestionDao; @@ -82,6 +85,8 @@ public class ImportService implements IImportService { List optionList = new ArrayList<>(); //关联的选项的id + Long questionId = null; + Long optionQuestionId = null; Long optionId = null; for(Object[] objs : questions) { if (objs == null || objs.length < 4 || StringUtils.isEmpty(objs[2])) { @@ -94,13 +99,14 @@ public class ImportService implements IImportService { switch (type) { case "题目" : Question question = initQuestion(objs, code, sort,null); + questionId = question.getId(); questionList.add(question); break; case "选项" : if (questionList.isEmpty()) { break; } - QuestionOption option = initOption(objs, questionList.get(questionList.size()-1).getId(), sort); + QuestionOption option = initOption(objs, questionId, sort); optionList.add(option); optionId = option.getId(); break; @@ -110,12 +116,13 @@ public class ImportService implements IImportService { } Question relevanceQuestion = initQuestion(objs, code, sort, optionId); questionList.add(relevanceQuestion); + optionQuestionId = relevanceQuestion.getId(); break; case "关联题目的选项" : if (questionList.isEmpty()) { break; } - QuestionOption relevanceOption = initOption(objs, questionList.get(questionList.size()-1).getId(), sort); + QuestionOption relevanceOption = initOption(objs, optionQuestionId, sort); optionList.add(relevanceOption); break; default: @@ -231,29 +238,88 @@ public class ImportService implements IImportService { if(CollectionUtil.isNotEmpty(reportCodeVos)){ reportCodeVos.forEach(reportCodeVo -> { //查询类型下的题目 - - - reportCodeVo.setQuestionVos(questionDao.queryQuestionByCode(reportCodeVo.getCode())); + List questionVos = getQuestionByCode(reportCodeVo.getCode()); + reportCodeVo.setQuestionVos(questionVos); + //查询子类型下的题目 if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){ reportCodeVo.getSubReportCodes().forEach(subReportCode -> { - //查询子类型下的题目 - subReportCode.setQuestionVos(questionDao.queryQuestionByCode(subReportCode.getCode())); + List subCodeQuestionVos = getQuestionByCode(subReportCode.getCode()); + subReportCode.setQuestionVos(subCodeQuestionVos); + }); + } + }); + //移除原有的试题 + redisUtil.lRemoveLast(Constant.Redis.CODE_QUESTION); + //添加最新的试题 + redisUtil.lSet(Constant.Redis.CODE_QUESTION,reportCodeVos); + } + } + + /** + * 根据code查找题目 + */ + private List getQuestionByCode(String code) { + List subCodeQuestionVos = questionDao.queryQuestionByCode(code); + if(CollectionUtil.isNotEmpty(subCodeQuestionVos)){ + subCodeQuestionVos.forEach(question -> { + if(CollectionUtil.isNotEmpty(question.getOptionVos())){ + question.getOptionVos().forEach(option -> { + if(option.getAfterOperation() == Constant.AFTER_OPERATION){ + option.setQuestionVos(queryOptionQuestion(option.getId())); + } + }); + } + }); + } + return subCodeQuestionVos; + } + + /** + * 查看选项下关联的题目 + */ + private List queryOptionQuestion(Long optionId){ + List questionVos = questionDao.queryQuestionByOption(optionId); + if(CollectionUtil.isNotEmpty(questionVos)){ + questionVos.forEach(question -> { + if(CollectionUtil.isNotEmpty(question.getOptionVos())){ + question.getOptionVos().forEach(option -> { + if(option.getAfterOperation() == Constant.AFTER_OPERATION){ + option.setQuestionVos(queryOptionQuestion(option.getId())); + } }); } }); } - //将试题信息更新进redis - redisUtil.lSet(Constant.Redis.CODE_QUESTION,reportCodeVos); + return questionVos; } + /** * 查看类型下的试题信息 + * @param param */ @Override - public List getQuestion() { - Object objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1); - List reportCodeVos = (List)objects; + public List getQuestion(CodeVo.QuestionCode param) { + List reportCode = new ArrayList<>(); - return reportCodeVos; + List objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1); + List reportCodeVos = (List)objects.get(0); + if(CollectionUtil.isNotEmpty(reportCodeVos)){ + if(StrUtil.isEmpty(param.getCode())){ + return reportCodeVos; + } + reportCodeVos.forEach(reportCodeVo -> { + if(reportCodeVo.getCode().equalsIgnoreCase(param.getCode())){ + reportCode.add(reportCodeVo); + }else if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){ + reportCodeVo.getSubReportCodes().forEach(subReport ->{ + if(subReport.getCode().equalsIgnoreCase(param.getCode())){ + reportCode.add(subReport); + } + }); + } + }); + } + return reportCode; } } diff --git a/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java b/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java index 2b1f7c5d..c9466f2c 100644 --- a/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java +++ b/tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java @@ -21,6 +21,9 @@ public class Constant { /**上传图片访问路径*/ public static final String UPLOAD_URL = "uploads/"; + + /**选择选项后关联其他题目*/ + public final static byte AFTER_OPERATION = 3; /**数字默认值*/ public final static byte NUMBER_DEFAULT = 0; /**排序默认值*/ diff --git a/tcm/src/main/resources/mapper_dao/QuestionDao.xml b/tcm/src/main/resources/mapper_dao/QuestionDao.xml index eccbb8c2..c9797c70 100644 --- a/tcm/src/main/resources/mapper_dao/QuestionDao.xml +++ b/tcm/src/main/resources/mapper_dao/QuestionDao.xml @@ -74,5 +74,30 @@ and q.`code` = #{code} + + \ No newline at end of file diff --git a/util/src/main/java/com/ccsens/util/RedisUtil.java b/util/src/main/java/com/ccsens/util/RedisUtil.java index 46975d57..fcbe16d6 100644 --- a/util/src/main/java/com/ccsens/util/RedisUtil.java +++ b/util/src/main/java/com/ccsens/util/RedisUtil.java @@ -1,5 +1,6 @@ package com.ccsens.util; +import cn.hutool.core.util.ObjectUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.ZSetOperations; @@ -566,6 +567,21 @@ public class RedisUtil { return 0; } } + + /** + * 移除列表的最后一个值 + * @param key 键 + */ + public Object lRemoveLast(String key) { + try { + Object o = redisTemplate.opsForList().leftPop(key); + return o; + } catch (Exception e) { + e.printStackTrace(); + return 0; + } + } + //===============================zset================================= /** * 获取sort set缓存的内容