Sfoglia il codice sorgente

Delete template, kanban, kanban instance, global parameter, resource point

sunyj 8 anni fa
parent
commit
7bc766f9e9
27 ha cambiato i file con 5 aggiunte e 2469 eliminazioni
  1. 0 18
      kanban-auth/src/main/java/com/uas/kanban/controller/ResourcePointController.java
  2. 0 39
      kanban-auth/src/main/java/com/uas/kanban/dao/ResourcePointDao.java
  3. 0 70
      kanban-auth/src/main/java/com/uas/kanban/model/ResourcePoint.java
  4. 0 17
      kanban-auth/src/main/java/com/uas/kanban/model/Template.java
  5. 4 19
      kanban-auth/src/main/java/com/uas/kanban/model/User.java
  6. 0 105
      kanban-auth/src/main/java/com/uas/kanban/service/impl/ResourcePointServiceImpl.java
  7. 0 25
      kanban-auth/src/main/java/com/uas/kanban/service/impl/UserServiceImpl.java
  8. 1 2
      kanban-console/src/main/java/com/uas/kanban/MongoConfiguration.java
  9. 0 18
      kanban-console/src/main/java/com/uas/kanban/controller/GlobalParameterController.java
  10. 0 18
      kanban-console/src/main/java/com/uas/kanban/controller/KanbanController.java
  11. 0 71
      kanban-console/src/main/java/com/uas/kanban/controller/KanbanInstanceController.java
  12. 0 92
      kanban-console/src/main/java/com/uas/kanban/controller/TemplateController.java
  13. 0 16
      kanban-console/src/main/java/com/uas/kanban/dao/GlobalParameterDao.java
  14. 0 30
      kanban-console/src/main/java/com/uas/kanban/dao/KanbanDao.java
  15. 0 42
      kanban-console/src/main/java/com/uas/kanban/dao/KanbanInstanceDao.java
  16. 0 59
      kanban-console/src/main/java/com/uas/kanban/dao/TemplateDao.java
  17. 0 272
      kanban-console/src/main/java/com/uas/kanban/model/GlobalParameter.java
  18. 0 138
      kanban-console/src/main/java/com/uas/kanban/model/Kanban.java
  19. 0 142
      kanban-console/src/main/java/com/uas/kanban/model/KanbanInstance.java
  20. 0 147
      kanban-console/src/main/java/com/uas/kanban/model/Template.java
  21. 0 121
      kanban-console/src/main/java/com/uas/kanban/model/TemplateParameter.java
  22. 0 52
      kanban-console/src/main/java/com/uas/kanban/service/KanbanInstanceService.java
  23. 0 63
      kanban-console/src/main/java/com/uas/kanban/service/TemplateService.java
  24. 0 84
      kanban-console/src/main/java/com/uas/kanban/service/impl/GlobalParameterServiceImpl.java
  25. 0 414
      kanban-console/src/main/java/com/uas/kanban/service/impl/KanbanInstanceServiceImpl.java
  26. 0 153
      kanban-console/src/main/java/com/uas/kanban/service/impl/KanbanServiceImpl.java
  27. 0 242
      kanban-console/src/main/java/com/uas/kanban/service/impl/TemplateServiceImpl.java

+ 0 - 18
kanban-auth/src/main/java/com/uas/kanban/controller/ResourcePointController.java

@@ -1,18 +0,0 @@
-package com.uas.kanban.controller;
-
-import com.uas.kanban.base.BaseController;
-import com.uas.kanban.model.ResourcePoint;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * 用户
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:42:10
- */
-@Controller
-@RequestMapping("/resourcePoint")
-public class ResourcePointController extends BaseController<ResourcePoint> {
-
-}

+ 0 - 39
kanban-auth/src/main/java/com/uas/kanban/dao/ResourcePointDao.java

@@ -1,39 +0,0 @@
-package com.uas.kanban.dao;
-
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.model.ResourcePoint;
-import com.uas.kanban.model.User;
-import com.uas.kanban.support.SystemSession;
-import com.uas.kanban.util.CollectionUtils;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 资源点
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:08:50
- */
-@Component
-public class ResourcePointDao extends BaseDao<ResourcePoint> {
-
-    @Override
-    protected Map<String, Object> globalFilter() {
-        User user = SystemSession.checkUser();
-        // 管理员可以看到所有资源点
-        if (user.getRole() == User.Role.Admin) {
-            return null;
-        }
-        // 关联的资源点
-        List<String> resourcePointCodes = user.getResourcePointCodes();
-        Map<String, Object> filters = new HashMap<>();
-        if (!CollectionUtils.isEmpty(resourcePointCodes)) {
-            // 普通用户只能操作关联的资源点
-            filters.put("code in", resourcePointCodes);
-        }
-        return filters;
-    }
-}

+ 0 - 70
kanban-auth/src/main/java/com/uas/kanban/model/ResourcePoint.java

@@ -1,70 +0,0 @@
-package com.uas.kanban.model;
-
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.BaseEntity;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.IndexOptions;
-import org.mongodb.morphia.annotations.Indexed;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 资源点
- *
- * @author sunyj
- * @since 2017年9月9日 下午3:21:06
- */
-@Entity
-public class ResourcePoint extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 名称
-     */
-    @Indexed(options = @IndexOptions(unique = true))
-    @FieldProperty(nullable = false)
-    private String name;
-
-    /**
-     * 模版的 code
-     */
-    @FieldProperty(nullable = false)
-    private List<String> templateCodes;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<String> getTemplateCodes() {
-        return templateCodes;
-    }
-
-    public void setTemplateCodes(List<String> templateCodes) {
-        this.templateCodes = templateCodes;
-    }
-
-    @Override
-    public String toString() {
-        return "ResourcePoint [name=" + name + ", templateCodes=" + templateCodes + ", id=" + id + ", createTime="
-                + createTime + ", lastModified=" + lastModified + ", version=" + version + ", code=" + code + "]";
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null || getClass() != obj.getClass() || !(obj instanceof ResourcePoint)) {
-            return false;
-        }
-        ResourcePoint other = (ResourcePoint) obj;
-        return Objects.equals(code, other.getCode()) && Objects.equals(name, other.getName())
-                && Objects.equals(templateCodes, other.getTemplateCodes());
-    }
-}

+ 0 - 17
kanban-auth/src/main/java/com/uas/kanban/model/Template.java

@@ -1,17 +0,0 @@
-package com.uas.kanban.model;
-
-import com.uas.kanban.base.BaseEntity;
-import org.mongodb.morphia.annotations.Entity;
-
-/**
- * 模版(这里仅仅声明这个类,之后在 kanban-console 会覆盖该类)
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:06:55
- */
-@Entity
-public class Template extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-}

+ 4 - 19
kanban-auth/src/main/java/com/uas/kanban/model/User.java

@@ -6,7 +6,6 @@ import org.mongodb.morphia.annotations.Entity;
 import org.mongodb.morphia.annotations.IndexOptions;
 import org.mongodb.morphia.annotations.Indexed;
 
-import java.util.List;
 import java.util.Objects;
 
 /**
@@ -39,11 +38,6 @@ public class User extends BaseEntity {
     @FieldProperty(nullable = false)
     private Role role;
 
-    /**
-     * 绑定的资源点 code
-     */
-    private List<String> resourcePointCodes;
-
     public String getName() {
         return name;
     }
@@ -68,19 +62,11 @@ public class User extends BaseEntity {
         this.role = role;
     }
 
-    public List<String> getResourcePointCodes() {
-        return resourcePointCodes;
-    }
-
-    public void setResourcePointCodes(List<String> resourcePointCodes) {
-        this.resourcePointCodes = resourcePointCodes;
-    }
-
     @Override
     public String toString() {
-        return "User [name=" + name + ", password=" + password + ", resourcePointCodes=" + resourcePointCodes
-                + ", role=" + role + ", id=" + id + ", createTime=" + createTime + ", lastModified=" + lastModified
-                + ", version=" + version + ", code=" + code + "]";
+        return "User [name=" + name + ", password=" + password + ", role=" + role
+                + ", id=" + id + ", createTime=" + createTime + ", lastModified="
+                + lastModified + ", version=" + version + ", code=" + code + "]";
     }
 
     @Override
@@ -93,8 +79,7 @@ public class User extends BaseEntity {
         }
         User other = (User) obj;
         return Objects.equals(code, other.getCode()) && Objects.equals(name, other.getName())
-                && Objects.equals(password, other.getPassword()) && Objects.equals(role, other.getRole())
-                && Objects.equals(resourcePointCodes, other.getResourcePointCodes());
+                && Objects.equals(password, other.getPassword()) && Objects.equals(role, other.getRole());
     }
 
     /**

+ 0 - 105
kanban-auth/src/main/java/com/uas/kanban/service/impl/ResourcePointServiceImpl.java

@@ -1,105 +0,0 @@
-package com.uas.kanban.service.impl;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.base.BaseService;
-import com.uas.kanban.dao.ResourcePointDao;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.ResourcePoint;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.util.CollectionUtils;
-import org.mongodb.morphia.query.Query;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 资源点
- *
- * @author sunyj
- * @since 2017年9月2日 下午8:47:20
- */
-@Service
-public class ResourcePointServiceImpl extends BaseService<ResourcePoint> {
-
-    @Autowired
-    private ResourcePointDao resourcePointDao;
-
-    @Autowired
-    private BaseDao<Template> templateDao;
-
-    @Override
-    public ResourcePoint save(@NotEmpty("json") String json) {
-        ResourcePoint resourcePoint = resourcePointDao.parse(json);
-        if (exist(resourcePoint.getName())) {
-            throw new IllegalStateException("资源点已存在");
-        }
-        checkTemplates(resourcePoint.getTemplateCodes());
-        return resourcePointDao.save(resourcePoint);
-    }
-
-    @Override
-    public ResourcePoint savePart(String json) {
-        return save(json);
-    }
-
-    @Override
-    public int update(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        ResourcePoint resourcePoint = resourcePointDao.parse(json);
-        String code = resourcePoint.codeNotEmpty();
-        ResourcePoint rPoint = resourcePointDao.findOne(code);
-        if (rPoint == null) {
-            throw new IllegalStateException("资源点不存在");
-        }
-        if (Objects.equals(resourcePoint, rPoint)) {
-            throw new IllegalStateException("未发现任何变更");
-        }
-        String name = resourcePoint.getName();
-        if (!Objects.equals(name, rPoint.getName()) && exist(name)) {
-            throw new IllegalStateException("资源点已存在");
-        }
-        checkTemplates(resourcePoint.getTemplateCodes());
-        return resourcePointDao.update(resourcePoint);
-    }
-
-    @Override
-    public int updatePart(String json) throws IllegalArgumentException, OperationException {
-        return update(json);
-    }
-
-    /**
-     * 检查模版是否存在
-     *
-     * @param templateCodes 模版的 code
-     * @throws IllegalArgumentException 模版不存在
-     */
-    private void checkTemplates(List<String> templateCodes) throws IllegalArgumentException {
-        if (CollectionUtils.isEmpty(templateCodes)) {
-            return;
-        }
-        for (String templateCode : templateCodes) {
-            if (templateCodes.indexOf(templateCode) != templateCodes.lastIndexOf(templateCode)) {
-                throw new IllegalArgumentException("模版重复:" + templateCode);
-            }
-            Template template = templateDao.findOne(templateCode);
-            if (template == null) {
-                throw new IllegalArgumentException("模版不存在:" + templateCode);
-            }
-        }
-    }
-
-    /**
-     * 资源点是否已存在
-     *
-     * @param name 名称
-     * @return 是否存在
-     */
-    private boolean exist(@NotEmpty("name") String name) {
-        Query<ResourcePoint> query = resourcePointDao.createQuery();
-        query.field("name").equal(name);
-        return query.count() > 0;
-    }
-
-}

+ 0 - 25
kanban-auth/src/main/java/com/uas/kanban/service/impl/UserServiceImpl.java

@@ -2,15 +2,12 @@ package com.uas.kanban.service.impl;
 
 import com.uas.kanban.annotation.NotEmpty;
 import com.uas.kanban.base.BaseService;
-import com.uas.kanban.dao.ResourcePointDao;
 import com.uas.kanban.dao.UserDao;
 import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.ResourcePoint;
 import com.uas.kanban.model.User;
 import com.uas.kanban.model.User.Role;
 import com.uas.kanban.service.UserService;
 import com.uas.kanban.support.SystemSession;
-import com.uas.kanban.util.CollectionUtils;
 import org.mongodb.morphia.query.Query;
 import org.mongodb.morphia.query.UpdateOperations;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -31,9 +28,6 @@ public class UserServiceImpl extends BaseService<User> implements UserService {
     @Autowired
     private UserDao userDao;
 
-    @Autowired
-    private ResourcePointDao resourcePointDao;
-
     @Override
     public User save(@NotEmpty("json") String json) {
         User user = userDao.parse(json);
@@ -97,25 +91,6 @@ public class UserServiceImpl extends BaseService<User> implements UserService {
         if (password != null && password.trim().length() < 3) {
             throw new IllegalArgumentException("密码过短");
         }
-        checkResourcePointCodes(user.getResourcePointCodes());
-    }
-
-    /**
-     * 检查资源点是否存在
-     *
-     * @param resourcePointCodes 资源点的 code
-     * @throws IllegalArgumentException 资源点不存在
-     */
-    private void checkResourcePointCodes(List<String> resourcePointCodes) throws IllegalArgumentException {
-        if (CollectionUtils.isEmpty(resourcePointCodes)) {
-            return;
-        }
-        for (String resourcePointCode : resourcePointCodes) {
-            ResourcePoint resourcePoint = resourcePointDao.findOne(resourcePointCode);
-            if (resourcePoint == null) {
-                throw new IllegalArgumentException("资源点不存在:" + resourcePointCode);
-            }
-        }
     }
 
     @Override

+ 1 - 2
kanban-console/src/main/java/com/uas/kanban/MongoConfiguration.java

@@ -2,7 +2,6 @@ package com.uas.kanban;
 
 import com.mongodb.MongoClient;
 import com.mongodb.MongoClientURI;
-import com.uas.kanban.model.Template;
 import com.uas.kanban.util.ContextUtils;
 import org.mongodb.morphia.Datastore;
 import org.mongodb.morphia.Morphia;
@@ -47,7 +46,7 @@ public class MongoConfiguration {
     @Primary
     public Datastore datastore() {
         Morphia morphia = new Morphia();
-        morphia.mapPackage(Template.class.getPackage().getName());
+        morphia.mapPackage(getClass().getPackage().getName());
         MongoClient mongoClient = ContextUtils.getBean(MongoClient.class);
         Datastore datastore = morphia.createDatastore(mongoClient, dbName);
         datastore.ensureIndexes();

+ 0 - 18
kanban-console/src/main/java/com/uas/kanban/controller/GlobalParameterController.java

@@ -1,18 +0,0 @@
-package com.uas.kanban.controller;
-
-import com.uas.kanban.base.BaseController;
-import com.uas.kanban.model.GlobalParameter;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * 公共参数
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:42:10
- */
-@Controller
-@RequestMapping("/globalParameters")
-public class GlobalParameterController extends BaseController<GlobalParameter> {
-
-}

+ 0 - 18
kanban-console/src/main/java/com/uas/kanban/controller/KanbanController.java

@@ -1,18 +0,0 @@
-package com.uas.kanban.controller;
-
-import com.uas.kanban.base.BaseController;
-import com.uas.kanban.model.Kanban;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-
-/**
- * 看板
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:42:10
- */
-@Controller
-@RequestMapping("/kanban")
-public class KanbanController extends BaseController<Kanban> {
-
-}

+ 0 - 71
kanban-console/src/main/java/com/uas/kanban/controller/KanbanInstanceController.java

@@ -1,71 +0,0 @@
-package com.uas.kanban.controller;
-
-import com.uas.kanban.base.BaseController;
-import com.uas.kanban.model.KanbanInstance;
-import com.uas.kanban.service.KanbanInstanceService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.Map;
-
-/**
- * 看板
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:42:10
- */
-@Controller
-@RequestMapping("/kanbanInstance")
-public class KanbanInstanceController extends BaseController<KanbanInstance> {
-
-    @Autowired
-    private KanbanInstanceService kanbanInstanceService;
-
-    /**
-     * 根据看板实例,解析生成json数据传给前台
-     *
-     * @param code         看板实例 code
-     * @param templateCode 模版 code,可为空,为空时解析第一个模版数据
-     * @param request      request
-     * @return 解析生成的json
-     */
-    @RequestMapping("/parseData/{code}")
-    @ResponseBody
-    public Map<String, Object> parseData(@PathVariable("code") String code, String templateCode,
-                                         HttpServletRequest request) {
-        return kanbanInstanceService.parseData(code, templateCode);
-    }
-
-    /**
-     * 根据看板 code 获取看板实例
-     *
-     * @param kanbanCode 看板 code
-     * @param request    request
-     * @return 看板实例
-     * @throws IllegalStateException 找到多个看板实例
-     */
-    @RequestMapping("/get/kanbanCode/{kanbanCode}")
-    @ResponseBody
-    public KanbanInstance getByKanbanCode(@PathVariable("kanbanCode") String kanbanCode, HttpServletRequest request) {
-        return kanbanInstanceService.getByKanbanCode(kanbanCode);
-    }
-
-    /**
-     * 根据看板 code 打开看板实例(如果有创建的实例,返回该实例,如果没有,提取参数等之后返回)
-     *
-     * @param kanbanCode 看板 code
-     * @param request    request
-     * @return 看板实例
-     * @throws IllegalStateException 找到多个看板实例
-     */
-    @RequestMapping("/open/kanbanCode/{kanbanCode}")
-    @ResponseBody
-    public KanbanInstance openKanbanInstance(@PathVariable("kanbanCode") String kanbanCode,
-                                             HttpServletRequest request) {
-        return kanbanInstanceService.openKanbanInstance(kanbanCode);
-    }
-}

+ 0 - 92
kanban-console/src/main/java/com/uas/kanban/controller/TemplateController.java

@@ -1,92 +0,0 @@
-package com.uas.kanban.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseController;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.model.TemplateParameter;
-import com.uas.kanban.service.TemplateService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.servlet.http.HttpServletRequest;
-import java.util.List;
-
-/**
- * 用户
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:42:10
- */
-@Controller
-@RequestMapping("/template")
-public class TemplateController extends BaseController<Template> {
-
-    @Autowired
-    private TemplateService templateService;
-
-    /**
-     * 根据资源点 code 获取模版
-     *
-     * @param resourcePointCode 资源点 code
-     * @param request           request
-     * @return 模版
-     */
-    @RequestMapping("/get/resourcePointCode/{resourcePointCode}")
-    @ResponseBody
-    public List<Template> getByResourcePointCode(@PathVariable("resourcePointCode") String resourcePointCode, HttpServletRequest request) {
-        return templateService.getByResourcePointCode(resourcePointCode);
-    }
-
-    /**
-     * 添加模版参数
-     *
-     * @param code      模版的 code
-     * @param parameter 要添加的参数(json 格式)
-     * @param request   request
-     * @return 更新的模版数量
-     */
-    @RequestMapping("/parameter/add")
-    @ResponseBody
-    public int addParameter(@NotEmpty("code") String code, @NotEmpty("parameter") String parameter,
-                            HttpServletRequest request) {
-        TemplateParameter templateParameter = JSONObject.parseObject(parameter, TemplateParameter.class);
-        return templateService.addParameter(code, templateParameter);
-    }
-
-    /**
-     * 删除模版参数
-     *
-     * @param code          模版的 code
-     * @param parameterCode 模版参数的 code
-     * @param request       request
-     * @return 更新的模版数量
-     */
-    @RequestMapping("/parameter/delete")
-    @ResponseBody
-    public int deleteParameter(@NotEmpty("code") String code, @NotEmpty("parameterCode") String parameterCode,
-                               HttpServletRequest request) throws IllegalStateException, IllegalArgumentException, OperationException {
-        return templateService.deleteParameter(code, parameterCode);
-    }
-
-    /**
-     * 更新模版参数
-     *
-     * @param code      模版的 code
-     * @param parameter 要更新的参数(json 格式)
-     * @param request   request
-     * @return 更新的模版数量
-     */
-    @RequestMapping("/parameter/update")
-    @ResponseBody
-    public int updateParameter(@NotEmpty("code") String code, @NotEmpty("parameter") String parameter,
-                               HttpServletRequest request) throws IllegalStateException, IllegalArgumentException, OperationException {
-        TemplateParameter templateParameter = JSONObject.parseObject(parameter, TemplateParameter.class);
-        return templateService.updateParameter(code, templateParameter);
-    }
-
-}

+ 0 - 16
kanban-console/src/main/java/com/uas/kanban/dao/GlobalParameterDao.java

@@ -1,16 +0,0 @@
-package com.uas.kanban.dao;
-
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.model.GlobalParameter;
-import org.springframework.stereotype.Component;
-
-/**
- * 公共参数
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:08:50
- */
-@Component
-public class GlobalParameterDao extends BaseDao<GlobalParameter> {
-
-}

+ 0 - 30
kanban-console/src/main/java/com/uas/kanban/dao/KanbanDao.java

@@ -1,30 +0,0 @@
-package com.uas.kanban.dao;
-
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.model.Kanban;
-import com.uas.kanban.model.User;
-import com.uas.kanban.support.SystemSession;
-import org.springframework.stereotype.Component;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * 看板
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:08:50
- */
-@Component
-public class KanbanDao extends BaseDao<Kanban> {
-
-    @Override
-    protected Map<String, Object> globalFilter() {
-        User user = SystemSession.checkUser();
-        Map<String, Object> filters = new HashMap<>();
-        // 根据用户过滤
-        filters.put("userCode", user.getCode());
-        return filters;
-    }
-
-}

+ 0 - 42
kanban-console/src/main/java/com/uas/kanban/dao/KanbanInstanceDao.java

@@ -1,42 +0,0 @@
-package com.uas.kanban.dao;
-
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.model.Kanban;
-import com.uas.kanban.model.KanbanInstance;
-import com.uas.kanban.util.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 看板实例
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:08:50
- */
-@Component
-public class KanbanInstanceDao extends BaseDao<KanbanInstance> {
-
-    @Autowired
-    private KanbanDao kanbanDao;
-
-    @Override
-    protected Map<String, Object> globalFilter() {
-        List<Kanban> kanbans = kanbanDao.findAll();
-        if (CollectionUtils.isEmpty(kanbans)) {
-            return null;
-        }
-        List<String> kanbanCodes = new ArrayList<>();
-        for (Kanban kanban : kanbans) {
-            kanbanCodes.add(kanban.getCode());
-        }
-        Map<String, Object> filters = new HashMap<>();
-        // 根据用户的看板进行过滤
-        filters.put("kanbanCode in", kanbanCodes);
-        return filters;
-    }
-}

+ 0 - 59
kanban-console/src/main/java/com/uas/kanban/dao/TemplateDao.java

@@ -1,59 +0,0 @@
-package com.uas.kanban.dao;
-
-import com.uas.kanban.base.BaseDao;
-import com.uas.kanban.model.ResourcePoint;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.model.User;
-import com.uas.kanban.model.User.Role;
-import com.uas.kanban.support.SystemSession;
-import com.uas.kanban.util.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * 用户
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:08:50
- */
-@Component
-public class TemplateDao extends BaseDao<Template> {
-
-    @Autowired
-    private ResourcePointDao resourePointDao;
-
-    @Override
-    protected Map<String, Object> globalFilter() {
-        User user = SystemSession.checkUser();
-        // 管理员可以看到所有模版
-        if (user.getRole() == Role.Admin) {
-            return null;
-        }
-        // 关联的资源点
-        List<String> resourcePointCodes = user.getResourcePointCodes();
-        List<String> templateCodes = new ArrayList<>();
-        if (!CollectionUtils.isEmpty(resourcePointCodes)) {
-            for (String resourcePointCode : resourcePointCodes) {
-                ResourcePoint resourcePoint = resourePointDao.findOne(resourcePointCode);
-                if (resourcePoint == null) {
-                    throw new IllegalStateException("资源点不存在:" + resourcePointCode);
-                }
-                // 资源点所能查看的模版
-                List<String> tCodes = resourcePoint.getTemplateCodes();
-                if (!CollectionUtils.isEmpty(tCodes)) {
-                    templateCodes.addAll(tCodes);
-                }
-            }
-        }
-        Map<String, Object> filters = new HashMap<>();
-        // 普通用户只能查看关联的资源点被分配的模版
-        filters.put("code in", templateCodes);
-        return filters;
-    }
-
-}

+ 0 - 272
kanban-console/src/main/java/com/uas/kanban/model/GlobalParameter.java

@@ -1,272 +0,0 @@
-package com.uas.kanban.model;
-
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.BaseEntity;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.ObjectUtils;
-import org.mongodb.morphia.annotations.Embedded;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.IndexOptions;
-import org.mongodb.morphia.annotations.Indexed;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * 公共参数
- *
- * @author sunyj
- * @since 2017年9月7日 下午4:04:04
- */
-@Entity
-public class GlobalParameter extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 临时变量,用来存储 value(防止 type 未初始化时,value 无法设置)
-     */
-    private transient Object tempValue;
-
-    /**
-     * 临时变量,用来存储 optionalValues(防止 type 未初始化时,value 无法设置)
-     */
-    private transient List<Object> tempOptionalValues;
-
-    /**
-     * 参数名称,需要和模板中保持一致
-     */
-    @Indexed(options = @IndexOptions(unique = true))
-    @FieldProperty(nullable = false)
-    private String name;
-
-    /**
-     * 参数类型
-     */
-    @FieldProperty(nullable = false)
-    private Type type;
-
-    /**
-     * 输入方式
-     */
-    @FieldProperty(nullable = false)
-    private InputMode inputMode;
-
-    /**
-     * 输入方式为 {@link InputMode#Radio} 或 {@link InputMode#DropDownBox}
-     * 时,可选择的值,此时不可为空
-     */
-    @Embedded
-    private List<Value> optionalValues;
-
-    /**
-     * 输入方式为 {@link InputMode#Radio} 或 {@link InputMode#DropDownBox} 时,默认值的序号
-     */
-    private Integer defaultOptionalValueIndex;
-
-    /**
-     * 应用模版时,选择或者输入的值
-     */
-    @Embedded
-    private Value value;
-
-    @Override
-    public void init() {
-        if (!ObjectUtils.isEmpty(getValue())) {
-            throw new IllegalArgumentException("不能指定value:" + this.toString());
-        }
-        super.init();
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    public void setType(Type type) {
-        this.type = type;
-        setValue(tempValue);
-        setOptionalValues(tempOptionalValues);
-    }
-
-    public InputMode getInputMode() {
-        return inputMode;
-    }
-
-    public void setInputMode(InputMode inputMode) {
-        this.inputMode = inputMode;
-    }
-
-    public Integer getDefaultOptionalValueIndex() {
-        return defaultOptionalValueIndex;
-    }
-
-    public void setDefaultOptionalValueIndex(Integer defaultOptionalValueIndex) {
-        this.defaultOptionalValueIndex = defaultOptionalValueIndex;
-    }
-
-    @Override
-    public String toString() {
-        return "GlobalParameter [name=" + name + ", type=" + type + ", inputMode=" + inputMode + ", optionalValues="
-                + optionalValues + ", defaultOptionalValueIndex=" + defaultOptionalValueIndex + ", value=" + value
-                + ", id=" + id + ", createTime=" + createTime + ", lastModified=" + lastModified + ", version="
-                + version + ", code=" + code + "]";
-    }
-
-    /**
-     * 对于 optionalValues 的操作需注意,因为通过该方法得到的 optionalValues 与 this.optionalValues
-     * 实际上是两个独立的对象,所以更改了返回值 optionalValues 之后,需要重新调用该方法以便应用更改
-     *
-     * @return 可选择的值
-     */
-    public List<Object> getOptionalValues() {
-        if (CollectionUtils.isEmpty(optionalValues)) {
-            return null;
-        }
-        checkType();
-        List<Object> values = new ArrayList<>();
-        for (Value v : optionalValues) {
-            values.add(v == null ? null : v.getValue(type));
-        }
-        return values;
-    }
-
-    /**
-     * 对于 optionalValues 的操作需注意,因为该方法的参数 optionalValues 与 this.optionalValues
-     * 实际上是两个独立的对象,更改参数 optionalValues 之后,需要重新调用该方法以便应用更改
-     *
-     * @param optionalValues 可选择的值
-     */
-    public void setOptionalValues(List<Object> optionalValues) {
-        if (type == null) {
-            tempOptionalValues = optionalValues;
-            return;
-        }
-        if (!CollectionUtils.isEmpty(optionalValues)) {
-            this.optionalValues = new ArrayList<>();
-            for (Object object : optionalValues) {
-                Value v = new Value();
-                v.setValue(type, object);
-                this.optionalValues.add(v);
-            }
-        }
-
-    }
-
-    public Object getValue() {
-        if (value == null) {
-            return null;
-        }
-        checkType();
-        return value.getValue(type);
-    }
-
-    public void setValue(Object value) {
-        if (type == null) {
-            tempValue = value;
-            return;
-        }
-        if (this.value == null) {
-            this.value = new Value();
-        }
-        this.value.setValue(type, value);
-    }
-
-    private void checkType() {
-        if (type == null) {
-            throw new IllegalStateException("type 为空:" + this);
-        }
-    }
-
-    /**
-     * 初始化参数值(如果已填写,不初始化)
-     */
-    public void mayInitValue() {
-        if (!ObjectUtils.isEmpty(getValue())) {
-            return;
-        }
-        if ((inputMode == InputMode.Radio || inputMode == InputMode.DropDownBox) && optionalValues != null) {
-            try {
-                value = ObjectUtils.clone(optionalValues.get(defaultOptionalValueIndex == null ? 0 : defaultOptionalValueIndex - 1));
-            } catch (IOException | ClassNotFoundException e) {
-                throw new IllegalStateException("初始化公共参数出错", e);
-            }
-        }
-    }
-
-    /**
-     * 检查参数
-     *
-     * @throws IllegalArgumentException 必填参数没有填写时,报错
-     */
-    public void checkValue() throws IllegalArgumentException {
-        // 检查参数值是否已填写
-        if (ObjectUtils.isEmpty(getValue())) {
-            if ((inputMode == InputMode.Radio || inputMode == InputMode.DropDownBox) && optionalValues != null) {
-                value = optionalValues.get(defaultOptionalValueIndex == null ? 0 : defaultOptionalValueIndex - 1);
-            } else {
-                throw new IllegalArgumentException("需填写公共参数:code=" + code + ", name=" + name);
-            }
-        }
-        // 通过单选或下拉框方式填写参数时,参数值必须是可选项中的一个值
-        if ((inputMode == InputMode.Radio || inputMode == InputMode.DropDownBox) && optionalValues != null) {
-            for (Object obj : optionalValues) {
-                if (Objects.equals(obj, value)) {
-                    return;
-                }
-            }
-        }
-        throw new IllegalArgumentException("参数值 " + value + " 不属于 " + optionalValues);
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null || getClass() != obj.getClass() || !(obj instanceof GlobalParameter)) {
-            return false;
-        }
-        GlobalParameter other = (GlobalParameter) obj;
-        return Objects.equals(code, other.getCode()) && Objects.equals(name, other.getName())
-                && Objects.equals(type, other.getType()) && Objects.equals(inputMode, other.getInputMode())
-                && Objects.equals(getOptionalValues(), other.getOptionalValues())
-                && Objects.equals(defaultOptionalValueIndex, other.getDefaultOptionalValueIndex())
-                && Objects.equals(getValue(), other.getValue());
-    }
-
-    /**
-     * 输入方式
-     *
-     * @author sunyj
-     * @since 2017年9月1日 下午8:01:53
-     */
-    public enum InputMode {
-
-        /**
-         * 单选
-         */
-        Radio,
-
-        /**
-         * 下拉框
-         */
-        DropDownBox,
-
-        /**
-         * 手输
-         */
-        Manual
-
-    }
-
-}

+ 0 - 138
kanban-console/src/main/java/com/uas/kanban/model/Kanban.java

@@ -1,138 +0,0 @@
-package com.uas.kanban.model;
-
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.BaseEntity;
-import com.uas.kanban.support.SystemSession;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.IndexOptions;
-import org.mongodb.morphia.annotations.Indexed;
-
-import java.util.List;
-
-/**
- * 看板
- *
- * @author sunyj
- * @since 2017年9月3日 下午4:20:53
- */
-@Entity
-public class Kanban extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 用户 code
-     */
-    @FieldProperty(nullable = false)
-    private String userCode;
-
-    /**
-     * 资源点 code
-     */
-    private String resourcePointCode;
-
-    /**
-     * 看板名称
-     */
-    @Indexed(options = @IndexOptions(unique = true))
-    @FieldProperty(nullable = false)
-    private String name;
-
-    /**
-     * 模版的 code
-     */
-    @FieldProperty(nullable = false)
-    private List<String> templateCodes;
-
-    /**
-     * 展示方式
-     */
-    @FieldProperty(nullable = false)
-    private Display display;
-
-    /**
-     * 看板图标样式
-     */
-    private String iconCls;
-
-    @Override
-    public void init() {
-        User user = SystemSession.checkUser();
-        userCode = user.getCode();
-        super.init();
-    }
-
-    public String getUserCode() {
-        return userCode;
-    }
-
-    public void setUserCode(String userCode) {
-        this.userCode = userCode;
-    }
-
-    public String getResourcePointCode() {
-        return resourcePointCode;
-    }
-
-    public void setResourcePointCode(String resourcePointCode) {
-        this.resourcePointCode = resourcePointCode;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public List<String> getTemplateCodes() {
-        return templateCodes;
-    }
-
-    public void setTemplateCodes(List<String> templateCodes) {
-        this.templateCodes = templateCodes;
-    }
-
-    public Display getDisplay() {
-        return display;
-    }
-
-    public void setDisplay(Display display) {
-        this.display = display;
-    }
-
-    public String getIconCls() {
-        return iconCls;
-    }
-
-    public void setIconCls(String iconCls) {
-        this.iconCls = iconCls;
-    }
-
-    @Override
-    public String toString() {
-        return "Kanban [userCode=" + userCode + ", resourcePointCode=" + resourcePointCode + ", name=" + name + ", templateCodes=" + templateCodes + ", display="
-                + display + ", iconCls=" + iconCls + ", id=" + id + ", createTime=" + createTime + ", lastModified="
-                + lastModified + ", version=" + version + ", code=" + code + "]";
-    }
-
-    /**
-     * 展示方式
-     *
-     * @author sunyj
-     * @since 2017年9月1日 下午8:01:53
-     */
-    public enum Display {
-
-        /**
-         * 自动切换
-         */
-        AutoSwitch,
-
-        /**
-         * 分屏展示
-         */
-        SplitScreen
-    }
-}

+ 0 - 142
kanban-console/src/main/java/com/uas/kanban/model/KanbanInstance.java

@@ -1,142 +0,0 @@
-package com.uas.kanban.model;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.BaseEntity;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.ObjectUtils;
-import org.mongodb.morphia.annotations.Embedded;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.IndexOptions;
-import org.mongodb.morphia.annotations.Indexed;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 看板实例
- *
- * @author sunyj
- * @since 2017年9月3日 下午5:21:06
- */
-@Entity
-public class KanbanInstance extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 默认切换频率为 10 s
-     */
-    public static final double DEFAULT_SWITCH_FREQUENCY = 10;
-
-    /**
-     * 默认刷新频率为 5 s
-     */
-    public static final double DEFAULT_REFRESH_FREQUENCY = 5;
-
-    /**
-     * 看板的 code
-     */
-    @Indexed(options = @IndexOptions(unique = true))
-    @FieldProperty(nullable = false)
-    private String kanbanCode;
-
-    /**
-     * 切换频率(秒)看板的展示方式为 {@link Kanban.Display#AutoSwitch} 时,才生效)
-     */
-    private Double switchFrequency;
-
-    /**
-     * 刷新频率(秒)
-     */
-    @FieldProperty(nullable = false)
-    private Double refreshFrequency;
-
-    /**
-     * 公共参数
-     */
-    @Embedded
-    private JSONArray globalParameters;
-
-    /**
-     * 看板实例参数
-     * <p/>
-     * <table border=1 cellpadding=5 cellspacing=0 summary= "Key and value">
-     * <tr>
-     * <th>key</th>
-     * <th>value</th>
-     * </tr>
-     * <tr>
-     * <td>模版 code</td>
-     * <td>模版参数</td>
-     * </tr>
-     * </table>
-     */
-    @Embedded
-    private Map<String, List<TemplateParameter>> parameters;
-
-    public String getKanbanCode() {
-        return kanbanCode;
-    }
-
-    public void setKanbanCode(String kanbanCode) {
-        this.kanbanCode = kanbanCode;
-    }
-
-    public Double getSwitchFrequency() {
-        return switchFrequency;
-    }
-
-    public void setSwitchFrequency(Double switchFrequency) {
-        this.switchFrequency = switchFrequency;
-    }
-
-    public Double getRefreshFrequency() {
-        return refreshFrequency;
-    }
-
-    public void setRefreshFrequency(Double refreshFrequency) {
-        this.refreshFrequency = refreshFrequency;
-    }
-
-    public JSONArray getGlobalParameters() {
-        return globalParameters;
-    }
-
-    public void setGlobalParameters(JSONArray globalParameters) {
-        this.globalParameters = globalParameters;
-    }
-
-    public Map<String, List<TemplateParameter>> getParameters() {
-        return parameters;
-    }
-
-    public void setParameters(Map<String, List<TemplateParameter>> parameters) {
-        this.parameters = parameters;
-    }
-
-    @Override
-    public String toString() {
-        return "KanbanInstance [kanbanCode=" + kanbanCode + ", switchFrequency=" + switchFrequency
-                + ", refreshFrequency=" + refreshFrequency + ", globalParameters=" + globalParameters + ", parameters="
-                + parameters + ", id=" + id + ", createTime=" + createTime + ", lastModified=" + lastModified
-                + ", version=" + version + ", code=" + code + "]";
-    }
-
-    /**
-     * 获取公共参数
-     */
-    public List<GlobalParameter> fromGlobalParameters() {
-        return ObjectUtils.toList(globalParameters, GlobalParameter.class);
-    }
-
-    /**
-     * 设置公共参数
-     */
-    public void toGlobalParameters(List<GlobalParameter> globalParameters) {
-        if (!CollectionUtils.isEmpty(globalParameters)) {
-            this.globalParameters = JSONObject.parseArray(JSONObject.toJSONString(globalParameters));
-        }
-    }
-}

+ 0 - 147
kanban-console/src/main/java/com/uas/kanban/model/Template.java

@@ -1,147 +0,0 @@
-package com.uas.kanban.model;
-
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.BaseEntity;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.ObjectUtils;
-import org.mongodb.morphia.annotations.Embedded;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.IndexOptions;
-import org.mongodb.morphia.annotations.Indexed;
-
-import java.util.List;
-
-/**
- * 模版
- *
- * @author sunyj
- * @since 2017年8月29日 上午10:06:55
- */
-@Entity
-public class Template extends BaseEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 模版名称
-     */
-    @Indexed(options = @IndexOptions(unique = true))
-    @FieldProperty(nullable = false)
-    private String name;
-
-    /**
-     * 模版标题
-     */
-    private String title;
-
-    /**
-     * 模版描述
-     */
-    private String description;
-
-    /**
-     * 模版内容
-     */
-    @FieldProperty(nullable = false)
-    private String content;
-
-    /**
-     * 数据源 code {@link DataSource} <br/>
-     * 不使用 @Reference,原因请见 {@link BaseEntity#id}
-     */
-    @FieldProperty(nullable = false)
-    private String dataSourceCode;
-
-    /**
-     * 模版参数
-     */
-    @Embedded
-    private JSONArray parameters;
-
-    /**
-     * 公共参数的 code
-     */
-    private List<String> globalParameterCodes;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getTitle() {
-        return title;
-    }
-
-    public void setTitle(String title) {
-        this.title = title;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public String getDataSourceCode() {
-        return dataSourceCode;
-    }
-
-    public void setDataSourceCode(String dataSourceCode) {
-        this.dataSourceCode = dataSourceCode;
-    }
-
-    public JSONArray getParameters() {
-        return parameters;
-    }
-
-    public void setParameters(JSONArray parameters) {
-        this.parameters = parameters;
-    }
-
-    public List<String> getGlobalParameterCodes() {
-        return globalParameterCodes;
-    }
-
-    public void setGlobalParameterCodes(List<String> globalParameterCodes) {
-        this.globalParameterCodes = globalParameterCodes;
-    }
-
-    @Override
-    public String toString() {
-        return "Template [name=" + name + ", title=" + title + ", description=" + description + ", content=" + content
-                + ", dataSourceCode=" + dataSourceCode + ", parameters=" + parameters + ", globalParameterCodes="
-                + globalParameterCodes + ", id=" + id + ", createTime=" + createTime + ", lastModified=" + lastModified
-                + ", version=" + version + ", code=" + code + "]";
-    }
-
-    /**
-     * 获取模版参数
-     */
-    public List<TemplateParameter> fromParameters() {
-        return ObjectUtils.toList(parameters, TemplateParameter.class);
-    }
-
-    /**
-     * 设置模版参数
-     */
-    public void toParameters(List<TemplateParameter> parameters) {
-        if (!CollectionUtils.isEmpty(parameters)) {
-            this.parameters = JSONObject.parseArray(JSONObject.toJSONString(parameters));
-        }
-    }
-}

+ 0 - 121
kanban-console/src/main/java/com/uas/kanban/model/TemplateParameter.java

@@ -1,121 +0,0 @@
-package com.uas.kanban.model;
-
-import com.uas.kanban.annotation.FieldProperty;
-import com.uas.kanban.base.Coded;
-import com.uas.kanban.util.ObjectUtils;
-import org.mongodb.morphia.annotations.Embedded;
-
-import java.util.Objects;
-
-/**
- * 模版参数
- *
- * @author sunyj
- * @since 2017年9月1日 下午5:19:15
- */
-public class TemplateParameter extends Coded {
-
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * 临时变量,用来存储 value(防止 type 未初始化时,value 无法设置)
-     */
-    private transient Object tempValue;
-
-    /**
-     * 参数名称,需要和模板中保持一致
-     */
-    @FieldProperty(nullable = false)
-    private String name;
-
-    /**
-     * 参数类型
-     */
-    @FieldProperty(nullable = false)
-    private Type type;
-
-    /**
-     * 应用模版时,参数的值
-     */
-    @Embedded
-    private Value value;
-
-    @Override
-    public void init() throws IllegalArgumentException {
-        if (!ObjectUtils.isEmpty(getValue())) {
-            throw new IllegalArgumentException("不能指定value:" + this.toString());
-        }
-        super.init();
-    }
-
-    // TODO 分组,参数分组主要考虑部分参数可能名称相同
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public Type getType() {
-        return type;
-    }
-
-    public void setType(Type type) {
-        this.type = type;
-        setValue(tempValue);
-    }
-
-    @Override
-    public String toString() {
-        return "TemplateParameter [name=" + name + ", type=" + type + ", value=" + value + ", code=" + code + "]";
-    }
-
-    public Object getValue() {
-        if (value == null) {
-            return null;
-        }
-        if (type == null) {
-            throw new IllegalStateException("type 为空:" + this);
-        }
-        return value.getValue(type);
-    }
-
-    public void setValue(Object value) {
-        if (type == null) {
-            tempValue = value;
-            return;
-        }
-        if (this.value == null) {
-            this.value = new Value();
-        }
-        this.value.setValue(type, value);
-    }
-
-    /**
-     * 检查参数
-     *
-     * @throws IllegalArgumentException 必填参数没有填写时,报错
-     */
-    public void checkValue() throws IllegalArgumentException {
-        // 检查参数值是否已填写
-        if (ObjectUtils.isEmpty(getValue())) {
-            throw new IllegalArgumentException("需填写参数:" + this);
-        }
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (this == obj) {
-            return true;
-        }
-        if (obj == null || getClass() != obj.getClass() || !(obj instanceof TemplateParameter)) {
-            return false;
-        }
-        TemplateParameter other = (TemplateParameter) obj;
-        return Objects.equals(code, other.getCode()) && Objects.equals(name, other.getName())
-                && Objects.equals(type, other.getType()) && Objects.equals(getValue(), other.getValue());
-    }
-
-}

+ 0 - 52
kanban-console/src/main/java/com/uas/kanban/service/KanbanInstanceService.java

@@ -1,52 +0,0 @@
-package com.uas.kanban.service;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.model.KanbanInstance;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * 看板实例
- *
- * @author sunyj
- * @since 2017年9月2日 下午6:47:41
- */
-public interface KanbanInstanceService {
-
-    /**
-     * 根据看板实例,解析生成json数据传给前台
-     *
-     * @param code         看板实例 code
-     * @param templateCode 模版 code,可为空,为空时解析第一个模版数据
-     * @return 解析生成的json
-     */
-    Map<String, Object> parseData(@NotEmpty("code") String code, String templateCode);
-
-    /**
-     * 根据看板 code 删除看板实例
-     *
-     * @param kanbanCodes 看板 code
-     * @return 删除的数据条数
-     */
-    int deleteByKanbanCodes(@NotEmpty("kanbanCodes") List<String> kanbanCodes);
-
-    /**
-     * 根据看板 code 获取看板实例
-     *
-     * @param kanbanCode 看板 code
-     * @return 看板实例
-     * @throws IllegalStateException 找到多个看板实例
-     */
-    KanbanInstance getByKanbanCode(@NotEmpty("kanbanCode") String kanbanCode) throws IllegalStateException;
-
-    /**
-     * 根据看板 code 打开看板实例(如果有创建的实例,返回该实例,如果没有,提取参数等之后返回)
-     *
-     * @param kanbanCode 看板 code
-     * @return 看板实例
-     * @throws IllegalStateException 找到多个看板实例
-     */
-    KanbanInstance openKanbanInstance(@NotEmpty("kanbanCode") String kanbanCode) throws IllegalStateException;
-
-}

+ 0 - 63
kanban-console/src/main/java/com/uas/kanban/service/TemplateService.java

@@ -1,63 +0,0 @@
-package com.uas.kanban.service;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.model.TemplateParameter;
-
-import java.util.List;
-
-/**
- * 模版
- *
- * @author sunyj
- * @since 2017年9月2日 下午6:47:41
- */
-public interface TemplateService {
-
-    /**
-     * 根据资源点 code 获取模版
-     *
-     * @param resourcePointCode 资源点 code
-     * @return 模版
-     */
-    List<Template> getByResourcePointCode(@NotEmpty("resourcePointCode") String resourcePointCode);
-
-    /**
-     * 根据资源点 code 获取模版
-     *
-     * @param code              模版的 code
-     * @param resourcePointCode 资源点 code
-     * @return 模版
-     */
-    Template getByResourcePointCode(@NotEmpty("code") String code, @NotEmpty("resourcePointCode") String resourcePointCode);
-
-    /**
-     * 添加模版参数
-     *
-     * @param code      模版的 code
-     * @param parameter 要添加的参数
-     * @return 更新的模版数量
-     */
-    int addParameter(@NotEmpty("code") String code, @NotEmpty("parameter") TemplateParameter parameter);
-
-    /**
-     * 删除模版参数
-     *
-     * @param code          模版的 code
-     * @param parameterCode 模版参数的 code
-     * @return 更新的模版数量
-     */
-    int deleteParameter(@NotEmpty("code") String code, @NotEmpty("parameterCode") String parameterCode)
-            throws IllegalStateException, IllegalArgumentException, OperationException;
-
-    /**
-     * 更新模版参数
-     *
-     * @param code      模版的 code
-     * @param parameter 要更新的参数
-     * @return 更新的模版数量
-     */
-    int updateParameter(@NotEmpty("code") String code, @NotEmpty("parameter") TemplateParameter parameter)
-            throws IllegalStateException, IllegalArgumentException, OperationException;
-}

+ 0 - 84
kanban-console/src/main/java/com/uas/kanban/service/impl/GlobalParameterServiceImpl.java

@@ -1,84 +0,0 @@
-package com.uas.kanban.service.impl;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseService;
-import com.uas.kanban.dao.GlobalParameterDao;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.GlobalParameter;
-import com.uas.kanban.model.GlobalParameter.InputMode;
-import com.uas.kanban.util.CollectionUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.List;
-
-/**
- * 公共参数
- *
- * @author sunyj
- * @since 2017年9月1日 下午4:46:01
- */
-@Service
-public class GlobalParameterServiceImpl extends BaseService<GlobalParameter> {
-
-    @Autowired
-    private GlobalParameterDao globalParameterDao;
-
-    @Override
-    public GlobalParameter save(@NotEmpty("json") String json) {
-        GlobalParameter globalParameter = globalParameterDao.parse(json);
-        checkInputMode(globalParameter);
-        return globalParameterDao.save(globalParameter);
-    }
-
-    @Override
-    public GlobalParameter savePart(@NotEmpty("json") String json) {
-        return save(json);
-    }
-
-    @Override
-    public int update(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        GlobalParameter globalParameter = globalParameterDao.parse(json);
-        checkInputMode(globalParameter);
-        return globalParameterDao.update(globalParameter);
-    }
-
-    @Override
-    public int updatePart(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        return update(json);
-    }
-
-    /**
-     * 检查输入方式
-     *
-     * @param globalParameter 公共参数
-     * @throws IllegalArgumentException 输入方式为 Radio 时,未提供可选值或者默认值的序号不合法
-     */
-    private void checkInputMode(@NotEmpty("globalParameter") GlobalParameter globalParameter) {
-        InputMode inputMode = globalParameter.getInputMode();
-        // 输入方式为 {@link InputMode#Radio} 或 {@link InputMode#DropDownBox} 时,需提供可选值
-        if (inputMode != null) {
-            List<Object> optionalValues = globalParameter.getOptionalValues();
-            Integer defaultOptionalValueIndex = globalParameter.getDefaultOptionalValueIndex();
-            switch (inputMode) {
-                case Radio:
-                case DropDownBox:
-                    if (CollectionUtils.isEmpty(optionalValues)) {
-                        throw new IllegalArgumentException("输入方式为 Radio 或 DropDownBox 时,需提供可选值");
-                    }
-                    if (defaultOptionalValueIndex != null
-                            && (defaultOptionalValueIndex < 1 || defaultOptionalValueIndex > optionalValues.size())) {
-                        throw new IllegalArgumentException("默认值的序号不合法:" + defaultOptionalValueIndex);
-                    }
-                    break;
-                case Manual:
-                    if (!CollectionUtils.isEmpty(optionalValues) || defaultOptionalValueIndex != null) {
-                        throw new IllegalArgumentException(
-                                "输入方式为 Manual 时,不可指定 optionalValues 和 defaultOptionalValueIndex");
-                    }
-                    break;
-            }
-        }
-    }
-
-}

+ 0 - 414
kanban-console/src/main/java/com/uas/kanban/service/impl/KanbanInstanceServiceImpl.java

@@ -1,414 +0,0 @@
-package com.uas.kanban.service.impl;
-
-import com.alibaba.fastjson.JSONObject;
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseService;
-import com.uas.kanban.dao.GlobalParameterDao;
-import com.uas.kanban.dao.KanbanDao;
-import com.uas.kanban.dao.KanbanInstanceDao;
-import com.uas.kanban.dao.TemplateDao;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.*;
-import com.uas.kanban.service.KanbanInstanceService;
-import com.uas.kanban.support.DataSourceManager;
-import com.uas.kanban.support.TemplateParser;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.ObjectUtils;
-import com.uas.kanban.util.StringUtils;
-import me.chyxion.jdbc.NewbieJdbcSupport;
-import org.dom4j.DocumentException;
-import org.mongodb.morphia.query.Query;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import javax.xml.transform.TransformerException;
-import java.io.IOException;
-import java.io.NotSerializableException;
-import java.sql.SQLException;
-import java.util.*;
-
-/**
- * 看板实例
- *
- * @author sunyj
- * @since 2017年9月3日 下午4:25:43
- */
-@Service
-public class KanbanInstanceServiceImpl extends BaseService<KanbanInstance> implements KanbanInstanceService {
-
-    @Autowired
-    private KanbanInstanceDao kanbanInstanceDao;
-
-    @Autowired
-    private KanbanDao kanbanDao;
-
-    @Autowired
-    private TemplateDao templateDao;
-
-    @Autowired
-    private TemplateParser templateParser;
-
-    @Autowired
-    private DataSourceManager dataSourceManager;
-
-    @Autowired
-    private GlobalParameterDao globalParameterDao;
-
-    @Override
-    public KanbanInstance save(@NotEmpty("json") String json) {
-        // TODO 一个资源点只能为某个看板维护一个看板实例
-        KanbanInstance kanbanInstance = kanbanInstanceDao.parse(json);
-        checkParameters(kanbanInstance);
-        initSwitchFrequence(kanbanInstance);
-        return kanbanInstanceDao.save(kanbanInstance);
-    }
-
-    @Override
-    public KanbanInstance savePart(@NotEmpty("json") String json) {
-        return save(json);
-    }
-
-    @Override
-    public int update(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        // TODO 一个资源点只能为某个看板维护一个看板实例
-        KanbanInstance kanbanInstance = kanbanInstanceDao.parse(json);
-        checkParameters(kanbanInstance);
-        return kanbanInstanceDao.update(kanbanInstance);
-    }
-
-    @Override
-    public int updatePart(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        return update(json);
-    }
-
-    /**
-     * 检查公共参数、模版参数等是否正确填写(没有遗漏参数、每个参数都有值并且类型匹配)
-     *
-     * @param kanbanInstance 看板实例
-     */
-    private void checkParameters(@NotEmpty("kanbanInstance") KanbanInstance kanbanInstance) {
-        List<GlobalParameter> globalParameters = kanbanInstance.fromGlobalParameters();
-        Map<String, List<TemplateParameter>> parameters = kanbanInstance.getParameters();
-        if (!CollectionUtils.isEmpty(globalParameters) || !CollectionUtils.isEmpty(parameters)) {
-            for (GlobalParameter globalParameter : globalParameters) {
-                globalParameter.mayInitValue();
-            }
-            try {
-                KanbanInstance kanbanInstanceClone = ObjectUtils.clone(kanbanInstance);
-                generateParameters(kanbanInstanceClone);
-                // 检查公共参数值
-                if (!CollectionUtils.isEmpty(globalParameters)) {
-                    compare(globalParameters, kanbanInstanceClone.fromGlobalParameters());
-                }
-                // 检查模版参数值
-                if (!CollectionUtils.isEmpty(parameters)) {
-                    compare(parameters, kanbanInstanceClone.getParameters());
-                }
-            } catch (ClassNotFoundException | IOException | InstantiationException | IllegalAccessException e) {
-                throw new IllegalStateException("深克隆对象时失败", e);
-            }
-        }
-    }
-
-    /**
-     * 比较公共参数数量、名称等是否一致
-     *
-     * @param parameters 比较的对象
-     * @param references 参考对象
-     */
-    private void compare(@NotEmpty("parameters") List<GlobalParameter> parameters, List<GlobalParameter> references)
-            throws NotSerializableException, InstantiationException, IllegalAccessException, ClassNotFoundException,
-            IOException {
-        if (CollectionUtils.isEmpty(references)) {
-            throw new IllegalArgumentException("不需要填写公共参数:" + parameters);
-        }
-        // 因为对象会被修改,所以先进行深克隆,参照对象不需要克隆
-        List<GlobalParameter> parametersClone = (List<GlobalParameter>) ObjectUtils.clone(parameters);
-        for (int i = parametersClone.size() - 1; i >= 0; i--) {
-            GlobalParameter parameter = parametersClone.get(i);
-            // 先检查值
-            parameter.checkValue();
-            // 再去除 code 相同的参数,以找出不一样的参数
-            for (int j = references.size() - 1; j >= 0; j--) {
-                GlobalParameter reference = references.get(j);
-                if (Objects.equals(parameter.getCode(), reference.getCode())) {
-                    // 排除值的干扰
-                    reference.setValue(parameter.getValue());
-                    // 与参照对象不一致,说明填写的参数不规范
-                    if (!parameter.equals(reference)) {
-                        throw new IllegalArgumentException("公共参数属性不一致:" + parameter + ",应为:" + reference);
-                    }
-                    // 移除比较对象中通过检查的参数,最终剩下的全是不合法的参数
-                    parametersClone.remove(parameter);
-                    references.remove(reference);
-                }
-            }
-        }
-        if (!CollectionUtils.isEmpty(parametersClone)) {
-            throw new IllegalArgumentException("不需要填写公共参数:" + parametersClone);
-        }
-        if (!CollectionUtils.isEmpty(references)) {
-            throw new IllegalArgumentException("未填写公共参数:" + references);
-        }
-    }
-
-    /**
-     * 比较模版参数数量、名称等是否一致
-     *
-     * @param parameters 比较的对象
-     * @param references 参考对象
-     */
-    private void compare(@NotEmpty("parameters") Map<String, List<TemplateParameter>> parameters,
-                         Map<String, List<TemplateParameter>> references) throws NotSerializableException, InstantiationException,
-            IllegalAccessException, ClassNotFoundException, IOException {
-        if (CollectionUtils.isEmpty(references)) {
-            throw new IllegalArgumentException("不需要填写参数:" + parameters);
-        }
-        // 因为对象会被修改,所以先进行深克隆,参照对象不需要克隆
-        Map<String, List<TemplateParameter>> parametersClone = ObjectUtils.clone(parameters);
-        // 先拷贝,否则之后修改 map 时,会报错 ConcurrentModificationException
-        Set<String> keySetCopy = new HashSet<>(references.keySet());
-        for (String templateCode : keySetCopy) {
-            // 参照对象中的模版参数必须填写
-            List<TemplateParameter> templateParameters = parametersClone.get(templateCode);
-            if (CollectionUtils.isEmpty(templateParameters)) {
-                throw new IllegalArgumentException("未填写模版 " + templateCode + " 的参数");
-            }
-            List<TemplateParameter> referenceTemplateParameters = references.get(templateCode);
-            // 因为参考对象 references 必须是规范的,因此不必判断键值对中的值为空
-            for (int i = referenceTemplateParameters.size() - 1; i >= 0; i--) {
-                TemplateParameter referenceTemplateParameter = referenceTemplateParameters.get(i);
-                for (int j = templateParameters.size() - 1; j >= 0; j--) {
-                    TemplateParameter templateParameter = templateParameters.get(j);
-                    if (Objects.equals(referenceTemplateParameter.getCode(), templateParameter.getCode())) {
-                        // 排除值的干扰
-                        referenceTemplateParameter.setValue(templateParameter.getValue());
-                        // 与参照对象不一致,说明填写的参数不规范
-                        if (!referenceTemplateParameter.equals(templateParameter)) {
-                            throw new IllegalArgumentException(
-                                    "模版参数属性不一致:" + templateParameter + ",应为:" + referenceTemplateParameter);
-                        }
-                        // 移除比较对象中通过检查的参数,最终剩下的全是不合法的参数
-                        templateParameters.remove(templateParameter);
-                        referenceTemplateParameters.remove(referenceTemplateParameter);
-                    }
-                }
-            }
-            // 如果某个模版的参数全部通过检查,将其移除
-            if (CollectionUtils.isEmpty(templateParameters)) {
-                parametersClone.remove(templateCode);
-            }
-            if (CollectionUtils.isEmpty(referenceTemplateParameters)) {
-                references.remove(templateCode);
-            }
-        }
-        if (!CollectionUtils.isEmpty(parametersClone)) {
-            throw new IllegalArgumentException("不需要填写模版参数:" + parametersClone);
-        }
-        if (!CollectionUtils.isEmpty(references)) {
-            throw new IllegalArgumentException("未填写模版参数:" + references);
-        }
-    }
-
-    /**
-     * 根据看板绑定的模版,自动生成模版相应的看板实例参数和公共参数
-     *
-     * @param kanbanInstance 看板实例
-     */
-    private void generateParameters(@NotEmpty("kanbanInstance") KanbanInstance kanbanInstance) {
-        Kanban kanban = checkKanban(kanbanInstance.getKanbanCode());
-        List<String> templateCodes = kanban.getTemplateCodes();
-        List<Template> templates = templateDao.findIn(templateCodes);
-        Map<String, List<TemplateParameter>> parameters = new HashMap<>();
-        List<GlobalParameter> globalParameters = new ArrayList<>();
-        Set<String> globalParameterCodeSet = new HashSet<>();
-        for (Template template : templates) {
-            // 提取公共参数
-            List<String> globalParameterCodes = template.getGlobalParameterCodes();
-            if (!CollectionUtils.isEmpty(globalParameterCodes)) {
-                for (String globalParameterCode : globalParameterCodes) {
-                    if (!globalParameterCodeSet.contains(globalParameterCode)) {
-                        globalParameterCodeSet.add(globalParameterCode);
-                        GlobalParameter globalParameter = checkGlobalParameter(globalParameterCode);
-                        globalParameter.mayInitValue();
-                        // 如果是 SQL 类型,需要解析公共参数
-                        if (globalParameter.getType() == Type.SQL) {
-                            try {
-                                NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(template.getDataSourceCode());
-                                List<Map<String, Object>> listMap = jdbc.listMap(String.valueOf(globalParameter.getValue()));
-                                if (listMap == null) {
-                                    listMap = new ArrayList<>();
-                                }
-                                globalParameter.setValue(JSONObject.toJSONString(listMap));
-                            } catch (SQLException e) {
-                                throw new IllegalStateException("公共参数解析错误", e);
-                            }
-                        }
-                        globalParameters.add(globalParameter);
-                    }
-                }
-            }
-            List<TemplateParameter> templateParameters = template.fromParameters();
-            // 如果模版没有参数,则不为其生成看板实例参数
-            if (!CollectionUtils.isEmpty(templateParameters)) {
-                parameters.put(template.getCode(), templateParameters);
-            }
-        }
-        if (!CollectionUtils.isEmpty(globalParameters)) {
-            kanbanInstance.toGlobalParameters(globalParameters);
-        }
-        if (!CollectionUtils.isEmpty(parameters)) {
-            kanbanInstance.setParameters(parameters);
-        }
-    }
-
-    /**
-     * 检查看板是否存在
-     *
-     * @param kanbanCode 看板的 code
-     * @return 看板
-     * @throws IllegalArgumentException 看板不存在时报错
-     */
-    private Kanban checkKanban(String kanbanCode) throws IllegalArgumentException {
-        if (StringUtils.isEmpty(kanbanCode)) {
-            throw new IllegalArgumentException("未指定看板 code");
-        }
-        Kanban kanban = kanbanDao.findOne(kanbanCode);
-        if (kanban == null) {
-            throw new IllegalArgumentException("看板不存在:" + kanbanCode);
-        }
-        return kanban;
-    }
-
-    /**
-     * 初始化切换频率
-     *
-     * @param kanbanInstance 看板实例
-     */
-    private void initSwitchFrequence(@NotEmpty("kanbanInstance") KanbanInstance kanbanInstance)
-            throws IllegalArgumentException {
-        Kanban kanban = checkKanban(kanbanInstance.getKanbanCode());
-        switch (kanban.getDisplay()) {
-            case AutoSwitch:
-                if (kanbanInstance.getSwitchFrequency() == null) {
-                    kanbanInstance.setSwitchFrequency(KanbanInstance.DEFAULT_SWITCH_FREQUENCY);
-                }
-                break;
-            case SplitScreen:
-                if (kanbanInstance.getSwitchFrequency() != null) {
-                    kanbanInstance.setSwitchFrequency(null);
-                }
-                break;
-        }
-    }
-
-    /**
-     * 检查公共参数是否存在
-     *
-     * @param globalParameterCode 公共参数的 code
-     * @return 公共参数
-     * @throws IllegalArgumentException 公共参数不存在时报错
-     */
-    private GlobalParameter checkGlobalParameter(@NotEmpty("globalParameterCode") String globalParameterCode) {
-        GlobalParameter globalParameter = globalParameterDao.findOne(globalParameterCode);
-        if (globalParameter == null) {
-            throw new IllegalArgumentException("公共参数不存在:" + globalParameterCode);
-        }
-        return globalParameter;
-    }
-
-    @Override
-    public Map<String, Object> parseData(@NotEmpty("code") String code, String templateCode) {
-        KanbanInstance kanbanInstance = kanbanInstanceDao.findOne(code);
-        if (kanbanInstance == null) {
-            throw new IllegalStateException("看板实例不存在");
-        }
-        Kanban kanban = checkKanban(kanbanInstance.getKanbanCode());
-        List<String> templateCodes = kanban.getTemplateCodes();
-        // 如果指定了模版,则解析该模版,否则解析该看板下的第一个模版
-        if (!StringUtils.isEmpty(templateCode)) {
-            if (!templateCodes.contains(templateCode)) {
-                throw new IllegalArgumentException("看板下未绑定该模版:" + templateCode);
-            }
-        } else {
-            templateCode = templateCodes.get(0);
-        }
-        Template template = templateDao.findOne(templateCode);
-        if (template == null) {
-            throw new IllegalStateException("模版不存在:" + templateCode);
-        }
-        Map<String, List<TemplateParameter>> parameters = kanbanInstance.getParameters();
-        List<TemplateParameter> templateParameters = parameters == null ? null : parameters.get(templateCode);
-        if (!CollectionUtils.isEmpty(templateParameters)) {
-            // 检查模版参数是否正确填写(必填参数都填写了,并且参数值的类型都相符)
-            for (TemplateParameter templateParameter : templateParameters) {
-                templateParameter.checkValue();
-            }
-        }
-        String content = template.getContent();
-        String title = template.getTitle();
-        if (StringUtils.isEmpty(content)) {
-            throw new IllegalStateException("模版内容为空:" + templateCode);
-        }
-        List<GlobalParameter> globalParameters = kanbanInstance.fromGlobalParameters();
-        // 解析模版
-        String templateContent;
-        try {
-            NewbieJdbcSupport jdbc = dataSourceManager.getJdbc(template.getDataSourceCode());
-            templateContent = templateParser.parseXml(content, title, globalParameters, jdbc);
-        } catch (DocumentException e) {
-            throw new IllegalStateException("xml 解析出错", e);
-        } catch (TransformerException e) {
-            throw new IllegalStateException("xml 映射出错", e);
-        } catch (IOException e) {
-            throw new IllegalStateException("xml 转换出错", e);
-        } catch (SQLException e) {
-            throw new IllegalStateException("数据库连接错误", e);
-        }
-        Map<String, Object> result = new HashMap<>();
-        Map<String, Object> instance = new HashMap<>();
-        instance.put("display", kanban.getDisplay());
-        instance.put("globalParameters", globalParameters);
-        instance.put("templateCodes", kanban.getTemplateCodes());
-        instance.put("switchFrequency", kanbanInstance.getSwitchFrequency());
-        instance.put("refreshFrequency", kanbanInstance.getRefreshFrequency());
-        result.put("instance", instance);
-        List<JSONObject> data = new ArrayList<>();
-        data.add(JSONObject.parseObject(templateContent));
-        result.put("data", data);
-        // TODO 多个模版返回的json
-        return result;
-    }
-
-    @Override
-    public int deleteByKanbanCodes(@NotEmpty("kanbanCodes") List<String> kanbanCodes) {
-        Query<KanbanInstance> query = kanbanInstanceDao.createQuery().field("kanbanCode").in(kanbanCodes);
-        return kanbanInstanceDao.delete(query);
-    }
-
-    @Override
-    public KanbanInstance getByKanbanCode(@NotEmpty("kanbanCode") String kanbanCode) throws IllegalStateException {
-        Query<KanbanInstance> query = kanbanInstanceDao.createQuery().field("kanbanCode").equal(kanbanCode);
-        if (query.count() > 1) {
-            throw new IllegalStateException("找到多个看板实例");
-        }
-        return query.get();
-    }
-
-    @Override
-    public KanbanInstance openKanbanInstance(@NotEmpty("kanbanCode") String kanbanCode) throws IllegalStateException {
-        // TODO 检查模版、参数等是否有更改
-        KanbanInstance kanbanInstance = getByKanbanCode(kanbanCode);
-        // 如果有创建的实例,返回该实例,如果没有,提取参数等之后返回
-        if (kanbanInstance == null) {
-            kanbanInstance = new KanbanInstance();
-            kanbanInstance.setKanbanCode(kanbanCode);
-            initSwitchFrequence(kanbanInstance);
-            kanbanInstance.setRefreshFrequency(KanbanInstance.DEFAULT_REFRESH_FREQUENCY);
-            // 生成相应的看板实例参数
-            generateParameters(kanbanInstance);
-        }
-        return kanbanInstance;
-    }
-
-}

+ 0 - 153
kanban-console/src/main/java/com/uas/kanban/service/impl/KanbanServiceImpl.java

@@ -1,153 +0,0 @@
-package com.uas.kanban.service.impl;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseService;
-import com.uas.kanban.base.PageResult;
-import com.uas.kanban.dao.KanbanDao;
-import com.uas.kanban.dao.ResourcePointDao;
-import com.uas.kanban.dao.TemplateDao;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.Kanban;
-import com.uas.kanban.model.Kanban.Display;
-import com.uas.kanban.model.ResourcePoint;
-import com.uas.kanban.model.Template;
-import com.uas.kanban.service.KanbanInstanceService;
-import com.uas.kanban.service.TemplateService;
-import com.uas.kanban.support.SystemSession;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- * 看板
- *
- * @author sunyj
- * @since 2017年9月3日 下午4:25:43
- */
-@Service
-public class KanbanServiceImpl extends BaseService<Kanban> {
-
-    @Autowired
-    private KanbanDao kanbanDao;
-
-    @Autowired
-    private TemplateDao templateDao;
-
-    @Autowired
-    private ResourcePointDao resourcePointDao;
-
-    @Autowired
-    private TemplateService templateService;
-
-    @Autowired
-    private KanbanInstanceService kanbanInstanceService;
-
-    @Override
-    public Kanban save(@NotEmpty("json") String json) {
-        Kanban kanban = kanbanDao.parse(json);
-        String resourcePointCode = kanban.getResourcePointCode();
-        checkResourcePoint(resourcePointCode);
-        checkTemplates(resourcePointCode, kanban.getTemplateCodes());
-        if (kanban.getDisplay() == null) {
-            kanban.setDisplay(Display.AutoSwitch);
-        }
-        return kanbanDao.save(kanban);
-    }
-
-    @Override
-    public Kanban savePart(@NotEmpty("json") String json) {
-        return save(json);
-    }
-
-    @Override
-    public int update(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        Kanban kanban = kanbanDao.parse(json);
-        String resourcePointCode = kanban.getResourcePointCode();
-        checkResourcePoint(resourcePointCode);
-        checkTemplates(resourcePointCode, kanban.getTemplateCodes());
-        kanban.setUserCode(SystemSession.checkUser().getCode());
-        // 先删除有关联的看板实例
-        kanbanInstanceService.deleteByKanbanCodes(Collections.singletonList(kanban.getCode()));
-        return kanbanDao.update(kanban);
-    }
-
-    @Override
-    public int updatePart(String json) throws IllegalArgumentException, OperationException {
-        return update(json);
-    }
-
-    @Override
-    public int deleteOne(@NotEmpty("code") String code) throws OperationException {
-        // 先删除有关联的看板实例
-        kanbanInstanceService.deleteByKanbanCodes(Collections.singletonList(code));
-        return super.deleteOne(code);
-    }
-
-    @Override
-    public int deleteAll() {
-        // 先删除有关联的看板实例
-        int page = PageResult.PAGE_INDEX;
-        int size = 1000;
-        PageResult<Kanban> pageResult = super.get(page, size);
-        while (page <= pageResult.getTotalPage()) {
-            List<Kanban> content = pageResult.getContent();
-            List<String> kanbanCodes = new ArrayList<>();
-            for (Kanban kanban : content) {
-                kanbanCodes.add(kanban.getCode());
-            }
-            if (!CollectionUtils.isEmpty(kanbanCodes)) {
-                kanbanInstanceService.deleteByKanbanCodes(kanbanCodes);
-            }
-            page++;
-        }
-        return super.deleteAll();
-    }
-
-    /**
-     * 检查资源点是否存在
-     *
-     * @param resourcePointCode 资源点 code
-     * @throws IllegalArgumentException 资源点不存在
-     */
-    private void checkResourcePoint(String resourcePointCode) {
-        if (StringUtils.isEmpty(resourcePointCode)) {
-            return;
-        }
-        ResourcePoint resourcePoint = resourcePointDao.findOne(resourcePointCode);
-        if (resourcePoint == null) {
-            throw new IllegalArgumentException("资源点不存在:" + resourcePointCode);
-        }
-    }
-
-    /**
-     * 检查模版是否存在
-     *
-     * @param templateCodes 模版的 code
-     * @throws IllegalArgumentException 模版不存在
-     */
-    private void checkTemplates(String resourcePointCode, List<String> templateCodes) throws IllegalArgumentException {
-        if (CollectionUtils.isEmpty(templateCodes)) {
-            return;
-        }
-        for (String templateCode : templateCodes) {
-            if (templateCodes.indexOf(templateCode) != templateCodes.lastIndexOf(templateCode)) {
-                throw new IllegalArgumentException("模版重复:" + templateCode);
-            }
-            Template template;
-            if (!StringUtils.isEmpty(resourcePointCode)) {
-                template = templateService.getByResourcePointCode(templateCode, resourcePointCode);
-            } else {
-                template = templateDao.findOne(templateCode);
-            }
-            if (template == null) {
-                throw new IllegalArgumentException("模版不存在:" + templateCode);
-            }
-        }
-    }
-
-}

+ 0 - 242
kanban-console/src/main/java/com/uas/kanban/service/impl/TemplateServiceImpl.java

@@ -1,242 +0,0 @@
-package com.uas.kanban.service.impl;
-
-import com.uas.kanban.annotation.NotEmpty;
-import com.uas.kanban.base.BaseService;
-import com.uas.kanban.dao.DataSourceDao;
-import com.uas.kanban.dao.GlobalParameterDao;
-import com.uas.kanban.dao.ResourcePointDao;
-import com.uas.kanban.dao.TemplateDao;
-import com.uas.kanban.exception.OperationException;
-import com.uas.kanban.model.*;
-import com.uas.kanban.service.TemplateService;
-import com.uas.kanban.util.CollectionUtils;
-import com.uas.kanban.util.StringUtils;
-import org.mongodb.morphia.query.Query;
-import org.mongodb.morphia.query.UpdateOperations;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * 模版
- *
- * @author sunyj
- * @since 2017年9月2日 下午6:54:58
- */
-@Service
-public class TemplateServiceImpl extends BaseService<Template> implements TemplateService {
-
-    @Autowired
-    private TemplateDao templateDao;
-
-    @Autowired
-    private DataSourceDao dataSourceDao;
-
-    @Autowired
-    private GlobalParameterDao globalParameterDao;
-
-    @Autowired
-    private ResourcePointDao resourePointDao;
-
-    @Override
-    public Template save(@NotEmpty("json") String json) {
-        Template template = templateDao.parse(json);
-        checkDataSource(template.getDataSourceCode());
-        checkGlobalParameters(template.getGlobalParameterCodes());
-        // 保存时,不允许指定参数的 code
-        List<TemplateParameter> parameters = template.fromParameters();
-        if (!CollectionUtils.isEmpty(parameters)) {
-            for (TemplateParameter parameter : parameters) {
-                parameter.init();
-            }
-        }
-        return templateDao.save(template);
-    }
-
-    @Override
-    public Template savePart(String json) {
-        Template template = templateDao.parse(json);
-        // 可以不指定数据源
-        String dataSourceCode = template.getDataSourceCode();
-        if (!StringUtils.isEmpty(dataSourceCode)) {
-            checkDataSource(template.getDataSourceCode());
-        }
-        checkGlobalParameters(template.getGlobalParameterCodes());
-        // 保存时,不允许指定参数的 code
-        List<TemplateParameter> parameters = template.fromParameters();
-        if (!CollectionUtils.isEmpty(parameters)) {
-            for (TemplateParameter parameter : parameters) {
-                parameter.init();
-            }
-        }
-        return templateDao.savePart(template);
-    }
-
-    @Override
-    public int update(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        Template template = templateDao.parse(json);
-        String code = template.codeNotEmpty();
-        checkDataSource(template.getDataSourceCode());
-        checkGlobalParameters(template.getGlobalParameterCodes());
-        List<TemplateParameter> parameters = template.fromParameters();
-        if (!CollectionUtils.isEmpty(parameters)) {
-            throw new OperationException("请单独更新模版参数");
-        }
-        Set<String> ignoreFields = new HashSet<>();
-        // 不更新模版参数
-        ignoreFields.add("parameters");
-        UpdateOperations<Template> operations = templateDao.createUpdateOperations(template, ignoreFields);
-        return templateDao.update(code, operations);
-    }
-
-    @Override
-    public int updatePart(@NotEmpty("json") String json) throws IllegalArgumentException, OperationException {
-        Template template = templateDao.parse(json);
-        // 可以不指定数据源
-        String dataSourceCode = template.getDataSourceCode();
-        if (!StringUtils.isEmpty(dataSourceCode)) {
-            checkDataSource(template.getDataSourceCode());
-        }
-        checkGlobalParameters(template.getGlobalParameterCodes());
-        List<TemplateParameter> parameters = template.fromParameters();
-        if (!CollectionUtils.isEmpty(parameters)) {
-            throw new OperationException("请单独更新模版参数");
-        }
-        return templateDao.updatePart(json);
-    }
-
-    /**
-     * 检查数据源是否存在
-     *
-     * @param dataSourceCode 数据源的 code
-     * @throws IllegalArgumentException 数据源不存在
-     */
-    private void checkDataSource(@NotEmpty("dataSourceCode") String dataSourceCode) throws IllegalArgumentException {
-        DataSource dataSource = dataSourceDao.findOne(dataSourceCode);
-        if (dataSource == null) {
-            throw new IllegalArgumentException("数据源不存在:" + dataSourceCode);
-        }
-    }
-
-    /**
-     * 检查公共参数是否存在
-     *
-     * @param globalParameterCodes 公共参数的 code
-     * @throws IllegalArgumentException 公共参数不存在
-     */
-    private void checkGlobalParameters(List<String> globalParameterCodes) throws IllegalArgumentException {
-        if (!CollectionUtils.isEmpty(globalParameterCodes)) {
-            for (String globalParameterCode : globalParameterCodes) {
-                GlobalParameter globalParameter = globalParameterDao.findOne(globalParameterCode);
-                if (globalParameter == null) {
-                    throw new IllegalArgumentException("公共参数不存在:" + globalParameterCode);
-                }
-            }
-        }
-    }
-
-    @Override
-    public List<Template> getByResourcePointCode(@NotEmpty("resourcePointCode") String resourcePointCode) {
-        ResourcePoint resourcePoint = resourePointDao.findOne(resourcePointCode);
-        if (resourcePoint == null) {
-            throw new IllegalStateException("资源点不存在:" + resourcePointCode);
-        }
-        // 资源点所能查看的模版
-        List<String> resourcePointCodes = resourcePoint.getTemplateCodes();
-        if (CollectionUtils.isEmpty(resourcePointCodes)) {
-            return null;
-        }
-        return templateDao.findListBy("code", resourcePointCodes);
-    }
-
-    @Override
-    public Template getByResourcePointCode(@NotEmpty("code") String code, @NotEmpty("resourcePointCode") String resourcePointCode) {
-        ResourcePoint resourcePoint = resourePointDao.findOne(resourcePointCode);
-        if (resourcePoint == null) {
-            throw new IllegalStateException("资源点不存在:" + resourcePointCode);
-        }
-        // 资源点所能查看的模版
-        List<String> resourcePointCodes = resourcePoint.getTemplateCodes();
-        if (CollectionUtils.isEmpty(resourcePointCodes)) {
-            return null;
-        }
-        if (!resourcePointCodes.contains(code)) {
-            throw new IllegalArgumentException("该资源点 " + resourcePoint.getName() + " 未分配该模版:" + code);
-        }
-        return templateDao.findOne(code);
-    }
-
-    @Override
-    public int addParameter(@NotEmpty("code") String code, @NotEmpty("parameter") TemplateParameter parameter) {
-        parameter.init();
-        templateDao.checkFields(parameter);
-        UpdateOperations<Template> operations = templateDao.createUpdateOperations();
-        operations.addToSet("parameters", parameter);
-        return templateDao.update(code, operations);
-    }
-
-    @Override
-    public int deleteParameter(@NotEmpty("code") String code, @NotEmpty("parameterCode") String parameterCode)
-            throws IllegalStateException, IllegalArgumentException, OperationException {
-        // 先获取模版
-        Template template = getTemplate(code, parameterCode);
-        if (template == null) {
-            return 0;
-        }
-        List<TemplateParameter> parameters = template.fromParameters();
-        // 删除获取到的模版的指定参数,再更新到数据库
-        for (int i = parameters.size() - 1; i >= 0; i--) {
-            TemplateParameter parameter = parameters.get(i);
-            if (parameterCode.equals(parameter.getCode())) {
-                parameters.remove(i);
-            }
-        }
-        return templateDao.update(template);
-    }
-
-    /**
-     * 根据模版的 code 和模版参数的 code 获取模版
-     *
-     * @param code          模版的 code
-     * @param parameterCode 模版参数的 code
-     * @return 模版
-     */
-    private Template getTemplate(@NotEmpty("code") String code, @NotEmpty("parameterCode") String parameterCode)
-            throws IllegalStateException {
-        Query<Template> query = templateDao.createQuery();
-        query.field("code").equal(code);
-        query.field("parameters.code").equal(parameterCode);
-        List<Template> templates = templateDao.find(query);
-        if (CollectionUtils.isEmpty(templates)) {
-            return null;
-        } else if (templates.size() > 1) {
-            throw new IllegalStateException("存在不止一个模版");
-        }
-        return templates.get(0);
-    }
-
-    @Override
-    public int updateParameter(@NotEmpty("code") String code, @NotEmpty("parameter") TemplateParameter parameter)
-            throws IllegalStateException, IllegalArgumentException, OperationException {
-        String parameterCode = parameter.getCode();
-        templateDao.checkFields(parameter);
-        // 先获取模版
-        Template template = getTemplate(code, parameterCode);
-        if (template == null) {
-            return 0;
-        }
-        List<TemplateParameter> parameters = template.fromParameters();
-        // 删除获取到的模版的指定参数,再更新到数据库
-        for (int i = parameters.size() - 1; i >= 0; i--) {
-            TemplateParameter templateParameter = parameters.get(i);
-            if (parameterCode.equals(templateParameter.getCode())) {
-                parameters.set(i, parameter);
-            }
-        }
-        return templateDao.update(template);
-    }
-
-}