|
@@ -1,19 +1,33 @@
|
|
|
package com.diagbot.facade;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.diagbot.dto.GetTopPatientInfoDTO;
|
|
|
import com.diagbot.dto.PatientInfoDTO;
|
|
|
+import com.diagbot.dto.RegisterInfoDTO;
|
|
|
import com.diagbot.dto.SignInDTO;
|
|
|
+import com.diagbot.entity.DoctorInfo;
|
|
|
+import com.diagbot.entity.HospitalDept;
|
|
|
import com.diagbot.entity.PatientInfo;
|
|
|
+import com.diagbot.entity.SysSet;
|
|
|
+import com.diagbot.enums.VisibleIdTypeEnum;
|
|
|
+import com.diagbot.idc.VisibleIdCreater;
|
|
|
+import com.diagbot.service.DoctorInfoService;
|
|
|
+import com.diagbot.service.HospitalDeptService;
|
|
|
import com.diagbot.service.impl.PatientInfoServiceImpl;
|
|
|
+import com.diagbot.util.BeanUtil;
|
|
|
import com.diagbot.util.DateUtil;
|
|
|
+import com.diagbot.util.IdCard;
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
+import com.diagbot.util.StringUtil;
|
|
|
import com.diagbot.vo.GetTopPatientInfoVO;
|
|
|
import com.diagbot.vo.PatientInfoVO;
|
|
|
import com.diagbot.vo.SignInVO;
|
|
|
import com.google.common.collect.Lists;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.bind.annotation.RequestBody;
|
|
|
|
|
|
-import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -28,8 +42,18 @@ public class PatientInfoFacade extends PatientInfoServiceImpl {
|
|
|
|
|
|
/*@Autowired
|
|
|
private DoctorPageModeFacade doctorPageModeFacade;*/
|
|
|
- /*@Autowired
|
|
|
- private DeptInfoFacade deptInfoFacade;*/
|
|
|
+ @Autowired
|
|
|
+ private HospitalDeptFacade hospitalDeptFacade;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("hospitalDeptServiceImpl")
|
|
|
+ private HospitalDeptService hospitalDeptService;
|
|
|
+ @Autowired
|
|
|
+ private DoctorInfoFacade doctorInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("doctorInfoServiceImpl")
|
|
|
+ private DoctorInfoService doctorInfoService;
|
|
|
+ @Autowired
|
|
|
+ private SysSetFacade sysSetFacade;
|
|
|
|
|
|
/**
|
|
|
* 获取患者信息
|
|
@@ -76,26 +100,211 @@ public class PatientInfoFacade extends PatientInfoServiceImpl {
|
|
|
* @return
|
|
|
*/
|
|
|
public List<SignInDTO> signIn(SignInVO signInVO) {
|
|
|
- String time = DateUtil.formatDateTime(new Date());
|
|
|
- List<SignInDTO> list = Lists.newArrayList();
|
|
|
- list.add(new SignInDTO("A001", "浙江大学医学院附属邵逸夫医院",
|
|
|
- "D01", "全科", "YS001", "付医生",
|
|
|
- "1600", "王明明", time, "4468352", "15"));
|
|
|
- list.add(new SignInDTO("A001", "浙江大学医学院附属邵逸夫医院",
|
|
|
- "D02", "儿科", "YS001", "付医生",
|
|
|
- "1600", "王明明", time, "4468352", "18"));
|
|
|
- if (signInVO.getPatientInfoType().equals("101")) {
|
|
|
- if (signInVO.getPatientInfo().equals("10123439991230120X")) {
|
|
|
- list.remove(1);
|
|
|
- } else if (signInVO.getPatientInfo().equals("666666180002301234")) {
|
|
|
- list.clear();
|
|
|
- } else if (signInVO.getPatientInfo().equals("100000201901010000")) {
|
|
|
- return null;
|
|
|
- }
|
|
|
+ List<SignInDTO> retList = null;
|
|
|
+
|
|
|
+ QueryWrapper<SysSet> sysSetQe = new QueryWrapper<>();
|
|
|
+ sysSetQe.eq("hospital_code", signInVO.getHospitalCode());
|
|
|
+ sysSetQe.eq("sys_type", 17);
|
|
|
+ sysSetQe.and(i -> i.eq("code", "patientinfo").or().eq("code", "junior_hospital"));
|
|
|
+ Map<String, String> sysSetCodeValue = sysSetFacade.list(sysSetQe).stream()
|
|
|
+ .collect(Collectors.toMap(SysSet::getCode, i -> i.getValue()));
|
|
|
+
|
|
|
+ RegisterInfoDTO rif = getRegisterInfo(signInVO);
|
|
|
+ if (rif != null) {
|
|
|
+ generateByRif(rif, StringUtil.isNotBlank(sysSetCodeValue.get("junior_hospital")));
|
|
|
+ retList = rifConverSin(rif);
|
|
|
+ } else if (signInVO.getPatientInfoType().equals("101")
|
|
|
+ && StringUtil.isNotBlank(sysSetCodeValue.get("patientinfo"))
|
|
|
+ && sysSetCodeValue.get("patientinfo").equals("1")) {
|
|
|
+ retList = autoGenePatinfo(signInVO);
|
|
|
+ }
|
|
|
+
|
|
|
+ return retList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动生成患者信息
|
|
|
+ *
|
|
|
+ * @param signInVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<SignInDTO> autoGenePatinfo(SignInVO signInVO) {
|
|
|
+ List<SignInDTO> retList = Lists.newArrayList();
|
|
|
+ SignInDTO signInDTO = new SignInDTO();
|
|
|
+ signInDTO.setHospitalCode(signInVO.getHospitalCode());
|
|
|
+ signInDTO.setHospitalName(signInVO.getHospitalName());
|
|
|
+ signInDTO.setSonHospitalCode(signInVO.getSonHospitalCode());
|
|
|
+ signInDTO.setSonHospitalName(signInVO.getSonHospitalName());
|
|
|
+
|
|
|
+ QueryWrapper<PatientInfo> patientInfoQe = new QueryWrapper<>();
|
|
|
+ patientInfoQe.eq("id_no", signInVO.getPatientInfo());
|
|
|
+ patientInfoQe.eq("name", signInVO.getPatientName());
|
|
|
+ PatientInfo patientInfo = getOne(patientInfoQe, true);
|
|
|
+ if (patientInfo == null) {
|
|
|
+ patientInfo = new PatientInfo();
|
|
|
+ patientInfo.setSex(IdCard.getGenderByIdCard(signInVO.getPatientInfo()));
|
|
|
+ patientInfo.setBirthday(DateUtil.parseDate(IdCard.getBirthByIdCard(signInVO.getPatientInfo()), "yyyyMMdd"));
|
|
|
+
|
|
|
+ VisibleIdCreater visibleIdCreater = new VisibleIdCreater(0, 0);
|
|
|
+ patientInfo.setCode("" + visibleIdCreater.getNextId(VisibleIdTypeEnum.PATIENT_NO.getKey()));
|
|
|
+ patientInfo.setRemark("1");//自动生成标志
|
|
|
+
|
|
|
+ save(patientInfo);
|
|
|
+ }
|
|
|
+ signInDTO.setPatientCode(patientInfo.getCode());
|
|
|
+ signInDTO.setPatientName(patientInfo.getName());
|
|
|
+
|
|
|
+ retList.add(signInDTO);
|
|
|
+ return retList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * his返回的挂号信息转化给前端
|
|
|
+ *
|
|
|
+ * @param rif
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<SignInDTO> rifConverSin(RegisterInfoDTO rif) {
|
|
|
+ List<SignInDTO> retList = Lists.newArrayList();
|
|
|
+ rif.getDetail().forEach(i -> {
|
|
|
+ SignInDTO signInDTO = new SignInDTO(
|
|
|
+ rif.getHospitalCode(),
|
|
|
+ rif.getHospitalName(),
|
|
|
+ rif.getSonHospitalCode(),
|
|
|
+ rif.getSonHospitalName(),
|
|
|
+ i.getHospitalDeptCode(),
|
|
|
+ i.getHospitalDeptName(),
|
|
|
+ i.getDoctorInfo().getCode(),
|
|
|
+ i.getDoctorInfo().getName(),
|
|
|
+ rif.getPatientInfo().getCode(),
|
|
|
+ rif.getPatientInfo().getName(),
|
|
|
+ i.getRecordTime(),
|
|
|
+ i.getRecordId(),
|
|
|
+ i.getRegisterNum()
|
|
|
+ );
|
|
|
+ retList.add(signInDTO);
|
|
|
+ });
|
|
|
+ return retList;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 由挂号信息检查病人科室医生信息,有更新,无插入
|
|
|
+ *
|
|
|
+ * @param rif
|
|
|
+ * @param isHason 是否有子医院
|
|
|
+ */
|
|
|
+ private void generateByRif(RegisterInfoDTO rif, boolean isHason) {
|
|
|
+ String hospitalCode = rif.getHospitalCode();
|
|
|
+ String hospitalName = rif.getHospitalName();
|
|
|
+ String sonHospitalCode = rif.getSonHospitalCode();
|
|
|
+ String sonHospitalName = rif.getSonHospitalName();
|
|
|
+
|
|
|
+ PatientInfo patientInfo = rif.getPatientInfo();
|
|
|
+ QueryWrapper<PatientInfo> patientInfoQe = new QueryWrapper<>();
|
|
|
+ patientInfoQe.eq("hospital_code", hospitalCode);
|
|
|
+ patientInfoQe.eq("code", patientInfo.getCode());
|
|
|
+ PatientInfo patientInfoQuery = getOne(patientInfoQe, true);
|
|
|
+ if (patientInfoQuery == null) {
|
|
|
+ patientInfo.setHospitalCode(hospitalCode);
|
|
|
+ save(patientInfo);
|
|
|
+ } else {
|
|
|
+ BeanUtil.copyProperties(patientInfo, patientInfoQuery);
|
|
|
+ updateById(patientInfoQuery);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<String> deptCodeList = rif.getDetail().stream()
|
|
|
+ .filter(i -> StringUtil.isNotBlank(i.getHospitalDeptCode()) && StringUtil.isNotBlank(i.getHospitalDeptName()))
|
|
|
+ .map(i -> i.getHospitalDeptCode())
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ QueryWrapper<HospitalDept> hospitalDeptQe = new QueryWrapper<>();
|
|
|
+ hospitalDeptQe.eq("hospital_code", isHason ? sonHospitalCode : hospitalCode);
|
|
|
+ hospitalDeptQe.in("code", deptCodeList);
|
|
|
+ Map<String, HospitalDept> deptMap = hospitalDeptFacade.list(hospitalDeptQe)
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.toMap(HospitalDept::getCode, i -> i));
|
|
|
+ List<HospitalDept> deptSaveOrUpdateList = Lists.newArrayList();
|
|
|
+ rif.getDetail().stream()
|
|
|
+ .filter(i -> StringUtil.isNotBlank(i.getHospitalDeptCode()) && StringUtil.isNotBlank(i.getHospitalDeptName()))
|
|
|
+ .forEach(i -> {
|
|
|
+ HospitalDept hospitalDeptQuery = deptMap.get(i.getHospitalDeptCode());
|
|
|
+ if (hospitalDeptQuery == null) {
|
|
|
+ HospitalDept hospitalDept = new HospitalDept();
|
|
|
+ hospitalDept.setHospitalCode(isHason ? sonHospitalCode : hospitalCode);
|
|
|
+ hospitalDept.setHospitalName(isHason ? sonHospitalName : hospitalName);
|
|
|
+ hospitalDept.setCode(i.getHospitalDeptCode());
|
|
|
+ hospitalDept.setName(i.getHospitalDeptName());
|
|
|
+ hospitalDept.setconceptDeptName("全科");
|
|
|
+ deptSaveOrUpdateList.add(hospitalDept);
|
|
|
+ } else {
|
|
|
+ hospitalDeptQuery.setName(i.getHospitalDeptName());
|
|
|
+ deptSaveOrUpdateList.add(hospitalDeptQuery);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (ListUtil.isNotEmpty(deptSaveOrUpdateList)) {
|
|
|
+ hospitalDeptService.saveBatch(deptSaveOrUpdateList);
|
|
|
}
|
|
|
|
|
|
- return list;
|
|
|
+ List<String> doctorCodeList = rif.getDetail().stream()
|
|
|
+ .filter(i -> i.getDoctorInfo() != null).map(i -> i.getDoctorInfo())
|
|
|
+ .filter(i -> StringUtil.isNotBlank(i.getCode()) && StringUtil.isNotBlank(i.getName()))
|
|
|
+ .map(i -> i.getCode()).collect(Collectors.toList());
|
|
|
+ QueryWrapper<DoctorInfo> doctorInfoQe = new QueryWrapper<>();
|
|
|
+ doctorInfoQe.eq("hospital_code", hospitalCode);
|
|
|
+ doctorInfoQe.in("code", doctorCodeList);
|
|
|
+ Map<String, DoctorInfo> doctorMap = doctorInfoFacade.list(doctorInfoQe)
|
|
|
+ .stream().collect(Collectors.toMap(DoctorInfo::getCode, i -> i));
|
|
|
+ List<DoctorInfo> doctorSaveOrUpdateList = Lists.newArrayList();
|
|
|
+ rif.getDetail().stream()
|
|
|
+ .filter(i -> i.getDoctorInfo() != null).map(i -> i.getDoctorInfo())
|
|
|
+ .filter(i -> StringUtil.isNotBlank(i.getCode()) && StringUtil.isNotBlank(i.getName()))
|
|
|
+ .forEach(i -> {
|
|
|
+ DoctorInfo doctorInfo = new DoctorInfo();
|
|
|
+ DoctorInfo doctorInfoQuery = doctorMap.get(i.getCode());
|
|
|
+ if (doctorInfoQuery == null) {
|
|
|
+ BeanUtil.copyProperties(i, doctorInfo);
|
|
|
+ doctorInfo.setHospitalCode(hospitalCode);
|
|
|
+ } else {
|
|
|
+ BeanUtil.copyProperties(doctorInfoQuery, doctorInfo);
|
|
|
+ BeanUtil.copyProperties(i, doctorInfo);
|
|
|
+ }
|
|
|
+ doctorSaveOrUpdateList.add(doctorInfo);
|
|
|
+ });
|
|
|
+ if (ListUtil.isNotEmpty(doctorSaveOrUpdateList)) {
|
|
|
+ doctorInfoService.saveOrUpdateBatch(doctorSaveOrUpdateList);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 对接---获取挂号信息
|
|
|
+ * 某一时刻患者只可能在一家医院,所以获取到的挂号信息只能是当前医院的,当出现江干的大小医院情况时可采用2种:
|
|
|
+ * 1、预问诊必须选择小医院,对方接口小医院要求必传;2、his返回时间最近的一家医院挂号信息(可能不准确)。
|
|
|
+ * 大小医院信息使用his返回来的(未选择小医院时有用)
|
|
|
+ *
|
|
|
+ * @param signInVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RegisterInfoDTO getRegisterInfo(SignInVO signInVO) {
|
|
|
+ // String time = DateUtil.formatDateTime(new Date());
|
|
|
+ // List<SignInDTO> list = Lists.newArrayList();
|
|
|
+ // list.add(new SignInDTO("A001", "浙江大学医学院附属邵逸夫医院",
|
|
|
+ // "D01", "全科", "YS001", "付医生",
|
|
|
+ // "1600", "王明明", time, "4468352", "15"));
|
|
|
+ // list.add(new SignInDTO("A001", "浙江大学医学院附属邵逸夫医院",
|
|
|
+ // "D02", "儿科", "YS001", "付医生",
|
|
|
+ // "1600", "王明明", time, "4468352", "18"));
|
|
|
+ // if (signInVO.getPatientInfoType().equals("101")) {
|
|
|
+ // if (signInVO.getPatientInfo().equals("10123439991230120X")) {
|
|
|
+ // list.remove(1);
|
|
|
+ // } else if (signInVO.getPatientInfo().equals("666666180002301234")) {
|
|
|
+ // list.clear();
|
|
|
+ // } else if (signInVO.getPatientInfo().equals("100000201901010000")) {
|
|
|
+ // return null;
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+
|
|
|
+ RegisterInfoDTO registerInfoDTO = new RegisterInfoDTO();
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
-}
|
|
|
+}
|