Pārlūkot izejas kodu

feature(服务资源更新推送): 服务资源更新推送

服务资源更新推送
mazq 4 gadi atpakaļ
vecāks
revīzija
b6a8169fd9

+ 8 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java

@@ -28,4 +28,12 @@ public interface IResourceBusiness {
      * @param appCode
      * @param appCode
      */
      */
     boolean appIncrSync(String appCode);
     boolean appIncrSync(String appCode);
+
+    /**
+     * 服务资源同步
+     *
+     * @param serviceCode
+     * @return
+     */
+    boolean serviceIncrSync(String serviceCode);
 }
 }

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

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.app.business.IResourceBusiness;
 import com.dragoninfo.dcuc.app.business.IResourceBusiness;
 import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
 import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
+import com.dragoninfo.dcuc.app.cons.ServiceStatusCons;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
 import com.dragoninfo.dcuc.app.enumresources.ResourceTypeEnum;
 import com.dragoninfo.dcuc.app.enumresources.ResourceTypeEnum;
@@ -18,8 +19,10 @@ import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
 import com.dragonsoft.duceap.base.utils.UserContextUtils;
+import com.dragonsoft.duceap.commons.util.ObjectUtils;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
 import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import org.apache.commons.io.IOUtils;
 import org.apache.http.Header;
 import org.apache.http.Header;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.message.BasicHeader;
 import org.apache.http.message.BasicHeader;
@@ -109,6 +112,58 @@ public class ResourceBusiness implements IResourceBusiness {
         return false;
         return false;
     }
     }
 
 
+    @Override
+    public boolean serviceIncrSync(String serviceCode) {
+        ServiceResourceAcceptDTO serviceDTO;
+        String serviceStr = null;
+        try {
+            serviceStr = getServiceRemoteDetailByCode(serviceCode);
+            serviceDTO = JSON.parseObject(serviceStr, ServiceResourceAcceptDTO.class);
+        } catch (Exception e) {
+            logger.info("get service info from remote serviceStr:{}", serviceStr);
+            logger.error("get service info from remote error.", e);
+            return false;
+        }
+        if (null == serviceDTO) {
+            logger.info("appIncrSync get serviceInfo is null. serviceCode is:{}", serviceCode);
+            return false;
+        }
+        acceptServiceResource(serviceDTO);
+        return true;
+    }
+
+    private String getServiceRemoteDetailByCode(String serviceCode) {
+        String busSraId = resourceConfig.getBusSraId();
+        String busSreIdcard = resourceConfig.getBusSreIdcard();
+        String busServiceId = resourceConfig.getServiceModifyResource().getBusServiceId();
+        String busServiceFunc = resourceConfig.getServiceModifyResource().getBusServiceFunc();
+        List<Header> heards = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
+        String url = resourceConfig.getResourceUrl();
+        Map<String, String> param = new HashMap<>();
+        param.put("Condition", "FWZYBSF = '" + serviceCode + "'");
+        logger.info("getAppRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, serviceCode:{}",
+                url, busSraId, busServiceId, busServiceFunc, busSreIdcard, serviceCode);
+        String response = HttpUtil.postJSON(url, JSON.toJSONString(param), heards, null);
+        logger.info("getServiceRemoteDetailByCode result:{}", response);
+        JSONObject jsonObject = JSONObject.parseObject(response);
+        String status = jsonObject.getString("status");
+        if (!ResponseStatus.SUCCESS_CODE.equals(status)) {
+            logger.info("getServiceRemoteDetailByCode status code:{}", status);
+            return "";
+        }
+        JSONObject o = jsonObject.getJSONObject("data").getJSONArray("Resources").getJSONObject(0);
+        if (ObjectUtils.isEmpty(o)) {
+            logger.info("getServiceRemoteDetailByCode Resources is null");
+            return "";
+        }
+        JSONObject dataInfo = o.getJSONObject("DataInfo");
+        if (ObjectUtils.isEmpty(dataInfo)) {
+            logger.info("getServiceRemoteDetailByCode dataInfo is null");
+            return "";
+        }
+        return JSON.toJSONString(dataInfo);
+    }
+
     /**
     /**
      * 增量新增/更新应用资源和应用相关的菜单资源
      * 增量新增/更新应用资源和应用相关的菜单资源
      *
      *
@@ -212,7 +267,8 @@ public class ResourceBusiness implements IResourceBusiness {
         syncDTO.setServiceName(acceptDTO.getFWZYMC());
         syncDTO.setServiceName(acceptDTO.getFWZYMC());
         syncDTO.setExtId(acceptDTO.getId());
         syncDTO.setExtId(acceptDTO.getId());
         syncDTO.setContent(JSON.toJSONString(acceptDTO));
         syncDTO.setContent(JSON.toJSONString(acceptDTO));
-        syncDTO.setSync(com.dragoninfo.dcuc.user.user.enumresources.YesNotEnum.YES.getValue());
+        syncDTO.setSync(BooleanEnum.TRUE.getValue());
+        syncDTO.setDeleted(BooleanEnum.FALSE.getValue());
         syncService.insertRemoteResourceSync(syncDTO);
         syncService.insertRemoteResourceSync(syncDTO);
         //同步更新服务表
         //同步更新服务表
         ServiceResourceDTO serviceResourceDTO = convertToServiceDTO(acceptDTO);
         ServiceResourceDTO serviceResourceDTO = convertToServiceDTO(acceptDTO);
@@ -230,7 +286,12 @@ public class ResourceBusiness implements IResourceBusiness {
         dto.setBuildUnitCode(acceptDTO.getFWZYGLDW_GAJGJGDM());
         dto.setBuildUnitCode(acceptDTO.getFWZYGLDW_GAJGJGDM());
         dto.setContractUnitCode(acceptDTO.getFWZYSQDW_JGDM());
         dto.setContractUnitCode(acceptDTO.getFWZYSQDW_JGDM());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
-        dto.setServiceStatus(acceptDTO.getFWZYZTDM());
+        String fwzyztdm = acceptDTO.getFWZYZTDM();
+        dto.setServiceStatus(fwzyztdm);
+        dto.setDeleted(BooleanEnum.FALSE.getValue());
+        if (ServiceStatusCons.STATUS_DELETED.equals(fwzyztdm)) {
+            dto.setDeleted(BooleanEnum.TRUE.getValue());
+        }
         return dto;
         return dto;
     }
     }
 
 
@@ -375,7 +436,15 @@ public class ResourceBusiness implements IResourceBusiness {
         logger.info("getAppRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, appCode:{}",
         logger.info("getAppRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, appCode:{}",
                 url, busSraId, busServiceId, busServiceFunc, busSreIdcard, appCode);
                 url, busSraId, busServiceId, busServiceFunc, busSreIdcard, appCode);
         CloseableHttpResponse response = HttpUtil.get(url, param, heards);
         CloseableHttpResponse response = HttpUtil.get(url, param, heards);
-        return EntityUtils.toString(response.getEntity());
+        String statusCode = String.valueOf(response.getStatusLine().getStatusCode());
+        String result = EntityUtils.toString(response.getEntity());
+        logger.info("getAppRemoteDetailByCode result:{}", result);
+        IOUtils.closeQuietly(response);
+        if (!ResponseStatus.SUCCESS_CODE.equals(response.getStatusLine().getStatusCode())) {
+            logger.info("getAppRemoteDetailByCode status code:{}", statusCode);
+            return "";
+        }
+        return result;
     }
     }
 
 
     /**
     /**

+ 6 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/AppResourceKafkaConfig.java

@@ -1,6 +1,7 @@
 package com.dragoninfo.dcuc.app.config;
 package com.dragoninfo.dcuc.app.config;
 
 
 import com.dragoninfo.dcuc.app.message.AppResourceSyncListener;
 import com.dragoninfo.dcuc.app.message.AppResourceSyncListener;
+import com.dragoninfo.dcuc.app.message.ServiceResourceSyncListener;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
@@ -17,8 +18,12 @@ public class AppResourceKafkaConfig {
 
 
 
 
     @Bean
     @Bean
-    public AppResourceSyncListener resourceSyncListener() {
+    public AppResourceSyncListener appResourceSyncListener() {
         return new AppResourceSyncListener();
         return new AppResourceSyncListener();
     }
     }
 
 
+    @Bean
+    public ServiceResourceSyncListener serviceResourceSyncListener() {
+        return new ServiceResourceSyncListener();
+    }
 }
 }

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

@@ -34,6 +34,11 @@ public class DcucResourceConfig {
      */
      */
     private String appTopic;
     private String appTopic;
 
 
+    /**
+     * 监听的topic消息
+     */
+    private String serviceTopic;
+
     /**
     /**
      * 总线请求头参数
      * 总线请求头参数
      */
      */
@@ -64,6 +69,12 @@ public class DcucResourceConfig {
      */
      */
     private AppModifyResourceConfig appModifyResource;
     private AppModifyResourceConfig appModifyResource;
 
 
+    /**
+     * 增量同步服务资源
+     */
+    private ServiceModifyResourceConfig serviceModifyResource;
+
+
     @Data
     @Data
     public static class MenuResourceConfig {
     public static class MenuResourceConfig {
 
 
@@ -126,5 +137,20 @@ public class DcucResourceConfig {
          */
          */
         private String busServiceFunc;
         private String busServiceFunc;
     }
     }
+
+    @Data
+    public static class ServiceModifyResourceConfig {
+
+        /**
+         * 总线请求头参数
+         */
+        private String busServiceId;
+        /**
+         * 总线请求头参数
+         */
+        private String busServiceFunc;
+    }
+
+
 }
 }
 
 

+ 23 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/cons/ServiceStatusCons.java

@@ -0,0 +1,23 @@
+package com.dragoninfo.dcuc.app.cons;
+
+/**
+ * 服务资源状态常量类
+ *
+ * @author mazq
+ * @date 2021/3/17
+ */
+public interface ServiceStatusCons {
+    /**
+     * 停用
+     */
+    String STATUS_END = "0";
+    /**
+     * 启用
+     */
+    String STATUS_START = "1";
+    /**
+     *
+     */
+    String STATUS_DELETED = "3";
+
+}

+ 3 - 3
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/message/AppResourceSyncListener.java

@@ -2,7 +2,7 @@ package com.dragoninfo.dcuc.app.message;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
-import com.dragoninfo.dcuc.app.business.impl.ResourceBusiness;
+import com.dragoninfo.dcuc.app.business.IResourceBusiness;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.mq.client.model.entity.MessageInfoDTO;
 import com.dragonsoft.mq.client.model.entity.MessageInfoDTO;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
 import org.apache.kafka.clients.consumer.ConsumerRecord;
@@ -25,7 +25,7 @@ public class AppResourceSyncListener {
     Logger logger = LoggerFactory.getLogger(AppResourceSyncListener.class);
     Logger logger = LoggerFactory.getLogger(AppResourceSyncListener.class);
 
 
     @Autowired
     @Autowired
-    private ResourceBusiness resourceBusiness;
+    private IResourceBusiness resourceBusiness;
 
 
     @KafkaListener(topics = "${dcuc.app.resource-index.app-topic}", containerFactory = "kafkaListenerContainerFactory")
     @KafkaListener(topics = "${dcuc.app.resource-index.app-topic}", containerFactory = "kafkaListenerContainerFactory")
     public void receiveMessage(ConsumerRecord<String, byte[]> record) {
     public void receiveMessage(ConsumerRecord<String, byte[]> record) {
@@ -37,7 +37,7 @@ public class AppResourceSyncListener {
             }
             }
             ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(value));
             ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(value));
             MessageInfoDTO messageInfoDTO = (MessageInfoDTO) stream.readObject();
             MessageInfoDTO messageInfoDTO = (MessageInfoDTO) stream.readObject();
-            logger.info("--------收到数据,{}", JSON.toJSONString(messageInfoDTO));
+            logger.info("--------AppResourceSyncListener 收到数据,{}", JSON.toJSONString(messageInfoDTO));
             String content = messageInfoDTO.getContent();
             String content = messageInfoDTO.getContent();
             if (StringUtils.isBlank(content)) {
             if (StringUtils.isBlank(content)) {
                 return;
                 return;

+ 57 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/message/ServiceResourceSyncListener.java

@@ -0,0 +1,57 @@
+package com.dragoninfo.dcuc.app.message;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.dragoninfo.dcuc.app.business.IResourceBusiness;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.mq.client.model.entity.MessageInfoDTO;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.kafka.annotation.KafkaListener;
+
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+
+/**
+ * 应用服务资源增量同步Kafka消息监听器
+ *
+ * @author mazq
+ * @date 2021/3/10
+ */
+public class ServiceResourceSyncListener {
+
+    Logger logger = LoggerFactory.getLogger(ServiceResourceSyncListener.class);
+
+    @Autowired
+    private IResourceBusiness resourceBusiness;
+
+    @KafkaListener(topics = "${dcuc.app.resource-index.service-topic}", containerFactory = "kafkaListenerContainerFactory")
+    public void receiveMessage(ConsumerRecord<String, byte[]> record) {
+        try {
+            byte[] value = record.value();
+            if (null == value || value.length == 0) {
+                logger.info("receiveMessage value length 0 or null");
+                return;
+            }
+            ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(value));
+            MessageInfoDTO messageInfoDTO = (MessageInfoDTO) stream.readObject();
+            logger.info("-------- ServiceResourceSyncListener 收到数据,{}", JSON.toJSONString(messageInfoDTO));
+            String content = messageInfoDTO.getContent();
+            if (StringUtils.isBlank(content)) {
+                return;
+            }
+            JSONObject jsonObject = JSONObject.parseObject(content);
+            String serviceCode = jsonObject.getString("fwzybsf");
+            if (StringUtils.isBlank(serviceCode)) {
+                logger.info("serviceCode is blank");
+                return;
+            }
+            resourceBusiness.serviceIncrSync(serviceCode);
+        } catch (Exception e) {
+            logger.error("receiveMessage error.", e);
+        }
+    }
+
+}

+ 7 - 1
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceServiceImpl.java

@@ -6,6 +6,7 @@ import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
 import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
+import com.dragoninfo.dcuc.app.cons.ServiceStatusCons;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
@@ -311,7 +312,12 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         dto.setServiceName(acceptDTO.getFWZYMC());
         dto.setServiceName(acceptDTO.getFWZYMC());
         dto.setBuildUnitCode(acceptDTO.getXXCZDW_GAJGJGDM());
         dto.setBuildUnitCode(acceptDTO.getXXCZDW_GAJGJGDM());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
-        dto.setServiceStatus(acceptDTO.getFWZYZTDM());
+        String fwzyztdm = acceptDTO.getFWZYZTDM();
+        dto.setServiceStatus(fwzyztdm);
+        dto.setDeleted(BooleanEnum.FALSE.getValue());
+        if (ServiceStatusCons.STATUS_DELETED.equals(fwzyztdm)) {
+            dto.setDeleted(BooleanEnum.TRUE.getValue());
+        }
         return dto;
         return dto;
     }
     }
 
 

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

@@ -38,13 +38,11 @@ public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceR
         if (null == exist) {
         if (null == exist) {
             serviceResource = new ServiceResource();
             serviceResource = new ServiceResource();
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource);
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource);
-            serviceResource.setDeleted(BooleanEnum.FALSE.getValue());
             serviceResource.setCreateTime(new Date());
             serviceResource.setCreateTime(new Date());
             serviceResourceMapper.insert(serviceResource);
             serviceResourceMapper.insert(serviceResource);
         } else {
         } else {
             serviceResource = exist;
             serviceResource = exist;
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource, "id","createTime");
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource, "id","createTime");
-            serviceResource.setDeleted(BooleanEnum.FALSE.getValue());
             serviceResource.setUpdateTime(new Date());
             serviceResource.setUpdateTime(new Date());
             serviceResourceMapper.updateById(serviceResource);
             serviceResourceMapper.updateById(serviceResource);
         }
         }

+ 10 - 6
dcuc-app-service/src/main/resources/application-app.yml

@@ -11,24 +11,28 @@ dcuc:
       #是否开启kafka
       #是否开启kafka
       kafka: false
       kafka: false
       app-topic: 10000028
       app-topic: 10000028
-      bus-sra-id: B1200000001
-      bus-sre-idcard:
+      service-topic: 10000029
+      bus-sra-id: Y-120000000000-0042
+      bus-sre-idcard: 654001197503078495
       #应用资源请求参数
       #应用资源请求参数
       page-size: 50
       page-size: 50
       app-resource:
       app-resource:
-        bus-service-id: S-120000000000-0700-00006
+        bus-service-id: S-120000000000-0700-00025
         bus-service-func: searchApp
         bus-service-func: searchApp
       #服务资源请求参数
       #服务资源请求参数
       service-resource:
       service-resource:
-        bus-service-id: S-120000000000-0700-00070
+        bus-service-id: S-010000000000-0700-00126
         bus-service-func: findAll
         bus-service-func: findAll
       #菜单资源请求参数
       #菜单资源请求参数
       menu-resource:
       menu-resource:
-        bus-service-id: S-120000000000-0700-00006
+        bus-service-id: S-120000000000-0700-00025
         bus-service-func: findApp
         bus-service-func: findApp
         menu-enabled: true
         menu-enabled: true
       #应用增量同步接口参数
       #应用增量同步接口参数
       app-modify-resource:
       app-modify-resource:
-        bus-service-id: S-120000000000-0200-00029
+        bus-service-id: S-120000000000-0700-00025
         bus-service-func: findAppByYyxtbh
         bus-service-func: findAppByYyxtbh
+      service-modify-resource:
+        bus-service-id: S-010000000000-0700-00126
+        bus-service-func: customQuery
       resource-url: http://10.201.7.31:8585/bus/send
       resource-url: http://10.201.7.31:8585/bus/send