|
@ -1,55 +1,162 @@
|
|
|
package com.yihu.jw.processGuidance.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.base.processGuidance.BasePatientProcessGuidanceDO;
|
|
|
import com.yihu.jw.entity.base.processGuidance.BaseProcessGuidanceDeptDO;
|
|
|
import com.yihu.jw.entity.base.processGuidance.*;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.processGuidance.dao.BasePatientProcessGuidanceDao;
|
|
|
import com.yihu.jw.processGuidance.dao.BasePatientProcessGuidanceLogDao;
|
|
|
import com.yihu.jw.processGuidance.dao.BaseProcessGuidanceDao;
|
|
|
import com.yihu.jw.processGuidance.dao.BaseProcessGuidanceDeptDao;
|
|
|
import com.yihu.jw.processGuidance.dao.*;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* Created by yeshijie on 2022/11/18.
|
|
|
*/
|
|
|
@Service
|
|
|
public class ProcessGuidanceService {
|
|
|
private static final Logger logger = LoggerFactory.getLogger(ProcessGuidanceService.class);
|
|
|
|
|
|
@Autowired
|
|
|
private BasePatientDao patientDao;
|
|
|
@Autowired
|
|
|
private BasePatientProcessGuidanceDao patientProcessGuidanceDao;
|
|
|
private BaseProcessGuidanceBookingDao processGuidanceBookingDao;
|
|
|
@Autowired
|
|
|
private BasePatientProcessGuidanceLogDao patientProcessGuidanceLogDao;
|
|
|
@Autowired
|
|
|
private BaseProcessGuidanceDao processGuidanceDao;
|
|
|
@Autowired
|
|
|
private BaseProcessGuidancePresetDao presetDao;
|
|
|
@Autowired
|
|
|
private BaseProcessGuidanceDeptDao deptDao;
|
|
|
@Autowired
|
|
|
private BaseProcessGuidanceThirdPushLogDao thirdPushLogDao;
|
|
|
@Autowired
|
|
|
private BaseProcessGuidanceNodeAppDao nodeAppDao;
|
|
|
|
|
|
|
|
|
public JSONArray findProcessGuidanceList(String patient,Integer isApp){
|
|
|
JSONArray jsonArray = new JSONArray();
|
|
|
List<BasePatientProcessGuidanceLogDO> logDOList = patientProcessGuidanceLogDao.findByPatientAndTypeAndStatus(patient,1,1);
|
|
|
for (BasePatientProcessGuidanceLogDO logDO:logDOList){
|
|
|
JSONObject json = new JSONObject();
|
|
|
json.put("patient",logDO.getPatient());
|
|
|
json.put("nodeCode",logDO.getNodeCode());
|
|
|
json.put("code",logDO.getCode());
|
|
|
json.put("relationId",logDO.getRelationId());
|
|
|
|
|
|
JSONArray presetArray = new JSONArray();
|
|
|
List<BaseProcessGuidancePresetDO> presetDOList = presetDao.findByProcessGuidanceId(logDO.getGuidanceId());
|
|
|
List<BasePatientProcessGuidanceLogDO> logDOS = patientProcessGuidanceLogDao.findByPatientAndCodeAndType(patient,logDO.getCode(),2);
|
|
|
Map<String,BasePatientProcessGuidanceLogDO> logDOMap = logDOS.stream().collect(Collectors.toMap
|
|
|
(BasePatientProcessGuidanceLogDO::getNodeCode,log->log,(oldLog,newLog)->oldLog));
|
|
|
for (BaseProcessGuidancePresetDO presetDO:presetDOList){
|
|
|
JSONObject presetJson = new JSONObject();
|
|
|
String processCode = presetDO.getProcessCode();
|
|
|
presetJson.put("processCode", processCode);
|
|
|
presetJson.put("processName", presetDO.getProcessName());
|
|
|
presetJson.put("sortNo", presetDO.getSortNo());
|
|
|
presetJson.put("isOptional", presetDO.getIsOptional());
|
|
|
if(logDOMap.containsKey(processCode)){
|
|
|
presetJson.put("status",1);
|
|
|
BaseProcessGuidanceBookingDO bookingDO = processGuidanceBookingDao.findById(logDOMap.get(processCode).getRelationId()).orElse(null);
|
|
|
presetJson.put("obj", bookingDO);
|
|
|
}else {
|
|
|
presetJson.put("status",0);
|
|
|
}
|
|
|
if(isApp==1){
|
|
|
List<BaseProcessGuidanceNodeAppDO> appDOS = nodeAppDao.findByNodeCode(processCode);
|
|
|
presetJson.put("appDOS", appDOS);
|
|
|
}
|
|
|
presetArray.add(presetJson);
|
|
|
}
|
|
|
json.put("presetDOList",presetArray);
|
|
|
jsonArray.add(json);
|
|
|
}
|
|
|
return jsonArray;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 医院推送的全流程指引
|
|
|
* type 全流程流程类型
|
|
|
*/
|
|
|
public void sendGuidanceInfo(String jsonData,String type){
|
|
|
BasePatientProcessGuidanceDO patientProcessGuidanceDO = JSONObject.parseObject(jsonData, BasePatientProcessGuidanceDO.class);
|
|
|
BasePatientDO patientDO = patientDao.findByIdcard(patientProcessGuidanceDO.getIdcard());
|
|
|
@Async
|
|
|
public void sendGuidanceInfo(String jsonData){
|
|
|
|
|
|
BaseProcessGuidanceThirdPushLogDO thirdPushLogDO = JSONObject.parseObject(jsonData, BaseProcessGuidanceThirdPushLogDO.class);
|
|
|
String api = thirdPushLogDO.getApi();
|
|
|
String param = thirdPushLogDO.getParam();
|
|
|
String nodeCode = thirdPushLogDO.getNodeCode();
|
|
|
if(StringUtils.isNotBlank(param)&¶m.length()>22000){
|
|
|
thirdPushLogDO.setParam(param.substring(0,22000));
|
|
|
}
|
|
|
try {
|
|
|
/**
|
|
|
* 根据不同的api调用不同的方法
|
|
|
*/
|
|
|
switch (api){
|
|
|
case "gotoOrg":
|
|
|
gotoOrg(thirdPushLogDO);
|
|
|
break;
|
|
|
default:
|
|
|
logger.info("未找到适配接口");
|
|
|
break;
|
|
|
}
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
|
|
|
thirdPushLogDO.setCreateTime(new Date());
|
|
|
thirdPushLogDao.save(thirdPushLogDO);
|
|
|
}
|
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void gotoOrg(BaseProcessGuidanceThirdPushLogDO thirdPushLogDO){
|
|
|
BaseProcessGuidanceBookingDO bookingDO = JSONObject.parseObject(thirdPushLogDO.getParam(), BaseProcessGuidanceBookingDO.class);
|
|
|
BasePatientDO patientDO = patientDao.findByIdcard(bookingDO.getIdcard());
|
|
|
if(patientDO==null){
|
|
|
patientProcessGuidanceDO.setPatient(patientDO.getId());
|
|
|
bookingDO.setPatient(patientDO.getId());
|
|
|
}
|
|
|
patientProcessGuidanceDO.setCreateTime(new Date());
|
|
|
//查找科室对应的流程
|
|
|
BaseProcessGuidanceDeptDO deptDO = deptDao.findByDeptCode(patientProcessGuidanceDO.getDeptCode());
|
|
|
if(deptDO!=null){
|
|
|
patientProcessGuidanceDO.setGuidanceId(deptDO.getProcessGuidanceId());
|
|
|
bookingDO.setCreateTime(new Date());
|
|
|
|
|
|
List<BaseProcessGuidancePresetDO> presetDOList = presetDao.findByProcessCode(thirdPushLogDO.getNodeCode());
|
|
|
if(presetDOList.size()>0){
|
|
|
BaseProcessGuidancePresetDO presetDO = presetDOList.get(0);
|
|
|
bookingDO.setGuidanceId(presetDO.getProcessGuidanceId());
|
|
|
thirdPushLogDO.setGuidanceId(presetDO.getProcessGuidanceId());
|
|
|
}
|
|
|
processGuidanceBookingDao.save(bookingDO);
|
|
|
|
|
|
patientProcessGuidanceDao.save(patientProcessGuidanceDO);
|
|
|
//新增流程开始日志
|
|
|
//判断是否唯一的流程标志 暂无
|
|
|
// String code = UUID.randomUUID().toString().replace("-", "");
|
|
|
String code = bookingDO.getAdmNo();
|
|
|
addLog(bookingDO.getPatient(),code, bookingDO.getId(), 1,1,thirdPushLogDO.getNodeCode(),bookingDO.getGuidanceId());
|
|
|
//新增流程过程日志
|
|
|
addLog(bookingDO.getPatient(),code, bookingDO.getId(), 2,1,thirdPushLogDO.getNodeCode(),bookingDO.getGuidanceId());
|
|
|
}
|
|
|
|
|
|
public void addLog(String patient,String code,String relationId,Integer type,Integer status,String nodeCode,String guidanceId){
|
|
|
BasePatientProcessGuidanceLogDO logDO = new BasePatientProcessGuidanceLogDO();
|
|
|
logDO.setCode(code);
|
|
|
logDO.setPatient(patient);
|
|
|
logDO.setRelationId(relationId);
|
|
|
logDO.setType(type);
|
|
|
logDO.setStatus(status);
|
|
|
logDO.setGuidanceId(guidanceId);
|
|
|
logDO.setNodeCode(nodeCode);
|
|
|
logDO.setCreateTime(new Date());
|
|
|
patientProcessGuidanceLogDao.save(logDO);
|
|
|
}
|
|
|
|
|
|
public void sendGuidance(String patient,String type,String orderId) {
|