From 259c002683fd7adbaa3763a9065b6f97060f0ecd Mon Sep 17 00:00:00 2001 From: zhizhi wu <2377881365@qq.com> Date: Tue, 20 Apr 2021 11:00:59 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=92=8C=E6=9F=A5=E8=AF=A2=E8=AF=95=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tall/src/main/resources/application.yml | 4 +- .../com/ccsens/tcm/api/ImportController.java | 16 +-- .../com/ccsens/tcm/bean/dto/PatientDto.java | 15 +- .../com/ccsens/tcm/bean/dto/QuestionDto.java | 15 ++ .../tcm/bean/po/PatientInformation.java | 22 +++ .../bean/po/PatientInformationExample.java | 130 ++++++++++++++++++ .../java/com/ccsens/tcm/bean/po/Question.java | 11 ++ .../ccsens/tcm/bean/po/QuestionExample.java | 60 ++++++++ .../com/ccsens/tcm/bean/vo/QuestionVo.java | 6 +- .../ccsens/tcm/persist/dao/QuestionDao.java | 16 +++ .../tcm/persist/dao/QuestionHospitalDao.java | 13 ++ .../ccsens/tcm/persist/dao/ReportCodeDao.java | 7 + .../ccsens/tcm/service/IImportService.java | 2 +- .../com/ccsens/tcm/service/ImportService.java | 124 +++++++++-------- .../ccsens/tcm/service/PatientService.java | 24 ++-- .../ccsens/tcm/service/QuestionService.java | 7 + .../main/resources/mapper_dao/QuestionDao.xml | 71 ++++++---- .../mapper_dao/QuestionHospitalDao.xml | 18 +++ .../resources/mapper_dao/QuestionOcrDao.xml | 2 +- .../resources/mapper_dao/ReportCodeDao.xml | 10 +- .../mapper_raw/PatientInformationMapper.xml | 50 +++++-- .../resources/mapper_raw/QuestionMapper.xml | 35 +++-- 22 files changed, 515 insertions(+), 143 deletions(-) diff --git a/tall/src/main/resources/application.yml b/tall/src/main/resources/application.yml index ebc544af..b5408a3a 100644 --- a/tall/src/main/resources/application.yml +++ b/tall/src/main/resources/application.yml @@ -1,5 +1,5 @@ spring: profiles: - active: test - include: util-test,common + active: dev + include: util-dev,common diff --git a/tcm/src/main/java/com/ccsens/tcm/api/ImportController.java b/tcm/src/main/java/com/ccsens/tcm/api/ImportController.java index d46b4e23..52fe382c 100644 --- a/tcm/src/main/java/com/ccsens/tcm/api/ImportController.java +++ b/tcm/src/main/java/com/ccsens/tcm/api/ImportController.java @@ -1,22 +1,14 @@ package com.ccsens.tcm.api; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.ccsens.cloudutil.feign.TallFeignClient; -import com.ccsens.tcm.bean.po.CommonFile; -import com.ccsens.tcm.bean.vo.FileVo; import com.ccsens.tcm.service.IImportService; -import com.ccsens.tcm.uitl.Constant; import com.ccsens.util.*; import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Part; import java.io.File; -import java.util.List; /** * @author 逗 @@ -48,8 +40,8 @@ public class ImportController { @ApiOperation(value = "导入病史相关",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") @ApiImplicitParams({}) - @RequestMapping(value = "/BSXG", method = RequestMethod.POST) - public JsonResponse importBsxg(@RequestParam(required = true) Part file) throws Exception{ + @RequestMapping(value = "/specialCode", method = RequestMethod.POST) + public JsonResponse importCode(@RequestParam(required = true) Part file, String code) throws Exception{ //1.上传文件 String allowedExts = "xls,xlsx"; @@ -57,13 +49,13 @@ public class ImportController { String path = UploadFileUtil_Servlet3.uploadFile(file, allowedExts, dir); File excelFile = new File(dir+path); - importService.importBsxg(excelFile, Constant.Report.CODE_BSXG); + importService.importQuestion(excelFile, code); log.info("导入病史相关成功"); return JsonResponse.newInstance().ok(); } - @ApiOperation(value = "导入病史相关",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") + @ApiOperation(value = "导入全部试题",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx") @ApiImplicitParams({}) @RequestMapping(value = "/all", method = RequestMethod.POST) public JsonResponse importAll(@RequestParam(required = true) Part file) throws Exception{ diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java b/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java index 2e67898d..f2baa89e 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/dto/PatientDto.java @@ -5,10 +5,7 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; -import javax.validation.constraints.Max; -import javax.validation.constraints.Min; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.NotNull; +import javax.validation.constraints.*; import java.util.Date; import java.util.List; @@ -20,14 +17,16 @@ public class PatientDto { @Data @ApiModel("保存患者基本信息") public static class SavePatient { -// @ApiModelProperty("住院号") -// private String hospitalization; + @NotBlank(message = "请输入住院号") + @ApiModelProperty("住院号") + private String hospitalization; + @NotNull(message = "请选择对照组") @ApiModelProperty("对照组id") private Long inpatientId; @ApiModelProperty("录入状态:0:新建 1:数据搜集中 2数据搜集完成 3数据搜集超时 4:废弃") private Byte inputStatus=0; - @ApiModelProperty("医院id") - private Long hospitalId; +// @ApiModelProperty("医院id") +// private Long hospitalId; } @Data @ApiModel("查询患者基本信息") 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 3959982a..944966e5 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 @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import javax.validation.constraints.NotNull; +import java.util.List; /** * @author 逗 @@ -22,4 +23,18 @@ public class QuestionDto { @ApiModelProperty("第几次录入信息,默认为0查询第一次") private Integer nums = 0; } + + + @Data + public static class QuestionHospitalDel{ + private Long questionId; + private List hospitalIds; + + public QuestionHospitalDel(){} + + public QuestionHospitalDel(Long questionId, List hospitalIds) { + this.questionId = questionId; + this.hospitalIds = hospitalIds; + } + } } diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformation.java b/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformation.java index 058118f3..3b1e7515 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformation.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformation.java @@ -8,8 +8,12 @@ public class PatientInformation implements Serializable { private String hospitalization; + private String code; + private Long inpatientId; + private Integer age; + private Byte inputStatus; private Long hospitalId; @@ -40,6 +44,14 @@ public class PatientInformation implements Serializable { this.hospitalization = hospitalization == null ? null : hospitalization.trim(); } + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code == null ? null : code.trim(); + } + public Long getInpatientId() { return inpatientId; } @@ -48,6 +60,14 @@ public class PatientInformation implements Serializable { this.inpatientId = inpatientId; } + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + public Byte getInputStatus() { return inputStatus; } @@ -104,7 +124,9 @@ public class PatientInformation implements Serializable { sb.append("Hash = ").append(hashCode()); sb.append(", id=").append(id); sb.append(", hospitalization=").append(hospitalization); + sb.append(", code=").append(code); sb.append(", inpatientId=").append(inpatientId); + sb.append(", age=").append(age); sb.append(", inputStatus=").append(inputStatus); sb.append(", hospitalId=").append(hospitalId); sb.append(", userId=").append(userId); diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformationExample.java b/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformationExample.java index 7d344070..a88221d9 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformationExample.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/po/PatientInformationExample.java @@ -235,6 +235,76 @@ public class PatientInformationExample { return (Criteria) this; } + public Criteria andCodeIsNull() { + addCriterion("code is null"); + return (Criteria) this; + } + + public Criteria andCodeIsNotNull() { + addCriterion("code is not null"); + return (Criteria) this; + } + + public Criteria andCodeEqualTo(String value) { + addCriterion("code =", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeNotEqualTo(String value) { + addCriterion("code <>", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeGreaterThan(String value) { + addCriterion("code >", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeGreaterThanOrEqualTo(String value) { + addCriterion("code >=", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeLessThan(String value) { + addCriterion("code <", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeLessThanOrEqualTo(String value) { + addCriterion("code <=", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeLike(String value) { + addCriterion("code like", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeNotLike(String value) { + addCriterion("code not like", value, "code"); + return (Criteria) this; + } + + public Criteria andCodeIn(List values) { + addCriterion("code in", values, "code"); + return (Criteria) this; + } + + public Criteria andCodeNotIn(List values) { + addCriterion("code not in", values, "code"); + return (Criteria) this; + } + + public Criteria andCodeBetween(String value1, String value2) { + addCriterion("code between", value1, value2, "code"); + return (Criteria) this; + } + + public Criteria andCodeNotBetween(String value1, String value2) { + addCriterion("code not between", value1, value2, "code"); + return (Criteria) this; + } + public Criteria andInpatientIdIsNull() { addCriterion("inpatient_id is null"); return (Criteria) this; @@ -295,6 +365,66 @@ public class PatientInformationExample { return (Criteria) this; } + public Criteria andAgeIsNull() { + addCriterion("age is null"); + return (Criteria) this; + } + + public Criteria andAgeIsNotNull() { + addCriterion("age is not null"); + return (Criteria) this; + } + + public Criteria andAgeEqualTo(Integer value) { + addCriterion("age =", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeNotEqualTo(Integer value) { + addCriterion("age <>", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeGreaterThan(Integer value) { + addCriterion("age >", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeGreaterThanOrEqualTo(Integer value) { + addCriterion("age >=", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeLessThan(Integer value) { + addCriterion("age <", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeLessThanOrEqualTo(Integer value) { + addCriterion("age <=", value, "age"); + return (Criteria) this; + } + + public Criteria andAgeIn(List values) { + addCriterion("age in", values, "age"); + return (Criteria) this; + } + + public Criteria andAgeNotIn(List values) { + addCriterion("age not in", values, "age"); + return (Criteria) this; + } + + public Criteria andAgeBetween(Integer value1, Integer value2) { + addCriterion("age between", value1, value2, "age"); + return (Criteria) this; + } + + public Criteria andAgeNotBetween(Integer value1, Integer value2) { + addCriterion("age not between", value1, value2, "age"); + return (Criteria) this; + } + public Criteria andInputStatusIsNull() { addCriterion("input_status is null"); return (Criteria) this; diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/po/Question.java b/tcm/src/main/java/com/ccsens/tcm/bean/po/Question.java index 4c0c06db..b7d8b274 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/po/Question.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/po/Question.java @@ -17,6 +17,8 @@ public class Question implements Serializable { private Byte type; + private Byte fillStatus; + private BigDecimal referenceLower; private BigDecimal referenceUpper; @@ -85,6 +87,14 @@ public class Question implements Serializable { this.type = type; } + public Byte getFillStatus() { + return fillStatus; + } + + public void setFillStatus(Byte fillStatus) { + this.fillStatus = fillStatus; + } + public BigDecimal getReferenceLower() { return referenceLower; } @@ -169,6 +179,7 @@ public class Question implements Serializable { sb.append(", sort=").append(sort); sb.append(", units=").append(units); sb.append(", type=").append(type); + sb.append(", fillStatus=").append(fillStatus); sb.append(", referenceLower=").append(referenceLower); sb.append(", referenceUpper=").append(referenceUpper); sb.append(", relevanceOptionId=").append(relevanceOptionId); diff --git a/tcm/src/main/java/com/ccsens/tcm/bean/po/QuestionExample.java b/tcm/src/main/java/com/ccsens/tcm/bean/po/QuestionExample.java index 907ca748..a1b1e772 100644 --- a/tcm/src/main/java/com/ccsens/tcm/bean/po/QuestionExample.java +++ b/tcm/src/main/java/com/ccsens/tcm/bean/po/QuestionExample.java @@ -496,6 +496,66 @@ public class QuestionExample { return (Criteria) this; } + public Criteria andFillStatusIsNull() { + addCriterion("fill_status is null"); + return (Criteria) this; + } + + public Criteria andFillStatusIsNotNull() { + addCriterion("fill_status is not null"); + return (Criteria) this; + } + + public Criteria andFillStatusEqualTo(Byte value) { + addCriterion("fill_status =", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusNotEqualTo(Byte value) { + addCriterion("fill_status <>", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusGreaterThan(Byte value) { + addCriterion("fill_status >", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("fill_status >=", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusLessThan(Byte value) { + addCriterion("fill_status <", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusLessThanOrEqualTo(Byte value) { + addCriterion("fill_status <=", value, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusIn(List values) { + addCriterion("fill_status in", values, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusNotIn(List values) { + addCriterion("fill_status not in", values, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusBetween(Byte value1, Byte value2) { + addCriterion("fill_status between", value1, value2, "fillStatus"); + return (Criteria) this; + } + + public Criteria andFillStatusNotBetween(Byte value1, Byte value2) { + addCriterion("fill_status not between", value1, value2, "fillStatus"); + return (Criteria) this; + } + public Criteria andReferenceLowerIsNull() { addCriterion("reference_lower is null"); return (Criteria) this; 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 e552ee1c..be8fe277 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 @@ -117,8 +117,10 @@ public class QuestionVo { private int sort; @ApiModelProperty("备注") private String remark; - @ApiModelProperty("记录类型 0:只记录1次数据,1:记录3次,分别为0,14,90天 ,2:记录两次,分别是180,365") - private byte reportType; +// @ApiModelProperty("记录类型 0:只记录1次数据,1:记录3次,分别为0,14,90天 ,2:记录两次,分别是180,365") +// private byte reportType; + @ApiModelProperty("记录天数列表") + private List reportTypes; @ApiModelProperty("题目信息") private List questionVos; @ApiModelProperty("子类型") 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 99536266..e7e67403 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 @@ -59,4 +59,20 @@ public interface QuestionDao extends QuestionMapper { List queryQuestion(); List queryQuestion1(); + + /** + * 根据code和医院查询试题 + * @param code 试题编码 + * @param sort 排序 + * @param hospitalIds 医院ID + * @return 试题 + */ + Question getByCodeAndHospitals(@Param("code") String code, @Param("sort") int sort, @Param("hospitalIds") List hospitalIds); + + /** + * 查询记录时间 + * @param code code + * @return 记录时间 + */ + List queryTimesByCode(@Param("code") String code); } diff --git a/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionHospitalDao.java b/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionHospitalDao.java index 2caecca5..e1017ab6 100644 --- a/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionHospitalDao.java +++ b/tcm/src/main/java/com/ccsens/tcm/persist/dao/QuestionHospitalDao.java @@ -1,5 +1,6 @@ package com.ccsens.tcm.persist.dao; +import com.ccsens.tcm.bean.dto.QuestionDto; import com.ccsens.tcm.bean.po.QuestionHospital; import com.ccsens.tcm.persist.mapper.QuestionHospitalMapper; import org.apache.ibatis.annotations.Param; @@ -14,4 +15,16 @@ public interface QuestionHospitalDao extends QuestionHospitalMapper { * @return 医院ID */ List queryAll(@Param("type") Byte type); + + /** + * 批量删除 + * @param questionHospitalDelList 试题ID 和医院ID + */ + void deleteBatch(@Param("list") List questionHospitalDelList); + + /** + * 批量添加 + * @param questionHospitals 试题ID和医院ID + */ + void insertBatch(@Param("list") List questionHospitals); } 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 13c5f1e9..66359188 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 @@ -1,5 +1,6 @@ package com.ccsens.tcm.persist.dao; +import com.ccsens.tcm.bean.po.QuestionRecordTime; import com.ccsens.tcm.bean.po.ReportCode; import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.persist.mapper.ReportCodeMapper; @@ -37,4 +38,10 @@ public interface ReportCodeDao extends ReportCodeMapper { * @return */ List queryCodeAll(); + + /** + * 存储关联关系 + * @param recordTimes 题目记录时间表 + */ + void insertTimesBatch(@Param("list") List recordTimes); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java b/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java index ed1213d6..cd4c1566 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/IImportService.java @@ -21,7 +21,7 @@ public interface IImportService { * @param excelFile excel文件 * @param codeBsxg sheet名 */ - void importBsxg(File excelFile, String codeBsxg) throws Exception; + void importQuestion(File excelFile, String codeBsxg) throws Exception; /** * 更新redis内的试题 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 7ac5069b..a2b232e3 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/ImportService.java @@ -4,6 +4,7 @@ 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.dto.QuestionDto; import com.ccsens.tcm.bean.po.*; import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.persist.dao.QuestionDao; @@ -15,6 +16,7 @@ import com.ccsens.tcm.persist.mapper.QuestionRecordTimeMapper; import com.ccsens.tcm.uitl.Constant; import com.ccsens.util.*; import com.ccsens.util.exception.BaseException; +import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -58,27 +60,31 @@ public class ImportService implements IImportService { List reports = PoiUtil.readExce(excelFile, 0, null,1, false); log.info("读取数据完成"); List reportList = new ArrayList<>(); + List recordTimes = new ArrayList<>(); for (Object[] objs: reports) { if (!(objs != null && objs.length >= 2 && !StringUtils.isEmpty(objs[0]) && !StringUtils.isEmpty(objs[1]))) { log.info("测评报告单数据不足,跳转下一行"); continue; } - ReportCode report = initReport(objs); + ReportCode report = initReport(objs, recordTimes); reportList.add(report); } if (!reportList.isEmpty()) { reportCodeDao.insertBatch(reportList); } + if (CollectionUtil.isNotEmpty(recordTimes)) { + reportCodeDao.insertTimesBatch(recordTimes); + } } @Override - public void importBsxg(File excelFile, String codeBsxg) throws Exception { - log.info("导入试题参数:{}, {}", excelFile, codeBsxg); + public void importQuestion(File excelFile, String code) throws Exception { + log.info("导入试题参数:{}, {}", excelFile, code); List types = new ArrayList<>(); - if (Constant.Question.ALL.equalsIgnoreCase(codeBsxg)) { + if (Constant.Question.ALL.equalsIgnoreCase(code)) { types.addAll(Constant.Question.QUESTION_TYPE); } else { - types.add(codeBsxg); + types.add(code); } log.info("导入试题类型:{}", types); for (String sheetName: types) { @@ -106,10 +112,9 @@ public class ImportService implements IImportService { } // 医院 Map hospitalMap = new HashMap<>(); - hospitals.forEach(hospital -> { - hospitalMap.put(hospital.getCode(), hospital.getId()); - }); - + hospitals.forEach(hospital -> hospitalMap.put(hospital.getCode(), hospital.getId())); + List questionHospitals = new ArrayList<>(); + List questionHospitalDelList = new ArrayList<>(); for(Object[] objs : questions) { if (objs == null || objs.length < 4 || StringUtils.isEmpty(objs[2])) { @@ -121,7 +126,7 @@ public class ImportService implements IImportService { String type = String.valueOf(objs[0]); switch (type) { case "题目" : - Question question = initQuestion(objs, code, sort,null, hospitalMap); + Question question = initQuestion(objs, code, sort,null, hospitalMap, questionHospitals, questionHospitalDelList); questionId = question.getId(); questionList.add(question); break; @@ -137,7 +142,7 @@ public class ImportService implements IImportService { if (optionList.isEmpty()) { break; } - Question relevanceQuestion = initQuestion(objs, code, sort, optionId, hospitalMap); + Question relevanceQuestion = initQuestion(objs, code, sort, optionId, hospitalMap, questionHospitals, questionHospitalDelList); questionList.add(relevanceQuestion); optionQuestionId = relevanceQuestion.getId(); break; @@ -159,6 +164,14 @@ public class ImportService implements IImportService { if (!optionList.isEmpty()) { questionOptionDao.insertBatch(optionList); } + if (CollectionUtil.isNotEmpty(questionHospitalDelList)) { + questionHospitalDao.deleteBatch(questionHospitalDelList); + log.info("删除试题和医院的旧关联"); + } + if (CollectionUtil.isNotEmpty(questionHospitals)) { + questionHospitalDao.insertBatch(questionHospitals); + log.info("批量添加试题和医院的关联"); + } } /** @@ -195,9 +208,10 @@ public class ImportService implements IImportService { /** * 初始化报告单对象,若该对象已存在,则返回null * @param objs 表格内读取的数据 + * @param recordTimes * @return 返回测试类型 */ - private ReportCode initReport(Object[] objs) { + private ReportCode initReport(Object[] objs, List recordTimes) { ReportCodeExample example = new ReportCodeExample(); example.createCriteria().andCodeEqualTo((String) objs[0]); List list = reportCodeDao.selectByExample(example); @@ -216,9 +230,9 @@ public class ImportService implements IImportService { report.setCode((String) objs[0]); report.setName((String) objs[1]); report.setParentCode(objs.length > 2 && !StringUtils.isEmpty(objs[2]) ? (String) objs[2] : Constant.STRING_DEFAULT); - if (objs.length > 3 && objs[3] != null && ((String)objs[3]).length() > 0) { -// report.setReportType(objs.length > 3 && StringUtil.checkNum(String.valueOf(objs[3]),false)? Byte.parseByte((String) objs[3]) : Constant.NUMBER_DEFAULT); - String types = (String)objs[3]; + int typeIndex = 3; + if (objs.length > typeIndex && objs[typeIndex] != null && ((String)objs[typeIndex]).length() > 0) { + String types = (String)objs[typeIndex]; String[] split = types.split("[,,]"); for (String type: split) { @@ -228,7 +242,7 @@ public class ImportService implements IImportService { time.setId(snowflake.nextId()); time.setCode(report.getCode()); time.setRecodeTime(Integer.parseInt(type)); - questionRecordTimeMapper.insertSelective(time); + recordTimes.add(time); } } @@ -242,25 +256,42 @@ public class ImportService implements IImportService { return report; } + /** * 初始化试题 * @param objs 表格内读取的数据 - * @param evaluationCode 试题类型 + * @param code 试题类型 * @param sort 排序 - * @param hospitalMap + * @param hospitalMap 医院code和ID + * @param questionHospitals 试题医院关联 + * @param QuestionHospitalDelList 要删除的条件 * @return 返回试题 */ - private Question initQuestion(Object[] objs, String evaluationCode, int sort, Long optionId, Map hospitalMap) { + private Question initQuestion(Object[] objs, String code, int sort, Long optionId, Map hospitalMap, List questionHospitals, List QuestionHospitalDelList) { + // 查询关联医院 + List hospitalIds = new ArrayList<>(); + int hospitalIndex = 10; + if (objs.length > hospitalIndex && !StringUtils.isEmpty(objs[hospitalIndex])) { + String[] hospitalCodes = ((String) objs[hospitalIndex]).split("[,,]"); + for (String hospitalCode:hospitalCodes) { + hospitalIds.add(hospitalMap.get(hospitalCode)); + } + } else { + hospitalMap.forEach((key, value)->hospitalIds.add(value)); + } + + // 查询试题是否已经存在 QuestionExample example = new QuestionExample(); - example.createCriteria().andCodeEqualTo(evaluationCode).andSortEqualTo(sort); - List questions = questionDao.selectByExample(example); - Question question; - if (CollectionUtils.isEmpty(questions)) { + example.createCriteria().andCodeEqualTo(code).andSortEqualTo(sort); + Question question = questionDao.getByCodeAndHospitals(code, sort, hospitalIds); + if (question == null) { question = new Question(); question.setId(snowflake.nextId()); } else { - question = questions.get(0); + // 题存在 -->删除原有关联关系 + QuestionHospitalDelList.add(new QuestionDto.QuestionHospitalDel(question.getId(), hospitalIds)); } + question.setCode(StringUtils.isEmpty(objs[1]) ? Constant.STRING_DEFAULT : String.valueOf(objs[1])); question.setQuestion(StringUtils.isEmpty(objs[2]) ? Constant.STRING_DEFAULT : String.valueOf(objs[2])); question.setSort(sort); @@ -282,28 +313,20 @@ public class ImportService implements IImportService { } } question.setRelevanceOptionId(optionId == null ? 0 : optionId); + // 设置是否必填 + int fillStatusIndex = 11; + boolean hasFillStatus = objs.length > fillStatusIndex && objs[fillStatusIndex] != null + && StringUtil.isMatch((String)objs[fillStatusIndex], StringUtil.NUMBER_DOUBLE); + byte fillType = hasFillStatus ? Byte.parseByte((String)objs[fillStatusIndex]) : 1; // 设置关联那个医院 - List hospitalIds = new ArrayList<>(); - int hospitalIndex = 10; - if (objs.length > hospitalIndex && !StringUtils.isEmpty(objs[hospitalIndex])) { - String[] codes = ((String) objs[hospitalIndex]).split("[,,]"); - for (String code:codes) { - hospitalIds.add(hospitalMap.get(code)); - } - } else { - hospitalMap.forEach((key, value)->{ - hospitalIds.add(value); - }); - } - - hospitalIds.forEach(id->{ + for (Long id: hospitalIds) { QuestionHospital questionHospital = new QuestionHospital(); questionHospital.setId(snowflake.nextId()); questionHospital.setQuestionId(question.getId()); questionHospital.setHospitalId(id); - questionHospitalDao.insertSelective(questionHospital); - }); - + questionHospital.setFillType(fillType); + questionHospitals.add(questionHospital); + } log.info("导入试题:{}", question); return question; } @@ -341,6 +364,10 @@ public class ImportService implements IImportService { */ private List getQuestionByCode(String code) { List subCodeQuestionVos = questionDao.queryQuestionByCode(code); + return getCodeQuestionVos(subCodeQuestionVos); + } + + private List getCodeQuestionVos(List subCodeQuestionVos) { if(CollectionUtil.isNotEmpty(subCodeQuestionVos)){ subCodeQuestionVos.forEach(question -> { if(CollectionUtil.isNotEmpty(question.getOptionVos())){ @@ -360,24 +387,13 @@ public class ImportService implements IImportService { */ private List queryOptionQuestion(Long optionId){ List 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; + return getCodeQuestionVos(questionVos); } /** * 查看类型下的试题信息 - * @param param + * @param param 试题类型 */ @Override public List getQuestion(CodeVo.QuestionCode param) { diff --git a/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java b/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java index e15086c2..154ebad2 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/PatientService.java @@ -74,28 +74,31 @@ public class PatientService implements IPatientService { @Override public void savePatient(PatientDto.SavePatient param, Long userId) { -// PatientInformationExample patientInformationExample=new PatientInformationExample(); -// patientInformationExample.createCriteria().andHospitalizationEqualTo(param.getHospitalization()).andRecStatusEqualTo((byte)0); -// long l = patientInformationMapper.countByExample(patientInformationExample); -// if(l>0){ -// throw new BaseException(CodeEnum.ZHUYUANIDCHONGFU); -// } Hospital hospital = selUserIdToHosId(userId); + // 判断住院号是否存在 + PatientInformationExample patientInformationExample=new PatientInformationExample(); + patientInformationExample.createCriteria().andHospitalizationEqualTo(param.getHospitalization()) + .andHospitalIdEqualTo(hospital.getId()).andRecStatusEqualTo((byte)0); + long l = patientInformationMapper.countByExample(patientInformationExample); + if(l>0){ + throw new BaseException(CodeEnum.ZHUYUANIDCHONGFU); + } + Inpatient inpatient = inpatientMapper.selectByPrimaryKey(param.getInpatientId()); if (inpatient == null) { throw new BaseException(CodeEnum.PARAM_ERROR); } log.info("医院:{},对照组:{}", hospital, inpatient); - param.setHospitalId(hospital.getId()); PatientInformation patientInformation=new PatientInformation(); BeanUtils.copyProperties(param,patientInformation); patientInformation.setId(snowflake.nextId()); + patientInformation.setHospitalId(hospital.getId()); // 生成编号 long incr = redisUtil.incr(Constant.Redis.HOSPITAL_NUM + hospital.getCode(), 1) + 1; DecimalFormat df=new DecimalFormat("000"); - String num = hospital.getCode() + "" + inpatient.getCode() + df.format(incr); + String num = hospital.getCode() + inpatient.getCode() + df.format(incr); log.info("编号:{}", num); - patientInformation.setHospitalization(num); + patientInformation.setCode(num); patientInformationMapper.insertSelective(patientInformation); } @@ -107,14 +110,13 @@ public class PatientService implements IPatientService { */ @Override public Hospital selUserIdToHosId(Long userId) { - Doctor doctor=null; DoctorExample doctorExample=new DoctorExample(); doctorExample.createCriteria().andUserIdEqualTo(userId).andRecStatusEqualTo((byte)0); List doctors = doctorMapper.selectByExample(doctorExample); if(doctors.size()!=1){ throw new BaseException(CodeEnum.MEIYOUGAIYISHENG); } - doctor=doctors.get(0); + Doctor doctor=doctors.get(0); return hospitalMapper.selectByPrimaryKey(doctor.getHospitalId()); } diff --git a/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java b/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java index 7d97ad29..0ad35d3e 100644 --- a/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java +++ b/tcm/src/main/java/com/ccsens/tcm/service/QuestionService.java @@ -1,12 +1,14 @@ package com.ccsens.tcm.service; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.ccsens.tcm.bean.dto.QuestionDto; import com.ccsens.tcm.bean.po.PatientInformation; import com.ccsens.tcm.bean.vo.QuestionVo; import com.ccsens.tcm.persist.dao.QuestionDao; import com.ccsens.tcm.persist.dao.ReportCodeDao; import com.ccsens.tcm.persist.mapper.PatientInformationMapper; +import com.ccsens.tcm.persist.mapper.QuestionRecordTimeMapper; import com.ccsens.util.CodeEnum; import com.ccsens.util.RedisUtil; import com.ccsens.util.exception.BaseException; @@ -48,6 +50,11 @@ public class QuestionService implements IQuestionService{ // if(patientCode.getReportType() == 0){ // param.setNums(0); // } + + if (StrUtil.isNotEmpty(param.getCode())) { + // 当查询某一code的题目时,查询该code共有多少天的测评 + patientCode.setReportTypes(questionDao.queryTimesByCode(param.getCode())); + } //根据一级code查询试题及答案 List patientQuestionNumList = questionDao.getQuestionByCodeAndPatientId(patientCode.getCode(),param.getId(),param.getNums(), patient.getHospitalId()); //查询选项关联的试题及答案 diff --git a/tcm/src/main/resources/mapper_dao/QuestionDao.xml b/tcm/src/main/resources/mapper_dao/QuestionDao.xml index 2d17545c..808baa74 100644 --- a/tcm/src/main/resources/mapper_dao/QuestionDao.xml +++ b/tcm/src/main/resources/mapper_dao/QuestionDao.xml @@ -1,21 +1,7 @@ - - - - - - - - - - - - - - - + replace into t_question (id, question, code, sort, units, type, @@ -310,20 +296,45 @@ - + + + \ No newline at end of file diff --git a/tcm/src/main/resources/mapper_dao/QuestionHospitalDao.xml b/tcm/src/main/resources/mapper_dao/QuestionHospitalDao.xml index 27b59fb7..09ac148a 100644 --- a/tcm/src/main/resources/mapper_dao/QuestionHospitalDao.xml +++ b/tcm/src/main/resources/mapper_dao/QuestionHospitalDao.xml @@ -1,6 +1,24 @@ + + insert into t_question_hospital(id, question_id, hospital_id, fill_type) values + + (#{item.id}, #{item.questionId}, #{item.hospitalId}, #{item.fillType}) + + + + update t_question_hospital set rec_status = 2 + where + + (question_id = #{delItem.questionId} and hospital_id in + + #{item} + + and rec_status = 0 + ) + + select @@ -105,14 +107,14 @@ - insert into t_patient_information (id, hospitalization, inpatient_id, - input_status, hospital_id, user_id, - created_at, update_at, rec_status - ) - values (#{id,jdbcType=BIGINT}, #{hospitalization,jdbcType=VARCHAR}, #{inpatientId,jdbcType=BIGINT}, - #{inputStatus,jdbcType=TINYINT}, #{hospitalId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, - #{createdAt,jdbcType=TIMESTAMP}, #{updateAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT} - ) + insert into t_patient_information (id, hospitalization, code, + inpatient_id, age, input_status, + hospital_id, user_id, created_at, + update_at, rec_status) + values (#{id,jdbcType=BIGINT}, #{hospitalization,jdbcType=VARCHAR}, #{code,jdbcType=VARCHAR}, + #{inpatientId,jdbcType=BIGINT}, #{age,jdbcType=INTEGER}, #{inputStatus,jdbcType=TINYINT}, + #{hospitalId,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{createdAt,jdbcType=TIMESTAMP}, + #{updateAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}) insert into t_patient_information @@ -123,9 +125,15 @@ hospitalization, + + code, + inpatient_id, + + age, + input_status, @@ -152,9 +160,15 @@ #{hospitalization,jdbcType=VARCHAR}, + + #{code,jdbcType=VARCHAR}, + #{inpatientId,jdbcType=BIGINT}, + + #{age,jdbcType=INTEGER}, + #{inputStatus,jdbcType=TINYINT}, @@ -190,9 +204,15 @@ hospitalization = #{record.hospitalization,jdbcType=VARCHAR}, + + code = #{record.code,jdbcType=VARCHAR}, + inpatient_id = #{record.inpatientId,jdbcType=BIGINT}, + + age = #{record.age,jdbcType=INTEGER}, + input_status = #{record.inputStatus,jdbcType=TINYINT}, @@ -220,7 +240,9 @@ update t_patient_information set id = #{record.id,jdbcType=BIGINT}, hospitalization = #{record.hospitalization,jdbcType=VARCHAR}, + code = #{record.code,jdbcType=VARCHAR}, inpatient_id = #{record.inpatientId,jdbcType=BIGINT}, + age = #{record.age,jdbcType=INTEGER}, input_status = #{record.inputStatus,jdbcType=TINYINT}, hospital_id = #{record.hospitalId,jdbcType=BIGINT}, user_id = #{record.userId,jdbcType=BIGINT}, @@ -237,9 +259,15 @@ hospitalization = #{hospitalization,jdbcType=VARCHAR}, + + code = #{code,jdbcType=VARCHAR}, + inpatient_id = #{inpatientId,jdbcType=BIGINT}, + + age = #{age,jdbcType=INTEGER}, + input_status = #{inputStatus,jdbcType=TINYINT}, @@ -264,7 +292,9 @@ update t_patient_information set hospitalization = #{hospitalization,jdbcType=VARCHAR}, + code = #{code,jdbcType=VARCHAR}, inpatient_id = #{inpatientId,jdbcType=BIGINT}, + age = #{age,jdbcType=INTEGER}, input_status = #{inputStatus,jdbcType=TINYINT}, hospital_id = #{hospitalId,jdbcType=BIGINT}, user_id = #{userId,jdbcType=BIGINT}, diff --git a/tcm/src/main/resources/mapper_raw/QuestionMapper.xml b/tcm/src/main/resources/mapper_raw/QuestionMapper.xml index 516816c4..ff0d3f91 100644 --- a/tcm/src/main/resources/mapper_raw/QuestionMapper.xml +++ b/tcm/src/main/resources/mapper_raw/QuestionMapper.xml @@ -8,6 +8,7 @@ + @@ -77,8 +78,8 @@ - id, question, code, sort, units, type, reference_lower, reference_upper, relevance_option_id, - search_criteria, remark, operator, created_at, updated_at, rec_status + id, question, code, sort, units, type, fill_status, reference_lower, reference_upper, + relevance_option_id, search_criteria, remark, operator, created_at, updated_at, rec_status