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

dev_2.0.0
xueqingkun 1 year ago
commit c9f19d35bb

@ -1,7 +1,12 @@
package com.supervision.manage.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.dto.CommonDictTreeDTO;
import com.supervision.manage.pojo.vo.MedicalRecCheckResVO;
import com.supervision.manage.pojo.vo.MedicalRecInfoVO;
import com.supervision.manage.pojo.vo.MedicalRecManageVO;
import com.supervision.manage.pojo.vo.MedicalRecQaVO;
import com.supervision.service.CommonDicService;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.manage.service.MedicalRecManageService;
import com.supervision.model.Disease;
@ -43,6 +48,12 @@ public class MedicalRecManageController {
medicalRecManageService.createMedicalRec(reqVO);
}
@ApiOperation("创建病历时,应答策略查询问题(目前只支持单一疾病)")
@GetMapping("queryQuestionListByCreat")
public List<MedicalRecQaVO> queryQuestionListByCreat(String diseaseId) {
return medicalRecManageService.queryQuestionListByCreat(diseaseId);
}
@ApiOperation("修改病历")
@PostMapping("modifyMedicalRec")
public void modifyMedicalRec(@RequestBody MedicalRecManageVO reqVO) {
@ -51,9 +62,16 @@ public class MedicalRecManageController {
@ApiOperation("查询病例详细信息")
@GetMapping("queryMedicalRecInfo")
public void queryMedicalRecInfo(String id) {
public MedicalRecInfoVO queryMedicalRecInfo(String id) {
return medicalRecManageService.queryMedicalRecInfo(id);
}
@ApiOperation("删除病历")
@GetMapping("deleteMedicalRec")
public void deleteMedicalRec(String id) {
medicalRecManageService.deleteMedicalRec(id);
}
}

@ -0,0 +1,34 @@
package com.supervision.manage.pojo.vo;
import lombok.Data;
/**
*
*/
@Data
public class MedicalRecCheckResVO {
private String name;
private String location;
/**
* (01)
*/
private Integer isPrimarilyDiagnosisCriteria;
/**
* -(01)
*/
private Integer requireCheck;
/**
* (01)
*/
private Integer basisConfirm;
/**
* (01)
*/
private Integer basisIdentification;
}

@ -0,0 +1,28 @@
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 = MedicalRecManageVO.class)
public class MedicalRecInfoVO extends MedicalRecManageVO {
@ApiModelProperty("辅助检查")
private List<MedicalRecCheckResVO> ancillaryList;
@ApiModelProperty("体格检查")
private List<MedicalRecCheckResVO> physicalList;
@ApiModelProperty("处置计划列表")
private List<MedicalRecTreatmentPlanResVO> treatmentPlanList;
}

@ -24,6 +24,6 @@ public class MedicalRecManageVO extends MedicalRec {
private String diseaseId;
@ApiModelProperty("step:4 应答策略")
private List<AskPatientAnswer> qaList;
private List<MedicalRecQaVO> qaList;
}

@ -0,0 +1,37 @@
package com.supervision.manage.pojo.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class MedicalRecQaVO {
@ApiModelProperty("本条问答ID,对应vp_ask_patient_answer表ID,更新必填")
private String id;
/**
* ID
*/
@ApiModelProperty(" 问题库问题ID,新增更新时必填")
private String libraryQuestionId;
@ApiModelProperty("问题,新增更新时不需要")
private List<String> questionList;
@ApiModelProperty("字典ID,新增更新时不需要")
private Long dictId;
@ApiModelProperty("问题类目,新增更新时不需要")
private String dictNamePath;
@ApiModelProperty("默认回答,新增更新时不需要")
private String defaultAnswer;
@ApiModelProperty("针对病例的特定回答,新增更新时必填")
private String medicalRecAnswer;
}

@ -0,0 +1,12 @@
package com.supervision.manage.pojo.vo;
import lombok.Data;
/**
*
*/
@Data
public class MedicalRecTreatmentPlanResVO {
}

@ -1,7 +1,9 @@
package com.supervision.manage.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.supervision.manage.pojo.vo.MedicalRecInfoVO;
import com.supervision.manage.pojo.vo.MedicalRecManageVO;
import com.supervision.manage.pojo.vo.MedicalRecQaVO;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.model.Disease;
import org.springframework.web.bind.annotation.RequestBody;
@ -16,5 +18,11 @@ public interface MedicalRecManageService {
void createMedicalRec(MedicalRecManageVO reqVO);
List<MedicalRecQaVO> queryQuestionListByCreat(String diseaseId);
void modifyMedicalRec(MedicalRecManageVO reqVO);
MedicalRecInfoVO queryMedicalRecInfo(String id);
void deleteMedicalRec(String id);
}

@ -2,26 +2,24 @@ package com.supervision.manage.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
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.MedicalRecInfoVO;
import com.supervision.manage.pojo.vo.MedicalRecManageVO;
import com.supervision.manage.pojo.vo.MedicalRecQaVO;
import com.supervision.model.*;
import com.supervision.service.AskPatientAnswerService;
import com.supervision.service.*;
import com.supervision.vo.manage.MedicalRecPageResVO;
import com.supervision.manage.service.MedicalRecManageService;
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.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -36,6 +34,14 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
private final AskPatientAnswerService askPatientAnswerService;
private final PatientService patientService;
private final AskTemplateQuestionLibraryService askTemplateQuestionLibraryService;
private final CommonDicService commonDicService;
private final DiseaseQuestionService diseaseQuestionService;
public List<Disease> queryDiseaseListByKeyWord(String keyword) {
// 注意,这里不支持查询复杂疾病,如果需要支持复杂疾病,这里需要单独进行改造
return diseaseService.lambdaQuery().eq(Disease::getDiseaseType, 0).like(Disease::getDiseaseName, keyword).list();
@ -61,16 +67,53 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
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())) {
// 然后保存病历对应的问题
List<MedicalRecQaVO> qaList = reqVO.getQaList();
for (MedicalRecQaVO medicalRecQaVO : qaList) {
if (StrUtil.isBlank(medicalRecQaVO.getLibraryQuestionId())) {
throw new BusinessException("问题ID不能为空");
}
AskPatientAnswer askPatientAnswer = new AskPatientAnswer();
askPatientAnswer.setLibraryQuestionId(medicalRecQaVO.getLibraryQuestionId());
askPatientAnswer.setAnswer(CollUtil.newArrayList(medicalRecQaVO.getMedicalRecAnswer()));
askPatientAnswer.setMedicalId(medicalRec.getId());
askPatientAnswer.setPatientId(patient.getId());
askPatientAnswer.insert();
}
askPatientAnswerService.saveBatch(qaList);
}
@Override
public List<MedicalRecQaVO> queryQuestionListByCreat(String diseaseId) {
// 去vp_disease_question获取
List<DiseaseQuestion> list = diseaseQuestionService.lambdaQuery().eq(DiseaseQuestion::getDiseaseId, diseaseId).list();
if (CollUtil.isEmpty(list)){
return new ArrayList<>();
}
// 获取问题
Set<String> libraryQuestionIdSet = list.stream().map(DiseaseQuestion::getQuestionId).collect(Collectors.toSet());
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.listByIds(libraryQuestionIdSet);
Map<String, AskTemplateQuestionLibrary> askQuestionMap = askTemplateQuestionLibraryList.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity()));
// 获取字典
Set<Long> dictIdSet = askTemplateQuestionLibraryList.stream().map(AskTemplateQuestionLibrary::getDictId).collect(Collectors.toSet());
Map<Long, CommonDic> dictMap = commonDicService.listByIds(dictIdSet).stream().collect(Collectors.toMap(CommonDic::getId, Function.identity()));
List<MedicalRecQaVO> result = new ArrayList<>();
for (DiseaseQuestion diseaseQuestion : list) {
AskTemplateQuestionLibrary questionLibrary = askQuestionMap.get(diseaseQuestion.getQuestionId());
if (ObjectUtil.isNotEmpty(questionLibrary)) {
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
medicalRecQaVO.setLibraryQuestionId(diseaseQuestion.getQuestionId());
// 问题
medicalRecQaVO.setQuestionList(questionLibrary.getQuestion());
// 类目
medicalRecQaVO.setDictId(questionLibrary.getDictId());
// 类目名称
medicalRecQaVO.setDictNamePath(dictMap.getOrDefault(questionLibrary.getDictId(), new CommonDic()).getNameZhPath());
// 默认回答
medicalRecQaVO.setDefaultAnswer(CollUtil.getFirst(questionLibrary.getDefaultAnswer()));
result.add(medicalRecQaVO);
}
}
return result;
}
@Override
@ -88,16 +131,92 @@ public class MedicalRecManageServiceImpl implements MedicalRecManageService {
// 首先找到数据库中的问答
List<AskPatientAnswer> existQAList = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalRec.getId()).list();
Map<String, AskPatientAnswer> existQAMap = existQAList.stream().collect(Collectors.toMap(AskPatientAnswer::getId, Function.identity()));
for (AskPatientAnswer askPatientAnswer : reqVO.getQaList()) {
if (StrUtil.isNotBlank(askPatientAnswer.getId())) {
// 存在的移除掉
existQAMap.remove(askPatientAnswer.getId());
askPatientAnswer.updateById();
for (MedicalRecQaVO medicalRecQaVO : reqVO.getQaList()) {
if (StrUtil.isBlank(medicalRecQaVO.getLibraryQuestionId())) {
throw new BusinessException("问题ID不能为空");
}
if (StrUtil.isNotBlank(medicalRecQaVO.getId())) {
// 存在的从Map中移除掉
AskPatientAnswer existAnswer = existQAMap.remove(medicalRecQaVO.getId());
// 然后进行更新
existAnswer.setAnswer(CollUtil.newArrayList(medicalRecQaVO.getMedicalRecAnswer()));
existAnswer.updateById();
} else {
AskPatientAnswer askPatientAnswer = new AskPatientAnswer();
askPatientAnswer.setLibraryQuestionId(medicalRecQaVO.getLibraryQuestionId());
askPatientAnswer.setAnswer(CollUtil.newArrayList(medicalRecQaVO.getMedicalRecAnswer()));
askPatientAnswer.setMedicalId(medicalRec.getId());
askPatientAnswer.setPatientId(patient.getId());
askPatientAnswer.insert();
}
}
// 将删除的移除
askPatientAnswerService.removeByIds(existQAMap.values().stream().map(AskPatientAnswer::getId).collect(Collectors.toSet()));
}
@Override
public MedicalRecInfoVO queryMedicalRecInfo(String id) {
MedicalRec medicalRec = medicalRecService.getById(id);
MedicalRecInfoVO medicalRecInfoVO = BeanUtil.toBean(medicalRec, MedicalRecInfoVO.class);
// 病人基本信息
medicalRecInfoVO.setPatient(patientService.getById(medicalRec.getPatientId()));
// 辅助检查
// medicalRecInfoVO.setAncillaryList();
// 体格检查
// medicalRecInfoVO.setPhysicalList();
// 处置计划
// medicalRecInfoVO.setTreatmentPlanList();
// 问答策略
medicalRecInfoVO.setQaList(queryMedicalRecQaInfo(id));
return medicalRecInfoVO;
}
/**
*
*/
private List<MedicalRecQaVO> queryMedicalRecQaInfo(String medicalRecId) {
List<AskPatientAnswer> list = askPatientAnswerService.lambdaQuery().eq(AskPatientAnswer::getMedicalId, medicalRecId).list();
List<MedicalRecQaVO> medicalRecQaList = list.stream().map(e -> {
MedicalRecQaVO medicalRecQaVO = new MedicalRecQaVO();
medicalRecQaVO.setId(e.getId());
medicalRecQaVO.setLibraryQuestionId(e.getLibraryQuestionId());
// 病历的回答
medicalRecQaVO.setMedicalRecAnswer(CollUtil.getFirst(e.getAnswer()));
return medicalRecQaVO;
}).collect(Collectors.toList());
// 开始构建问题
if (CollUtil.isNotEmpty(medicalRecQaList)) {
// 获取问题
Set<String> libraryQuestionIdSet = medicalRecQaList.stream().map(MedicalRecQaVO::getLibraryQuestionId).collect(Collectors.toSet());
List<AskTemplateQuestionLibrary> askTemplateQuestionLibraryList = askTemplateQuestionLibraryService.listByIds(libraryQuestionIdSet);
Map<String, AskTemplateQuestionLibrary> askQuestionMap = askTemplateQuestionLibraryList.stream().collect(Collectors.toMap(AskTemplateQuestionLibrary::getId, Function.identity()));
// 获取字典
Set<Long> dictIdSet = askTemplateQuestionLibraryList.stream().map(AskTemplateQuestionLibrary::getDictId).collect(Collectors.toSet());
Map<Long, CommonDic> dictMap = commonDicService.listByIds(dictIdSet).stream().collect(Collectors.toMap(CommonDic::getId, Function.identity()));
for (MedicalRecQaVO medicalRecQaVO : medicalRecQaList) {
AskTemplateQuestionLibrary questionLibrary = askQuestionMap.get(medicalRecQaVO.getLibraryQuestionId());
if (ObjectUtil.isNotEmpty(questionLibrary)) {
// 问题
medicalRecQaVO.setQuestionList(questionLibrary.getQuestion());
// 类目
medicalRecQaVO.setDictId(questionLibrary.getDictId());
// 类目名称
medicalRecQaVO.setDictNamePath(dictMap.getOrDefault(questionLibrary.getDictId(), new CommonDic()).getNameZhPath());
// 默认回答
medicalRecQaVO.setDefaultAnswer(CollUtil.getFirst(questionLibrary.getDefaultAnswer()));
}
}
}
return medicalRecQaList;
}
@Override
public void deleteMedicalRec(String id) {
medicalRecService.removeById(id);
// 删除病历时,如果是复合疾病,需要将疾病也删除,现在没有做复合疾病,所以先不管
}
}

@ -0,0 +1,18 @@
package com.supervision.dto;
import com.supervision.model.CommonDic;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@Data
public class CommonDictTreeDTO extends CommonDic {
/**
*
*/
private List<CommonDictTreeDTO> childDictTreeList;
}

@ -24,6 +24,11 @@ public class AskTemplateQuestionLibrary implements Serializable {
@TableId
private String id;
/**
* ID(common_dictID)
*/
private Long dictId;
/**
*
*/

@ -31,7 +31,7 @@ public class CommonDic extends Model<CommonDic> implements Serializable {
/**
*
*/
private String nameCh;
private String nameZh;
/**
*
@ -46,13 +46,18 @@ public class CommonDic extends Model<CommonDic> implements Serializable {
/**
* id
*/
private String parentId;
private Long parentId;
/**
* ,
*/
private Integer priority;
/**
*
*/
private String nameZhPath;
/**
*
*/

@ -1,8 +1,11 @@
package com.supervision.service;
import com.supervision.dto.CommonDictTreeDTO;
import com.supervision.model.CommonDic;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* @author Administrator
* @description vp_common_dic()Service
@ -10,4 +13,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface CommonDicService extends IService<CommonDic> {
/**
* group_code
* @param groupCode ID
*/
List<CommonDictTreeDTO> queryCommonDictTree(String groupCode);
}

@ -1,19 +1,58 @@
package com.supervision.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.supervision.dto.CommonDictTreeDTO;
import com.supervision.model.CommonDic;
import com.supervision.service.CommonDicService;
import com.supervision.mapper.CommonDicMapper;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* @author Administrator
* @description vp_common_dic()Service
* @createDate 2023-11-23 10:52:22
*/
* @author Administrator
* @description vp_common_dic()Service
* @createDate 2023-11-23 10:52:22
*/
@Service
public class CommonDicServiceImpl extends ServiceImpl<CommonDicMapper, CommonDic>
implements CommonDicService{
implements CommonDicService {
@Override
public List<CommonDictTreeDTO> queryCommonDictTree(String groupCode) {
List<CommonDic> list = super.lambdaQuery().eq(CommonDic::getGroupCode, groupCode).list();
Map<Long, List<CommonDic>> commonDicParentIdMap = list.stream().filter(e -> ObjectUtil.isNotNull(e.getParentId()))
.collect(Collectors.groupingBy(CommonDic::getParentId));
// 首先构建第一层节点
List<CommonDictTreeDTO> topList = list.stream().filter(e -> ObjectUtil.isNull(e.getParentId()))
.map(node -> BeanUtil.toBean(node, CommonDictTreeDTO.class)).collect(Collectors.toList());
// 递归构建树
recursionBuildTree(commonDicParentIdMap, topList);
return topList;
}
private void recursionBuildTree(Map<Long, List<CommonDic>> commonDicParentIdMap, List<CommonDictTreeDTO> sourceList) {
for (CommonDictTreeDTO parentNode : sourceList) {
List<CommonDic> commonDicList = commonDicParentIdMap.getOrDefault(parentNode.getId(), new ArrayList<>());
List<CommonDictTreeDTO> childNodeList = new ArrayList<>();
for (CommonDic commonDic : commonDicList) {
CommonDictTreeDTO childNode = BeanUtil.toBean(commonDic, CommonDictTreeDTO.class);
childNodeList.add(childNode);
}
parentNode.setChildDictTreeList(childNodeList);
// 继续迭代生成子集
recursionBuildTree(commonDicParentIdMap, childNodeList);
}
}
}

@ -6,6 +6,7 @@
<resultMap id="BaseResultMap" type="com.supervision.model.AskTemplateQuestionLibrary">
<id property="id" column="id" jdbcType="VARCHAR"/>
<result property="dictId" column="dict_id" jdbcType="BIGINT"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<result property="question" column="question" jdbcType="ARRAY"
@ -20,7 +21,7 @@
<sql id="Base_Column_List">
id
,code,description,
,dict_id,code,description,
question,default_answer,create_user_id,
create_time,update_user_id,update_time
</sql>

@ -5,23 +5,25 @@
<mapper namespace="com.supervision.mapper.CommonDicMapper">
<resultMap id="BaseResultMap" type="com.supervision.model.CommonDic">
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="nameCh" column="name_ch" jdbcType="VARCHAR"/>
<result property="nameEn" column="name_en" jdbcType="VARCHAR"/>
<result property="groupCode" column="group_code" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="VARCHAR"/>
<result property="priority" column="priority" jdbcType="INTEGER"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<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"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<id property="id" column="id" jdbcType="BIGINT"/>
<result property="code" column="code" jdbcType="VARCHAR"/>
<result property="nameZh" column="name_zh" jdbcType="VARCHAR"/>
<result property="nameEn" column="name_en" jdbcType="VARCHAR"/>
<result property="groupCode" column="group_code" jdbcType="VARCHAR"/>
<result property="parentId" column="parent_id" jdbcType="BIGINT"/>
<result property="priority" column="priority" jdbcType="INTEGER"/>
<result property="nameZhPath" column="name_zh_path" jdbcType="VARCHAR"/>
<result property="description" column="description" jdbcType="VARCHAR"/>
<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"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
</resultMap>
<sql id="Base_Column_List">
id,code,name_ch,
name_en,group_code,parent_id,
id
,code,name_ch,
name_en,group_code,parent_id,name_zh_path,
priority,description,create_user_id,
create_time,update_user_id,update_time
</sql>

Loading…
Cancel
Save