Selaa lähdekoodia

Merge branch 'release/v2.2.2' into 'master'

feature(bu服务资源同步功能开发): bu服务资源同步功能开发

See merge request dcuc-tjdsj/app-service!65
马志强 3 vuotta sitten
vanhempi
sitoutus
82e35b2a58
24 muutettua tiedostoa jossa 389 lisäystä ja 109 poistoa
  1. 3 1
      README.md
  2. 1 1
      dcuc-app-api/pom.xml
  3. 8 0
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IApplyInfoFacade.java
  4. 1 1
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java
  5. 2 1
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IResourceFacade.java
  6. 1 1
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IServiceResourceFacade.java
  7. 1 1
      dcuc-app-model/pom.xml
  8. 45 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/BuServiceAcceptDTO.java
  9. 3 2
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/ResourceTypeEnum.java
  10. 3 3
      dcuc-app-service/pom.xml
  11. 2 1
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java
  12. 72 18
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java
  13. 5 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java
  14. 5 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ApplyInfoFacade.java
  15. 111 50
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java
  16. 23 15
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ResourceFacade.java
  17. 9 2
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ServiceResourceFacade.java
  18. 7 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/IApplyInfoService.java
  19. 5 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ApplyInfoServiceImpl.java
  20. 61 6
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceServiceImpl.java
  21. 4 2
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ServiceResourceStrategy.java
  22. 2 1
      dcuc-app-service/src/main/resources/application-app.yml
  23. 13 1
      dcuc-app-service/src/test/java/com/dragoninfo/dcuc/app/business/ResourceBusinessTest.java
  24. 2 2
      pom.xml

+ 3 - 1
README.md

@@ -14,4 +14,6 @@
 ### 2.2.0
   - 数据资源管理 
   - 应用资源管理
-  - 去除老的审计埋点
+  - 去除老的审计埋点
+### 2.2.2 
+  - 权限自助申请提供facade接口

+ 1 - 1
dcuc-app-api/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.0-tjdsj-SNAPSHOT</version>
+        <version>2.2.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 8 - 0
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IApplyInfoFacade.java

@@ -286,4 +286,12 @@ public interface IApplyInfoFacade {
      */
     @PostMapping(value = "getListByCodes")
     List<ApplyInfo> getListByCodes(@RequestBody List<String> appCodes);
+
+    /**
+     * 条件查询-不分页
+     * @param searchDTO
+     * @return
+     */
+    @PostMapping("appInfoSearch")
+    List<ApplyInfo> appInfoSearch(@RequestBody SearchDTO searchDTO);
 }

+ 1 - 1
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java

@@ -71,7 +71,7 @@ public interface IDataResourceFacade {
     ResponseStatus dataClaSync();
 
     /**
-     * 数据分级同步
+     * 字段分类同步
      *
      * @return
      */

+ 2 - 1
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IResourceFacade.java

@@ -77,9 +77,10 @@ public interface IResourceFacade {
 
     /**
      * 资源同步表同步到应用表、服务表
+     * @return
      */
     @PostMapping(value = "resourceSync")
-    void resourceSync();
+    Boolean resourceSync();
 
     /**
      * 服务资源列表查询

+ 1 - 1
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IServiceResourceFacade.java

@@ -37,7 +37,7 @@ public interface IServiceResourceFacade {
      * @return
      */
     @PostMapping(value = "getByCodes")
-    List<ServiceResource> getServiceByServiceCodes(@RequestBody List<String> list);
+    List<ServiceResourceDTO> getServiceByServiceCodes(@RequestBody List<String> list);
 
     /**
      * 服务资源列表分页查询

+ 1 - 1
dcuc-app-model/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.0-tjdsj-SNAPSHOT</version>
+        <version>2.2.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 

+ 45 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/BuServiceAcceptDTO.java

@@ -0,0 +1,45 @@
+package com.dragoninfo.dcuc.app.dto;
+
+import lombok.Data;
+
+/**
+ * bu服务资源dto
+ * @author mazq
+ * @date 2021/6/21
+ */
+@Data
+public class BuServiceAcceptDTO {
+    /**
+     * 主键
+     */
+    private String id;
+    /**
+     * 服务标识,相当于code值
+     */
+    private String serviceId;
+    /**
+     * 服务名称
+     */
+    private String serviceName;
+    /**
+     * 服务类型(第三方定义的类型)
+     */
+    private String serviceType;
+    /**
+     * 服务管理单位code
+     */
+    private String serviceManageDept;
+    /**
+     * 服务管理单位名称
+     */
+    private String serviceManageDeptName;
+    /**
+     * 服务资源类型
+     */
+    private String serviceResourcesType;
+
+    /**
+     * 是否删除
+     */
+    private String isDeleted;
+}

+ 3 - 2
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/ResourceTypeEnum.java

@@ -10,15 +10,16 @@ public enum ResourceTypeEnum {
      */
     TJ_APP("tj_app", "dsjyyfwpt", "app"),
     TJ_SERVICE("tj_service", "dsjyyfwpt", "service"),
+    BU_SERVICE("bu_service","bu_service","bu_service"),
     TJ_APP_MENU("tj_app_menu", "dsjyyfwpt", "menu");
 
     private String resourceId;
     private String resourceProvider;
     private String resourceType;
 
-    ResourceTypeEnum(String resourceId, String resouProvider, String resourceType) {
+    ResourceTypeEnum(String resourceId, String resourceProvider, String resourceType) {
         this.resourceId = resourceId;
-        this.resourceProvider = resouProvider;
+        this.resourceProvider = resourceProvider;
         this.resourceType = resourceType;
     }
 

+ 3 - 3
dcuc-app-service/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.2.0-tjdsj-SNAPSHOT</version>
+        <version>2.2.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -102,7 +102,7 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-api</artifactId>
-            <version>2.1.1-SNAPSHOT</version>
+            <version>2.1.2-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -120,7 +120,7 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-auth-api</artifactId>
-            <version>2.3.0-tjdsj-SNAPSHOT</version>
+            <version>2.4.0-tjdsj-SNAPSHOT</version>
         </dependency>
         <!--配置 dcuc 结束-->
 

+ 2 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java

@@ -24,8 +24,9 @@ public interface IResourceBusiness {
 
     /**
      * 资源同步到应用和服务表
+     * @return 同步结果
      */
-    void resourceSync();
+    Boolean resourceSync();
 
     /**
      * 应用资源增量同步

+ 72 - 18
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java

@@ -88,12 +88,13 @@ public class ResourceBusiness implements IResourceBusiness {
     public static final int RETRY_NUMBER = 3;
 
     @Override
-    public void resourceSync() {
+    public Boolean resourceSync() {
         //先同步应用和服务数据
         //再同步应用菜单数据
         String[] resourceIds = new String[]{ResourceTypeEnum.TJ_APP.getResourceId(),
                 ResourceTypeEnum.TJ_SERVICE.getResourceId(),
-                ResourceTypeEnum.TJ_APP_MENU.getResourceId()};
+                ResourceTypeEnum.TJ_APP_MENU.getResourceId(),
+                ResourceTypeEnum.BU_SERVICE.getResourceId()};
         List<ResourceSync> resourceSyncs;
         for (String resourceId : resourceIds) {
             resourceSyncs = syncService.getNotSyncResource(resourceId);
@@ -105,6 +106,7 @@ public class ResourceBusiness implements IResourceBusiness {
             resourceSyncs.forEach(item -> item.setSync(BooleanEnum.TRUE.getValue()));
             syncService.batchUpdate(resourceSyncs);
         }
+        return true;
     }
 
     @Override
@@ -256,6 +258,7 @@ public class ResourceBusiness implements IResourceBusiness {
         logger.info("getDataResource >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}",
                 url, busSraId, busServiceId, busServiceFunc, busSreIdcard);
         String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), headerList, null);
+        logger.info("getDataResource response:{}", response);
         BaseResp<String> baseResp = JSON.parseObject(response, new TypeToken<BaseResp<String>>() {
         }.getType());
         if ("000".equals(baseResp.getCode())) {
@@ -508,7 +511,7 @@ public class ResourceBusiness implements IResourceBusiness {
             Integer currentPageNo = requestParamDTO.getCurrentPageNo();
             List<String> resourceTypeList = requestParamDTO.getListAllResourceType();
             for (ResourceTypeEnum resourceEnum : ResourceTypeEnum.values()) {
-                if(!CollectionUtils.isEmpty(resourceTypeList)
+                if(CollectionUtils.isNotEmpty(resourceTypeList)
                     && !resourceTypeList.contains(resourceEnum.getResourceType())) {
                     continue;
                 }
@@ -693,10 +696,10 @@ public class ResourceBusiness implements IResourceBusiness {
      *
      * @param pageNo
      * @param pageSize
-     * @param url
      * @return
      */
-    private HttpResult getServiceResource(Integer pageNo, Integer pageSize, String url) {
+    private HttpResult getServiceResource(Integer pageNo, Integer pageSize) {
+        String url = resourceConfig.getResourceUrl();
         HttpResult httpResult = new HttpResult();
         Map<String, Object> map = new HashMap<>();
         map.put("page", String.valueOf(pageNo - 1));
@@ -715,6 +718,7 @@ public class ResourceBusiness implements IResourceBusiness {
                 .busSreIdcard(busSreIdcard)
                 .build();
         List<Header> headerList = getHeaders(busSendReqVO);
+        logger.info("-------------getServiceResource START -------------");
         logger.info("getServiceResource url:{}", url);
         String response = HttpUtil.postJSON(url, param, headerList, null);
         if (null == response) {
@@ -729,6 +733,7 @@ public class ResourceBusiness implements IResourceBusiness {
             httpResult.setPages(data.getInteger("totalPages"));
             httpResult.setTotals(data.getInteger("totalElements"));
         }
+        logger.info("-------------getServiceResource END -------------");
         return httpResult;
     }
 
@@ -788,12 +793,13 @@ public class ResourceBusiness implements IResourceBusiness {
      */
     private HttpResult getResourceFromRemote(ResourceTypeEnum resourceTypeEnum, Integer pageNo, Integer pageSize) {
         HttpResult httpResult;
-        String url = resourceConfig.getResourceUrl();
         //获取应用资源
         if (ResourceTypeEnum.TJ_APP.equals(resourceTypeEnum)) {
-            httpResult = getAppResource(pageNo, pageSize, url);
+            httpResult = getAppResource(pageNo, pageSize);
         } else if (ResourceTypeEnum.TJ_SERVICE.equals(resourceTypeEnum)) {
-            httpResult = getServiceResource(pageNo, pageSize, url);
+            httpResult = getServiceResource(pageNo, pageSize);
+        } else if (ResourceTypeEnum.BU_SERVICE.equals(resourceTypeEnum)) {
+            httpResult = getBuServiceResource(pageNo,pageSize);
         } else {
             httpResult = new HttpResult();
             httpResult.setCode(ResponseStatus.SUCCESS_CODE);
@@ -803,15 +809,53 @@ public class ResourceBusiness implements IResourceBusiness {
         return httpResult;
     }
 
+    /**
+     * 从大数据平台获取
+     * @param pageNo
+     * @param pageSize
+     * @return
+     */
+    private HttpResult getBuServiceResource(Integer pageNo, Integer pageSize) {
+        String resourceUrl = resourceConfig.getBuServiceUrl();
+        HttpResult httpResult = new HttpResult();
+        Map<String, Object> map = new HashMap<>();
+        map.put("page", pageNo -1);
+        map.put("size", pageSize);
+        JSONArray array = new JSONArray();
+        JSONObject searchCondition = new JSONObject();
+        searchCondition.put("name","isDeleted");
+        searchCondition.put("op","=");
+        searchCondition.put("value", BooleanEnum.FALSE.value);
+        array.add(searchCondition);
+        map.put("searchCondition", array.toJSONString());
+        String param = JSON.toJSONString(map);
+        logger.info("-------------getBuServiceResource START -------------");
+        logger.info("url:{}, param:{}", resourceUrl, param);
+        String response = HttpUtil.postForm(resourceUrl, param, null, null);
+        if (null == response) {
+            logger.info("get bu service fail,pageNo:{},pageSize:{}", pageNo, pageSize);
+            httpResult.setCode(ResponseStatus.FAIL_CODE);
+        } else {
+            logger.info("get app resource success,pageNo:{},pageSize:{}", pageNo, pageSize);
+            JSONObject parse = JSONObject.parseObject(response);
+            httpResult.setCode(ResponseStatus.SUCCESS_CODE);
+            httpResult.setPages(parse.getInteger("totalPages"));
+            httpResult.setTotals(parse.getInteger("totalElements"));
+            httpResult.setRecords(parse.getJSONArray("content"));
+        }
+        logger.info("-------------getBuServiceResource END -------------");
+        return httpResult;
+    }
+
     /**
      * 从总线分页查询应用资源
      *
      * @param pageNo
      * @param pageSize
-     * @param url
      * @return
      */
-    private HttpResult getAppResource(Integer pageNo, Integer pageSize, String url) {
+    private HttpResult getAppResource(Integer pageNo, Integer pageSize) {
+        String url = resourceConfig.getResourceUrl();
         HttpResult httpResult = new HttpResult();
         Map<String, Object> map = new HashMap<>();
         //应用目录从0页开始查
@@ -831,6 +875,7 @@ public class ResourceBusiness implements IResourceBusiness {
                 .build();
 
         List<Header> headerList = getHeaders(busSendReqVO);
+        logger.info("-------------getAppResource START -------------");
         logger.info("getAppResource url:{}", url);
         String response = HttpUtil.postForm(url, param, headerList, null);
         if (null == response) {
@@ -844,6 +889,7 @@ public class ResourceBusiness implements IResourceBusiness {
             httpResult.setTotals(parse.getInteger("total"));
             httpResult.setRecords(parse.getJSONArray("content"));
         }
+        logger.info("-------------getAppResource END -------------");
         return httpResult;
     }
 
@@ -920,15 +966,23 @@ public class ResourceBusiness implements IResourceBusiness {
                     resourceEnum.getResourceType(), resourceEnum.getResourceProvider());
             dto.setContent(jsonString);
             JSONObject jsonObject = JSONObject.parseObject(jsonString);
-            String appCode = jsonObject.getString("yyxtbh");
-            String serviceCode = jsonObject.getString("FWZYBSF");
-            String appName = jsonObject.getString("yyxtmc");
-            String serviceName = jsonObject.getString("FWZYMC");
+            if(ResourceTypeEnum.TJ_APP.equals(resourceEnum)) {
+                String appCode = jsonObject.getString("yyxtbh");
+                String appName = jsonObject.getString("yyxtmc");
+                dto.setAppCode(appCode);
+                dto.setAppName(appName);
+            } else if (ResourceTypeEnum.TJ_SERVICE.equals(resourceEnum)) {
+                String serviceCode = jsonObject.getString("FWZYBSF");
+                String serviceName = jsonObject.getString("FWZYMC");
+                dto.setServiceCode(serviceCode);
+                dto.setServiceName(serviceName);
+            } else if (ResourceTypeEnum.BU_SERVICE.equals(resourceEnum)) {
+                String serviceCode = jsonObject.getString("serviceId");
+                String serviceName = jsonObject.getString("serviceName");
+                dto.setServiceCode(serviceCode);
+                dto.setServiceName(serviceName);
+            }
             dto.setExtId(jsonObject.getString("id"));
-            dto.setAppCode(appCode);
-            dto.setAppName(appName);
-            dto.setServiceCode(serviceCode);
-            dto.setServiceName(serviceName);
             dto.setDeleted(BooleanEnum.FALSE.getValue());
             dto.setSync(BooleanEnum.FALSE.getValue());
             list.add(dto);

+ 5 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/DcucResourceConfig.java

@@ -19,6 +19,11 @@ public class DcucResourceConfig {
      */
     private String resourceUrl;
 
+    /**
+     * bu服务资源请求地址
+     */
+    private String buServiceUrl;
+
     /**
      * 每页获取数量
      */

+ 5 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ApplyInfoFacade.java

@@ -71,6 +71,11 @@ public class ApplyInfoFacade implements IApplyInfoFacade {
         return applyInfoService.getListByCodes(appCodes);
     }
 
+    @Override
+    public List<ApplyInfo> appInfoSearch(SearchDTO searchDTO) {
+        return applyInfoService.appInfoSearch(searchDTO);
+    }
+
     @Override
     public String getNewSort() {
         return applyInfoService.getNewSort();

+ 111 - 50
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -20,6 +20,7 @@ import com.dragoninfo.dcuc.app.vo.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
+import com.dragonsoft.duceap.web.utils.RequestUtils;
 import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
 import lombok.extern.slf4j.Slf4j;
@@ -28,7 +29,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.servlet.support.RequestContextUtils;
 
+import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
@@ -125,8 +130,11 @@ public class DataResourceFacade implements IDataResourceFacade
               .pId(dataLevelTreeVo.getId())
               .innerId(item.getInnerId()).build()).collect(Collectors.toList());
         dataLevelTreeVo.setChild(child);
-
-        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
+        if(child.size() == 0) {
+            dataResourceClassifyVo.setNodes(new ArrayList<>());
+        } else {
+            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
+        }
         //设置总数量
         dataResourceClassifyVo.setTotal(child.size());
         return dataResourceClassifyVo;
@@ -159,9 +167,14 @@ public class DataResourceFacade implements IDataResourceFacade
                 .pId(securityLevelTree.getId())
                 .innerId(item.getInnerId()).build()).collect(Collectors.toList());
         securityLevelTree.setChild(child);
-        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
-        //设置总数量
-        dataResourceClassifyVo.setTotal(child.size());
+        if(child.size() == 0) {
+            dataResourceClassifyVo.setNodes(new ArrayList<>());
+            dataResourceClassifyVo.setTotal(0);
+        } else {
+            dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
+            //设置总数量
+            dataResourceClassifyVo.setTotal(child.size());
+        }
         return dataResourceClassifyVo;
     }
 
@@ -192,10 +205,14 @@ public class DataResourceFacade implements IDataResourceFacade
         combineTreeNode(secNodes, thirdNodes);
         combineTreeNode(thirdNodes, fourNodes);
         topTreeVo.setChild(firNodes);
-
-        //计算总数量
-        resourceVo.setTotal(getTotalCount(topTreeVo));
-        resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+        if(firNodes.size() == 0) {
+            resourceVo.setNodes(new ArrayList<>());
+            resourceVo.setTotal(0);
+        } else {
+            //计算总数量
+            resourceVo.setTotal(getTotalCount(topTreeVo));
+            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+        }
         return resourceVo;
     }
 
@@ -227,8 +244,13 @@ public class DataResourceFacade implements IDataResourceFacade
                 .stream().map(item -> convertFieldClaToNode(item, item.getFirId())).collect(Collectors.toList());
         combineTreeNode(firNodes, secNodes);
         topTreeVo.setChild(firNodes);
-        resourceVo.setTotal(getTotalCount(topTreeVo));
-        resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+        if(firNodes.size() == 0) {
+            resourceVo.setNodes(new ArrayList<>());
+            resourceVo.setTotal(0);
+        } else {
+            resourceVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(topTreeVo);}});
+            resourceVo.setTotal(getTotalCount(topTreeVo));
+        }
         return resourceVo;
     }
 
@@ -300,60 +322,99 @@ public class DataResourceFacade implements IDataResourceFacade
 
     @Override
     public ResponseStatus dataLevelSync() {
-        CompletableFuture
-                .supplyAsync(this::getDataLevelListFromRemote)
-                .exceptionally(e->{
-                    log.error("getDataLevelListFromRemote error.",e);
-                    return new ArrayList<>();
-                })
-                .thenAccept((list)->dataLevelService.sync(list))
-                .exceptionally(e->{
-                    log.error("sync error.",e);
-                    return null;
-                });
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = ()-> {
+            RequestContextHolder.setRequestAttributes(requestAttributes);
+            try {
+                List<DataLevelVo> list = getDataLevelListFromRemote();
+                dataLevelService.sync(list);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
         return ResponseStatus.success();
     }
 
     @Override
     public ResponseStatus dataSecSync() {
-        CompletableFuture
-                .supplyAsync(this::getSecurityLevelListFromRemote)
-                .exceptionally(e->{
-                    log.error("getSecurityLevelListFromRemote error.",e);
-                    return new ArrayList<>(); })
-                .thenAccept((list)->dataSecService.sync(list))
-                .exceptionally(e->{
-                            log.error("sync error.",e);
-                            return null;
-                });
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = ()-> {
+            RequestContextHolder.setRequestAttributes(requestAttributes);
+            try {
+                List<DataLevelVo> list = getSecurityLevelListFromRemote();
+                dataSecService.sync(list);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
         return ResponseStatus.success();
     }
 
     @Override
     public ResponseStatus dataClaSync() {
-        CompletableFuture.supplyAsync(this::getDataClassifyTreeFromRemote)
-                .exceptionally(e->{
-                    log.error("getDataClassifyTreeFromRemote error.",e);
-                    return new ArrayList<>(); })
-                .thenAccept((nodes)-> dataClaService.sync(nodes, null))
-                .exceptionally(e->{
-                    log.error("sync error.",e);
-                    return null;
-                });
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = ()-> {
+            try {
+                RequestContextHolder.setRequestAttributes(requestAttributes);
+                List<DataResourceTreeVo> nodes = getDataClassifyTreeFromRemote();
+                dataClaService.sync(nodes, null);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+
         return ResponseStatus.success();
     }
 
     @Override
     public ResponseStatus fieldClaSync() {
-        CompletableFuture.supplyAsync(this::getFieldClassifyTreeFromRemote)
-                .exceptionally(e->{
-                    log.error("getFieldClassifyTreeFromRemote error.",e);
-                    return new ArrayList<>(); })
-                .thenAccept((nodes)-> fieldClaService.sync(nodes, null))
-                .exceptionally(e->{
-                    log.error("sync error.",e);
-                    return null;
-                });
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = ()-> {
+            try {
+                RequestContextHolder.setRequestAttributes(requestAttributes);
+                List<DataResourceTreeVo> nodes = getFieldClassifyTreeFromRemote();
+                fieldClaService.sync(nodes, null);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+
         return ResponseStatus.success();
     }
 

+ 23 - 15
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ResourceFacade.java

@@ -17,6 +17,8 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.context.request.RequestAttributes;
+import org.springframework.web.context.request.RequestContextHolder;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -77,8 +79,8 @@ public class ResourceFacade implements IResourceFacade {
     }
 
     @Override
-    public void resourceSync() {
-        iResourceBusiness.resourceSync();
+    public Boolean resourceSync() {
+       return iResourceBusiness.resourceSync();
     }
 
 
@@ -121,19 +123,25 @@ public class ResourceFacade implements IResourceFacade {
      * @param paramDTO
      */
     private void asyncResource(ResourceRequestParamDTO paramDTO) {
-        CompletableFuture
-                .supplyAsync(() -> {
-                    iResourceBusiness.getResourceRequestResults(paramDTO);
-                    return true; })
-                .exceptionally(e -> {
-                    log.error("getResourceRequestResults error.", e);
-                    return false; })
-                .thenAccept((result) -> {
-                    if(result) {
-                        iResourceBusiness.resourceSync();}})
-                .exceptionally(e -> {
-                    log.error("resourceSync error.", e);
-                    return null; });
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = ()->{
+            RequestContextHolder.setRequestAttributes(requestAttributes);
+            try {
+                iResourceBusiness.getResourceRequestResults(paramDTO);
+                iResourceBusiness.resourceSync();
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
     }
 
 

+ 9 - 2
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ServiceResourceFacade.java

@@ -7,12 +7,14 @@ import com.dragoninfo.dcuc.app.vo.ServiceResourceVo;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import com.dragonsoft.duceap.core.search.Searchable;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * @author huangzqa
@@ -38,8 +40,13 @@ public class ServiceResourceFacade implements IServiceResourceFacade {
     }
 
     @Override
-    public List<ServiceResource> getServiceByServiceCodes(List<String> list) {
-        return serviceResourceService.getServiceByServiceCodes(list);
+    public List<ServiceResourceDTO> getServiceByServiceCodes(List<String> list) {
+        List<ServiceResource> services = serviceResourceService.getServiceByServiceCodes(list);
+        return services.stream().map(item -> {
+            ServiceResourceDTO dto = new ServiceResourceDTO();
+            BeanUtils.copyProperties(item, dto);
+            return dto;
+        }).collect(Collectors.toList());
     }
     /**
      * 服务资源列表分页查询

+ 7 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/IApplyInfoService.java

@@ -254,4 +254,11 @@ public interface IApplyInfoService extends IBaseService<ApplyInfo, String> {
      * @return
      */
     List<ApplyInfo> getListByCodes(List<String> appCodes);
+
+    /**
+     * 条件查询-不分页
+     * @param searchDTO
+     * @return
+     */
+    List<ApplyInfo> appInfoSearch(SearchDTO searchDTO);
 }

+ 5 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ApplyInfoServiceImpl.java

@@ -391,6 +391,11 @@ public class ApplyInfoServiceImpl extends BaseMybatisService<ApplyInfo, String>
         return applyInfoMapper.selectList(wrapper);
     }
 
+    @Override
+    public List<ApplyInfo> appInfoSearch(SearchDTO searchDTO) {
+        return applyInfoMapper.findBySearchable(Searchable.toSearchable(searchDTO));
+    }
+
     private List<ApplyInfo> loadInfo(InputStream inputStream) throws IOException, ParseException {
         //根据指定的文件输入流导入Excel从而产生Workbook对象
         Workbook wb0 = new HSSFWorkbook(inputStream);

+ 61 - 6
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceServiceImpl.java

@@ -128,11 +128,24 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
 
     @Override
     public List<ServiceResource> batchInsertServiceResource(List<ServiceResourceDTO> list) {
+        return batchInsertServiceResource(list, true);
+    }
+
+    /**
+     * 重载方法
+     * 控制是否需要设置机构相关的信息
+     * @param list
+     * @param needOrgInfos
+     * @return
+     */
+    private List<ServiceResource> batchInsertServiceResource(List<ServiceResourceDTO> list , Boolean needOrgInfos) {
         List<ServiceResource> services = new ArrayList<>();
         if(CollectionUtils.isEmpty(list)){
             return services;
         }
-        setOrgsInfo(list);
+        if(needOrgInfos) {
+            setOrgsInfo(list);
+        }
         List<Object> objects = batchInsertResource(list);
         for (Object object : objects) {
             ServiceResource service = (ServiceResource) object;
@@ -141,6 +154,8 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         return services;
     }
 
+
+
     private List<Object> batchInsertResource(List<? extends ResourceDTO> list) {
         List<Object> objects = new ArrayList<>();
         for (ResourceDTO dto : list) {
@@ -160,7 +175,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         //根据对方提供机构编码,设置事权单位、管理单位信息
         List<String> codes = list.stream()
                 .flatMap(item -> Stream.of(item.getManagerUnitCode(), item.getBuildUnitCode()))
-                .filter(s->StringUtils.isNotBlank(s))
+                .filter(StringUtils::isNotBlank)
                 .distinct()
                 .collect(Collectors.toList());
         Map<String, OrgInfo> orgInfoMap = getOrgInfos(codes);
@@ -178,14 +193,14 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         }
         list = list
                 .stream()
-                .filter(s->StringUtils.isNotBlank(s))
+                .filter(StringUtils::isNotBlank)
                 .distinct()
                 .collect(Collectors.toList());
         logger.info("get OrgIds by OrgCodes>> orgCodeList:{}",JSON.toJSONString(list));
         List<OrgInfo> orgInfos = orgInfoFacade.getOrgsByCodes(list);
         Map<String, OrgInfo> collect = orgInfos
                 .stream()
-                .collect(Collectors.toMap(item->item.getCode(), item->item,(old,last)->last));
+                .collect(Collectors.toMap(OrgInfo::getCode, item->item,(old, last)->last));
         logger.info("get OrgIds by OrgCodes>> orgIdsList:{}",collect.keySet());
         return collect;
     }
@@ -197,6 +212,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         List<ResourceSync> appList = resourceMap.get(ResourceTypeEnum.TJ_APP.getResourceId());
         List<ResourceSync> serviceList = resourceMap.get(ResourceTypeEnum.TJ_SERVICE.getResourceId());
         List<ResourceSync> menuList = resourceMap.get(ResourceTypeEnum.TJ_APP_MENU.getResourceId());
+        List<ResourceSync> buServiceList = resourceMap.get(ResourceTypeEnum.BU_SERVICE.getResourceId());
         //插入应用资源
         if(null!=appList){
             List<AppResourceDTO> apps = appList.stream().filter(item->StringUtils.isNotBlank(item.getAppCode()))
@@ -209,6 +225,13 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
                     .map(this::getServiceResourceDTO).collect(Collectors.toList());
             batchInsertServiceResource(services);
         }
+        //插入bu服务资源
+        if(null != buServiceList) {
+           List<ServiceResourceDTO> buServices = buServiceList.stream().filter(item->StringUtils.isNotBlank(item.getServiceCode()))
+                    .map(this::getFromBuService).collect(Collectors.toList());
+            batchInsertServiceResource(buServices, false);
+        }
+
         //插入菜单目录
         if(null!=menuList) {
             List<MenuResourceDTO> menus = menuList.stream().filter(item->StringUtils.isNotBlank(item.getAppCode())).
@@ -220,6 +243,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         return true;
     }
 
+
     /**
      * 批量插入应用的菜单数据
      * @param menus MenuResourceDTO 菜单DTOs
@@ -295,6 +319,36 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         return list;
     }
 
+    /**
+     * 将bu服务资源同步对象转为服务资源DTO
+     * @param resourceSync
+     * @return
+     */
+    private ServiceResourceDTO getFromBuService(ResourceSync resourceSync) {
+        String content = resourceSync.getContent();
+        BuServiceAcceptDTO acceptDTO = JSON.parseObject(content, BuServiceAcceptDTO.class);
+        ServiceResourceDTO dto = new ServiceResourceDTO();
+        ResourceTypeEnum resourceEnum = ResourceTypeEnum.BU_SERVICE;
+        dto.setResourceId(resourceEnum.getResourceId());
+        dto.setResourceType(resourceEnum.getResourceType());
+        dto.setResourceProvider(resourceEnum.getResourceProvider());
+        dto.setServiceCode(acceptDTO.getServiceId());
+        dto.setServiceName(acceptDTO.getServiceName());
+        dto.setServiceType(acceptDTO.getServiceType());
+        dto.setBuildUnit(acceptDTO.getServiceManageDeptName());
+        dto.setBuildUnitCode(acceptDTO.getServiceManageDept());
+        dto.setManagerUnit(acceptDTO.getServiceManageDeptName());
+        dto.setManagerUnitCode(acceptDTO.getServiceManageDept());
+        String isDeleted = acceptDTO.getIsDeleted();
+        dto.setDeleted(isDeleted);
+        if(BooleanEnum.FALSE.value.equals(isDeleted)) {
+            dto.setServiceStatus(ServiceStatusCons.STATUS_START);
+        } else {
+            dto.setServiceStatus(ServiceStatusCons.STATUS_DELETED);
+        }
+        return dto;
+    }
+
     /**
      * 将资源同步对象转为服务资源DTO
      * @param resourceSync ResourceSync 资源同步数据
@@ -310,6 +364,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         dto.setResourceProvider(resourceEnum.getResourceProvider());
         dto.setServiceCode(acceptDTO.getFWZYBSF());
         dto.setServiceName(acceptDTO.getFWZYMC());
+        dto.setServiceType(acceptDTO.getFWLXDM());
         dto.setBuildUnitCode(acceptDTO.getFWZYSQDW_JGDM());
         dto.setManagerUnitCode(acceptDTO.getXXCZDW_GAJGJGDM());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
@@ -346,6 +401,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
                 xtzybs = BooleanEnum.TRUE.getValue();
             }
         }
+        dto.setAppOpsDepName(acceptDTO.getYyxtywdwmc());
         dto.setAppStatus(xtzybs);
         dto.setAppUrl(acceptDTO.getYyxtfwdz());
         dto.setBuildUnitCode(acceptDTO.getYyxtsqdwdm());
@@ -378,8 +434,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
     private <T extends ResourceDTO> Object insertResource(T dto) {
         //根据对方提供机构编码,承建单位编码,获取orgId和manufacturerId
         setOrgInfo(dto);
-        Object resource = doInsert(dto);
-        return resource;
+        return doInsert(dto);
     }
 
     /**

+ 4 - 2
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ServiceResourceStrategy.java

@@ -33,7 +33,8 @@ public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceR
         LambdaQueryWrapper<ServiceResource> wrapper = Wrappers.lambdaQuery();
         wrapper.select()
                .eq(ServiceResource::getServiceCode,serviceResourceDTO.getServiceCode())
-               .eq(ServiceResource::getDeleted,BooleanEnum.FALSE.getValue());
+               .eq(ServiceResource::getDeleted,BooleanEnum.FALSE.getValue())
+               .eq(ServiceResource::getResourceId, serviceResourceDTO.getResourceId());
         ServiceResource exist = serviceResourceMapper.selectOne(wrapper);
         ServiceResource serviceResource;
         if (null == exist) {
@@ -60,7 +61,8 @@ public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceR
 
     @Override
     public boolean canHandle(String resourceId) {
-        return ResourceTypeEnum.TJ_SERVICE.getResourceId().equals(resourceId);
+       return ResourceTypeEnum.TJ_SERVICE.getResourceId().equals(resourceId) ||
+                ResourceTypeEnum.BU_SERVICE.getResourceId().equals(resourceId);
     }
 
 }

+ 2 - 1
dcuc-app-service/src/main/resources/application-app.yml

@@ -39,4 +39,5 @@ dcuc:
       data-resource:
         bus-service-id: S-120000000000-0100-00028
         bus-service-func: searchType
-      resource-url: http://10.201.7.31:8585/bus/send
+      resource-url: http://10.201.7.31:8585/bus/send
+      bu-service-url: http://10.11.0.41:8081/ddos/v1/ministryResources/searchMinistryResources

+ 13 - 1
dcuc-app-service/src/test/java/com/dragoninfo/dcuc/app/business/ResourceBusinessTest.java

@@ -2,8 +2,11 @@ package com.dragoninfo.dcuc.app.business;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.dragoninfo.dcuc.app.DcucAppApplication;
 import com.dragoninfo.dcuc.app.business.impl.ResourceBusiness;
 import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
+import com.dragoninfo.dcuc.app.facade.DataResourceFacade;
+import com.dragoninfo.dcuc.app.vo.DataResourceTreeVo;
 import com.dragoninfo.dcuc.common.http.HttpUtil;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.mq.client.model.entity.MessageInfoDTO;
@@ -25,7 +28,7 @@ import java.util.Map;
  * @date 2021/3/17
  */
 @RunWith(SpringRunner.class)
-@SpringBootTest
+@SpringBootTest(classes = DcucAppApplication.class)
 public class ResourceBusinessTest {
 
     @Autowired
@@ -34,6 +37,9 @@ public class ResourceBusinessTest {
     @Autowired
     DcucResourceConfig resourceConfig;
 
+    @Autowired
+    DataResourceFacade dataResourceFacade;
+
     @Test
     public void receiveMessageTest() {
         String message = "{\"content\":\"{\\\"yyxtbh\\\":\\\"A-120000000000-0206\\\",\\\"sqlx\\\":\\\"A-00\\\"}\",\"createTime\":\"20210521094917\",\"infoType\":\"10000028\",\"messageId\":\"2c64278a598d4dc4b954ef9144ecc4f6\",\"receiveDepts\":\"\",\"receiveRoles\":\"\",\"receiveUsers\":\"\",\"title\":\"2021-05-21应用新增/变更通知\",\"userCode\":\"460004197411064109\",\"userDeptId\":\"\",\"userDeptName\":\"\",\"userName\":\"大数据运营服务平台\",\"userPoliceNo\":\"\",\"userSystem\":\"大数据运营服务平台\",\"userSystemCode\":\"dsjyyfwpt\"}";
@@ -90,4 +96,10 @@ public class ResourceBusinessTest {
         return heardList;
     }
 
+
+    @Test
+    public void getFieldCla() {
+        dataResourceFacade.fieldClaSync();
+    }
+
 }

+ 2 - 2
pom.xml

@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.dragoninfo</groupId>
     <artifactId>dcuc-app</artifactId>
-    <version>2.2.0-tjdsj-SNAPSHOT</version>
+    <version>2.2.2-tjdsj-SNAPSHOT</version>
     <packaging>pom</packaging>
     <modules>
         <module>dcuc-app-api</module>
@@ -18,7 +18,7 @@
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
         <!--revisions需写死,用于标识打包的版本号,不可删除-->
-        <revision>2.0.0-tjdsj-SNAPSHOT</revision>
+        <revision>2.2.2-tjdsj-SNAPSHOT</revision>
         <duceap.version>2.1.0-SNAPSHOT</duceap.version>
         <oracle.version>11.2.0.1.0</oracle.version>
         <mysql.version>5.1.49</mysql.version>