Prechádzať zdrojové kódy

Merge branch 'dev' of http://192.168.1.220:10080/Amoy2/wlyy2.0 into dev

Trick 5 rokov pred
rodič
commit
d129e3259d

+ 1 - 1
business/base-service/src/main/java/com/yihu/jw/hospital/prescription/service/PrescriptionService.java

@ -3270,7 +3270,7 @@ public class PrescriptionService extends BaseJpaService<WlyyPrescriptionDO, Pres
                "AND room.outpatient_id=outpatient.id " +
                "AND outpatient.status = 0 " +
                "AND room.doctor='"+doctor+"' " +
                "AND room.reservation_time is not null " +
                "AND room.reservation_time is not null AND  room.reservation_time >= '"+DateUtil.dateToStrShort(new Date())+" 00:00:00' " +
                "AND room.consult_type= 2 ";
    
        List<Map<String, Object>> rstotal = jdbcTemplate.queryForList(sql);

+ 168 - 6
business/im-service/src/main/java/com/yihu/jw/im/service/ImService.java

@ -943,8 +943,6 @@ public class ImService {
			// 查询患者信息
			BasePatientDO p = basePatientDao.findById(patient);
			
			
			
			if(!"0".equals(wlyyOutpatientDO.getStatus())){
				throw new RuntimeException("该就诊记录已被取消,无法接单!");
			}
@ -962,11 +960,15 @@ public class ImService {
			//4、创建咨询
			JSONObject users = new JSONObject();//咨询参与者
			
			String consultTitle = "";
			//协同门诊
			if("2".equals(wlyyOutpatientDO.getOutpatientType())){
				users.put(wlyyOutpatientDO.getGeneralDoctor(),0);
				ct.setType(12);
				consultTitle = "申请协同门诊";
			}else{
				users.put(patient, 0);
				consultTitle = "申请复诊";
			}
			users.put(doctorCode, 0);
			//关联业务code
@ -994,7 +996,7 @@ public class ImService {
			// 医生未读数量为1
			ct.setDoctorRead(1);
			// 添加咨询记录
			ConsultDo consult = addConsult(ct.getPatient(), "申请复诊", ct.getSymptoms(), ct.getImages(), ct.getType());
			ConsultDo consult = addConsult(ct.getPatient(), consultTitle, ct.getSymptoms(), ct.getImages(), ct.getType());
			// 设置关联指导
			consult.setGuidance(ct.getGuidance());
			//关联业务code
@ -1005,19 +1007,33 @@ public class ImService {
			//推送给IM去创建议题,取得成员消息
			
			JSONObject messages =  new JSONObject();
			JSONObject obj = new JSONObject();
			String sessionId = "";
			//协同门诊
			if("2".equals(wlyyOutpatientDO.getOutpatientType())){
				BaseDoctorDO generalDoctor = baseDoctorDao.findById(wlyyOutpatientDO.getGeneralDoctor());
				messages = imUtil.getCreateTopicMessage(generalDoctor.getId(),generalDoctor.getName(), consult.getTitle(), content, consult.getImages(), doctorCode);
				//5、(im创建咨询) 续方咨询的sessionid为居民code+就诊code+12(图文,视频,图文+视频)
				sessionId = patient + "_" + outpatientCode + "_" + ct.getType();
				obj = imUtil.createTopics(sessionId, consult.getId(), p.getName(), users, messages, imUtil.SESSION_TYPE_COLLABORATION_HOSPITAL);
			}else{
				messages = imUtil.getCreateTopicMessage(patient, p.getName(), consult.getTitle(), content, consult.getImages(), doctorCode);
				//5、(im创建咨询) 续方咨询的sessionid为居民code+就诊code+9(图文,视频,图文+视频)
				sessionId = patient + "_" + outpatientCode + "_" + ct.getType();
				
				if(1== type){
					//图文复诊
					obj = imUtil.createTopics(sessionId, consult.getId(), p.getName(), users, messages, imUtil.SESSION_TYPE_EXAMINATION);
				}else{
					//视频复诊+图文复诊
					obj = imUtil.createTopics(sessionId, consult.getId(), p.getName(), users, messages, imUtil.SESSION_TYPE_EXAMINATION_VIDEO);
				}
				
			}
			
			
			//5、(im创建咨询) 续方咨询的sessionid为居民code+就诊code+咨询类型(图文,视频,图文+视频)
			String sessionId = patient + "_" + outpatientCode + "_" + ct.getType();
			JSONObject obj = imUtil.createTopics(sessionId, consult.getId(), p.getName(), users, messages, imUtil.SESSION_TYPE_EXAMINATION);
			if (obj == null) {
				throw new RuntimeException("IM消息发送异常!");
			}
@ -1681,4 +1697,150 @@ public class ImService {
	public String patientGuaidenceAppend(String sender_id, String sender_name, String session_id,String content_type, String content, String business_type)throws Exception  {
		return imUtil.sendImMsg(sender_id, sender_name,session_id, content_type, content, "1");
	}
	
	/**
	 * 全科医生发起求助专科医生的专家咨询
	 * @param patient_code
	 * @param general_doctor
	 * @param special_doctor
	 * @param when
	 * @param symptoms
	 * @param images
	 * @param consult
	 * @return
	 */
	public JSONObject generalAddExpertConsult(String patient_code, String general_doctor, String special_doctor, String when, String symptoms, String images, ConsultTeamDo ct) throws Exception {
		// 设置咨询类型:15
		ct.setType(15);
		// 设置发病时间
		ct.setWhen(when);
		// 设置主要症状
		ct.setSymptoms(symptoms);
		// 设置咨询图片URL
		ct.setImages(images);
		// 设置咨询语音URL
		ct.setVoice(null);
		
		BaseDoctorDO generalDoctor = baseDoctorDao.findById(general_doctor);
		BaseDoctorDO specialDoctor = baseDoctorDao.findById(special_doctor);
//			doctorCode = doctor.getCode();
		// 查询患者信息
		BasePatientDO p = basePatientDao.findById(patient_code);
		
		String consultTitle = "居民:"+p.getName() +"(医生:)-"+specialDoctor.getName()+"发起咨询!";
		
		JSONObject jsonObject = new JSONObject();
		jsonObject.put("title", consultTitle);
		jsonObject.put("content",symptoms);
		jsonObject.put("age",DateUtil.getAgeForIdcard(p.getIdcard()));
		jsonObject.put("sex",p.getSex());
		jsonObject.put("name",p.getName());
		
		String content = jsonObject.toString();
		
		//4、创建咨询
		JSONObject users = new JSONObject();//咨询参与者
		users.put(general_doctor,0);//全科医生
		users.put(special_doctor,0);//专科医生
		
		//关联业务code
//		ct.setRelationCode(outpatientCode);
		//医生信息
		ct.setDoctor(special_doctor);
		ct.setDoctorName(specialDoctor.getName());
		// 设置患者信息
		ct.setPatient(p.getId());
		ct.setSymptoms(symptoms);
		
		// 设置患者姓名
		ct.setName(p.getName());
		// 设置患者生日
		ct.setBirthday(p.getBirthday());
		//新增性别
		ct.setSex(p.getSex());
		// 设置患者头像
		ct.setPhoto(p.getPhoto());
		// 设置操作日期
		ct.setCzrq(new Date());
		ct.setDel("1");
		ct.setStatus(0);
		ct.setEvaluate(0);
		// 医生未读数量为1
		ct.setDoctorRead(1);
		// 添加咨询记录
		ConsultDo consult = addConsult(ct.getPatient(), consultTitle, ct.getSymptoms(), ct.getImages(), ct.getType());
		// 设置关联指导
//		consult.setGuidance(ct.getGuidance());
		//关联业务code
//		consult.setRelationCode(outpatientCode);
		// 设置咨询标识
		ct.setConsult(consult.getId());
		
		//推送给IM去创建议题,取得成员消息
		
		JSONObject messages =  new JSONObject();
		JSONObject obj = new JSONObject();
		String sessionId = "";
		messages = imUtil.getCreateTopicMessage(generalDoctor.getId(),generalDoctor.getName(), consult.getTitle(), content, consult.getImages(), special_doctor);
		//5、(im创建咨询) 续方咨询的sessionid为居民code+就诊code+12(图文,视频,图文+视频)
		sessionId = patient_code+"_"+general_doctor + "_" + special_doctor + "_" + ct.getType();
		obj = imUtil.createTopics(sessionId, consult.getId(), p.getName(), users, messages, imUtil.SESSION_TYPE_GENERAL_EXPERT);
		
		if (obj == null) {
			throw new RuntimeException("IM消息发送异常!");
		}
		if (obj.getInteger("status") == -1) {//im议题创建失败
			throw new RuntimeException(obj.getString("message"));
		}
		ct.setStartMsgId(obj.get("start_msg_id").toString());
		consultTeamDao.save(ct);
		consultDao.save(consult);
		
		//设置咨询code
//			wlyyOutpatientDO.setConsult(consult.getCode());
//			prescriptionDao.save(prescription);
		
		//6、记录咨询的医生详情
		ConsultTeamDoctorDo cd = new ConsultTeamDoctorDo();
		cd.setConsult(consult.getId());
		cd.setDel("1");
		cd.setCzrq(new Date());
		cd.setTo(special_doctor);
		consultTeamDoctorDao.save(cd);
		
		//7、发送系统消息提示团队长有未审核的消息
//			addCheckMessage(prescription, sessionId, p);
		
		//8、 保存医生咨询信息
		// 添加咨询转发记录
		// 添加医生咨询日志
		addLogs(ct);
		
		JSONObject result = imUtil.getSingleSessionInfo(sessionId,special_doctor);
		//外层消息-通知
		System.out.println("发送外层SOCKET消息:全科求助专科医生");
		JSONObject object = new JSONObject();
		object.put("socket_sms_type",5);
		imUtil.sendMessage(special_doctor,general_doctor,"1",object.toString());
		
		return result;
	}
	
	/**
	 * 查询全科医生与专科医生是否存在未结束的咨询
	 * @param session_id
	 * @return
	 */
	public String isExistsUnfinishedConsult(String session_id) throws Exception{
		
		Boolean re = false;
		re = imUtil.sessionIsExist(session_id);
		if(re){
			return session_id;
		}else{
			return null;
		}
	}
}

+ 3 - 1
business/im-service/src/main/java/com/yihu/jw/im/util/ImUtil.java

@ -671,10 +671,12 @@ public class ImUtil {
	public static final String SESSION_TYPE_GROUP = "3";
	public static final String SESSION_TYPE_SYSTEM = "0";
	public static final String SESSION_TYPE_PRESCRIPTION = "8";//续方
	public static final String SESSION_TYPE_EXAMINATION = "9";//在线复诊
	public static final String SESSION_TYPE_EXAMINATION = "9";//在线复诊-图文
	public static final String SESSION_TYPE_ONDOOR_NURSING = "11";//上门护理
	public static final String SESSION_TYPE_COLLABORATION_HOSPITAL = "12";///互联网医院协同门诊
	public static final String SESSION_TYPE_GUIDANCE_HOSPITAL = "14";//互联网医院居民导诊聊天
	public static final String SESSION_TYPE_GENERAL_EXPERT = "15";//全科医生发起求助专科医生的专家咨询
	public static final String SESSION_TYPE_EXAMINATION_VIDEO = "16";//在线复诊-视频
	public static final String SESSION_STATUS_PROCEEDINGS = "0";
	public static final String SESSION_STATUS_END = "1";
	

+ 7 - 1
common/common-request-mapping/src/main/java/com/yihu/jw/rm/hospital/BaseHospitalRequestMapping.java

@ -384,8 +384,14 @@ public class BaseHospitalRequestMapping {
        //医生咨询记录查询
        public static final String records ="/records";
        
        //添加复诊咨询
        //添加(复诊咨询,协同门诊)
        public static final String addPrescriptionConsult ="/addPrescriptionConsult";
    
        //全科医生发起求助专科医生的专家咨询
        public static final String generalAddExpertConsult = "/generalAddExpertConsult";
    
        //查询全科医生与专科医生是否存在未结束的咨询
        public static final String isExistsUnfinishedConsult ="/isExistsUnfinishedConsult";
        
        //医生可接单列表(图文复诊、视频复诊、协同门诊)
        public static final String findWaitingRoomOutpatientByDoctor = "findWaitingRoomOutpatientByDoctor";

+ 44 - 42
svr/svr-internet-hospital/src/main/java/com/yihu/jw/hospital/endpoint/consult/DoctorConsultEndpoint.java

@ -116,7 +116,7 @@ public class DoctorConsultEndpoint extends EnvelopRestEndpoint {
	}
	
	@PostMapping(value = BaseHospitalRequestMapping.DodtorIM.addPrescriptionConsult)
	@ApiOperation(value = "添加复诊咨询", notes = "添加复诊咨询")
	@ApiOperation(value = "添加(复诊咨询,协同门诊)", notes = "添加(复诊咨询,协同门诊)")
	public Envelop addPrescriptionConsult(@ApiParam(name = "outpatientCode", value = "HIS就诊记录CODE", defaultValue = "1")
			@RequestParam(value = "outpatientCode", required = true) String outpatientCode,
			@ApiParam(name = "patientCode", value = "复诊居民", defaultValue = "9638fa184ad14a71ba7e4bf931670778")
@ -153,50 +153,38 @@ public class DoctorConsultEndpoint extends EnvelopRestEndpoint {
				//2.
				result = imService.addPrescriptionConsult(outpatientCode, patientCode,doctorCode,consult,reason,type);
			}
//			if (res == -1) {
//				failed("该处方存在未审核的处方,无法进行复诊咨询!");
////				return error(-1, "该处方存在未审核的续方,无法进行续方咨询!");
//			} if (res == -3) {
//				failed("您当天有未完成的处方,不能发起复诊!");
////				return error(-1, "您当天有未完成的续方,不能发起续方咨询!");
//			}
//            Doctor doctor = doctorService.findDoctorByCode(consult.getDoctor());
//            // 添加到统计队列
//            if (consult.getType() == 2) {
//                DoctorStatisticsTask.getInstance(doctorStatisticsService).put(consult.getDoctor(), 1, 1, 0);
//            }
//
//			if(messageService.getMessageNoticeSettingByMessageType(doctor,"1",MessageNoticeSetting.MessageTypeEnum.prescriptionSwitch.getValue())){
//				// 推送消息给医生
//				pushMsgTask.put(doctor, MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.D_CT_05.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.续方咨询.name(), MessageType.MESSAGE_TYPE_DOCTOR_NEW_FAMOUS_CONSULT_TEAM_PRESCRIPTION.您有新的续方咨询.name(), consult.getConsult());
//				try {
//					//            新增发送医生助手模板消息 v1.4.0 by wujunjie
//					Doctor doctor1 = doctorDao.findByCode(doctor);
//					Patient patient = patientDao.findByCode(getRepUID());
//					String doctorOpenID = doctor1.getOpenid();
//					if (StringUtils.isNotEmpty(doctorOpenID)) {
//						String url = doctorAssistant + "/wlyy/feldsher/sendDoctorTemplates";
//						List<NameValuePair> params = new ArrayList<>();
//						params.add(new BasicNameValuePair("type", "9"));
//						params.add(new BasicNameValuePair("openId", doctorOpenID));
//						params.add(new BasicNameValuePair("url", targetUrl));
//						params.add(new BasicNameValuePair("first", doctor1.getName() + "医生您好。您的签约居民"+patient.getName()+"申请线上续方,请尽快审核。"));
//						params.add(new BasicNameValuePair("remark", "请进入手机APP查看"));
//						SimpleDateFormat format = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
//						String keywords = "续方审核" + "," + doctor1.getHospitalName()+","+doctor1.getName();
//						params.add(new BasicNameValuePair("keywords", keywords));
//
//						httpClientUtil.post(url, params, "UTF-8");
//					}
//				} catch (Exception e) {
//					e.printStackTrace();
//				}
//			}
//			BusinessLogs.info(BusinessLogs.BusinessType.consult, getRepUID(), getUID(), new org.json.JSONObject(consult));
			return success("操作成功",result);
	}
	
	
	@PostMapping(value = BaseHospitalRequestMapping.DodtorIM.generalAddExpertConsult)
	@ApiOperation(value = "全科医生发起求助专科医生的专家咨询", notes = "全科医生发起求助专科医生的专家咨询")
	public Envelop generalAddExpertConsult(
			@ApiParam(name = "patient_code", value = "居民CODE")
			@RequestParam(value = "patient_code",required = true) String patient_code,
			@ApiParam(name = "general_doctor", value = "全科医生")
			@RequestParam(value = "general_doctor",required = true) String general_doctor,
			@ApiParam(name = "special_doctor", value = "专科医生")
			@RequestParam(value = "special_doctor",required = true) String special_doctor,
			@ApiParam(name = "when", value = "发病时间")
			@RequestParam(value = "when",required = false) String when,
			@ApiParam(name = "symptoms", value = "主述")
			@RequestParam(value = "symptoms",required = false) String symptoms,
			@ApiParam(name = "images", value = "图片")
			@RequestParam(value = "images",required = false) String images,
			@ApiParam(name = "voice", value = "语音")
			@RequestParam(value = "voice",required = false) String voice)throws Exception{
		
		ConsultTeamDo consult = new ConsultTeamDo();
		consult.setType(15);//家医咨询求助互联网医院专科医生:全科医生-专科医生-咨询聊天
		
		JSONObject result = new JSONObject();
		synchronized (patient_code.intern()){
			result = imService.generalAddExpertConsult(patient_code, general_doctor,special_doctor,when,symptoms,images,consult);
		}
		return success("操作成功",result);
	}
	
	@PostMapping(value = BaseHospitalRequestMapping.DodtorIM.finish)
	@ApiOperation(value = "医生结束咨询", notes = "医生结束咨询")
	public Envelop finish(
@ -525,5 +513,19 @@ public class DoctorConsultEndpoint extends EnvelopRestEndpoint {
		return success("操作成功");
	}
	
	@PostMapping(value = BaseHospitalRequestMapping.DodtorIM.isExistsUnfinishedConsult)
	@ApiOperation(value = "查询全科医生与专科医生是否存在未结束的咨询", notes = "查询全科医生与专科医生是否存在未结束的咨询")
	public Envelop isExistsUnfinishedConsult(@ApiParam(name = "patient_code", value = "居民CODE")
	                                          @RequestParam(value = "patient_code", required = true)String patient_code,
	                                          @ApiParam(name = "general_doctor", value = "全科医生")
	                                          @RequestParam(value = "general_doctor", required = true)String general_doctor,
	                                          @ApiParam(name = "special_doctor", value = "专科医生")
	                                          @RequestParam(value = "special_doctor", required = true)String special_doctor
	                                          ) throws Exception {
		String session_id = patient_code+"_"+general_doctor+"_"+special_doctor+"_15";
		session_id = imService.isExistsUnfinishedConsult(session_id);
		return success(session_id);
	}
	
	
}