zhouhao пре 7 година
родитељ
комит
ccc1a8654d
13 измењених фајлова са 147 додато и 24 уклоњено
  1. 12 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java
  2. 20 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relation.java
  3. 3 3
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java
  4. 26 3
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-controller/src/main/java/org/hswebframework/web/controller/organizational/PersonController.java
  5. 1 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/DepartmentEntity.java
  6. 2 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/OrganizationalEntity.java
  7. 2 1
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/PersonPositionEntity.java
  8. 7 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/pom.xml
  9. 2 0
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/PersonService.java
  10. 4 2
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/RelationInfoService.java
  11. 0 6
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/pom.xml
  12. 24 8
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java
  13. 44 1
      hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java

+ 12 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/PersonnelAuthorization.java

@@ -64,26 +64,31 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 人员所在行政区域ID, 只返回根节点, 永远不会返回{@code null}
      */
+    @Deprecated
     Set<TreeNode<String>> getDistrictIds();
 
     /**
      * @return 人员所在机构ID, 只返回根节点, 永远不会返回{@code null}
      */
+    @Deprecated
     Set<TreeNode<String>> getOrgIds();
 
     /**
      * @return 人员职务ID, 只返回根节点, 永远不会返回{@code null}
      */
+    @Deprecated
     Set<TreeNode<String>> getPositionIds();
 
     /**
      * @return 人员所在部门ID, 只返回根节点, 永远不会返回{@code null}
      */
+    @Deprecated
     Set<TreeNode<String>> getDepartmentIds();
 
     /**
      * @return 根地区ID
      */
+    @Deprecated
     default Set<String> getRootDistrictId() {
         return getDistrictIds().stream().map(TreeNode::getValue).collect(Collectors.toSet());
     }
@@ -91,6 +96,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 根机构ID
      */
+    @Deprecated
     default Set<String> getRootOrgId() {
         return getOrgIds().stream().map(TreeNode::getValue).collect(Collectors.toSet());
     }
@@ -98,6 +104,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 根职位ID
      */
+    @Deprecated
     default Set<String> getRootPositionId() {
         return getPositionIds().stream().map(TreeNode::getValue).collect(Collectors.toSet());
     }
@@ -105,6 +112,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 根部门ID
      */
+    @Deprecated
     default Set<String> getRootDepartmentId() {
         return getDepartmentIds().stream().map(TreeNode::getValue).collect(Collectors.toSet());
     }
@@ -112,6 +120,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 所有地区ID
      */
+    @Deprecated
     default Set<String> getAllDistrictId() {
         return getDistrictIds().stream().map(TreeNode::getAllValue).flatMap(List::stream).collect(Collectors.toSet());
     }
@@ -119,6 +128,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 所有机构ID
      */
+    @Deprecated
     default Set<String> getAllOrgId() {
         return getOrgIds().stream().map(TreeNode::getAllValue).flatMap(List::stream).collect(Collectors.toSet());
     }
@@ -126,6 +136,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 所有职位ID
      */
+    @Deprecated
     default Set<String> getAllPositionId() {
         return getPositionIds().stream().map(TreeNode::getAllValue).flatMap(List::stream).collect(Collectors.toSet());
     }
@@ -133,6 +144,7 @@ public interface PersonnelAuthorization extends Serializable {
     /**
      * @return 所有部门ID
      */
+    @Deprecated
     default Set<String> getAllDepartmentId() {
         return getDepartmentIds().stream().map(TreeNode::getAllValue).flatMap(List::stream).collect(Collectors.toSet());
     }

+ 20 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relation.java

@@ -11,6 +11,26 @@ import java.io.Serializable;
  */
 public interface Relation extends Serializable {
 
+    /**
+     * 默认类型:机构
+     */
+    String TYPE_ORG = "org";
+
+    /**
+     * 默认类型:部门
+     */
+    String TYPE_DEPARTMENT = "department";
+
+    /**
+     * 默认类型:岗位
+     */
+    String TYPE_POSITION = "position";
+
+    /**
+     * 默认类型:人员
+     */
+    String TYPE_PERSON = "person";
+
     /**
      * @return 关系类型,如:person,department
      */

+ 3 - 3
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-authorization/src/main/java/org/hswebframework/web/organizational/authorization/relation/Relations.java

@@ -113,8 +113,8 @@ public interface Relations extends Serializable {
      * @param relation 关系标识,如: leader
      * @return 关系信息集合,如果关系不存在,返回空集合
      */
-    default List<Relation> findRev(String relation) {
-        return find(relation, Relation.Direction.REVERSE);
+    default List<Relation> findPos(String relation) {
+        return find(relation, Relation.Direction.POSITIVE);
     }
 
     /**
@@ -123,7 +123,7 @@ public interface Relations extends Serializable {
      * @param relation 关系标识,如: leader
      * @return 关系信息集合,如果关系不存在,返回空集合
      */
-    default List<Relation> findPos(String relation) {
+    default List<Relation> findRev(String relation) {
         return find(relation, Relation.Direction.REVERSE);
     }
 

+ 26 - 3
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-controller/src/main/java/org/hswebframework/web/controller/organizational/PersonController.java

@@ -26,13 +26,14 @@ import org.hswebframework.web.controller.GenericEntityController;
 import org.hswebframework.web.controller.SimpleGenericEntityController;
 import org.hswebframework.web.controller.message.ResponseMessage;
 import org.hswebframework.web.entity.organizational.DepartmentEntity;
+import org.hswebframework.web.entity.organizational.PersonAuthBindEntity;
 import org.hswebframework.web.entity.organizational.PersonEntity;
 import org.hswebframework.web.entity.organizational.PositionEntity;
 import org.hswebframework.web.logging.AccessLogger;
 import org.hswebframework.web.service.organizational.PersonService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
 
 /**
  * 人员
@@ -58,9 +59,31 @@ public class PersonController implements SimpleGenericEntityController<PersonEnt
     }
 
     @Override
-    @RequiresDataAccess(permission = "person", action = Permission.ACTION_QUERY)
     public ResponseMessage<PagerResult<PersonEntity>> list(QueryParamEntity param) {
         return SimpleGenericEntityController.super.list(param);
     }
 
+    @GetMapping("/{id}/detail")
+    @AccessLogger("查看人员详情")
+    @Authorize(action = Permission.ACTION_GET)
+    public ResponseMessage<PersonAuthBindEntity> getDetail(@PathVariable String id) {
+        return ResponseMessage.ok(personService.selectAuthBindByPk(id));
+    }
+
+    @PostMapping("/detail")
+    @AccessLogger("新增人员信息,并关联用户信息")
+    @Authorize(action = Permission.ACTION_ADD)
+    @ResponseStatus(HttpStatus.CREATED)
+    public ResponseMessage<String> getDetail(@RequestBody PersonAuthBindEntity bindEntity) {
+        return ResponseMessage.ok(personService.insert(bindEntity));
+    }
+
+    @PostMapping("/{id}/detail")
+    @AccessLogger("修改人员信息,并关联用户信息")
+    @Authorize(action = Permission.ACTION_UPDATE)
+    public ResponseMessage<String> getDetail(@PathVariable String id, @RequestBody PersonAuthBindEntity bindEntity) {
+        bindEntity.setId(id);
+        personService.updateByPk(bindEntity);
+        return ResponseMessage.ok();
+    }
 }

+ 1 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/DepartmentEntity.java

@@ -38,6 +38,7 @@ public interface DepartmentEntity extends TreeSortSupportEntity<String>, OrgAtta
     /**
      * 所在组织id
      */
+    @Deprecated
     String orgId     = "orgId";
     /**
      * 部门编码

+ 2 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/OrganizationalEntity.java

@@ -101,11 +101,13 @@ public interface OrganizationalEntity extends TreeSortSupportEntity<String>, Dis
     /**
      * @return 可选角色
      */
+    @Deprecated
     java.util.List<String> getOptionalRoles();
 
     /**
      * 设置 可选角色
      */
+    @Deprecated
     void setOptionalRoles(java.util.List<String> optionalRoles);
 
     void setChildren(List<OrganizationalEntity> children);

+ 2 - 1
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-entity/src/main/java/org/hswebframework/web/entity/organizational/PersonPositionEntity.java

@@ -16,15 +16,16 @@
  */
 package org.hswebframework.web.entity.organizational;
 
-import org.hswebframework.web.commons.entity.Entity;
 import org.hswebframework.web.entity.organizational.authorization.PersonAttachEntity;
 import org.hswebframework.web.entity.organizational.authorization.PositionAttachEntity;
 
 /**
  * 人员职位关联 实体
+ * 即将使用 {@link RelationInfoEntity} 进行替代
  *
  * @author hsweb-generator-online
  */
+@Deprecated
 public interface PersonPositionEntity extends PersonAttachEntity, PositionAttachEntity {
  /*-------------------------------------------
     |               属性名常量               |

+ 7 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/pom.xml

@@ -33,6 +33,13 @@
             <artifactId>hsweb-commons-service-api</artifactId>
             <version>${project.version}</version>
         </dependency>
+
+        <dependency>
+            <groupId>org.hswebframework.web</groupId>
+            <artifactId>hsweb-system-organizational-authorization</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+
         <dependency>
             <groupId>org.hswebframework.web</groupId>
             <artifactId>hsweb-system-organizational-dao-api</artifactId>

+ 2 - 0
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/PersonService.java

@@ -20,6 +20,8 @@ import org.hswebframework.web.entity.organizational.PersonAuthBindEntity;
 import org.hswebframework.web.entity.organizational.PersonEntity;
 import org.hswebframework.web.service.CrudService;
 
+import java.util.List;
+
 /**
  * 人员 服务类
  *

+ 4 - 2
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-api/src/main/java/org/hswebframework/web/service/organizational/RelationInfoService.java

@@ -1,13 +1,15 @@
 package org.hswebframework.web.service.organizational;
 
 import org.hswebframework.web.entity.organizational.RelationInfoEntity;
+import org.hswebframework.web.organizational.authorization.relation.Relations;
 import org.hswebframework.web.service.CrudService;
 
+
 /**
- *  关系信息 服务类
+ * 关系信息 服务类
  *
  * @author hsweb-generator-online
  */
 public interface RelationInfoService extends CrudService<RelationInfoEntity, String> {
-
+    Relations getRelations(String relationTypeFrom, String relationFrom);
 }

+ 0 - 6
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/pom.xml

@@ -39,12 +39,6 @@
             <version>${project.version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>org.hswebframework.web</groupId>
-            <artifactId>hsweb-system-organizational-authorization</artifactId>
-            <version>${project.version}</version>
-        </dependency>
-
         <dependency>
             <groupId>org.hswebframework.web</groupId>
             <artifactId>hsweb-system-authorization-service-api</artifactId>

+ 24 - 8
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimplePersonService.java

@@ -42,7 +42,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheConfig;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
+import org.springframework.cache.annotation.Caching;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.*;
 import java.util.function.BiConsumer;
@@ -81,6 +83,9 @@ public class SimplePersonService extends EnableCacheGenericEntityService<PersonE
     @Autowired
     private OrganizationalDao organizationalDao;
 
+    @Autowired
+    private DistrictDao districtDao;
+
     @Autowired(required = false)
     private UserService userService;
 
@@ -98,7 +103,10 @@ public class SimplePersonService extends EnableCacheGenericEntityService<PersonE
     }
 
     @Override
-    @CacheEvict(allEntries = true)
+    @Caching(evict = {
+            @CacheEvict(key = "'id:'+#result"),
+            @CacheEvict(key = "'auth-bind'+#result")
+    })
     public String insert(PersonAuthBindEntity authBindEntity) {
         authBindEntity.setStatus(DataStatus.STATUS_ENABLED);
         // TODO: 17-6-1 应该使用锁,防止并发同步用户,导致多个人员使用相同的用户
@@ -113,7 +121,10 @@ public class SimplePersonService extends EnableCacheGenericEntityService<PersonE
     }
 
     @Override
-    @CacheEvict(allEntries = true)
+    @Caching(evict = {
+            @CacheEvict(key = "'id:'+#authBindEntity.id"),
+            @CacheEvict(key = "'auth-bind'+#authBindEntity.id")
+    })
     public int updateByPk(PersonAuthBindEntity authBindEntity) {
         // TODO: 17-6-1 应该使用锁,防止并发同步用户,导致多个人员使用相同的用户
         if (authBindEntity.getPositionIds() != null) {
@@ -240,15 +251,21 @@ public class SimplePersonService extends EnableCacheGenericEntityService<PersonE
         List<PositionEntity> positionEntities = getAllChildrenAndReturnRootNode(positionDao, positionIds, PositionEntity::setChildren, rootPosList -> {
             //根据职位获取部门
             Set<String> departmentIds = rootPosList.stream().map(PositionEntity::getDepartmentId).collect(Collectors.toSet());
-            if (null != departmentIds && !departmentIds.isEmpty()) {
+            if (!CollectionUtils.isEmpty(departmentIds)) {
                 List<DepartmentEntity> departmentEntities = getAllChildrenAndReturnRootNode(departmentDao, departmentIds, DepartmentEntity::setChildren, rootDepList -> {
                     //根据部门获取机构
                     Set<String> orgIds = rootDepList.stream().map(DepartmentEntity::getOrgId).collect(Collectors.toSet());
-                    if (null != orgIds && !orgIds.isEmpty()) {
+                    if (!CollectionUtils.isEmpty(orgIds)) {
                         List<OrganizationalEntity> orgEntities = getAllChildrenAndReturnRootNode(organizationalDao, orgIds, OrganizationalEntity::setChildren, rootOrgList -> {
-                            //根据机构获取地区
-                            // TODO: 17-5-25
-
+                            //根据机构获取行政区域
+                            Set<String> districtIds = rootOrgList.stream().map(OrganizationalEntity::getDistrictId).filter(Objects::nonNull).collect(Collectors.toSet());
+                            if (!CollectionUtils.isEmpty(districtIds)) {
+                                List<DistrictEntity> districtEntities =
+                                        getAllChildrenAndReturnRootNode(districtDao, districtIds, DistrictEntity::setChildren, rootDistrictList -> {
+
+                                        });
+                                authorization.setDistrictIds(transformationTreeNode(null, districtEntities));
+                            }
                         });
                         authorization.setOrgIds(transformationTreeNode(null, orgEntities));
                     }
@@ -268,7 +285,6 @@ public class SimplePersonService extends EnableCacheGenericEntityService<PersonE
                     SimpleRelation relation = new SimpleRelation();
                     relation.setType(info.getRelationTypeFrom());
                     relation.setTarget(info.getRelationTo());
-                    //info.getRelationId() ->
                     relation.setRelation(info.getRelationId());
                     if (personId.equals(info.getRelationFrom())) {
                         relation.setDirection(Relation.Direction.POSITIVE);

+ 44 - 1
hsweb-system/hsweb-system-organizational/hsweb-system-organizational-service/hsweb-system-organizational-service-simple/src/main/java/org/hswebframework/web/service/organizational/simple/SimpleRelationInfoService.java

@@ -2,12 +2,21 @@ package org.hswebframework.web.service.organizational.simple;
 
 import org.hswebframework.web.dao.organizational.RelationInfoDao;
 import org.hswebframework.web.entity.organizational.RelationInfoEntity;
+import org.hswebframework.web.organizational.authorization.relation.Relation;
+import org.hswebframework.web.organizational.authorization.relation.Relations;
+import org.hswebframework.web.organizational.authorization.relation.SimpleRelation;
+import org.hswebframework.web.organizational.authorization.relation.SimpleRelations;
+import org.hswebframework.web.service.DefaultDSLQueryService;
 import org.hswebframework.web.service.GenericEntityService;
 import org.hswebframework.web.id.IDGenerator;
 import org.hswebframework.web.service.organizational.RelationInfoService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
 /**
  * 默认的服务实现
  *
@@ -18,13 +27,47 @@ public class SimpleRelationInfoService extends GenericEntityService<RelationInfo
         implements RelationInfoService {
     @Autowired
     private RelationInfoDao relationInfoDao;
-   @Override
+
+    @Override
     protected IDGenerator<String> getIDGenerator() {
         return IDGenerator.MD5;
     }
+
     @Override
     public RelationInfoDao getDao() {
         return relationInfoDao;
     }
 
+    @Override
+    public Relations getRelations(String relationTypeFrom, String target) {
+        Objects.requireNonNull(relationTypeFrom);
+        Objects.requireNonNull(target);
+        //获取关系
+        List<RelationInfoEntity> relationInfoList = DefaultDSLQueryService.createQuery(relationInfoDao)
+                //where type_from='person' and(relation_from='personId' or relation_to='personId')
+                .where(RelationInfoEntity.relationTypeFrom, relationTypeFrom)
+                .nest()
+                .is(RelationInfoEntity.relationFrom, target)
+                .or(RelationInfoEntity.relationTo, target)
+                .end()
+                .listNoPaging();
+
+        List<Relation> relations = relationInfoList.stream()
+                .map(info -> {
+                    SimpleRelation relation = new SimpleRelation();
+                    relation.setType(info.getRelationTypeFrom());
+                    relation.setTarget(info.getRelationTo());
+                    //TODO 获取关系目标实体
+                    relation.setTargetObject(null);
+                    relation.setRelation(info.getRelationId());
+                    if (target.equals(info.getRelationFrom())) {
+                        relation.setDirection(Relation.Direction.POSITIVE);
+                    } else {
+                        relation.setDirection(Relation.Direction.REVERSE);
+                    }
+                    return relation;
+                }).collect(Collectors.toList());
+
+        return new SimpleRelations(relations);
+    }
 }