| 
					
				 | 
			
			
				@ -0,0 +1,199 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.care.service.consult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.service.sign.ServicePackageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.im.ConsultDo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.im.ConsultTeamDo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.patient.BasePatientDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.im.dao.ConsultDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.im.dao.ConsultTeamDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.im.util.ImUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.patient.dao.BasePatientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.ResponseContant; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Date; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import static com.yihu.jw.rm.hospital.BaseHospitalRequestMapping.PatientIM.patientInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				/** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 * Created by yeshijie on 2020/12/23. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Service 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class ConsultTeamService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BasePatientDao patientDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ConsultDao consultDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ImUtil imUtill; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ConsultTeamDao consultTeamDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ServicePackageService servicePackageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ServicePackageSignRecordDao servicePackageSignRecordDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject updateIMMsg(String sessionId,String sessionType,String msgId,String content){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(sessionId) || StringUtils.isEmpty(sessionType) || StringUtils.isEmpty(msgId) || StringUtils.isEmpty(content)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("data", "参数【sessionId,sessionType,msgId,content】不可为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("status", -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject contentJsonObj = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            contentJsonObj = JSONObject.parseObject(content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("status", -1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("data", "【content】必须是json格式:" + e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String response = imUtill.updateMessage(sessionId,sessionType,msgId,content); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return JSONObject.parseObject(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据咨询查关联业务记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param type 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject queryByConsultCode(String code,Integer type){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(StringUtils.isEmpty(code) || null == type){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultDo consult = consultDao.queryByIdAndType(code,type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null == consult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("data", ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        switch (type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            case 20: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//                WlyyDoorServiceOrderDO orderDO = wlyyDoorServiceOrderDao.findOne(consult.getRelationCode()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//                JSONObject patientInfo = wlyyDoorServiceOrderService.queryOrderCardInfo(orderDO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                result.put("data", patientInfo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null == result.get("data")){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put("data", consult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 添加一条咨询记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param patient 患者信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param title 咨询标题 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param type 咨询类型:20 紧急救助咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public ConsultDo addConsult(String patient, String title, String symptoms, String images, int type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultDo consult = new ConsultDo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setCzrq(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setDel("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setPatient(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setTitle(title); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setSymptoms(symptoms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setImages(images); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setType(type); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return consultDao.save(consult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 添加紧急救助咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject addServiceConsult(String orderId,String patient,String symptoms) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject result = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 判断居民是否已经签约 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<ServicePackageSignRecordDO> signRecordDOs = servicePackageSignRecordDao.findByStatusAndPatient(1,patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(signRecordDOs.size() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "当前居民未签约,无法进行紧急救助咨询!"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        // 添加咨询记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BasePatientDO patientDO = patientDao.findById(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null == patientDO){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.fail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "当前咨询的居民不存在!"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //咨询记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String title = patientDO.getName() + "-发起了服务咨询"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultDo consult = addConsult(patient,title,symptoms,patientDO.getPhone(),20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //咨询详细信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultTeamDo consultTeam = new ConsultTeamDo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setType(20);  //紧急救助咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        consultTeam.setAdminTeamId(signFamily.getAdminTeamId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setRelationCode(orderId); //关联业务code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setSymptoms(symptoms); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setPatient(patient); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setName(patientDO.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setBirthday(patientDO.getBirthday()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setSex(patientDO.getSex()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setPhoto(patientDO.getPhoto()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setCzrq(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setDel("1"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setStatus(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setEvaluate(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setDoctorRead(1); // 医生未读数量为1 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consult.setRelationCode(orderId);//关联业务code 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setConsult(consult.getId()); // 设置咨询标识 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //(im创建咨询) 紧急救助咨询的sessionid为居民code+咨询类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sessionId = patient + "_" + consult.getId() + "_" + consultTeam.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //4、 紧急救助咨询-参与者 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject participants = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.put(patient, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //加入团队医生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String,Object>> doctorList = servicePackageService.fingdDoctorByPaitenId(patient,"emergencyAssistance"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(Map<String,Object> map:doctorList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            participants.put(String.valueOf(map.get("id")), 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String content = patientDO.getName() + "-紧急救助咨询"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject messages = imUtill.getCreateTopicMessage(patient, patientDO.getName(), consult.getTitle(), content, consult.getImages(), ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject imResponseJson = imUtill.createTopics(sessionId, consult.getId(), content, participants, messages, ImUtil.SESSION_TYPE_EMERGENCY_ASSISTANCE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (imResponseJson == null || imResponseJson.getInteger("status") == -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String failMsg = "发起服务咨询时:IM" + imResponseJson.getString("message"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.put(ResponseContant.resultMsg, failMsg); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setStartMsgId(imResponseJson.get("start_msg_id").toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeamDao.save(consultTeam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultDao.save(consult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultFlag, ResponseContant.success); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        result.put(ResponseContant.resultMsg, consultTeam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |