Browse Source

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

recovery
wang1007152140 5 years ago
parent
commit
1004eac375
  1. 23
      tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java
  2. 9
      tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java
  3. 18
      tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java
  4. 17
      tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionDao.java
  5. 8
      tcm/src/main/java/com/ccsens/tcm/persist/dao/ReportCodeDao.java
  6. 19
      tcm/src/main/java/com/ccsens/tcm/service/IQuestionService.java
  7. 37
      tcm/src/main/java/com/ccsens/tcm/service/ImportService.java
  8. 71
      tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java
  9. 4
      tcm/src/main/resources/application.yml
  10. 98
      tcm/src/main/resources/mapper_dao/QuestionDao.xml
  11. 54
      tcm/src/main/resources/mapper_dao/ReportCodeDao.xml

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

@ -4,6 +4,7 @@ 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.tcm.service.IQuestionService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
@ -30,22 +31,28 @@ import java.util.List;
public class QuestionController {
@Resource
private IImportService importService;
@Resource
private IQuestionService questionService;
@ApiOperation(value = "按code查看题目信息,code为空则查询全部",notes = "")
@ApiOperation(value = "按code查看题目信息,code为空则查询全部",notes = "zy:根据code查询所有试题")
@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 {
log.info("按code查看题目信息:{}",params);
List<QuestionVo.ReportCodeVo> reportCodeVoList = importService.getQuestion(params.getParam());
log.info("按code查看题目信息成功");
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);
// }
@ApiOperation(value = "查看试题及患者的答案",notes = "zy:根据code查询患者的试题和答题信息")
@ApiImplicitParams({})
@RequestMapping(value="/query",method = RequestMethod.POST,produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<QuestionVo.PatientCode>> queryQuestionAndAnswer(@ApiParam @Validated @RequestBody QueryDto<QuestionDto.QueryQuestionAndAnswer> params) throws Exception {
log.info("查看试题及患者的答案:{}",params);
List<QuestionVo.PatientCode> patientCodes = questionService.getQuestionAndAnswer(params.getParam());
log.info("查看试题及患者的答案成功");
return JsonResponse.newInstance().ok(patientCodes);
}
}

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

@ -4,6 +4,8 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author
*/
@ -12,9 +14,12 @@ public class QuestionDto {
@Data
@ApiModel("查询患者答题信息及答案")
public static class QueryQuestionAndAnswer {
@NotNull(message = "患者id不能为空")
@ApiModelProperty("患者id")
private Long id;
@ApiModelProperty("试题code")
private String code;
@ApiModelProperty("第几次录入信息,1代表第0天或180天,2代表第14天或者第365天,3代表第90天")
private int nums;
@ApiModelProperty("第几次录入信息,默认null则查询全部")
private Integer nums;
}
}

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

@ -93,18 +93,26 @@ public class QuestionVo {
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;
private List<PatientQuestionNum> questionNums;
@ApiModelProperty("子类型")
private List<PatientCode> subCodes;
}
@Data
@ApiModel("患者的答题信息试题")
@ApiModel("患者多次答题信息")
public static class PatientQuestionNum {
@ApiModelProperty("第几次记录,默认为0代表第一次记录,14代表第14天记录的信息")
private Integer reportNums;
@ApiModelProperty("题目信息")
private List<PatientQuestion> questionList;
}
@Data
@ApiModel("试题信息")
public static class PatientQuestion {
@ApiModelProperty("id")
private Long id;
@ -121,7 +129,7 @@ public class QuestionVo {
@ApiModelProperty("答案")
private String answer;
@ApiModelProperty("选项信息")
private List<QuestionOptionVo> optionVos;
private List<PatientOption> optionVos;
}
@Data

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

@ -33,4 +33,21 @@ public interface QuestionDao extends QuestionMapper {
* @return 返回题目id
*/
List<QuestionVo.CodeQuestionVo> queryQuestionByOption(@Param("optionId")Long optionId);
/**
* 通过code患者id和采集次数查询试题信息和患者答题记录
* @param code 试题code
* @param patientId 患者id
* @param nums 采集次数
* @return 返回所有试题和答题记录
*/
List<QuestionVo.PatientQuestionNum> getQuestionByCodeAndPatientId(@Param("code")String code, @Param("patientId")Long patientId, @Param("nums")Integer nums);
/**
* 通过选项id和采集次数查询选项关联试题信息和患者答题记录
* @param optionId 试题code
* @param patientId 患者id
* @param nums 采集次数
* @return 返回所有试题和答题记录
*/
List<QuestionVo.PatientQuestion> getQuestionByOptionId(@Param("optionId")Long optionId, @Param("patientId")Long patientId, @Param("nums")Integer nums);
}

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

@ -3,6 +3,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.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
@ -23,4 +24,11 @@ public interface ReportCodeDao extends ReportCodeMapper {
* @return 返回code包括子code
*/
List<QuestionVo.ReportCodeVo> selectCode();
/**
* 通过传入的code查询试题类型信息
* @param code code
* @return 返回类型详细信息
*/
List<QuestionVo.PatientCode> selectCodeByCode(@Param("code") String code);
}

19
tcm/src/main/java/com/ccsens/tcm/service/IQuestionService.java

@ -0,0 +1,19 @@
package com.ccsens.tcm.service;
import com.ccsens.tcm.bean.dto.QuestionDto;
import com.ccsens.tcm.bean.vo.QuestionVo;
import java.util.List;
/**
* @author
*/
public interface IQuestionService {
/**
* 查询患者的试题和答题记录
* @param param 类型和采集次数
* @return
*/
List<QuestionVo.PatientCode> getQuestionAndAnswer(QuestionDto.QueryQuestionAndAnswer param);
}

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

@ -302,22 +302,29 @@ public class ImportService implements IImportService {
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);
}
});
if(CollectionUtil.isEmpty(objects)){
return reportCode;
}
try {
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);
}
});
}
});
}
}catch (Exception e){
return reportCode;
}
return reportCode;
}

71
tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java

@ -0,0 +1,71 @@
package com.ccsens.tcm.service;
import cn.hutool.core.collection.CollectionUtil;
import com.ccsens.tcm.bean.dto.QuestionDto;
import com.ccsens.tcm.bean.po.QuestionOption;
import com.ccsens.tcm.bean.vo.QuestionVo;
import com.ccsens.tcm.persist.dao.QuestionDao;
import com.ccsens.tcm.persist.dao.ReportCodeDao;
import com.ccsens.util.RedisUtil;
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.List;
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class QuestionService implements IQuestionService{
@Resource
private RedisUtil redisUtil;
@Resource
private ReportCodeDao reportCodeDao;
@Resource
private QuestionDao questionDao;
@Override
public List<QuestionVo.PatientCode> getQuestionAndAnswer(QuestionDto.QueryQuestionAndAnswer param) {
List<QuestionVo.PatientCode> patientCodeList = reportCodeDao.selectCodeByCode(param.getCode());
if(CollectionUtil.isNotEmpty(patientCodeList)){
patientCodeList.forEach(patientCode -> {
//查找此类型下的所有试题及该用户的答题信息
List<QuestionVo.PatientQuestionNum> patientQuestionNumList = questionDao.getQuestionByCodeAndPatientId(patientCode.getCode(),param.getId(),param.getNums());
if(CollectionUtil.isNotEmpty(patientQuestionNumList)){
patientQuestionNumList.forEach(patientQuestionNum -> {
if(CollectionUtil.isNotEmpty(patientQuestionNum.getQuestionList())){
patientQuestionNum.getQuestionList().forEach(question -> {
if(CollectionUtil.isNotEmpty(question.getOptionVos())){
question.getOptionVos().forEach(patientOption -> {
patientOption.setQuestionVos(questionDao.getQuestionByOptionId(patientOption.getId(),param.getId(),param.getNums()));
});
}
});
}
});
patientCode.setQuestionNums(patientQuestionNumList);
}
});
}
// if(CollectionUtil.isNotEmpty(patientCodes)){
// patientCodes.forEach(patientCode -> {
// //查询类型下的题目和患者的答案
// List<QuestionVo.PatientQuestion> patientQuestionList = getPatientQuestionByCode(patientCode.getCode(),param.getId());
// reportCodeVo.setQuestionVos(questionVos);
// //查询子类型下的题目
// if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){
// reportCodeVo.getSubReportCodes().forEach(subReportCode -> {
// List<QuestionVo.CodeQuestionVo> subCodeQuestionVos = getQuestionByCode(subReportCode.getCode());
// subReportCode.setQuestionVos(subCodeQuestionVos);
// });
// }
// });
// }
return patientCodeList;
}
}

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

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

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

@ -99,5 +99,103 @@
and q.relevance_option_id = #{optionId}
</select>
<resultMap id="getQuestionByCodeAndPatientId" type="com.ccsens.tcm.bean.vo.QuestionVo$PatientQuestionNum">
<id column="collect_time" property="reportNums" />
<collection property="questionList" ofType="com.ccsens.tcm.bean.vo.QuestionVo$PatientQuestion">
<id column="qid" jdbcType="BIGINT" property="id" />
<result column="qquestion" jdbcType="VARCHAR" property="question" />
<result column="qsort" jdbcType="INTEGER" property="sort" />
<result column="qunits" jdbcType="VARCHAR" property="units" />
<result column="qtype" jdbcType="TINYINT" property="type" />
<result column="qremark" jdbcType="VARCHAR" property="remark" />
<result column="answer" jdbcType="VARCHAR" property="answer" />
<collection property="optionVos" ofType="com.ccsens.tcm.bean.vo.QuestionVo$PatientOption">
<id column="oid" jdbcType="BIGINT" property="id" />
<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" />
<result column="choose" jdbcType="TINYINT" property="choose" />
</collection>
</collection>
</resultMap>
<select id="getQuestionByCodeAndPatientId" resultMap="getQuestionByCodeAndPatientId">
SELECT
q.id as qid,
q.question as qquestion,
q.sort as qsort,
q.units as qunits,
q.type as qtype,
q.remark as qremark,
o.id as oid,
o.sort as osort,
o.show_value as oshow_value,
o.submit_value as osubmit_value,
o.after_operation as oafter_operation,
if(o.submit_value = r.contents,true,false) as choose,
r.patient_id,
if(r.collect_time is null, 0,r.collect_time) as collect_time,
if(LEFT(r.contents,3) = '其他:',SUBSTRING(r.contents,4),'') as answer
FROM
t_question q
LEFT JOIN t_question_option o on q.id = o.question_id and o.rec_status = 0
LEFT JOIN t_patient_record r on r.test_questions_id = q.id and r.rec_status = 0 and r.patient_id = #{patientId}
<if test="nums != null">
and collect_time = #{nums}
</if>
WHERE
q.relevance_option_id = 0
and q.rec_status = 0
and q.`code` = #{code}
</select>
<resultMap id="getQuestionByOptionId" type="com.ccsens.tcm.bean.vo.QuestionVo$PatientQuestion">
<id column="qid" jdbcType="BIGINT" property="id" />
<result column="qquestion" jdbcType="VARCHAR" property="question" />
<result column="qsort" jdbcType="INTEGER" property="sort" />
<result column="qunits" jdbcType="VARCHAR" property="units" />
<result column="qtype" jdbcType="TINYINT" property="type" />
<result column="qremark" jdbcType="VARCHAR" property="remark" />
<result column="answer" jdbcType="VARCHAR" property="answer" />
<collection property="optionVos" ofType="com.ccsens.tcm.bean.vo.QuestionVo$PatientOption">
<id column="oid" jdbcType="BIGINT" property="id" />
<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" />
<result column="choose" jdbcType="TINYINT" property="choose" />
</collection>
</resultMap>
<select id="getQuestionByOptionId" resultMap="getQuestionByOptionId">
SELECT
q.id as qid,
q.question as qquestion,
q.sort as qsort,
q.units as qunits,
q.type as qtype,
q.remark as qremark,
o.id as oid,
o.sort as osort,
o.show_value as oshow_value,
o.submit_value as osubmit_value,
o.after_operation as oafter_operation,
if(o.submit_value = r.contents,true,false) as choose,
r.patient_id,
if(LEFT(r.contents,3) = '其他:',SUBSTRING(r.contents,4),'') as answer
FROM
t_question q
LEFT JOIN t_question_option o on q.id = o.question_id and o.rec_status = 0
LEFT JOIN t_patient_record r on r.test_questions_id = q.id and r.rec_status = 0 and r.patient_id = #{patientId}
<if test="nums != null">
and collect_time = #{nums}
</if>
WHERE
q.relevance_option_id = 0
and q.rec_status = 0
and q.relevance_option_id = #{optionId}
</select>
</mapper>

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

@ -88,5 +88,59 @@
and c1.rec_status = 0
</select>
<resultMap id="selectCodeByCode" type="com.ccsens.tcm.bean.vo.QuestionVo$PatientCode">
<id column="fId" jdbcType="BIGINT" property="id" />
<result column="fCode" jdbcType="VARCHAR" property="code" />
<result column="fName" jdbcType="VARCHAR" property="name" />
<result column="fMust" jdbcType="TINYINT" property="must" />
<result column="fSort" jdbcType="INTEGER" property="sort" />
<result column="fRemark" jdbcType="VARCHAR" property="remark" />
<result column="fReportType" jdbcType="TINYINT" property="reportType" />
<collection property="subCodes" ofType="com.ccsens.tcm.bean.vo.QuestionVo$PatientCode">
<id column="sId" jdbcType="BIGINT" property="id" />
<result column="sCode" jdbcType="VARCHAR" property="code" />
<result column="sName" jdbcType="VARCHAR" property="name" />
<result column="sMust" jdbcType="TINYINT" property="must" />
<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="selectCodeByCode" resultMap="selectCodeByCode">
SELECT
c1.id as fId,
c1.code as fCode,
c1.`name` as fName,
c1.must as fMust,
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.must as sMust,
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
<if test="code != null and code != ''">
and (c1.`code` = #{code} or c2.`code` = #{code})
</if>
</select>
</mapper>
Loading…
Cancel
Save