| 
					
				 | 
			
			
				@ -1,8 +1,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.jw.care.service.consult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.doorCoach.BaseDoorCoachOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.dao.sign.ServicePackageSignRecordDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.service.family.PatientFamilyMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.care.service.sign.ServicePackageService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.doctor.dao.BaseDoctorDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.doctor.BaseDoctorDO; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -12,12 +14,15 @@ import com.yihu.jw.entity.base.patient.BasePatientDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.assistance.EmergencyAssistanceDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.entity.care.securitymonitoring.SecurityMonitoringOrderDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				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 com.yihu.jw.utils.EntityUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang3.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.poi.ss.formula.functions.T; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -50,6 +55,8 @@ public class ConsultTeamService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private ServicePackageSignRecordDao servicePackageSignRecordDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private BaseDoorCoachOrderDao baseDoorCoachOrderDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private PatientFamilyMemberService familyMemberService; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject updateIMMsg(String sessionId,String sessionType,String msgId,String content){ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -209,44 +216,6 @@ public class ConsultTeamService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param assistanceDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endOperator 操作者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endType 1居民 2医生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean finishEmergencyConsult(EmergencyAssistanceDO assistanceDO, String endOperator, int endType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultDo consult = consultDao.findOne(consultTeam.getConsult()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sessionId = assistanceDO.getPatient() + "_" + consultTeam.getConsult() + "_" + consultTeam.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String operatorId = endOperator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String operatorName=null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (endType==1){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            BasePatientDO patientDO = patientDao.findById(endOperator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            operatorName = patientDO.getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            BaseDoctorDO doctorDO = doctorDao.findById(endOperator); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            operatorName = doctorDO.getName(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject obj =  imUtill.endTopics(sessionId,operatorId,operatorName,consultTeam.getConsult()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if (obj == null||obj.getInteger("status") == -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consultTeam.setEndMsgId(obj.getString("id")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consult.setEndTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consultTeam.setEndTime(new Date()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consultTeam.setStatus(1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consultDao.save(consult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            consultTeamDao.save(consultTeam); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 添加上门辅导服务咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -327,21 +296,117 @@ public class ConsultTeamService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param assistanceDO 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 添加安防警报咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param orderId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @throws Exception 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public JSONObject addSecurityMoConsult(String orderId,String patient,String proxyPatient,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(),22); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //咨询详细信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultTeamDo consultTeam = new ConsultTeamDo(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        consultTeam.setType(22);  //安防警报咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        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+咨询id+咨询类型 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sessionId = patient + "_" + consult.getId() + "_" + consultTeam.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //4、安防警报咨询-参与者  提供服务的助老员 老人本人 家属 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject participants = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        participants.put(patient, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (StringUtils.isNotBlank(proxyPatient)&&(!proxyPatient.equals(patient))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            participants.put(proxyPatient, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //家属 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray familyArr =  familyMemberService.getPatientMembers(patient,null,null,null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for (int i=0;i<familyArr.size();i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            JSONObject tmp = familyArr.getJSONObject(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String familyId = tmp.getString("id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            participants.put(familyId, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //加入团队医生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String,Object>> doctorList = servicePackageService.fingdDoctorByPaitenId(patient,"preventLost"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 结束咨询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param relationCode 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param patient sessionid 组成部分 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endOperator 操作者ID 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param endType 1居民 2医生 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean finishDoorCoachConsult(BaseDoorCoachOrderDO assistanceDO, String endOperator, int endType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public boolean finishConsult(String relationCode,String patient, String endOperator, int endType){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(relationCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (consultTeam==null){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ConsultDo consult = consultDao.findOne(consultTeam.getConsult()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sessionId = assistanceDO.getPatient() + "_" + consultTeam.getConsult() + "_" + consultTeam.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String sessionId = patient+ "_" + consultTeam.getConsult() + "_" + consultTeam.getType(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String operatorId = endOperator; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String operatorName=null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if (endType==1){ 
			 |