Browse Source

Merge branch 'pt' of dd.tall.wiki:ccsens_wiki/ccsenscloud into pt

recovery
wang1007152140 5 years ago
parent
commit
5a50bb534d
  1. 8
      tcm/src/main/java/com/ccsens/tcm/api/DebugController.java
  2. 41
      tcm/src/main/java/com/ccsens/tcm/api/InpatientController.java
  3. 1
      tcm/src/main/java/com/ccsens/tcm/api/PatientController.java
  4. 51
      tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java
  5. 19
      tcm/src/main/java/com/ccsens/tcm/bean/dto/CodeVo.java
  6. 1
      tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java
  7. 20
      tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java
  8. 23
      tcm/src/main/java/com/ccsens/tcm/bean/vo/InpatientVo.java
  9. 67
      tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java
  10. 7
      tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java
  11. 6
      tcm/src/main/java/com/ccsens/tcm/service/IImportService.java
  12. 18
      tcm/src/main/java/com/ccsens/tcm/service/IInpatientService.java
  13. 89
      tcm/src/main/java/com/ccsens/tcm/service/ImportService.java
  14. 44
      tcm/src/main/java/com/ccsens/tcm/service/InpatientService.java
  15. 3
      tcm/src/main/java/com/ccsens/tcm/uitl/Constant.java
  16. 5
      tcm/src/main/resources/application.yml
  17. 25
      tcm/src/main/resources/mapper_dao/QuestionDao.xml
  18. 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("测试");
}
@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);
}
}

41
tcm/src/main/java/com/ccsens/tcm/api/InpatientController.java

@ -0,0 +1,41 @@
package com.ccsens.tcm.api;
import com.ccsens.tcm.bean.dto.CodeVo;
import com.ccsens.tcm.bean.vo.InpatientVo;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.service.IInpatientService;
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 java.util.List;
/**
* @author
*/
@Slf4j
@Api(tags = "对照组相关接口")
@RestController
@RequestMapping("/inpatient")
public class InpatientController {
@Resource
private IInpatientService inpatientService;
@ApiOperation(value = "查询所有对照组的信息",notes = "")
@ApiImplicitParams({})
@RequestMapping(value="/query",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<InpatientVo.InpatientInfo>> queryInpatient() throws Exception {
List<InpatientVo.InpatientInfo> inpatientInfos = inpatientService.queryInpatient();
return JsonResponse.newInstance().ok(inpatientInfos);
}
}

1
tcm/src/main/java/com/ccsens/tcm/api/PatientController.java

@ -76,4 +76,5 @@ public class PatientController {
return JsonResponse.newInstance().ok(selSearchCriteriaList);
}
}

51
tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java

@ -0,0 +1,51 @@
package com.ccsens.tcm.api;
import com.ccsens.tcm.bean.dto.CodeVo;
import com.ccsens.tcm.bean.dto.QuestionDto;
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 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.POST,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);
}
// @ApiOperation(value = "查看试题及患者的答案",notes = "")
// @ApiImplicitParams({})
// @RequestMapping(value="/query",method = RequestMethod.GET,produces = {"application/json;charset=UTF-8"})
// public JsonResponse<List<QuestionVo.PatientCode>> queryQuestionAndAnswer(@ApiParam @Validated @RequestBody QueryDto<QuestionDto.QueryQuestionAndAnswer> params) throws Exception {
// List<QuestionVo.PatientCode> patientCodes = importService.getQuestionAndAnswer(params.getParam());
// return JsonResponse.newInstance().ok(patientCodes);
// }
}

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

1
tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java

@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import sun.awt.ConstrainableGraphics;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;

20
tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java

@ -0,0 +1,20 @@
package com.ccsens.tcm.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
*/
@Data
public class QuestionDto {
@Data
@ApiModel("查询患者答题信息及答案")
public static class QueryQuestionAndAnswer {
@ApiModelProperty("试题code")
private String code;
@ApiModelProperty("第几次录入信息,1代表第0天或180天,2代表第14天或者第365天,3代表第90天")
private int nums;
}
}

23
tcm/src/main/java/com/ccsens/tcm/bean/vo/InpatientVo.java

@ -0,0 +1,23 @@
package com.ccsens.tcm.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author
*/
public class InpatientVo {
@Data
@ApiModel("查询所有对照组信息")
public static class InpatientInfo{
@ApiModelProperty("对照组id")
private Long id;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("备注")
private String remarks;
@ApiModelProperty("采集次数")
private int collectionNum;
}
}

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

@ -1,5 +1,7 @@
package com.ccsens.tcm.bean.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@ -75,4 +77,69 @@ public class QuestionVo {
//选择之后关联的题目
private List<CodeQuestionVo> questionVos;
}
@Data
@ApiModel("患者信息的试题类型")
public static class PatientCode {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("code")
private String code;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("是否为必做 0否 1是")
private byte must;
@ApiModelProperty("排序")
private int sort;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("第几次记录,默认为0代表第一次记录,14代表第14天记录的信息")
private int reportNums;
@ApiModelProperty("记录类型 0:只记录1次数据,1:记录3次,分别为0,14,90天 ,2:记录两次,分别是180,365")
private byte reportType;
@ApiModelProperty("题目信息")
private List<PatientQuestion> questionList;
@ApiModelProperty("子类型")
private List<PatientCode> subCodes;
}
@Data
@ApiModel("患者的答题信息试题")
public static class PatientQuestion {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("题目名称")
private String question;
@ApiModelProperty("排序")
private int sort;
@ApiModelProperty("单位例如 g/L")
private String units;
@ApiModelProperty("类型 1单行文本,2多行文本,3单选,4多选,5下拉菜单,6日期,7图片(文件),8单选+其他,9多选+其他,10下拉+其他,11多选+其他+说明,12单选+关联其他内容 13数字类型")
private byte type;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("答案")
private String answer;
@ApiModelProperty("选项信息")
private List<QuestionOptionVo> optionVos;
}
@Data
@ApiModel("患者的答案")
public static class PatientOption {
@ApiModelProperty("id")
private Long id;
@ApiModelProperty("排序")
private int sort;
@ApiModelProperty("显示值")
private String showValue;
@ApiModelProperty("提交值")
private String submitValue;
@ApiModelProperty("是否被选中 0否 1是")
private byte choose;
@ApiModelProperty("选择之后的操作 0无 1单行文本 2多行文本 3关联其他题目")
private byte afterOperation;
@ApiModelProperty("选择之后关联的题目")
private List<PatientQuestion> questionVos;
}
}

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

@ -26,4 +26,11 @@ public interface QuestionDao extends QuestionMapper {
* @return 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;
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<QuestionVo.ReportCodeVo> getQuestion();
List<QuestionVo.ReportCodeVo> getQuestion(CodeVo.QuestionCode param);
}

18
tcm/src/main/java/com/ccsens/tcm/service/IInpatientService.java

@ -0,0 +1,18 @@
package com.ccsens.tcm.service;
import com.ccsens.tcm.bean.vo.InpatientVo;
import java.util.List;
/**
* @author
*/
public interface IInpatientService {
/**
* 查看所有对照组
* @return 返回对照组信息
*/
List<InpatientVo.InpatientInfo> queryInpatient();
}

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

@ -2,6 +2,8 @@ package com.ccsens.tcm.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.lang.Snowflake;
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 +84,8 @@ public class ImportService implements IImportService {
List<QuestionOption> 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 +98,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 +115,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 +237,88 @@ public class ImportService implements IImportService {
if(CollectionUtil.isNotEmpty(reportCodeVos)){
reportCodeVos.forEach(reportCodeVo -> {
//查询类型下的题目
reportCodeVo.setQuestionVos(questionDao.queryQuestionByCode(reportCodeVo.getCode()));
List<QuestionVo.CodeQuestionVo> questionVos = getQuestionByCode(reportCodeVo.getCode());
reportCodeVo.setQuestionVos(questionVos);
//查询子类型下的题目
if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){
reportCodeVo.getSubReportCodes().forEach(subReportCode -> {
//查询子类型下的题目
subReportCode.setQuestionVos(questionDao.queryQuestionByCode(subReportCode.getCode()));
List<QuestionVo.CodeQuestionVo> subCodeQuestionVos = getQuestionByCode(subReportCode.getCode());
subReportCode.setQuestionVos(subCodeQuestionVos);
});
}
});
}
//将试题信息更新进redis
//移除原有的试题
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()));
}
});
}
});
}
return questionVos;
}
/**
* 查看类型下的试题信息
* @param param
*/
@Override
public List<QuestionVo.ReportCodeVo> getQuestion() {
Object objects = redisUtil.lGet(Constant.Redis.CODE_QUESTION, 0, -1);
List<QuestionVo.ReportCodeVo> reportCodeVos = (List<QuestionVo.ReportCodeVo>)objects;
public List<QuestionVo.ReportCodeVo> getQuestion(CodeVo.QuestionCode param) {
List<QuestionVo.ReportCodeVo> reportCode = new ArrayList<>();
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;
}
}

44
tcm/src/main/java/com/ccsens/tcm/service/InpatientService.java

@ -0,0 +1,44 @@
package com.ccsens.tcm.service;
import cn.hutool.core.bean.BeanUtil;
import com.ccsens.tcm.bean.po.Inpatient;
import com.ccsens.tcm.bean.po.InpatientExample;
import com.ccsens.tcm.bean.vo.InpatientVo;
import com.ccsens.tcm.persist.mapper.InpatientMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
/**
* @author
*/
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class InpatientService implements IInpatientService{
@Resource
private InpatientMapper inpatientMapper;
@Override
public List<InpatientVo.InpatientInfo> queryInpatient() {
List<InpatientVo.InpatientInfo> inpatientInfos = new ArrayList<>();
InpatientExample inpatientExample = new InpatientExample();
inpatientExample.clear();
List<Inpatient> inpatients = inpatientMapper.selectByExample(inpatientExample);
inpatients.forEach(inpatient -> {
InpatientVo.InpatientInfo inpatientInfo = new InpatientVo.InpatientInfo();
BeanUtil.copyProperties(inpatient,inpatientInfo);
inpatientInfos.add(inpatientInfo);
});
return inpatientInfos;
}
}

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 final static byte AFTER_OPERATION = 3;
/**数字默认值*/
public final static byte NUMBER_DEFAULT = 0;
/**排序默认值*/

5
tcm/src/main/resources/application.yml

@ -1,6 +1,5 @@
spring:
profiles:
active: dev
include: common, util-dev
active: test
include: common, util-test

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

@ -74,5 +74,30 @@
and q.`code` = #{code}
</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>

16
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缓存的内容

Loading…
Cancel
Save