Browse Source

20210129将code和试题存入redis

recovery
zy_Java 5 years ago
parent
commit
3ddf961ef6
  1. 14
      tcm/src/main/java/com/ccsens/tcm/api/DebugController.java
  2. 9
      tcm/src/main/java/com/ccsens/tcm/api/ImportController.java
  3. 78
      tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java
  4. 10
      tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java
  5. 7
      tcm/src/main/java/com/ccsens/tcm/persist/dao/ReportCodeDao.java
  6. 14
      tcm/src/main/java/com/ccsens/tcm/service/IImportService.java
  7. 52
      tcm/src/main/java/com/ccsens/tcm/service/ImportService.java
  8. 7
      tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java
  9. 47
      tcm/src/main/resources/mapper_dao/QuestionDao.xml
  10. 62
      tcm/src/main/resources/mapper_dao/ReportCodeDao.xml

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

@ -1,5 +1,7 @@
package com.ccsens.tcm.api;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.service.IImportService;
import com.ccsens.util.JsonResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParams;
@ -9,13 +11,17 @@ 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;
@Api(tags = "DEBUG" , description = "DebugController | ")
@RestController
@RequestMapping("/debug")
@Slf4j
public class DebugController {
@Resource
private IImportService importService;
@ApiOperation(value = "/测试",notes = "")
@ApiImplicitParams({
@ -26,5 +32,13 @@ 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<QuestionVo.ReportCodeVo> reportCodeVoList = importService.getQuestion();
return JsonResponse.newInstance().ok(reportCodeVoList);
}
}

9
tcm/src/main/java/com/ccsens/tcm/api/ImportController.java

@ -57,4 +57,13 @@ public class ImportController {
return JsonResponse.newInstance().ok();
}
@ApiOperation(value = "更新redis内的试题",notes = "")
@ApiImplicitParams({})
@RequestMapping(value = "/updateRedis", method = RequestMethod.POST)
public JsonResponse updateRedis() throws Exception{
importService.updateRedis();
log.info("更新redis内的试题成功");
return JsonResponse.newInstance().ok();
}
}

78
tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java

@ -0,0 +1,78 @@
package com.ccsens.tcm.bean.vo;
import lombok.Data;
import java.util.List;
/**
* @author
*/
public class QuestionVo {
@Data
public static class ReportCodeVo {
//id
private Long id;
//code
private String code;
//名称
private String name;
//上级code
private String parentCode;
//是否为必做
private Byte must;
//第几级code
private Byte level;
//排序
private Integer sort;
//备注
private String remark;
//记录类型
private Byte reportType;
//子类型
private List<ReportCodeVo> subReportCodes;
//题目信息
private List<CodeQuestionVo> questionVos;
}
@Data
public static class CodeQuestionVo {
//id
private Long id;
//题目名称
private String question;
//code
private String code;
//排序
private Integer sort;
//单位例如 g/L
private String units;
//类型 1单行文本,2多行文本,3单选,4多选,5下拉菜单,6日期,7图片(文件),8单选+其他,
// 9多选+其他,10下拉+其他,11多选+其他+说明,12单选+关联其他内容 13数字类型
private Byte type;
//关联的选项id
private Long relevanceOptionId;
//是否是搜索条件
private Byte searchCriteria;
//备注
private String remark;
//选项信息
private List<QuestionOptionVo> optionVos;
}
@Data
public static class QuestionOptionVo {
//id
private Long id;
//题目id
private Long questionId;
//排序
private Integer sort;
//显示值
private String showValue;
//提交值
private String submitValue;
//选择之后的操作 0无 1单行文本 2多行文本 3关联其他题目
private Byte afterOperation;
//选择之后关联的题目
private List<CodeQuestionVo> questionVos;
}
}

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

@ -1,7 +1,9 @@
package com.ccsens.tcm.persist.dao;
import com.ccsens.tcm.bean.po.Question;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.persist.mapper.QuestionMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@ -16,4 +18,12 @@ public interface QuestionDao extends QuestionMapper {
* @param questionList 读取的题目
*/
void insertBatch(List<Question> questionList);
/**
* 根据code查询所有题目
* @param code code
* @return code下的题目信息包括选项
*/
List<QuestionVo.CodeQuestionVo> queryQuestionByCode(@Param("code") String code);
}

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

@ -1,6 +1,7 @@
package com.ccsens.tcm.persist.dao;
import com.ccsens.tcm.bean.po.ReportCode;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.persist.mapper.ReportCodeMapper;
import org.springframework.stereotype.Repository;
@ -16,4 +17,10 @@ public interface ReportCodeDao extends ReportCodeMapper {
* @param reportList 从表里读取的类型对象数组
*/
void insertBatch(List<ReportCode> reportList);
/**
* 查找全部code
* @return 返回code包括子code
*/
List<QuestionVo.ReportCodeVo> selectCode();
}

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

@ -1,6 +1,9 @@
package com.ccsens.tcm.service;
import com.ccsens.tcm.bean.vo.QuestionVo;
import java.io.File;
import java.util.List;
/**
* @author
@ -18,4 +21,15 @@ public interface IImportService {
* @param codeBsxg sheet名
*/
void importBsxg(File excelFile, String codeBsxg) throws Exception;
/**
* 更新redis内的试题
*/
void updateRedis();
/**
* 查询所有题目
* @return
*/
List<QuestionVo.ReportCodeVo> getQuestion();
}

52
tcm/src/main/java/com/ccsens/tcm/service/ImportService.java

@ -1,16 +1,15 @@
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.alibaba.fastjson.JSONObject;
import com.ccsens.tcm.bean.po.*;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.persist.dao.QuestionDao;
import com.ccsens.tcm.persist.dao.QuestionOptionDao;
import com.ccsens.tcm.persist.dao.ReportCodeDao;
import com.ccsens.tcm.uitl.Constant;
import com.ccsens.util.PoiUtil;
import com.ccsens.util.PropUtil;
import com.ccsens.util.RedisUtil;
import com.ccsens.util.StringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@ -38,6 +37,8 @@ public class ImportService implements IImportService {
private QuestionDao questionDao;
@Resource
private QuestionOptionDao questionOptionDao;
@Resource
private RedisUtil redisUtil;
@Override
public void importReport(File excelFile) throws Exception {
@ -69,14 +70,14 @@ public class ImportService implements IImportService {
log.info("导入试题类型:{}", types);
for (String sheetName: types) {
List<Object[]> questions = PoiUtil.readExce(excelFile, -1, sheetName,1, true);
saveQuestions(questions, sheetName);
saveQuestions(questions);
}
}
/**
* 保存试题
* */
private void saveQuestions(List<Object[]> questions , String evaluationCode) throws Exception{
private void saveQuestions(List<Object[]> questions) {
List<Question> questionList = new ArrayList<>();
List<QuestionOption> optionList = new ArrayList<>();
@ -188,8 +189,6 @@ public class ImportService implements IImportService {
return report;
}
/**
* 初始化试题
* @param objs 表格内读取的数据
@ -220,4 +219,41 @@ public class ImportService implements IImportService {
log.info("导入试题:{}", question);
return question;
}
/**
* 更新redis内的试题
*/
@Override
public void updateRedis() {
//查询所有的类型
List<QuestionVo.ReportCodeVo> reportCodeVos = reportCodeDao.selectCode();
//查询所有类型下的试题
if(CollectionUtil.isNotEmpty(reportCodeVos)){
reportCodeVos.forEach(reportCodeVo -> {
//查询类型下的题目
reportCodeVo.setQuestionVos(questionDao.queryQuestionByCode(reportCodeVo.getCode()));
if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){
reportCodeVo.getSubReportCodes().forEach(subReportCode -> {
//查询子类型下的题目
subReportCode.setQuestionVos(questionDao.queryQuestionByCode(subReportCode.getCode()));
});
}
});
}
//将试题信息更新进redis
redisUtil.lSet(Constant.Redis.CODE_QUESTION,reportCodeVos);
}
/**
* 查看类型下的试题信息
*/
@Override
public List<QuestionVo.ReportCodeVo> getQuestion() {
Object objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1);
List<QuestionVo.ReportCodeVo> reportCodeVos = (List<QuestionVo.ReportCodeVo>)objects;
return reportCodeVos;
}
}

7
tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java

@ -53,4 +53,11 @@ public class Constant {
}
}
public static class Redis {
/**发病时间*/
public final static String DISEASE_TIME = "disease_time";
/**所有题目按code分类*/
public final static String CODE_QUESTION = "code_question";
}
}

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

@ -28,4 +28,51 @@
</foreach>
</insert>
<resultMap id="queryQuestionByCode" type="com.ccsens.tcm.bean.vo.QuestionVo$CodeQuestionVo">
<id column="qid" jdbcType="BIGINT" property="id" />
<result column="qquestion" jdbcType="VARCHAR" property="question" />
<result column="qcode" jdbcType="VARCHAR" property="code" />
<result column="qsort" jdbcType="INTEGER" property="sort" />
<result column="qunits" jdbcType="VARCHAR" property="units" />
<result column="qtype" jdbcType="TINYINT" property="type" />
<result column="qrelevance_option_id" jdbcType="BIGINT" property="relevanceOptionId" />
<result column="qsearch_criteria" jdbcType="TINYINT" property="searchCriteria" />
<result column="qremark" jdbcType="VARCHAR" property="remark" />
<collection property="optionVos" ofType="com.ccsens.tcm.bean.vo.QuestionVo$QuestionOptionVo">
<id column="oid" jdbcType="BIGINT" property="id" />
<result column="oquestion_id" jdbcType="BIGINT" property="questionId" />
<result column="osort" jdbcType="INTEGER" property="sort" />
<result column="oshow_value" jdbcType="VARCHAR" property="showValue" />
<result column="osubmit_value" jdbcType="VARCHAR" property="submitValue" />
<result column="oafter_operation" jdbcType="TINYINT" property="afterOperation" />
</collection>
</resultMap>
<select id="queryQuestionByCode" 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.relevance_option_id = 0
and q.rec_status = 0
and q.`code` = #{code}
</select>
</mapper>

62
tcm/src/main/resources/mapper_dao/ReportCodeDao.xml

@ -26,7 +26,67 @@
#{report.parentCode,jdbcType=VARCHAR}, #{report.must,jdbcType=TINYINT}, #{report.level,jdbcType=TINYINT},
#{report.sort,jdbcType=INTEGER}, #{report.remark,jdbcType=VARCHAR}, #{report.reportType,jdbcType=TINYINT})
</foreach>
</insert>
</insert>
<resultMap id="selectCodeAll" type="com.ccsens.tcm.bean.vo.QuestionVo$ReportCodeVo">
<id column="fId" jdbcType="BIGINT" property="id" />
<result column="fCode" jdbcType="VARCHAR" property="code" />
<result column="fName" jdbcType="VARCHAR" property="name" />
<result column="fParentId" jdbcType="VARCHAR" property="parentCode" />
<result column="fMust" jdbcType="TINYINT" property="must" />
<result column="fLevel" jdbcType="TINYINT" property="level" />
<result column="fSort" jdbcType="INTEGER" property="sort" />
<result column="fRemark" jdbcType="VARCHAR" property="remark" />
<result column="fReportType" jdbcType="TINYINT" property="reportType" />
<collection property="subReportCodes" ofType="com.ccsens.tcm.bean.vo.QuestionVo$ReportCodeVo">
<id column="sId" jdbcType="BIGINT" property="id" />
<result column="sParentId" jdbcType="BIGINT" property="parentCode" />
<result column="sCode" jdbcType="VARCHAR" property="code" />
<result column="sName" jdbcType="VARCHAR" property="name" />
<result column="sMust" jdbcType="TINYINT" property="must" />
<result column="sLevel" jdbcType="TINYINT" property="level" />
<result column="sSort" jdbcType="INTEGER" property="sort" />
<result column="sRemark" jdbcType="VARCHAR" property="remark" />
<result column="sReportType" jdbcType="TINYINT" property="reportType" />
</collection>
</resultMap>
<select id="selectCode" resultMap="selectCodeAll">
SELECT
c1.id as fId,
c1.code as fCode,
c1.`name` as fName,
c1.parent_code as fParentId,
c1.must as fMust,
c1.`level` as fLevel,
c1.sort as fSort,
c1.remark as fRemark,
c1.report_type as fReportType,
c2.id as sId,
c2.code as sCode,
c2.`name` as sName,
c2.parent_code as sParentId,
c2.must as sMust,
c2.`level` as sLevel,
c2.sort as sSort,
c2.remark as sRemark,
c2.report_type as sReportType
FROM
t_report_code c1
LEFT JOIN (
SELECT
*
FROM
t_report_code
WHERE
`level` = 2
and rec_status = 0
) c2 on c1.`code` = c2.parent_code
WHERE
c1.`level` = 1
and c1.rec_status = 0
</select>
</mapper>
Loading…
Cancel
Save