|
@ -3,15 +3,21 @@ package com.yihu.jw.im.service;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
|
|
|
import com.yihu.jw.entity.base.im.ConsultDo;
|
|
|
import com.yihu.jw.entity.base.im.ConsultTeamDo;
|
|
|
import com.yihu.jw.entity.base.im.ConsultTeamDoctorDo;
|
|
|
import com.yihu.jw.entity.base.im.ConsultTeamLogDo;
|
|
|
import com.yihu.jw.entity.base.patient.BasePatientDO;
|
|
|
import com.yihu.jw.entity.hospital.prescription.WlyyOutpatientDO;
|
|
|
import com.yihu.jw.hospital.prescription.dao.OutpatientDao;
|
|
|
import com.yihu.jw.im.dao.ConsultDao;
|
|
|
import com.yihu.jw.im.dao.ConsultTeamDao;
|
|
|
import com.yihu.jw.im.dao.ConsultTeamDoctorDao;
|
|
|
import com.yihu.jw.im.dao.ConsultTeamLogDao;
|
|
|
|
|
|
|
|
|
import com.yihu.jw.im.util.ImUtil;
|
|
|
import com.yihu.jw.im.util.ImageCompress;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
@ -20,6 +26,8 @@ import com.yihu.jw.restmodel.im.ConsultVO;
|
|
|
import com.yihu.jw.util.common.FileUtil;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.wechat.service.WxAccessTokenService;
|
|
|
import org.apache.http.NameValuePair;
|
|
|
import org.apache.http.message.BasicNameValuePair;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.data.domain.Page;
|
|
@ -60,6 +68,7 @@ public class ImService {
|
|
|
@Autowired
|
|
|
public BasePatientDao basePatientDao;
|
|
|
|
|
|
@Autowired
|
|
|
public ImUtil imUtil;
|
|
|
|
|
|
public FileUtil fileUtil;
|
|
@ -91,6 +100,12 @@ public class ImService {
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
|
|
|
@Autowired
|
|
|
private BaseDoctorDao baseDoctorDao;
|
|
|
|
|
|
@Autowired
|
|
|
private OutpatientDao outpatientDao;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
@ -635,16 +650,16 @@ public class ImService {
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 添加咨询记录
|
|
|
ConsultDo consult = addConsult(ct.getPatient(), null, ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
ConsultDo consult = addConsult(ct.getPatient(), "专家咨询", ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// // 设置关联指导
|
|
|
// consult.setGuidance(ct.getGuidance());
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getId());
|
|
|
|
|
|
//推送给IM去创建议题,取得成员消息
|
|
|
JSONObject messages = imUtil.getCreateTopicMessage(patient, tempPatient.getName(), consult.getTitle(), consult.getSymptoms(), consult.getImages(), null);
|
|
|
JSONObject messages = imUtil.getCreateTopicMessage(patient, tempPatient.getName(), consult.getTitle(), consult.getSymptoms(), consult.getImages(), doctor);
|
|
|
users.put(patient, 0);//+ " "+(tempPatient.getSex()==1?"(男 ":"(女 ") + IdCardUtil.getAgeForIdcard(tempPatient.getIdcard())+")"
|
|
|
JSONObject obj = imUtil.createTopics(patient + "_" + ct.getTeam() + "_" + ct.getType(), consult.getId(), tempPatient.getName(), users, messages, imUtil.SESSION_TYPE_MUC);
|
|
|
JSONObject obj = imUtil.createTopics(patient + "_" + doctor + "_" + ct.getType(), consult.getId(), tempPatient.getName(), users, messages, imUtil.SESSION_TYPE_MUC);
|
|
|
if (obj == null) {
|
|
|
throw new RuntimeException("IM消息发送异常!");
|
|
|
}
|
|
@ -771,6 +786,212 @@ public class ImService {
|
|
|
// sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
|
|
|
return content;
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 添加续方咨询
|
|
|
*
|
|
|
* @param outpatientCode
|
|
|
* @param patient
|
|
|
* @param agent
|
|
|
* @param doctorCode
|
|
|
* @param reason
|
|
|
* @return
|
|
|
*/
|
|
|
public Integer addPrescriptionConsult(String outpatientCode, String patient, String agent, String doctorCode, ConsultTeamDo ct, String reason, Integer type) throws Exception {
|
|
|
|
|
|
synchronized (outpatientCode.intern()) {
|
|
|
/**
|
|
|
* toto 判断是否存在未审核的复诊
|
|
|
*/
|
|
|
// String check = prescriptionInfoService.presCheckState(jwCode);
|
|
|
// if ("0".equals(check)) {//存在未审核的续方
|
|
|
// return -1;
|
|
|
// }
|
|
|
|
|
|
|
|
|
BaseDoctorDO doctor = baseDoctorDao.findById(doctorCode);
|
|
|
// doctorCode = doctor.getCode();
|
|
|
// 查询患者信息
|
|
|
BasePatientDO p = basePatientDao.findById(patient);
|
|
|
|
|
|
//1、获取his就诊记录详情(保存续方表、药品续方信息表、续方疾病类型表)
|
|
|
WlyyOutpatientDO wlyyOutpatientDO = outpatientDao.findOne(outpatientCode);
|
|
|
|
|
|
JSONObject jsonObject = new JSONObject();
|
|
|
jsonObject.put("title", p.getName() + "申请复诊");
|
|
|
|
|
|
|
|
|
String content = jsonObject.toString();
|
|
|
|
|
|
//4、创建咨询
|
|
|
JSONObject users = new JSONObject();//咨询参与者
|
|
|
users.put(patient, 0);
|
|
|
users.put(doctorCode, 0);
|
|
|
//关联业务code
|
|
|
ct.setRelationCode(outpatientCode);
|
|
|
//医生信息
|
|
|
ct.setDoctor(doctorCode);
|
|
|
ct.setDoctorName(doctor.getName());
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(patient);
|
|
|
// if (1 == type) {
|
|
|
// ct.setSymptoms("高血压");
|
|
|
// } else if (2 == type) {
|
|
|
// ct.setSymptoms("糖尿病");
|
|
|
// } else if (3 == type) {
|
|
|
// ct.setSymptoms("高血压,糖尿病");
|
|
|
// } else {
|
|
|
// }
|
|
|
|
|
|
// 设置患者姓名
|
|
|
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(), "申请复诊", ct.getSymptoms(), ct.getImages(), ct.getType());
|
|
|
// 设置关联指导
|
|
|
consult.setGuidance(ct.getGuidance());
|
|
|
//关联业务code
|
|
|
consult.setRelationCode(outpatientCode);
|
|
|
// 设置咨询标识
|
|
|
ct.setConsult(consult.getId());
|
|
|
|
|
|
//推送给IM去创建议题,取得成员消息
|
|
|
JSONObject messages = imUtil.getCreateTopicMessage(patient, p.getName(), consult.getTitle(), content, consult.getImages(), agent);
|
|
|
|
|
|
//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消息发送异常!");
|
|
|
}
|
|
|
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(doctorCode);
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
|
|
|
//7、发送系统消息提示团队长有未审核的消息
|
|
|
// addCheckMessage(prescription, sessionId, p);
|
|
|
|
|
|
//8、 保存医生咨询信息
|
|
|
// 添加咨询转发记录
|
|
|
// 添加医生咨询日志
|
|
|
addLogs(ct);
|
|
|
|
|
|
return 1;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 居民结束咨询
|
|
|
* @param consult 咨询CODE
|
|
|
* @param endOperator 操作人
|
|
|
* @param endType 1居民 2医生
|
|
|
* @return
|
|
|
*/
|
|
|
public int finish(String consult, String endOperator, int endType) {
|
|
|
|
|
|
ConsultTeamDo consultTeam = consultTeamDao.findByConsult(consult);
|
|
|
|
|
|
ConsultDo cons = consultDao.findOne(consult);
|
|
|
|
|
|
if (consultTeam.getStatus() == 1) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
String endName = "";
|
|
|
String endId = "";
|
|
|
//结束咨询才发送推送给IM文字消息
|
|
|
if (endType == 1) {
|
|
|
BasePatientDO p = basePatientDao.findById(endOperator);
|
|
|
endName = p.getName();
|
|
|
endId = p.getId();
|
|
|
} else {
|
|
|
if (endOperator.equals("admin")) {
|
|
|
endId = "system";
|
|
|
endName = "咨询超时未回复,系统自动";
|
|
|
} else {
|
|
|
BaseDoctorDO d = baseDoctorDao.findById(endOperator);
|
|
|
endId = d.getId();
|
|
|
endName = d.getName();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
JSONObject obj = imUtil.endTopics(consultTeam.getPatient(), endId, endName, consultTeam.getConsult());
|
|
|
if (obj == null) {
|
|
|
throw new RuntimeException("IM消息结束异常!");
|
|
|
}
|
|
|
if (obj.getInteger("status") == -1) {
|
|
|
throw new RuntimeException(String.valueOf(obj.get("message")));
|
|
|
}
|
|
|
|
|
|
|
|
|
String name = "";
|
|
|
String returnJson = "";
|
|
|
//推送给IM文字消息
|
|
|
// if (endType == 1) {
|
|
|
// BasePatientDO p = basePatientDao.findById(endOperator);
|
|
|
// name = p.getName();
|
|
|
// returnJson = imUtil.sendIM(consultTeam.getPatient(), consultTeam.getDoctor(), "7", name + "结束了本次咨询");
|
|
|
// } else {
|
|
|
// BaseDoctorDO d = baseDoctorDao.findById(endOperator);
|
|
|
// name = d.getName();
|
|
|
// returnJson = imUtil.sendIM(consultTeam.getDoctor(), consultTeam.getPatient(), "7", name + "结束了本次咨询");
|
|
|
// }
|
|
|
|
|
|
// if (org.apache.commons.lang3.StringUtils.isEmpty(returnJson)) {
|
|
|
// throw new RuntimeException("send consult finished IM message failed!");
|
|
|
//// throw new Exception("send consult finished IM message failed");
|
|
|
// } else {
|
|
|
// JSONObject jo = JSON.parseObject(returnJson); //设置消息ID
|
|
|
// consultTeam.setEndMsgId(jo.getInteger("startId") + "");
|
|
|
// consultTeam.setEndOperator(endOperator);
|
|
|
// consultTeam.setEndType(endType);
|
|
|
// }
|
|
|
|
|
|
// org.json.JSONObject group = talkGroupService.findConsultTalkGroup(consultTeam.getConsult());
|
|
|
//
|
|
|
// if (group != null) {
|
|
|
// String json = sendGroupIM(endOperator, group.getString("code"), "7", name + "结束了本次咨询");
|
|
|
//
|
|
|
// if (org.apache.commons.lang3.StringUtils.isEmpty(json)) {
|
|
|
// throw new Exception("send consult finished IM message failed");
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
consultTeam.setEndMsgId(obj.getString("id"));
|
|
|
cons.setEndTime(new Date());
|
|
|
consultTeam.setEndTime(new Date());
|
|
|
consultTeam.setStatus(1);
|
|
|
consultDao.save(cons);
|
|
|
consultTeamDao.save(consultTeam);
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
}
|