package com.cnd3b.restcontroller.system.im.imdialog; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.cnd3b.common.Controller; import com.cnd3b.common.D3bException; import com.cnd3b.common.data.Row; import com.cnd3b.common.data.Rows; import com.cnd3b.common.data.RowsMap; import com.cnd3b.common.data.SQLFactory; import com.cnd3b.common.parameter.parameter; import com.cnd3b.common.websocket.WebClientSocket; import p2.pao.PaoRemote; import p2.pao.PaoSetRemote; import p2.util.P2Exception; import java.util.ArrayList; public class imdialog extends Controller { /** * 构造函数 * * @param content */ public imdialog(JSONObject content) { super(content); } /** * 群对话框列表查询 * * @return */ public String query_imdialogList() { /** * 过滤条件设置 */ StringBuffer where = new StringBuffer(" 1=1 "); if (content.containsKey("where")) { JSONObject whereObject = content.getJSONObject("where"); if (whereObject.containsKey("condition") && !"".equals(whereObject.getString("condition"))) { where.append(" and("); where.append("t1.fimdialogname like'%").append(whereObject.getString("condition")).append("%' "); where.append(")"); } } SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯普通群列表查询"); timdialogSQL.addParameter("siteid", siteid); timdialogSQL.addParameter("tenterprise_userid", userid); timdialogSQL.addParameter_SQL("where", where); Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL()); SQLFactory timnewmsgSQL = new SQLFactory(this, "即时通讯普通群最新消息查询"); timnewmsgSQL.addParameter("siteid", siteid); timnewmsgSQL.addParameter_in("timdialogid", rows.toArrayList("timdialogid")); RowsMap newmsgmap = timnewmsgSQL.runSqlQuery().toRowsMap("timdialogid"); for (Row row : rows) { Rows newmsgrows = newmsgmap.get(row.getString("timdialogid")); for (Row newmsg : newmsgrows) { newmsg.put("message", JSONObject.parseObject(newmsg.getString("message"))); } row.put("latestnews", newmsgrows);//最新消息 } return getSucReturnObject().setData(rows).saveToDataPool().toString(); } /** * 群主界面查询 * * @return */ public String query_imdialogMain() throws D3bException, P2Exception { long timdialogid = content.getLong("timdialogid"); SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯群主界面查询"); timdialogSQL.addParameter("siteid", siteid); timdialogSQL.addParameter("tenterprise_userid", userid); timdialogSQL.addParameter("timdialogid", timdialogid); Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL()); for (Row row : rows) { SQLFactory timdialoguserSQL = new SQLFactory(this, "即时通讯群成员列表查询"); timdialoguserSQL.addParameter("siteid", siteid); timdialoguserSQL.addParameter("timdialogid", content.getString("timdialogid")); Rows userrows = dbConnect.runSqlQuery(timdialoguserSQL.getSQL()); row.put("users", userrows); } return getSucReturnObject().setData(rows).toString(); } /** * 一键联系 * * @return */ public String quickcontact() throws D3bException, P2Exception { long tenterprise_userid = content.getLongValue("tenterprise_userid");//根据对方userid,查一对一聊天对话框 SQLFactory factory = new SQLFactory(this, "根据用户ID查询一对一聊天对话框ID"); factory.addParameter("siteid", siteid); factory.addParameter_in("tenterprise_userid", new String[]{String.valueOf(userid), String.valueOf(tenterprise_userid)}); Rows rows = dbConnect.runSqlQuery(factory.getSQL()); if (!rows.isEmpty()) { content.put("timdialogid", rows.get(0).getLong("timdialogid")); return query_imdialogMain(); } else { JSONArray usersArray = new JSONArray(); usersArray.add(String.valueOf(userid)); usersArray.add(String.valueOf(tenterprise_userid)); content.put("fimdialogname", username + "-" + getUser(tenterprise_userid).getString("fname")); content.put("fimdialogtype", "普通"); content.put("users", usersArray); return insertOrModify(); } } /** * 群消息查询 * * @return */ public String query_imdialogMessage() { long timdialogid = content.getLong("timdialogid"); /** *排序条件设置 */ String[] sortfield = {"t1.createdate desc"}; String sort = getSort(sortfield, "t1.createdate desc"); SQLFactory timdialogSQL = new SQLFactory(this, "即时通讯群历史消息查询", pageSize, pageNumber, sort); timdialogSQL.addParameter("siteid", siteid); timdialogSQL.addParameter("timdialogid", timdialogid); Rows rows = dbConnect.runSqlQuery(timdialogSQL.getSQL()); for (Row row : rows) { String message = row.getString("message"); row.put("message", JSONObject.parseObject(message)); } //清除未读消息数 dbConnect.runSqlUpdate("update timdialogusers set funreadmsgcount=0 where siteid='" + siteid + "' and timdialogid='" + timdialogid + "' and tenterprise_userid='" + userid + "'"); return getSucReturnObject().setDataByPaging(rows).toString(); } public String restUnReadMsgCount() { long timdialogid = content.getLong("timdialogid"); dbConnect.runSqlUpdate("update timdialogusers set funreadmsgcount=0 where siteid='" + siteid + "' and timdialogid='" + timdialogid + "' and tenterprise_userid='" + userid + "'"); return getSucReturnObject().toString(); } /** * 新建聊天对话框 * * @return * @throws D3bException * @throws P2Exception */ public String insertOrModify() throws D3bException, P2Exception { long timdialogid = content.getLongValue("timdialogid"); //群ID 新增时默认传0 String fimdialogname = content.getString("fimdialogname", "timdialog.fimdialogname", "群名称");//群名称 String fimdialogtype = content.getString("fimdialogtype");//对话类型 String ownertable = content.getString("ownertable");//所有表 String ownerid = content.getString("ownerid");//所有表ID JSONArray usersArray = content.getJSONArray("users"); ArrayList sqlList = new ArrayList<>(); PaoSetRemote timdialogSet = getP2ServerSystemPaoSet("timdialog", "siteid='" + siteid + "' and timdialogid='" + timdialogid + "'"); PaoRemote timdialog = null; if (timdialogid <= 0 || timdialogSet.isEmpty()) { /** * 创建对话框 */ timdialog = timdialogSet.addAtEnd(); timdialog.setValue("siteid", siteid, 11L);//企业ID timdialog.setValue("createby", username, 11L);//创建人 timdialog.setValue("createdate", sysdate, 11L);//创建时间 timdialog.setValue("fimdialogtype", fimdialogtype, 11L);//对话框类型 timdialog.setValue("ownertable", ownertable, 11L);//所有表 timdialog.setValue("ownerid", ownerid, 11L);//所有表ID timdialog.setValue("tenterprise_userid", userid, 11L);//创建账号ID timdialogid = timdialog.getUniqueIDValue(); /** * 在初始对话框中添加人员 */ ArrayList userlist = new ArrayList<>(); usersArray.add(userid);//默认将创建人员加入群 for (Object user : usersArray) { userlist.add(String.valueOf(user)); } SQLFactory sqlFactory = new SQLFactory(this, "即时通讯群人员添加"); sqlFactory.addParameter("createby", username); sqlFactory.addParameter("timdialogid", timdialogid); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter_in("tenterprise_userid", userlist); sqlList.add(sqlFactory.getSQL()); } else { timdialog = timdialogSet.getPao(0); } timdialog.setValue("fimdialogname", fimdialogname, 11L);//对话框类型 timdialogSet.save(); dbConnect.runSqlUpdate(sqlList); content.put("timdialogid", timdialogid); return query_imdialogMain(); } /** * 创建聊天话题 * * @return */ public String createSubject() throws D3bException, P2Exception { long timsubjectid = content.getLongValue("timsubjectid"); //话题ID 新增时默认传0 long timdialogid = content.getLongValue("timdialogid"); String fcontent = content.getString("timsubject", "timsubject.fcontent", "话题内容");//话题内容 boolean ischange = timsubjectid > 0; PaoSetRemote timsubjectSet = getP2ServerSystemPaoSet("timsubject", "siteid='" + siteid + "' and tagentsid='" + tagentsid + "' and timsubjectid='" + timsubjectid + "'"); PaoRemote timsubject = null; if (timsubjectid <= 0 || timsubjectSet.isEmpty()) { timsubject = timsubjectSet.addAtEnd(); timsubject.setValue("siteid", siteid, 11L);//企业ID timsubject.setValue("createby", username, 11L);//创建人 timsubject.setValue("createdate", sysdate, 11L);//创建时间 timsubject.setValue("tagentsid", tagentsid, 11L); timsubject.setValue("tenterprise_userid", userid, 11L); timsubjectid = timsubject.getUniqueIDValue(); } else { timsubject = timsubjectSet.getPao(0); } PaoSetRemote timsubjectcontentSet = timsubject.getPaoSet("$timsubjectcontent", "timsubjectcontent"); PaoRemote timsubjectcontent = timsubjectcontentSet.addAtEnd(); timsubjectcontent.setValue("siteid", siteid, 11L); timsubjectcontent.setValue("createdate", sysdate, 11L); timsubjectcontent.setValue("timsubjectid", timsubjectid, 11L); timsubjectcontent.setValue("fcontent", fcontent, 11L); timsubjectSet.save(); content.put("timsubjectid", timsubjectid); if (ischange) {//话题内容变更,通知前端进行数据刷新 for (long userid : getImDialogUserIds(timdialogid)) { if (parameter.websocketClients.containsKey(userid)) { JSONObject methodobject = new JSONObject(); methodobject.put("type", "reflashimdialog"); methodobject.put("timdialogid", timdialogid); for (WebClientSocket webClientSocket : parameter.websocketClients.get(userid).values()) { webClientSocket.sendSystemMessage(methodobject); } } } } return querySubject(); } /** * 话题内容查询 * * @return */ public String querySubject() { long timsubjectid = content.getLongValue("timsubjectid"); SQLFactory timsubjectSQL = new SQLFactory(this, "话题查询"); timsubjectSQL.addParameter("siteid", siteid); timsubjectSQL.addParameter("timsubjectid", timsubjectid); Rows imsubjectrows = dbConnect.runSqlQuery(timsubjectSQL.getSQL()); for (Row imsubject : imsubjectrows) { SQLFactory timsubjectcontentSQL = new SQLFactory(this, "话题内容查询"); timsubjectcontentSQL.addParameter("siteid", siteid); timsubjectcontentSQL.addParameter("timsubjectid", imsubject.getLong("timsubjectid")); Rows imsubjectcontentrows = dbConnect.runSqlQuery(timsubjectcontentSQL.getSQL()); RowsMap map = getAttachmentUrl("timsubjectconte", imsubjectcontentrows.toArrayList("timsubjectcontenid")); for (Row row : imsubjectcontentrows) { row.put("attinfos", map.get(row.getString("timsubjectcontenid"))); } imsubject.put("imsubjectcontent", imsubjectcontentrows); } SQLFactory sqlFactory = new SQLFactory(this, "话题数据分析插入"); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("timsubjectid", timsubjectid); sqlFactory.addParameter("tenterprise_userid", userid); sqlFactory.addParameter("tagentsid", tagentsid); dbConnect.runSqlUpdate(sqlFactory.getSQL()); return getSucReturnObject().setData(imsubjectrows).toString(); } /** * 话题回复 * * @return */ public String subjectAnswer() { long timsubjectid = content.getLongValue("timsubjectid"); dbConnect.runSqlUpdate("update timsubjectanalysis set fisanswer=1,fanswertime=getDate() where siteid='" + siteid + "' and timsubjectid='" + timsubjectid + "' and tenterprise_userid='" + userid + "' and fisanswer=0"); return getSucReturnObject().toString(); } /** * 话题统计信息查询 * * @return */ public String querySubjectAnalysis() { long timsubjectid = content.getLongValue("timsubjectid");//话题ID long timdialogid = content.getLongValue("timdialogid");//对话框ID SQLFactory sqlFactory = new SQLFactory(this, "话题数据分析查询"); sqlFactory.addParameter("siteid", siteid); sqlFactory.addParameter("timsubjectid", timsubjectid); sqlFactory.addParameter("timdialogid", timdialogid); Rows rows = dbConnect.runSqlQuery(sqlFactory.getSQL()); for (Row row : rows) { row.put("headportraiturl", getHeadPic(row.getLong("tenterprise_userid"))); } RowsMap fisreadmap = rows.toRowsMap("fisread"); RowsMap fisanswermap = rows.toRowsMap("fisanswer"); JSONObject object = new JSONObject(); object.put("readlist", fisreadmap.get("1")); object.put("unreadlist", fisreadmap.get("0")); object.put("answerlist", fisanswermap.get("1")); object.put("unanswerlist", fisanswermap.get("0")); return getSucReturnObject().setData(object).toString(); } }