|
@ -3,11 +3,15 @@ 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.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.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;
|
|
@ -47,6 +51,12 @@ public class ImService {
|
|
|
@Autowired
|
|
|
public ConsultTeamDao consultTeamDao;
|
|
|
|
|
|
@Autowired
|
|
|
public ConsultTeamDoctorDao consultTeamDoctorDao;
|
|
|
|
|
|
@Autowired
|
|
|
public ConsultTeamLogDao consultTeamLogDao;
|
|
|
|
|
|
@Autowired
|
|
|
public BasePatientDao basePatientDao;
|
|
|
|
|
@ -585,4 +595,182 @@ public class ImService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 患者端
|
|
|
* 发起专家咨询
|
|
|
* @param ct 专家咨询对象
|
|
|
* @param patient 患者标识
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public JSONObject addTeamConsult(ConsultTeamDo ct, String patient, String doctor) throws Exception {
|
|
|
JSONObject re = new JSONObject();
|
|
|
if (getUnfinishedConsult(patient, doctor) > 0) {//判断是否有未结束的咨询移到同步方法中
|
|
|
// re.put("status", -3);
|
|
|
// return re;
|
|
|
throw new RuntimeException("居民还有未结束的专家咨询!");
|
|
|
}
|
|
|
|
|
|
JSONObject users = new JSONObject();
|
|
|
users.put(doctor,0);
|
|
|
|
|
|
|
|
|
// 设置患者信息
|
|
|
ct.setPatient(patient);
|
|
|
// 查询患者信息
|
|
|
BasePatientDO tempPatient = basePatientDao.findById(patient);
|
|
|
// 设置患者姓名
|
|
|
ct.setName(tempPatient.getName());
|
|
|
// 设置患者生日
|
|
|
ct.setBirthday(tempPatient.getBirthday());
|
|
|
//新增性别
|
|
|
ct.setSex(tempPatient.getSex());
|
|
|
// 设置患者头像
|
|
|
ct.setPhoto(tempPatient.getPhoto());
|
|
|
// 设置操作日期
|
|
|
ct.setCzrq(new Date());
|
|
|
ct.setDel("1");
|
|
|
ct.setStatus(0);
|
|
|
ct.setEvaluate(0);
|
|
|
// 医生未读数量为1
|
|
|
ct.setDoctorRead(1);
|
|
|
// 添加咨询记录
|
|
|
ConsultDo consult = addConsult(ct.getPatient(), null, 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);
|
|
|
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);
|
|
|
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);
|
|
|
|
|
|
JSONArray doctors = new JSONArray();
|
|
|
for (String key : users.keySet()) {
|
|
|
if (patient.equals(key)) {
|
|
|
continue;
|
|
|
}
|
|
|
doctors.add(key);
|
|
|
//记录咨询的医生详情误删
|
|
|
ConsultTeamDoctorDo cd = new ConsultTeamDoctorDo();
|
|
|
cd.setConsult(consult.getId());
|
|
|
cd.setDel("1");
|
|
|
cd.setCzrq(new Date());
|
|
|
cd.setTo(key);
|
|
|
consultTeamDoctorDao.save(cd);
|
|
|
}
|
|
|
|
|
|
// 保存医生咨询信息
|
|
|
// 添加咨询转发记录
|
|
|
// 添加医生咨询日志
|
|
|
String content = addLogs(ct);
|
|
|
re.put("doctor", doctor);
|
|
|
re.put("status", 1);
|
|
|
return re;
|
|
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 添加一条咨询记录
|
|
|
* @param patient 患者信息
|
|
|
* @param title 咨询标题
|
|
|
* @param type 咨询类型:9在线复诊,13专家咨询
|
|
|
* @return
|
|
|
*/
|
|
|
public ConsultDo addConsult(String patient, String title, String symptoms, String images, int type) {
|
|
|
ConsultDo consult = new ConsultDo();
|
|
|
consult.setId(UUID.randomUUID().toString().replaceAll("-", ""));
|
|
|
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 ct
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
private String addLogs(ConsultTeamDo ct) throws Exception {
|
|
|
List<ConsultTeamLogDo> logs = new ArrayList<ConsultTeamLogDo>();
|
|
|
// 添加问题咨询日志
|
|
|
String content = "";
|
|
|
|
|
|
content += "咨询问题:" + (org.apache.commons.lang3.StringUtils.isEmpty(ct.getSymptoms()) ? "无" : ct.getSymptoms());
|
|
|
|
|
|
// 生成提问日志,并推送相关消息
|
|
|
ConsultTeamLogDo infoLog = new ConsultTeamLogDo();
|
|
|
infoLog.setConsult(ct.getConsult());
|
|
|
if (content.length() > 2500) {
|
|
|
content = content.substring(0, 2500);
|
|
|
}
|
|
|
infoLog.setContent(content);
|
|
|
infoLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
infoLog.setChatType(1);
|
|
|
infoLog.setCzrq(new Date());
|
|
|
logs.add(infoLog);
|
|
|
// 图片日志
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotEmpty(ct.getImages())) {
|
|
|
String[] images = ct.getImages().split(",");
|
|
|
for (String image : images) {
|
|
|
if (org.apache.commons.lang3.StringUtils.isNoneEmpty(image)) {
|
|
|
ConsultTeamLogDo imgLog = new ConsultTeamLogDo();
|
|
|
// 设置咨询标识
|
|
|
imgLog.setConsult(ct.getConsult());
|
|
|
// 设置图片URL
|
|
|
imgLog.setContent(image);
|
|
|
imgLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
imgLog.setCzrq(new Date());
|
|
|
// 图片类型
|
|
|
imgLog.setChatType(2);
|
|
|
// 添加到待保存队列
|
|
|
logs.add(imgLog);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 语音日志
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotEmpty(ct.getVoice())) {
|
|
|
ConsultTeamLogDo voiceLog = new ConsultTeamLogDo();
|
|
|
// 设置咨询标识
|
|
|
voiceLog.setConsult(ct.getConsult());
|
|
|
// 设置语音URL
|
|
|
voiceLog.setContent(ct.getVoice());
|
|
|
voiceLog.setDel("1");
|
|
|
infoLog.setType(0);
|
|
|
// 语音类型
|
|
|
voiceLog.setChatType(3);
|
|
|
voiceLog.setCzrq(new Date());
|
|
|
// 添加到待保存队列
|
|
|
logs.add(voiceLog);
|
|
|
}
|
|
|
if (!logs.isEmpty()) {
|
|
|
Iterable<ConsultTeamLogDo> iterable = consultTeamLogDao.save(logs);
|
|
|
if (iterable == null || iterable.iterator() == null || !iterable.iterator().hasNext()) {
|
|
|
// 日志保存失败
|
|
|
throw new Exception("consult team log save failed!");
|
|
|
}
|
|
|
}
|
|
|
// 患者提问或追问,给医生发消息
|
|
|
// sendMessage(ct.getDoctor(), ct.getPatient(), "三师咨询", "您有新的三师咨询消息", ct.getConsult(), 116, 1, 0, 0);
|
|
|
return content;
|
|
|
}
|
|
|
|
|
|
|
|
|
}
|