|
@ -0,0 +1,256 @@
|
|
|
package com.yihu.jw.care.endpoint.consult;
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorDao;
|
|
|
import com.yihu.jw.doctor.dao.BaseDoctorRoleDao;
|
|
|
import com.yihu.jw.doctor.service.BaseDoctorInfoService;
|
|
|
import com.yihu.jw.entity.base.doctor.BaseDoctorRoleDO;
|
|
|
import com.yihu.jw.entity.base.wx.WxWechatDO;
|
|
|
import com.yihu.jw.file_upload.FileUploadService;
|
|
|
import com.yihu.jw.hospital.family.service.WlyyFamilyMemberService;
|
|
|
import com.yihu.jw.hospital.message.service.SystemMessageService;
|
|
|
import com.yihu.jw.im.service.ImService;
|
|
|
import com.yihu.jw.im.util.ImUtil;
|
|
|
import com.yihu.jw.patient.dao.BasePatientDao;
|
|
|
import com.yihu.jw.patient.service.BasePatientService;
|
|
|
import com.yihu.jw.restmodel.web.Envelop;
|
|
|
import com.yihu.jw.restmodel.web.ListEnvelop;
|
|
|
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
|
|
|
import com.yihu.jw.rm.hospital.BaseHospitalRequestMapping;
|
|
|
import com.yihu.jw.rm.patient.PatientRequestMapping;
|
|
|
import com.yihu.jw.util.common.FileUtil;
|
|
|
import com.yihu.jw.wechat.dao.WechatDao;
|
|
|
import com.yihu.jw.wechat.service.WechatInfoService;
|
|
|
import com.yihu.jw.wlyy.service.WlyyBusinessService;
|
|
|
import io.swagger.annotations.Api;
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
import io.swagger.annotations.ApiParam;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
|
import java.security.MessageDigest;
|
|
|
import java.util.*;
|
|
|
|
|
|
/**
|
|
|
* @author huangwenjie
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping(value = BaseHospitalRequestMapping.PatientIM.PREFIX)
|
|
|
@Api(value = "居民端咨询IM接口", description = "居民端咨询IM接口", tags = {"居民端咨询IM接口"})
|
|
|
public class PatientConsultEndpoint extends EnvelopRestEndpoint {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(PatientConsultEndpoint.class);
|
|
|
|
|
|
@Autowired
|
|
|
private ImService imService;
|
|
|
|
|
|
@Autowired
|
|
|
private BasePatientService basePatientService;
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
private WechatInfoService wechatInfoService;
|
|
|
|
|
|
@Autowired
|
|
|
private WechatDao wechatDao;
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
private WlyyBusinessService wlyyBusinessService;
|
|
|
|
|
|
@Autowired
|
|
|
private BaseDoctorDao baseDoctorDao;
|
|
|
|
|
|
@Autowired
|
|
|
private BasePatientDao basePatientDao;
|
|
|
|
|
|
@Autowired
|
|
|
FileUploadService fileUploadService;
|
|
|
@Autowired
|
|
|
private BaseDoctorInfoService doctorInfoService;
|
|
|
|
|
|
@Autowired
|
|
|
private SystemMessageService systemMessageService;
|
|
|
|
|
|
@Autowired
|
|
|
private BaseDoctorRoleDao doctorRoleDao;
|
|
|
@Autowired
|
|
|
public ImUtil imUtil;
|
|
|
|
|
|
@Autowired
|
|
|
private WlyyFamilyMemberService familyMemberService;
|
|
|
|
|
|
@Value("${fastDFS.fastdfs_file_url}")
|
|
|
private String fastdfs_file_url;
|
|
|
|
|
|
@Value("${testPattern.sign}")
|
|
|
private String isClose;
|
|
|
|
|
|
@Value("${wechat.id}")
|
|
|
private String wechat_appid;
|
|
|
@Autowired
|
|
|
private FileUtil fileUtil;
|
|
|
|
|
|
|
|
|
@GetMapping(value = BaseHospitalRequestMapping.PatientIM.participants)
|
|
|
@ApiOperation(value = "获取会话成员")
|
|
|
public ListEnvelop participants(
|
|
|
@ApiParam(name = "sessionId", value = "会话ID")
|
|
|
@RequestParam(value = "sessionId",required = true) String sessionId)throws Exception{
|
|
|
|
|
|
JSONArray participants = imService.getSessions(sessionId);
|
|
|
return success(participants);
|
|
|
}
|
|
|
|
|
|
@GetMapping(value = BaseHospitalRequestMapping.PatientIM.getSessionMessage)
|
|
|
@ApiOperation(value = "根据会话ID获取消息记录")
|
|
|
public ListEnvelop getSessionMessage(
|
|
|
@ApiParam(name = "sessionId", value = "会话ID")
|
|
|
@RequestParam(value = "sessionId",required = true) String sessionId,
|
|
|
@ApiParam(name = "startMsgId", value = "开始的消息记录ID")
|
|
|
@RequestParam(value = "startMsgId",required = false) String startMsgId,
|
|
|
@ApiParam(name = "endMsgId", value = "结束的消息记录ID")
|
|
|
@RequestParam(value = "endMsgId",required = false) String endMsgId,
|
|
|
@ApiParam(name = "page", value = "第几页")
|
|
|
@RequestParam(value = "page",required = true) int page,
|
|
|
@ApiParam(name = "pagesize", value = "分页数")
|
|
|
@RequestParam(value = "pagesize",required = true) int pagesize)throws Exception{
|
|
|
JSONArray messageArray = imService.getSessionMessage(sessionId, startMsgId, endMsgId, page, pagesize, getUID());
|
|
|
return success(messageArray);
|
|
|
}
|
|
|
|
|
|
|
|
|
@PostMapping(value = BaseHospitalRequestMapping.PatientIM.getSign)
|
|
|
@ApiOperation(value = "获取微信签名", notes = "获取微信签名")
|
|
|
public Envelop getSign(@ApiParam(name = "pageUrl", value = "授权页面")
|
|
|
@RequestParam(value = "pageUrl", required = true)String pageUrl,
|
|
|
@ApiParam(name = "wxId", value = "微信id")
|
|
|
@RequestParam(value = "wxId", required = true)String wxId) throws Exception {
|
|
|
logger.info("pageUrl="+pageUrl);
|
|
|
logger.info("wxId="+wxId);
|
|
|
String ticket = wechatInfoService.getJsapi_ticketByToken(wxId);
|
|
|
WxWechatDO wxWechatDO = wechatDao.findById(wxId);
|
|
|
Map<Object, Object> map = new HashMap<Object, Object>();
|
|
|
if (ticket != null) {
|
|
|
String noncestr = UUID.randomUUID().toString();
|
|
|
long timestamp = System.currentTimeMillis() / 1000;
|
|
|
String url = pageUrl;
|
|
|
logger.info("getSign.url="+url);
|
|
|
String str = "jsapi_ticket=" + ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url=" + url;
|
|
|
logger.info("getSign.str="+str);
|
|
|
// sha1加密
|
|
|
String signature = SHA1(str);
|
|
|
map.put("noncestr", noncestr);
|
|
|
map.put("timestamp", timestamp);
|
|
|
map.put("signature", signature);
|
|
|
map.put("appid", wxWechatDO.getAppId());
|
|
|
return success(PatientRequestMapping.Wechat.api_success,map);
|
|
|
}
|
|
|
return failed(PatientRequestMapping.Wechat.api_error);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @description: SHA、SHA1加密 @parameter: str:待加密字符串 @return: 加密串
|
|
|
**/
|
|
|
public String SHA1(String str) throws Exception {
|
|
|
try {
|
|
|
MessageDigest digest = MessageDigest.getInstance("SHA-1"); // 如果是SHA加密只需要将"SHA-1"改成"SHA"即可
|
|
|
digest.update(str.getBytes());
|
|
|
byte messageDigest[] = digest.digest();
|
|
|
// Create Hex String
|
|
|
StringBuffer hexStr = new StringBuffer();
|
|
|
// 字节数组转换为 十六进制 数
|
|
|
for (int i = 0; i < messageDigest.length; i++) {
|
|
|
String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
|
|
|
if (shaHex.length() < 2) {
|
|
|
hexStr.append(0);
|
|
|
}
|
|
|
hexStr.append(shaHex);
|
|
|
}
|
|
|
return hexStr.toString();
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
throw new Exception(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
@PostMapping(value = BaseHospitalRequestMapping.PatientIM.updateConsultParticipant)
|
|
|
@ApiOperation(value = "更新会话成员(新增或删除)", notes = "更新会话成员(新增或删除)")
|
|
|
public Envelop updateConsultParticipant(@ApiParam(name = "sessionid", value = "会话ID", defaultValue = "1")
|
|
|
@RequestParam(value = "sessionid", required = true) String sessionid,
|
|
|
@ApiParam(name = "userid", value = "新增成员ID,多个以英文逗号隔开", defaultValue = "1")
|
|
|
@RequestParam(value = "userid", required = true) String userid,
|
|
|
@ApiParam(name = "olduserid", value = "删除的成员id")
|
|
|
@RequestParam(value = "olduserid", required = false) String olduserid)throws Exception{
|
|
|
imService.updateParticipant(sessionid,userid,olduserid);
|
|
|
return success("操作成功");
|
|
|
}
|
|
|
|
|
|
@PostMapping(value = "messageAppend")
|
|
|
@ApiOperation(value = "居民单聊会话发送消息", notes = "居民单聊会话发送消息")
|
|
|
public Envelop messageAppend(
|
|
|
@ApiParam(name = "sender_id", value = "发送者id", defaultValue = "")
|
|
|
@RequestParam(value = "sender_id", required = true) String sender_id,
|
|
|
@ApiParam(name = "sender_name", value = "发送者姓名", defaultValue = "")
|
|
|
@RequestParam(value = "sender_name", required = true) String sender_name,
|
|
|
@ApiParam(name = "session_id", value = "session_id", defaultValue = "")
|
|
|
@RequestParam(value = "session_id", required = false) String session_id,
|
|
|
@ApiParam(name = "content_type", value = "内容类型", defaultValue = "")
|
|
|
@RequestParam(value = "content_type", required = true) String content_type,
|
|
|
@ApiParam(name = "content", value = "消息内容", defaultValue = "")
|
|
|
@RequestParam(value = "content", required = true) String content,
|
|
|
@ApiParam(name = "extend", value = "扩展内容", defaultValue = "")
|
|
|
@RequestParam(value = "extend", required = false) String extend,
|
|
|
@ApiParam(name = "type", value = "咨询type", defaultValue = "")
|
|
|
@RequestParam(value = "type", required = false) String type,
|
|
|
@ApiParam(name = "times", value = "times", defaultValue = "")
|
|
|
@RequestParam(value = "times", required = false) Integer times
|
|
|
)throws Exception{
|
|
|
List<String> failed = new ArrayList<>();
|
|
|
//处理语音文件
|
|
|
if(!org.springframework.util.StringUtils.isEmpty(wechat_appid)){
|
|
|
if("3".equalsIgnoreCase(content_type)){//语音文件
|
|
|
String voicepath = imService.fetchWxVoices(wechat_appid);
|
|
|
logger.info("voice_path:"+voicepath);
|
|
|
JSONObject obj = new JSONObject();
|
|
|
String voiceurl = "";
|
|
|
// 将临时语音拷贝到正式存储路径下
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotEmpty(voicepath)) {
|
|
|
voiceurl = fileUtil.copyTempVoice(voicepath,fastdfs_file_url);
|
|
|
obj.put("path", voiceurl);
|
|
|
obj.put("times", times);
|
|
|
content = obj.toString();
|
|
|
}
|
|
|
}else if("2".equalsIgnoreCase(content_type)){//图片文件
|
|
|
String imagepath = imService.fetchWxImages(wechat_appid);
|
|
|
logger.info("image_path:"+imagepath);
|
|
|
String imgeUrl = "";
|
|
|
// 将临时语音拷贝到正式存储路径下
|
|
|
if (org.apache.commons.lang3.StringUtils.isNotEmpty(imagepath)) {
|
|
|
imgeUrl = fileUtil.copyTempVoice(imagepath,fastdfs_file_url);
|
|
|
content = imgeUrl;
|
|
|
}
|
|
|
}else{
|
|
|
|
|
|
}
|
|
|
}
|
|
|
session_id = imService.getPatientGuaidenceConsult(sender_id,session_id,type);
|
|
|
String result = imService.patientGuaidenceAppend(sender_id,sender_name,session_id,content_type,content,"1",extend);
|
|
|
List<BaseDoctorRoleDO> doctorRoleDOS = doctorRoleDao.findByRoleCode("guidance");
|
|
|
for (BaseDoctorRoleDO doctorRoleDO:doctorRoleDOS){
|
|
|
System.out.println("发送外层SOCKET消息:通知医生导诊");
|
|
|
JSONObject object = new JSONObject();
|
|
|
object.put("socket_sms_type",13);
|
|
|
object.put("relation_code",session_id);
|
|
|
imService.sendWaiSocketMessage(sender_id,doctorRoleDO.getDoctorCode(),object.toString(),"1");
|
|
|
}
|
|
|
|
|
|
return success(result);
|
|
|
}
|
|
|
|
|
|
}
|