瀏覽代碼

优化动态表单,增加缓存,前端自行解析

zhouhao 8 年之前
父節點
當前提交
4e502d60d9

+ 11 - 0
hsweb-web-bean/src/main/java/org/hsweb/web/bean/po/module/ModuleMeta.java

@@ -1,6 +1,7 @@
 package org.hsweb.web.bean.po.module;
 
 import org.hibernate.validator.constraints.NotBlank;
+import org.hsweb.commons.MD5;
 import org.hsweb.web.bean.po.GenericPo;
 
 /**
@@ -70,4 +71,14 @@ public class ModuleMeta extends GenericPo<String> {
     public void setMeta(String meta) {
         this.meta = meta;
     }
+
+    public String getMd5() {
+        StringBuilder builder = new StringBuilder();
+        builder.append(key);
+        builder.append(moduleId);
+        builder.append(roleId);
+        builder.append(meta);
+        builder.append(status);
+        return MD5.defaultEncode(builder.toString());
+    }
 }

+ 9 - 7
hsweb-web-controller/src/main/java/org/hsweb/web/controller/GenericController.java

@@ -33,6 +33,8 @@ import org.springframework.web.bind.annotation.*;
 
 import java.util.Arrays;
 
+import static org.hsweb.web.core.message.ResponseMessage.*;
+
 /**
  * 通用控制器,此控制器实现了通用的增删改查功能
  * 需要提供一个实现了{@link GenericService}接口的实现类
@@ -83,7 +85,7 @@ public abstract class GenericController<PO, PK> {
             data = getService().select(param);
         else
             data = getService().selectPager(param);
-        return ResponseMessage.ok(data)
+        return ok(data)
                 .include(getPOType(), param.getIncludes())
                 .exclude(getPOType(), param.getExcludes())
                 .onlyData();
@@ -103,7 +105,7 @@ public abstract class GenericController<PO, PK> {
         PO po = getService().selectByPk(id);
         if (po == null)
             throw new NotFoundException("data is not found!");
-        return ResponseMessage.ok(po);
+        return ok(po);
     }
 
 
@@ -118,7 +120,7 @@ public abstract class GenericController<PO, PK> {
     @Authorize(action = "R")
     public ResponseMessage total(QueryParam param) {
         // 获取条件查询
-        return ResponseMessage.ok(getService().total(param));
+        return ok(getService().total(param));
     }
 
     /**
@@ -134,7 +136,7 @@ public abstract class GenericController<PO, PK> {
     @ResponseStatus(HttpStatus.CREATED)
     public ResponseMessage add(@RequestBody PO object) {
         PK pk = getService().insert(object);
-        return ResponseMessage.created(pk);
+        return created(pk);
     }
 
     /**
@@ -151,7 +153,7 @@ public abstract class GenericController<PO, PK> {
         PO old = getService().selectByPk(id);
         assertFound(old, "data is not found!");
         getService().delete(id);
-        return ResponseMessage.ok();
+        return ok();
     }
 
     /**
@@ -172,7 +174,7 @@ public abstract class GenericController<PO, PK> {
             ((GenericPo) object).setId(id);
         }
         int number = getService().update(object);
-        return ResponseMessage.ok(number);
+        return ok(number);
     }
 
     /**
@@ -194,7 +196,7 @@ public abstract class GenericController<PO, PK> {
         } else {
             throw new BusinessException("请求数据格式错误!");
         }
-        return ResponseMessage.ok(number);
+        return ok(number);
     }
 
     /**

+ 19 - 11
hsweb-web-controller/src/main/java/org/hsweb/web/controller/form/FormController.java

@@ -33,6 +33,9 @@ import javax.annotation.Resource;
 import java.sql.SQLException;
 import java.util.List;
 
+import static org.hsweb.web.core.message.ResponseMessage.*;
+import static org.hsweb.web.core.message.ResponseMessage.ok;
+
 /**
  * 动态表单控制器,用于管理动态表单
  *
@@ -65,7 +68,7 @@ public class FormController extends GenericController<Form, String> {
     public ResponseMessage latestList(QueryParam param) {
         ResponseMessage message;
         if (!param.isPaging()) {
-            message = ResponseMessage.ok(formService.selectLatestList(param));
+            message = ok(formService.selectLatestList(param));
         } else {
             param.setPaging(false);
             int total = formService.countLatestList(param);
@@ -73,7 +76,7 @@ public class FormController extends GenericController<Form, String> {
             List<Form> list = formService.selectLatestList(param);
             PagerResult<Form> result = new PagerResult<>();
             result.setData(list).setTotal(total);
-            message = ResponseMessage.ok(result);
+            message = ok(result);
         }
         message.include(Form.class, param.getIncludes())
                 .exclude(Form.class, param.getExcludes())
@@ -92,7 +95,7 @@ public class FormController extends GenericController<Form, String> {
     public ResponseMessage latest(@PathVariable(value = "name") String name) {
         Form form = formService.selectLatest(name);
         assertFound(form, "表单不存在");
-        return ResponseMessage.ok(form);
+        return ok(form);
     }
 
     /**
@@ -104,11 +107,16 @@ public class FormController extends GenericController<Form, String> {
      * @throws NotFoundException 表单不存在
      */
     @RequestMapping(value = "/{name}/{version}", method = RequestMethod.GET)
-    public ResponseMessage version(@PathVariable(value = "name") String name,
+    public ResponseMessage selectByVersion(@PathVariable(value = "name") String name,
                                    @PathVariable(value = "version") Integer version) {
         Form form = formService.selectByVersion(name, version);
         assertFound(form, "表单不存在");
-        return ResponseMessage.ok(form);
+        return ok(form);
+    }
+
+    @RequestMapping(value = "/{name}/version", method = RequestMethod.GET)
+    public ResponseMessage selectVersion(@PathVariable(value = "name") String name) {
+        return ok(formService.selectDeployedVersion(name));
     }
 
     /**
@@ -123,7 +131,7 @@ public class FormController extends GenericController<Form, String> {
     @Authorize(action = "deploy")
     public ResponseMessage deploy(@PathVariable("id") String id) throws SQLException {
         formService.deploy(id);
-        return ResponseMessage.ok();
+        return ok();
     }
 
     /**
@@ -137,7 +145,7 @@ public class FormController extends GenericController<Form, String> {
     @Authorize(action = "deploy")
     public ResponseMessage unDeploy(@PathVariable("id") String id) {
         formService.unDeploy(id);
-        return ResponseMessage.ok();
+        return ok();
     }
 
     /**
@@ -149,7 +157,7 @@ public class FormController extends GenericController<Form, String> {
      */
     @RequestMapping(value = "/{name}/html", method = RequestMethod.GET)
     public ResponseMessage html(@PathVariable("name") String name) {
-        return ResponseMessage.ok(formService.createDeployHtml(name));
+        return ok(formService.createDeployHtml(name));
     }
 
     /**
@@ -162,7 +170,7 @@ public class FormController extends GenericController<Form, String> {
     @RequestMapping(value = "/{id}/new-version", method = RequestMethod.POST)
     @ResponseStatus(HttpStatus.CREATED)
     public ResponseMessage newVersion(@PathVariable("id") String id) {
-        return ResponseMessage.created(formService.createNewVersion(id));
+        return created(formService.createNewVersion(id));
     }
 
     /**
@@ -175,7 +183,7 @@ public class FormController extends GenericController<Form, String> {
     public ResponseMessage using(@PathVariable("name") String name) {
         Form form = formService.selectUsing(name);
         assertFound(form, "表单不存在");
-        return ResponseMessage.ok(form).exclude(Form.class, "html");
+        return ok(form).exclude(Form.class, "html");
     }
 
     /**
@@ -187,6 +195,6 @@ public class FormController extends GenericController<Form, String> {
      */
     @RequestMapping(value = "/{id}/view", method = RequestMethod.GET)
     public ResponseMessage view(@PathVariable("id") String id) throws Exception {
-        return ResponseMessage.ok(formService.createViewHtml(id));
+        return ok(formService.createViewHtml(id));
     }
 }

+ 21 - 12
hsweb-web-controller/src/main/java/org/hsweb/web/controller/module/ModuleMetaController.java

@@ -31,10 +31,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
-import java.util.Optional;
-import java.util.stream.Collector;
 import java.util.stream.Collectors;
 
 /**
@@ -55,21 +52,33 @@ public class ModuleMetaController extends GenericController<ModuleMeta, String>
         return moduleMetaService;
     }
 
+    protected List<String> getRoleId() {
+        User user = WebUtil.getLoginUser();
+        List<UserRole> roles = user.getUserRoles();
+        if (roles == null) roles = new ArrayList<>();
+        return roles.stream()
+                .map(UserRole::getRoleId).collect(Collectors.toList());
+    }
+
     /**
      * 查询当前用户持有制定key的所有模块配置定义信息
      *
      * @param key
      * @return {@link ResponseMessage}
      */
-    @RequestMapping(value = "/{key}/own", method = RequestMethod.GET)
+    @RequestMapping(value = "/{key}/list", method = RequestMethod.GET)
     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())
-                .collect(Collectors.toList()).toArray(new String[roles.size()]);
-        return ResponseMessage.ok(getService().selectByKeyAndRoleId(key, roleIdList));
+        return ResponseMessage.ok(getService().selectByKeyAndRoleId(key, getRoleId()));
+    }
+
+    @RequestMapping(value = "/{key}/md5", method = RequestMethod.GET)
+    public ResponseMessage getMd5(@PathVariable String key) {
+        return ResponseMessage.ok(moduleMetaService.selectMD5SingleByKeyAndRoleId(key, getRoleId()));
     }
+
+    @RequestMapping(value = "/{key}/single", method = RequestMethod.GET)
+    public ResponseMessage getSingle(@PathVariable String key) {
+        return ResponseMessage.ok(moduleMetaService.selectSingleByKeyAndRoleId(key, getRoleId()));
+    }
+
 }

+ 2 - 2
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/form/FormService.java

@@ -99,8 +99,8 @@ public interface FormService extends GenericService<Form, String> {
      *
      * @param id 表单ID
      * @return html 字符串
-     * @
      */
+    @Deprecated
     String createViewHtml(String id);
 
     /**
@@ -112,5 +112,5 @@ public interface FormService extends GenericService<Form, String> {
      */
     Form selectUsing(String name);
 
-
+    int selectDeployedVersion(String name);
 }

+ 5 - 8
hsweb-web-service/hsweb-web-service-api/src/main/java/org/hsweb/web/service/module/ModuleMetaService.java

@@ -6,16 +6,13 @@ import org.hsweb.web.service.GenericService;
 
 import java.util.List;
 
-/**
- * Created by zhouhao on 16-5-10.
- */
 public interface ModuleMetaService extends GenericService<ModuleMeta, String> {
 
-    default List<ModuleMeta> selectByKeyAndRoleId(String key, String... roleId) {
-        QueryParam queryParam = new QueryParam();
-        queryParam.where("key", key).and("role_id$IN", roleId);
-        return this.select(queryParam);
-    }
+    List<ModuleMeta> selectByKeyAndRoleId(String key, List<String> roleId);
+
+    ModuleMeta selectSingleByKeyAndRoleId(String key, List<String> roleId);
+
+    String selectMD5SingleByKeyAndRoleId(String key, List<String> roleId);
 
     default List<ModuleMeta> selectByKey(String key) {
         QueryParam queryParam = new QueryParam();

+ 10 - 2
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/form/FormServiceImpl.java

@@ -146,7 +146,8 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     @Caching(evict = {
             @CacheEvict(value = {CACHE_KEY + ".deploy"}, key = "'deploy.'+target.selectByPk(#formId).getName()+'.html'"),
             @CacheEvict(value = {CACHE_KEY + ".deploy"}, key = "'deploy.'+target.selectByPk(#formId).getName()"),
-            @CacheEvict(value = {CACHE_KEY}, key = "'using.'+target.selectByPk(#formId).getName()")
+            @CacheEvict(value = {CACHE_KEY}, key = "'using.'+target.selectByPk(#formId).getName()"),
+            @CacheEvict(value = {CACHE_KEY}, key = "'deploy.'+target.selectByPk(#formId).getName()+'.version'")
     })
     public void deploy(String formId) throws SQLException {
         Form old = this.selectByPk(formId);
@@ -175,7 +176,8 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     @Caching(evict = {
             @CacheEvict(value = {CACHE_KEY + ".deploy"}, key = "'deploy.'+target.selectByPk(#formId).getName()+'.html'"),
             @CacheEvict(value = {CACHE_KEY + ".deploy"}, key = "'deploy.'+target.selectByPk(#formId).getName()"),
-            @CacheEvict(value = {CACHE_KEY}, key = "'using.'+target.selectByPk(#formId).getName()")
+            @CacheEvict(value = {CACHE_KEY}, key = "'using.'+target.selectByPk(#formId).getName()"),
+            @CacheEvict(value = {CACHE_KEY}, key = "'deploy.'+target.selectByPk(#formId).getName()+'.version'")
     })
     public void unDeploy(String formId) {
         Form old = this.selectByPk(formId);
@@ -217,4 +219,10 @@ public class FormServiceImpl extends AbstractServiceImpl<Form, String> implement
     public Form selectUsing(String name) {
         return formMapper.selectUsing(name);
     }
+
+    @Override
+    @Cacheable(value = CACHE_KEY, key = "'deploy.'+#name+'.version'")
+    public int selectDeployedVersion(String name) {
+        return selectDeployed(name).getRelease();
+    }
 }

+ 48 - 2
hsweb-web-service/hsweb-web-service-simple/src/main/java/org/hsweb/web/service/impl/module/ModuleMetaServiceImpl.java

@@ -1,5 +1,7 @@
 package org.hsweb.web.service.impl.module;
 
+import org.hsweb.ezorm.param.Term;
+import org.hsweb.web.bean.common.QueryParam;
 import org.hsweb.web.bean.po.module.ModuleMeta;
 import org.hsweb.web.core.utils.RandomUtil;
 import org.hsweb.web.dao.module.ModuleMetaMapper;
@@ -7,15 +9,19 @@ import org.hsweb.web.service.impl.AbstractServiceImpl;
 import org.hsweb.web.service.module.ModuleMetaService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
+import java.util.Arrays;
+import java.util.List;
+
 /**
  * Created by zhouhao on 16-5-10.
  */
 @Service("moduleMetaService")
 public class ModuleMetaServiceImpl extends AbstractServiceImpl<ModuleMeta, String> implements ModuleMetaService {
 
-    public static final String CACHE_NAME ="module.meta";
+    public static final String CACHE_NAME = "module.meta";
 
     @Autowired
     private ModuleMetaMapper moduleMetaMapper;
@@ -27,8 +33,48 @@ public class ModuleMetaServiceImpl extends AbstractServiceImpl<ModuleMeta, Strin
 
     @Override
     @CacheEvict(value = CACHE_NAME, allEntries = true)
-    public int update(ModuleMeta data)  {
+    public int update(ModuleMeta data) {
         return super.update(data);
     }
 
+    @Override
+    @CacheEvict(value = CACHE_NAME, allEntries = true)
+    public String insert(ModuleMeta data) {
+        return super.insert(data);
+    }
+
+    @Override
+    @CacheEvict(value = CACHE_NAME, allEntries = true)
+    public int delete(String s) {
+        return super.delete(s);
+    }
+
+    protected QueryParam createSelectByKeyAndRoleIdParam(String key, List<String> roleId) {
+        QueryParam param = QueryParam.build();
+        param.nest().and("key", key).or("module_id", key);
+        Term term = param.nest();
+        roleId.forEach(id -> term.or("roleId$LIKE", "%," + id + ",%"));
+        term.or("roleId$ISNULL", true).or("roleId$EMPTY", true);
+        return param;
+    }
+
+    @Override
+    @Cacheable(value = CACHE_NAME, key = "'list.key:'+#key+'-roleId:'+#roleId.hashCode()")
+    public List<ModuleMeta> selectByKeyAndRoleId(String key, List<String> roleId) {
+        return this.select(createSelectByKeyAndRoleIdParam(key, roleId));
+    }
+
+    @Override
+    @Cacheable(value = CACHE_NAME, key = "'single.key:'+#key+'-roleId:'+#roleId.hashCode()")
+    public ModuleMeta selectSingleByKeyAndRoleId(String key, List<String> roleId) {
+        return this.selectSingle(createSelectByKeyAndRoleIdParam(key, roleId));
+    }
+
+    @Override
+    @Cacheable(value = CACHE_NAME, key = "'single.key:'+#key+'-roleId:'+#roleId.hashCode()+'.md5'")
+    public String selectMD5SingleByKeyAndRoleId(String key, List<String> roleId) {
+        ModuleMeta meta = this.selectSingle(createSelectByKeyAndRoleIdParam(key, roleId));
+        assertNotNull(meta, "数据不存在");
+        return meta.getMd5();
+    }
 }