Răsfoiți Sursa

feature(应用推送订阅Kafka): 应用推送订阅Kafka

1.应用推送订阅Kafka
2.服务授权增加自定义时间
mazq 4 ani în urmă
părinte
comite
811700a845

+ 0 - 17
dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IResourceFacade.java

@@ -4,7 +4,6 @@ package com.dragoninfo.dcuc.app.facade;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.entity.ServiceResource;
-import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.base.entity.search.SearchDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.data.domain.Page;
@@ -102,20 +101,4 @@ public interface IResourceFacade {
      */
     @PostMapping(value = "getResourceRemote")
     List<ResourceRequestResultDTO> getResourceRequestResults(@RequestBody ResourceRequestParamDTO requestParam);
-
-    /**
-     * 应用资源推送接收
-     * @param acceptDTO
-     * @return
-     */
-    @PostMapping(value = "appAccept")
-    boolean acceptAppResource(@RequestBody AppResourceAcceptDTO acceptDTO);
-
-    /**
-     * 服务资源推送接收
-     * @param acceptDTO
-     * @return
-     */
-    @PostMapping(value = "serviceAccept")
-    boolean acceptServiceResource(@RequestBody ServiceResourceAcceptDTO acceptDTO);
 }

+ 0 - 54
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/WorkFlowStatusEnum.java

@@ -1,54 +0,0 @@
-package com.dragoninfo.dcuc.app.enumresources;
-
-/**
- * @author mazq
- * @date 2021/2/22
- */
-public enum WorkFlowStatusEnum {
-
-    /**
-     * 申请中
-     */
-    APPLYING("0", "申请中"),
-    /**
-     * 待审批
-     */
-    TO_BE_APPROVED("1", "待审批"),
-    /**
-     * 撤销中
-     */
-    CANCLEING("2", "撤销中"),
-    /**
-     * 已撤销
-     */
-    CANCLED("3", "已撤销"),
-    /**
-     * 审批完成
-     */
-    SUCCESS("4", "审批完成");
-
-    WorkFlowStatusEnum(String value, String lable) {
-        this.value = value;
-        this.lable = lable;
-    }
-
-    private String lable;
-
-    private String value;
-
-    public String getLable() {
-        return lable;
-    }
-
-    public void setLable(String lable) {
-        this.lable = lable;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-}

+ 0 - 36
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/WorkFlowTypeEnum.java

@@ -1,36 +0,0 @@
-package com.dragoninfo.dcuc.app.enumresources;
-
-/**
- * 工作单类型枚举
- * @author mazq
- * @date 2021/2/22
- */
-public enum WorkFlowTypeEnum {
-
-    SERVICE_AUTH("SERVICE_AUTH","服务授权工作单"),SERVICE_AUTH_CANCEL("SERVICE_AUTH_CANCEL","权限撤销工作单");
-
-    private String value;
-
-    private String lable;
-
-    WorkFlowTypeEnum(String value, String lable) {
-        this.value = value;
-        this.lable = lable;
-    }
-
-    public String getValue() {
-        return value;
-    }
-
-    public void setValue(String value) {
-        this.value = value;
-    }
-
-    public String getLable() {
-        return lable;
-    }
-
-    public void setLable(String lable) {
-        this.lable = lable;
-    }
-}

+ 6 - 0
dcuc-app-service/pom.xml

@@ -164,6 +164,12 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>dcms-mq-client-model</artifactId>
+            <version>1.0-SNAPSHOT</version>
+            <scope>compile</scope>
+        </dependency>
         <!--配置 spring 结束-->
 
     </dependencies>

+ 3 - 13
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/IResourceBusiness.java

@@ -1,9 +1,7 @@
 package com.dragoninfo.dcuc.app.business;
 
-import com.dragoninfo.dcuc.app.dto.AppResourceAcceptDTO;
 import com.dragoninfo.dcuc.app.dto.ResourceRequestParamDTO;
 import com.dragoninfo.dcuc.app.dto.ResourceRequestResultDTO;
-import com.dragoninfo.dcuc.app.dto.ServiceResourceAcceptDTO;
 
 import java.util.List;
 
@@ -26,16 +24,8 @@ public interface IResourceBusiness {
     void resourceSync();
 
     /**
-     * 应用资源推送接收
-     * @param acceptDTO
-     * @return
-     */
-    boolean acceptAppResource(AppResourceAcceptDTO acceptDTO);
-
-    /**
-     * 服务资源推送接收
-     * @param acceptDTO
-     * @return
+     * 应用资源增量同步
+     * @param appCode
      */
-    boolean acceptServiceResource(ServiceResourceAcceptDTO acceptDTO);
+    boolean appIncrSync(String appCode);
 }

+ 151 - 70
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java

@@ -9,6 +9,7 @@ import com.dragoninfo.dcuc.app.config.DcucResourceConfig;
 import com.dragoninfo.dcuc.app.dto.*;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
 import com.dragoninfo.dcuc.app.enumresources.ResourceTypeEnum;
+import com.dragoninfo.dcuc.app.service.IApplyInfoService;
 import com.dragoninfo.dcuc.app.service.IResourceService;
 import com.dragoninfo.dcuc.app.service.IResourceSyncService;
 import com.dragoninfo.dcuc.auth.auth.enumresources.YesNotEnum;
@@ -54,6 +55,9 @@ public class ResourceBusiness implements IResourceBusiness {
     @Autowired
     DcucResourceConfig resourceConfig;
 
+    @Autowired
+    IApplyInfoService applyInfoService;
+
     /**
      * 使用线程池异步获取应用菜单
      */
@@ -84,6 +88,29 @@ public class ResourceBusiness implements IResourceBusiness {
     }
 
     @Override
+    public boolean appIncrSync(String appCode) {
+        //调用总线接口根据appCode获取应用详情
+        AppResourceAcceptDTO appMenuDTO;
+        try {
+            String appStr = getAppRemoteDetailByCode(appCode);
+            appMenuDTO = JSON.parseObject(appStr, AppResourceAcceptDTO.class);
+        } catch (Exception e) {
+            logger.error("get app info from remote error.", e);
+            return false;
+        }
+        if (null == appMenuDTO) {
+            return false;
+        }
+        acceptAppResource(appMenuDTO);
+        return false;
+    }
+
+    /**
+     * 增量新增/更新应用资源和应用相关的菜单资源
+     *
+     * @param acceptDTO
+     * @return
+     */
     public boolean acceptAppResource(AppResourceAcceptDTO acceptDTO) {
         ResourceTypeEnum appEnum = ResourceTypeEnum.TJ_APP;
         ResourceSyncDTO syncDTO = new ResourceSyncDTO(appEnum.getResourceId()
@@ -93,7 +120,7 @@ public class ResourceBusiness implements IResourceBusiness {
         syncDTO.setAppName(appAcceptDTO.getYyxtmc());
         syncDTO.setExtId(appAcceptDTO.getId());
         syncDTO.setContent(JSON.toJSONString(appAcceptDTO));
-        syncDTO.setSync(com.dragoninfo.dcuc.user.user.enumresources.YesNotEnum.YES.getValue());
+        syncDTO.setSync(YesNotEnum.YES.getValue());
         syncService.insertRemoteResourceSync(syncDTO);
         //同步更新应用表
         AppResourceDTO appResourceDTO = convertToAppDTO(acceptDTO);
@@ -147,11 +174,10 @@ public class ResourceBusiness implements IResourceBusiness {
     }
 
     /**
-     * 应用资源接收类转为应用DTO
+     * 增量新增服务资源
      * @param acceptDTO
      * @return
      */
-    @Override
     public boolean acceptServiceResource(ServiceResourceAcceptDTO acceptDTO) {
         ResourceTypeEnum serviceEnum = ResourceTypeEnum.TJ_SERVICE;
         ResourceSyncDTO syncDTO = new ResourceSyncDTO(serviceEnum.getResourceId()
@@ -286,50 +312,72 @@ public class ResourceBusiness implements IResourceBusiness {
         executor.submit(new MenuTask(extAppIds));
     }
 
-    class MenuTask implements Runnable {
-
-        private List<String> appIds;
-
-        public MenuTask(List<String> appIds) {
-            this.appIds = appIds;
-        }
+    /**
+     * 从总线获取应用详细信息
+     *
+     * @param appId 资源提供方应用id
+     * @return
+     * @throws IOException
+     */
+    private String getAppRemoteDetailById(String appId) throws IOException {
+        String busSraId = resourceConfig.getMenuResource().getBusSraId();
+        String busServiceId = resourceConfig.getMenuResource().getBusServiceId();
+        String busServiceFunc = resourceConfig.getMenuResource().getBusServiceFunc();
+        List<Header> heards = getHeaders(busSraId, busServiceId, busServiceFunc);
+        String url = resourceConfig.getResourceUrl() + "/" + appId;
+        CloseableHttpResponse response = HttpUtil.get(url, null, heards);
+        return EntityUtils.toString(response.getEntity());
+    }
 
-        @Override
-        public void run() {
-            logger.info("get menu resource start");
-            ArrayList<ResourceSyncDTO> list = new ArrayList<>();
-            try {
-                for (String appId : appIds) {
-                    String menuStr = getAppMenuFromRemote(appId);
-                    AppResourceAcceptDTO resourceAcceptDTO = JSON.parseObject(menuStr, AppResourceAcceptDTO.class);
-                    AppInfoAcceptDTO appInfo = resourceAcceptDTO.getTappSystem();
-                    ResourceSyncDTO dto = new ResourceSyncDTO();
-                    dto.setResourceId(ResourceTypeEnum.TJ_APP_MENU.getResourceId());
-                    dto.setResourceType(ResourceTypeEnum.TJ_APP_MENU.getResourceType());
-                    dto.setResourceProvider(ResourceTypeEnum.TJ_APP_MENU.getResouProvider());
-                    dto.setSync(BooleanEnum.FALSE.getValue());
-                    dto.setExtId(appId);
-                    dto.setAppCode(appInfo.getYyxtbh());
-                    dto.setAppName(appInfo.getYyxtmc());
-                    dto.setContent(JSON.toJSONString(resourceAcceptDTO.getTappFunctionList()));
-                    list.add(dto);
-                }
-                syncService.batchInsertResourceSync(list);
-            } catch (Exception e){
-                logger.info("get MenuResource wrong in appIds:{}",JSON.toJSONString(appIds));
-                logger.error("get MenuResource exception.",e);
-            }
-        }
+    /**
+     * 从总线获取应用详细信息
+     *
+     * @param appCode 应用code
+     * @return
+     */
+    private String getAppRemoteDetailByCode(String appCode) throws IOException {
+        String busSraId = resourceConfig.getMenuResource().getBusSraId();
+        String busServiceId = resourceConfig.getMenuResource().getBusServiceId();
+        String busServiceFunc = resourceConfig.getMenuResource().getBusServiceFuncAppUpdate();
+        List<Header> heards = getHeaders(busSraId, busServiceId, busServiceFunc);
+        String url = resourceConfig.getResourceUrl();
+        Map<String, String> param = new HashMap<>();
+        param.put("yyxtbh", appCode);
+        CloseableHttpResponse response = HttpUtil.get(url, param, heards);
+        return EntityUtils.toString(response.getEntity());
+    }
 
-        private String getAppMenuFromRemote(String appId) throws IOException {
-            String busSraId = resourceConfig.getMenuResource().getBusSraId();
-            String busServiceId = resourceConfig.getMenuResource().getBusServiceId();
-            String busServiceFunc = resourceConfig.getMenuResource().getBusServiceFunc();
-            List<Header> heards = getHeaders(busSraId,busServiceId,busServiceFunc);
-            String url = resourceConfig.getResourceUrl()+ "/" + appId;
-            CloseableHttpResponse response = HttpUtil.get(url,null,heards);
-            return  EntityUtils.toString(response.getEntity());
+    /**
+     * 从总线分页查询服务资源
+     *
+     * @param pageNo
+     * @param pageSize
+     * @param url
+     * @return
+     */
+    private HttpResult getServiceResource(Integer pageNo, Integer pageSize, String url) {
+        HttpResult httpResult = new HttpResult();
+        Map<String, Object> map = new HashMap<>();
+        map.put("page", String.valueOf(pageNo - 1));
+        String param = JSON.toJSONString(map);
+        //获取服务资源
+        //服务资源提供方一次查询所有服务资源,未采用分页获取方式
+        String busSraId = resourceConfig.getServiceResource().getBusSraId();
+        String busServiceId = resourceConfig.getServiceResource().getBusServiceId();
+        String busServiceFunc = resourceConfig.getServiceResource().getBusServiceFunc();
+        List<Header> headerList = getHeaders(busSraId, busServiceId, busServiceFunc);
+        String response = HttpUtil.postJSON(url, param, headerList, null);
+        if (null == response) {
+            httpResult.setCode(ResponseStatus.FAIL_CODE);
+        } else {
+            JSONObject parse = JSONObject.parseObject(response);
+            JSONObject data = parse.getJSONObject("data");
+            httpResult.setRecords(data.getJSONArray("content"));
+            httpResult.setCode(parse.getString("status"));
+            httpResult.setPages(data.getInteger("totalPages"));
+            httpResult.setTotals(data.getInteger("totalElements"));
         }
+        return httpResult;
     }
 
 
@@ -402,31 +450,13 @@ public class ResourceBusiness implements IResourceBusiness {
         return httpResult;
     }
 
-    private HttpResult getServiceResource(Integer pageNo, Integer pageSize,String url) {
-        HttpResult httpResult = new HttpResult();
-        Map<String, Object> map = new HashMap<>();
-        map.put("page", String.valueOf(pageNo - 1));
-        String param = JSON.toJSONString(map);
-        //获取服务资源
-        //服务资源提供方一次查询所有服务资源,未采用分页获取方式
-        String busSraId = resourceConfig.getServiceResource().getBusSraId();
-        String busServiceId = resourceConfig.getServiceResource().getBusServiceId();
-        String busServiceFunc = resourceConfig.getServiceResource().getBusServiceFunc();
-        List<Header> headerList = getHeaders(busSraId,busServiceId,busServiceFunc);
-        String response = HttpUtil.postJSON(url, param,headerList,null);
-        if(null == response){
-            httpResult.setCode(ResponseStatus.FAIL_CODE);
-        } else {
-            JSONObject parse = JSONObject.parseObject(response);
-            JSONObject data = parse.getJSONObject("data");
-            httpResult.setRecords(data.getJSONArray("content"));
-            httpResult.setCode(parse.getString("status"));
-            httpResult.setPages(data.getInteger("totalPages"));
-            httpResult.setTotals(data.getInteger("totalElements"));
-        }
-        return httpResult;
-    }
-
+    /**
+     * 从总线分页查询应用资源
+     * @param pageNo
+     * @param pageSize
+     * @param url
+     * @return
+     */
     private HttpResult getAppResource(Integer pageNo, Integer pageSize, String url) {
         HttpResult httpResult = new HttpResult();
         Map<String, Object> map = new HashMap<>();
@@ -451,7 +481,14 @@ public class ResourceBusiness implements IResourceBusiness {
         return httpResult;
     }
 
-    private List<Header> getHeaders(String busSraId,String busServiceId,String busServiceFunc) {
+    /**
+     * 总线调用设置请求头
+     * @param busSraId
+     * @param busServiceId
+     * @param busServiceFunc
+     * @return
+     */
+    private List<Header> getHeaders(String busSraId, String busServiceId, String busServiceFunc) {
         List<Header> heardList = new ArrayList<>();
         Header busSraIdHeader = new BasicHeader("bus_sra_id",busSraId);
         Header serviceIdHeader = new BasicHeader("bus_service_id",busServiceId);
@@ -462,6 +499,12 @@ public class ResourceBusiness implements IResourceBusiness {
         return heardList;
     }
 
+    /**
+     * 插入资源同步表
+     * @param resourceEnum
+     * @param records
+     * @return
+     */
     private List<ResourceSyncDTO> insertRemoteResourceSync(ResourceTypeEnum resourceEnum, JSONArray records) {
         List<ResourceSyncDTO> list = new ArrayList<>();
         for (Object record : records) {
@@ -488,4 +531,42 @@ public class ResourceBusiness implements IResourceBusiness {
         return list;
     }
 
+    class MenuTask implements Runnable {
+
+        private List<String> appIds;
+
+        public MenuTask(List<String> appIds) {
+            this.appIds = appIds;
+        }
+
+        @Override
+        public void run() {
+            logger.info("get menu resource start");
+            ArrayList<ResourceSyncDTO> list = new ArrayList<>();
+            try {
+                for (String appId : appIds) {
+                    String menuStr = getAppRemoteDetailById(appId);
+                    AppResourceAcceptDTO resourceAcceptDTO = JSON.parseObject(menuStr, AppResourceAcceptDTO.class);
+                    AppInfoAcceptDTO appInfo = resourceAcceptDTO.getTappSystem();
+                    ResourceSyncDTO dto = new ResourceSyncDTO();
+                    dto.setResourceId(ResourceTypeEnum.TJ_APP_MENU.getResourceId());
+                    dto.setResourceType(ResourceTypeEnum.TJ_APP_MENU.getResourceType());
+                    dto.setResourceProvider(ResourceTypeEnum.TJ_APP_MENU.getResouProvider());
+                    dto.setSync(BooleanEnum.FALSE.getValue());
+                    dto.setExtId(appId);
+                    dto.setAppCode(appInfo.getYyxtbh());
+                    dto.setAppName(appInfo.getYyxtmc());
+                    dto.setContent(JSON.toJSONString(resourceAcceptDTO.getTappFunctionList()));
+                    list.add(dto);
+                }
+                syncService.batchInsertResourceSync(list);
+            } catch (Exception e) {
+                logger.info("get MenuResource wrong in appIds:{}", JSON.toJSONString(appIds));
+                logger.error("get MenuResource exception.", e);
+            }
+        }
+
+
+    }
+
 }

+ 24 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/config/AppResourceKafkaConfig.java

@@ -0,0 +1,24 @@
+package com.dragoninfo.dcuc.app.config;
+
+import com.dragoninfo.dcuc.app.message.AppResourceSyncListener;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+/**
+ * 应用、服务资源增量同步配置类
+ *
+ * @author mazq
+ * @date 2021/3/10
+ */
+@Component
+@ConditionalOnProperty(name = "dcuc.app.resource-index.kafka", havingValue = "true")
+public class AppResourceKafkaConfig {
+
+
+    @Bean
+    public AppResourceSyncListener resourceSyncListener() {
+        return new AppResourceSyncListener();
+    }
+
+}

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

@@ -24,6 +24,16 @@ public class DcucResourceConfig {
      */
     private Integer pageSize;
 
+    /**
+     * 是否开启kafka,订阅增量消息
+     */
+    private boolean kafka;
+
+    /**
+     * 监听的topic消息
+     */
+    private String appTopic;
+
     /**
      * 服务资源配置
      */
@@ -53,9 +63,16 @@ public class DcucResourceConfig {
         private String busServiceId;
         /**
          * 总线请求头参数
+         * 根据id获取应用详情
          */
         private String busServiceFunc;
 
+        /**
+         * 总线请求头参数
+         * 根据应用编码获取应用详情
+         */
+        private String busServiceFuncAppUpdate;
+
         /**
          * 是否需要获取菜单数据
          */

+ 0 - 10
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/ResourceFacade.java

@@ -82,16 +82,6 @@ public class ResourceFacade implements IResourceFacade {
         return iResourceBusiness.getResourceRequestResults(requestParamDTO);
     }
 
-    @Override
-    public boolean acceptAppResource(AppResourceAcceptDTO acceptDTO) {
-        return iResourceBusiness.acceptAppResource(acceptDTO);
-    }
-
-    @Override
-    public boolean acceptServiceResource(ServiceResourceAcceptDTO acceptDTO) {
-        return iResourceBusiness.acceptServiceResource(acceptDTO);
-    }
-
     @Override
     public Page<ServiceResourceDTO> serviceResourcePage(SearchDTO searchDTO) {
         Searchable searchable = Searchable.toSearchable(searchDTO);

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

@@ -0,0 +1,57 @@
+package com.dragoninfo.dcuc.app.message;
+
+import com.alibaba.fastjson.JSON;
+import com.dragoninfo.dcuc.app.business.impl.ResourceBusiness;
+import com.dragoninfo.mq.client.model.entity.MessageInfoDTO;
+import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+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.IOException;
+import java.io.ObjectInputStream;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 应用服务资源增量同步Kafka消息监听器
+ *
+ * @author mazq
+ * @date 2021/3/10
+ */
+public class AppResourceSyncListener {
+
+    Logger logger = LoggerFactory.getLogger(AppResourceSyncListener.class);
+
+    @Autowired
+    private ResourceBusiness resourceBusiness;
+
+    @KafkaListener(topics = "${dcuc.app.resource-index.topic}", containerFactory = "kafkaListenerContainerFactory")
+    public void receiveMessage(ConsumerRecord<String, byte[]> record) throws IOException, ClassNotFoundException {
+        byte[] value = record.value();
+        ObjectInputStream stream = new ObjectInputStream(new ByteArrayInputStream(value));
+        MessageInfoDTO messageInfoDTO = (MessageInfoDTO) stream.readObject();
+        logger.info("--------收到数据,{}", JSON.toJSONString(messageInfoDTO));
+        List<Map<String, String>> infoSet = messageInfoDTO.getInfoSet();
+        if (CollectionUtils.isEmpty(infoSet)) {
+            return;
+        }
+        Map<String, String> map = infoSet.get(0);
+        if (null == map) {
+            logger.info("info set is empty");
+            return;
+        }
+        String appCode = map.get("yyxtbh ");
+        if (StringUtils.isBlank(appCode)) {
+            logger.info("appCode is blank");
+            return;
+        }
+        resourceBusiness.appIncrSync(appCode);
+
+    }
+
+}

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

@@ -34,6 +34,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
+
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -246,15 +247,16 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         if(!resourceConfig.getMenuResource().isMenuEnabled()){
             return;
         }
-        List<AppFunInfo> funList = new ArrayList<>();
         if(CollectionUtils.isEmpty(menus)){
             return;
         }
+        List<AppFunInfo> funList = new ArrayList<>();
         for (MenuResourceDTO dto : menus) {
             AppFunInfo appFunInfo = new AppFunInfo();
             appFunInfo.setName(dto.getFunName());
             appFunInfo.setCode(dto.getFunCode());
             appFunInfo.setParentId(dto.getPFunCode());
+            appFunInfo.setIsActive(dto.getStatus());
             if(null != codeToIdMap){
                 String appId = codeToIdMap.get(dto.getAppCode());
                 if(StringUtils.isBlank(appId)){

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

@@ -8,8 +8,11 @@ dcuc:
       manufacturer-change-topic: 10000022
       manufacturer-change-enable: false
     resource-index:
+      #是否开启kafka
+      kafka: false
+      app-topic: 10000028
       #应用资源请求参数
-      pageSize: 50
+      page-size: 50
       app-resource:
         bus-sra-id: B1200000001
         bus-service-id: S-120000000000-0700-00006
@@ -24,5 +27,6 @@ dcuc:
         bus-sra-id: B0100000001
         bus-service-id: S-120000000000-0700-00006
         bus-service-func: findApp
+        bus-serbice-func-app-update: findAppByYyxtbh
         menu-enabled: true
       resource-url: http://10.201.7.31:8585/bus/send

+ 15 - 0
dcuc-app-service/src/main/resources/application-base.yml

@@ -23,6 +23,21 @@ spring:
   kafka:
     producer:
       bootstrap-servers: 192.168.10.20:9093
+    #kafka消费者配置
+    consumer:
+      bootstrap-servers: 192.168.10.20:9093
+      enable-auto-commit: true
+      auto-commit-interval: 1000
+      group-id: serviceGroup
+      max-poll-records: 500
+      security:
+        protocol: PLAINTEXT
+      fetch-max-wait: 300000
+      auto-offset-reset: earliest
+      sasl:
+        mechanism: PLAIN
+      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
+      value-deserializer: org.apache.kafka.common.serialization.ByteArrayDeserializer
     jaas:
       enabled: false
 server:

+ 4 - 4
dcuc-app-service/src/main/resources/config/mysql/V4_1_0002__Init_Tables.sql

@@ -18,8 +18,8 @@ CREATE TABLE `t_service_resource` (
   `contract_unit` varchar(255) DEFAULT NULL,
   `contract_principal` varchar(100) DEFAULT NULL,
   `contract_principal_phone` varchar(50) DEFAULT NULL,
-  `create_time` datetime DEFAULT NULL,
-  `update_time` datetime DEFAULT NULL,
+  `create_time` datetime(3) DEFAULT NULL,
+  `update_time` datetime(3) DEFAULT NULL,
   `deleted` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`id`),
   KEY `service_code_index` (`service_code`)
@@ -37,8 +37,8 @@ CREATE TABLE `t_resource_sync` (
   `resource_id` varchar(50) DEFAULT NULL,
   `resource_type` varchar(10) DEFAULT NULL,
   `resource_provider` varchar(10) DEFAULT NULL,
-  `create_time` datetime DEFAULT NULL,
-  `update_time` datetime DEFAULT NULL,
+  `create_time` datetime(3) DEFAULT NULL,
+  `update_time` datetime(3) DEFAULT NULL,
   `sync` varchar(5) DEFAULT NULL,
   `deleted` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`id`),