Browse Source

20210201

recovery
zy_Java 5 years ago
parent
commit
36c713b076
  1. 8
      tcm/src/main/java/com/ccsens/tcm/api/DebugController.java
  2. 42
      tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java
  3. 19
      tcm/src/main/java/com/ccsens/tcm/bean/dto/CodeVo.java
  4. 7
      tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java
  5. 6
      tcm/src/main/java/com/ccsens/tcm/service/IImportService.java
  6. 92
      tcm/src/main/java/com/ccsens/tcm/service/ImportService.java
  7. 3
      tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java
  8. 25
      tcm/src/main/resources/mapper_dao/QuestionDao.xml
  9. 16
      util/src/main/java/com/ccsens/util/RedisUtil.java

8
tcm/src/main/java/com/ccsens/tcm/api/DebugController.java

@ -32,13 +32,5 @@ public class DebugController {
return JsonResponse.newInstance().ok("测试"); 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<QuestionVo.ReportCodeVo> reportCodeVoList = importService.getQuestion();
return JsonResponse.newInstance().ok(reportCodeVoList);
}
} }

42
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<CodeVo.QuestionCode> params) throws Exception {
List<QuestionVo.ReportCodeVo> reportCodeVoList = importService.getQuestion(params.getParam());
return JsonResponse.newInstance().ok(reportCodeVoList);
}
}

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

7
tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java

@ -26,4 +26,11 @@ public interface QuestionDao extends QuestionMapper {
* @return code下的题目信息包括选项 * @return code下的题目信息包括选项
*/ */
List<QuestionVo.CodeQuestionVo> queryQuestionByCode(@Param("code") String code); List<QuestionVo.CodeQuestionVo> queryQuestionByCode(@Param("code") String code);
/**
* 通过选项id查看选项关联的题目信息
* @param optionId 选项id
* @return 返回题目id
*/
List<QuestionVo.CodeQuestionVo> queryQuestionByOption(@Param("optionId")Long optionId);
} }

6
tcm/src/main/java/com/ccsens/tcm/service/IImportService.java

@ -1,5 +1,6 @@
package com.ccsens.tcm.service; package com.ccsens.tcm.service;
import com.ccsens.tcm.bean.dto.CodeVo;
import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.bean.vo.QuestionVo;
import java.io.File; import java.io.File;
@ -29,7 +30,8 @@ public interface IImportService {
/** /**
* 查询所有题目 * 查询所有题目
* @return * @return 返回题目信息
* @param param code
*/ */
List<QuestionVo.ReportCodeVo> getQuestion(); List<QuestionVo.ReportCodeVo> getQuestion(CodeVo.QuestionCode param);
} }

92
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.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 com.ccsens.tcm.bean.dto.CodeVo;
import com.ccsens.tcm.bean.po.*; import com.ccsens.tcm.bean.po.*;
import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.persist.dao.QuestionDao; import com.ccsens.tcm.persist.dao.QuestionDao;
@ -82,6 +85,8 @@ public class ImportService implements IImportService {
List<QuestionOption> optionList = new ArrayList<>(); List<QuestionOption> optionList = new ArrayList<>();
//关联的选项的id //关联的选项的id
Long questionId = null;
Long optionQuestionId = null;
Long optionId = null; Long optionId = null;
for(Object[] objs : questions) { for(Object[] objs : questions) {
if (objs == null || objs.length < 4 || StringUtils.isEmpty(objs[2])) { if (objs == null || objs.length < 4 || StringUtils.isEmpty(objs[2])) {
@ -94,13 +99,14 @@ public class ImportService implements IImportService {
switch (type) { switch (type) {
case "题目" : case "题目" :
Question question = initQuestion(objs, code, sort,null); Question question = initQuestion(objs, code, sort,null);
questionId = question.getId();
questionList.add(question); questionList.add(question);
break; break;
case "选项" : case "选项" :
if (questionList.isEmpty()) { if (questionList.isEmpty()) {
break; break;
} }
QuestionOption option = initOption(objs, questionList.get(questionList.size()-1).getId(), sort); QuestionOption option = initOption(objs, questionId, sort);
optionList.add(option); optionList.add(option);
optionId = option.getId(); optionId = option.getId();
break; break;
@ -110,12 +116,13 @@ public class ImportService implements IImportService {
} }
Question relevanceQuestion = initQuestion(objs, code, sort, optionId); Question relevanceQuestion = initQuestion(objs, code, sort, optionId);
questionList.add(relevanceQuestion); questionList.add(relevanceQuestion);
optionQuestionId = relevanceQuestion.getId();
break; break;
case "关联题目的选项" : case "关联题目的选项" :
if (questionList.isEmpty()) { if (questionList.isEmpty()) {
break; break;
} }
QuestionOption relevanceOption = initOption(objs, questionList.get(questionList.size()-1).getId(), sort); QuestionOption relevanceOption = initOption(objs, optionQuestionId, sort);
optionList.add(relevanceOption); optionList.add(relevanceOption);
break; break;
default: default:
@ -231,29 +238,88 @@ public class ImportService implements IImportService {
if(CollectionUtil.isNotEmpty(reportCodeVos)){ if(CollectionUtil.isNotEmpty(reportCodeVos)){
reportCodeVos.forEach(reportCodeVo -> { reportCodeVos.forEach(reportCodeVo -> {
//查询类型下的题目 //查询类型下的题目
List<QuestionVo.CodeQuestionVo> questionVos = getQuestionByCode(reportCodeVo.getCode());
reportCodeVo.setQuestionVos(questionVos);
reportCodeVo.setQuestionVos(questionDao.queryQuestionByCode(reportCodeVo.getCode())); //查询子类型下的题目
if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){ if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){
reportCodeVo.getSubReportCodes().forEach(subReportCode -> { reportCodeVo.getSubReportCodes().forEach(subReportCode -> {
//查询子类型下的题目 List<QuestionVo.CodeQuestionVo> subCodeQuestionVos = getQuestionByCode(subReportCode.getCode());
subReportCode.setQuestionVos(questionDao.queryQuestionByCode(subReportCode.getCode())); subReportCode.setQuestionVos(subCodeQuestionVos);
});
}
});
//移除原有的试题
redisUtil.lRemoveLast(Constant.Redis.CODE_QUESTION);
//添加最新的试题
redisUtil.lSet(Constant.Redis.CODE_QUESTION,reportCodeVos);
}
}
/**
* 根据code查找题目
*/
private List<QuestionVo.CodeQuestionVo> getQuestionByCode(String code) {
List<QuestionVo.CodeQuestionVo> 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<QuestionVo.CodeQuestionVo> queryOptionQuestion(Long optionId){
List<QuestionVo.CodeQuestionVo> 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 return questionVos;
redisUtil.lSet(Constant.Redis.CODE_QUESTION,reportCodeVos);
} }
/** /**
* 查看类型下的试题信息 * 查看类型下的试题信息
* @param param
*/ */
@Override @Override
public List<QuestionVo.ReportCodeVo> getQuestion() { public List<QuestionVo.ReportCodeVo> getQuestion(CodeVo.QuestionCode param) {
Object objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1); List<QuestionVo.ReportCodeVo> reportCode = new ArrayList<>();
List<QuestionVo.ReportCodeVo> reportCodeVos = (List<QuestionVo.ReportCodeVo>)objects;
return reportCodeVos; List<Object> objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1);
List<QuestionVo.ReportCodeVo> reportCodeVos = (List<QuestionVo.ReportCodeVo>)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;
} }
} }

3
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 static final String UPLOAD_URL = "uploads/";
/**选择选项后关联其他题目*/
public final static byte AFTER_OPERATION = 3;
/**数字默认值*/ /**数字默认值*/
public final static byte NUMBER_DEFAULT = 0; public final static byte NUMBER_DEFAULT = 0;
/**排序默认值*/ /**排序默认值*/

25
tcm/src/main/resources/mapper_dao/QuestionDao.xml

@ -74,5 +74,30 @@
and q.`code` = #{code} and q.`code` = #{code}
</select> </select>
<select id="queryQuestionByOption" resultMap="queryQuestionByCode">
SELECT
q.id as qid,
q.question as qquestion,
q.`code` as qcode,
q.sort as qsort,
q.units as qunits,
q.type as qtype,
q.relevance_option_id as qrelevance_option_id,
q.search_criteria as qsearch_criteria,
q.remark as qremark,
o.id as oid,
o.question_id as oquestion_id,
o.sort as osort,
o.show_value as oshow_value,
o.submit_value as osubmit_value,
o.after_operation as oafter_operation
FROM
t_question q
LEFT JOIN t_question_option o on q.id = o.question_id and o.rec_status = 0
WHERE
q.rec_status = 0
and q.relevance_option_id = #{optionId}
</select>
</mapper> </mapper>

16
util/src/main/java/com/ccsens/util/RedisUtil.java

@ -1,5 +1,6 @@
package com.ccsens.util; package com.ccsens.util;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations; import org.springframework.data.redis.core.ZSetOperations;
@ -566,6 +567,21 @@ public class RedisUtil {
return 0; 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================================= //===============================zset=================================
/** /**
* 获取sort set缓存的内容 * 获取sort set缓存的内容

Loading…
Cancel
Save