From 81dd0c9112495eceb7b08d986fafd1a5df021be2 Mon Sep 17 00:00:00 2001 From: zy_Java <654600784@qq.com> Date: Tue, 2 Feb 2021 11:54:19 +0800 Subject: [PATCH] =?UTF-8?q?20210202=E6=9F=A5=E8=AF=A2=E8=AF=95=E9=A2=98?= =?UTF-8?q?=E5=92=8C=E6=82=A3=E8=80=85=E7=9A=84=E7=AD=94=E9=A2=98=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/tcm/api/QuestionController.java | 23 +++-- .../com/ccsens/tcm/bean/dto/QuestionDto.java | 9 +- .../com/ccsens/tcm/bean/vo/QuestionVo.java | 18 +++- .../ccsens/tcm/persist/dao/QuestionDao.java | 17 ++++ .../ccsens/tcm/persist/dao/ReportCodeDao.java | 8 ++ .../ccsens/tcm/service/IQuestionService.java | 19 ++++ .../com/ccsens/tcm/service/ImportService.java | 37 ++++--- .../ccsens/tcm/service/QuestionService.java | 71 ++++++++++++++ tcm/src/main/resources/application.yml | 4 +- .../main/resources/mapper_dao/QuestionDao.xml | 98 +++++++++++++++++++ .../resources/mapper_dao/ReportCodeDao.xml | 54 ++++++++++ 11 files changed, 326 insertions(+), 32 deletions(-) create mode 100644 tcm/src/main/java/com/ccsens/tcm/service/IQuestionService.java create mode 100644 tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java diff --git a/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java b/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java index 42bfeef9..c3b231d9 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/QuestionController.java +++ b/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 params) throws Exception { + log.info("按code查看题目信息:{}",params); List 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> queryQuestionAndAnswer(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { -// List 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> queryQuestionAndAnswer(@ApiParam @Validated @RequestBody QueryDto params) throws Exception { + log.info("查看试题及患者的答案:{}",params); + List patientCodes = questionService.getQuestionAndAnswer(params.getParam()); + log.info("查看试题及患者的答案成功"); + return JsonResponse.newInstance().ok(patientCodes); + } } diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java index d65855a6..f5684451 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/QuestionDto.java +++ b/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; } } diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java b/tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java index 9598aad7..f17b2900 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/vo/QuestionVo.java +++ b/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 questionList; + private List questionNums; @ApiModelProperty("子类型") private List subCodes; } @Data - @ApiModel("患者的答题信息试题") + @ApiModel("患者多次答题信息") + public static class PatientQuestionNum { + @ApiModelProperty("第几次记录,默认为0代表第一次记录,14代表第14天记录的信息") + private Integer reportNums; + @ApiModelProperty("题目信息") + private List 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 optionVos; + private List optionVos; } @Data 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 666bc7f8..e1762100 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 @@ -33,4 +33,21 @@ public interface QuestionDao extends QuestionMapper { * @return 返回题目id */ List queryQuestionByOption(@Param("optionId")Long optionId); + + /** + * 通过code,患者id和采集次数,查询试题信息和患者答题记录 + * @param code 试题code + * @param patientId 患者id + * @param nums 采集次数 + * @return 返回所有试题和答题记录 + */ + List getQuestionByCodeAndPatientId(@Param("code")String code, @Param("patientId")Long patientId, @Param("nums")Integer nums); + /** + * 通过选项id和采集次数,查询选项关联试题信息和患者答题记录 + * @param optionId 试题code + * @param patientId 患者id + * @param nums 采集次数 + * @return 返回所有试题和答题记录 + */ + List getQuestionByOptionId(@Param("optionId")Long optionId, @Param("patientId")Long patientId, @Param("nums")Integer nums); } diff --git a/tcm/src/main/java/com/ccsens/tcm/persist/dao/ReportCodeDao.java b/tcm/src/main/java/com/ccsens/tcm/persist/dao/ReportCodeDao.java index 513009d3..841476ce 100644 --- a/tcm/src/main/java/com/ccsens/tcm/persist/dao/ReportCodeDao.java +++ b/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 selectCode(); + + /** + * 通过传入的code查询试题类型信息 + * @param code code + * @return 返回类型详细信息 + */ + List selectCodeByCode(@Param("code") String code); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/IQuestionService.java b/tcm/src/main/java/com/ccsens/tcm/service/IQuestionService.java new file mode 100644 index 00000000..3b804a62 --- /dev/null +++ b/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 getQuestionAndAnswer(QuestionDto.QueryQuestionAndAnswer 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 3d705a37..d4bb3f2e 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java @@ -302,22 +302,29 @@ public class ImportService implements IImportService { List reportCode = new ArrayList<>(); 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); - } - }); + if(CollectionUtil.isEmpty(objects)){ + return reportCode; + } + try { + 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); + } + }); + } + }); + } + }catch (Exception e){ + return reportCode; } return reportCode; } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java b/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java new file mode 100644 index 00000000..1e4d644b --- /dev/null +++ b/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 getQuestionAndAnswer(QuestionDto.QueryQuestionAndAnswer param) { + List patientCodeList = reportCodeDao.selectCodeByCode(param.getCode()); + if(CollectionUtil.isNotEmpty(patientCodeList)){ + patientCodeList.forEach(patientCode -> { + //查找此类型下的所有试题及该用户的答题信息 + List 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 patientQuestionList = getPatientQuestionByCode(patientCode.getCode(),param.getId()); +// reportCodeVo.setQuestionVos(questionVos); +// //查询子类型下的题目 +// if(CollectionUtil.isNotEmpty(reportCodeVo.getSubReportCodes())){ +// reportCodeVo.getSubReportCodes().forEach(subReportCode -> { +// List subCodeQuestionVos = getQuestionByCode(subReportCode.getCode()); +// subReportCode.setQuestionVos(subCodeQuestionVos); +// }); +// } +// }); +// } + + return patientCodeList; + } + +} diff --git a/tcm/src/main/resources/application.yml b/tcm/src/main/resources/application.yml index f59084b0..4ecd13fd 100644 --- a/tcm/src/main/resources/application.yml +++ b/tcm/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: test - include: common, util-test + active: dev + include: common, util-dev diff --git a/tcm/src/main/resources/mapper_dao/QuestionDao.xml b/tcm/src/main/resources/mapper_dao/QuestionDao.xml index c9797c70..590f4ed1 100644 --- a/tcm/src/main/resources/mapper_dao/QuestionDao.xml +++ b/tcm/src/main/resources/mapper_dao/QuestionDao.xml @@ -99,5 +99,103 @@ and q.relevance_option_id = #{optionId} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tcm/src/main/resources/mapper_dao/ReportCodeDao.xml b/tcm/src/main/resources/mapper_dao/ReportCodeDao.xml index 7fa8f904..9be5bca0 100644 --- a/tcm/src/main/resources/mapper_dao/ReportCodeDao.xml +++ b/tcm/src/main/resources/mapper_dao/ReportCodeDao.xml @@ -88,5 +88,59 @@ and c1.rec_status = 0 + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file