diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java b/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java index a99e098a..f4fa85e6 100644 --- a/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/VirtualPatientManageApplication.java @@ -1,9 +1,14 @@ package com.supervision.manage; +import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.ComponentScans; @SpringBootApplication +@MapperScan(basePackages = {"com.supervision.**.mapper"}) +@ComponentScan(basePackages = {"com.supervision.**"}) public class VirtualPatientManageApplication { public static void main(String[] args) { diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/controller/MedicalRecManageController.java b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/MedicalRecManageController.java new file mode 100644 index 00000000..cb234e45 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/controller/MedicalRecManageController.java @@ -0,0 +1,48 @@ +package com.supervision.manage.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.manage.pojo.vo.MedicalRecManageVO; +import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.manage.service.MedicalRecManageService; +import com.supervision.model.Disease; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +@Api(tags = "病历管理") +@RestController +@RequestMapping("medicalRecManage") +@RequiredArgsConstructor +public class MedicalRecManageController { + + private final MedicalRecManageService medicalRecManageService; + + @ApiOperation("初步诊断下拉列表联想") + @GetMapping("queryDiseaseListByKeyWord") + public List queryDiseaseListByKeyWord(@NotBlank(message = "关键字不能为空") String keyword) { + return medicalRecManageService.queryDiseaseListByKeyWord(keyword); + } + + @ApiOperation("病历管理分页查询") + @GetMapping("queryMedicalRecPage") + public IPage queryMedicalRecManagePage(@ApiParam("主诉") String selfDescKeyword, + @ApiParam("性别") String gender, + @ApiParam("疾病ID") String diseaseId, + Integer pageNum, Integer pageSize) { + return medicalRecManageService.queryMedicalRecManagePage(selfDescKeyword, gender, diseaseId, pageNum, pageSize); + } + + @ApiOperation("创建病历") + @PostMapping("createMedicalRec") + public void createMedicalRec(@RequestBody MedicalRecManageVO reqVO){ + + } + + + +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java new file mode 100644 index 00000000..fa510a8f --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/pojo/vo/MedicalRecManageVO.java @@ -0,0 +1,29 @@ +package com.supervision.manage.pojo.vo; + +import com.supervision.model.AskPatientAnswer; +import com.supervision.model.MedicalRec; +import com.supervision.model.Patient; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotBlank; +import java.util.List; + +@EqualsAndHashCode(callSuper = true) +@Data +@ApiModel(value = "病历管理创建及新建", parent = MedicalRec.class) +public class MedicalRecManageVO extends MedicalRec { + + @ApiModelProperty("step:1 基础信息") + private Patient patient; + + @NotBlank(message = "疾病不能为空") + @ApiModelProperty("step:1 疾病ID(目前只支持单选疾病,且修改时不允许变更)") + private String diseaseId; + + @ApiModelProperty("step:4 应答策略") + private List qaList; + +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java new file mode 100644 index 00000000..8078a139 --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/MedicalRecManageService.java @@ -0,0 +1,18 @@ +package com.supervision.manage.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.supervision.manage.pojo.vo.MedicalRecManageVO; +import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.model.Disease; +import org.springframework.web.bind.annotation.RequestBody; + +import java.util.List; + +public interface MedicalRecManageService { + + List queryDiseaseListByKeyWord(String keyword); + + IPage queryMedicalRecManagePage(String selfDescKeyword, String gender, String diseaseId, Integer pageNum, Integer pageSize); + + void createMedicalRec(MedicalRecManageVO reqVO); +} diff --git a/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java new file mode 100644 index 00000000..2ddfbd1b --- /dev/null +++ b/virtual-patient-manage/src/main/java/com/supervision/manage/service/impl/MedicalRecManageServiceImpl.java @@ -0,0 +1,73 @@ +package com.supervision.manage.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.supervision.exception.BusinessException; +import com.supervision.manage.pojo.vo.MedicalRecManageVO; +import com.supervision.model.AskPatientAnswer; +import com.supervision.model.MedicalRec; +import com.supervision.model.Patient; +import com.supervision.service.AskPatientAnswerService; +import com.supervision.vo.manage.MedicalRecPageResVO; +import com.supervision.manage.service.MedicalRecManageService; +import com.supervision.model.Disease; +import com.supervision.service.DiseaseService; +import com.supervision.service.MedicalRecService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Slf4j +@Service +@RequiredArgsConstructor +public class MedicalRecManageServiceImpl implements MedicalRecManageService { + + private final DiseaseService diseaseService; + + private final MedicalRecService medicalRecService; + + private final AskPatientAnswerService askPatientAnswerService; + + public List queryDiseaseListByKeyWord(String keyword) { + // 注意,这里不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造 + return diseaseService.lambdaQuery().eq(Disease::getDiseaseType, 0).like(Disease::getDiseaseName, keyword).list(); + } + + @Override + public IPage queryMedicalRecManagePage(String selfDescKeyword, String gender, String diseaseId, Integer pageNum, Integer pageSize) { + // 注意,这里的diseaseId不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造 + return medicalRecService.queryMedicalRecManagePage(selfDescKeyword, gender, diseaseId, pageNum, pageSize); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createMedicalRec(MedicalRecManageVO reqVO) { + // 首先新增病人 + Patient patient = reqVO.getPatient(); + patient.insert(); + // 然后保存病历 + MedicalRec medicalRec = BeanUtil.toBean(reqVO, MedicalRec.class); + medicalRec.setPatientId(patient.getId()); + // 注意,这里新增的时候,目前只支持单个疾病,如果需要多个疾病,需要在这里改造,先新增出来一个疾病 + medicalRec.setDiseaseId(reqVO.getDiseaseId()); + medicalRec.insert(); + // 这里生成一个新的编号(首先去数据库里面查询编号,然后用最大的编号+1)(可能存在并发修改导致编码重复问题,不是重点,等有问题再说) + medicalRecService.updateMedicalRecNo("QL", "男".equals(patient.getGender()) ? "M" : "F", medicalRec.getId()); + // 然后保存病历编码 + List qaList = reqVO.getQaList(); + for (AskPatientAnswer askPatientAnswer : qaList) { + if (StrUtil.isBlank(askPatientAnswer.getLibraryQuestionId())) { + throw new BusinessException("问题ID不能为空"); + } + askPatientAnswer.setMedicalId(medicalRec.getId()); + askPatientAnswer.setPatientId(patient.getId()); + } + askPatientAnswerService.saveBatch(qaList); + } +} diff --git a/virtual-patient-model/src/main/java/com/supervision/mapper/MedicalRecMapper.java b/virtual-patient-model/src/main/java/com/supervision/mapper/MedicalRecMapper.java index 17ecf939..a3f11ab2 100644 --- a/virtual-patient-model/src/main/java/com/supervision/mapper/MedicalRecMapper.java +++ b/virtual-patient-model/src/main/java/com/supervision/mapper/MedicalRecMapper.java @@ -1,16 +1,41 @@ package com.supervision.mapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.supervision.model.MedicalRec; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.supervision.vo.manage.MedicalRecPageResVO; +import org.apache.ibatis.annotations.Param; /** -* @author flevance -* @description 针对表【vp_medical_rec(病历表)】的数据库操作Mapper -* @createDate 2023-11-03 11:25:43 -* @Entity com.supervision.model.MedicalRec -*/ + * @author flevance + * @description 针对表【vp_medical_rec(病历表)】的数据库操作Mapper + * @createDate 2023-11-03 11:25:43 + * @Entity com.supervision.model.MedicalRec + */ public interface MedicalRecMapper extends BaseMapper { + /** + * 后台管理-病历管理-列表查询 + * + * @param selfDescKeyword 主诉 + * @param gender 性别 + * @param diseaseId 疾病ID + * @param page 分页 + * @return 结果 + */ + IPage queryMedicalRecManagePage(@Param("selfDescKeyword") String selfDescKeyword, + @Param("gender") String gender, + @Param("diseaseId") String diseaseId, @Param("page") Page page); + + /** + * 生成一个病历编码,是最大的病历编码+1 + * @param code 医院名称缩写 + * @param gender 性别 M 男 F 女 + * @param id 记录ID + */ + void updateMedicalRecNo(@Param("code") String code, @Param("gender") String gender, @Param("id") String id); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/model/AskPatientAnswer.java b/virtual-patient-model/src/main/java/com/supervision/model/AskPatientAnswer.java index 1f7f6a0b..e7a85634 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/AskPatientAnswer.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/AskPatientAnswer.java @@ -37,19 +37,16 @@ public class AskPatientAnswer implements Serializable { /** * 问题库问题ID */ + @ApiModelProperty(" 问题库问题ID") private String libraryQuestionId; /** * 回答 */ + @ApiModelProperty(" 回答") @TableField(typeHandler = StringListTypeHandler.class) private List answer; - /** - * 是否必查-初步诊断依据 0否1是 - */ - private Integer requireCheck; - /** * 创建人ID */ diff --git a/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java b/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java index 0487a730..d0a39116 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/MedicalRec.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.util.List; +import com.baomidou.mybatisplus.extension.activerecord.Model; import com.supervision.handler.StringListTypeHandler; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -19,7 +20,7 @@ import lombok.Data; */ @TableName(value = "vp_medical_rec", autoResultMap = true) @Data -public class MedicalRec implements Serializable { +public class MedicalRec extends Model implements Serializable { /** * 主键 */ diff --git a/virtual-patient-model/src/main/java/com/supervision/model/Patient.java b/virtual-patient-model/src/main/java/com/supervision/model/Patient.java index 09bf85f7..3c0337fc 100644 --- a/virtual-patient-model/src/main/java/com/supervision/model/Patient.java +++ b/virtual-patient-model/src/main/java/com/supervision/model/Patient.java @@ -3,6 +3,7 @@ package com.supervision.model; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; import com.supervision.handler.StringListTypeHandler; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -21,7 +22,7 @@ import java.util.List; @TableName(value = "vp_patient") @Data @ApiModel -public class Patient implements Serializable { +public class Patient extends Model implements Serializable { /** * 主键 */ diff --git a/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java b/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java index ceb949d8..39e81202 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/MedicalRecService.java @@ -1,7 +1,9 @@ package com.supervision.service; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.supervision.model.MedicalRec; import com.baomidou.mybatisplus.extension.service.IService; +import com.supervision.vo.manage.MedicalRecPageResVO; /** * @author flevance @@ -10,4 +12,21 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface MedicalRecService extends IService { + /** + * 后台管理-病历管理-列表查询 + * @param selfDescKeyword 主诉 + * @param gender 性别 + * @param diseaseId 疾病ID + * @return 结果 + */ + IPage queryMedicalRecManagePage(String selfDescKeyword, String gender, String diseaseId, Integer pageNum, Integer pageSize); + + /** + * 生成一个病历编码,是最大的病历编码+1 + * @param code 医院名称缩写 + * @param gender 性别 M 男 F 女 + * @param id 记录ID + */ + void updateMedicalRecNo(String code,String gender,String id); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java index fa5c2149..eab1f5a8 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/MedicalRecServiceImpl.java @@ -1,9 +1,12 @@ package com.supervision.service.impl; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.supervision.model.MedicalRec; import com.supervision.service.MedicalRecService; import com.supervision.mapper.MedicalRecMapper; +import com.supervision.vo.manage.MedicalRecPageResVO; import org.springframework.stereotype.Service; /** @@ -15,6 +18,28 @@ import org.springframework.stereotype.Service; public class MedicalRecServiceImpl extends ServiceImpl implements MedicalRecService{ + /** + * 后台管理-病历管理-列表查询 + * @param selfDescKeyword 主诉 + * @param gender 性别 + * @param diseaseId 疾病ID + * @return 结果 + */ + @Override + public IPage queryMedicalRecManagePage(String selfDescKeyword, String gender, String diseaseId, Integer pageNum, Integer pageSize) { + return this.baseMapper.queryMedicalRecManagePage(selfDescKeyword, gender, diseaseId, new Page<>(pageNum,pageSize)); + } + + /** + * 生成一个病历编码,是最大的病历编码+1 + * @param code 医院名称缩写 + * @param gender 性别 M 男 F 女 + * @param id 记录ID + */ + @Override + public void updateMedicalRecNo(String code,String gender,String id) { + this.baseMapper.updateMedicalRecNo(code, gender, id); + } } diff --git a/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java new file mode 100644 index 00000000..6b984fc2 --- /dev/null +++ b/virtual-patient-model/src/main/java/com/supervision/vo/manage/MedicalRecPageResVO.java @@ -0,0 +1,9 @@ +package com.supervision.vo.manage; + +import lombok.Data; + +@Data +public class MedicalRecPageResVO { + + +} diff --git a/virtual-patient-model/src/main/resources/mapper/AskPatientAnswerMapper.xml b/virtual-patient-model/src/main/resources/mapper/AskPatientAnswerMapper.xml index 295334af..01481ef2 100644 --- a/virtual-patient-model/src/main/resources/mapper/AskPatientAnswerMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/AskPatientAnswerMapper.xml @@ -11,7 +11,6 @@ - @@ -20,7 +19,7 @@ id,patient_id,medical_id,library_question_id, - answer,require_check,create_user_id, + answer,create_user_id, create_time,update_user_id,update_time diff --git a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml index 76151b7e..95a1ba11 100644 --- a/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml +++ b/virtual-patient-model/src/main/resources/mapper/MedicalRecMapper.xml @@ -5,21 +5,56 @@ - - - - - - - - - + + + + + + + + + - id,no,patient_id, + id + ,no,patient_id, patient_self_desc,symptoms,primarily_diagnosis_criteria, confirm_diagnosis_criteria,confirm_diagnosis_criteria + + + UPDATE vp_medical_rec + SET no = CONCAT(#{code}, LPAD( + IFNULL((SELECT MAX(RIGHT (t.no, LENGTH(t.no) - 2)) + 1 FROM (SELECT * FROM vp_medical_rec) t), 1), 6, + '0'), #{gender}) + WHERE id = #{id}; + + + diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java index 290cd773..f41183dd 100644 --- a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskDiagnosisResultServiceImpl.java @@ -176,9 +176,8 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService List qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list(); if (CollectionUtil.isNotEmpty(qaRecordList)) { List list = askPatientAnswerService.lambdaQuery() - .eq(AskPatientAnswer::getPatientId, patient.getId()) - .eq(AskPatientAnswer::getRequireCheck, 1).list(); - // 获取必问的项目 + .eq(AskPatientAnswer::getPatientId, patient.getId()).list(); + // 获取配置了答案的项目(配置了答案的,认为是正确,没有配置答案的,走默认回答的,不标记为以正确) Set requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet()); List qaList = qaRecordList.stream().map(e -> { BasisDiagnosisNodeResVO node = new BasisDiagnosisNodeResVO();