From 5fc47425b6c9e4c6d16602cb44817acc8c6651bd Mon Sep 17 00:00:00 2001 From: zengwh <81383286@qq.com> Date: Fri, 31 Jul 2020 09:51:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E5=8F=B0=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/权限系统数据库备忘.doc | Bin 0 -> 54272 bytes .../com/manage/interfaces/cache/Cache.java | 65 ------ .../manage/interfaces/cache/CacheManager.java | 205 ------------------ .../main/webapp/doc/视图power_user_dict.sql | 14 ++ power-admin/src/main/webapp/static/js/user.js | 4 +- .../src/main/webapp/static/js/user1.js | 4 +- .../com/manage/util/ActionScopeUtils.java | 9 - .../java/com/manage/util/BeanMapperUtils.java | 33 --- .../main/java/com/manage/util/Constant.java | 2 - .../main/java/com/manage/util/JsonModel.java | 91 -------- .../main/java/com/manage/util/SigarUtils.java | 2 +- .../com/manage/util/StateForJsonModel.java | 45 ---- .../ImportExcel/ImportExcelJudgeMethod.java | 2 +- .../service/ImportExcel/ImportExcelUtil.java | 5 - .../manage/service/cache/CacheManager.java | 153 +++---------- .../manage/service/webSocket/WebServer.java | 10 - .../com/manage/service/webSocket/WsPool.java | 24 -- 17 files changed, 46 insertions(+), 622 deletions(-) create mode 100644 doc/权限系统数据库备忘.doc delete mode 100644 power-admin/src/main/java/com/manage/interfaces/cache/Cache.java delete mode 100644 power-admin/src/main/java/com/manage/interfaces/cache/CacheManager.java create mode 100644 power-admin/src/main/webapp/doc/视图power_user_dict.sql delete mode 100644 power-foundaton/src/main/java/com/manage/util/BeanMapperUtils.java delete mode 100644 power-foundaton/src/main/java/com/manage/util/JsonModel.java delete mode 100644 power-foundaton/src/main/java/com/manage/util/StateForJsonModel.java diff --git a/doc/权限系统数据库备忘.doc b/doc/权限系统数据库备忘.doc new file mode 100644 index 0000000000000000000000000000000000000000..c5942087a79c8c09a75c5aeb8bc132961a358b22 GIT binary patch literal 54272 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

r$zj< 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 bPe1^MR(Jp-gU%Dd#fOsx&VQ*ty#)RXy;$hG literal 0 HcmV?d00001 diff --git a/power-admin/src/main/java/com/manage/interfaces/cache/Cache.java b/power-admin/src/main/java/com/manage/interfaces/cache/Cache.java deleted file mode 100644 index 0ebc1a0..0000000 --- a/power-admin/src/main/java/com/manage/interfaces/cache/Cache.java +++ /dev/null @@ -1,65 +0,0 @@ -package com.manage.interfaces.cache; - -/** - * @Description 缓存DTO - * @Date 2019/7/2 11:41 - * @Created by ljx - */ -public class Cache { - private String key;//缓存ID - private Object value;//缓存数据 - private long timeOut;//更新时间 - private boolean expired; //是否终止 - public Cache() { - super(); - } - - public Cache(String key, Object value, long timeOut, boolean expired) { - this.key = key; - this.value = value; - this.timeOut = timeOut; - this.expired = expired; - } - - public Cache(String key, Object value, long timeOut) { - this.key = key; - this.value = value; - this.timeOut = timeOut; - } - public Cache(String key, Object value) { - this.key = key; - this.value = value; - } - - public String getKey() { - return key; - } - - public long getTimeOut() { - return timeOut; - } - - public Object getValue() { - return value; - } - - public void setKey(String string) { - key = string; - } - - public void setTimeOut(long l) { - timeOut = l; - } - - public void setValue(Object object) { - value = object; - } - - public boolean isExpired() { - return expired; - } - - public void setExpired(boolean b) { - expired = b; - } -} diff --git a/power-admin/src/main/java/com/manage/interfaces/cache/CacheManager.java b/power-admin/src/main/java/com/manage/interfaces/cache/CacheManager.java deleted file mode 100644 index db23b16..0000000 --- a/power-admin/src/main/java/com/manage/interfaces/cache/CacheManager.java +++ /dev/null @@ -1,205 +0,0 @@ -package com.manage.interfaces.cache; - -import com.manage.vo.Power_UserVo; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; - -public class CacheManager { - private static HashMap cacheMap = new HashMap(); - - private CacheManager() { - super(); - } - public static boolean getSimpleFlag(String key){ - try{ - return (Boolean) cacheMap.get(key); - }catch(NullPointerException e){ - return false; - } - } - public static long getServerStartdt(String key){ - try { - return (Long)cacheMap.get(key); - } catch (Exception ex) { - return 0; - } - } - public synchronized static boolean setSimpleFlag(String key,boolean flag){ - if (flag && getSimpleFlag(key)) { - return false; - }else{ - cacheMap.put(key, flag); - return true; - } - } - public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){ - if (cacheMap.get(key) == null) { - cacheMap.put(key,serverbegrundt); - return true; - }else{ - return false; - } - } - - - private synchronized static Cache getCache(String key) { - return (Cache) cacheMap.get(key); - } - - private synchronized static boolean hasCache(String key) { - return cacheMap.containsKey(key); - } - - public synchronized static void clearAll() { - cacheMap.clear(); - } - - public synchronized static void clearAll(String type) { - Iterator i = cacheMap.entrySet().iterator(); - String key; - ArrayList arr = new ArrayList(); - try { - while (i.hasNext()) { - java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); - key = (String) entry.getKey(); - if (key.startsWith(type)) { - arr.add(key); - } - } - for (int k = 0; k < arr.size(); k++) { - clearOnly(arr.get(k)); - } - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - public synchronized static void clearOnly(String key) { - cacheMap.remove(key); - } - - public synchronized static void putCache(String key, Cache obj) { - cacheMap.put(key, obj); - } - - public static Cache getCacheInfo(String key) { - - if (hasCache(key)) { - Cache cache = getCache(key); - if (cacheExpired(cache)) { - cache.setExpired(true); - } - return cache; - }else - return null; - } - - public static void putCacheInfo(String key, Cache obj, long dt,boolean expired) { - Cache cache = new Cache(); - cache.setKey(key); - cache.setTimeOut(dt + System.currentTimeMillis()); - cache.setValue(obj); - cache.setExpired(expired); - cacheMap.put(key, cache); - } - public static void putCacheInfo(String key,Cache obj,long dt){ - Cache cache = new Cache(); - cache.setKey(key); - cache.setTimeOut(dt+System.currentTimeMillis()); - cache.setValue(obj); - cache.setExpired(false); - cacheMap.put(key,cache); - } - - public static boolean cacheExpired(Cache cache) { - if (null == cache) { - return false; - } - long nowDt = System.currentTimeMillis(); - long cacheDt = cache.getTimeOut(); - if (cacheDt <= 0||cacheDt>nowDt) { - return false; - } else { - return true; - } - } - - public static int getCacheSize() { - return cacheMap.size(); - } - - public static int getCacheSize(String type) { - int k = 0; - Iterator i = cacheMap.entrySet().iterator(); - String key; - try { - while (i.hasNext()) { - java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); - key = (String) entry.getKey(); - if (key.indexOf(type) != -1) { - k++; - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - - return k; - } - - public static ArrayList getCacheAllkey() { - ArrayList a = new ArrayList(); - try { - Iterator i = cacheMap.entrySet().iterator(); - while (i.hasNext()) { - java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); - a.add((String) entry.getKey()); - } - } catch (Exception ex) {} finally { - return a; - } - } - - public static ArrayList getCacheListkey(String type) { - ArrayList a = new ArrayList(); - String key; - try { - Iterator i = cacheMap.entrySet().iterator(); - while (i.hasNext()) { - java.util.Map.Entry entry = (java.util.Map.Entry) i.next(); - key = (String) entry.getKey(); - if (key.indexOf(type) != -1) { - a.add(key); - } - } - } catch (Exception ex) {} finally { - return a; - } - } - - public synchronized static void removeCacheByObject(Power_UserVo obj) { - ArrayList a = new ArrayList(); - Object key; - ArrayList arr = new ArrayList(); - try { - Iterator i = cacheMap.entrySet().iterator(); - while (i.hasNext()) { - Map.Entry entry = (Map.Entry) i.next(); - Cache cache = CacheManager.getCacheInfo((String)entry.getKey()); - Power_UserVo o = (Power_UserVo)cache.getValue(); - if (obj.getUserName().equals(o.getUserName())) { - arr.add((String)entry.getKey()); - } - } - if(null != arr && !arr.isEmpty()){ - for (int k = 0; k < arr.size(); k++) { - clearOnly(arr.get(k)); - } - } - } catch (Exception ex) {} - } - -} \ No newline at end of file diff --git a/power-admin/src/main/webapp/doc/视图power_user_dict.sql b/power-admin/src/main/webapp/doc/视图power_user_dict.sql new file mode 100644 index 0000000..ce08b8f --- /dev/null +++ b/power-admin/src/main/webapp/doc/视图power_user_dict.sql @@ -0,0 +1,14 @@ +CREATE VIEW power_user_dict AS +SELECT +`power_user`.`user_id` AS `user_id`, +`power_dept`.`dict_id` AS `dict_id` +FROM + (( + `power_user` + JOIN `mysql`.`help_topic` `b` ON (( + `b`.`help_topic_id` < (( length( `power_user`.`dept_id` ) - length( REPLACE ( `power_user`.`dept_id`, _latin1 ',', _latin1 '' ))) + 1 )))) + LEFT JOIN `power_dept` ON (( + `power_dept`.`dept_id` = `power_user`.`dept_id` + ))) +GROUP BY + `power_user`.`user_id` \ No newline at end of file diff --git a/power-admin/src/main/webapp/static/js/user.js b/power-admin/src/main/webapp/static/js/user.js index b0e272f..41edb3c 100644 --- a/power-admin/src/main/webapp/static/js/user.js +++ b/power-admin/src/main/webapp/static/js/user.js @@ -524,7 +524,7 @@ function exportExcel(){ var checks = $("#checks").val(); if(checks != '') { checks = checks.substring(0, checks.length - 1); - var url = path+"/user/export?userName="+$("#user_name").val()+"&userEmail="+$("#user_email").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val()+"&checks="+checks; + var url = path+"/user/export?checks="+checks; window.location.href = url; }else{ Common.confirm({ @@ -532,7 +532,7 @@ function exportExcel(){ message: "没有选中,您确定要按搜索栏条件导出?", operate: function (reselt) { if (reselt) { - var url = path+"/user/export?userName="+$("#user_name").val()+"&userEmail="+$("#user_email").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val()+"&checks="+checks; + var url = path+"/user/export?userName="+$("#user_name").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val(); window.location.href = url; } } diff --git a/power-admin/src/main/webapp/static/js/user1.js b/power-admin/src/main/webapp/static/js/user1.js index 20667aa..6c09c14 100644 --- a/power-admin/src/main/webapp/static/js/user1.js +++ b/power-admin/src/main/webapp/static/js/user1.js @@ -523,7 +523,7 @@ function exportExcel(){ var checks = $("#checks").val(); if(checks != '') { checks = checks.substring(0, checks.length - 1); - var url = path+"/user/export1?userName="+$("#user_name").val()+"&userEmail="+$("#user_email").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val()+"&checks="+checks; + var url = path+"/user/export1?checks="+checks; window.location.href = url; }else{ Common.confirm({ @@ -531,7 +531,7 @@ function exportExcel(){ message: "没有选中,您确定要按搜索栏条件导出?", operate: function (reselt) { if (reselt) { - var url = path+"/user/export?userName="+$("#user_name").val()+"&userEmail="+$("#user_email").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val()+"&checks="+checks; + var url = path+"/user/export?userName="+$("#user_name").val()+"&searchRoleId="+$("#roleId").val()+"&deptId="+$("#dept_id").val()+"&effective="+$("#effective").val(); window.location.href = url; } } diff --git a/power-foundaton/src/main/java/com/manage/util/ActionScopeUtils.java b/power-foundaton/src/main/java/com/manage/util/ActionScopeUtils.java index 087c8ce..03a6917 100644 --- a/power-foundaton/src/main/java/com/manage/util/ActionScopeUtils.java +++ b/power-foundaton/src/main/java/com/manage/util/ActionScopeUtils.java @@ -31,13 +31,4 @@ public class ActionScopeUtils { public static Object getSessionAttribute(String key){ return getSession(getRequest()).getAttribute(key); } - - public static void setRequestAttribute(String key,Object value){ - getRequest().setAttribute(key,value); - } - - public static Object getRequestAttribute(String key){ - return getRequest().getAttribute(key); - } - } diff --git a/power-foundaton/src/main/java/com/manage/util/BeanMapperUtils.java b/power-foundaton/src/main/java/com/manage/util/BeanMapperUtils.java deleted file mode 100644 index 8801156..0000000 --- a/power-foundaton/src/main/java/com/manage/util/BeanMapperUtils.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.manage.util; - -import java.io.*; - -/** - * @ProjectName: - * @Description: - * @Param 传输参数 - * @Return - * @Author: 曾文和 - * @CreateDate: 2019/11/6 10:03 - * @UpdateUser: 曾文和 - * @UpdateDate: 2019/11/6 10:03 - * @UpdateRemark: 更新说明 - * @Version: 1.0 - */ -public class BeanMapperUtils { - /** - * 使用序列化技术实现深拷贝 - * @return - */ - public static Object deepClone(Object object) throws IOException,ClassNotFoundException{ - //将对象写入流中 - ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); - objectOutputStream.writeObject(object); - //从流中取出 - ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); - ObjectInputStream objectInputStream = new ObjectInputStream(inputStream); - return objectInputStream.readObject(); - - } -} diff --git a/power-foundaton/src/main/java/com/manage/util/Constant.java b/power-foundaton/src/main/java/com/manage/util/Constant.java index b608c76..f72a488 100644 --- a/power-foundaton/src/main/java/com/manage/util/Constant.java +++ b/power-foundaton/src/main/java/com/manage/util/Constant.java @@ -11,8 +11,6 @@ public class Constant { public static final Integer EFFECTIVE_NO = 0; // 未登录拦截 public static final String RELEASE_REQUEST = "releaseRequest"; - // ajax拦截 - public static final String AJAX_REQUEST = "ajaxRequest"; public static final String CURRENT_USER = "CURRENT_USER"; } diff --git a/power-foundaton/src/main/java/com/manage/util/JsonModel.java b/power-foundaton/src/main/java/com/manage/util/JsonModel.java deleted file mode 100644 index f99e408..0000000 --- a/power-foundaton/src/main/java/com/manage/util/JsonModel.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.manage.util; - -import java.util.List; -/** - *

Title:JsonModel

- *

Description:

- *

Company:

- * @author hu - * @date - */ -public class JsonModel { - private String id; - private String text; - private String icon; - private StateForJsonModel state; - private List children; - private Object li_attr; - private Object a_attr; - - - public String getId() { - return id; - } - - - public void setId(String id) { - this.id = id; - } - - - public String getText() { - return text; - } - - - public void setText(String text) { - this.text = text; - } - - - public String getIcon() { - return icon; - } - - - public void setIcon(String icon) { - this.icon = icon; - } - - - public StateForJsonModel getState() { - return state; - } - - - public void setState(StateForJsonModel state) { - this.state = state; - } - - - public List getChildren() { - return children; - } - - - public void setChildren(List children) { - this.children = children; - } - - - public Object getLi_attr() { - return li_attr; - } - - - public void setLi_attr(Object li_attr) { - this.li_attr = li_attr; - } - - - public Object getA_attr() { - return a_attr; - } - - - public void setA_attr(Object a_attr) { - this.a_attr = a_attr; - } - - -} diff --git a/power-foundaton/src/main/java/com/manage/util/SigarUtils.java b/power-foundaton/src/main/java/com/manage/util/SigarUtils.java index 2c5766c..166e0e7 100644 --- a/power-foundaton/src/main/java/com/manage/util/SigarUtils.java +++ b/power-foundaton/src/main/java/com/manage/util/SigarUtils.java @@ -51,6 +51,6 @@ public class SigarUtils{ String OS = System.getProperty("os.name").toLowerCase(); if (OS.indexOf("win") >= 0) { return true; - } else return false; + } else {return false;} } } diff --git a/power-foundaton/src/main/java/com/manage/util/StateForJsonModel.java b/power-foundaton/src/main/java/com/manage/util/StateForJsonModel.java deleted file mode 100644 index 2228962..0000000 --- a/power-foundaton/src/main/java/com/manage/util/StateForJsonModel.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.manage.util; - -/** - *

Title:StateForJsonModel

- *

Description:

- *

Company:

- * @author hu - * @date - */ -public class StateForJsonModel { - private boolean opened; - private boolean disabled; - private boolean selected; - - - public boolean isOpened() { - return opened; - } - - - public void setOpened(boolean opened) { - this.opened = opened; - } - - - public boolean isDisabled() { - return disabled; - } - - - public void setDisabled(boolean disabled) { - this.disabled = disabled; - } - - - public boolean isSelected() { - return selected; - } - - - public void setSelected(boolean selected) { - this.selected = selected; - } - -} diff --git a/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelJudgeMethod.java b/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelJudgeMethod.java index 4eba7f4..be9236e 100644 --- a/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelJudgeMethod.java +++ b/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelJudgeMethod.java @@ -50,7 +50,7 @@ public class ImportExcelJudgeMethod { @Autowired private Power_Sys_DictMapper sysDictMapper; //公共批量插入方法 - private static final String SIMPLEINSERT = "SimpleInsert"; + private final String SIMPLEINSERT = "SimpleInsert"; /****************************************导入公共判断******************************************************/ /** diff --git a/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelUtil.java b/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelUtil.java index a3f66a1..4bccb53 100644 --- a/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelUtil.java +++ b/power-service/src/main/java/com/manage/service/ImportExcel/ImportExcelUtil.java @@ -299,11 +299,6 @@ public class ImportExcelUtil { return workbook; } - //移除缓存的工作簿 - public static void removeWorkBookMapByKey(String workBookKey){ - workBookMap.remove(workBookKey); - } - public static void copy(Object source, Object dest) throws Exception { Class destClz = dest.getClass(); diff --git a/power-service/src/main/java/com/manage/service/cache/CacheManager.java b/power-service/src/main/java/com/manage/service/cache/CacheManager.java index 883ea40..106baf6 100644 --- a/power-service/src/main/java/com/manage/service/cache/CacheManager.java +++ b/power-service/src/main/java/com/manage/service/cache/CacheManager.java @@ -9,17 +9,17 @@ import java.util.Map; public class CacheManager { private static HashMap cacheMap = new HashMap(); - private static HashMap cacheExceptionMap = new HashMap(); - private static HashMap> loginUserCacheMap = new HashMap(); - //无异常数量 + //private static HashMap cacheExceptionMap = new HashMap(); + //private static HashMap> loginUserCacheMap = new HashMap(); + /*//无异常数量 private static Integer noExcCount = 0; //异常数量 - private static Integer excCount = 0; + private static Integer excCount = 0;*/ //添加用户登录缓存 - public synchronized static void addloginUserCount(String date,String userName){ + public static void addloginUserCount(String date,String userName){ //取出当天数据 - HashMap map = loginUserCacheMap.get(date); + /*HashMap map = loginUserCacheMap.get(date); if(null == map){ map = new HashMap<>(); //首次登录 @@ -36,81 +36,52 @@ public class CacheManager { map.put(userName,count); } //重置 - loginUserCacheMap.put(date,map); + loginUserCacheMap.put(date,map);*/ } //获取当天用户集合 public static HashMap getCurrentDayCount(String date){ //取出当天数据 - HashMap map = loginUserCacheMap.get(date); - return map; + /* HashMap map = loginUserCacheMap.get(date); + return map;*/ + return null; } //添加异常数量 public synchronized static void addExcCount(String type){ if("noExc".equals(type)){ - noExcCount++; - cacheExceptionMap.put(type,noExcCount); + /*noExcCount++; + cacheExceptionMap.put(type,noExcCount);*/ } if("exc".equals(type)){ - excCount++; - cacheExceptionMap.put(type,excCount); + /*excCount++; + cacheExceptionMap.put(type,excCount);*/ } } //取异常数量 - public synchronized static Integer getExcCount(String type){ - return (Integer)cacheExceptionMap.get(type); + public static Integer getExcCount(String type){ + return 0; + //return (Integer)cacheExceptionMap.get(type); } private CacheManager() { super(); } - public static boolean getSimpleFlag(String key){ - try{ - return (Boolean) cacheMap.get(key); - }catch(NullPointerException e){ - return false; - } - } - public static long getServerStartdt(String key){ - try { - return (Long)cacheMap.get(key); - } catch (Exception ex) { - return 0; - } - } - public synchronized static boolean setSimpleFlag(String key,boolean flag){ - if (flag && getSimpleFlag(key)) { - return false; - }else{ - cacheMap.put(key, flag); - return true; - } - } - public synchronized static boolean setSimpleFlag(String key,long serverbegrundt){ - if (cacheMap.get(key) == null) { - cacheMap.put(key,serverbegrundt); - return true; - }else{ - return false; - } - } - - private synchronized static Cache getCache(String key) { + private static Cache getCache(String key) { return (Cache) cacheMap.get(key); } - private synchronized static boolean hasCache(String key) { + private static boolean hasCache(String key) { return cacheMap.containsKey(key); } - public synchronized static void clearAll() { + public static void clearAll() { cacheMap.clear(); } - public synchronized static void clearAll(String type) { + public static void clearAll(String type) { Iterator i = cacheMap.entrySet().iterator(); String key; ArrayList arr = new ArrayList(); @@ -130,41 +101,24 @@ public class CacheManager { } } - public synchronized static void clearOnly(String key) { + public static void clearOnly(String key) { cacheMap.remove(key); } - public synchronized static void putCache(String key, Cache obj) { + public static void putCache(String key, Cache obj) { cacheMap.put(key, obj); } public static Cache getCacheInfo(String key) { - if (hasCache(key)) { Cache cache = getCache(key); if (cacheExpired(cache)) { cache.setExpired(true); } return cache; - }else + }else { return null; - } - - public static void putCacheInfo(String key, Cache obj, long dt, boolean expired) { - Cache cache = new Cache(); - cache.setKey(key); - cache.setTimeOut(dt + System.currentTimeMillis()); - cache.setValue(obj); - cache.setExpired(expired); - cacheMap.put(key, cache); - } - public static void putCacheInfo(String key, Cache obj, long dt){ - Cache cache = new Cache(); - cache.setKey(key); - cache.setTimeOut(dt+System.currentTimeMillis()); - cache.setValue(obj); - cache.setExpired(false); - cacheMap.put(key,cache); + } } public static boolean cacheExpired(Cache cache) { @@ -180,62 +134,8 @@ public class CacheManager { } } - public static int getCacheSize() { - return cacheMap.size(); - } - - public static int getCacheSize(String type) { - int k = 0; - Iterator i = cacheMap.entrySet().iterator(); - String key; - try { - while (i.hasNext()) { - Map.Entry entry = (Map.Entry) i.next(); - key = (String) entry.getKey(); - if (key.indexOf(type) != -1) { - k++; - } - } - } catch (Exception ex) { - ex.printStackTrace(); - } - - return k; - } - - public static ArrayList getCacheAllkey() { - ArrayList a = new ArrayList(); - try { - Iterator i = cacheMap.entrySet().iterator(); - while (i.hasNext()) { - Map.Entry entry = (Map.Entry) i.next(); - a.add((String) entry.getKey()); - } - } catch (Exception ex) {} finally { - return a; - } - } - - public static ArrayList getCacheListkey(String type) { - ArrayList a = new ArrayList(); - String key; - try { - Iterator i = cacheMap.entrySet().iterator(); - while (i.hasNext()) { - Map.Entry entry = (Map.Entry) i.next(); - key = (String) entry.getKey(); - if (key.indexOf(type) != -1) { - a.add(key); - } - } - } catch (Exception ex) {} finally { - return a; - } - } //根据用户信息删除缓存 - public synchronized static void removeCacheByObject(Power_UserVo obj) { - ArrayList a = new ArrayList(); - Object key; + public static void removeCacheByObject(Power_UserVo obj) { ArrayList arr = new ArrayList(); try { Iterator i = cacheMap.entrySet().iterator(); @@ -254,5 +154,4 @@ public class CacheManager { } } catch (Exception ex) {} } - } \ No newline at end of file diff --git a/power-service/src/main/java/com/manage/service/webSocket/WebServer.java b/power-service/src/main/java/com/manage/service/webSocket/WebServer.java index e344f6b..19450d1 100644 --- a/power-service/src/main/java/com/manage/service/webSocket/WebServer.java +++ b/power-service/src/main/java/com/manage/service/webSocket/WebServer.java @@ -4,27 +4,17 @@ import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; -import javax.websocket.Session; -import java.io.IOException; import java.net.InetSocketAddress; public class WebServer extends WebSocketServer { - private Session session; public WebServer(int port) { super(new InetSocketAddress(port)); } - public WebServer(InetSocketAddress address) { - super(address); - } - @Override public void onOpen(WebSocket conn, ClientHandshake handshake) { // ws连接的时候触发的代码,onOpen中我们不做任何操作 } - public void sendMessage(String message) throws IOException { - this.session.getBasicRemote().sendText("2"); - } @Override public void onClose(WebSocket conn, int code, String reason, boolean remote) { diff --git a/power-service/src/main/java/com/manage/service/webSocket/WsPool.java b/power-service/src/main/java/com/manage/service/webSocket/WsPool.java index 1d5222c..87b5395 100644 --- a/power-service/src/main/java/com/manage/service/webSocket/WsPool.java +++ b/power-service/src/main/java/com/manage/service/webSocket/WsPool.java @@ -8,16 +8,6 @@ import java.util.*; public class WsPool { private static final Map wsUserMap = new HashMap(); - /** - * 通过websocket连接获取其对应的用户 - * - * @param conn - * @return - */ - public static String getUserByWs(WebSocket conn) { - return wsUserMap.get(conn); - } - /** * 根据userName获取WebSocket,这是一个list,此处取第一个 * 因为有可能多个websocket对应一个userName(但一般是只有一个,因为在close方法中,我们将失效的websocket连接去除了) @@ -44,20 +34,6 @@ public class WsPool { wsUserMap.put(conn, userName); // 添加连接 } - /** - * 获取所有连接池中的用户,因为set是不允许重复的,所以可以得到无重复的user数组 - * - * @return - */ - public static Collection getOnlineUser() { - List setUsers = new ArrayList(); - Collection setUser = wsUserMap.values(); - for (String u : setUser) { - setUsers.add(u); - } - return setUsers; - } - /** * 移除连接池中的连接 *