|
@@ -0,0 +1,318 @@
|
|
|
+package com.diagbot.facade;
|
|
|
+
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.diagbot.dto.GetTopPatientInfoDjDTO;
|
|
|
+import com.diagbot.dto.RegisterInfoDTO;
|
|
|
+import com.diagbot.dto.SignInDTO;
|
|
|
+import com.diagbot.entity.DoctorInfo;
|
|
|
+import com.diagbot.entity.HospitalDept;
|
|
|
+import com.diagbot.entity.HospitalInfo;
|
|
|
+import com.diagbot.entity.PatientInfo;
|
|
|
+import com.diagbot.entity.SysSet;
|
|
|
+import com.diagbot.enums.VisibleIdTypeEnum;
|
|
|
+import com.diagbot.exception.CommonErrorCode;
|
|
|
+import com.diagbot.exception.CommonException;
|
|
|
+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.GetTopPatientInfoDjVO;
|
|
|
+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 java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Description: 对接-患者业务逻辑
|
|
|
+ * @author: wangyu
|
|
|
+ * @time: 2018/11/19 13:19
|
|
|
+ */
|
|
|
+@Component
|
|
|
+public class PatientInfoDjFacade extends PatientInfoServiceImpl {
|
|
|
+ @Autowired
|
|
|
+ private HospitalInfoFacade hospitalInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ private HospitalDeptFacade hospitalDeptFacade;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("hospitalDeptServiceImpl")
|
|
|
+ private HospitalDeptService hospitalDeptService;
|
|
|
+ @Autowired
|
|
|
+ private DoctorInfoFacade doctorInfoFacade;
|
|
|
+ @Autowired
|
|
|
+ @Qualifier("doctorInfoServiceImpl")
|
|
|
+ private DoctorInfoService doctorInfoService;
|
|
|
+ @Autowired
|
|
|
+ private SysSetFacade sysSetFacade;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对接-页面顶部病人医生科室信息——查询
|
|
|
+ *
|
|
|
+ * @param getTopPatientInfoDjVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public GetTopPatientInfoDjDTO getTopPatientInfoDj(GetTopPatientInfoDjVO getTopPatientInfoDjVO) {
|
|
|
+ GetTopPatientInfoDjDTO getTopPatientInfoDjDTO = this.baseMapper.getTopPatientInfoDj(getTopPatientInfoDjVO);
|
|
|
+ getTopPatientInfoDjDTO.setSystemTime(DateUtil.now());
|
|
|
+ getTopPatientInfoDjDTO.setRecordId(getTopPatientInfoDjVO.getRecordId());
|
|
|
+ getTopPatientInfoDjDTO.setPatientAge(DateUtil.yearCompare(getTopPatientInfoDjDTO.getBirthday(), DateUtil.now()));
|
|
|
+ if (StringUtil.isNotBlank(getTopPatientInfoDjVO.getHospitalDeptCode())) {
|
|
|
+ String hospitalCode = getTopPatientInfoDjVO.getHospitalCode();
|
|
|
+ QueryWrapper<SysSet> sysSetQe = new QueryWrapper<>();
|
|
|
+ sysSetQe.eq("hospital_code", hospitalCode);
|
|
|
+ sysSetQe.eq("sys_type", 17);
|
|
|
+ sysSetQe.eq("code", "junior_hospital");
|
|
|
+ SysSet sysSet = sysSetFacade.getOne(sysSetQe, true);
|
|
|
+ if (sysSet != null && StringUtil.isNotBlank(sysSet.getValue())) {
|
|
|
+ if (StringUtil.isBlank(getTopPatientInfoDjVO.getSonHospitalCode())) {
|
|
|
+ throw new CommonException(CommonErrorCode.RPC_ERROR, "子医院编码必传");
|
|
|
+ }
|
|
|
+ hospitalCode = getTopPatientInfoDjVO.getSonHospitalCode();
|
|
|
+ QueryWrapper<HospitalInfo> hospitalInfoQe = new QueryWrapper<>();
|
|
|
+ hospitalInfoQe.eq("code", hospitalCode);
|
|
|
+ HospitalInfo hospitalInfo = hospitalInfoFacade.getOne(hospitalInfoQe, true);
|
|
|
+ if (hospitalInfo != null) {
|
|
|
+ getTopPatientInfoDjDTO.setSonHospitalId(hospitalInfo.getId());
|
|
|
+ getTopPatientInfoDjDTO.setSonHospitalCode(hospitalInfo.getCode());
|
|
|
+ getTopPatientInfoDjDTO.setSonHospitalName(hospitalInfo.getName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ QueryWrapper<HospitalDept> hospitalDeptQe = new QueryWrapper<>();
|
|
|
+ hospitalDeptQe.eq("hospital_code", hospitalCode);
|
|
|
+ hospitalDeptQe.eq("code", getTopPatientInfoDjVO.getHospitalDeptCode());
|
|
|
+ HospitalDept hospitalDept = hospitalDeptFacade.getOne(hospitalDeptQe, true);
|
|
|
+ if (hospitalDept != null) {
|
|
|
+ getTopPatientInfoDjDTO.setHospitalDeptId(hospitalDept.getId());
|
|
|
+ getTopPatientInfoDjDTO.setHospitalDeptCode(hospitalDept.getCode());
|
|
|
+ getTopPatientInfoDjDTO.setHospitalDeptName(hospitalDept.getName());
|
|
|
+ getTopPatientInfoDjDTO.setSelfDeptName(hospitalDept.getConceptDeptName());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return getTopPatientInfoDjDTO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 患者登录
|
|
|
+ *
|
|
|
+ * @param signInVO
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<SignInDTO> signIn(SignInVO signInVO) {
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|