fs-danaus
2022-07-06 6fe1e6dbec57bbd10ba1bbcf3347fa7f4492e553
webScoket实现启停系统功能
2个文件已添加
11个文件已修改
292 ■■■■ 已修改文件
WebRoot/home.jsp 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/js/index/WebSocketMessage.js 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/js/loginValidate.js 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/login.jsp 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/shopping/maintaince/maintaince.jsp 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/login/LoginAction.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/action/panval/InvGet.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/action/WebSocketMessageServer.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/api/messagelistener/WebSocketMessageListener.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/entity/MessageType.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/service/RefreshDataSourceMessageIfc.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/WebSocketMessage/service/RefreshDataSourceMessageImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/com/yc/sdk/shopping/action/Maintaince.java 46 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WebRoot/home.jsp
@@ -773,10 +773,8 @@
        return false;
    }
    $(function () {
        //checkSysIsExpired('<%=dbid%>','false');  //检查系统是否停止使用 Added by Johns Wang ,2017-05-26
        maintaince.dbid =<%=dbid%>;
        maintaince.isStop = 'false';
        setInterval(maintaince.checkSysIsExpired, 10000);//10秒调用一次
        setInterval(messagehint.popupMessageHint, 120000);//120秒调用一次 (120000)
        //是否显示系统消息   2012-09-18
@@ -986,7 +984,7 @@
        resizeiFrameHeight();
    });
    $(function () {
          <%--initWebsocket('<%= hostUrl.replace("https", "wss").replace("http", "ws") %>','<%=session.getAttribute(SessionKey.HRCODE)%>','<%=dbid%>','<%= session.getId() %>');--%>
          initWebsocket('<%= hostUrl.replace("https", "wss").replace("http", "ws") %>','<%=session.getAttribute(SessionKey.HRCODE)%>',<%=dbid%>,'<%= session.getId() %>');
    });
</script>
</body>
WebRoot/js/index/WebSocketMessage.js
@@ -1,17 +1,19 @@
var timeron=null;
function initWebsocket(hostUrl,userCode,dbId,sessionId) {
function initWebsocket(hostUrl,userCode,dbId,sessionId,userType) {
//  初始化weosocket
    var userFromType=1;
    if(userType!=undefined) userFromType=userType;
    var localHostUrl =  hostUrl; 
    var localUserCode = userCode ;
    var localDbId = dbId;
    var localSessionId = sessionId ;
    var info = '/ws/websocketMessage/'+localUserCode + '/'+ localDbId+'/' + localSessionId ;
    var info = '/ws/websocketMessage/'+localUserCode + '/'+ localDbId+'/' + localSessionId+'/'+userFromType ;
    var url = localHostUrl + info ;
    websocket = new WebSocket(url);
    
    websocket.onopen = function () {
        //  连接建立之后执行
        console.log('WebSocket连接成功');
        //console.log('WebSocket连接成功');
        // this.connectUser()
        // this.$indicator.close()
        clearTimeout(timeron);//by danaus 2020/3/20 20:42
@@ -20,9 +22,9 @@
      websocket.onerror = function (e) {
          //  连接建立失败3S重连
          timeron=setTimeout(function () {
              initWebsocket(localHostUrl,localUserCode,localDbId,localSessionId);
              initWebsocket(localHostUrl,localUserCode,localDbId,localSessionId,userType);
          }, 3000);
          console.log('连接建立失败', e);
          console.log('连接建立失败,3秒后重连', e);
        };
        websocket.onclose = function (e) {
@@ -30,12 +32,26 @@
          // setTimeout(function () {
          // initWebsocket(localHostUrl,localUserCode,localDbId,localSessionId);
          // }, 3000);
            if (webSocket != null){
                websocket.close();
            }
          console.log('断开连接', e);
        };
      
      // 接收消息
      websocket.onmessage = function (e) {
          console.log('接收消息', e);
            var json= JSON.parse(e.data);
            if(json.info.msgType==6014){
                //重定向到登录页面
                location="/login.jsp?m=6015&d="+json.info.dbId;
            }else if(json.info.msgType==6015){
                //刷新当前页面
                location="/login.jsp";
            }else if(json.info.msgType==6002){
                //右下角弹窗
            }
         // console.log('接收消息', json);
      }
}
WebRoot/js/loginValidate.js
@@ -252,9 +252,9 @@
            //location =oauth2HostName+"/oauth2/qq.do?"+SessionKey+"="+select.value+"&orghost="+hostUrl;
        });     
        maintaince.dbid=select.value;
        maintaince.isStop='false';
        setInterval(maintaince.checkSysIsExpired, 10000);//10秒调用一次
        //maintaince.dbid=select.value;
    //    maintaince.isStop='false';
        //setInterval(maintaince.checkSysIsExpired, 10000);//10秒调用一次
        //checkSysIsExpired('<%=dbId%>','false');  //检查系统是否停止使用 Added by Johns Wang ,2017-05-26
        
        
WebRoot/login.jsp
@@ -22,6 +22,8 @@
<%@page import="com.yc.sdk.weixinmp.util.UserAgentUtil" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<%
    String msgType=request.getParameter("m");//停用系统webscoket返回的参数,用它作为是否需要刷新当前页面的标记 by danaus 2022/7/5 17:48
    String msgDbid=request.getParameter("d");//停用系统webscoket返回的参数,用它作为是否需要刷新当前页面的标记 by danaus 2022/7/5 17:48
    String dsPath = request.getServletContext().getRealPath("/") + "WEB-INF" + File.separator + "classes" + File.separator + "dataSource" + File.separator + "_dataSource.xml";
    Calendar date = Calendar.getInstance();
    int year = date.get(Calendar.YEAR);
@@ -109,10 +111,22 @@
          rel="stylesheet"/>
    <script type="text/javascript"
            src="<%=hostUrl%>/js/index/maintaince.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/js/index/maintaince.js")%>"></script>
    <script src="<%=hostUrl%>/js/index/WebSocketMessage.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/js/index/WebSocketMessage.js")%>"
            type="text/javascript"></script>
</head>
<title>404页面不存在</title>
<body>
<script type="text/javascript">
    $(function () {
        if("<%=msgType%>"==6015){
            initWebsocket('<%= hostUrl.replace("https", "wss").replace("http", "ws") %>','<%=session.getAttribute(SessionKey.HRCODE)%>',<%=msgDbid%>,'<%= session.getId() %>','<%=msgType%>');
        }
        //maintaince.dbid =<%=dbId%>;
        //maintaince.isStop = 'true';
        //setInterval(maintaince.checkSysIsExpired, 10000);//10秒调用一次
        //checkSysIsExpired('<%=dbId%>','true');  //检查系统是否停止使用 Added by Johns Wang ,2017-05-26
    });
</script>
<style>
    .col-center-block {
        float: none;
@@ -141,14 +155,6 @@
        </div>
    </div>
</div>
<script type="text/javascript">
    $(function () {
        maintaince.dbid =<%=dbId%>;
        maintaince.isStop = 'true';
        setInterval(maintaince.checkSysIsExpired, 10000);//10秒调用一次
        //checkSysIsExpired('<%=dbId%>','true');  //检查系统是否停止使用 Added by Johns Wang ,2017-05-26
    });
</script>
</body>
</html>
<%
@@ -195,7 +201,16 @@
    <script src="<%=hostUrl %>/layui/layui.all.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/layui/layui.all.js")%>"></script>
    <script src="<%=hostUrl %>/js/loginValidate.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/js/loginValidate.js")%>"
            type="text/javascript"></script>
    <script src="<%=hostUrl%>/js/index/WebSocketMessage.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/js/index/WebSocketMessage.js")%>"
            type="text/javascript"></script>
</head>
<script type="text/javascript">
    $(function () {
        if("<%=msgType%>"==6015){
            initWebsocket('<%= hostUrl.replace("https", "wss").replace("http", "ws") %>','<%=session.getAttribute(SessionKey.HRCODE)%>',<%=msgDbid%>,'<%= session.getId() %>','<%=msgType%>');
        }
    });
</script>
<body class="login">
<div class="login_m">
    <div class="login_boder">
WebRoot/shopping/maintaince/maintaince.jsp
@@ -81,10 +81,10 @@
   </div>
</div>
<script type="text/javascript"><!--
<script type="text/javascript">
$(document).delegate('#button-submit', 'click', function() {
    <% if (! isStop) {  %>
    if (! confirm("是否真的停止系统,如果选【确定】,则系统将立即停止访问!") )  {
    if (! confirm("是否真的停止系统,如果选【确定】,系统将立即停止访问!") )  {
        return ;
    }
    <% } %>
@@ -117,7 +117,7 @@
        }
    });
});
//--></script>
</script>
</body>
</html>
src/com/yc/action/login/LoginAction.java
@@ -503,6 +503,8 @@
                    SpObserver.setDBtoInstance();
                }
                map.put("sessionInfo", getSessionInfo(session));
                map.put("userType", session.getAttribute(SessionKey.USERTYPE));
                map.put("isStopSystem", session.getAttribute(SessionKey.isStopSystem));
                map.put("isAdmin", ("SuperUser".equalsIgnoreCase(session.getAttribute(SessionKey.USERTYPE) + "") || "DeveloperUser".equalsIgnoreCase(session.getAttribute(SessionKey.USERTYPE) + "")) ? 1 : 0);//非普通用户都有所有权限
                final DataSourceEntity dataSourceMap = MultiDataSource.getDataSourceMap(dbId);
                map.put("isShowAttendance", dataSourceMap.isShowAttendanceButton() ? 1 : 0);//打卡
src/com/yc/action/panval/InvGet.java
@@ -1,11 +1,11 @@
package com.yc.action.panval;
import com.alibaba.fastjson.JSON;
import com.google.gson.JsonObject;
import com.jspsmart.upload.Files;
import com.jspsmart.upload.Request;
import com.jspsmart.upload.SmartUpload;
import com.yc.action.BaseAction;
import com.yc.action.grid.GridUtils;
import com.yc.entity.DataSourceActionEntity;
import com.yc.entity.DataSourceActionEntity.ActionEnum;
import com.yc.entity.DataSourceEntity;
@@ -13,13 +13,13 @@
import com.yc.exception.ApplicationException;
import com.yc.exception.CallBackMessage;
import com.yc.factory.FactoryBean;
import com.yc.im.service.RedisDAO;
import com.yc.im.util.RedisSocket;
import com.yc.multiData.JdbcPoolConfig;
import com.yc.multiData.MultiDataSource;
import com.yc.multiData.SpObserver;
import com.yc.sdk.WebSocketMessage.action.WebSocketMessageServer;
import com.yc.sdk.WebSocketMessage.entity.MessageInfo;
import com.yc.sdk.WebSocketMessage.entity.MessageType;
import com.yc.sdk.password.action.ChangePassword;
import com.yc.sdk.shopping.entity.SampleTypeEntity;
import com.yc.sdk.shopping.util.SettingKey;
import com.yc.sdk.weixincp.util.AsynchronousExecution;
import com.yc.service.BaseService;
@@ -42,7 +42,6 @@
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
@@ -55,20 +54,18 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.color.ColorSpace;
import java.awt.image.*;
import java.awt.image.BufferedImage;
import java.awt.image.ColorConvertOp;
import java.awt.image.Raster;
import java.io.*;
import java.net.InetAddress;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -348,17 +345,31 @@
            MultiDataSource multiDataSource = (MultiDataSource) FactoryBean.getBean("multiDataSource");
            multiDataSource.refreshDataSource(dbId);// 是为了增加一个数据源实现不重启就可以访问新增的数据源。也就是对原有保存在内存的数据源集合进行更新 2014-11-26
        }
        MessageInfo messageInfo = new MessageInfo();
        //---刷新本地tomcat内存的数据源
        messageInfo.setMsgType(MessageType.CHECK_SYSTEM_DISABLED);
        messageInfo.setDbId(Integer.parseInt(dbId));
        DataSourceActionEntity dataSourceActionEntity = new DataSourceActionEntity() ;
        dataSourceActionEntity.setDbId(dbId);
        dataSourceActionEntity.setAction(action.getName());
        RedisDAO redisDAO = (RedisDAO) FactoryBean.getBean("redisDAO");//发送消息
        redisDAO.publishMessage(RedisSocket.CHANNEL_DATASOURCE, GridUtils.toJsonNotNull(dataSourceActionEntity));
        messageInfo.setMsg(JSON.toJSONString(dataSourceActionEntity));
        WebSocketMessageServer.publishMessageToRedis(messageInfo);
        return true ;
    }
    public static void refreshDataSourceV2(String dbId,ActionEnum action,String actionType) throws Exception{
        refreshDataSource(dbId,action);
        //---通知webscoket
        MessageInfo messageInfo = new MessageInfo();
        messageInfo.setDbId(Integer.parseInt(dbId));
        if("stop".equalsIgnoreCase(actionType)) {
            messageInfo.setMsgType(MessageType.NOTICE_SYSTEM_STOP);
        }else{
            messageInfo.setMsgType(MessageType.NOTICE_SYSTEM_START);
            messageInfo.setUserFromType(MessageType.NOTICE_SYSTEM_START+"");//作为key的一部分,识别是用来刷新登录页面
        }
        WebSocketMessageServer.publishMessageToRedis(messageInfo);
    }
    /**
     * 判断当前 dbid 是否存在于 cookies 中
src/com/yc/sdk/WebSocketMessage/action/WebSocketMessageServer.java
@@ -7,6 +7,7 @@
import com.yc.im.util.RedisSocket;
import com.yc.sdk.WebSocketMessage.entity.*;
import com.yc.sdk.jedis.RedisKey;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
@@ -181,7 +182,7 @@
    public static List<WsMessageUserEntity> getOnlineUser(Integer dbId, String userFromType) {
        List<WsMessageUserEntity> wsMessageUserList = new ArrayList<WsMessageUserEntity>();
        for(Map.Entry<String, WsMessageUserEntity> entry:onlineUserList.entrySet()){  
            if (entry.getKey().startsWith(RedisSocket.CHANEL_WS_MESSAGES + ":" + dbId + ":" + userFromType + ":")) {
            if (entry.getKey().startsWith(RedisSocket.CHANEL_WS_MESSAGES + ":" + dbId + ":" + (StringUtils.isNotBlank(userFromType)?(userFromType + ":"):""))) {
                wsMessageUserList.add(entry.getValue()) ;
            }
            //System.out.println(entry.getKey()+"--->"+entry.getValue());  
src/com/yc/sdk/WebSocketMessage/api/messagelistener/WebSocketMessageListener.java
@@ -37,36 +37,41 @@
    TasksMessageIfc tasksMessageIfc;
    @Autowired
    VersionMessageIfc versionMessageIfc;
    @Autowired
    RefreshDataSourceMessageIfc refreshDataSourceMessageIfc;
    @Override
    public void onMessage(Message message, byte[] pattern) {
        try {
            RedisSerializer<?> serializer = redisTemplate.getValueSerializer();
            Object body = serializer.deserialize(message.getBody());
            //String channel = new String(pattern);   //取订阅频道 主题 channel
            MessageInfo msg=null;
            if(body instanceof MessageInfo) {
            MessageInfo msg = null;
            if (body instanceof MessageInfo) {
                msg = (MessageInfo) body;
            }else {
            } else {
                msg = MessageInfo.build(String.valueOf(body));
            }
            //System.out.println("订阅接收到的消息:"+msg.toString());
            //群发所有小程序用户
            if (msg.getMsgType().equals(MessageType.REFRESH_PANICBUYING) && (msg.getUserCode()==null|| msg.getUserCode().equals("")) ) {
                List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType());
                //只有是存在于当前的用户信息才需要处理,否则不需要处理
                if (wsMessageUserEntityList != null && wsMessageUserEntityList.size() != 0) {
                    for (WsMessageUserEntity wsMessageUserEntity : wsMessageUserEntityList) {
                        handlerMessage(msg, wsMessageUserEntity);
                    }
                }
            }else if(msg.getMsgType().equals(MessageType.REFRESH_TASK)||
                    msg.getMsgType().equals(MessageType.REFRESH_LOCALVERSION_TASK)){
                //对于没用websocket接收的情况,直接处理相关消息
                handlerMessage(msg,null);
            }else{
                List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType(),msg.getUserCode());
            //群发所有小程序用户
            if ((msg.getMsgType().equals(MessageType.REFRESH_PANICBUYING) && (msg.getUserCode() == null || msg.getUserCode().equals(""))) ||
                    MessageType.NOTICE_SYSTEM_STOP.equals(msg.getMsgType())||
                    MessageType.NOTICE_SYSTEM_START.equals(msg.getMsgType())) {
                List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType());
                //只有是存在于当前的用户信息才需要处理,否则不需要处理
                if (wsMessageUserEntityList != null && wsMessageUserEntityList.size() != 0) {
                    for (WsMessageUserEntity wsMessageUserEntity : wsMessageUserEntityList) {
                        handlerMessage(msg, wsMessageUserEntity);
                    }
                }
            } else if (msg.getMsgType().equals(MessageType.REFRESH_TASK) ||
                    msg.getMsgType().equals(MessageType.REFRESH_LOCALVERSION_TASK)) {
                //对于没用websocket接收的情况,直接处理相关消息
                handlerMessage(msg, null);
            } else {
                List<WsMessageUserEntity> wsMessageUserEntityList = WebSocketMessageServer.getOnlineUser(msg.getDbId(), msg.getUserFromType(), msg.getUserCode());
                //只有是存在于当前的用户信息才需要处理,否则不需要处理
                if (wsMessageUserEntityList != null && wsMessageUserEntityList.size() != 0) {
                    for (WsMessageUserEntity wsMessageUserEntity : wsMessageUserEntityList) {
@@ -85,8 +90,8 @@
     * @return
     */
    protected void handlerMessage(MessageInfo message, WsMessageUserEntity userEntity) {
        MessageIfc messageIfc = null;
        if (message != null && message.getMsgType() != null) {
        MessageIfc messageIfc = null;
        if (message != null && message.getMsgType() != null) {
            switch (message.getMsgType()) {
                case 6001:  //APP扫码登录
                    // messageIfc=imMessageIfc;
@@ -100,11 +105,13 @@
                case 6004:  //收取服务费续费通知
                    //messageIfc=imMessageIfc;
                    break;
                case 6005:  //检查系统是否停用,代替maintaince.do
                    //messageIfc=imMessageIfc;
                case 6005:  //检查系统是否停用,代替maintaince.do
                case 6014: //关闭系统通知
                case 6015: //启用系统通知
                    messageIfc = refreshDataSourceMessageIfc;
                    break;
                case 6006:   //小程序扫码核销(扫码了,等待按“核销”按钮)
                    messageIfc=heXiaoMessageIfc;
                    messageIfc = heXiaoMessageIfc;
                    break;
                case 6007:  //发送即时消息 im 
                    messageIfc = imMessageIfc;
@@ -112,24 +119,24 @@
                    messageIfc = apiAuthMessageIfc;
                    break;
                case 6009:  //刷新小程序端活动内容  MessageType.REFRESH_PANICBUYING
                    messageIfc = refreshPanicBuyingIfc ;
                    break;
                    messageIfc = refreshPanicBuyingIfc;
                    break;
                case 6010:   //小程序扫码核销(点了“核销”按钮)
                    messageIfc=heXiaoMessageIfc;
                    messageIfc = heXiaoMessageIfc;
                    break;
                case 6011:   //农行支付结果通知回调
                    messageIfc=abcPayMessageIfc;
                    messageIfc = abcPayMessageIfc;
                    break;
                case 6012:   //刷新任务作业
                    messageIfc=tasksMessageIfc;
                    messageIfc = tasksMessageIfc;
                    break;
                case 6013:   //刷新内存版本号
                    messageIfc=versionMessageIfc;
                    messageIfc = versionMessageIfc;
                    break;
                default:
            }
            if (messageIfc != null) {
                messageIfc.handlerMessage(message, userEntity);
                messageIfc.handlerMessage(message, userEntity);
            }
        }
    }
src/com/yc/sdk/WebSocketMessage/entity/MessageType.java
@@ -14,5 +14,7 @@
    public final static Integer ABC_PAY_CALLBACK =6011;   //农行支付回调通知
    public final static Integer REFRESH_TASK =6012;   //刷新系统作业任务
    public final static Integer REFRESH_LOCALVERSION_TASK =6013;   //刷新内存版本号
    public final static Integer NOTICE_SYSTEM_STOP =6014;   //通知关闭系统,返回登录界面
    public final static Integer NOTICE_SYSTEM_START =6015;   //通知启用系统,刷新登录界面
}
src/com/yc/sdk/WebSocketMessage/service/RefreshDataSourceMessageIfc.java
New file
@@ -0,0 +1,4 @@
package com.yc.sdk.WebSocketMessage.service;
public interface RefreshDataSourceMessageIfc extends MessageIfc{
}
src/com/yc/sdk/WebSocketMessage/service/RefreshDataSourceMessageImpl.java
New file
@@ -0,0 +1,48 @@
package com.yc.sdk.WebSocketMessage.service;
import com.alibaba.fastjson.JSON;
import com.yc.entity.DataSourceActionEntity;
import com.yc.factory.FactoryBean;
import com.yc.multiData.MultiDataSource;
import com.yc.sdk.WebSocketMessage.entity.MessageInfo;
import com.yc.sdk.WebSocketMessage.entity.MessageType;
import com.yc.sdk.WebSocketMessage.entity.WsMessageUserEntity;
import org.springframework.stereotype.Service;
/**
 * 处理数据源
 */
@Service
public class RefreshDataSourceMessageImpl implements RefreshDataSourceMessageIfc {
    @Override
    public void handlerMessage(MessageInfo message, WsMessageUserEntity userEntity) {
        //TODO 业务逻辑处理
        try {
            if (message != null) {
                DataSourceActionEntity dataSourceActionEntity = JSON.parseObject(message.getMsg(), DataSourceActionEntity.class);
                if(message.getMsgType().equals(MessageType.CHECK_SYSTEM_DISABLED)) {
                    if (dataSourceActionEntity != null) {
                        MultiDataSource multiDataSource = (MultiDataSource) FactoryBean.getBean("multiDataSource");
                        if (DataSourceActionEntity.ActionEnum.REFRESH.getName().equals(dataSourceActionEntity.getAction())) {
                            multiDataSource.refreshDataSource(dataSourceActionEntity.getDbId());   //刷新本地数据源
                        }
                        if (DataSourceActionEntity.ActionEnum.DELETE.getName().equals(dataSourceActionEntity.getAction())) {
                            multiDataSource.removeDataSource(dataSourceActionEntity.getDbId());   //删除数据源
                        }
                        if (DataSourceActionEntity.ActionEnum.REFRESHEXPIREDDATE.getName().equals(dataSourceActionEntity.getAction())) {
                            multiDataSource.refreshExpiredDataSource();   //更新过期的数据源
                        }
                    }
                }else{
                    //发通知关闭系统
                    userEntity.sendMessageV2(message);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/com/yc/sdk/shopping/action/Maintaince.java
@@ -59,13 +59,25 @@
            // expiredDate
            demo.updateExpiredDate(dataSourceEntity.getDbId(), days ) ;
        } catch (DataAccessException e) {
            errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
            json.add("error", errJson);
            String msg=(e.getCause()!=null? e.getCause().getMessage():e.getMessage());
            if(request.getHeader("x-app-type")!=null) {
                json.addProperty("state", -1);
                json.addProperty("msg", msg);
            }else {
                errJson.addProperty("warning",msg);
                json.add("error", errJson);
            }
            this.printJson(response, json.toString());
            return;
        }catch (Exception e) {
            errJson.addProperty("warning",(e.getCause()!=null? e.getCause().getMessage():e.getMessage()));
            json.add("error", errJson);
            String msg=(e.getCause()!=null? e.getCause().getMessage():e.getMessage());
            if(request.getHeader("x-app-type")!=null) {
                json.addProperty("state", -1);
                json.addProperty("msg", msg);
            }else{
                errJson.addProperty("warning",msg);
                json.add("error", errJson);
            }
            this.printJson(response, json.toString());
            return;
        } finally {
@@ -79,18 +91,28 @@
                //删除所有在线用户
                
                int count = SessionListener.delSession(request,dataSourceEntity.getDbId()+"") ;
                json.addProperty("hint", "系统已经停止,停止时已强制【"+count+"】用户退出了系统!");
                json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp"+ (wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString)) ;
                String msg="系统已经停止使用,停止时已强制【" + count + "】用户退出系统!稍后将自动重定向到登录界面";
                if(request.getHeader("x-app-type")!=null) {
                    json.addProperty("state", 0);
                    json.addProperty("msg", msg);
                }else {
                    json.addProperty("hint",msg );
                    json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
                }
            }else {
                json.addProperty("isstop","false" );
                json.addProperty("hint", "系统已经启用,可以正常登录系统!");
                json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp"+ (wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString)) ;
                String msg="系统已经启用,可以正常登录系统!";
                if(request.getHeader("x-app-type")!=null) {
                    json.addProperty("state", 0);
                    json.addProperty("msg", msg);
                }else {
                    json.addProperty("isstop", "false");
                    json.addProperty("hint", msg);
                    json.addProperty("redirect", hostUrl + "/shopping/maintaince/maintaince.jsp" + (wxQueryString == null || "".equals(wxQueryString) ? "" : "?" + wxQueryString));
                }
            }
            //AsynchronousExecution.doRefreshUri(hostUrl,"/SyncDataSource.do", "");  //doRefreshDataSource();
            
            InvGet.refreshDataSource(dataSourceEntity.getDbId()+"",DataSourceActionEntity.ActionEnum.REFRESH);  //直接刷新本机
            InvGet.refreshDataSourceV2(dataSourceEntity.getDbId()+"",DataSourceActionEntity.ActionEnum.REFRESH,action);  //直接刷新本机
        }catch(Exception e) {
            this.printJson(response, e.getMessage());
            e.printStackTrace();