webSocket 任务数更新提醒 jeecg

来源:互联网 发布:旅游分销平台源码 编辑:程序博客网 时间:2024/05/19 14:01

1.效果(当数据库变化时,更新任务数)

2.页面

3.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@page import="org.jeecgframework.web.system.pojo.base.TSUser" %><%@include file="/context/mytags.jsp"%><%@ page import="java.sql.*" %><!--  获取登录用户信息  --><% TSUser u = (TSUser) session.getAttribute("LOCAL_CLINET_USER"); System.out.println(u.getUserName()+";id="+u.getId()+";"+u.getCurrentDepart().getId());%> <!--  【首页提醒】我的任务 --><li class="dropdown hidden-xs">      <a href="javascript:addOneTab('我的任务', 'tSTaskController.do?goTaskListTab', 'default');">                             <i class="fa fa-bell" style="color:#EE6B6B"></i> 待办(<span id="view"></span>)</a> </li>  


3.1 js

<script type="text/javascript"> //先检验能不能运行起来,能不能连上,自动推送数据,先不做数据显示 //客户端就会与服务器进行连接 //ws://localhost:8080/jeecg/websocket/1/2 ; (1,2 是传递的参数)  var webSocket = new WebSocket("ws://localhost:8080/jeecg/websocket/<%=u.getId() %>/<%=u.getCurrentDepart().getId() %>");   //这里只是调试用 //连接失败时回调        webSocket.onerror = function (event) {        makeDataOnWeb("0");            //makeDataOnWeb("error");        };        //这里只是调试用        //连接成功时回调          webSocket.onopen = function (event) {             makeDataOnWeb("0");            //console.log("conn success");             //makeDataOnWeb("conn success");        };        webSocket.onmessage = function (event) {            makeDataOnWeb(event.data);        };        //这里只是调试用        webSocket.onclose = function (event) {        // makeDataOnWeb("0");           makeDataOnWeb("conn close");        };        function makeDataOnWeb(data) {//alert("data="+data);                   document.getElementById("view").innerHTML=data;        };    </script>


3.2 后台代码

import java.io.IOException;import java.util.List;import java.util.Map;import javax.websocket.OnClose;import javax.websocket.OnError;import javax.websocket.OnOpen;import javax.websocket.Session;import javax.websocket.server.PathParam;import javax.websocket.server.ServerEndpoint;import org.apache.log4j.Logger;import org.hibernate.annotations.Where;@ServerEndpoint("/websocket/{uId}/{dpId}")public class websocket {private static final Logger logger = Logger.getLogger(websocket.class);private int currentIndex;private SystemService systemService; //调取的其他类private CommonService commonService; //调取的其他类private String uid;private String dpId;@OnOpenpublic  void onOpen(@PathParam("uId") String uId,@PathParam("dpId") String dpId,Session session) { //调取的其他类ApplicationContext ctx = ApplicationContextUtil.getContext();    if (ctx.containsBean("systemService")) {      this.systemService = ((SystemService)ctx.getBean("systemService"));    }    if (ctx.containsBean("commonService")) {  this.commonService = ((CommonService)ctx.getBean("commonService"));}    while (true) {    currentIndex=0;  //这之间写业务代码 查数据库.........//    System.out.println( "待办任务="+currentIndex);             try {ession.getBasicRemote().sendText(String.valueOf(currentIndex));} catch (IOException e1) {e1.printStackTrace();}             try {               //一秒刷新一次               Thread.sleep(1000*60);           } catch (InterruptedException e) {               e.printStackTrace();           }    }      } @OnClose  public void onClose()  {    logger.info("有一连接关闭! "  );  }  @OnError  public void onError(Session session, Throwable error)  {    logger.info("发生错误");    error.printStackTrace();  }

2,ajax 实现

  //alert("//加载消息");

 //alert("//加载消息");function getTaskCount(){//     待办  加载消息    var url = "tSTaskController.do?getTaskMessageCount";    $.ajax({        url:url,        type:"GET",        dataType:"JSON",        async: false,        success:function(data){            if(data.success){            var messageCount = data.obj;           //alert("待办  加载消息");             $("#taskCount").html(messageCount);            }         }      });      }// 重复执行某个方法  window.setInterval("getTaskCount()",1000*60*5); // 去掉定时器的方法 window.clearInterval(t1);    $(document).ready(function(){//------------------------------------------------------------ //     alert("待办  加载消息");//     待办  加载消息        getTaskCount();  });       //------------------------------------------------------------   



   
//------------------------------------------------------------   

/** * 首页取得任务的消息 *  * @param user * @param req * @return */@RequestMapping(params = "getTaskMessageCount")@ResponseBodypublic AjaxJson getNoticeList(HttpServletRequest req) {Integer cont = 0;AjaxJson j = new AjaxJson();j.setObj(0);if(userRoleId.equals("402881e75f1f2471015f206d63e60015")){ String qsql = "select t.c_taskid,t.c_taskname,t.c_assignee,t.c_workflowid,t.c_instanceid,t.c_createtime,t.c_taskstate,t.c_resourceid,r.c_spreadsheetid,r.c_otherparams  from t_ext_workflow_task t LEFT JOIN  t_ext_workflow_resource r on t.c_resourceid  =r.c_resourceid where  t.c_taskstate='unfinished'  AND t.c_assignee like '%"+ userRoleId + "%' ";  List<Map<String, Object>> taskList = DynamicDBUtil.findList("SAP_DB", qsql);  if (null != taskList && !taskList.isEmpty()) {cont += taskList.size();  }  }j.setObj(cont);return j;}  
同时也参考文章 http://blog.csdn.net/Nougats/article/details/75305370 
http://blog.csdn.net/u014175572/article/details/46693121

阅读全文
0 0