ImUtill.java 18 KB

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