ImUtill.java 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. package com.yihu.wlyy.util;
  2. import org.json.JSONArray;
  3. import org.json.JSONObject;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Component;
  7. /**
  8. * Created by 卓 on 2017/1/13.
  9. */
  10. @Component
  11. public class ImUtill {
  12. @Autowired
  13. private HttpClientUtil HttpClientUtil;
  14. @Value("${im.im_list_get}")
  15. private String im_host;
  16. public enum ContentType {
  17. plainText("信息", "1"),
  18. image("图片信息", "2"),
  19. audio("创建处方", "3"),
  20. article("文章信息", "4"),
  21. goTo("跳转信息,求组其他医生或者邀请其他医生发送的推送消息", "5"),
  22. topicBegin("议题开始", "6"),
  23. topicEnd("议题结束", "7"),
  24. personalCard("个人名片", "18"),
  25. messageForward("消息转发", "19"),
  26. topicInto("进入议题", "14"),
  27. video("视频", "12"),
  28. system("系统消息", "13"),
  29. prescriptionCheck("续方审核消息消息", "15"),
  30. prescriptionBloodStatus("续方咨询血糖血压咨询消息", "16"),
  31. prescriptionFollowupContent("续方咨询随访问卷消息", "17");
  32. private String name;
  33. private String value;
  34. ContentType(String name, String value) {
  35. this.name = name;
  36. this.value = value;
  37. }
  38. public String getName() {
  39. return name;
  40. }
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44. public String getValue() {
  45. return value;
  46. }
  47. public void setValue(String value) {
  48. this.value = value;
  49. }
  50. }
  51. /**
  52. * 获取医生统计数据
  53. * status reply 为空值是是该医生总咨询量
  54. *
  55. * @param user 团队就把团队的医生合并起来用,隔开(医生编码)
  56. * @param adminTeamCode
  57. * @param status
  58. * @param reply
  59. * @return
  60. */
  61. public String getConsultData(String user, Integer adminTeamCode, Integer status, Integer reply) {
  62. String imAddr = im_host + "api/v2/sessions/topics/count/reply";
  63. imAddr = imAddr + "?user=" + user;
  64. if (status != null) {
  65. imAddr += ("&status=" + status);
  66. }
  67. if (adminTeamCode != null) {
  68. imAddr += ("&adminTeamCode=" + adminTeamCode);
  69. }
  70. if (reply != null) {
  71. imAddr += ("&reply=" + reply);
  72. }
  73. String response = HttpClientUtil.get(imAddr, "UTF-8");
  74. return response;
  75. }
  76. public void updateTopics(String topicId, String jsonValue) {
  77. String imAddr = im_host + "api/v2/sessions/" + topicId + "/topics";
  78. JSONObject params = new JSONObject();
  79. params.put("topic_id", topicId);
  80. params.put("data", jsonValue);
  81. HttpClientUtil.putBody(imAddr, params);
  82. }
  83. /**
  84. * 当前医生下当前团队列表接口
  85. * 获取团队内医生的健康咨询状况
  86. * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
  87. *
  88. * @param user 团队就把团队的医生合并起来用,隔开(医生编码)
  89. * @param adminTeamCode 行政团队code
  90. * @param page
  91. * @param pagesize
  92. * @param status
  93. * @param reply
  94. * @return
  95. */
  96. public String getTeamConsultByStatus(String user, Integer adminTeamCode, Integer status, Integer reply, int page, int pagesize) {
  97. String imAddr = im_host + "api/v2/sessions/healthTeamTopics";
  98. imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
  99. if (adminTeamCode != null) {
  100. imAddr += ("&adminTeamCode=" + adminTeamCode);
  101. }
  102. if (status != null) {
  103. imAddr += ("&status=" + status);
  104. }
  105. if (reply != null) {
  106. imAddr += ("&reply=" + reply);
  107. }
  108. String response = HttpClientUtil.get(imAddr, "UTF-8");
  109. return response;
  110. }
  111. /**
  112. * 列表接口
  113. * 获取团队内医生的健康咨询状况
  114. * status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
  115. *
  116. * @param user 团队就把团队的医生合并起来用,隔开(医生编码)
  117. * @param page
  118. * @param pagesize
  119. * @param status
  120. * @param reply
  121. * @return
  122. */
  123. public String getConsultByStatus(String user, Integer status, Integer reply, int page, int pagesize) {
  124. String imAddr = im_host + "api/v2/sessions/healthTopics";
  125. imAddr = imAddr + "?user=" + user + "&page=" + page + "&pagesize=" + pagesize;
  126. if (status != null) {
  127. imAddr += ("&status=" + status);
  128. }
  129. if (reply != null) {
  130. imAddr += ("&reply=" + reply);
  131. }
  132. String response = HttpClientUtil.get(imAddr, "UTF-8");
  133. return response;
  134. }
  135. /**
  136. * 咨询列表
  137. * @param user
  138. * @param status status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
  139. * @param reply
  140. * @param type 1、三师咨询,2、家庭医生咨询,6、患者名医咨询 7医生名医咨询 8续方咨询 10医生发起的求助
  141. * @param page
  142. * @param pagesize
  143. * @return
  144. */
  145. public String getConsultByStatusAndType(String user,Integer status,Integer reply,Integer type,String patientName,String startTime,String endTime,int page,int pagesize){
  146. String imAddr = im_host + "api/v2/sessions/topicListByType";
  147. imAddr = imAddr + "?user="+user + "&page=" + page + "&pagesize=" + pagesize;
  148. if (status != null) {
  149. imAddr += ("&status=" + status);
  150. }
  151. if (reply != null) {
  152. imAddr += ("&reply=" + reply);
  153. }
  154. if (type != null) {
  155. imAddr += ("&type=" + type);
  156. }
  157. if (patientName != null) {
  158. imAddr += ("&patientName=" + patientName);
  159. }
  160. if (startTime != null) {
  161. imAddr += ("&startTime=" + startTime);
  162. }
  163. if (endTime != null) {
  164. imAddr += ("&endTime=" + endTime);
  165. }
  166. String response = HttpClientUtil.get(imAddr, "UTF-8");
  167. return response;
  168. }
  169. /**
  170. * 咨询列表总数
  171. * @param user
  172. * @param status status = 10 已结束的咨询,status=0,reply = 1 已回复 ,status=0,reply=0未回复
  173. * @param reply
  174. * @param type 1、三师咨询,2、家庭医生咨询,6、患者名医咨询 7医生名医咨询 8续方咨询 10医生发起的求助
  175. * @return
  176. */
  177. public String getConsultCountByStatusAndType(String user,Integer status,Integer reply,Integer type,String patientName,String startTime,String endTime){
  178. String imAddr = im_host + "api/v2/sessions/topicListCountByType";
  179. imAddr = imAddr + "?user="+user;
  180. if (status != null) {
  181. imAddr += ("&status=" + status);
  182. }
  183. if (reply != null) {
  184. imAddr += ("&reply=" + reply);
  185. }
  186. if (type != null) {
  187. imAddr += ("&type=" + type);
  188. }
  189. if (patientName != null) {
  190. imAddr += ("&patientName=" + patientName);
  191. }
  192. if (startTime != null) {
  193. imAddr += ("&startTime=" + startTime);
  194. }
  195. if (endTime != null) {
  196. imAddr += ("&endTime=" + endTime);
  197. }
  198. String response = HttpClientUtil.get(imAddr, "UTF-8");
  199. return response;
  200. }
  201. /**
  202. * 发送消息给IM
  203. *
  204. * @param from 来自
  205. * @param contentType 1文字 2图片消息
  206. * @param content 内容
  207. */
  208. public String sendImMsg(String from, String fromName, String sessionId, String contentType, String content, String businessType) {
  209. String imAddr = im_host + "api/v2/sessions/" + sessionId + "/messages";
  210. JSONObject params = new JSONObject();
  211. params.put("sender_id", from);
  212. params.put("sender_name", fromName);
  213. params.put("content_type", contentType);
  214. params.put("content", content);
  215. params.put("session_id", sessionId);
  216. params.put("business_type", businessType);
  217. String response = HttpClientUtil.postBody(imAddr, params);
  218. return response;
  219. }
  220. /**
  221. * 更新会话状态
  222. *
  223. * @param sessionId 会话ID
  224. * @param status 状态
  225. */
  226. public String updateSessionStatus(String sessionId, String status) {
  227. String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
  228. JSONObject params = new JSONObject();
  229. String response = HttpClientUtil.postBody(imAddr, params);
  230. return response;
  231. }
  232. /**
  233. * 更新会话状态
  234. *
  235. * @param sessionId 会话ID
  236. * @param status 状态
  237. */
  238. public String updateTopicEvaluate(String sessionId, String status) {
  239. String imAddr = im_host + "api/v2/sessions/" + sessionId + "/status?status=" + status + "&sessionId=" + sessionId;
  240. JSONObject params = new JSONObject();
  241. String response = HttpClientUtil.postBody(imAddr, params);
  242. return response;
  243. }
  244. /**
  245. * 发送消息给IM
  246. *
  247. * @param from 来自
  248. * @param contentType 1文字 2图片消息
  249. * @param content 内容
  250. */
  251. public String sendTopicIM(String from, String fromName, String topicId, String contentType, String content, String agent) {
  252. String url = im_host + "api/v2/sessions/topic/" + topicId + "/messages";
  253. JSONObject params = new JSONObject();
  254. params.put("sender_id", from);
  255. params.put("sender_name", fromName);
  256. params.put("content_type", contentType);
  257. params.put("content", content);
  258. params.put("topic_id", topicId);
  259. params.put("agent", agent);
  260. String response = HttpClientUtil.postBody(url, params);
  261. return response;
  262. }
  263. /**
  264. * 发送进入im消息
  265. *
  266. * @param from
  267. * @param sessionId
  268. * @param topicId
  269. * @return
  270. */
  271. public String sendIntoTopicIM(String from, String sessionId, String topicId, String content, String intoUser, String intoUserName) {
  272. String url = im_host + "api/v2/sessions/" + sessionId + "/topics/" + topicId + "/into";
  273. JSONObject params = new JSONObject();
  274. params.put("sender_id", from);
  275. params.put("topic_id", topicId);
  276. params.put("into_user", intoUser);
  277. params.put("into_user_name", intoUserName);
  278. params.put("content", content);
  279. String response = HttpClientUtil.postBody(url, params);
  280. return response;
  281. }
  282. /**
  283. * 结束议题
  284. *
  285. * @param topicId 议题ID
  286. * @param endUser 结束人
  287. * @param endUserName 结束人名字
  288. * @param sessionId 会话ID
  289. */
  290. public JSONObject endTopics(String sessionId, String endUser, String endUserName, String topicId) {
  291. String imAddr = im_host + "api/v2/sessions/" + sessionId + "/topics/" + topicId + "/ended";
  292. JSONObject params = new JSONObject();
  293. params.put("session_id", sessionId);
  294. params.put("end_user", endUser);
  295. params.put("end_user_name", endUserName);
  296. params.put("topic_id", topicId);
  297. String ret = HttpClientUtil.postBody(imAddr, params);
  298. JSONObject obj = null;
  299. try {
  300. obj = new JSONObject(ret);
  301. } catch (Exception e) {
  302. return null;
  303. }
  304. return obj;
  305. }
  306. /**
  307. * 议题邀请人员
  308. *
  309. * @param user 结束人名字
  310. * @param sessionId 会话ID
  311. */
  312. public void updateTopicUser(String sessionId, String user) {
  313. String imAddr = im_host + "api/v2/sessions/" + sessionId + "/participants/" + user;
  314. JSONObject params = new JSONObject();
  315. params.put("user", user + ":" + 0);
  316. HttpClientUtil.putBody(imAddr, params);
  317. }
  318. /**
  319. * 创建议题
  320. *
  321. * @param topicId 议题ID
  322. * @param topicName 议题名称
  323. * @param participants 成员
  324. */
  325. public JSONObject createTopics(String sessionId, String topicId, String topicName, JSONObject participants, JSONObject messages, String sessionType) {
  326. String imAddr = im_host + "api/v2/sessions/" + topicId + "/topics";
  327. JSONObject params = new JSONObject();
  328. params.put("topic_id", topicId);
  329. params.put("topic_name", topicName);
  330. params.put("participants", participants.toString());
  331. params.put("messages", messages.toString());
  332. params.put("session_id", sessionId);
  333. params.put("session_type", sessionType);
  334. String ret = HttpClientUtil.postBody(imAddr, params);
  335. JSONObject obj = null;
  336. try {
  337. obj = new JSONObject(ret);
  338. } catch (Exception e) {
  339. return null;
  340. }
  341. return obj;
  342. }
  343. /**
  344. * 判断会话是否存在
  345. */
  346. public Boolean sessionIsExist(String sessionId) {
  347. Boolean re = false;
  348. String url = im_host + "api/v2/sessions/isExist?session_id="+sessionId;
  349. JSONObject params = new JSONObject();
  350. String ret = HttpClientUtil.get(url, "UTF-8");
  351. JSONObject obj = null;
  352. try {
  353. obj = new JSONObject(ret);
  354. if(obj.getInt("status")==200&&sessionId.equals(obj.getString("sessionId"))){
  355. re = true;
  356. }
  357. } catch (Exception e) {
  358. return null;
  359. }
  360. return re;
  361. }
  362. /**
  363. * 创建会话(system)
  364. */
  365. public JSONObject createSession(JSONObject participants, String sessionType, String sessionName, String sessionId) {
  366. String imAddr = im_host + "api/v2/sessions";
  367. JSONObject params = new JSONObject();
  368. params.put("participants", participants.toString());
  369. params.put("session_name", sessionName);
  370. params.put("session_type", sessionType);
  371. params.put("session_id", sessionId);
  372. String ret = HttpClientUtil.postBody(imAddr, params);
  373. JSONObject obj = null;
  374. try {
  375. obj = new JSONObject(ret);
  376. } catch (Exception e) {
  377. return null;
  378. }
  379. return obj;
  380. }
  381. /**
  382. * 获取会话实例的消息对象
  383. *
  384. * @param senderId
  385. * @param senderName
  386. * @param title
  387. * @param description
  388. * @param images
  389. * @param agent
  390. * @return
  391. */
  392. public JSONObject getCreateTopicMessage(String senderId, String senderName, String title, String description, String images, String agent) {
  393. JSONObject messages = new JSONObject();
  394. messages.put("description", description);
  395. messages.put("title", title);
  396. messages.put("img", images);
  397. messages.put("sender_id", senderId);
  398. messages.put("sender_name", senderName);
  399. messages.put("agent", agent);
  400. return messages;
  401. }
  402. public JSONObject getTopicMessage(String topicId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
  403. String url = im_host
  404. + "api/v2/sessions/topic/" + topicId + "/messages?topic_id=" + topicId + "&end=" + startMsgId
  405. + "&start=" + (endMsgId == null ? "" : endMsgId) + "&page=" + page + "&pagesize=" + pagesize + "&user=" + uid;
  406. try {
  407. String ret = HttpClientUtil.get(url, "UTF-8");
  408. JSONObject obj = new JSONObject(ret);
  409. if (obj.getInt("status") == -1) {
  410. throw new RuntimeException(obj.getString("message"));
  411. } else {
  412. return obj.getJSONObject("data");
  413. }
  414. } catch (Exception e) {
  415. return null;
  416. }
  417. }
  418. public JSONArray getSessionMessage(String sessionId, String startMsgId, String endMsgId, int page, int pagesize, String uid) {
  419. String url = im_host + "api/v2/sessions/" + sessionId + "/messages?session_id=" + sessionId + "&user=" + uid + "&start_message_id=" + startMsgId + "&end_message_id=" + endMsgId + "&page=" + page + "&pagesize=" + pagesize;
  420. try {
  421. String ret = HttpClientUtil.get(url, "UTF-8");
  422. JSONArray obj = new JSONArray(ret);
  423. return obj;
  424. } catch (Exception e) {
  425. return null;
  426. }
  427. }
  428. /**
  429. * 删除对应的成员信息在MUC模式中
  430. *
  431. * @param userId
  432. * @param oldUserId
  433. * @param sessionId
  434. * @return
  435. */
  436. public JSONObject deleteMucUser(String userId, String oldUserId, String sessionId) throws Exception {
  437. String url = im_host + "api/v2/sessions/" + sessionId + "/participant/update";
  438. try {
  439. JSONObject params = new JSONObject();
  440. params.put("user_id", userId);
  441. params.put("old_user_id", oldUserId);
  442. params.put("session_id", sessionId);
  443. String ret = HttpClientUtil.postBody(url, params);
  444. JSONObject obj = new JSONObject(ret);
  445. if (obj.getInt("status") == -1) {
  446. throw new RuntimeException("人员更换失败!");
  447. } else {
  448. return obj;
  449. }
  450. } catch (Exception e) {
  451. throw new RuntimeException("人员更换失败!");
  452. }
  453. }
  454. /**
  455. * 获取议题
  456. *
  457. * @param topicId
  458. * @return
  459. */
  460. public JSONObject getTopic(String topicId) throws Exception {
  461. String url = im_host + "api/v2/sessions/topics/" + topicId + "?topic_id=" + topicId;
  462. try {
  463. String ret = HttpClientUtil.get(url, "utf-8");
  464. JSONObject obj = new JSONObject(ret);
  465. if (obj.getInt("status") == -1) {
  466. throw new RuntimeException("获取议题失败!");
  467. } else {
  468. return obj;
  469. }
  470. } catch (Exception e) {
  471. throw new RuntimeException("获取议题失败!");
  472. }
  473. }
  474. /**
  475. * 获取会话成员
  476. *
  477. * @param sessionId
  478. * @return
  479. * @throws Exception
  480. */
  481. public JSONArray getParticipants(String sessionId) {
  482. String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
  483. try {
  484. String ret = HttpClientUtil.get(url, "utf-8");
  485. return new JSONArray(ret);
  486. } catch (Exception e) {
  487. throw new RuntimeException("获取议题失败!");
  488. }
  489. }
  490. /**
  491. * 获取会话成员
  492. *
  493. * @param sessionId
  494. * @return
  495. * @throws Exception
  496. */
  497. public JSONArray getSessions(String sessionId) {
  498. String url = im_host + "api/v2/sessions/" + sessionId + "/participants?session_id=" + sessionId;
  499. try {
  500. String ret = HttpClientUtil.get(url, "utf-8");
  501. return new JSONArray(ret);
  502. } catch (Exception e) {
  503. throw new RuntimeException("获取议题失败!");
  504. }
  505. }
  506. public static final String SESSION_TYPE_MUC = "1";
  507. public static final String SESSION_TYPE_P2P = "2";
  508. public static final String SESSION_TYPE_GROUP = "3";
  509. public static final String SESSION_TYPE_SYSTEM = "0";
  510. public static final String SESSION_TYPE_PRESCRIPTION = "8";//续方
  511. public static final String SESSION_STATUS_PROCEEDINGS = "0";
  512. public static final String SESSION_STATUS_END = "1";
  513. public static final String CONTENT_TYPE_TEXT = "1";
  514. }