imdialog.java 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. package com.cnd3b.restcontroller.system.im.imdialog;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.cnd3b.common.Controller;
  5. import com.cnd3b.common.D3bException;
  6. import com.cnd3b.common.data.Row;
  7. import com.cnd3b.common.data.Rows;
  8. import com.cnd3b.common.data.RowsMap;
  9. import com.cnd3b.common.data.SQLFactory;
  10. import com.cnd3b.common.parameter.parameter;
  11. import com.cnd3b.common.websocket.WebClientSocket;
  12. import p2.pao.PaoRemote;
  13. import p2.pao.PaoSetRemote;
  14. import p2.util.P2Exception;
  15. import java.util.ArrayList;
  16. public class imdialog extends Controller {
  17. /**
  18. * 构造函数
  19. *
  20. * @param content
  21. */
  22. public imdialog(JSONObject content) {
  23. super(content);
  24. }
  25. /**
  26. * 群对话框列表查询
  27. *
  28. * @return
  29. */
  30. public String query_imdialogList() {
  31. /**
  32. * 过滤条件设置
  33. */
  34. StringBuffer where = new StringBuffer(" 1=1 ");
  35. if (content.containsKey("where")) {
  36. JSONObject whereObject = content.getJSONObject("where");
  37. if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) {
  38. where.append(" and(");
  39. where.append("t1.fimdialogname like'%").append(whereObject.getString("condition")).append("%' ");
  40. where.append(")");
  41. }
  42. }
  43. SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯普通群列表查询");
  44. timdialogSQL.addParameter("siteid", siteid);
  45. timdialogSQL.addParameter("tenterprise_userid", userid);
  46. timdialogSQL.addParameter_SQL("where", where);
  47. Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL());
  48. SQLFactory timnewmsgSQL = new SQLFactory(this, "即时通讯普通群最新消息查询");
  49. timnewmsgSQL.addParameter("siteid", siteid);
  50. timnewmsgSQL.addParameter_in("timdialogid", rows.toArrayList("timdialogid"));
  51. RowsMap newmsgmap = timnewmsgSQL.runSqlQuery().toRowsMap("timdialogid");
  52. for (Row row : rows) {
  53. Rows newmsgrows = newmsgmap.get(row.getString("timdialogid"));
  54. for (Row newmsg : newmsgrows) {
  55. newmsg.put("message", JSONObject.parseObject(newmsg.getString("message")));
  56. }
  57. row.put("latestnews", newmsgrows);//最新消息
  58. }
  59. return getSucReturnObject().setData(rows).saveToDataPool().toString();
  60. }
  61. /**
  62. * 群主界面查询
  63. *
  64. * @return
  65. */
  66. public String query_imdialogMain() throws D3bException, P2Exception {
  67. long timdialogid = content.getLong("timdialogid");
  68. SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯群主界面查询");
  69. timdialogSQL.addParameter("siteid", siteid);
  70. timdialogSQL.addParameter("tenterprise_userid", userid);
  71. timdialogSQL.addParameter("timdialogid", timdialogid);
  72. Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL());
  73. for (Row row : rows) {
  74. SQLFactory timdialoguserSQL = new SQLFactory(this, "即时通讯群成员列表查询");
  75. timdialoguserSQL.addParameter("siteid", siteid);
  76. timdialoguserSQL.addParameter("timdialogid", content.getString("timdialogid"));
  77. Rows userrows = dbConnect.runSqlQuery(timdialoguserSQL.getSQL());
  78. row.put("users", userrows);
  79. }
  80. return getSucReturnObject().setData(rows).toString();
  81. }
  82. /**
  83. * 一键联系
  84. *
  85. * @return
  86. */
  87. public String quickcontact() throws D3bException, P2Exception {
  88. long tenterprise_userid = content.getLongValue("tenterprise_userid");//根据对方userid,查一对一聊天对话框
  89. SQLFactory factory = new SQLFactory(this, "根据用户ID查询一对一聊天对话框ID");
  90. factory.addParameter("siteid", siteid);
  91. factory.addParameter_in("tenterprise_userid", new String[]{String.valueOf(userid), String.valueOf(tenterprise_userid)});
  92. Rows rows = dbConnect.runSqlQuery(factory.getSQL());
  93. if (!rows.isEmpty()) {
  94. content.put("timdialogid", rows.get(0).getLong("timdialogid"));
  95. return query_imdialogMain();
  96. } else {
  97. JSONArray usersArray = new JSONArray();
  98. usersArray.add(String.valueOf(userid));
  99. usersArray.add(String.valueOf(tenterprise_userid));
  100. content.put("fimdialogname", username + "-" + getUser(tenterprise_userid).getString("fname"));
  101. content.put("fimdialogtype", "普通");
  102. content.put("users", usersArray);
  103. return insertOrModify();
  104. }
  105. }
  106. /**
  107. * 群消息查询
  108. *
  109. * @return
  110. */
  111. public String query_imdialogMessage() {
  112. long timdialogid = content.getLong("timdialogid");
  113. /**
  114. *排序条件设置
  115. */
  116. String[] sortfield = {"t1.createdate desc"};
  117. String sort = getSort(sortfield, "t1.createdate desc");
  118. SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯群历史消息查询", pageSize, pageNumber, sort);
  119. timdialogSQL.addParameter("siteid", siteid);
  120. timdialogSQL.addParameter("timdialogid", timdialogid);
  121. Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL());
  122. for (Row row : rows) {
  123. String message = row.getString("message");
  124. row.put("message", JSONObject.parseObject(message));
  125. }
  126. //清除未读消息数
  127. dbConnect.runSqlUpdate("update timdialogusers set funreadmsgcount=0 where siteid='" + siteid + "' and timdialogid='" + timdialogid + "' and tenterprise_userid='" + userid + "'");
  128. return getSucReturnObject().setDataByPaging(rows).toString();
  129. }
  130. public String restUnReadMsgCount() {
  131. long timdialogid = content.getLong("timdialogid");
  132. dbConnect.runSqlUpdate("update timdialogusers set funreadmsgcount=0 where siteid='" + siteid + "' and timdialogid='" + timdialogid + "' and tenterprise_userid='" + userid + "'");
  133. return getSucReturnObject().toString();
  134. }
  135. /**
  136. * 新建聊天对话框
  137. *
  138. * @return
  139. * @throws D3bException
  140. * @throws P2Exception
  141. */
  142. public String insertOrModify() throws D3bException, P2Exception {
  143. long timdialogid = content.getLongValue("timdialogid"); //群ID 新增时默认传0
  144. String fimdialogname = content.getString("fimdialogname", "timdialog.fimdialogname", "群名称");//群名称
  145. String fimdialogtype = content.getString("fimdialogtype");//对话类型
  146. String ownertable = content.getString("ownertable");//所有表
  147. String ownerid = content.getString("ownerid");//所有表ID
  148. JSONArray usersArray = content.getJSONArray("users");
  149. ArrayList<String> sqlList = new ArrayList<>();
  150. PaoSetRemote timdialogSet = getP2ServerSystemPaoSet("timdialog", "siteid='" + siteid + "' and timdialogid='" + timdialogid + "'");
  151. PaoRemote timdialog = null;
  152. if (timdialogid <= 0 || timdialogSet.isEmpty()) {
  153. /**
  154. * 创建对话框
  155. */
  156. timdialog = timdialogSet.addAtEnd();
  157. timdialog.setValue("siteid", siteid, 11L);//企业ID
  158. timdialog.setValue("createby", username, 11L);//创建人
  159. timdialog.setValue("createdate", sysdate, 11L);//创建时间
  160. timdialog.setValue("fimdialogtype", fimdialogtype, 11L);//对话框类型
  161. timdialog.setValue("ownertable", ownertable, 11L);//所有表
  162. timdialog.setValue("ownerid", ownerid, 11L);//所有表ID
  163. timdialog.setValue("tenterprise_userid", userid, 11L);//创建账号ID
  164. timdialogid = timdialog.getUniqueIDValue();
  165. /**
  166. * 在初始对话框中添加人员
  167. */
  168. ArrayList<String> userlist = new ArrayList<>();
  169. usersArray.add(userid);//默认将创建人员加入群
  170. for (Object user : usersArray) {
  171. userlist.add(String.valueOf(user));
  172. }
  173. SQLFactory sqlFactory = new SQLFactory(this, "即时通讯群人员添加");
  174. sqlFactory.addParameter("createby", username);
  175. sqlFactory.addParameter("timdialogid", timdialogid);
  176. sqlFactory.addParameter("siteid", siteid);
  177. sqlFactory.addParameter_in("tenterprise_userid", userlist);
  178. sqlList.add(sqlFactory.getSQL());
  179. } else {
  180. timdialog = timdialogSet.getPao(0);
  181. }
  182. timdialog.setValue("fimdialogname", fimdialogname, 11L);//对话框类型
  183. timdialogSet.save();
  184. dbConnect.runSqlUpdate(sqlList);
  185. content.put("timdialogid", timdialogid);
  186. return query_imdialogMain();
  187. }
  188. /**
  189. * 创建聊天话题
  190. *
  191. * @return
  192. */
  193. public String createSubject() throws D3bException, P2Exception {
  194. long timsubjectid = content.getLongValue("timsubjectid"); //话题ID 新增时默认传0
  195. long timdialogid = content.getLongValue("timdialogid");
  196. String fcontent = content.getString("timsubject", "timsubject.fcontent", "话题内容");//话题内容
  197. boolean ischange = timsubjectid > 0;
  198. PaoSetRemote timsubjectSet = getP2ServerSystemPaoSet("timsubject", "siteid='" + siteid + "' and tagentsid='" + tagentsid + "' and timsubjectid='" + timsubjectid + "'");
  199. PaoRemote timsubject = null;
  200. if (timsubjectid <= 0 || timsubjectSet.isEmpty()) {
  201. timsubject = timsubjectSet.addAtEnd();
  202. timsubject.setValue("siteid", siteid, 11L);//企业ID
  203. timsubject.setValue("createby", username, 11L);//创建人
  204. timsubject.setValue("createdate", sysdate, 11L);//创建时间
  205. timsubject.setValue("tagentsid", tagentsid, 11L);
  206. timsubject.setValue("tenterprise_userid", userid, 11L);
  207. timsubjectid = timsubject.getUniqueIDValue();
  208. } else {
  209. timsubject = timsubjectSet.getPao(0);
  210. }
  211. PaoSetRemote timsubjectcontentSet = timsubject.getPaoSet("$timsubjectcontent", "timsubjectcontent");
  212. PaoRemote timsubjectcontent = timsubjectcontentSet.addAtEnd();
  213. timsubjectcontent.setValue("siteid", siteid, 11L);
  214. timsubjectcontent.setValue("createdate", sysdate, 11L);
  215. timsubjectcontent.setValue("timsubjectid", timsubjectid, 11L);
  216. timsubjectcontent.setValue("fcontent", fcontent, 11L);
  217. timsubjectSet.save();
  218. content.put("timsubjectid", timsubjectid);
  219. if (ischange) {//话题内容变更,通知前端进行数据刷新
  220. for (long userid : getImDialogUserIds(timdialogid)) {
  221. if (parameter.websocketClients.containsKey(userid)) {
  222. JSONObject methodobject = new JSONObject();
  223. methodobject.put("type", "reflashimdialog");
  224. methodobject.put("timdialogid", timdialogid);
  225. for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) {
  226. webClientSocket.sendSystemMessage(methodobject);
  227. }
  228. }
  229. }
  230. }
  231. return querySubject();
  232. }
  233. /**
  234. * 话题内容查询
  235. *
  236. * @return
  237. */
  238. public String querySubject() {
  239. long timsubjectid = content.getLongValue("timsubjectid");
  240. SQLFactory timsubjectSQL = new SQLFactory(this, "话题查询");
  241. timsubjectSQL.addParameter("siteid", siteid);
  242. timsubjectSQL.addParameter("timsubjectid", timsubjectid);
  243. Rows imsubjectrows = dbConnect.runSqlQuery(timsubjectSQL.getSQL());
  244. for (Row imsubject : imsubjectrows) {
  245. SQLFactory timsubjectcontentSQL = new SQLFactory(this, "话题内容查询");
  246. timsubjectcontentSQL.addParameter("siteid", siteid);
  247. timsubjectcontentSQL.addParameter("timsubjectid", imsubject.getLong("timsubjectid"));
  248. Rows imsubjectcontentrows = dbConnect.runSqlQuery(timsubjectcontentSQL.getSQL());
  249. RowsMap map = getAttachmentUrl("timsubjectconte", imsubjectcontentrows.toArrayList("timsubjectcontenid"));
  250. for (Row row : imsubjectcontentrows) {
  251. row.put("attinfos", map.get(row.getString("timsubjectcontenid")));
  252. }
  253. imsubject.put("imsubjectcontent", imsubjectcontentrows);
  254. }
  255. SQLFactory sqlFactory = new SQLFactory(this, "话题数据分析插入");
  256. sqlFactory.addParameter("siteid", siteid);
  257. sqlFactory.addParameter("timsubjectid", timsubjectid);
  258. sqlFactory.addParameter("tenterprise_userid", userid);
  259. sqlFactory.addParameter("tagentsid", tagentsid);
  260. dbConnect.runSqlUpdate(sqlFactory.getSQL());
  261. return getSucReturnObject().setData(imsubjectrows).toString();
  262. }
  263. /**
  264. * 话题回复
  265. *
  266. * @return
  267. */
  268. public String subjectAnswer() {
  269. long timsubjectid = content.getLongValue("timsubjectid");
  270. dbConnect.runSqlUpdate("update timsubjectanalysis set fisanswer=1,fanswertime=getDate() where siteid='" + siteid + "' and timsubjectid='" + timsubjectid + "' and tenterprise_userid='" + userid + "' and fisanswer=0");
  271. return getSucReturnObject().toString();
  272. }
  273. /**
  274. * 话题统计信息查询
  275. *
  276. * @return
  277. */
  278. public String querySubjectAnalysis() {
  279. long timsubjectid = content.getLongValue("timsubjectid");//话题ID
  280. long timdialogid = content.getLongValue("timdialogid");//对话框ID
  281. SQLFactory sqlFactory = new SQLFactory(this, "话题数据分析查询");
  282. sqlFactory.addParameter("siteid", siteid);
  283. sqlFactory.addParameter("timsubjectid", timsubjectid);
  284. sqlFactory.addParameter("timdialogid", timdialogid);
  285. Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL());
  286. for (Row row : rows) {
  287. row.put("headportraiturl", getHeadPic(row.getLong("tenterprise_userid")));
  288. }
  289. RowsMap fisreadmap = rows.toRowsMap("fisread");
  290. RowsMap fisanswermap = rows.toRowsMap("fisanswer");
  291. JSONObject object = new JSONObject();
  292. object.put("readlist", fisreadmap.get("1"));
  293. object.put("unreadlist", fisreadmap.get("0"));
  294. object.put("answerlist", fisanswermap.get("1"));
  295. object.put("unanswerlist", fisanswermap.get("0"));
  296. return getSucReturnObject().setData(object).toString();
  297. }
  298. }