Ver código fonte

id统一修改为string类型

lixing 4 anos atrás
pai
commit
a042e8dce4
63 arquivos alterados com 256 adições e 183 exclusões
  1. 3 1
      fm-person/src/main/java/com/persagy/fm/common/RabbitmqConfig.java
  2. 6 0
      fm-person/src/main/java/com/persagy/fm/common/client/FeignConfig.java
  3. 10 3
      fm-person/src/main/java/com/persagy/fm/department/controller/DepartmentController.java
  4. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/Department.java
  5. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/AddDepartmentDTO.java
  6. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/DeleteDepartmentDTO.java
  7. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/PageQueryDepartmentDTO.java
  8. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepProjectTreeDTO.java
  9. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentDTO.java
  10. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentDetailDTO.java
  11. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentTreeDTO.java
  12. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/dto/UpdateDepartmentDTO.java
  13. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentItemVO.java
  14. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentListItemVO.java
  15. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentTreeItemVO.java
  16. 14 4
      fm-person/src/main/java/com/persagy/fm/department/service/IDepartmentService.java
  17. 1 1
      fm-person/src/main/java/com/persagy/fm/department/service/impl/DepTranslatorImpl.java
  18. 13 12
      fm-person/src/main/java/com/persagy/fm/department/service/impl/DepTreeServiceImpl.java
  19. 27 27
      fm-person/src/main/java/com/persagy/fm/department/service/impl/DepartmentServiceImpl.java
  20. 3 3
      fm-person/src/main/java/com/persagy/fm/department/utils/DepDataUtil.java
  21. 1 1
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/AddDepProjectDTO.java
  22. 1 1
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/DeleteDepProjectDTO.java
  23. 1 1
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/PageQueryDepProjectDTO.java
  24. 2 2
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/QueryDepProjectDTO.java
  25. 1 1
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/QueryDepProjectDetailDTO.java
  26. 4 4
      fm-person/src/main/java/com/persagy/fm/depproject/model/dto/UpdateDepProjectDTO.java
  27. 5 5
      fm-person/src/main/java/com/persagy/fm/depproject/service/IDepProjectService.java
  28. 8 7
      fm-person/src/main/java/com/persagy/fm/depproject/service/impl/DepProjectServiceImpl.java
  29. 1 1
      fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java
  30. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/dto/DeletePersonDTO.java
  31. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonDTO.java
  32. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDetailDTO.java
  33. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/dto/UpdatePersonDTO.java
  34. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/dto/UpsertPersonDTO.java
  35. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonItemVO.java
  36. 1 1
      fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonListItemVO.java
  37. 1 1
      fm-person/src/main/java/com/persagy/fm/person/service/IPersonProjectService.java
  38. 7 7
      fm-person/src/main/java/com/persagy/fm/person/service/IPersonService.java
  39. 7 1
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonNameTranslator.java
  40. 1 1
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonProjectServiceImpl.java
  41. 11 11
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java
  42. 1 1
      fm-person/src/main/java/com/persagy/fm/profession/controller/ProfessionController.java
  43. 1 1
      fm-person/src/main/java/com/persagy/fm/profession/model/dto/DeleteProfessionDTO.java
  44. 1 1
      fm-person/src/main/java/com/persagy/fm/profession/model/dto/UpdateProfessionDTO.java
  45. 4 1
      fm-person/src/main/java/com/persagy/fm/profession/model/vo/ResponseProfessionItemVO.java
  46. 4 1
      fm-person/src/main/java/com/persagy/fm/profession/model/vo/ResponseProfessionListItemVO.java
  47. 2 2
      fm-person/src/main/java/com/persagy/fm/profession/service/IProfessionService.java
  48. 3 3
      fm-person/src/main/java/com/persagy/fm/profession/service/impl/ProfessionServiceImpl.java
  49. 15 2
      fm-person/src/main/java/com/persagy/fm/saas/project/client/SaasProjectClient.java
  50. 3 1
      fm-person/src/main/java/com/persagy/fm/saas/project/model/dto/QuerySaasAreaProjectTreeDTO.java
  51. 26 8
      fm-person/src/main/java/com/persagy/fm/saas/project/service/impl/SaasProjectServiceImpl.java
  52. 1 1
      fm-person/src/main/java/com/persagy/fm/workresume/controller/WorkResumeController.java
  53. 2 2
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/AddWorkResumeDTO.java
  54. 1 1
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/DeleteWorkResumeDTO.java
  55. 3 3
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/PageQueryWorkResumeDTO.java
  56. 2 2
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDTO.java
  57. 1 1
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDetailDTO.java
  58. 9 9
      fm-person/src/main/java/com/persagy/fm/workresume/model/dto/UpdateWorkResumeDTO.java
  59. 1 1
      fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeItemVO.java
  60. 1 1
      fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeListItemVO.java
  61. 3 3
      fm-person/src/main/java/com/persagy/fm/workresume/service/IWorkResumeService.java
  62. 8 7
      fm-person/src/main/java/com/persagy/fm/workresume/service/impl/WorkResumeServiceImpl.java
  63. 17 17
      fm-person/src/main/resources/mapper/DepartmentMapper.xml

+ 3 - 1
fm-person/src/main/java/com/persagy/fm/common/RabbitmqConfig.java

@@ -13,7 +13,9 @@ import org.springframework.context.annotation.Configuration;
  **/
 @Configuration
 public class RabbitmqConfig {
-    // JMS 使用
+    /**
+     * JMS 使用
+      */
     @Bean
     public MessageConverter customMessageConvert() {
         return new Jackson2JsonMessageConverter();

+ 6 - 0
fm-person/src/main/java/com/persagy/fm/common/client/FeignConfig.java

@@ -14,6 +14,12 @@ import org.springframework.context.annotation.Scope;
 
 import static org.springframework.beans.factory.config.BeanDefinition.SCOPE_PROTOTYPE;
 
+/**
+ * feign配置类
+ *
+ * @author lixing
+ * @version V1.0 2021/3/29 8:11 下午
+ */
 @Configuration
 public class FeignConfig {
 

+ 10 - 3
fm-person/src/main/java/com/persagy/fm/department/controller/DepartmentController.java

@@ -64,7 +64,7 @@ public class DepartmentController {
     @PostMapping("/create")
     public CommonResult<FmResponseUpsertVO> createDepartment(
             @Valid @RequestBody AddDepartmentDTO addDepartmentDTO) {
-        Long id = departmentService.createDepartment(addDepartmentDTO);
+        String id = departmentService.createDepartment(addDepartmentDTO);
         return ResultHelper.single(new FmResponseUpsertVO(id));
     }
 
@@ -118,11 +118,11 @@ public class DepartmentController {
             return ResultHelper.multi(resultList);
         }
         // 获取部门的子部门
-        List<Long> deptIds = departmentList.stream().
+        List<String> deptIds = departmentList.stream().
                 map(Department::getId).
                 collect(Collectors.toList());
         List<Department> sonDeps = departmentService.queryDepListByParentIds(deptIds);
-        Map<Long, List<Department>> parentIdMap = DepDataUtil.sonDeps2ParentIdMap(sonDeps);
+        Map<String, List<Department>> parentIdMap = DepDataUtil.sonDeps2ParentIdMap(sonDeps);
         resultList.forEach(item -> {
             // 如果map中包含部门的id,代表部门有子部门
             if (DepDataUtil.hasChildren(item.getId(), parentIdMap)) {
@@ -165,5 +165,12 @@ public class DepartmentController {
         return ResultHelper.multi(projectTreeItemVOList);
     }
 
+    @ApiOperation(value = "检验部门是否可删除")
+    @PostMapping("/deleteAvailable")
+    public CommonResult checkDepDeletable(
+            @RequestBody @Valid DeleteDepartmentDTO deleteDepartmentDTO) {
+        departmentService.checkDeletable(deleteDepartmentDTO.getId());
+        return ResultHelper.success();
+    }
 }
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/Department.java

@@ -28,7 +28,7 @@ public class Department extends AuditableEntity<Department> implements Serializa
     private String type;
 
     @ApiModelProperty("上级部门id")
-    private Long parentId;
+    private String parentId;
 
     @ApiModelProperty("数据来源")
     private String resourceFrom;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/AddDepartmentDTO.java

@@ -32,7 +32,7 @@ public class AddDepartmentDTO {
 
     @ApiModelProperty(value = "上级部门id", required = true)
     @NotNull(message = "上级部门id不能为空")
-    private Long parentId;
+    private String parentId;
 
     @ApiModelProperty(value = "数据来源")
     private String resourceFrom;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/DeleteDepartmentDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class DeleteDepartmentDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/PageQueryDepartmentDTO.java

@@ -14,7 +14,7 @@ import lombok.Data;
 @ApiModel(value = "分页查询部门入参")
 public class PageQueryDepartmentDTO extends PageDTO {
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
     @ApiModelProperty(value = "部门名称", required = true)
     private String name;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepProjectTreeDTO.java

@@ -14,5 +14,5 @@ import javax.validation.constraints.NotNull;
 @ApiModel(value = "查询部门项目树入参")
 public class QueryDepProjectTreeDTO {
     @ApiModelProperty(value = "父部门id。不传加载整个集团的项目树")
-    private Long parentDepId;
+    private String parentDepId;
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentDTO.java

@@ -18,7 +18,7 @@ public class QueryDepartmentDTO {
     private String type;
 
     @ApiModelProperty(value = "上级部门id")
-    private Long parentId;
+    private String parentId;
 
     @ApiModelProperty(value = "数据来源")
     private String resourceFrom;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentDetailDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class QueryDepartmentDetailDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/QueryDepartmentTreeDTO.java

@@ -14,7 +14,7 @@ import javax.validation.constraints.Min;
 @ApiModel(value = "查询部门树入参")
 public class QueryDepartmentTreeDTO {
     @ApiModelProperty(value = "选中的树节点")
-    private Long checkedId;
+    private String checkedId;
 
     @ApiModelProperty(value = "需要展示的层级")
     @Min(value = 1, message = "需要展示的层级最小为1")

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/dto/UpdateDepartmentDTO.java

@@ -21,7 +21,7 @@ import java.util.List;
 public class UpdateDepartmentDTO {
     @ApiModelProperty(value = "id", required = true)
     @NotNull(message = "id不能为空")
-    private Long id;
+    private String id;
 
     @ApiModelProperty(value = "部门名称", required = true)
     @Length(max = 100, message = "部门名称长度不能超过100字")

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentItemVO.java

@@ -22,7 +22,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class ResponseDepartmentItemVO {
     @ApiModelProperty("id")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
+    private String id;
 
     @ApiModelProperty("部门名称")
     private String name;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentListItemVO.java

@@ -20,7 +20,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class ResponseDepartmentListItemVO {
     @ApiModelProperty("id")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
+    private String id;
 
     @ApiModelProperty("部门名称")
     private String name;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentTreeItemVO.java

@@ -19,7 +19,7 @@ import java.util.List;
 public class ResponseDepartmentTreeItemVO {
     @ApiModelProperty("id")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
+    private String id;
 
     @ApiModelProperty("部门名称")
     private String name;

+ 14 - 4
fm-person/src/main/java/com/persagy/fm/department/service/IDepartmentService.java

@@ -25,7 +25,7 @@ public interface IDepartmentService {
      * @author lixing
      * @version V1.0 2021-03-11 15:09:17
      */
-    Long createDepartment(AddDepartmentDTO addDepartmentDTO);
+    String createDepartment(AddDepartmentDTO addDepartmentDTO);
 
     /**
      * 部门详情
@@ -35,7 +35,7 @@ public interface IDepartmentService {
      * @author lixing
      * @version V1.0 2021-03-11 15:09:17
      */
-    Department queryDepartmentDetail(Long id);
+    Department queryDepartmentDetail(String id);
 
     /**
      * 更新部门
@@ -53,7 +53,7 @@ public interface IDepartmentService {
      * @author lixing
      * @version V1.0 2021-03-11 15:09:17
      */
-    void deleteDepartment(Long id);
+    void deleteDepartment(String id);
 
     /**
      * 查询部门
@@ -93,5 +93,15 @@ public interface IDepartmentService {
      * @author lixing
      * @version V1.0 2021/3/12 4:23 下午
      */
-    List<Department> queryDepListByParentIds(List<Long> parentIds);
+    List<Department> queryDepListByParentIds(List<String> parentIds);
+
+    /**
+     * 校验部门是否可删除
+     *
+     * @param id 部门主键
+     * @return 部门do类
+     * @author lixing
+     * @version V1.0 2021/3/12 11:02 上午
+     */
+    Department checkDeletable(String id);
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/service/impl/DepTranslatorImpl.java

@@ -17,7 +17,7 @@ import java.util.List;
 import java.util.stream.Collectors;
 
 /**
- * 类说明
+ * 部门翻译器
  *
  * @author lixing
  * @version V1.0 2021/3/29 11:29 上午

+ 13 - 12
fm-person/src/main/java/com/persagy/fm/department/service/impl/DepTreeServiceImpl.java

@@ -1,6 +1,7 @@
 package com.persagy.fm.department.service.impl;
 
 import com.google.common.collect.Lists;
+import com.persagy.fm.common.constant.DefaultValueConstants;
 import com.persagy.fm.department.model.ConvertDepartmentTool;
 import com.persagy.fm.department.model.Department;
 import com.persagy.fm.department.service.IDepartmentService;
@@ -37,7 +38,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
      * @version V1.0 2021/3/12 11:58 上午
      */
     private Map<Integer, List<Department>> initTreeData(QueryDepartmentTreeDTO queryDepartmentTreeDTO) {
-        Long checkedId = queryDepartmentTreeDTO.getCheckedId();
+        String checkedId = queryDepartmentTreeDTO.getCheckedId();
         if (checkedId != null) {
             Department checkedDep = departmentService.queryDepartmentDetail(checkedId);
             // 获取部门全路径,计算部门所在层级
@@ -60,7 +61,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
      * @param queryDepartmentTreeDTO 部门树查询条件
      * @return 需要展示的层级
      */
-    private int getShowLevel(QueryDepartmentTreeDTO queryDepartmentTreeDTO) {
+    private Integer getShowLevel(QueryDepartmentTreeDTO queryDepartmentTreeDTO) {
         Integer showLevel = queryDepartmentTreeDTO.getShowLevel();
         if (showLevel == null) {
             showLevel = getDefaultShowLevel();
@@ -91,8 +92,8 @@ public class DepTreeServiceImpl implements IDepTreeService {
 
         // TODO: 2021/3/9 根据当前登录人获取根节点
         // 部门树根节点的父节点id
-        Long rootParentId = 0L;
-        List<Long> rootDeps = Lists.newArrayList(rootParentId);
+        String rootParentId = DefaultValueConstants.NO_PARENT_ID;
+        List<String> rootDeps = Lists.newArrayList(rootParentId);
 
         return initDefaultTreeData(levelDepListMap, 0, rootDeps, showLevel);
     }
@@ -111,7 +112,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
     public Map<Integer, List<Department>> initDefaultTreeData(
             Map<Integer, List<Department>> levelDepListMap,
             int level,
-            List<Long> parentDepIdList,
+            List<String> parentDepIdList,
             int showLevel) {
         if (CollectionUtils.isEmpty(parentDepIdList)) {
             return levelDepListMap;
@@ -121,7 +122,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
         if (level < showLevel) {
             List<Department> departments = levelDepListMap.get(level);
             departments = departments == null ? Lists.newArrayList() : departments;
-            List<Long> depIds = departments.stream().map(Department::getId).collect(Collectors.toList());
+            List<String> depIds = departments.stream().map(Department::getId).collect(Collectors.toList());
             initDefaultTreeData(levelDepListMap, level + 1, depIds, showLevel);
         }
 
@@ -139,11 +140,11 @@ public class DepTreeServiceImpl implements IDepTreeService {
      * @version V1.0 2021/3/12 3:12 下午
      */
     public void setChildren(
-            Map<Integer, Map<Long, List<Department>>> levelParentIdMap,
+            Map<Integer, Map<String, List<Department>>> levelParentIdMap,
             ResponseDepartmentTreeItemVO treeItem,
             int level,
             int showLevel) {
-        Map<Long, List<Department>> parentIdMap = levelParentIdMap.get(level);
+        Map<String, List<Department>> parentIdMap = levelParentIdMap.get(level);
         parentIdMap = parentIdMap != null ? parentIdMap : new HashMap<>(0);
         List<Department> departments = parentIdMap.get(treeItem.getId());
         List<ResponseDepartmentTreeItemVO> children = ConvertDepartmentTool.INSTANCE.convert2Tree(departments);
@@ -190,7 +191,7 @@ public class DepTreeServiceImpl implements IDepTreeService {
         }
 
         // levelDeptListMap 转换为 levelParentIdMap
-        Map<Integer, Map<Long, List<Department>>> levelParentIdMap = covert2LevelParentIdMap(levelDeptListMap);
+        Map<Integer, Map<String, List<Department>>> levelParentIdMap = covert2LevelParentIdMap(levelDeptListMap);
 
         List<ResponseDepartmentTreeItemVO> result = ConvertDepartmentTool.INSTANCE.convert2Tree(rootList);
         result.forEach(treeItem -> {
@@ -207,11 +208,11 @@ public class DepTreeServiceImpl implements IDepTreeService {
      * @author lixing
      * @version V1.0 2021/3/12 2:43 下午
      */
-    private Map<Integer, Map<Long, List<Department>>> covert2LevelParentIdMap(
+    private Map<Integer, Map<String, List<Department>>> covert2LevelParentIdMap(
             Map<Integer, List<Department>> levelDeptListMap) {
-        Map<Integer, Map<Long, List<Department>>> levelParentIdMap = new HashMap<>(levelDeptListMap.size());
+        Map<Integer, Map<String, List<Department>>> levelParentIdMap = new HashMap<>(levelDeptListMap.size());
         levelDeptListMap.forEach((level, depList) -> {
-            Map<Long, List<Department>> parentIdMap = DepDataUtil.sonDeps2ParentIdMap(depList);
+            Map<String, List<Department>> parentIdMap = DepDataUtil.sonDeps2ParentIdMap(depList);
             levelParentIdMap.put(level, parentIdMap);
         });
         return levelParentIdMap;

+ 27 - 27
fm-person/src/main/java/com/persagy/fm/department/service/impl/DepartmentServiceImpl.java

@@ -8,6 +8,7 @@ import com.google.common.base.CaseFormat;
 import com.google.common.collect.Lists;
 import com.persagy.common.enums.ResponseCode;
 import com.persagy.common.exception.BusinessException;
+import com.persagy.fm.common.constant.DefaultValueConstants;
 import com.persagy.fm.common.constant.enums.ValidEnum;
 import com.persagy.fm.common.context.DefaultAppContext;
 import com.persagy.fm.common.model.dto.Sort;
@@ -23,8 +24,9 @@ import com.persagy.fm.department.model.dto.UpdateDepartmentDTO;
 import com.persagy.fm.department.service.IDepartmentService;
 import com.persagy.fm.depproject.model.dto.AddDepProjectDTO;
 import com.persagy.fm.depproject.service.IDepProjectService;
-import com.persagy.fm.translate.model.Trans;
-import com.persagy.fm.translate.model.TransType;
+import com.persagy.fm.person.model.dto.PageQueryPersonDTO;
+import com.persagy.fm.person.model.vo.ResponsePersonListItemVO;
+import com.persagy.fm.person.service.IPersonService;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -45,21 +47,23 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         implements IDepartmentService {
     @Autowired
     private IDepProjectService depProjectService;
+    @Autowired
+    private IPersonService personService;
 
     @Override
     @Transactional
-    public Long createDepartment(AddDepartmentDTO addDepartmentDTO) {
+    public String createDepartment(AddDepartmentDTO addDepartmentDTO) {
         Department department = saveDepartment(addDepartmentDTO);
 
         // 保存部门和项目的关系
         List<String> projectIds = addDepartmentDTO.getProjectIds();
-        Long depId = department.getId();
+        String depId = department.getId();
         saveDepProject(projectIds, depId);
 
         return depId;
     }
 
-    private void saveDepProject(List<String> projectIds, Long depId) {
+    private void saveDepProject(List<String> projectIds, String depId) {
         if (CollectionUtils.isEmpty(projectIds)) {
             return;
         }
@@ -94,8 +98,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         setDefaultValue(department);
 
         // 获取部门的上级部门,拼装部门的全路径
-        Long parentId = department.getParentId();
-        if (parentId == 0L) {
+        String parentId = department.getParentId();
+        if (DefaultValueConstants.NO_PARENT_ID.equals(parentId)) {
             department.setFullPath(department.getName());
         } else {
             Department parentDep = queryDepartmentDetail(parentId);
@@ -139,7 +143,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         }
 
         if (department.getParentId() == null) {
-            department.setParentId(0L);
+            department.setParentId(DefaultValueConstants.NO_PARENT_ID);
         }
 
         department.setCreator(DefaultAppContext.getContext().getAccountId());
@@ -167,7 +171,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
     }
 
     @Override
-    public Department queryDepartmentDetail(Long id) {
+    public Department queryDepartmentDetail(String id) {
         Department department = getById(id);
         if (department == null) {
             throw new IllegalArgumentException("查看Department详情时发生异常,找不到要查看的记录,id=" + id);
@@ -188,7 +192,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         }
         department.setModifier(DefaultAppContext.getContext().getAccountId());
         updateById(department);
-        Long depId = department.getId();
+        String depId = department.getId();
         List<String> projectIds = updateDepartmentDTO.getProjectIds();
         updateDepProject(projectIds, depId);
     }
@@ -197,11 +201,11 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
      * 更新部门关联的项目
      *
      * @param projectIds 更新后部门关联的项目
-     * @param depId 部门id
+     * @param depId      部门id
      * @author lixing
      * @version V1.0 2021/3/24 10:51 上午
      */
-    private void updateDepProject(List<String> projectIds, Long depId) {
+    private void updateDepProject(List<String> projectIds, String depId) {
         // 删除之前部门关联的项目
         depProjectService.deleteByDepId(depId);
         // 插入新的部门关联的项目
@@ -242,15 +246,8 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         updateBatchById(sonDeps);
     }
 
-    /**
-     * 校验部门是否可删除
-     *
-     * @param id 部门主键
-     * @return 部门do类
-     * @author lixing
-     * @version V1.0 2021/3/12 11:02 上午
-     */
-    public Department checkDeletable(Long id) {
+    @Override
+    public Department checkDeletable(String id) {
         if (id == null) {
             throw new IllegalArgumentException("删除Department时发生异常,主键为空!");
         }
@@ -274,17 +271,20 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             throw new IllegalArgumentException("当前部门包含子部门,不可删除");
         }
 
-        // TODO: 2021/3/9   部门包含员工时,不可删除
-
+        PageQueryPersonDTO pageQueryPersonDTO = new PageQueryPersonDTO();
+        pageQueryPersonDTO.setDepId(id);
+        IPage<ResponsePersonListItemVO> responsePersonListItemVOIPage = personService.pageQueryPerson(pageQueryPersonDTO);
+        if (responsePersonListItemVOIPage.getTotal() > 0) {
+            throw new IllegalArgumentException("当前部门包含员工,不可删除");
+        }
         return department;
     }
 
     @Override
     @Transactional
-    public void deleteDepartment(Long id) {
+    public void deleteDepartment(String id) {
         // 校验部门是否可删除
         Department department = checkDeletable(id);
-
         department.setValid(ValidEnum.FALSE.getType());
         updateById(department);
     }
@@ -363,14 +363,14 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         if (CollectionUtils.isEmpty(parentDeptList)) {
             return Lists.newArrayList();
         } else {
-            List<Long> parentIds = parentDeptList.stream().map(Department::getId).collect(Collectors.toList());
+            List<String> parentIds = parentDeptList.stream().map(Department::getId).collect(Collectors.toList());
             List<Department> sonDeps = queryDepListByParentIds(parentIds);
             return sonDeps == null ? Lists.newArrayList() : sonDeps;
         }
     }
 
     @Override
-    public List<Department> queryDepListByParentIds(List<Long> parentIds) {
+    public List<Department> queryDepListByParentIds(List<String> parentIds) {
         // 拼装查询条件
         QueryWrapper<Department> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq(Department.PROP_VALID, ValidEnum.TRUE.getType());

+ 3 - 3
fm-person/src/main/java/com/persagy/fm/department/utils/DepDataUtil.java

@@ -25,12 +25,12 @@ public class DepDataUtil {
      * @author lixing
      * @version V1.0 2021/3/12 2:49 下午
      */
-    public static Map<Long, List<Department>> sonDeps2ParentIdMap(List<Department> sonDeps) {
+    public static Map<String, List<Department>> sonDeps2ParentIdMap(List<Department> sonDeps) {
         if (CollectionUtils.isEmpty(sonDeps)) {
             return Maps.newHashMap();
         }
 
-        Map<Long, List<Department>> result = new HashMap<>(sonDeps.size());
+        Map<String, List<Department>> result = new HashMap<>(sonDeps.size());
         sonDeps.forEach(sonDep -> {
             List<Department> departments = result.get(sonDep.getParentId());
             if (departments == null) {
@@ -54,7 +54,7 @@ public class DepDataUtil {
      * @author lixing
      * @version V1.0 2021/3/12 3:21 下午
      */
-    public static boolean hasChildren(Long depId, Map<Long, List<Department>> parentIdMap) {
+    public static boolean hasChildren(String depId, Map<String, List<Department>> parentIdMap) {
         if (depId == null) {
             return false;
         }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/AddDepProjectDTO.java

@@ -18,7 +18,7 @@ import java.util.Date;
 public class AddDepProjectDTO {
     @ApiModelProperty(value = "部门id", required = true)
     @NotNull(message = "部门id不能为空") 
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "项目id", required = true)
     @NotNull(message = "项目id不能为空") 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/DeleteDepProjectDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class DeleteDepProjectDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "主键", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/PageQueryDepProjectDTO.java

@@ -16,7 +16,7 @@ import lombok.Data;
 @ApiModel(value = "分页查询部门项目入参")
 public class PageQueryDepProjectDTO extends PageDTO {
     @ApiModelProperty(value = "主键", required = true)
-    private Long id;
+    private String id;
 
     @ApiModelProperty(value = "部门id", required = true)
     private Long depId;

+ 2 - 2
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/QueryDepProjectDTO.java

@@ -14,9 +14,9 @@ import java.util.Date;
 @ApiModel(value = "查询部门项目入参")
 public class QueryDepProjectDTO {
     @ApiModelProperty(value = "部门id", required = true)
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "项目id", required = true)
-    private Long projectId;
+    private String projectId;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/QueryDepProjectDetailDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class QueryDepProjectDetailDTO {
     @NotNull(message = "主键不能为空")
     @ApiModelProperty(value = "主键", required = true)
-    private Long id;
+    private String id;
 
 }

+ 4 - 4
fm-person/src/main/java/com/persagy/fm/depproject/model/dto/UpdateDepProjectDTO.java

@@ -17,15 +17,15 @@ import java.util.Date;
 @ApiModel(value = "更新部门项目入参")
 public class UpdateDepProjectDTO {
     @ApiModelProperty(value = "主键", required = true)
-    @NotNull(message = "主键不能为空") // todo 更新校验规则
-    private Long id;
+    @NotNull(message = "主键不能为空")
+    private String id;
 
     @ApiModelProperty(value = "部门id", required = true)
-    @NotNull(message = "部门id不能为空") // todo 更新校验规则
+    @NotNull(message = "部门id不能为空")
     private Long depId;
 
     @ApiModelProperty(value = "项目id", required = true)
-    @NotNull(message = "项目id不能为空") // todo 更新校验规则
+    @NotNull(message = "项目id不能为空")
     private Long projectId;
 
 }

+ 5 - 5
fm-person/src/main/java/com/persagy/fm/depproject/service/IDepProjectService.java

@@ -26,7 +26,7 @@ public interface IDepProjectService {
      * @author lixing
      * @version V1.0 2021-03-24 10:08:12
      */
-    Long createDepProject(AddDepProjectDTO addDepProjectDTO);
+    String createDepProject(AddDepProjectDTO addDepProjectDTO);
 
     /**
      * 部门项目详情
@@ -36,7 +36,7 @@ public interface IDepProjectService {
      * @author lixing
      * @version V1.0 2021-03-24 10:08:12
      */
-    DepProject queryDepProjectDetail(Long id);
+    DepProject queryDepProjectDetail(String id);
 
     /**
      * 更新部门项目
@@ -54,7 +54,7 @@ public interface IDepProjectService {
      * @author lixing
      * @version V1.0 2021-03-24 10:08:12
      */
-    void deleteDepProject(Long id);
+    void deleteDepProject(String id);
 
     /**
      * 查询部门项目
@@ -84,7 +84,7 @@ public interface IDepProjectService {
      * @author lixing
      * @version V1.0 2021/3/22 3:58 下午
      */
-    List<ProjectTreeItemVO> queryDepProjectTree(Long depId);
+    List<ProjectTreeItemVO> queryDepProjectTree(String depId);
 
     /**
      * 批量保存部门关联的项目
@@ -102,5 +102,5 @@ public interface IDepProjectService {
      * @author lixing
      * @version V1.0 2021/3/24 10:48 上午
      */
-    void deleteByDepId(Long depId);
+    void deleteByDepId(String depId);
 }

+ 8 - 7
fm-person/src/main/java/com/persagy/fm/depproject/service/impl/DepProjectServiceImpl.java

@@ -1,5 +1,6 @@
 package com.persagy.fm.depproject.service.impl;
 
+import com.persagy.fm.common.constant.DefaultValueConstants;
 import com.persagy.fm.common.context.DefaultAppContext;
 import com.persagy.fm.depproject.dao.DepProjectMapper;
 import com.persagy.fm.depproject.service.IDepProjectService;
@@ -35,9 +36,9 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
     ISaasProjectService saasProjectService;
 
     @Override
-    public List<ProjectTreeItemVO> queryDepProjectTree(Long parentDepId) {
+    public List<ProjectTreeItemVO> queryDepProjectTree(String parentDepId) {
         // 父部门id 为0或空, 加载整颗区域项目树
-        if (parentDepId == null || parentDepId == 0L) {
+        if (parentDepId == null || DefaultValueConstants.NO_PARENT_ID.equals(parentDepId)) {
             return saasProjectService.queryAllProjectTree();
         }
         // 部门关联的项目
@@ -60,7 +61,7 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
     }
 
     @Override
-    public void deleteByDepId(Long depId) {
+    public void deleteByDepId(String depId) {
         QueryDepProjectDTO queryDepProjectDTO = new QueryDepProjectDTO();
         queryDepProjectDTO.setDepId(depId);
         List<DepProject> depProjectList = queryDepProjectList(queryDepProjectDTO);
@@ -75,7 +76,7 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
      * @version V1.0 2021-03-24 10:08:12
      */
     @Override
-    public Long createDepProject(AddDepProjectDTO addDepProjectDTO) {
+    public String createDepProject(AddDepProjectDTO addDepProjectDTO) {
         DepProject depProject = ConvertDepProjectTool.INSTANCE.convertAddDto2Entity(addDepProjectDTO);
         // 设置默认值
         setDefaultValue(depProject);
@@ -103,7 +104,7 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
      * @version V1.0 2021-03-24 10:08:12
      */
     @Override
-    public DepProject queryDepProjectDetail(Long id) {
+    public DepProject queryDepProjectDetail(String id) {
         DepProject depProject = getById(id);
         if (depProject == null) {
             throw new IllegalArgumentException("查看DepProject详情时发生异常,找不到要查看的记录,id=" + id);
@@ -133,7 +134,7 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
      * @author lixing
      * @version V1.0 2021-03-24 10:08:12
      */
-    public DepProject checkDeletable(Long id) {
+    public DepProject checkDeletable(String id) {
         if (id == null) {
             throw new IllegalArgumentException("删除DepProject时发生异常,主键为空");
         }
@@ -155,7 +156,7 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
      * @version V1.0 2021-03-24 10:08:12
      */
     @Override
-    public void deleteDepProject(Long id) {
+    public void deleteDepProject(String id) {
         // 校验是否可删除
         DepProject depProject = checkDeletable(id);
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/controller/PersonController.java

@@ -44,7 +44,7 @@ public class PersonController {
     @PostMapping("/create")
     public CommonResult<FmResponseUpsertVO> createPerson(
             @Valid @RequestBody AddPersonDTO addPersonDTO) {
-        Long id = personService.createPerson(addPersonDTO);
+        String id = personService.createPerson(addPersonDTO);
         return ResultHelper.single(new FmResponseUpsertVO(id));
     }
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/DeletePersonDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class DeletePersonDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonDTO.java

@@ -16,7 +16,7 @@ import lombok.EqualsAndHashCode;
 public class PageQueryPersonDTO extends PageDTO {
 
     @ApiModelProperty(value = "部门id")
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "在职状态")
     private Integer state;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/QueryPersonDetailDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class QueryPersonDetailDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/UpdatePersonDTO.java

@@ -17,5 +17,5 @@ import javax.validation.constraints.NotNull;
 public class UpdatePersonDTO extends UpsertPersonDTO{
     @ApiModelProperty(value = "id", required = true)
     @NotNull(message = "id不能为空") 
-    private Long id;
+    private String id;
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/dto/UpsertPersonDTO.java

@@ -62,7 +62,7 @@ public class UpsertPersonDTO {
 
     @NotNull(message = "部门不能为空")
     @ApiModelProperty(value = "所属部门id", required = true)
-    private List<Long> depIds;
+    private List<String> depIds;
 
     @NotNull(message = "项目权限不能为空")
     @ApiModelProperty(value = "关联的项目id", required = true)

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonItemVO.java

@@ -21,7 +21,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 public class ResponsePersonItemVO {
     @ApiModelProperty("id")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
+    private String id;
 
     @ApiModelProperty("姓名")
     private String name;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/model/vo/ResponsePersonListItemVO.java

@@ -19,7 +19,7 @@ import java.util.List;
 public class ResponsePersonListItemVO {
     @ApiModelProperty("id")
     @JsonSerialize(using = ToStringSerializer.class)
-    private Long id;
+    private String id;
 
     @ApiModelProperty("姓名")
     private String name;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/service/IPersonProjectService.java

@@ -19,5 +19,5 @@ public interface IPersonProjectService {
      * @author lixing
      * @version V1.0 2021/3/22 3:58 下午
      */
-    List<ProjectTreeItemVO> queryPersonProjectTree(Long personId);
+    List<ProjectTreeItemVO> queryPersonProjectTree(String personId);
 }

+ 7 - 7
fm-person/src/main/java/com/persagy/fm/person/service/IPersonService.java

@@ -23,7 +23,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:31
      */
-    Long createPerson(AddPersonDTO addPersonDTO);
+    String createPerson(AddPersonDTO addPersonDTO);
 
     /**
      * 人员详情
@@ -33,7 +33,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:31
      */
-    Person queryPersonDetail(Long id);
+    Person queryPersonDetail(String id);
 
     /**
      * 通过主键数组查询人员
@@ -58,7 +58,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:31
      */
-    void deletePerson(Long id);
+    void deletePerson(String id);
 
     /**
      * 分页查询人员
@@ -86,7 +86,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021/3/22 10:39 上午
      */
-    void disablePerson(Long personId);
+    void disablePerson(String personId);
 
     /**
      * 解雇人员
@@ -95,7 +95,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021/3/22 10:39 上午
      */
-    void dismissPerson(Long personId);
+    void dismissPerson(String personId);
 
     /**
      * 恢复入职
@@ -104,7 +104,7 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021/3/22 10:44 上午
      */
-    void rejoinPerson(Long personId);
+    void rejoinPerson(String personId);
 
     /**
      * 批量更新人员信息
@@ -132,5 +132,5 @@ public interface IPersonService {
      * @author lixing
      * @version V1.0 2021/3/22 10:39 上午
      */
-    void enablePerson(Long personId);
+    void enablePerson(String personId);
 }

+ 7 - 1
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonNameTranslator.java

@@ -13,6 +13,12 @@ import org.springframework.stereotype.Service;
 
 import java.util.*;
 
+/**
+ * 人员姓名翻译器
+ *
+ * @author lixing
+ * @version V1.0 2021/3/29 8:12 下午
+ */
 @Slf4j
 @Service
 public class PersonNameTranslator implements ITranslator {
@@ -25,7 +31,7 @@ public class PersonNameTranslator implements ITranslator {
         if (StringUtils.isBlank(parameter)) {
             return "";
         }
-        Person person = personService.queryPersonDetail(Long.valueOf(parameter));
+        Person person = personService.queryPersonDetail(parameter);
         return person.getName();
         //        if(StringUtils.isBlank(parameter)) {
         //            return null;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonProjectServiceImpl.java

@@ -19,7 +19,7 @@ public class PersonProjectServiceImpl implements IPersonProjectService {
     @Autowired
     ISaasProjectService saasProjectService;
     @Override
-    public List<ProjectTreeItemVO> queryPersonProjectTree(Long personId) {
+    public List<ProjectTreeItemVO> queryPersonProjectTree(String personId) {
         // 根据人员id查询人员关联的项目,然后组装项目树
         // TODO: 2021/3/22 查询人员关联的项目
         List<String> projectIds = null;

+ 11 - 11
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java

@@ -65,7 +65,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      */
     @Override
     @Transactional
-    public Long createPerson(AddPersonDTO addPersonDTO) {
+    public String createPerson(AddPersonDTO addPersonDTO) {
         // 判断账号是否被占用
         checkUserName(addPersonDTO.getUsername());
         // 创建账号
@@ -159,9 +159,9 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * @author lixing
      * @version V1.0 2021/3/23 4:23 下午
      */
-    private void saveWorkResumes(AddPersonDTO addPersonDTO, Long personId) {
-        List<Long> depIds = addPersonDTO.getDepIds();
-        for (Long depId : depIds) {
+    private void saveWorkResumes(AddPersonDTO addPersonDTO, String personId) {
+        List<String> depIds = addPersonDTO.getDepIds();
+        for (String depId : depIds) {
             AddWorkResumeDTO addWorkResumeDTO = new AddWorkResumeDTO();
             addWorkResumeDTO.setPersonId(personId);
             addWorkResumeDTO.setDepId(depId);
@@ -260,7 +260,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * @version V1.0 2021-03-15 17:20:31
      */
     @Override
-    public Person queryPersonDetail(Long id) {
+    public Person queryPersonDetail(String id) {
         Person person = getById(id);
         if (person == null) {
             throw new IllegalArgumentException("查看Person详情时发生异常,找不到要查看的记录,id=" + id);
@@ -295,7 +295,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * @author lixing
      * @version V1.0 2021-03-15 17:20:31
      */
-    public Person checkDeletable(Long id) {
+    public Person checkDeletable(String id) {
         if (id == null) {
             throw new IllegalArgumentException("删除Person时发生异常,主键为空");
         }
@@ -317,7 +317,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      * @version V1.0 2021-03-15 17:20:31
      */
     @Override
-    public void deletePerson(Long id) {
+    public void deletePerson(String id) {
         // 校验是否可删除
         Person person = checkDeletable(id);
 
@@ -343,17 +343,17 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     //    }
 
     @Override
-    public void disablePerson(Long personId) {
+    public void disablePerson(String personId) {
         // TODO: 2021/3/22 禁用账号
     }
 
     @Override
-    public void dismissPerson(Long personId) {
+    public void dismissPerson(String personId) {
         // TODO: 2021/3/22 人员离职
     }
 
     @Override
-    public void rejoinPerson(Long personId) {
+    public void rejoinPerson(String personId) {
         // TODO: 2021/3/22 恢复入职
     }
 
@@ -369,7 +369,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     }
 
     @Override
-    public void enablePerson(Long personId) {
+    public void enablePerson(String personId) {
         // TODO: 2021/3/26 解禁人员
     }
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/profession/controller/ProfessionController.java

@@ -39,7 +39,7 @@ public class ProfessionController {
     @PostMapping("/create")
     public CommonResult<FmResponseUpsertVO> createProfession(
             @Valid @RequestBody AddProfessionDTO addProfessionDTO) {
-        Long id = professionService.createProfession(addProfessionDTO);
+        String id = professionService.createProfession(addProfessionDTO);
         return ResultHelper.single(new FmResponseUpsertVO(id));
     }
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/profession/model/dto/DeleteProfessionDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class DeleteProfessionDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "主键", required = true)
-    private Long id;
+    private String id;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/profession/model/dto/UpdateProfessionDTO.java

@@ -21,7 +21,7 @@ import java.util.Date;
 public class UpdateProfessionDTO {
     @ApiModelProperty(value = "主键", required = true)
     @NotNull(message = "主键不能为空")
-    private Long id;
+    private String id;
 
     @ApiModelProperty(value = "专业名称", required = true)
     @NotNull(message = "专业名称不能为空")

+ 4 - 1
fm-person/src/main/java/com/persagy/fm/profession/model/vo/ResponseProfessionItemVO.java

@@ -1,5 +1,7 @@
 package com.persagy.fm.profession.model.vo;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -17,7 +19,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ResponseProfessionItemVO {
     @ApiModelProperty("主键")
-    private Long id;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
 
     @ApiModelProperty("专业名称")
     private String name;

+ 4 - 1
fm-person/src/main/java/com/persagy/fm/profession/model/vo/ResponseProfessionListItemVO.java

@@ -1,5 +1,7 @@
 package com.persagy.fm.profession.model.vo;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -17,7 +19,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ResponseProfessionListItemVO {
     @ApiModelProperty("主键")
-    private Long id;
+    @JsonSerialize(using = ToStringSerializer.class)
+    private String id;
 
     @ApiModelProperty("专业名称")
     private String name;

+ 2 - 2
fm-person/src/main/java/com/persagy/fm/profession/service/IProfessionService.java

@@ -25,7 +25,7 @@ public interface IProfessionService {
      * @author lixing
      * @version V1.0 2021-03-19 16:38:19
      */
-    Long createProfession(AddProfessionDTO addProfessionDTO);
+    String createProfession(AddProfessionDTO addProfessionDTO);
 
     /**
      * 更新专业
@@ -43,7 +43,7 @@ public interface IProfessionService {
      * @author lixing
      * @version V1.0 2021-03-19 16:38:19
      */
-    void deleteProfession(Long id);
+    void deleteProfession(String id);
 
     /**
      * 查询专业

+ 3 - 3
fm-person/src/main/java/com/persagy/fm/profession/service/impl/ProfessionServiceImpl.java

@@ -33,7 +33,7 @@ public class ProfessionServiceImpl extends ServiceImpl<ProfessionMapper, Profess
      * @version V1.0 2021-03-19 16:38:19
      */
     @Override
-    public Long createProfession(AddProfessionDTO addProfessionDTO) {
+    public String createProfession(AddProfessionDTO addProfessionDTO) {
         Profession profession = ConvertProfessionTool.INSTANCE.convertAddDto2Entity(addProfessionDTO);
         // 设置默认值
         setDefaultValue(profession);
@@ -77,7 +77,7 @@ public class ProfessionServiceImpl extends ServiceImpl<ProfessionMapper, Profess
      * @author lixing
      * @version V1.0 2021-03-19 16:38:19
      */
-    public Profession checkDeletable(Long id) {
+    public Profession checkDeletable(String id) {
         if (id == null) {
             throw new IllegalArgumentException("删除Profession时发生异常,主键为空");
         }
@@ -99,7 +99,7 @@ public class ProfessionServiceImpl extends ServiceImpl<ProfessionMapper, Profess
      * @version V1.0 2021-03-19 16:38:19
      */
     @Override
-    public void deleteProfession(Long id) {
+    public void deleteProfession(String id) {
         // 校验是否可删除
         Profession profession = checkDeletable(id);
 

+ 15 - 2
fm-person/src/main/java/com/persagy/fm/saas/project/client/SaasProjectClient.java

@@ -7,6 +7,7 @@ import com.persagy.fm.saas.project.client.fallback.SaasProjectClientFallbackFact
 import com.persagy.fm.saas.project.constant.FeignClientNameConstants;
 import com.persagy.fm.saas.project.model.SaasArea;
 import com.persagy.fm.saas.project.model.SaasProject;
+import com.persagy.fm.saas.project.model.dto.QueryAllowSaasAreaProjectTreeDTO;
 import com.persagy.fm.saas.project.model.dto.QuerySaasAreaDTO;
 import com.persagy.fm.saas.project.model.dto.QuerySaasAreaProjectTreeDTO;
 import com.persagy.fm.saas.project.model.dto.QuerySaasProjectDTO;
@@ -38,7 +39,7 @@ public interface SaasProjectClient {
     FmResponseContent<List<SaasArea>> querySaasAreaList(@RequestBody QuerySaasAreaDTO querySaasAreaDTO);
 
     /**
-     * 查询区域项目树
+     * 查询区域项目树(无权限控制),不支持
      *
      * @param querySaasAreaProjectTreeDTO 查询区域项目树入参
      * @return 区域项目树
@@ -46,10 +47,22 @@ public interface SaasProjectClient {
      * @version V1.0 2021/3/26 5:46 下午
      */
     @PostMapping("/project/queryAreaProjectTree")
-    FmResponseItem<SaasAreaProjectTreeVO> queryAreaProjectTree(
+    FmResponseContent<SaasAreaProjectTreeVO> queryAreaProjectTree(
              @RequestBody QuerySaasAreaProjectTreeDTO querySaasAreaProjectTreeDTO);
 
     /**
+     * 查询区域项目树(有权限控制)
+     *
+     * @param queryAllowSaasAreaProjectTreeDTO 查询区域项目树入参
+     * @return 区域项目树
+     * @author lixing
+     * @version V1.0 2021/3/29 6:17 下午
+     */
+    @PostMapping("/project/queryAllowAreaProjectTree")
+    FmResponseContent<SaasAreaProjectTreeVO> queryAllowAreaProjectTree(
+            @RequestBody QueryAllowSaasAreaProjectTreeDTO queryAllowSaasAreaProjectTreeDTO);
+
+    /**
      * 查询项目列表
      *
      * @param querySaasProjectDTO 查询项目入参

+ 3 - 1
fm-person/src/main/java/com/persagy/fm/saas/project/model/dto/QuerySaasAreaProjectTreeDTO.java

@@ -4,8 +4,10 @@ import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
- * 查询运维系统区域项目树入参,所有参数非必填
+ * 查询运维系统区域项目树入参(无权限管理),所有参数非必填
  *
  * @author lixing
  * @version V1.0 2021/3/26 5:43 下午

+ 26 - 8
fm-person/src/main/java/com/persagy/fm/saas/project/service/impl/SaasProjectServiceImpl.java

@@ -5,6 +5,7 @@ import com.persagy.fm.common.response.FmResponseContent;
 import com.persagy.fm.common.response.FmResponseItem;
 import com.persagy.fm.saas.project.client.SaasProjectClient;
 import com.persagy.fm.saas.project.model.SaasArea;
+import com.persagy.fm.saas.project.model.dto.QueryAllowSaasAreaProjectTreeDTO;
 import com.persagy.fm.saas.project.model.dto.QuerySaasAreaDTO;
 import com.persagy.fm.saas.project.model.dto.QuerySaasAreaProjectTreeDTO;
 import com.persagy.fm.saas.project.model.vo.ProjectTreeItemVO;
@@ -32,12 +33,13 @@ public class SaasProjectServiceImpl implements ISaasProjectService {
 
     @Override
     public List<ProjectTreeItemVO> queryProjectTree(List<String> projectIds) {
-        // TODO: 2021/3/22 给定一组项目id,返回一颗项目树(为了性能,先查询所有的区域,然后在本地拼装成树)
-        QuerySaasAreaDTO querySaasAreaDTO = new QuerySaasAreaDTO();
-        querySaasAreaDTO.setDefaultValue();
-        FmResponseContent<List<SaasArea>> responseContent = saasProjectClient.querySaasAreaList(querySaasAreaDTO);
-        List<SaasArea> areaList = responseContent.getContent();
-        return null;
+        // 查询运维系统区域项目树
+        QueryAllowSaasAreaProjectTreeDTO queryAllowSaasAreaProjectTreeDTO = new QueryAllowSaasAreaProjectTreeDTO();
+        queryAllowSaasAreaProjectTreeDTO.setDefaultValue();
+        queryAllowSaasAreaProjectTreeDTO.setProjectIds(projectIds);
+        FmResponseContent<SaasAreaProjectTreeVO> responseItem = saasProjectClient.queryAllowAreaProjectTree(queryAllowSaasAreaProjectTreeDTO);
+        // 查询结果转换
+        return convert2ProjectTreeItemList(responseItem);
     }
 
     @Override
@@ -45,9 +47,24 @@ public class SaasProjectServiceImpl implements ISaasProjectService {
         // 查询运维系统区域项目树
         QuerySaasAreaProjectTreeDTO querySaasAreaProjectTreeDTO = new QuerySaasAreaProjectTreeDTO();
         querySaasAreaProjectTreeDTO.setDefaultValue();
-        FmResponseItem<SaasAreaProjectTreeVO> responseItem = saasProjectClient.queryAreaProjectTree(querySaasAreaProjectTreeDTO);
+        FmResponseContent<SaasAreaProjectTreeVO> responseContent = saasProjectClient.queryAreaProjectTree(querySaasAreaProjectTreeDTO);
         // 查询结果转换
-        SaasAreaProjectTreeVO saasAreaProjectTreeVO = responseItem.getItem();
+        return convert2ProjectTreeItemList(responseContent);
+    }
+
+    /**
+     * 将运维系统区域项目树,转换为fm区域项目树
+     *
+     * @param responseItem 运维系统区域项目树查询结果
+     * @return fm区域项目树
+     * @author lixing
+     * @version V1.0 2021/3/29 6:30 下午
+     */
+    private List<ProjectTreeItemVO> convert2ProjectTreeItemList(FmResponseContent<SaasAreaProjectTreeVO> responseItem) {
+        SaasAreaProjectTreeVO saasAreaProjectTreeVO = responseItem.getContent();
+        if (saasAreaProjectTreeVO == null) {
+            return null;
+        }
         List<SaasAreaProjectTreeItemVO> areas = saasAreaProjectTreeVO.getAreas();
 
         List<ProjectTreeItemVO> result = Lists.newArrayList();
@@ -126,5 +143,6 @@ public class SaasProjectServiceImpl implements ISaasProjectService {
             children = Lists.newArrayList();
         }
         children.addAll(children2Add);
+        parentNode.setChildren(children);
     }
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/workresume/controller/WorkResumeController.java

@@ -38,7 +38,7 @@ public class WorkResumeController {
     @PostMapping("/create")
     public CommonResult<FmResponseUpsertVO> createWorkResume(
             @Valid @RequestBody AddWorkResumeDTO addWorkResumeDTO) {
-        Long id = workResumeService.createWorkResume(addWorkResumeDTO);
+        String id = workResumeService.createWorkResume(addWorkResumeDTO);
         return ResultHelper.single(new FmResponseUpsertVO(id));
     }
 

+ 2 - 2
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/AddWorkResumeDTO.java

@@ -18,11 +18,11 @@ import java.util.Date;
 public class AddWorkResumeDTO {
     @ApiModelProperty(value = "人员主键", required = true)
     @NotNull(message = "人员主键不能为空")
-    private Long personId;
+    private String personId;
 
     @ApiModelProperty(value = "部门主键", required = true)
     @NotNull(message = "部门主键不能为空")
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "状态")
     private String state;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/DeleteWorkResumeDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class DeleteWorkResumeDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 3 - 3
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/PageQueryWorkResumeDTO.java

@@ -16,13 +16,13 @@ import lombok.Data;
 @ApiModel(value = "分页查询工作信息入参")
 public class PageQueryWorkResumeDTO extends PageDTO {
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
     @ApiModelProperty(value = "人员主键", required = true)
-    private Long personId;
+    private String personId;
 
     @ApiModelProperty(value = "部门主键", required = true)
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "状态", required = true)
     private String state;

+ 2 - 2
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDTO.java

@@ -14,10 +14,10 @@ import java.util.Date;
 @ApiModel(value = "查询工作信息入参")
 public class QueryWorkResumeDTO {
     @ApiModelProperty(value = "人员主键", required = true)
-    private Long personId;
+    private String personId;
 
     @ApiModelProperty(value = "部门主键", required = true)
-    private Long depId;
+    private String depId;
 
     @ApiModelProperty(value = "状态", required = true)
     private String state;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/QueryWorkResumeDetailDTO.java

@@ -15,6 +15,6 @@ import javax.validation.constraints.NotNull;
 public class QueryWorkResumeDetailDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "id", required = true)
-    private Long id;
+    private String id;
 
 }

+ 9 - 9
fm-person/src/main/java/com/persagy/fm/workresume/model/dto/UpdateWorkResumeDTO.java

@@ -17,27 +17,27 @@ import java.util.Date;
 @ApiModel(value = "更新工作信息入参")
 public class UpdateWorkResumeDTO {
     @ApiModelProperty(value = "id", required = true)
-    @NotNull(message = "id不能为空") // todo 更新校验规则
-    private Long id;
+    @NotNull(message = "id不能为空") 
+    private String id;
 
     @ApiModelProperty(value = "人员主键", required = true)
-    @NotNull(message = "人员主键不能为空") // todo 更新校验规则
-    private Long personId;
+    @NotNull(message = "人员主键不能为空") 
+    private String personId;
 
     @ApiModelProperty(value = "部门主键", required = true)
-    @NotNull(message = "部门主键不能为空") // todo 更新校验规则
-    private Long depId;
+    @NotNull(message = "部门主键不能为空") 
+    private String depId;
 
     @ApiModelProperty(value = "状态", required = true)
-    @NotNull(message = "状态不能为空") // todo 更新校验规则
+    @NotNull(message = "状态不能为空") 
     private String state;
 
     @ApiModelProperty(value = "入职时间", required = true)
-    @NotNull(message = "入职时间不能为空") // todo 更新校验规则
+    @NotNull(message = "入职时间不能为空") 
     private Date hiredDate;
 
     @ApiModelProperty(value = "离职时间", required = true)
-    @NotNull(message = "离职时间不能为空") // todo 更新校验规则
+    @NotNull(message = "离职时间不能为空") 
     private Date departureDate;
 
 }

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeItemVO.java

@@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ResponseWorkResumeItemVO {
     @ApiModelProperty("id")
-    private Long id;
+    private String id;
 
     @ApiModelProperty("人员主键")
     private Long personId;

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/workresume/model/vo/ResponseWorkResumeListItemVO.java

@@ -17,7 +17,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 @JsonInclude(JsonInclude.Include.NON_NULL)
 public class ResponseWorkResumeListItemVO {
     @ApiModelProperty("id")
-    private Long id;
+    private String id;
 
     @ApiModelProperty("人员主键")
     private Long personId;

+ 3 - 3
fm-person/src/main/java/com/persagy/fm/workresume/service/IWorkResumeService.java

@@ -26,7 +26,7 @@ public interface IWorkResumeService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:06
      */
-    Long createWorkResume(AddWorkResumeDTO addWorkResumeDTO);
+    String createWorkResume(AddWorkResumeDTO addWorkResumeDTO);
 
     /**
      * 工作信息详情
@@ -36,7 +36,7 @@ public interface IWorkResumeService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:06
      */
-    WorkResume queryWorkResumeDetail(Long id);
+    WorkResume queryWorkResumeDetail(String id);
 
     /**
      * 更新工作信息
@@ -54,7 +54,7 @@ public interface IWorkResumeService {
      * @author lixing
      * @version V1.0 2021-03-15 17:20:06
      */
-    void deleteWorkResume(Long id);
+    void deleteWorkResume(String id);
 
     /**
      * 查询工作信息

+ 8 - 7
fm-person/src/main/java/com/persagy/fm/workresume/service/impl/WorkResumeServiceImpl.java

@@ -23,6 +23,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.base.CaseFormat;
 import com.persagy.fm.common.model.dto.Sort;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 /**
  * 工作信息(WorkResume) service层
@@ -42,7 +43,7 @@ public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkRes
      * @version V1.0 2021-03-15 17:20:06
      */
     @Override
-    public Long createWorkResume(AddWorkResumeDTO addWorkResumeDTO) {
+    public String createWorkResume(AddWorkResumeDTO addWorkResumeDTO) {
         WorkResume workResume = ConvertWorkResumeTool.INSTANCE.convertAddDto2Entity(addWorkResumeDTO);
         // 设置默认值
         setDefaultValue(workResume);
@@ -76,7 +77,7 @@ public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkRes
      * @version V1.0 2021-03-15 17:20:06
      */
     @Override
-    public WorkResume queryWorkResumeDetail(Long id) {
+    public WorkResume queryWorkResumeDetail(String id) {
         WorkResume workResume = getById(id);
         if (workResume == null) {
             throw new IllegalArgumentException("查看WorkResume详情时发生异常,找不到要查看的记录,id=" + id);
@@ -106,7 +107,7 @@ public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkRes
      * @author lixing
      * @version V1.0 2021-03-15 17:20:06
      */
-    public WorkResume checkDeletable(Long id) {
+    public WorkResume checkDeletable(String id) {
         if (id == null) {
             throw new IllegalArgumentException("删除WorkResume时发生异常,主键为空");
         }
@@ -128,7 +129,7 @@ public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkRes
      * @version V1.0 2021-03-15 17:20:06
      */
     @Override
-    public void deleteWorkResume(Long id) {
+    public void deleteWorkResume(String id) {
         // 校验是否可删除
         WorkResume workResume = checkDeletable(id);
 
@@ -152,15 +153,15 @@ public class WorkResumeServiceImpl extends ServiceImpl<WorkResumeMapper, WorkRes
 
         if (queryWorkResumeDTO != null) {
 
-            if (queryWorkResumeDTO.getPersonId() != null) {
+            if (!StringUtils.isEmpty(queryWorkResumeDTO.getPersonId())) {
                 queryWrapper.eq(WorkResume.PROP_PERSON_ID, queryWorkResumeDTO.getPersonId());
             }
 
-            if (queryWorkResumeDTO.getDepId() != null) {
+            if (!StringUtils.isEmpty(queryWorkResumeDTO.getDepId())) {
                 queryWrapper.eq(WorkResume.PROP_DEP_ID, queryWorkResumeDTO.getDepId());
             }
 
-            if (queryWorkResumeDTO.getState() != null) {
+            if (!StringUtils.isEmpty(queryWorkResumeDTO.getState())) {
                 queryWrapper.eq(WorkResume.PROP_STATE, queryWorkResumeDTO.getState());
             }
 

+ 17 - 17
fm-person/src/main/resources/mapper/DepartmentMapper.xml

@@ -1,22 +1,22 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.persagy.fm.department.dao.DepartmentMapper">
-<!--    <resultMap id="DepartmentMap" type="com.persagy.fm.department.model.Department">-->
-<!--        <result column="id" property="id"/>-->
-<!--        <result column="name" property="name"/>-->
-<!--        <result column="type" property="type"/>-->
-<!--        <result column="parent_id" property="parentId"/>-->
-<!--        <result column="resource_from" property="resourceFrom"/>-->
-<!--        <result column="managers" property="managers"/>-->
-<!--        <result column="full_path" property="fullPath"/>-->
-<!--        <result column="staff_count" property="staffCount"/>-->
-<!--        <result column="has_children" property="hasChildren"/>-->
-<!--        <result column="ts" property="ts"/>-->
-<!--        <result column="creator" property="creator"/>-->
-<!--        <result column="creation_time" property="creationTime"/>-->
-<!--        <result column="modifier" property="modifier"/>-->
-<!--        <result column="modified_time" property="modifiedTime"/>-->
-<!--        <result column="valid" property="valid"/>-->
-<!--    </resultMap>-->
+    <resultMap id="DepartmentMap" type="com.persagy.fm.department.model.Department">
+        <result column="id" property="id"/>
+        <result column="name" property="name"/>
+        <result column="type" property="type"/>
+        <result column="parent_id" property="parentId"/>
+        <result column="resource_from" property="resourceFrom"/>
+        <result column="managers" property="managers"/>
+        <result column="full_path" property="fullPath"/>
+        <result column="staff_count" property="staffCount"/>
+        <result column="has_children" property="hasChildren"/>
+        <result column="ts" property="ts"/>
+        <result column="creator" property="creator"/>
+        <result column="creation_time" property="creationTime"/>
+        <result column="modifier" property="modifier"/>
+        <result column="modified_time" property="modifiedTime"/>
+        <result column="valid" property="valid"/>
+    </resultMap>
 </mapper>