Sfoglia il codice sorgente

Merge pull request #7 from hs-web/2.1-SNAPSHOT

2.1 snapshot
zhōuhào 8 anni fa
parent
commit
2b3fd0a10e
19 ha cambiato i file con 170 aggiunte e 89 eliminazioni
  1. 15 23
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java
  2. 3 2
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/ValidateResults.java
  3. 2 2
      hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/constraintvalidators/MessyCodeValidator.java
  4. 6 5
      hsweb-web-concurrent/hsweb-web-concurrent-cache/src/main/java/org/hsweb/concureent/cache/monitor/SimpleMonitorCache.java
  5. 1 0
      hsweb-web-controller/src/main/java/org/hsweb/web/controller/module/ModuleMetaController.java
  6. 1 4
      hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/AopAuthorizeValidator.java
  7. 10 1
      hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/annotation/Authorize.java
  8. 27 17
      hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManager.java
  9. 4 11
      hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManagerConfiguration.java
  10. 4 4
      hsweb-web-core/src/main/java/org/hsweb/web/core/session/simple/SimpleHttpSessionManagerAutoConfiguration.java
  11. 16 0
      hsweb-web-core/src/main/resources/org.hsweb.web.core.session.redis/getUserIds.lua
  12. 4 2
      hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicXaDataSourceImpl.java
  13. 15 3
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java
  14. 4 4
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java
  15. 3 1
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java
  16. 1 5
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleServiceImpl.java
  17. 13 4
      hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/resource/ResourcesServiceImpl.java
  18. 2 1
      hsweb-web-websocket/src/main/java/org/hsweb/web/socket/cmd/support/SystemMonitorProcessor.java
  19. 39 0
      pom.xml

+ 15 - 23
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/user/User.java

@@ -111,19 +111,12 @@ public class User extends GenericPo<String> {
     public boolean hasAccessRole(String rId) {
         if (getUserRoles() != null)
             return getUserRoles().stream().anyMatch(userRole -> userRole.getRoleId().equals(rId));
-//            for (UserRole userRole : getUserRoles()) {
-//                if (rId.equals(userRole.getRoleId())) return true;
-//            }
         return false;
     }
 
     public boolean hasAccessModule(String mId) {
         if (roleInfo == null) initRoleInfo();
         return roleInfo.keySet().stream().anyMatch(mdl -> mdl.getId().equals(mId));
-//        for (Module module : roleInfo.keySet()) {
-//            if (module.getId().equals(mId)) return true;
-//        }
-//        return false;
     }
 
     /**
@@ -131,22 +124,23 @@ public class User extends GenericPo<String> {
      */
     public void initRoleInfo() {
         Map<Module, Set<String>> roleInfo_tmp = new LinkedHashMap<>();
-        for (UserRole userRole : getUserRoles()) {
-            Role role = userRole.getRole();
-            if (role == null) continue;
-            //角色可访问的路径
-            List<RoleModule> roleModules = role.getModules();
-            for (RoleModule roleModule : roleModules) {
-                Module module = roleModule.getModule();
-                if (module == null || module.getStatus() != 1) continue;
-                Set<String> actions = roleInfo_tmp.get(module);
-                if (actions == null)
-                    roleInfo_tmp.put(module, new HashSet<>(roleModule.getActions()));
-                else {
-                    actions.addAll(roleModule.getActions());
+        if (getUserRoles() != null)
+            for (UserRole userRole : getUserRoles()) {
+                Role role = userRole.getRole();
+                if (role == null) continue;
+                //角色可访问的路径
+                List<RoleModule> roleModules = role.getModules();
+                for (RoleModule roleModule : roleModules) {
+                    Module module = roleModule.getModule();
+                    if (module == null || module.getStatus() != 1) continue;
+                    Set<String> actions = roleInfo_tmp.get(module);
+                    if (actions == null)
+                        roleInfo_tmp.put(module, new HashSet<>(roleModule.getActions()));
+                    else {
+                        actions.addAll(roleModule.getActions());
+                    }
                 }
             }
-        }
         //排序
         roleInfo = MapUtils.sortMapByKey(roleInfo_tmp);
     }
@@ -291,8 +285,6 @@ public class User extends GenericPo<String> {
     }
 
     public List<UserRole> getUserRoles() {
-        if (userRoles == null)
-            userRoles = new ArrayList<>();
         return userRoles;
     }
 

+ 3 - 2
hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/ValidateResults.java

@@ -11,11 +11,11 @@ import java.util.Collection;
  * Created by 浩 on 2015-10-10 0010.
  */
 public class ValidateResults extends ArrayList<ValidateResults.ValidResult> implements Serializable {
-    private static final long serialVersionUID = 8910856253780046561L;
+    private static final long    serialVersionUID = 8910856253780046561L;
     /**
      * 是否验证通过
      */
-    private boolean success = true;
+    private              boolean success          = true;
 
     @Override
     public boolean addAll(Collection<? extends ValidResult> c) {
@@ -44,6 +44,7 @@ public class ValidateResults extends ArrayList<ValidateResults.ValidResult> impl
     public class ValidResult {
         public ValidResult() {
         }
+
         /**
          * 带参数构造方法,用于初始化验证的字段和验证的结果
          *

+ 2 - 2
hsweb-web-bean/src/main/java/org/hsweb/web/bean/validator/constraintvalidators/MessyCodeValidator.java

@@ -30,8 +30,8 @@ public class MessyCodeValidator implements ConstraintValidator<NotMessyCode, Str
 
     @Override
     public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
-        if (null == s) return false;
-        return StringUtils.isMessyCode(s);
+        if (null == s) return true;
+        return !StringUtils.isMessyCode(s);
     }
 
 

+ 6 - 5
hsweb-web-concurrent/hsweb-web-concurrent-cache/src/main/java/org/hsweb/concureent/cache/monitor/SimpleMonitorCache.java

@@ -27,11 +27,11 @@ import java.util.concurrent.atomic.AtomicInteger;
 public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCache {
 
     private final AtomicInteger totalTimes = new AtomicInteger(0);
-    private final AtomicInteger hitTimes = new AtomicInteger(0);
-    private final AtomicInteger putTimes = new AtomicInteger(0);
+    private final AtomicInteger hitTimes   = new AtomicInteger(0);
+    private final AtomicInteger putTimes   = new AtomicInteger(0);
 
     public SimpleMonitorCache(String name) {
-        super(name, false);
+        super(name, true);
     }
 
     @Override
@@ -87,19 +87,20 @@ public class SimpleMonitorCache extends ConcurrentMapCache implements MonitorCac
     }
 
     protected Object buildValue(Object value) {
+        if (null == value) return null;
         return new SoftReference(value);
     }
 
     @Override
     public void put(Object key, Object value) {
-        if (key == null || value == null) return;
+        if (key == null) return;
         putTimes.addAndGet(1);
         super.put(key, buildValue(value));
     }
 
     @Override
     public ValueWrapper putIfAbsent(Object key, Object value) {
-        if (key == null || value == null) return null;
+        if (key == null) return null;
         putTimes.addAndGet(1);
         return super.putIfAbsent(key, buildValue(value));
     }

+ 1 - 0
hsweb-web-controller/src/main/java/org/hsweb/web/controller/module/ModuleMetaController.java

@@ -65,6 +65,7 @@ public class ModuleMetaController extends GenericController<ModuleMeta, String>
     public ResponseMessage userModuleMeta(@PathVariable String key) {
         User user = WebUtil.getLoginUser();
         List<UserRole> roles = user.getUserRoles();
+        if (roles == null) roles = new ArrayList<>();
         String[] roleIdList = roles
                 .stream()
                 .map(userRole -> userRole.getRoleId())

+ 1 - 4
hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/AopAuthorizeValidator.java

@@ -24,9 +24,6 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-/**
- * Created by zhouhao on 16-4-28.
- */
 public class AopAuthorizeValidator extends SimpleAuthorizeValidator {
 
     private HttpSessionManager httpSessionManager;
@@ -57,7 +54,7 @@ public class AopAuthorizeValidator extends SimpleAuthorizeValidator {
                 return null;
             }
             Set<Authorize> authorizes = new LinkedHashSet<>();
-            if (classAuth != null) {
+            if (classAuth != null && (methodAuth == null || methodAuth.merge())) {
                 if (classAuth.anonymous()) return null;
                 authorizes.add(classAuth);
             }

+ 10 - 1
hsweb-web-core/src/main/java/org/hsweb/web/core/authorize/annotation/Authorize.java

@@ -56,9 +56,18 @@ public @interface Authorize {
 
     /**
      * 可匿名访问
-     * @return 是否可匿名访问,匿名访问将不用登录
+     *
+     * @return 是否可匿名访问, 匿名访问将不用登录
      */
     boolean anonymous() default false;
+
+    /**
+     * 是否合并类上的注解
+     *
+     * @return 是否合并类上的注解
+     */
+    boolean merge() default true;
+
     /**
      * 验证模式,在使用多个验证条件时有效
      *

+ 27 - 17
hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManager.java

@@ -2,6 +2,8 @@ package org.hsweb.web.core.session.redis;
 
 import org.hsweb.web.bean.po.user.User;
 import org.hsweb.web.core.session.AbstractHttpSessionManager;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.redis.connection.RedisConnection;
 import org.springframework.data.redis.core.RedisCallback;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.session.ExpiringSession;
@@ -12,6 +14,7 @@ import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionContext;
 import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -46,12 +49,7 @@ public class RedisHttpSessionManager extends AbstractHttpSessionManager {
 
     @Override
     public String getSessionIdByUserId(String userId) {
-        return (String) sessionRedisTemplate.execute((RedisCallback<String>) connection -> {
-            String key = "http.session.user:" + userId;
-            byte[] sessionId = connection.get(key.getBytes());
-            if (sessionId == null) return null;
-            return new String(sessionId);
-        });
+        return (String) sessionRedisTemplate.opsForValue().get("http.session.user:" + userId);
     }
 
     @Override
@@ -74,6 +72,7 @@ public class RedisHttpSessionManager extends AbstractHttpSessionManager {
 
     @Override
     public void removeSession(String sessionId) {
+        if (null == sessionId) return;
         sessionRedisTemplate.delete("spring:session:sessions:".concat(sessionId));
     }
 
@@ -82,24 +81,34 @@ public class RedisHttpSessionManager extends AbstractHttpSessionManager {
         removeUser(user.getId());
         String key = "http.session.user:" + user.getId();
         String value = session.getId();
+        session.setAttribute("user", user);
         sessionRedisTemplate.opsForValue().set(key, value);
         onUserLogin(user, session);
     }
 
+
     @Override
     public Set<String> getUserIdList() {
-        return (Set<String>) sessionRedisTemplate.execute((RedisCallback<Set<String>>) connection -> {
-            Set<byte[]> keys = connection.keys("http.session.user:*".getBytes());
-            return keys.stream().map(key -> {
-                String sessionId = "spring:session:sessions:" + new String(connection.get(key));
-                String userId = new String(key).split("[:]")[1];
-                if (!connection.exists(sessionId.getBytes())) {
-                    removeUser(userId);
-                    return null;
+        Set<String> keys = sessionRedisTemplate.keys("http.session.user:*");
+        if (keys == null || keys.isEmpty()) {
+            return new HashSet<>();
+        }
+        return keys.stream().map(key -> {
+            String sessionId = (String) sessionRedisTemplate.opsForValue().get(key);
+            String sessionIdKey = "spring:session:sessions:".concat(sessionId);
+            String userId = new String(key).split("[:]")[1];
+            boolean sessionExists = (Boolean) sessionRedisTemplate.execute(new RedisCallback<Boolean>() {
+                @Override
+                public Boolean doInRedis(RedisConnection connection) throws DataAccessException {
+                    return connection.exists(sessionIdKey.getBytes());
                 }
-                return userId;
-            }).filter(key -> key != null).collect(Collectors.toSet());
-        });
+            });
+            if (!sessionExists) {
+                sessionRedisTemplate.delete(key);
+                return null;
+            }
+            return userId;
+        }).filter(key -> key != null).collect(Collectors.toSet());
     }
 
     @Override
@@ -126,6 +135,7 @@ public class RedisHttpSessionManager extends AbstractHttpSessionManager {
         );
     }
 
+
     public void setRedisOperationsSessionRepository(RedisOperationsSessionRepository redisOperationsSessionRepository) {
         this.redisOperationsSessionRepository = redisOperationsSessionRepository;
     }

+ 4 - 11
hsweb-web-core/src/main/java/org/hsweb/web/core/session/redis/RedisHttpSessionManagerConfiguration.java

@@ -4,6 +4,7 @@ import org.hsweb.web.core.session.HttpSessionManager;
 import org.hsweb.web.core.session.HttpSessionManagerListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.Ordered;
@@ -14,25 +15,17 @@ import org.springframework.session.data.redis.RedisOperationsSessionRepository;
 import javax.annotation.Resource;
 import java.util.List;
 
-/**
- * Created by zhouhao on 16-5-27.
- */
 @Configuration
 @ConditionalOnBean(value = RedisOperationsSessionRepository.class, name = "sessionRedisTemplate")
-@Order(Ordered.HIGHEST_PRECEDENCE)
+@ConditionalOnWebApplication
 public class RedisHttpSessionManagerConfiguration {
-    @Autowired(required = false)
-    private List<HttpSessionManagerListener> httpSessionManagerListeners;
 
     @Resource(name = "sessionRedisTemplate")
     private RedisTemplate sessionRedisTemplate;
 
-    @Bean
-    public HttpSessionManager sessionListener(RedisOperationsSessionRepository repository) {
+    @Bean(name = "httpSessionManager")
+    public HttpSessionManager redisHttpSessionManager(RedisOperationsSessionRepository repository) {
         RedisHttpSessionManager redisHttpSessionManager = new RedisHttpSessionManager();
-        if (httpSessionManagerListeners != null) {
-            redisHttpSessionManager.setListeners(httpSessionManagerListeners);
-        }
         redisHttpSessionManager.setSessionRedisTemplate(sessionRedisTemplate);
         redisHttpSessionManager.setRedisOperationsSessionRepository(repository);
         return redisHttpSessionManager;

+ 4 - 4
hsweb-web-core/src/main/java/org/hsweb/web/core/session/simple/SimpleHttpSessionManagerAutoConfiguration.java

@@ -11,16 +11,16 @@ import org.springframework.context.annotation.Configuration;
 @ConditionalOnWebApplication
 public class SimpleHttpSessionManagerAutoConfiguration {
 
-    @Bean
-    public HttpSessionManager simpleHttpSessionManager() {
+    @Bean(name = "httpSessionManager")
+    public HttpSessionManager httpSessionManager() {
         SimpleHttpSessionManager httpSessionManager = new SimpleHttpSessionManager();
         return httpSessionManager;
     }
 
     @Bean
-    public UserLoginOutListener sessionListener() {
+    public UserLoginOutListener sessionListener(HttpSessionManager httpSessionManager) {
         UserLoginOutListener loginOutListener = new UserLoginOutListener();
-        loginOutListener.setHttpSessionManager(simpleHttpSessionManager());
+        loginOutListener.setHttpSessionManager(httpSessionManager);
         return loginOutListener;
     }
 }

+ 16 - 0
hsweb-web-core/src/main/resources/org.hsweb.web.core.session.redis/getUserIds.lua

@@ -0,0 +1,16 @@
+local ids = redis.call('KEYS', 'http.session.user:*');
+local ids_ = {};
+for i, v in ipairs(ids) do
+
+    local userId = v:sub(19,-1);
+    local sessoinId = redis.call('GET', v);
+    local sessionExists = redis.call('EXISTS', 'spring:session:sessions:' .. sessoinId);
+    if (sessionExists== 1)
+    then
+        table.insert(ids_, userId);
+    else
+        return sessoinId;
+--        redis.call("DEL", 'http.session.user:' .. userId);
+    end
+end
+return ids_;

+ 4 - 2
hsweb-web-datasource/src/main/java/org/hsweb/web/datasource/dynamic/DynamicXaDataSourceImpl.java

@@ -60,8 +60,10 @@ public class DynamicXaDataSourceImpl extends AbstractDataSource implements Dynam
         logger.info("use datasource:{}", sourceId == null ? "default" : sourceId);
         if (sourceId == null || dynamicDataSourceService == null) return defaultDataSource;
         DataSource dataSource = dynamicDataSourceService.getDataSource(sourceId);
-        logger.info("use datasource:{} fail,because its not exists! use default datasource now.", sourceId);
-        if (dataSource == null) return defaultDataSource;
+        if (dataSource == null) {
+            logger.info("use datasource:{} fail,because its not exists! use default datasource now.", sourceId);
+            return defaultDataSource;
+        }
         return dataSource;
     }
 

+ 15 - 3
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/FormDeployContextLoaderListener.java

@@ -1,8 +1,12 @@
 package org.hsweb.web.service.impl;
 
+import org.hsweb.ezorm.meta.TableMetaData;
 import org.hsweb.web.bean.common.QueryParam;
+import org.hsweb.web.bean.po.form.Form;
 import org.hsweb.web.service.form.DynamicFormService;
 import org.hsweb.web.service.form.FormService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
 import org.springframework.context.ApplicationContextInitializer;
 import org.springframework.context.ApplicationEvent;
@@ -16,10 +20,12 @@ import javax.annotation.Resource;
 @Component
 public class FormDeployContextLoaderListener implements ApplicationListener<ContextRefreshedEvent> {
     @Resource
-    private FormService formService;
+    private FormService        formService;
     @Resource
     private DynamicFormService dynamicFormService;
 
+    private Logger logger = LoggerFactory.getLogger(this.getClass());
+
     @Override
     public void onApplicationEvent(ContextRefreshedEvent event) {
         if (event.getApplicationContext().getParent() != null) return;
@@ -28,9 +34,15 @@ public class FormDeployContextLoaderListener implements ApplicationListener<Cont
         try {
             formService.select(param).forEach(form -> {
                 try {
-                    dynamicFormService.deploy(form);
+                    Form deployed = formService.selectDeployed(form.getName());
+                    if (null != deployed) {
+                        TableMetaData metaData = dynamicFormService.parseMeta(deployed);
+                        dynamicFormService.getDefaultDatabase().reloadTable(metaData);
+                    } else {
+                        dynamicFormService.deploy(form);
+                    }
                 } catch (Exception e) {
-                    throw new RuntimeException(e);
+                    logger.error("部署{}:({})失败", form.getName(), form.getRemark(), e);
                 }
             });
         } catch (Exception e) {

+ 4 - 4
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/config/ConfigServiceImpl.java

@@ -22,7 +22,7 @@ import java.util.Map;
  * Created by generator
  */
 @Service("configService")
-public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> implements ConfigService,ExpressionScopeBean {
+public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> implements ConfigService, ExpressionScopeBean {
 
     public static final String CACHE_KEY = "config";
 
@@ -38,7 +38,7 @@ public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> imple
     @Override
     @CacheEvict(value = CACHE_KEY, allEntries = true)
     public int update(Config data) {
-        return configMapper.update(new UpdateParam<>(data).excludes("createDate").where("id",data.getId()));
+        return configMapper.update(new UpdateParam<>(data).excludes("createDate").where("id", data.getId()));
     }
 
     @Override
@@ -108,7 +108,7 @@ public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> imple
         try {
             val = this.get(name, key);
             if (val == null) {
-                logger.error("获取配置:{}.{}失败,defaultValue:{}", name, key, defaultValue);
+                logger.warn("获取配置:{}.{}失败,defaultValue:{}", name, key, defaultValue);
                 return defaultValue;
             }
         } catch (Exception e) {
@@ -161,7 +161,6 @@ public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> imple
     @Override
     @Cacheable(value = CACHE_KEY, key = "'info.'+#name+'.key.'+#key+'.double'")
     public double getDouble(String name, String key, double defaultValue) {
-
         return StringUtils.toDouble(get(name, key, String.valueOf(defaultValue)));
     }
 
@@ -176,6 +175,7 @@ public class ConfigServiceImpl extends AbstractServiceImpl<Config, String> imple
 
 
     @Override
+    @CacheEvict(value = CACHE_KEY, allEntries = true)
     public String insert(Config data) {
         Config old = this.selectByPk(data.getId());
         Assert.isNull(old, "配置已存在,请勿重复添加!");

+ 3 - 1
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/DynamicFormServiceImpl.java

@@ -98,7 +98,9 @@ public class DynamicFormServiceImpl implements DynamicFormService, ExpressionSco
 
     @Override
     public TableMetaData parseMeta(Form form) {
-        return formParser.parse(form);
+        TableMetaData metaData = formParser.parse(form);
+        initDefaultField(metaData);
+        return metaData;
     }
 
     @Override

+ 1 - 5
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleServiceImpl.java

@@ -10,10 +10,6 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.util.List;
 
-/**
- * 系统模块服务类
- * Created by generator
- */
 @Service("moduleService")
 public class ModuleServiceImpl extends AbstractServiceImpl<Module, String> implements ModuleService {
 
@@ -28,6 +24,6 @@ public class ModuleServiceImpl extends AbstractServiceImpl<Module, String> imple
 
     @Override
     public List<Module> selectByPid(String pid) throws Exception {
-        return this.select(new QueryParam().where("p_id", pid));
+        return this.select(new QueryParam().where("parentId", pid));
     }
 }

+ 13 - 4
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/resource/ResourcesServiceImpl.java

@@ -7,11 +7,15 @@ import org.hsweb.web.dao.resource.ResourcesMapper;
 import org.hsweb.web.service.config.ConfigService;
 import org.hsweb.web.service.impl.AbstractServiceImpl;
 import org.hsweb.web.service.resource.ResourcesService;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.CachePut;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import javax.naming.OperationNotSupportedException;
 
 /**
  * 资源服务类
@@ -32,6 +36,7 @@ public class ResourcesServiceImpl extends AbstractServiceImpl<Resources, String>
         return this.resourcesMapper;
     }
 
+
     @Override
     @Cacheable(value = CACHE_KEY, key = "'id.'+#id")
     @Transactional(readOnly = true)
@@ -48,24 +53,28 @@ public class ResourcesServiceImpl extends AbstractServiceImpl<Resources, String>
      */
     @Cacheable(value = CACHE_KEY, key = "'md5.'+#md5")
     @Transactional(readOnly = true)
-    public Resources selectByMd5(String md5)  {
+    public Resources selectByMd5(String md5) {
         return this.selectSingle(new QueryParam().where("md5", md5));
     }
 
     @Override
     @Transactional(rollbackFor = Throwable.class)
+    @Caching(evict = {
+            @CacheEvict(value = CACHE_KEY, key = "'id.'+#data.id"),
+            @CacheEvict(value = CACHE_KEY, key = "'md5.'+#data.md5")
+    })
     public String insert(Resources data) {
-        data.setId(this.newid(6));//6位随机id
+        data.setId(this.newId(6));//6位随机id
         return super.insert(data);
     }
 
-    public String newid(int len) {
+    public String newId(int len) {
         String id = RandomUtil.randomChar(len);
         for (int i = 0; i < 10; i++) {
             if (this.selectByPk(id) == null) {
                 return id;
             }
         }  //如果10次存在重复则位数+1
-        return newid(len + 1);
+        return newId(len + 1);
     }
 }

+ 2 - 1
hsweb-web-websocket/src/main/java/org/hsweb/web/socket/cmd/support/SystemMonitorProcessor.java

@@ -45,7 +45,6 @@ public class SystemMonitorProcessor extends AbstractCmdProcessor {
             Publish publish = new Publish();
             publish.setUserId(userId);
             publish.setCallback((String) cmd.getParams().get("callback"));
-            cpuPublish.put(userId, publish);
             return publish;
         };
 
@@ -55,6 +54,7 @@ public class SystemMonitorProcessor extends AbstractCmdProcessor {
                 if (publish == null)
                     publish = supplier.get();
                 publish.addSession(cmd.getSession());
+                cpuPublish.put(userId, publish);
                 if (!cpuMonitorIsStarted) {
                     startPublishCpu();
                     cpuMonitorIsStarted = true;
@@ -66,6 +66,7 @@ public class SystemMonitorProcessor extends AbstractCmdProcessor {
                 if (publish == null)
                     publish = supplier.get();
                 publish.addSession(cmd.getSession());
+                memPublish.put(userId, publish);
                 if (!memMonitorIsStarted) {
                     startPublishMem();
                     memMonitorIsStarted = true;

+ 39 - 0
pom.xml

@@ -7,6 +7,37 @@
     <artifactId>hsweb-framework</artifactId>
     <packaging>pom</packaging>
     <version>2.1-SNAPSHOT</version>
+
+    <name>${project.groupId}:${project.artifactId}</name>
+    <url>http://www.hsweb.me</url>
+    <description>企业后台管理基础框架</description>
+
+    <licenses>
+        <license>
+            <name>The Apache License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+        </license>
+    </licenses>
+
+    <developers>
+        <developer>
+            <name>zhouhao</name>
+            <email>i@hsweb.me</email>
+            <roles>
+                <role>Owner</role>
+            </roles>
+            <timezone>+8</timezone>
+            <url>https://github.com/zhou-hao</url>
+        </developer>
+    </developers>
+
+    <scm>
+        <connection>scm:git:https://github.com/hs-web/hsweb-framework.git</connection>
+        <developerConnection>scm:git:https://github.com/hs-web/hsweb-framework.git</developerConnection>
+        <url>https://github.com/hs-web/hsweb-framework</url>
+        <tag>${project.version}</tag>
+    </scm>
+
     <modules>
         <module>hsweb-web-dao</module>
         <module>hsweb-web-service</module>
@@ -46,6 +77,14 @@
 
     <build>
         <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-scm-plugin</artifactId>
+                <version>1.8.1</version>
+                <configuration>
+                    <connectionType>connection</connectionType>
+                </configuration>
+            </plugin>
             <!-- 要将源码放上去,需要加入这个插件 -->
             <plugin>
                 <artifactId>maven-source-plugin</artifactId>