Merge remote-tracking branch 'origin/dev_2.0.0' into dev_2.0.0

dev_2.0.0
xueqingkun 1 year ago
commit 9825ba2ae8

@ -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) {

@ -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<Disease> queryDiseaseListByKeyWord(@NotBlank(message = "关键字不能为空") String keyword) {
return medicalRecManageService.queryDiseaseListByKeyWord(keyword);
}
@ApiOperation("病历管理分页查询")
@GetMapping("queryMedicalRecPage")
public IPage<MedicalRecPageResVO> 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){
}
}

@ -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<AskPatientAnswer> qaList;
}

@ -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<Disease> queryDiseaseListByKeyWord(String keyword);
IPage<MedicalRecPageResVO> queryMedicalRecManagePage(String selfDescKeyword, String gender, String diseaseId, Integer pageNum, Integer pageSize);
void createMedicalRec(MedicalRecManageVO reqVO);
}

@ -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<Disease> queryDiseaseListByKeyWord(String keyword) {
// 注意,这里不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造
return diseaseService.lambdaQuery().eq(Disease::getDiseaseType, 0).like(Disease::getDiseaseName, keyword).list();
}
@Override
public IPage<MedicalRecPageResVO> 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<AskPatientAnswer> 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);
}
}

@ -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<MedicalRec> {
/**
* --
*
* @param selfDescKeyword
* @param gender
* @param diseaseId ID
* @param page
* @return
*/
IPage<MedicalRecPageResVO> queryMedicalRecManagePage(@Param("selfDescKeyword") String selfDescKeyword,
@Param("gender") String gender,
@Param("diseaseId") String diseaseId, @Param("page") Page<MedicalRecPageResVO> 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);
}

@ -37,19 +37,16 @@ public class AskPatientAnswer implements Serializable {
/**
* ID
*/
@ApiModelProperty(" 问题库问题ID")
private String libraryQuestionId;
/**
*
*/
@ApiModelProperty(" 回答")
@TableField(typeHandler = StringListTypeHandler.class)
private List<String> answer;
/**
* - 01
*/
private Integer requireCheck;
/**
* ID
*/

@ -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<MedicalRec> implements Serializable {
/**
*
*/

@ -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<Patient> implements Serializable {
/**
*
*/

@ -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<MedicalRec> {
/**
* --
* @param selfDescKeyword
* @param gender
* @param diseaseId ID
* @return
*/
IPage<MedicalRecPageResVO> 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);
}

@ -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<MedicalRecMapper, MedicalRec>
implements MedicalRecService{
/**
* --
* @param selfDescKeyword
* @param gender
* @param diseaseId ID
* @return
*/
@Override
public IPage<MedicalRecPageResVO> 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);
}
}

@ -0,0 +1,9 @@
package com.supervision.vo.manage;
import lombok.Data;
@Data
public class MedicalRecPageResVO {
}

@ -11,7 +11,6 @@
<result property="libraryQuestionId" column="library_question_id" jdbcType="VARCHAR"/>
<result property="answer" column="answer" jdbcType="ARRAY"
typeHandler="com.supervision.handler.StringListTypeHandler"/>
<result property="requireCheck" column="require_check" jdbcType="INTEGER"/>
<result property="createUserId" column="create_user_id" jdbcType="VARCHAR"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateUserId" column="update_user_id" jdbcType="VARCHAR"/>
@ -20,7 +19,7 @@
<sql id="Base_Column_List">
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
</sql>
</mapper>

@ -5,21 +5,56 @@
<mapper namespace="com.supervision.mapper.MedicalRecMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.MedicalRec">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="no" column="no" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="diseaseId" column="disease_id" jdbcType="VARCHAR"/>
<result property="patientSelfDesc" column="patient_self_desc" jdbcType="VARCHAR"/>
<result property="symptoms" column="symptoms" jdbcType="VARCHAR"/>
<result property="primarilyDiagnosisCriteria" column="primarily_diagnosis_criteria" jdbcType="VARCHAR"/>
<result property="confirmDiagnosisCriteria" column="confirm_diagnosis_criteria" jdbcType="VARCHAR"/>
<result property="differentialDiagnosisCriteria" column="differential_diagnosis_criteria" jdbcType="VARCHAR"/>
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="no" column="no" jdbcType="VARCHAR"/>
<result property="patientId" column="patient_id" jdbcType="VARCHAR"/>
<result property="diseaseId" column="disease_id" jdbcType="VARCHAR"/>
<result property="patientSelfDesc" column="patient_self_desc" jdbcType="VARCHAR"/>
<result property="symptoms" column="symptoms" jdbcType="VARCHAR"/>
<result property="primarilyDiagnosisCriteria" column="primarily_diagnosis_criteria" jdbcType="VARCHAR"/>
<result property="confirmDiagnosisCriteria" column="confirm_diagnosis_criteria" jdbcType="VARCHAR"/>
<result property="differentialDiagnosisCriteria" column="differential_diagnosis_criteria" jdbcType="VARCHAR"/>
</resultMap>
<sql id="Base_Column_List">
id,no,patient_id,
id
,no,patient_id,
patient_self_desc,symptoms,primarily_diagnosis_criteria,
confirm_diagnosis_criteria,confirm_diagnosis_criteria
</sql>
<update id="updateMedicalRecNo">
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};
</update>
<select id="queryMedicalRecManagePage" resultType="com.supervision.vo.manage.MedicalRecPageResVO">
select
t1.id as medicalId,
t2.id as patientId,
t1.no as no,
t2.name as name,
t2.age as age,
t2.gender as gender,
if(t1.update_time is null, t1.create_time, t1.update_time) as time
from vp_medical_rec t1
left join vp_patient t2
on t1.patient_id = t2.id
<where>
<if test="selfDescKeyword != null and selfDescKeyword != ''">
AND t1.patient_self_desc like concat("%",#{selfDescKeyword}, "%")
</if>
<if test="gender != null and gender != ''">
AND t2.gender = #{gender}
</if>
<if test="gender != null and gender != ''">
AND t1.disease_id = #{diseaseId}
</if>
</where>
order by time desc
</select>
</mapper>

@ -176,9 +176,8 @@ public class AskDiagnosisResultServiceImpl implements AskDiagnosisResultService
List<DiagnosisQaRecord> qaRecordList = diagnosisQaRecordService.lambdaQuery().eq(DiagnosisQaRecord::getProcessId, processId).list();
if (CollectionUtil.isNotEmpty(qaRecordList)) {
List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery()
.eq(AskPatientAnswer::getPatientId, patient.getId())
.eq(AskPatientAnswer::getRequireCheck, 1).list();
// 获取必问的项目
.eq(AskPatientAnswer::getPatientId, patient.getId()).list();
// 获取配置了答案的项目(配置了答案的,认为是正确,没有配置答案的,走默认回答的,不标记为以正确)
Set<String> requireCheckIdSet = list.stream().map(AskPatientAnswer::getId).collect(Collectors.toSet());
List<BasisDiagnosisNodeResVO> qaList = qaRecordList.stream().map(e -> {
BasisDiagnosisNodeResVO node = new BasisDiagnosisNodeResVO();

Loading…
Cancel
Save