Browse Source

test trans annotation

lixing 4 năm trước cách đây
mục cha
commit
69aab703b7
25 tập tin đã thay đổi với 312 bổ sung208 xóa
  1. 29 30
      fm-person/src/main/java/com/persagy/fm/department/controller/DepartmentController.java
  2. 1 1
      fm-person/src/main/java/com/persagy/fm/department/jms/DepJmsConfig.java
  3. 1 1
      fm-person/src/main/java/com/persagy/fm/department/model/ConvertDepartmentTool.java
  4. 3 3
      fm-person/src/main/java/com/persagy/fm/department/model/vo/ResponseDepartmentItemVO.java
  5. 13 4
      fm-person/src/main/java/com/persagy/fm/depproject/service/impl/DepProjectServiceImpl.java
  6. 2 2
      fm-person/src/main/java/com/persagy/fm/person/model/dto/PageQueryPersonDTO.java
  7. 32 13
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonNameTranslator.java
  8. 27 7
      fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonServiceImpl.java
  9. 4 4
      fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/AddSaasAccountDTO.java
  10. 4 4
      fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/PageQuerySaasAccountDTO.java
  11. 4 4
      fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/UpdateSaasAccountDTO.java
  12. 0 23
      fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/ConvertSaasAccountRoleTool.java
  13. 4 30
      fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/AddSaasAccountRoleDTO.java
  14. 4 4
      fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/DeleteSaasAccountRoleDTO.java
  15. 4 10
      fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/QuerySaasAccountRoleDTO.java
  16. 0 35
      fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/UpdateSaasAccountRoleDTO.java
  17. 30 9
      fm-person/src/main/java/com/persagy/fm/saas/project/client/SaasProjectClient.java
  18. 20 3
      fm-person/src/main/java/com/persagy/fm/saas/project/model/dto/QuerySaasAreaDTO.java
  19. 0 14
      fm-person/src/main/java/com/persagy/fm/saas/project/model/vo/SaasAreaListItemVO.java
  20. 11 0
      fm-person/src/main/java/com/persagy/fm/saas/project/service/ISaasProjectService.java
  21. 105 3
      fm-person/src/main/java/com/persagy/fm/saas/project/service/impl/SaasProjectServiceImpl.java
  22. 4 1
      fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/AddSaasRoleDTO.java
  23. 4 1
      fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/DeleteSaasRoleDTO.java
  24. 2 1
      fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/PageQuerySaasRoleDTO.java
  25. 4 1
      fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/UpdateSaasRoleDTO.java

+ 29 - 30
fm-person/src/main/java/com/persagy/fm/department/controller/DepartmentController.java

@@ -6,6 +6,7 @@ import com.persagy.fm.common.utils.ResultHelper;
 import com.persagy.fm.department.model.ConvertDepartmentTool;
 import com.persagy.fm.department.model.Department;
 import com.persagy.fm.department.model.dto.*;
+import com.persagy.fm.department.model.vo.ManagerVO;
 import com.persagy.fm.department.model.vo.ResponseDepartmentItemVO;
 import com.persagy.fm.department.model.vo.ResponseDepartmentListItemVO;
 import com.persagy.fm.department.model.vo.ResponseDepartmentTreeItemVO;
@@ -20,6 +21,7 @@ import com.persagy.fm.translate.model.Transes;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
@@ -63,43 +65,40 @@ public class DepartmentController {
     @ApiOperation(value = "部门详情")
     @PostMapping("/get")
     // TODO: 2021/3/24 使用翻译器
-    @Transes({
-            @Trans(source = "personNameTranslator",
-                    type = TransType.SERVICE, batch = true,
-                    parameter = "managers", target = "managersShowName"),
-//            @Trans(source = "com.persagy.fm.person.service.IPersonTransBatchHandler",
-//                    type = TransType.SERVICE, result = "name", batch = true,
-//                    condition = "id", parameter = "projectIds", target = "projectsShowName")
-    })
-    @Trans(type = TransType.SERVICE, batch = true, source = "personNameTranslator", parameter = "managers", target = "managerShowName")
+//    @Transes({
+//            @Trans(source = "personNameTranslator",
+//                    type = TransType.SERVICE, batch = true,
+//                    parameter = "managerIds", target = "managerObjs"),
+////            @Trans(source = "com.persagy.fm.person.service.IPersonTransBatchHandler",
+////                    type = TransType.SERVICE, result = "name", batch = true,
+////                    condition = "id", parameter = "projectIds", target = "projectsShowName")
+//    })
     public CommonResult<ResponseDepartmentItemVO> queryDepartmentDetail(
             @Valid @RequestBody QueryDepartmentDetailDTO queryDepartmentDetailDTO) {
         Department department = departmentService.queryDepartmentDetail(queryDepartmentDetailDTO.getId());
         ResponseDepartmentItemVO responseDepartmentItemVO = ConvertDepartmentTool.INSTANCE.convert2ResponseItemDTO(department);
-        // 部门负责人转换为列表
-        String managers = department.getManagers();
-        List<Long> managerIdList = change2ManagerIdList(managers);
-        responseDepartmentItemVO.setManagers(managerIdList);
+        List<ManagerVO> test = test(department.getManagers());
+        responseDepartmentItemVO.setManagerObjs(test);
         return ResultHelper.single(responseDepartmentItemVO);
     }
 
-    /**
-     * 将部门负责人转换为负责人id列表
-     *
-     * @param managers 负责人id字符串:id,id,id
-     * @return 负责人id列表
-     * @author lixing
-     * @version V1.0 2021/3/24 11:09 上午
-     */
-    private List<Long> change2ManagerIdList(String managers) {
-        if (StringUtils.isNotBlank(managers)) {
-            String[] managersArray = managers.split(",");
-            List<String> managerStrList = Arrays.asList(managersArray);
-            return managerStrList.stream().map(Long::valueOf).collect(Collectors.toList());
+    @Trans(source = "personNameTranslator",
+            type = TransType.SERVICE, batch = true,
+            parameter = "id", target = "name")
+    private List<ManagerVO> test(String manager) {
+        String[] ids = manager.split(",");
+        if (ids.length == 0) {
+            return null;
         }
-        return null;
-    }
 
+        List<ManagerVO> result = Lists.newArrayList();
+        for (String id : ids) {
+            ManagerVO managerVO = new ManagerVO();
+            managerVO.setId(Long.valueOf(id));
+            result.add(managerVO);
+        }
+        return result;
+    }
 
     @ApiOperation(value = "更新部门")
     @PostMapping("/update")
@@ -173,8 +172,8 @@ public class DepartmentController {
     @ApiOperation(value = "部门项目树")
     @PostMapping("/projects/tree")
     public CommonResult<PageList<ProjectTreeItemVO>> queryDepProjectTree(
-            @Valid @RequestBody DeleteDepartmentDTO deleteDepartmentDTO) {
-        List<ProjectTreeItemVO> projectTreeItemVOList = depProjectService.queryDepProjectTree(deleteDepartmentDTO.getId());
+            @Valid @RequestBody QueryDepProjectTreeDTO queryDepProjectTreeDTO) {
+        List<ProjectTreeItemVO> projectTreeItemVOList = depProjectService.queryDepProjectTree(queryDepProjectTreeDTO.getParentDepId());
         return ResultHelper.multi(projectTreeItemVOList);
     }
 

+ 1 - 1
fm-person/src/main/java/com/persagy/fm/department/jms/DepJmsConfig.java

@@ -38,7 +38,7 @@ public class DepJmsConfig {
 
     @Bean
     public TopicExchange depSaasExchange() {
-        return new TopicExchange(depSaasExchange);
+        return new TopicExchange(depSaasExchange, true, true);
     }
 
     @Bean

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

@@ -31,7 +31,7 @@ public interface ConvertDepartmentTool {
      * @author lixing
      * @version V1.0 2021-03-11 15:09:19
      */
-    @Mapping(source = "managers", ignore = true, target = "managers")
+    @Mapping(source = "managers", target = "managerIds")
     ResponseDepartmentItemVO convert2ResponseItemDTO(Department department);
 
     /**

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

@@ -34,10 +34,10 @@ public class ResponseDepartmentItemVO {
     private String resourceFrom;
 
     @ApiModelProperty("负责人id")
-    private List<Long> managers;
+    private String managerIds;
 
-    @ApiModelProperty("负责人姓名")
-    private List<String> managersShowName;
+    @ApiModelProperty("负责人列表")
+    private List<ManagerVO> managerObjs;
 
     @ApiModelProperty("部门全路径")
     private String fullPath;

+ 13 - 4
fm-person/src/main/java/com/persagy/fm/depproject/service/impl/DepProjectServiceImpl.java

@@ -14,6 +14,7 @@ import com.persagy.fm.depproject.model.*;
 import com.persagy.fm.depproject.model.dto.*;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -34,10 +35,18 @@ public class DepProjectServiceImpl extends ServiceImpl<DepProjectMapper, DepProj
     ISaasProjectService saasProjectService;
 
     @Override
-    public List<ProjectTreeItemVO> queryDepProjectTree(Long depId) {
-        // 部门id 为 0, 加载整颗区域项目树,否则根据部门id查询部门关联的项目,然后组装项目树
-        // TODO: 2021/3/22 查询部门关联的项目
-        List<String> projectIds = null;
+    public List<ProjectTreeItemVO> queryDepProjectTree(Long parentDepId) {
+        // 父部门id 为0或空, 加载整颗区域项目树
+        if (parentDepId == null || parentDepId == 0L) {
+            return saasProjectService.queryAllProjectTree();
+        }
+        // 部门关联的项目
+        QueryDepProjectDTO queryDepProjectDTO = new QueryDepProjectDTO();
+        queryDepProjectDTO.setDepId(parentDepId);
+        List<DepProject> depProjectList = queryDepProjectList(queryDepProjectDTO);
+        List<String> projectIds = depProjectList.stream().
+                map(DepProject::getProjectId).
+                collect(Collectors.toList());
         return saasProjectService.queryProjectTree(projectIds);
     }
 

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

@@ -15,12 +15,12 @@ import lombok.EqualsAndHashCode;
 @ApiModel(value = "分页查询部门下的人员入参")
 public class PageQueryPersonDTO extends PageDTO {
 
-    @ApiModelProperty(value = "部门id", required = true)
+    @ApiModelProperty(value = "部门id")
     private Long depId;
 
     @ApiModelProperty(value = "在职状态")
     private Integer state;
 
-    @ApiModelProperty(value = "姓名", required = true)
+    @ApiModelProperty(value = "姓名")
     private String name;
 }

+ 32 - 13
fm-person/src/main/java/com/persagy/fm/person/service/impl/PersonNameTranslator.java

@@ -1,11 +1,13 @@
 package com.persagy.fm.person.service.impl;
 
+import com.persagy.fm.department.model.vo.ManagerVO;
 import com.persagy.fm.person.model.Person;
 import com.persagy.fm.person.service.IPersonService;
 import com.persagy.fm.translate.service.ITranslator;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -20,40 +22,57 @@ public class PersonNameTranslator implements ITranslator {
 
     @Override
     public String trans(String parameter) {
-        if(StringUtils.isBlank(parameter)) {
+        if (StringUtils.isBlank(parameter)) {
             return "";
         }
         Person person = personService.queryPersonDetail(Long.valueOf(parameter));
         return person.getName();
+        //        if(StringUtils.isBlank(parameter)) {
+        //            return null;
+        //        }
+        //        String[] ids = parameter.split(",");
+        //        List<Long> idList = Lists.newArrayList();
+        //
+        //        for (String id : ids) {
+        //            idList.add(Long.valueOf(id));
+        //        }
+        //        List<Person> personList = personService.queryByIds(idList);
+        //        return personList.stream().map(person -> {
+        //            ManagerVO managerVO = new ManagerVO();
+        //            managerVO.setId(person.getId());
+        //            managerVO.setName(person.getName());
+        //            return managerVO;
+        //        }).collect(Collectors.toList());
     }
 
     @Override
     public Map<String, Object> transBatch(List<String> parameter) {
-        if(CollectionUtils.isEmpty(parameter)) {
+        if (CollectionUtils.isEmpty(parameter)) {
             return null;
         }
         Set<Long> idSet = new HashSet<>();
-        for(String para:parameter) {
+        for (String para : parameter) {
             String[] ids = StringUtils.split(para, ",");
-            for(String id:ids) {
+            for (String id : ids) {
                 idSet.add(Long.valueOf(id));
             }
         }
-        List<Long> idList = new ArrayList<>();
-        idList.addAll(idSet);
+        List<Long> idList = new ArrayList<>(idSet);
         Map<String, Object> idMap = new HashMap<>(16);
         List<Person> personList = personService.queryByIds(idList);
         personList.forEach(person -> idMap.put(String.valueOf(person.getId()), person.getName()));
         Map<String, Object> resultMap = new HashMap<>(16);
-        for(String para:parameter) {
+        for (String para : parameter) {
             String[] ids = StringUtils.split(para, ",");
-            StringBuilder sb = new StringBuilder();
-            for(String id:ids) {
-                sb.append(idMap.get(id)).append(",");
+            List<ManagerVO> managerVOList = Lists.newArrayList();
+            for (String id : ids) {
+                ManagerVO managerVO = new ManagerVO();
+                managerVO.setId(Long.valueOf(id));
+                managerVO.setName(idMap.get(id).toString());
+                managerVOList.add(managerVO);
             }
-            sb.deleteCharAt(sb.length() - 1);
-            Map<String, String> showNameMap = new HashMap<>(1);
-            showNameMap.put("name", sb.toString());
+            Map<String, List<ManagerVO>> showNameMap = new HashMap<>(1);
+            showNameMap.put("name", managerVOList);
             resultMap.put(para, showNameMap);
         }
         return resultMap;

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

@@ -20,6 +20,8 @@ import com.persagy.fm.saas.account.constant.enums.AccountTypeEnum;
 import com.persagy.fm.saas.account.model.dto.AddSaasAccountDTO;
 import com.persagy.fm.saas.account.model.dto.PageQuerySaasAccountDTO;
 import com.persagy.fm.saas.account.model.vo.SaasAccountListItemVO;
+import com.persagy.fm.saas.accountproject.client.SaasAccountProjectClient;
+import com.persagy.fm.saas.accountproject.model.dto.AddSaasAccountProjectDTO;
 import com.persagy.fm.saas.accountrole.client.SaasAccountRoleClient;
 import com.persagy.fm.saas.accountrole.constant.enums.AccountRoleTypeEnum;
 import com.persagy.fm.saas.accountrole.model.dto.AddSaasAccountRoleDTO;
@@ -51,6 +53,8 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     private PersonMapper personMapper;
     @Autowired
     private SaasAccountRoleClient saasAccountRoleClient;
+    @Autowired
+    private SaasAccountProjectClient saasAccountProjectClient;
 
     /**
      * 创建人员
@@ -71,7 +75,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
         // 创建人员工作信息
         saveWorkResumes(addPersonDTO, person.getId());
         // 账号关联项目
-        // TODO: 2021/3/23
+        saveAccountProject(accountId, addPersonDTO.getProjectIds());
         // 账号关联角色
         saveAccountRole(accountId, addPersonDTO.getMainDuty(),
                 addPersonDTO.getOtherDuties(), addPersonDTO.getOtherRoles());
@@ -79,6 +83,26 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
     }
 
     /**
+     * 账号关联项目
+     *
+     * @param accountId 账号id
+     * @param projectIds 项目id列表
+     * @author lixing
+     * @version V1.0 2021/3/26 5:23 下午
+     */
+    private void saveAccountProject(String accountId, List<String> projectIds) {
+        if (!CollectionUtils.isEmpty(projectIds)) {
+            for (String projectId : projectIds) {
+                AddSaasAccountProjectDTO addSaasAccountProjectDTO = new AddSaasAccountProjectDTO();
+                addSaasAccountProjectDTO.setDefaultValue();
+                addSaasAccountProjectDTO.setAccountId(accountId);
+                addSaasAccountProjectDTO.setProjectId(projectId);
+                saasAccountProjectClient.createSaasAccountProject(addSaasAccountProjectDTO);
+            }
+        }
+    }
+
+    /**
      * 账号关联角色
      *
      * @param accountId 账号id
@@ -175,9 +199,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      */
     private String createAccount(AddPersonDTO addPersonDTO) {
         AddSaasAccountDTO addSaasAccountDTO = new AddSaasAccountDTO();
-        addSaasAccountDTO.setAccountBelong(AccountBelongEnum.BUSINESS.getType());
-        addSaasAccountDTO.setGroupCode(DefaultAppContext.getContext().getGroupCode());
-        addSaasAccountDTO.setAppId(DefaultAppContext.getContext().getAppId());
+        addSaasAccountDTO.setDefaultValue();
         addSaasAccountDTO.setUsername(addPersonDTO.getUsername());
         addSaasAccountDTO.setPhoneNum(addPersonDTO.getPhoneNum());
         addSaasAccountDTO.setMail(addPersonDTO.getMail());
@@ -197,9 +219,7 @@ public class PersonServiceImpl extends ServiceImpl<PersonMapper, Person>
      */
     private void checkUserName(String username) {
         PageQuerySaasAccountDTO pageQuerySaasAccountDTO = new PageQuerySaasAccountDTO();
-        pageQuerySaasAccountDTO.setPage(PageQueryConstants.DEFAULT_PAGE);
-        pageQuerySaasAccountDTO.setSize(PageQueryConstants.DEFAULT_SIZE);
-        pageQuerySaasAccountDTO.setGroupCode(DefaultAppContext.getContext().getGroupCode());
+        pageQuerySaasAccountDTO.setDefaultValue();
         pageQuerySaasAccountDTO.setUsername(username);
         FmResponseContent<List<SaasAccountListItemVO>> listFmResponseContent = saasAccountClient.querySaasAccountPageList(pageQuerySaasAccountDTO);
         if (listFmResponseContent.getCount() > 0) {

+ 4 - 4
fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/AddSaasAccountDTO.java

@@ -1,6 +1,8 @@
 package com.persagy.fm.saas.account.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
@@ -10,12 +12,10 @@ import java.util.Date;
  * @author lixing
  * @version V1.0 2021/3/23 11:55 上午
  **/
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class AddSaasAccountDTO {
-    private String accountBelong;
-    private String groupCode;
+public class AddSaasAccountDTO extends SaasBaseDTO {
     private String accountType;
-    private String appId;
     private String username;
     private String password;
     private String phoneNum;

+ 4 - 4
fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/PageQuerySaasAccountDTO.java

@@ -1,7 +1,9 @@
 package com.persagy.fm.saas.account.model.dto;
 
 import com.persagy.fm.common.model.dto.PageDTO;
+import com.persagy.fm.saas.common.model.dto.SaasBasePageDTO;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
  * 查询运维平台账号入参
@@ -9,13 +11,11 @@ import lombok.Data;
  * @author lixing
  * @version V1.0 2021/3/23 11:55 上午
  **/
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class PageQuerySaasAccountDTO extends PageDTO {
-    private String accountBelong;
-    private String groupCode;
+public class PageQuerySaasAccountDTO extends SaasBasePageDTO {
     private String accountId;
     private String accountType;
-    private String appId;
     private String username;
     private String phoneNum;
     private String accountSource;

+ 4 - 4
fm-person/src/main/java/com/persagy/fm/saas/account/model/dto/UpdateSaasAccountDTO.java

@@ -1,6 +1,8 @@
 package com.persagy.fm.saas.account.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
@@ -10,13 +12,11 @@ import java.util.Date;
  * @author lixing
  * @version V1.0 2021/3/23 11:55 上午
  **/
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class UpdateSaasAccountDTO {
+public class UpdateSaasAccountDTO extends SaasBaseDTO {
     private String accountId;
-    private String accountBelong;
-    private String groupCode;
     private String accountType;
-    private String appId;
     private String username;
     private String password;
     private String phoneNum;

+ 0 - 23
fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/ConvertSaasAccountRoleTool.java

@@ -1,7 +1,6 @@
 package com.persagy.fm.saas.accountrole.model;
 
 import com.persagy.fm.saas.accountrole.model.dto.AddSaasAccountRoleDTO;
-import com.persagy.fm.saas.accountrole.model.dto.UpdateSaasAccountRoleDTO;
 import org.mapstruct.Mapper;
 import org.mapstruct.MappingTarget;
 import org.mapstruct.NullValueCheckStrategy;
@@ -17,28 +16,6 @@ import org.mapstruct.factory.Mappers;
 @Mapper(nullValueMappingStrategy = NullValueMappingStrategy.RETURN_DEFAULT,
         nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS)
 public interface ConvertSaasAccountRoleTool {
-
     ConvertSaasAccountRoleTool INSTANCE = Mappers.getMapper(ConvertSaasAccountRoleTool.class);
-
-    /**
-     * addDTO转换为do
-     *
-     * @param addSaasAccountRoleDTO addDTO
-     * @return 要创建的do对象
-     * @author lixing
-     * @version V1.0 2021-03-25 09:39:40
-     */
-    SaasAccountRole convertAddDto2Entity(AddSaasAccountRoleDTO addSaasAccountRoleDTO);
-
-    /**
-     * updateDTO转换为实体
-     *
-     * @param saasAccountRole          更新前的do对象
-     * @param updateSaasAccountRoleDTO updateDTO
-     * @return 更新后的do对象
-     * @author lixing
-     * @version V1.0 2021-03-25 09:39:40
-     */
-    SaasAccountRole convertUpdateDto2Entity(@MappingTarget SaasAccountRole saasAccountRole, UpdateSaasAccountRoleDTO updateSaasAccountRoleDTO);
 }
 

+ 4 - 30
fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/AddSaasAccountRoleDTO.java

@@ -1,36 +1,22 @@
 package com.persagy.fm.saas.accountrole.model.dto;
 
-import com.persagy.fm.common.context.DefaultAppContext;
-import com.persagy.fm.saas.account.constant.enums.AccountBelongEnum;
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotNull;
 
 import lombok.Data;
-
-import java.util.Date;
+import lombok.EqualsAndHashCode;
 
 /**
  * @author lixing
  * @version V1.0 2021-03-25 09:39:39
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "创建账号-角色关联信息入参")
-public class AddSaasAccountRoleDTO {
-    @ApiModelProperty(value = "账号所属", required = true)
-    @NotNull(message = "账号所属不能为空")
-    private String accountBelong;
-
-    @ApiModelProperty(value = "集团编码", required = true)
-    @NotNull(message = "集团编码不能为空") 
-    private String groupCode;
-
-    @ApiModelProperty(value = "应用ID", required = true)
-    @NotNull(message = "应用ID不能为空")
-    private String appId;
-
-
+public class AddSaasAccountRoleDTO extends SaasBaseDTO {
     @ApiModelProperty(value = "账号ID", required = true)
     @NotNull(message = "账号ID不能为空") 
     private String accountId;
@@ -42,16 +28,4 @@ public class AddSaasAccountRoleDTO {
     @ApiModelProperty(value = "关联类型,0-主岗,1-副岗", required = true)
     @NotNull(message = "关联类型不能为空")
     private String casType;
-
-    /**
-     * 设置默认的属性
-     *
-     * @author lixing
-     * @version V1.0 2021/3/26 11:32 上午
-     */
-    public void setDefaultValue() {
-        this.setAccountBelong(AccountBelongEnum.BUSINESS.getType());
-        this.setGroupCode(DefaultAppContext.getContext().getGroupCode());
-        this.setAppId(DefaultAppContext.getContext().getAppId());
-    }
 }

+ 4 - 4
fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/DeleteSaasAccountRoleDTO.java

@@ -1,8 +1,10 @@
 package com.persagy.fm.saas.accountrole.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
 
@@ -10,11 +12,9 @@ import javax.validation.constraints.NotNull;
  * @author lixing
  * @version V1.0 2021-03-25 09:39:40
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "删除账号-角色关联信息入参")
-public class DeleteSaasAccountRoleDTO {
-    private String accountBelong;
+public class DeleteSaasAccountRoleDTO extends SaasBaseDTO {
     private String accountId;
-    private String appId;
-    private String groupCode;
 }

+ 4 - 10
fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/QuerySaasAccountRoleDTO.java

@@ -1,8 +1,10 @@
 package com.persagy.fm.saas.accountrole.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
 import java.util.Date;
@@ -11,18 +13,10 @@ import java.util.Date;
  * @author lixing
  * @version V1.0 2021-03-25 09:39:40
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "查询账号-角色关联信息入参")
-public class QuerySaasAccountRoleDTO {
-    @ApiModelProperty(value = "账号所属", required = true)
-    private String accountBelong;
-
-    @ApiModelProperty(value = "集团编码", required = true)
-    private String groupCode;
-
-    @ApiModelProperty(value = "应用ID", required = true)
-    private String appId;
-
+public class QuerySaasAccountRoleDTO extends SaasBaseDTO {
     @ApiModelProperty(value = "账号ID", required = true)
     private String accountId;
 

+ 0 - 35
fm-person/src/main/java/com/persagy/fm/saas/accountrole/model/dto/UpdateSaasAccountRoleDTO.java

@@ -1,35 +0,0 @@
-package com.persagy.fm.saas.accountrole.model.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-
-import javax.validation.constraints.NotNull;
-
-import lombok.Data;
-
-import java.util.Date;
-
-/**
- * @author lixing
- * @version V1.0 2021-03-25 09:39:40
- */
-@Data
-@ApiModel(value = "更新账号-角色关联信息入参")
-public class UpdateSaasAccountRoleDTO {
-    @ApiModelProperty(value = "集团编码", required = true)
-    @NotNull(message = "集团编码不能为空") // todo 更新校验规则
-    private String groupCode;
-
-    @ApiModelProperty(value = "账号ID", required = true)
-    @NotNull(message = "账号ID不能为空") // todo 更新校验规则
-    private String accountId;
-
-    @ApiModelProperty(value = "角色ID", required = true)
-    @NotNull(message = "角色ID不能为空") // todo 更新校验规则
-    private String roleId;
-
-    @ApiModelProperty(value = "关联类型,0-主岗,1-副岗", required = true)
-    @NotNull(message = "关联类型,0-主岗,1-副岗不能为空") // todo 更新校验规则
-    private String casType;
-
-}

+ 30 - 9
fm-person/src/main/java/com/persagy/fm/saas/project/client/SaasProjectClient.java

@@ -1,16 +1,17 @@
 package com.persagy.fm.saas.project.client;
 
 import com.persagy.fm.common.client.FeignConfig;
-import com.persagy.fm.common.model.dto.DmpRequiredParam;
 import com.persagy.fm.common.response.FmResponseContent;
+import com.persagy.fm.common.response.FmResponseItem;
 import com.persagy.fm.saas.project.client.fallback.SaasProjectClientFallbackFactory;
 import com.persagy.fm.saas.project.constant.FeignClientNameConstants;
+import com.persagy.fm.saas.project.model.SaasArea;
 import com.persagy.fm.saas.project.model.dto.QuerySaasAreaDTO;
-import com.persagy.fm.saas.project.model.vo.SaasAreaListItemVO;
+import com.persagy.fm.saas.project.model.dto.QuerySaasAreaProjectTreeDTO;
+import com.persagy.fm.saas.project.model.vo.SaasAreaProjectTreeVO;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.cloud.openfeign.SpringQueryMap;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
 
 import java.util.List;
 
@@ -20,10 +21,30 @@ import java.util.List;
  * @author lixing
  * @version V1.0 2021/3/22 2:13 下午
  **/
-//@FeignClient(name = FeignClientNameConstants.SAAS, fallbackFactory = SaasProjectClientFallbackFactory.class,
-//        configuration = FeignConfig.class)
+@FeignClient(name = FeignClientNameConstants.SAAS, fallbackFactory = SaasProjectClientFallbackFactory.class,
+        configuration = FeignConfig.class)
 public interface SaasProjectClient {
-    @RequestMapping("/saas-account/area/querySaasAreaList")
-    FmResponseContent<List<SaasAreaListItemVO>> querySaasAreaList(
-            @SpringQueryMap DmpRequiredParam dmpRequiredParam, @RequestBody QuerySaasAreaDTO querySaasAreaDTO);
+    /**
+     * 查询运维系统区域列表
+     *
+     * @param querySaasAreaDTO 查询运维系统区域列表入参
+     * @return 区域列表
+     * @author lixing
+     * @version V1.0 2021/3/26 5:47 下午
+     */
+    @PostMapping("/area/querySaasAreaList")
+    FmResponseContent<List<SaasArea>> querySaasAreaList(@RequestBody QuerySaasAreaDTO querySaasAreaDTO);
+
+    /**
+     * 查询区域项目树
+     *
+     * @param querySaasAreaProjectTreeDTO 查询区域项目树入参
+     * @return 区域项目树
+     * @author lixing
+     * @version V1.0 2021/3/26 5:46 下午
+     */
+    @PostMapping("/project/queryAreaProjectTree")
+    FmResponseItem<SaasAreaProjectTreeVO> queryAreaProjectTree(
+             @RequestBody QuerySaasAreaProjectTreeDTO querySaasAreaProjectTreeDTO);
+
 }

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

@@ -1,14 +1,31 @@
 package com.persagy.fm.saas.project.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 /**
- * 查询"saas-区域"参数
+ * 查询"saas-区域"参数,所有参数非必填
  *
  * @author lixing
  * @version V1.0 2021/3/22 2:23 下午
  **/
+@EqualsAndHashCode(callSuper = true)
 @Data
-public class QuerySaasAreaDTO {
-    // TODO: 2021/3/22 配置属性
+public class QuerySaasAreaDTO extends SaasBaseDTO {
+    /**
+     * 区域ID
+     */
+    private String id;
+    private String parentId;
+    private String areaCode;
+    private String areaName;
+    /**
+     * 区域类别,0-非最底层区域,1-最底层区域,选填
+     */
+    private String areaType;
+    /**
+     * 是否统计出该层区域及其下级所包含区域对应的所有项目数量,默认false-不统计
+     */
+    private Boolean isTotal;
 }

+ 0 - 14
fm-person/src/main/java/com/persagy/fm/saas/project/model/vo/SaasAreaListItemVO.java

@@ -1,14 +0,0 @@
-package com.persagy.fm.saas.project.model.vo;
-
-import lombok.Data;
-
-/**
- * saas 区域列表条目对象
- *
- * @author lixing
- * @version V1.0 2021/3/22 2:22 下午
- **/
-@Data
-public class SaasAreaListItemVO {
-    // TODO: 2021/3/22 设置参数
-}

+ 11 - 0
fm-person/src/main/java/com/persagy/fm/saas/project/service/ISaasProjectService.java

@@ -20,4 +20,15 @@ public interface ISaasProjectService {
      * @version V1.0 2021/3/22 2:29 下午
      */
     List<ProjectTreeItemVO> queryProjectTree(List<String> projectIds);
+
+    /**
+     * 获取整个集团的项目树
+     *
+     * @return 项目树
+     * @author lixing
+     * @version V1.0 2021/3/26 5:36 下午
+     */
+    List<ProjectTreeItemVO> queryAllProjectTree();
+
+
 }

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

@@ -1,10 +1,21 @@
 package com.persagy.fm.saas.project.service.impl;
 
+import com.persagy.fm.common.constant.enums.BoolEnum;
+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.QuerySaasAreaDTO;
+import com.persagy.fm.saas.project.model.dto.QuerySaasAreaProjectTreeDTO;
 import com.persagy.fm.saas.project.model.vo.ProjectTreeItemVO;
+import com.persagy.fm.saas.project.model.vo.SaasAreaProjectTreeItemVO;
+import com.persagy.fm.saas.project.model.vo.SaasAreaProjectTreeVO;
+import com.persagy.fm.saas.project.model.vo.SaasProjectTreeItemVO;
 import com.persagy.fm.saas.project.service.ISaasProjectService;
+import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.util.List;
 
@@ -16,13 +27,104 @@ import java.util.List;
  **/
 @Service
 public class SaasProjectServiceImpl implements ISaasProjectService {
-//    @Autowired
-//    SaasProjectClient saasProjectClient;
-
+    @Autowired
+    SaasProjectClient saasProjectClient;
 
     @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;
     }
+
+    @Override
+    public List<ProjectTreeItemVO> queryAllProjectTree() {
+        // 查询运维系统区域项目树
+        QuerySaasAreaProjectTreeDTO querySaasAreaProjectTreeDTO = new QuerySaasAreaProjectTreeDTO();
+        querySaasAreaProjectTreeDTO.setDefaultValue();
+        FmResponseItem<SaasAreaProjectTreeVO> responseItem = saasProjectClient.queryAreaProjectTree(querySaasAreaProjectTreeDTO);
+        // 查询结果转换
+        SaasAreaProjectTreeVO saasAreaProjectTreeVO = responseItem.getItem();
+        List<SaasAreaProjectTreeItemVO> areas = saasAreaProjectTreeVO.getAreas();
+
+        List<ProjectTreeItemVO> result = Lists.newArrayList();
+        for (SaasAreaProjectTreeItemVO area : areas) {
+            ProjectTreeItemVO projectTreeItemVO = convert2ProjectTreeItemVO(area);
+            result.add(projectTreeItemVO);
+        }
+        return result;
+    }
+
+    /**
+     * 将项目对象转换为项目树节点对象
+     *
+     * @param project 项目对象
+     * @return 项目树节点对象
+     * @author lixing
+     * @version V1.0 2021/3/26 6:21 下午
+     */
+    private ProjectTreeItemVO convert2ProjectTreeItemVO(SaasProjectTreeItemVO project) {
+        ProjectTreeItemVO projectTreeItemVO = new ProjectTreeItemVO();
+        projectTreeItemVO.setName(project.getProjectName());
+        projectTreeItemVO.setId(project.getProjectId());
+        projectTreeItemVO.setIsProject(BoolEnum.TRUE.getType());
+        return projectTreeItemVO;
+    }
+
+    /**
+     * 将区域对象转换为项目树节点对象
+     *
+     * @param area 区域对象
+     * @return 项目树节点对象
+     * @author lixing
+     * @version V1.0 2021/3/26 6:18 下午
+     */
+    private ProjectTreeItemVO convert2ProjectTreeItemVO(SaasAreaProjectTreeItemVO area) {
+        ProjectTreeItemVO projectTreeItemVO = new ProjectTreeItemVO();
+        projectTreeItemVO.setName(area.getAreaName());
+        projectTreeItemVO.setId(area.getId());
+        projectTreeItemVO.setIsProject(BoolEnum.FALSE.getType());
+
+        // 如果区域下包含项目
+        List<SaasProjectTreeItemVO> projects = area.getProjects();
+        if (!CollectionUtils.isEmpty(projects)) {
+            List<ProjectTreeItemVO> projectItems = Lists.newArrayList();
+            for (SaasProjectTreeItemVO project : projects) {
+                ProjectTreeItemVO projectItem = convert2ProjectTreeItemVO(project);
+                projectItems.add(projectItem);
+            }
+            addChildren(projectTreeItemVO, projectItems);
+        }
+
+        // 如果区域下包含区域子集
+        List<SaasAreaProjectTreeItemVO> areaChildren = area.getChildrens();
+        if (!CollectionUtils.isEmpty(areaChildren)) {
+            List<ProjectTreeItemVO> areaItems = Lists.newArrayList();
+            for (SaasAreaProjectTreeItemVO areaChild : areaChildren) {
+                ProjectTreeItemVO areaItem = convert2ProjectTreeItemVO(areaChild);
+                areaItems.add(areaItem);
+            }
+            addChildren(projectTreeItemVO, areaItems);
+        }
+        return projectTreeItemVO;
+    }
+
+    /**
+     * 给项目树父节点添加子节点
+     *
+     * @param parentNode 父节点
+     * @param children2Add 子节点列表
+     * @author lixing
+     * @version V1.0 2021/3/27 2:05 下午
+     */
+    private void addChildren(ProjectTreeItemVO parentNode, List<ProjectTreeItemVO> children2Add) {
+        List<ProjectTreeItemVO> children = parentNode.getChildren();
+        if (CollectionUtils.isEmpty(children)) {
+            children = Lists.newArrayList();
+        }
+        children.addAll(children2Add);
+    }
 }

+ 4 - 1
fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/AddSaasRoleDTO.java

@@ -1,11 +1,13 @@
 package com.persagy.fm.saas.role.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotNull;
 
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
@@ -13,9 +15,10 @@ import java.util.Date;
  * @author lixing
  * @version V1.0 2021-03-22 19:04:19
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "创建入参")
-public class AddSaasRoleDTO {
+public class AddSaasRoleDTO extends SaasBaseDTO {
     @ApiModelProperty(value = "角色名称", required = true)
     @NotNull(message = "角色名称不能为空")
     private String roleName;

+ 4 - 1
fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/DeleteSaasRoleDTO.java

@@ -1,8 +1,10 @@
 package com.persagy.fm.saas.role.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import javax.validation.constraints.NotNull;
 
@@ -10,9 +12,10 @@ import javax.validation.constraints.NotNull;
  * @author lixing
  * @version V1.0 2021-03-22 19:04:22
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "删除入参")
-public class DeleteSaasRoleDTO {
+public class DeleteSaasRoleDTO extends SaasBaseDTO {
     @NotNull(message = "id不能为空")
     @ApiModelProperty(value = "主键", required = true)
     private String id;

+ 2 - 1
fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/PageQuerySaasRoleDTO.java

@@ -1,5 +1,6 @@
 package com.persagy.fm.saas.role.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBasePageDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -16,7 +17,7 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "分页查询入参")
-public class PageQuerySaasRoleDTO extends PageDTO {
+public class PageQuerySaasRoleDTO extends SaasBasePageDTO {
     @ApiModelProperty(value = "角色id")
     private String id;
 

+ 4 - 1
fm-person/src/main/java/com/persagy/fm/saas/role/model/dto/UpdateSaasRoleDTO.java

@@ -1,11 +1,13 @@
 package com.persagy.fm.saas.role.model.dto;
 
+import com.persagy.fm.saas.common.model.dto.SaasBaseDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 
 import javax.validation.constraints.NotNull;
 
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.Date;
 
@@ -13,9 +15,10 @@ import java.util.Date;
  * @author lixing
  * @version V1.0 2021-03-22 19:04:21
  */
+@EqualsAndHashCode(callSuper = true)
 @Data
 @ApiModel(value = "更新入参")
-public class UpdateSaasRoleDTO {
+public class UpdateSaasRoleDTO extends SaasBaseDTO {
     @ApiModelProperty(value = "主键", required = true)
     @NotNull(message = "主键不能为空") 
     private String id;