Procházet zdrojové kódy

Merge branch 'develop' of 192.168.0.144:dcuc-tjdsj/app-service into develop

fuzq před 4 roky
rodič
revize
4cb5481dea
36 změnil soubory, kde provedl 1232 přidání a 236 odebrání
  1. 27 4
      Jenkinsfile
  2. 8 1
      README.md
  3. 2 2
      dcuc-app-api/pom.xml
  4. 15 5
      dcuc-app-api/src/main/java/com/dragoninfo/dcuc/app/facade/IDataResourceFacade.java
  5. 2 2
      dcuc-app-model/pom.xml
  6. 17 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ResourceDTO.java
  7. 4 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ServiceResourceAcceptDTO.java
  8. 16 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ServiceResourceDTO.java
  9. 2 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/ChildResourceClassify.java
  10. 6 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/ApplyInfo.java
  11. 40 5
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/ServiceResource.java
  12. 55 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataAttrTypeEnum.java
  13. 139 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataResourceEnum.java
  14. 46 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/BusSendReqVO.java
  15. 38 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceClassifyVo.java
  16. 46 0
      dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceTreeVo.java
  17. 9 14
      dcuc-app-service/pom.xml
  18. 230 87
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java
  19. 1 1
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/cons/ServiceStatusCons.java
  20. 311 33
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java
  21. 40 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/TestFacade.java
  22. 16 25
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/DataResourceServiceImpl.java
  23. 62 36
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceServiceImpl.java
  24. 6 0
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceSyncServiceImpl.java
  25. 14 4
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/AppResourceStrategy.java
  26. 12 4
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ResourceOperateStrategy.java
  27. 12 3
      dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ServiceResourceStrategy.java
  28. 1 1
      dcuc-app-service/src/main/resources/application-app.yml
  29. 3 3
      dcuc-app-service/src/main/resources/application-base.yml
  30. 1 0
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0002__Add_Index.sql
  31. 4 4
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0003__Init_Tables.sql
  32. 12 0
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0004__Update_Tables.sql
  33. 5 0
      dcuc-app-service/src/main/resources/config/mysql/V4_1_0005__alert_column.sql
  34. 14 0
      dcuc-app-service/src/main/resources/config/sql/V4_1_0004__Update_Table.sql
  35. 14 0
      dcuc-app-service/src/main/resources/config/sql/V4_1_0005__ALERT_COLUMN_init.sql
  36. 2 2
      pom.xml

+ 27 - 4
Jenkinsfile

@@ -3,9 +3,11 @@
 
 def build = new org.devops.build()
 def color = new org.devops.color()
+def systemtime = new org.devops.systemtime()
 
-String cpu = "${env.cpu}"
-String imagePrefix = "${env.imagePrefix}"
+def String cpu = "${env.cpu}"
+def String imagePrefix = "${env.imagePrefix}"
+def String buildImage = "${env.buildImage}"
 
 pipeline {
     agent {
@@ -20,14 +22,15 @@ pipeline {
 
     //设定2个参数,根据项目类型不同,修改对应的description name value visibleItemCount  defaultValue 即可
     parameters {
-        extendedChoice description: '请选择CPU架构.可单选/多选/全选', multiSelectDelimiter: ',', name: 'cpu',
+        choice choices: ['false', 'true'], description: '是否需要打镜像包,默认为否', name: 'buildImage'
+        extendedChoice description: '只有在需要打镜像包的情况下,才需要选择CPU架构。可单选/多选/全选', multiSelectDelimiter: ',', name: 'cpu',
                 quoteValue: true,
                 saveJSONParameterToFile: false,
                 type: 'PT_CHECKBOX',
                 value: 'x86,arm64',
                 visibleItemCount: 5
         // 需修改对应的镜像名称
-        string defaultValue: 'bus.ga/jzywb/dcuc/', description: '请填写打的镜像通用前缀名称,注意最后面要加 / ', name: 'imagePrefix', trim: false
+        string defaultValue: 'bus.ga/jzywb/dcuc/', description: '只有在需要打镜像包的情况下,才需要填写要打镜像通用前缀名称,注意最后面要加 / ', name: 'imagePrefix', trim: false
     }
     stages {
         stage('MAVEN-BUILD') {
@@ -38,8 +41,28 @@ pipeline {
                     build.Build('mvn', 'mvn clean deploy -DskipTests=true', 'master')
                 }
             }
+            post {
+                success {
+                    script {
+                        version = build.GetMvnParentVersion()
+                        systime = systemtime.GetSysTime('yyMMdd')
+                        //将打出来的tar包,按照命名规范命名。根据实际情况,修改对应的系统简称和区域标识(DCUC-APP-SERVICE-TJDSJ)
+                        sh """cd dcuc-app-service/target
+                            cp dcuc-app-service-*.tar.gz DCUC-APP-SERVICE-TJDSJ-${version}-${env.GIT_COMMIT.take(8)}-BETA-${systime}.tar.gz
+                        """
+                        //将复制的按照命名规范的tar包提取到Jenkins的面板,方便下载。根据实际情况,修改对应的系统简称和区域标识(DCUC-APP-SERVICE-TJDSJ)
+                        archiveArtifacts artifacts: 'dcuc-app-service/target/DCUC-APP-SERVICE-TJDSJ-*.tar.gz'
+                    }
+                }
+            }
+
         }
         stage('DOCKER-BUILD') {
+            when {
+                expression {
+                    return (buildImage  == 'true')
+                }
+            }
             steps {
                 script {
                     //将cpu架构和模块名称传入方法打镜像包.若在上面定义的参数名称没变,可不修改

+ 8 - 1
README.md

@@ -1,4 +1,11 @@
 # 应用服务组件
 ## 简介
 1. 提供对应用、厂商的增删改查
-2. 当厂商、应用状态发生变更时,会发送相应消息到消息中心
+2. 当厂商、应用状态发生变更时,会发送相应消息到消息中心
+## 更新日志
+### 2.1.0
+  - 新增同步应用资源目录、服务资源目录、数据资源目录
+### 2.1.1
+  - 合并数据域代码
+### 2.1.2
+  - 新增服务资源目录相关字段 

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

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.0.0-tjdsj-SNAPSHOT</version>
+        <version>2.1.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -31,4 +31,4 @@
 
     </dependencies>
 
-</project>
+</project>

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

@@ -1,12 +1,12 @@
 package com.dragoninfo.dcuc.app.facade;
 
-import com.dragoninfo.dcuc.app.vo.DataClassifyVo;
-import com.dragoninfo.dcuc.app.vo.DataFieldClassifyVo;
-import com.dragoninfo.dcuc.app.vo.DataLevelVo;
+import com.dragoninfo.dcuc.app.vo.*;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -14,14 +14,14 @@ import java.util.List;
  * Created by lidr on 2021/4/14
  */
 @Api(value = "数据资源分级分类表码管理")
-@FeignClient(name = "dcuc-app", path = "appservice/v1")
+@FeignClient(name = "dcuc-app", path = "/dcuc/app/dataResourceFacade")
 public interface IDataResourceFacade {
 
     @ApiOperation(value = "数据分级表码列表")
     @GetMapping(value = "datalevels")
     List<DataLevelVo> getDataLevelList();
 
-    @ApiOperation(value = "数据资源分类表码列表")
+    @ApiOperation(value = "安全等级表码列表")
     @GetMapping(value = "securitylevels")
     List<DataLevelVo> getSecurityLevelList();
 
@@ -32,4 +32,14 @@ public interface IDataResourceFacade {
     @ApiOperation(value = "字段分类表码列表")
     @GetMapping(value = "fieldclassifys")
     List<DataFieldClassifyVo> getFieldClassifyList();
+
+    @ApiOperation(value = "数据资源树")
+    @ApiImplicitParam(name = "attrType",value = "数据属性类型 TABLE:表 COLUMN:列")
+    @GetMapping(value = "getAllDataResourceTree")
+    List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType);
+
+    @ApiOperation(value = "数据资源树")
+    @ApiImplicitParam(name = "typeCode",value = "typeCode类型(数据分级:DATA_CLASSIFY;数据资源分类:DATA_RESOURCE_CLASSIFY;数据安全级别:DATA_SECURITY_LEVEL;字段分类:COLUMN_CLASSIFY)")
+    @GetMapping(value = "getDataResourceTree")
+    DataResourceClassifyVo getDataResourceTree(@RequestParam("typeCode") String typeCode);
 }

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

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.0.0-tjdsj-SNAPSHOT</version>
+        <version>2.1.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -40,4 +40,4 @@
         </dependency>
 
     </dependencies>
-</project>
+</project>

+ 17 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ResourceDTO.java

@@ -70,6 +70,23 @@ public class ResourceDTO implements Serializable {
      */
     private String contractUnit;
 
+
+    /**
+     * 管理单位id
+     */
+    private String managerUnitId;
+
+    /**
+     * 管理单位name
+     */
+    private String managerUnit;
+
+    /**
+     * 管理单位code
+     */
+    private String managerUnitCode;
+
+
     /**
      * 承建单位负责人
      */

+ 4 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ServiceResourceAcceptDTO.java

@@ -52,4 +52,8 @@ public class ServiceResourceAcceptDTO {
      * 信息创建单位——GA机构机构代码
      */
     private String XXCZDW_GAJGJGDM;
+    /**
+     * 服务提供方式代码
+     */
+    private String FWTGFSDM;
 }

+ 16 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/ServiceResourceDTO.java

@@ -32,6 +32,22 @@ public class ServiceResourceDTO extends ResourceDTO implements Serializable {
      * 服务访问地址
      */
     private String serviceUrl;
+    /**
+     * 服务类型
+     */
+    private String serviceType;
+    /**
+     * 服务提供方式
+     */
+    private String serviceProvideWay;
+    /**
+     * 是否自用服务
+     */
+    private String mustSelf;
+    /**
+     * 服务提供应用系统code
+     */
+    private String appCode;
 
     public ServiceResourceDTO() {
         super();

+ 2 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/dto/dataresource/ChildResourceClassify.java

@@ -15,4 +15,6 @@ public class ChildResourceClassify {
     private String codeValue;
     private String catalogNum;
     private List<ResourceClassify> childrenType;
+    //父类的typeCode
+    private String typeCode;
 }

+ 6 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/ApplyInfo.java

@@ -45,6 +45,12 @@ public class ApplyInfo implements Serializable {
     @ApiModelProperty(value = "所属单位名称")
     private String orgName;
 
+    @ApiModelProperty(value = "管理单位id")
+    private String managerOrgId;
+
+    @ApiModelProperty(value = "管理单位名称")
+    private String managerOrgName;
+
     @ApiModelProperty(value = "排序号")
     private String sort;
 

+ 40 - 5
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/entity/ServiceResource.java

@@ -1,11 +1,9 @@
 package com.dragoninfo.dcuc.app.entity;
 
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
+import org.apache.ibatis.type.JdbcType;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -38,7 +36,7 @@ public class ServiceResource implements Serializable {
     private String resourceProvider;
 
     /**
-     * 服务编码
+     * 服务资源标识符
      */
     private String serviceCode;
 
@@ -82,6 +80,22 @@ public class ServiceResource implements Serializable {
      */
     private String buildPrincipalPhone;
 
+
+    /**
+     * 管理单位id
+     */
+    private String managerUnitId;
+
+    /**
+     * 管理单位name
+     */
+    private String managerUnit;
+
+    /**
+     * 管理单位code
+     */
+    private String managerUnitCode;
+
     /**
      * 承建单位id(ManufacturerId)
      */
@@ -114,13 +128,34 @@ public class ServiceResource implements Serializable {
     private String deleted;
 
     /**
+     * 框架组封装后需要加上jdbcType = JdbcType.TIMESTAMP数据库字段上的值才会有时分秒
      * 创建时间
      */
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
     private Date createTime;
 
     /**
+     * 框架组封装后需要加上jdbcType = JdbcType.TIMESTAMP数据库字段上的值才会有时分秒
      * 更新时间
      */
+    @TableField(jdbcType = JdbcType.TIMESTAMP)
     private Date updateTime;
 
+    /**
+     * 服务类型
+     */
+    private String serviceType;
+    /**
+     * 服务提供方式
+     */
+    private String serviceProvideWay;
+    /**
+     * 是否自用服务
+     */
+    private String mustSelf;
+    /**
+     * 服务提供应用系统code
+     */
+    private String appCode;
+
 }

+ 55 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataAttrTypeEnum.java

@@ -0,0 +1,55 @@
+package com.dragoninfo.dcuc.app.enumresources;
+
+/**
+ * 数据属性类型枚举类
+ * @author mazq
+ * @date 2021/4/13
+ */
+public enum DataAttrTypeEnum {
+    /**
+     * 列资源
+     */
+    DATA_ATTR_COLUMN("列资源","COLUMN"),
+
+    /**
+     * 表资源
+     */
+    DATA_ATTR_TABLE("表资源","TABLE"),
+
+    /**
+     * 公用资源
+     */
+    DATA_ATTR_ALL("公用资源","ALL");
+
+    DataAttrTypeEnum(String label, String value) {
+        this.label = label;
+        this.value = value;
+    }
+
+    /**
+     * 数据属性名称
+     */
+    private String label;
+
+    /**
+     * 数据属性值
+     */
+    private String value;
+
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+}

+ 139 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/enumresources/DataResourceEnum.java

@@ -0,0 +1,139 @@
+package com.dragoninfo.dcuc.app.enumresources;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 数据资源类型枚举类
+ * @author mazq
+ * @date 2021/4/13
+ */
+public enum  DataResourceEnum {
+
+    /**
+     * 数据分级
+     */
+    DATA_CLASSIFY("DATA_CLASSIFY","数据分级","DATA_CLASSIFY", DataAttrTypeEnum.DATA_ATTR_TABLE),
+
+    /**
+     * 数据资源分类
+     */
+    DATA_RESOURCE_CLASSIFY("DATA_RESOURCE_CLASSIFY","数据资源分类","DATA_RESOURCE_CLASSIFY",DataAttrTypeEnum.DATA_ATTR_TABLE),
+
+    /**
+     * 数据安全级别
+     */
+    DATA_SECURITY_LEVEL("DATA_SECURITY_LEVEL","数据安全级别","DATA_SECURITY_LEVEL", DataAttrTypeEnum.DATA_ATTR_COLUMN),
+
+    /**
+     * 字段分类
+     */
+    COLUMN_CLASSIFY("COLUMN_CLASSIFY","字段分类","COLUMN_CLASSIFY",DataAttrTypeEnum.DATA_ATTR_COLUMN);
+
+    DataResourceEnum(String code, String label, String dataType, DataAttrTypeEnum attrType) {
+        this.code = code;
+        this.label = label;
+        this.dataType = dataType;
+        this.attrType = attrType;
+    }
+
+    /**
+     * 数据资源code
+     */
+    private String code;
+
+    /**
+     * 数据资源名称
+     */
+    private String label;
+
+    /**
+     * 数据资源类型
+     * 数据安全级别:DATA_SECURITY_LEVEL
+     * 数据资源分类:DATA_RESOURCE_CLASSIFY
+     * 数据分级:DATA_CLASSIFY
+     * 字段分类:COLUMN_CLASSIFY
+     */
+    private String dataType;
+
+    /**
+     * 数据属性类型
+     */
+    private DataAttrTypeEnum attrType;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getLabel() {
+        return label;
+    }
+
+    public void setLabel(String label) {
+        this.label = label;
+    }
+
+    public String getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(String dataType) {
+        this.dataType = dataType;
+    }
+
+    public DataAttrTypeEnum getAttrType() {
+        return attrType;
+    }
+
+    public void setAttrType(DataAttrTypeEnum attrType) {
+        this.attrType = attrType;
+    }
+
+    /**
+     * 获取所有列属性的枚举类,包括公用资源
+     * @return
+     */
+    public static List<DataResourceEnum> getColumnDataResource(){
+        List<DataResourceEnum> list = new ArrayList<>();
+        for (DataResourceEnum value : values()) {
+            if(value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_COLUMN) ||
+               value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)){
+                 list.add(value);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 获取所有表属性的枚举类,包括公用资源
+     * @return
+     */
+    public static List<DataResourceEnum> getTableDataResource(){
+        List<DataResourceEnum> list = new ArrayList<>();
+        for (DataResourceEnum value : values()) {
+            if(value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_TABLE) ||
+               value.attrType.equals(DataAttrTypeEnum.DATA_ATTR_ALL)){
+                 list.add(value);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * 根据code获取枚举类值
+     * @param code
+     */
+    public static DataResourceEnum getByCode(String code) {
+        for (DataResourceEnum value : values()) {
+            if(value.getCode().equals(code)){
+                return value;
+            }
+        }
+        return null;
+    }
+
+}

+ 46 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/BusSendReqVO.java

@@ -0,0 +1,46 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * 请求总线参数
+ *
+ * @author huangzqa
+ * @date 2021/4/27
+ **/
+@Builder
+@Data
+public class BusSendReqVO {
+
+    /**
+     * 应用代码
+     */
+    private String busSraId;
+
+    /**
+     * 服务代码
+     */
+    private String busServiceId;
+
+    /**
+     * 接口方法
+     */
+    private String busServiceFunc;
+
+    /**
+     * 身份证号
+     */
+    private String busSreIdcard;
+
+    /**
+     * 用户令牌
+     */
+    private String userToken;
+
+    /**
+     * 应用令牌
+     */
+    private String appToken;
+
+}

+ 38 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceClassifyVo.java

@@ -0,0 +1,38 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.experimental.Tolerate;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/4/15
+ */
+@Data
+@Builder
+@ApiModel(value = "数据资源分级分类Vo")
+public class DataResourceClassifyVo {
+    @ApiModelProperty(value = "id,分级分类唯一标识")
+    private String id;
+
+    @ApiModelProperty(value = "分级分类名称")
+    private String label;
+
+    @ApiModelProperty(value = "分级分类下数据资源-树结构")
+    private List<DataResourceTreeVo> nodes;
+
+    @ApiModelProperty(value = "数据属性类型 TABLE:表 COLUMN:列")
+    private String attrType;
+
+    @ApiModelProperty(value = "最后一级节点总数量")
+    private Integer total;
+    /**
+     * 添加无参构造器,便于调用端序列化
+     */
+    @Tolerate
+    DataResourceClassifyVo() {}
+}

+ 46 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/DataResourceTreeVo.java

@@ -0,0 +1,46 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Builder;
+import lombok.Data;
+import lombok.experimental.Tolerate;
+
+import java.util.List;
+
+/**
+ * @author mazq
+ * @date 2021/4/13
+ */
+@Data
+@Builder
+@ApiModel(value = "数据资源树对象")
+public class DataResourceTreeVo {
+
+    @ApiModelProperty(value = "节点id")
+    private String id;
+    @ApiModelProperty(value = "数据资源code")
+    private String code;
+    @ApiModelProperty(value = "节点名称")
+    private String label;
+    @ApiModelProperty(value = "数据资源类型" +
+            "数据安全级别:DATA_SECURITY_LEVEL " +
+            "字段一级分类:LEVEL_1_COLUMN_CLASSIFY" +
+            "字段二级分类:LEVEL_2_COLUMN_CLASSIFY" +
+            "数据分级:DATA_CLASSIFY")
+    private String dataType;
+    @ApiModelProperty(value = "子节点集合")
+    private List<DataResourceTreeVo> child;
+    @ApiModelProperty(value = "是否是树节点 true:是树节点,child不为空。false:非树节点,child为空。")
+    private Boolean treeNode;
+    @ApiModelProperty(value = "父节点id")
+    private String pId;
+
+    @ApiModelProperty(value = "数据资源code与dataType拼接,以|拼接")
+    private String codeDataTypeStr;
+    /**
+     * 添加无参构造器,便于调用端序列化
+     */
+    @Tolerate
+    DataResourceTreeVo() {}
+}

+ 9 - 14
dcuc-app-service/pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <artifactId>dcuc-app</artifactId>
         <groupId>com.dragoninfo</groupId>
-        <version>2.0.0-tjdsj-SNAPSHOT</version>
+        <version>2.1.2-tjdsj-SNAPSHOT</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
@@ -95,19 +95,19 @@
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-duceap-api</artifactId>
-            <version>${project.version}</version>
+            <version>2.0.0-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-org-api</artifactId>
-            <version>${project.version}</version>
+            <version>2.0.0-tjdsj-SNAPSHOT</version>
         </dependency>
 
         <dependency>
             <groupId>com.dragoninfo</groupId>
             <artifactId>dcuc-user-api</artifactId>
-            <version>2.0.1-SNAPSHOT</version>
+            <version>2.0.1-tjdsj-SNAPSHOT</version>
         </dependency>
 
         <dependency>
@@ -128,12 +128,7 @@
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
-        <!--redis-->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-data-redis</artifactId>
-            <version>2.1.8.RELEASE</version>
-        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
@@ -232,9 +227,9 @@
                                     <goal>copy-dependencies</goal>
                                 </goals>
                                 <configuration>
-                                    <!--   &lt;!&ndash;排除licenseignore包,用来禁用许可开关,防止生产环境通过关闭开关,绕过许可&ndash;&gt;
-                                       <excludeArtifactIds>duceap-support-licenseignore</excludeArtifactIds>-->
-                                    <!--<excludeScope>provided</excludeScope>-->
+                                    <!--排除licenseignore包,用来禁用许可开关,防止生产环境通过关闭开关,绕过许可-->
+                                    <excludeArtifactIds>duceap-support-licenseignore</excludeArtifactIds>
+                                    <excludeScope>provided</excludeScope>
                                     <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                     <!--取消依赖包的时间戳-->
                                     <useBaseVersion>true</useBaseVersion>
@@ -318,4 +313,4 @@
             </build>
         </profile>
     </profiles>
-</project>
+</project>

+ 230 - 87
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/business/impl/ResourceBusiness.java

@@ -1,14 +1,16 @@
 package com.dragoninfo.dcuc.app.business.impl;
 
 import cn.hutool.core.thread.ThreadFactoryBuilder;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.dragoninfo.dcuc.app.business.IResourceBusiness;
-import com.dragoninfo.dcuc.app.dto.dataresource.BaseResp;
 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.dataresource.BaseResp;
 import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.entity.ResourceSync;
 import com.dragoninfo.dcuc.app.entity.ServiceResource;
@@ -17,7 +19,9 @@ 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.app.service.IServiceResourceService;
-import com.dragoninfo.dcuc.auth.auth.enumresources.YesNotEnum;
+import com.dragoninfo.dcuc.app.vo.BusSendReqVO;
+import com.dragoninfo.dcuc.auth.auth.facade.IBimBusinessFacade;
+import com.dragoninfo.dcuc.common.Constants;
 import com.dragoninfo.dcuc.common.http.HttpUtil;
 import com.dragoninfo.duceap.core.response.Result;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
@@ -25,6 +29,8 @@ import com.dragonsoft.duceap.base.enums.BooleanEnum;
 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.date.DateConst;
+import com.dragonsoft.duceap.commons.util.date.DateUtils;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.google.common.reflect.TypeToken;
 import org.apache.http.Header;
@@ -34,10 +40,12 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
 
-import java.io.IOException;
+import javax.servlet.http.HttpServletRequest;
 import java.lang.reflect.Type;
-import java.text.SimpleDateFormat;
+import java.text.ParseException;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
@@ -54,29 +62,33 @@ public class ResourceBusiness implements IResourceBusiness {
 
     Logger logger = LoggerFactory.getLogger(ResourceBusiness.class);
 
+    /**
+     * 应用令牌错误信息
+     */
+    public static final String APP_TOKEN_ERROR_MESSAGE = "0302 令牌验证执行失败";
     @Autowired
-    IResourceService resourceService;
-
+    private IResourceService resourceService;
     @Autowired
-    IResourceSyncService syncService;
-
+    private IResourceSyncService syncService;
     @Autowired
-    DcucResourceConfig resourceConfig;
-
+    private DcucResourceConfig resourceConfig;
     @Autowired
-    IApplyInfoService applyInfoService;
-
+    private IApplyInfoService applyInfoService;
     @Autowired
-    IServiceResourceService serviceResourceService;
-
+    private IServiceResourceService serviceResourceService;
+    @Autowired
+    private IBimBusinessFacade bimBusinessFacade;
     /**
      * 使用线程池异步获取应用菜单
      */
     private ExecutorService executor = new ThreadPoolExecutor(1, 1,
             0L, TimeUnit.MILLISECONDS,
-            new LinkedBlockingQueue<Runnable>(),
+            new LinkedBlockingQueue<>(),
             new ThreadFactoryBuilder().setNamePrefix("menu-resource").build());
-
+    /**
+     * 重试次数
+     */
+    public static final int RETRY_NUMBER = 3;
 
     @Override
     public void resourceSync() {
@@ -93,7 +105,7 @@ public class ResourceBusiness implements IResourceBusiness {
             }
             resourceService.resourceSync(resourceSyncs);
             //更新sync字段
-            resourceSyncs.stream().forEach(item -> item.setSync(BooleanEnum.TRUE.getValue()));
+            resourceSyncs.forEach(item -> item.setSync(BooleanEnum.TRUE.getValue()));
             syncService.batchUpdate(resourceSyncs);
         }
     }
@@ -103,9 +115,12 @@ public class ResourceBusiness implements IResourceBusiness {
         //调用总线接口根据appCode获取应用详情
         AppResourceAcceptDTO appMenuDTO;
         String appStr = null;
+        String userToken = bimBusinessFacade.getUserToken(false);
+
+        String appToken = bimBusinessFacade.getAppToken(userToken, false);
         try {
             logger.info("-------getAppRemoteDetailByCode STATR---------------");
-            appStr = getAppRemoteDetailByCode(appCode);
+            appStr = getAppRemoteDetailByCode(appCode, userToken, appToken, 0);
             logger.info("-------getAppRemoteDetailByCode END---------------");
             appMenuDTO = JSON.parseObject(appStr, AppResourceAcceptDTO.class);
         } catch (Exception e) {
@@ -218,6 +233,7 @@ public class ResourceBusiness implements IResourceBusiness {
         dto.setServiceStatus(ServiceStatusCons.STATUS_DELETED);
         dto.setDeleted(BooleanEnum.TRUE.getValue());
         serviceResourceService.updateById(dto);
+        serviceResourceService.deleteById(dto.getId());
         return true;
     }
 
@@ -225,18 +241,27 @@ public class ResourceBusiness implements IResourceBusiness {
     public <T> T getDataResource(Map paramMap, Type type) {
         // 构建header
         String busSraId = resourceConfig.getBusSraId();
-        busSraId = "Y-120000000000-0037";//原有身份没有权限 测试数据
-        String busSreIdcard = resourceConfig.getBusSreIdcard();
+
+        String busSreIdcard = UserContextUtils.getCurrentUser().getIdcard();
+
         String busServiceId = resourceConfig.getDataResource().getBusServiceId();
         String busServiceFunc = resourceConfig.getDataResource().getBusServiceFunc();
-        List<Header> heards = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
+
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(busSreIdcard)
+                .build();
+
+        List<Header> headerList = getHeaders(busSendReqVO);
         String url = resourceConfig.getResourceUrl();
         logger.info("getDataResource >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}",
                 url, busSraId, busServiceId, busServiceFunc, busSreIdcard);
-        String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), heards, null);
+        String response = HttpUtil.postJSON(url, JSON.toJSONString(paramMap), headerList, null);
         BaseResp<String> baseResp = JSON.parseObject(response, new TypeToken<BaseResp<String>>() {
         }.getType());
-        if (baseResp.getCode().equals("000")) {
+        if ("000".equals(baseResp.getCode())) {
             return JSON.parseObject(baseResp.getResultData(), type);
         }
         logger.error("调用数据失败:getDataResource >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}",
@@ -245,24 +270,19 @@ public class ResourceBusiness implements IResourceBusiness {
     }
 
     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 + "'");
-        param.put("page", "1");
-        param.put("pageSize", "1");
-        logger.info("getServiceRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, serviceCode:{}",
-                url, busSraId, busServiceId, busServiceFunc, busSreIdcard, serviceCode);
-        String response = HttpUtil.postJSON(url, JSON.toJSONString(param), heards, null);
+
+        String userToken = bimBusinessFacade.getUserToken(false);
+
+        String appToken = bimBusinessFacade.getAppToken(userToken, false);
+
+        String response = getAppResource(serviceCode, userToken, appToken, 0);
+
         logger.info("getServiceRemoteDetailByCode result:{}", response);
         if (StringUtils.isBlank(response)) {
             logger.info("getServiceRemoteDetailByCode response is null");
             return "";
         }
+
         JSONObject jsonObject = JSONObject.parseObject(response);
         String status = jsonObject.getString("status");
         if (!ResponseStatus.SUCCESS_CODE.equals(status)) {
@@ -282,6 +302,53 @@ public class ResourceBusiness implements IResourceBusiness {
         return JSON.toJSONString(dataInfo);
     }
 
+    /**
+     * 获取应用资源
+     *
+     * @param serviceCode 服务代码
+     * @param userToken   用户令牌
+     * @param appToken    应用令牌
+     * @param retry       重试次数
+     * @return 返回结果
+     */
+    private String getAppResource(String serviceCode, String userToken, String appToken, int retry) {
+        String busSraId = resourceConfig.getBusSraId();
+        String busSreIdcard = resourceConfig.getBusSreIdcard();
+        String busServiceId = resourceConfig.getServiceModifyResource().getBusServiceId();
+        String busServiceFunc = resourceConfig.getServiceModifyResource().getBusServiceFunc();
+
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(busSreIdcard)
+                .userToken(userToken)
+                .appToken(appToken)
+                .build();
+
+        List<Header> headerList = getHeaders(busSendReqVO);
+
+        String url = resourceConfig.getResourceUrl();
+        Map<String, String> param = new HashMap<>();
+        param.put("Condition", "FWZYBSF = '" + serviceCode + "'");
+        param.put("page", "1");
+        param.put("pageSize", "1");
+
+        logger.info("getServiceRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, serviceCode:{}",
+                url, busSraId, busServiceId, busServiceFunc, busSreIdcard, serviceCode);
+
+        String response = HttpUtil.postJSON(url, JSON.toJSONString(param), headerList, null);
+
+        if ((retry <= RETRY_NUMBER) && (!JSONUtil.isJson(response))) {
+            retry++;
+            String retryUserToken = bimBusinessFacade.getUserToken(true);
+            String retryAppToken = bimBusinessFacade.getAppToken(userToken, true);
+            return getAppResource(serviceCode, retryUserToken, retryAppToken, retry);
+        }
+
+        return response;
+    }
+
     /**
      * 增量新增/更新应用资源和应用相关的菜单资源
      *
@@ -331,7 +398,7 @@ public class ResourceBusiness implements IResourceBusiness {
         dto.setAppCode(appInfoAcceptDTO.getYyxtbh());
         dto.setAppName(appInfoAcceptDTO.getYyxtmc());
         String xtzybs = appInfoAcceptDTO.getXtzybs();
-        if (StringUtils.isNotBlank(xtzybs)) {
+        if (StrUtil.isNotBlank(xtzybs)) {
             if (BooleanEnum.TRUE.getValue().equals(xtzybs)) {
                 xtzybs = BooleanEnum.FALSE.getValue();
             } else {
@@ -340,36 +407,37 @@ public class ResourceBusiness implements IResourceBusiness {
         }
         dto.setAppStatus(xtzybs);
         dto.setAppUrl(appInfoAcceptDTO.getYyxtfwdz());
-        dto.setBuildUnitCode(appInfoAcceptDTO.getYyxtgldwdm());
+        dto.setBuildUnitCode(appInfoAcceptDTO.getYyxtsqdwdm());
+        dto.setManagerUnitCode(appInfoAcceptDTO.getYyxtgldwdm());
         dto.setContractUnit(appInfoAcceptDTO.getYyxtcjdwmc());
         dto.setResourceId(ResourceTypeEnum.TJ_APP.getResourceId());
         dto.setResourceType(ResourceTypeEnum.TJ_APP.getResourceType());
         dto.setResourceProvider(ResourceTypeEnum.TJ_APP.getResouProvider());
         String sxrq = appInfoAcceptDTO.getSxrq();
-        if (!org.springframework.util.StringUtils.isEmpty(sxrq)) {
-            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        if (StrUtil.isNotBlank(sxrq)) {
+            Date date = null;
             try {
-                Date parse = format.parse(sxrq);
-                dto.setRegistrationTime(parse);
-            } catch (Exception e) {
-
+                date = DateUtils.getDate(sxrq, DateConst.HYPHEN_DISPLAY_TIME);
+                dto.setRegistrationTime(date);
+            } catch (ParseException e) {
+                logger.error("Parse error", e);
             }
         }
         dto.setApplyCategory(appInfoAcceptDTO.getYyxtfldm());
         dto.setPoliceSpecies(appInfoAcceptDTO.getGajzfldm());
         //设置菜单资源
         List<MenuResourceAcceptDTO> tAppFunctionList = acceptDTO.getTappFunctionList();
-        List<MenuResourceDTO> menusDTOs = new ArrayList<>();
-        for (MenuResourceAcceptDTO mADTO : tAppFunctionList) {
+        List<MenuResourceDTO> dtoArrayList = new ArrayList<>();
+        for (MenuResourceAcceptDTO menuResourceAcceptDTO : tAppFunctionList) {
             MenuResourceDTO menuDTO = new MenuResourceDTO();
-            menuDTO.setFunCode(mADTO.getGnbh());
-            menuDTO.setPFunCode(mADTO.getSjgnbh());
-            menuDTO.setFunName(mADTO.getGnmc());
+            menuDTO.setFunCode(menuResourceAcceptDTO.getGnbh());
+            menuDTO.setPFunCode(menuResourceAcceptDTO.getSjgnbh());
+            menuDTO.setFunName(menuResourceAcceptDTO.getGnmc());
             menuDTO.setAppCode(appInfoAcceptDTO.getYyxtbh());
-            menuDTO.setStatus(mADTO.getZyzt());
-            menusDTOs.add(menuDTO);
+            menuDTO.setStatus(menuResourceAcceptDTO.getZyzt());
+            dtoArrayList.add(menuDTO);
         }
-        dto.setMenusResources(menusDTOs);
+        dto.setMenusResources(dtoArrayList);
         return dto;
     }
 
@@ -403,8 +471,8 @@ public class ResourceBusiness implements IResourceBusiness {
         ServiceResourceDTO dto = new ServiceResourceDTO();
         dto.setServiceCode(acceptDTO.getFWZYBSF());
         dto.setServiceName(acceptDTO.getFWZYMC());
-        dto.setBuildUnitCode(acceptDTO.getFWZYGLDW_GAJGJGDM());
-        dto.setContractUnitCode(acceptDTO.getFWZYSQDW_JGDM());
+        dto.setManagerUnitCode(acceptDTO.getFWZYGLDW_GAJGJGDM());
+        dto.setBuildUnitCode(acceptDTO.getFWZYSQDW_JGDM());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
         String fwzyztdm = acceptDTO.getFWZYZTDM();
         dto.setServiceStatus(fwzyztdm);
@@ -412,6 +480,11 @@ public class ResourceBusiness implements IResourceBusiness {
         if (ServiceStatusCons.STATUS_DELETED.equals(fwzyztdm)) {
             dto.setDeleted(BooleanEnum.TRUE.getValue());
         }
+        dto.setServiceType(acceptDTO.getFWLXDM());
+        dto.setServiceProvideWay(acceptDTO.getFWTGFSDM());
+        //是否自用服务,服务资源未返回
+//        dto.setMustSelf();
+        dto.setAppCode(acceptDTO.getTGFWZYD_YYZYBS());
         return dto;
     }
 
@@ -462,7 +535,7 @@ public class ResourceBusiness implements IResourceBusiness {
         String resourceId = listingParam.getResourceId();
         List<Integer> pageNos = listingParam.getPageNo();
         ResourceRequestResultDTO resourceListResult = new ResourceRequestResultDTO(resourceId, new ArrayList<Integer>());
-        resourceListResult.setSuccess(YesNotEnum.YES.getValue());
+        resourceListResult.setSuccess(BooleanEnum.TRUE.getValue());
         for (Integer pageNo : pageNos) {
             Result<Map<String, Object>> result = getRemoteResource(resourceId, pageNo, pageSize);
             //只收集未同步成功的资源id和页码
@@ -470,7 +543,7 @@ public class ResourceBusiness implements IResourceBusiness {
                 Map<String, Object> resultMap = result.getContent();
                 Integer ePageNo = (Integer) resultMap.get("pageNo");
                 resourceListResult.getPageNos().add(ePageNo);
-                resourceListResult.setSuccess(YesNotEnum.NO.getValue());
+                resourceListResult.setSuccess(BooleanEnum.FALSE.getValue());
             }
         }
         //不记录总页数,这里不是全量获取
@@ -488,8 +561,8 @@ public class ResourceBusiness implements IResourceBusiness {
         Integer pageNo = currentPageNo;
         Integer pages = currentPageNo;
         String resourceId = resourceTypeEnum.getResourceId();
-        ResourceRequestResultDTO resourceListResult = new ResourceRequestResultDTO(resourceId, new ArrayList<Integer>());
-        resourceListResult.setSuccess(YesNotEnum.YES.getValue());
+        ResourceRequestResultDTO resourceListResult = new ResourceRequestResultDTO(resourceId, new ArrayList<>());
+        resourceListResult.setSuccess(BooleanEnum.TRUE.getValue());
         do {
             Result<Map<String, Object>> result = getRemoteResource(resourceId, pageNo, pageSize);
             Map<String, Object> resultMap = result.getContent();
@@ -497,7 +570,7 @@ public class ResourceBusiness implements IResourceBusiness {
             if (!ResponseStatus.SUCCESS_CODE.equals(result.getResult())) {
                 Integer ePageNo = (Integer) resultMap.get("pageNo");
                 resourceListResult.getPageNos().add(ePageNo);
-                resourceListResult.setSuccess(YesNotEnum.NO.getValue());
+                resourceListResult.setSuccess(BooleanEnum.FALSE.getValue());
             }
             Integer allPages = (Integer) resultMap.get("pages");
             if (null != allPages) {
@@ -525,16 +598,23 @@ public class ResourceBusiness implements IResourceBusiness {
      *
      * @param appId 资源提供方应用id
      * @return
-     * @throws IOException
      */
-    private String getAppRemoteDetailById(String appId, String idcard) throws IOException {
+    private String getAppRemoteDetailById(String appId, String idcard) {
         String busSraId = resourceConfig.getBusSraId();
         String busServiceId = resourceConfig.getMenuResource().getBusServiceId();
         String busServiceFunc = resourceConfig.getMenuResource().getBusServiceFunc();
-        List<Header> heards = getHeaders(busSraId, idcard, busServiceId, busServiceFunc);
+
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(idcard)
+                .build();
+
+        List<Header> headerList = getHeaders(busSendReqVO);
         String url = resourceConfig.getResourceUrl() + "/" + appId;
         logger.info("getAppRemoteDetailById >> url:{}", url);
-        String result = HttpUtil.get(url, null, heards);
+        String result = HttpUtil.get(url, null, headerList);
         if (StringUtils.isBlank(result)) {
             logger.info("getAppRemoteDetailById response is null");
             return "";
@@ -546,27 +626,47 @@ public class ResourceBusiness implements IResourceBusiness {
     /**
      * 从总线获取应用详细信息
      *
-     * @param appCode 应用code
-     * @return
+     * @param appCode   应用code
+     * @param userToken 用户令牌
+     * @param appToken  应用令牌
+     * @return 结果
      */
-    private String getAppRemoteDetailByCode(String appCode) throws IOException {
+    private String getAppRemoteDetailByCode(String appCode, String userToken, String appToken, int retry) {
         String busSraId = resourceConfig.getBusSraId();
         String busSreIdcard = resourceConfig.getBusSreIdcard();
         String busServiceId = resourceConfig.getAppModifyResource().getBusServiceId();
         String busServiceFunc = resourceConfig.getAppModifyResource().getBusServiceFunc();
-        List<Header> heards = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(busSreIdcard)
+                .userToken(userToken)
+                .appToken(appToken)
+                .build();
+
+        List<Header> headerList = getHeaders(busSendReqVO);
+
         String url = resourceConfig.getResourceUrl();
         Map<String, String> param = new HashMap<>();
         param.put("yyxtbh", appCode);
         logger.info("getAppRemoteDetailByCode >> url:{}, busSraId:{}, busServiceId:{}, busServiceFunc:{}, busSreIdcard:{}, appCode:{}",
                 url, busSraId, busServiceId, busServiceFunc, busSreIdcard, appCode);
-        String result = HttpUtil.get(url, param, heards);
-        if (StringUtils.isBlank(result)) {
+        String response = HttpUtil.get(url, param, headerList);
+        if (StringUtils.isBlank(response)) {
             logger.info("getAppRemoteDetailByCode response is null");
             return "";
         }
-        logger.info("getAppRemoteDetailByCode result:{}", result);
-        return result;
+        logger.info("getAppRemoteDetailByCode result:{}", response);
+
+        if ((retry <= RETRY_NUMBER) && (!JSONUtil.isJson(response))) {
+            retry++;
+            String retryUserToken = bimBusinessFacade.getUserToken(true);
+            String retryAppToken = bimBusinessFacade.getAppToken(userToken, true);
+            return getAppRemoteDetailByCode(appCode, retryUserToken, retryAppToken, retry);
+        }
+
+        return response;
     }
 
     /**
@@ -588,7 +688,14 @@ public class ResourceBusiness implements IResourceBusiness {
         String busSreIdcard = UserContextUtils.getCurrentUser().getIdcard();
         String busServiceId = resourceConfig.getServiceResource().getBusServiceId();
         String busServiceFunc = resourceConfig.getServiceResource().getBusServiceFunc();
-        List<Header> headerList = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
+
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(busSreIdcard)
+                .build();
+        List<Header> headerList = getHeaders(busSendReqVO);
         logger.info("getServiceResource url:{}", url);
         String response = HttpUtil.postJSON(url, param, headerList, null);
         if (null == response) {
@@ -639,7 +746,7 @@ public class ResourceBusiness implements IResourceBusiness {
             if (resourceConfig.getMenuResource().isMenuEnabled() && ResourceTypeEnum.TJ_APP.equals(resourceEnum)) {
                 List<String> ids = dtos.stream()
                         .filter(item -> StringUtils.isNotBlank(item.getExtId()))
-                        .map(item -> item.getExtId())
+                        .map(ResourceSyncDTO::getExtId)
                         .collect(Collectors.toList());
                 getAppMenus(ids);
             }
@@ -660,7 +767,7 @@ public class ResourceBusiness implements IResourceBusiness {
      *
      * @return
      */
-    private HttpResult getResourceFromRemote(ResourceTypeEnum resourceTypeEnum, Integer pageNo, Integer pageSize) throws IOException {
+    private HttpResult getResourceFromRemote(ResourceTypeEnum resourceTypeEnum, Integer pageNo, Integer pageSize) {
         HttpResult httpResult;
         String url = resourceConfig.getResourceUrl();
         //获取应用资源
@@ -696,7 +803,15 @@ public class ResourceBusiness implements IResourceBusiness {
         String busSreIdcard = UserContextUtils.getCurrentUser().getIdcard();
         String busServiceId = resourceConfig.getAppResource().getBusServiceId();
         String busServiceFunc = resourceConfig.getAppResource().getBusServiceFunc();
-        List<Header> headerList = getHeaders(busSraId, busSreIdcard, busServiceId, busServiceFunc);
+
+        BusSendReqVO busSendReqVO = BusSendReqVO.builder()
+                .busSraId(busSraId)
+                .busServiceId(busServiceId)
+                .busServiceFunc(busServiceFunc)
+                .busSreIdcard(busSreIdcard)
+                .build();
+
+        List<Header> headerList = getHeaders(busSendReqVO);
         logger.info("getAppResource url:{}", url);
         String response = HttpUtil.postForm(url, param, headerList, null);
         if (null == response) {
@@ -716,24 +831,52 @@ public class ResourceBusiness implements IResourceBusiness {
     /**
      * 总线调用设置请求头
      *
-     * @param busSraId
-     * @param busSreIdcard
-     * @param busServiceId
-     * @param busServiceFunc
-     * @return
+     * @param busSendReqVO 请求参数
+     * @return Header
      */
-    private List<Header> getHeaders(String busSraId, String busSreIdcard, String busServiceId, String busServiceFunc) {
-        logger.info("getHeaders >>> busSraId:{},busSreIdcard:{},busServiceId:{},busServiceFunc:{}",
-                busSraId, busSreIdcard, busServiceId, busServiceFunc);
+    private List<Header> getHeaders(BusSendReqVO busSendReqVO) {
+        logger.info("getHeaders >>> {}", busSendReqVO);
+
+        ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
+        HttpServletRequest request = servletRequestAttributes.getRequest();
+
         List<Header> heardList = new ArrayList<>();
-        Header busSraIdHeader = new BasicHeader("bus_sra_id", busSraId);
-        Header busSreIdHeader = new BasicHeader("bus_sre_idcard", busSreIdcard);
-        Header serviceIdHeader = new BasicHeader("bus_service_id", busServiceId);
-        Header busServiceFuncHeader = new BasicHeader("bus_service_func", busServiceFunc);
+
+        Header busSraIdHeader = new BasicHeader("bus_sra_id", busSendReqVO.getBusSraId());
+        Header serviceIdHeader = new BasicHeader("bus_service_id", busSendReqVO.getBusServiceId());
+        Header busServiceFuncHeader = new BasicHeader("bus_service_func", busSendReqVO.getBusServiceFunc());
+        Header busSreIdHeader = new BasicHeader("bus_sre_idcard", busSendReqVO.getBusSreIdcard());
+
         heardList.add(busSraIdHeader);
         heardList.add(busSreIdHeader);
         heardList.add(serviceIdHeader);
         heardList.add(busServiceFuncHeader);
+
+        String voUserToken = busSendReqVO.getUserToken();
+        String voAppToken = busSendReqVO.getAppToken();
+        if (StrUtil.isBlank(voUserToken) && StrUtil.isBlank(voAppToken)) {
+            String userToken = request.getHeader(Constants.USER_TOKEN);
+            String appToken = request.getHeader(Constants.APP_TOKEN);
+
+            logger.info("getHeaders >>> request userToken:{},appToken:{}", userToken, appToken);
+            if (StrUtil.isNotBlank(userToken)) {
+                Header busSreTokenHeader = new BasicHeader("bus_sre_token", userToken);
+                heardList.add(busSreTokenHeader);
+            }
+
+            if (StrUtil.isNotBlank(appToken)) {
+                Header busSraTokenHeader = new BasicHeader("bus_sra_token", appToken);
+                heardList.add(busSraTokenHeader);
+            }
+        } else {
+            logger.info("getHeaders >>> request voUserToken:{}, voAppToken {}", voUserToken, voAppToken);
+            Header busSraTokenHeader = new BasicHeader("bus_sra_token", voAppToken);
+            heardList.add(busSraTokenHeader);
+
+            Header busSreTokenHeader = new BasicHeader("bus_sre_token", voUserToken);
+            heardList.add(busSreTokenHeader);
+        }
+
         return heardList;
     }
 

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

@@ -16,7 +16,7 @@ public interface ServiceStatusCons {
      */
     String STATUS_START = "1";
     /**
-     *
+     * 注销
      */
     String STATUS_DELETED = "3";
 

+ 311 - 33
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -2,15 +2,19 @@ package com.dragoninfo.dcuc.app.facade;
 
 import com.dragoninfo.dcuc.app.dto.dataresource.ChildResourceClassify;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
+import com.dragoninfo.dcuc.app.enumresources.DataResourceEnum;
 import com.dragoninfo.dcuc.app.service.IDataResourceService;
-import com.dragoninfo.dcuc.app.vo.DataClassifyVo;
-import com.dragoninfo.dcuc.app.vo.DataFieldClassifyVo;
-import com.dragoninfo.dcuc.app.vo.DataLevelVo;
+import com.dragoninfo.dcuc.app.vo.*;
+import com.dragonsoft.duceap.commons.util.UUIDUtils;
+import com.dragonsoft.duceap.commons.util.collections.CollectionUtils;
+import com.google.common.base.Joiner;
 import com.google.common.collect.Lists;
 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 java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -22,9 +26,287 @@ import java.util.stream.Collectors;
 @RequestMapping(value = "/dcuc/app/dataResourceFacade")
 public class DataResourceFacade implements IDataResourceFacade {
 
+    public static final String ID_SEPARATOR = "|";
+
     @Autowired
     private IDataResourceService dataResourceService;
 
+    @Override
+    public List<DataResourceClassifyVo> getAllDataResourceTree(@RequestParam("attrType") String attrType) {
+        List<DataResourceClassifyVo> result = Lists.newArrayList();
+
+        //列:数据安全级别  字段分类
+        //表:数据分级  数据资源分类
+        if ("TABLE".equals(attrType)) {
+            result.add(getDataLevelTree());
+            result.add(getDataClassifyTree());
+        } else {
+            result.add(getSecurityLevelTree());
+            result.add(getFieldClassifyTree());
+        }
+        return result;
+    }
+
+    @Override
+    public DataResourceClassifyVo getDataResourceTree(String typeCode) {
+        DataResourceClassifyVo result = null;
+        DataResourceEnum dataResourceEnum = Enum.valueOf(DataResourceEnum.class, typeCode);
+        switch (dataResourceEnum){
+            case DATA_CLASSIFY:
+                result = getDataLevelTree();
+                break;
+            case COLUMN_CLASSIFY:
+                result = getFieldClassifyTree();
+                break;
+
+            case DATA_SECURITY_LEVEL:
+                result = getSecurityLevelTree();
+                break;
+            case DATA_RESOURCE_CLASSIFY:
+                result = getDataClassifyTree();
+                break;
+                default:
+                    break;
+        }
+
+        return result;
+    }
+
+
+    /**
+     * 数据分级树
+     *
+     * @return
+     */
+    private DataResourceClassifyVo getDataLevelTree() {
+        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_CLASSIFY;
+
+        DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
+                .id(dataResourceEnum.getCode())
+                .attrType(dataResourceEnum.getAttrType().getValue())
+                .label(dataResourceEnum.getLabel())
+                .build();
+
+        DataResourceTreeVo dataLevelTreeVo = DataResourceTreeVo.builder()
+                .id(dataResourceEnum.getCode())
+                .label("全部")
+                .code(dataResourceEnum.getCode())
+                .treeNode(true)
+                .build();
+
+        dataLevelTreeVo.setChild(getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
+                .stream()
+                .map(childResourceClassify -> DataResourceTreeVo.builder()
+                        .id(Joiner.on(ID_SEPARATOR).join(dataLevelTreeVo.getId(), childResourceClassify.getCodeValue()))
+                        .code(childResourceClassify.getCodeValue())
+                        .label(childResourceClassify.getCodeName())
+                        .dataType(childResourceClassify.getTypeCode())
+                        .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + childResourceClassify.getCodeValue() + ID_SEPARATOR + childResourceClassify.getTypeCode())
+                        .treeNode(false)
+                        .pId(dataLevelTreeVo.getId()).build()
+                ).collect(Collectors.toList())
+        );
+
+        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataLevelTreeVo);}});
+        //设置总数量
+        dataResourceClassifyVo.setTotal(dataLevelTreeVo.getChild().size());
+        return dataResourceClassifyVo;
+    }
+
+    /**
+     * 数据安全级别树
+     *
+     * @return
+     */
+    private DataResourceClassifyVo getSecurityLevelTree() {
+        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_SECURITY_LEVEL;
+
+        DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
+                .id(dataResourceEnum.getCode())
+                .attrType(dataResourceEnum.getAttrType().getValue())
+                .label(dataResourceEnum.getLabel())
+                .build();
+
+        DataResourceTreeVo securityLevelTree = DataResourceTreeVo.builder()
+                .id(dataResourceEnum.getCode())
+                .label("全部")
+                .code(dataResourceEnum.getCode())
+                .treeNode(true)
+                .build();
+
+        securityLevelTree.setChild(getFirstChildResourceClassifies(dataResourceService.getSecurityLevelList())
+                .stream()
+                .map(childResourceClassify -> DataResourceTreeVo.builder()
+                        .id(Joiner.on(ID_SEPARATOR).join(securityLevelTree.getId(), childResourceClassify.getCodeValue()))
+                        .code(childResourceClassify.getCodeValue())
+                        .label(childResourceClassify.getCodeName())
+                        .dataType(childResourceClassify.getTypeCode())
+                        .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + childResourceClassify.getCodeValue() + ID_SEPARATOR + childResourceClassify.getTypeCode())
+                        .treeNode(false)
+                        .pId(securityLevelTree.getId()).build()
+                ).collect(Collectors.toList())
+        );
+        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(securityLevelTree);}} );
+        //设置总数量
+        dataResourceClassifyVo.setTotal(securityLevelTree.getChild().size());
+        return dataResourceClassifyVo;
+    }
+
+    /**
+     * 数据资源分类
+     *
+     * @return
+     */
+    private DataResourceClassifyVo getDataClassifyTree() {
+        DataResourceEnum dataResourceEnum = DataResourceEnum.DATA_RESOURCE_CLASSIFY;
+
+        DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder().id(dataResourceEnum.getCode())
+                .attrType(dataResourceEnum.getAttrType().getValue()).label(dataResourceEnum.getLabel()).build();
+
+        DataResourceTreeVo dataClassifyTree = DataResourceTreeVo.builder().id(dataResourceEnum.getCode()).label("全部")
+                .code(dataResourceEnum.getCode()).treeNode(true).build();
+
+        dataClassifyTree.setChild(getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
+                .stream()
+                .map(firstClassify -> {
+                    DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
+                            .id(Joiner.on(ID_SEPARATOR).join(dataClassifyTree.getId(), firstClassify.getCodeValue()))
+                            .code(firstClassify.getCodeValue())
+                            .label(firstClassify.getCodeName())
+                            .treeNode(true)
+                            .pId(dataClassifyTree.getId())
+                            .dataType(firstClassify.getTypeCode())
+                            .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
+                            .build();
+
+                    firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
+                            .map(secondClassify -> {
+                                DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
+                                        .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
+                                        .code(secondClassify.getCodeValue())
+                                        .label(secondClassify.getCodeName())
+                                        .treeNode(true)
+                                        .pId(firstTreeVo.getId())
+                                        .dataType(secondClassify.getTypeCode())
+                                        .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
+                                        .build();
+
+                                secondTreeVo.setChild(getChildrenTypeList(secondClassify.getChildrenType()).stream()
+                                        .map(thirdClassify -> {
+                                            DataResourceTreeVo thirdTreeVo = DataResourceTreeVo.builder()
+                                                    .id(Joiner.on(ID_SEPARATOR).join(secondTreeVo.getId(), thirdClassify.getTypeCode()))
+                                                    .code(thirdClassify.getTypeCode())
+                                                    .label(thirdClassify.getTypeName())
+                                                    .treeNode(true)
+                                                    .pId(secondTreeVo.getId())
+                                                    .dataType(thirdClassify.getTypeCode())
+                                                    .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + thirdClassify.getTypeCode() + ID_SEPARATOR + thirdClassify.getTypeCode())
+                                                    .build();
+
+                                            thirdTreeVo.setChild(thirdClassify.getDataList().stream()
+                                                    .map(fourClassify -> {
+                                                        DataResourceTreeVo fourTreeVo = DataResourceTreeVo.builder()
+                                                                .id(Joiner.on(ID_SEPARATOR).join(thirdTreeVo.getId(), fourClassify.getCodeValue()))
+                                                                .code(fourClassify.getCodeValue())
+                                                                .label(fourClassify.getCodeName())
+                                                                .treeNode(false).child(null)
+                                                                .pId(thirdTreeVo.getId())
+                                                                .dataType(thirdClassify.getTypeCode())
+                                                                .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + fourClassify.getCodeValue() + ID_SEPARATOR + thirdClassify.getTypeCode())
+                                                                .build();
+                                                        return fourTreeVo;
+                                                    }).collect(Collectors.toList()));
+                                            return thirdTreeVo;
+                                        }).collect(Collectors.toList()));
+                                return secondTreeVo;
+                            }).collect(Collectors.toList()));
+                    return firstTreeVo;
+                }).collect(Collectors.toList()));
+
+        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(dataClassifyTree);}} );
+        dataResourceClassifyVo.setTotal(getTotalCount(dataClassifyTree));
+        return dataResourceClassifyVo;
+    }
+
+    /**
+     * 字段分类
+     *
+     * @return
+     */
+    private DataResourceClassifyVo getFieldClassifyTree() {
+        DataResourceEnum dataResourceEnum = DataResourceEnum.COLUMN_CLASSIFY;
+
+        DataResourceClassifyVo dataResourceClassifyVo = DataResourceClassifyVo.builder()
+                .id(dataResourceEnum.getCode())
+                .attrType(dataResourceEnum.getAttrType().getValue())
+                .label(dataResourceEnum.getLabel())
+                .build();
+
+        DataResourceTreeVo fieldClassifyTree = DataResourceTreeVo.builder()
+                .id(dataResourceEnum.getCode())
+                .label("全部")
+                .code(dataResourceEnum.getCode())
+                .treeNode(true)
+                .build();
+
+        fieldClassifyTree.setChild(getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
+                .stream()
+                .map(firstClassify -> {
+                    DataResourceTreeVo firstTreeVo = DataResourceTreeVo.builder()
+                            .id(Joiner.on(ID_SEPARATOR).join(fieldClassifyTree.getId(), firstClassify.getCodeValue()))
+                            .code(firstClassify.getCodeValue())
+                            .label(firstClassify.getCodeName())
+                            .dataType(firstClassify.getTypeCode())
+                            .treeNode(true)
+                            .pId(fieldClassifyTree.getId())
+                            .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + firstClassify.getCodeValue() + ID_SEPARATOR + firstClassify.getTypeCode())
+                            .build();
+
+                    firstTreeVo.setChild(getFirstChildResourceClassifies(firstClassify.getChildrenType())
+                            .stream()
+                            .map(secondClassify -> {
+                                        DataResourceTreeVo secondTreeVo = DataResourceTreeVo.builder()
+                                                .id(Joiner.on(ID_SEPARATOR).join(firstTreeVo.getId(), secondClassify.getCodeValue()))
+                                                .code(secondClassify.getCodeValue())
+                                                .label(secondClassify.getCodeName())
+                                                .treeNode(false)
+                                                .dataType(secondClassify.getTypeCode())
+                                                .pId(firstTreeVo.getId())
+                                                .codeDataTypeStr(UUIDUtils.getUUID() + ID_SEPARATOR + secondClassify.getCodeValue() + ID_SEPARATOR + secondClassify.getTypeCode())
+                                                .build();
+                                        return secondTreeVo;
+                                    }
+                            ).collect(Collectors.toList()));
+                    return firstTreeVo;
+                }).collect(Collectors.toList())
+        );
+
+        dataResourceClassifyVo.setNodes(new ArrayList<DataResourceTreeVo>(){{add(fieldClassifyTree);}} );
+        //设置总数
+        dataResourceClassifyVo.setTotal(getTotalCount(fieldClassifyTree));
+        return dataResourceClassifyVo;
+    }
+
+    /**
+     * 计算treeVo所有最底层子节点数量,不包含叶节点
+     * @param treeVo
+     * @return
+     */
+    private int getTotalCount(DataResourceTreeVo treeVo) {
+        int count = 0;
+        List<DataResourceTreeVo> child = treeVo.getChild();
+        for (DataResourceTreeVo childVo : child) {
+            List<DataResourceTreeVo> cc = childVo.getChild();
+            if(CollectionUtils.isNotEmpty(cc)){
+                count += getTotalCount(childVo);
+            }else {
+                childVo.setTreeNode(false);
+                count += 1;
+            }
+        }
+        return count;
+    }
+
     @Override
     public List<DataLevelVo> getDataLevelList() {
         return getFirstChildResourceClassifies(dataResourceService.getDataLevelList())
@@ -45,40 +327,32 @@ public class DataResourceFacade implements IDataResourceFacade {
     public List<DataClassifyVo> getDataClassifyList() {
         return getFirstChildResourceClassifies(dataResourceService.getDataClassifyList())
                 .stream()
-                .map(
+                .flatMap(
                         firstClassify -> getFirstChildResourceClassifies(firstClassify.getChildrenType()).stream()
-                                .map(
+                                .flatMap(
                                         secondClassify -> getChildrenTypeList(secondClassify.getChildrenType()).stream()
-                                                .map(
-                                                        thirdClassify -> getChildrenTypeList(secondClassify.getChildrenType()).stream()
-                                                                .map(
-                                                                        fourClassify -> getFirstChildResourceClassifies(secondClassify.getChildrenType()).stream()
-                                                                                .map(childResourceClassify ->
-                                                                                        new DataClassifyVo(firstClassify.getCodeValue(),
-                                                                                                firstClassify.getCodeName(),
-                                                                                                secondClassify.getCodeValue(),
-                                                                                                secondClassify.getCodeName(),
-                                                                                                thirdClassify.getTypeCode(),
-                                                                                                thirdClassify.getTypeName(),
-                                                                                                childResourceClassify.getCodeValue(),
-                                                                                                childResourceClassify.getCodeName())
-                                                                                ).collect(Collectors.toList())
-                                                                ).collect(Collectors.toList())
-                                                ).collect(Collectors.toList())
-                                ).collect(Collectors.toList())
-                )
-                .flatMap(firstClassifyList -> firstClassifyList.stream())
-                .flatMap(secondClassifyList -> secondClassifyList.stream())
-                .flatMap(thirdClassifyList -> thirdClassifyList.stream())
-                .flatMap(fourClassifyList -> fourClassifyList.stream())
-                .collect(Collectors.toList());
+                                                .flatMap(
+                                                        thirdClassify -> thirdClassify.getDataList().stream()
+                                                                .map(fourClassify -> new DataClassifyVo(firstClassify.getCodeValue(),
+                                                                        firstClassify.getCodeName(),
+                                                                        secondClassify.getCodeValue(),
+                                                                        secondClassify.getCodeName(),
+                                                                        thirdClassify.getTypeCode(),
+                                                                        thirdClassify.getTypeName(),
+                                                                        fourClassify.getCodeValue(),
+                                                                        fourClassify.getCodeName())
+                                                                ).collect(Collectors.toList()).stream()
+
+                                                )
+                                )
+                ).collect(Collectors.toList());
     }
 
     @Override
     public List<DataFieldClassifyVo> getFieldClassifyList() {
         return getFirstChildResourceClassifies(dataResourceService.getFieldClassifyList())
                 .stream()
-                .map(firstClassify ->
+                .flatMap(firstClassify ->
                         getFirstChildResourceClassifies(firstClassify.getChildrenType())
                                 .stream()
                                 .map(secondClassify ->
@@ -86,15 +360,19 @@ public class DataResourceFacade implements IDataResourceFacade {
                                                 firstClassify.getCodeName(),
                                                 secondClassify.getCodeValue(),
                                                 secondClassify.getCodeName())
-                                ).collect(Collectors.toList())
-                ).flatMap(dataFieldClassifyVos -> dataFieldClassifyVos.stream())
-                .collect(Collectors.toList());
+                                ).collect(Collectors.toList()).stream()
+                ).collect(Collectors.toList());
     }
 
     private List<ChildResourceClassify> getFirstChildResourceClassifies(List<ResourceClassify> fieldClassifyList) {
         return Optional.ofNullable(fieldClassifyList)
                 .map(resourceClassifies -> resourceClassifies.get(0))
-                .map(resourceClassify -> resourceClassify.getDataList())
+                .map(resourceClassify -> {
+                    //设置节点的dataType,dataType为上级的typeCode字段
+                    List<ChildResourceClassify> dataList = Optional.ofNullable(resourceClassify.getDataList()).orElse(Lists.newArrayList());
+                    dataList.stream().forEach(item-> item.setTypeCode(resourceClassify.getTypeCode()));
+                    return dataList;
+                })
                 .orElse(Lists.newArrayList());
     }
 

+ 40 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/TestFacade.java

@@ -0,0 +1,40 @@
+package com.dragoninfo.dcuc.app.facade;
+
+import com.dragoninfo.dcuc.app.business.IResourceBusiness;
+import com.dragoninfo.dcuc.app.entity.ApplyInfo;
+import com.dragoninfo.dcuc.app.service.IApplyInfoService;
+import com.dragoninfo.dcuc.app.service.IServiceResourceService;
+import com.dragonsoft.duceap.auditlog.annotations.AuditLog;
+import com.dragonsoft.duceap.auditlog.enums.OperateTypeEnum;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 代码千万行,注释第一行,编码不规范,同事两行泪
+ *
+ * @author huang(jy)
+ * @version 1.0
+ * @date 2021/4/26 16:39
+ */
+@RestController
+@RequestMapping(value = "/dcuc/app")
+public class TestFacade {
+
+    @Autowired
+    private IServiceResourceFacade applyInfoService;
+
+    @Autowired
+    private IServiceResourceService serviceResourceService;
+
+
+    @Autowired
+    private IResourceBusiness resourceBusiness;
+
+    @GetMapping(value = "/test")
+    public void applyDetail(String key) {
+        resourceBusiness.serviceIncrSync(key);
+    }
+}

+ 16 - 25
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/DataResourceServiceImpl.java

@@ -5,7 +5,6 @@ import com.dragoninfo.dcuc.app.dto.dataresource.ResourceClassify;
 import com.dragoninfo.dcuc.app.dto.dataresource.ResourceType;
 import com.dragoninfo.dcuc.app.service.IDataResourceService;
 import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
 import com.google.common.reflect.TypeToken;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -32,34 +31,28 @@ public class DataResourceServiceImpl implements IDataResourceService {
 
     @Override
     public List<ResourceClassify> getDataLevelList() {
-        Map param = getParamMap(Lists.newArrayList(
-                ResourceType.builder().typeCode("DATA_LEVEL").build()
-        ));
+        Map param = getParamMap(ResourceType.builder().typeCode("DATA_LEVEL").build());
         return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
     @Override
     public List<ResourceClassify> getSecurityLevelList() {
-        Map param = getParamMap(
-                Lists.newArrayList(ResourceType.builder().typeCode("DATA_SECURITY_LEVEL").build())
-        );
+        Map param = getParamMap(ResourceType.builder().typeCode("DATA_SECURITY_LEVEL").build());
         return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
     @Override
     public List<ResourceClassify> getDataClassifyList() {
-        Map param = getParamMap(
-                Lists.newArrayList(
-                        ResourceType.builder().typeCode("RESOURCE_SJZZYJFL").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZZEJFL").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZYBQ1").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZYBQ2").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZYBQ3").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZYBQ4").build(),
-                        ResourceType.builder().typeCode("RESOURCE_SJZYBQ5").build()
-                ), true
+        Map param = getParamMap(true,
+                ResourceType.builder().typeCode("RESOURCE_SJZZYJFL").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZZEJFL").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZYBQ1").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZYBQ2").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZYBQ3").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZYBQ4").build(),
+                ResourceType.builder().typeCode("RESOURCE_SJZYBQ5").build()
         );
         return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
@@ -67,21 +60,19 @@ public class DataResourceServiceImpl implements IDataResourceService {
 
     @Override
     public List<ResourceClassify> getFieldClassifyList() {
-        Map param = getParamMap(
-                Lists.newArrayList(
-                        ResourceType.builder().typeCode("LEVEL_1_COLUMN_CLASSIFY").build(),
-                        ResourceType.builder().typeCode("LEVEL_2_COLUMN_CLASSIFY").build()
-                ), true
+        Map param = getParamMap(true,
+                ResourceType.builder().typeCode("LEVEL_1_COLUMN_CLASSIFY").build(),
+                ResourceType.builder().typeCode("LEVEL_2_COLUMN_CLASSIFY").build()
         );
         return resourceBusiness.getDataResource(param, new TypeToken<List<ResourceClassify>>() {
         }.getType());
     }
 
-    private Map getParamMap(List<ResourceType> typeCodes) {
-        return getParamMap(typeCodes, false);
+    private Map getParamMap(ResourceType... typeCodes) {
+        return getParamMap(false, typeCodes);
     }
 
-    private Map getParamMap(List<ResourceType> typeCodes, boolean isBuildTree) {
+    private Map getParamMap(boolean isBuildTree, ResourceType... typeCodes) {
         Map paramMap = new HashMap();
         List<Map> mapList = new ArrayList<>();
 

+ 62 - 36
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceServiceImpl.java

@@ -37,6 +37,7 @@ import org.springframework.stereotype.Service;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * @author mazq
@@ -107,7 +108,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         if(CollectionUtils.isEmpty(list)){
             return apps;
         }
-        setOrgIdsAndManIds(list);
+        setOrgsInfo(list);
         List<Object> objects = batchInsertResource(list);
         for (Object object : objects) {
             ApplyInfo applyInfo = (ApplyInfo) object;
@@ -131,7 +132,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         if(CollectionUtils.isEmpty(list)){
             return services;
         }
-        setOrgIdsAndManIds(list);
+        setOrgsInfo(list);
         List<Object> objects = batchInsertResource(list);
         for (Object object : objects) {
             ServiceResource service = (ServiceResource) object;
@@ -150,38 +151,42 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
     }
 
     /**
-     * 根据对方提供机构编码,承建单位编码,批量获取orgId和manufacturerId
+     * 根据对方提供机构编码,管理单位编码,批量获取id和name
      * @param list
      * @param <T> ResourceDTO
      * @return
      */
-    private <T extends ResourceDTO> List<T> setOrgIdsAndManIds(List<T> list) {
-        //根据对方提供机构编码,承建单位编码,批量获取orgId和manufacturerId
-        List<String> orgCodes = new ArrayList<>();
-        for (ResourceDTO resourceDTO : list) {
-            String buildUnitCode = resourceDTO.getBuildUnitCode();
-            if(!StringUtils.isEmpty(buildUnitCode)){
-                orgCodes.add(buildUnitCode);
-            }
-        }
-        Map<String, String> orgIds = getOrgIds(orgCodes);
-        for (ResourceDTO dto : list) {
-            String orgId = orgIds.get(dto.getBuildUnitCode());
-            dto.setBuildUnitId(orgId);
+    private <T extends ResourceDTO> List<T> setOrgsInfo(List<T> list) {
+        //根据对方提供机构编码,设置事权单位、管理单位信息
+        List<String> codes = list.stream()
+                .flatMap(item -> Stream.of(item.getManagerUnitCode(), item.getBuildUnitCode()))
+                .filter(s->StringUtils.isNotBlank(s))
+                .distinct()
+                .collect(Collectors.toList());
+        Map<String, OrgInfo> orgInfoMap = getOrgInfos(codes);
+        for (T resource : list) {
+            String buildUnitCode = resource.getBuildUnitCode();
+            String managerUnitCode = resource.getManagerUnitCode();
+            setOrgIdAndName(resource, buildUnitCode, managerUnitCode, orgInfoMap);
         }
         return list;
     }
 
-    private Map<String, String> getOrgIds(List<String> list) {
+    private Map<String, OrgInfo> getOrgInfos(List<String> list) {
         if(CollectionUtils.isEmpty(list)){
             return new HashMap<>();
         }
+        list = list
+                .stream()
+                .filter(s->StringUtils.isNotBlank(s))
+                .distinct()
+                .collect(Collectors.toList());
         logger.info("get OrgIds by OrgCodes>> orgCodeList:{}",JSON.toJSONString(list));
         List<OrgInfo> orgInfos = orgInfoFacade.getOrgsByCodes(list);
-        Map<String, String> collect = orgInfos
+        Map<String, OrgInfo> collect = orgInfos
                 .stream()
-                .collect(Collectors.toMap(OrgInfo::getCode, OrgInfo::getId,(old,last)->last));
-        logger.info("get OrgIds by OrgCodes>> orgIdsList:{}",collect.values());
+                .collect(Collectors.toMap(item->item.getCode(), item->item,(old,last)->last));
+        logger.info("get OrgIds by OrgCodes>> orgIdsList:{}",collect.keySet());
         return collect;
     }
 
@@ -194,17 +199,20 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         List<ResourceSync> menuList = resourceMap.get(ResourceTypeEnum.TJ_APP_MENU.getResourceId());
         //插入应用资源
         if(null!=appList){
-            List<AppResourceDTO> apps = appList.stream().map(this::getAppResourceDTO).collect(Collectors.toList());
+            List<AppResourceDTO> apps = appList.stream().filter(item->StringUtils.isNotBlank(item.getAppCode()))
+                    .map(this::getAppResourceDTO).collect(Collectors.toList());
             batchInsertAppResource(apps);
         }
         //插入服务资源
         if(null!=serviceList){
-            List<ServiceResourceDTO> services = serviceList.stream().map(this::getServiceResourceDTO).collect(Collectors.toList());
+            List<ServiceResourceDTO> services = serviceList.stream().filter(item->StringUtils.isNotBlank(item.getServiceCode()))
+                    .map(this::getServiceResourceDTO).collect(Collectors.toList());
             batchInsertServiceResource(services);
         }
         //插入菜单目录
         if(null!=menuList) {
-            List<MenuResourceDTO> menus = menuList.stream().map(this::getMenuResourceDTOs)
+            List<MenuResourceDTO> menus = menuList.stream().filter(item->StringUtils.isNotBlank(item.getAppCode())).
+                    map(this::getMenuResourceDTOs)
                     .flatMap(Collection::stream)
                     .collect(Collectors.toList());
             batchInsertMenu(menus);
@@ -300,7 +308,8 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         dto.setResourceProvider(resourceEnum.getResouProvider());
         dto.setServiceCode(acceptDTO.getFWZYBSF());
         dto.setServiceName(acceptDTO.getFWZYMC());
-        dto.setBuildUnitCode(acceptDTO.getXXCZDW_GAJGJGDM());
+        dto.setBuildUnitCode(acceptDTO.getFWZYSQDW_JGDM());
+        dto.setManagerUnitCode(acceptDTO.getXXCZDW_GAJGJGDM());
         dto.setServiceUrl(acceptDTO.getFWFWDZ());
         String fwzyztdm = acceptDTO.getFWZYZTDM();
         dto.setServiceStatus(fwzyztdm);
@@ -337,7 +346,8 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
         }
         dto.setAppStatus(xtzybs);
         dto.setAppUrl(acceptDTO.getYyxtfwdz());
-        dto.setBuildUnitCode(acceptDTO.getYyxtgldwdm());
+        dto.setBuildUnitCode(acceptDTO.getYyxtsqdwdm());
+        dto.setManagerUnitCode(acceptDTO.getYyxtgldwdm());
         dto.setContractUnit(acceptDTO.getYyxtcjdwmc());
         dto.setDeleted(acceptDTO.getXtzxbs());
         String sxrq = acceptDTO.getSxrq();
@@ -363,28 +373,44 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
      */
     private <T extends ResourceDTO> Object insertResource(T dto) {
         //根据对方提供机构编码,承建单位编码,获取orgId和manufacturerId
-        setOrgIdAndManId(dto);
+        setOrgInfo(dto);
         Object resource = doInsert(dto);
         return resource;
     }
 
     /**
-     * 根据对方提供机构编码,承建单位编码,获取orgId和manufacturerId
+     * 根据对方提供机构编码,管理单位单位编码,获取id和name
      * @param dto ResourceDTO的子类
      * @param <T>
      * @return
      */
-    private <T extends ResourceDTO> T setOrgIdAndManId(T dto) {
+    private <T extends ResourceDTO> T setOrgInfo(T dto) {
         String buildUnitCode = dto.getBuildUnitCode();
-        logger.info("get OrgInfo by OrgCode>>orgCode:{}",buildUnitCode);
-        if (!StringUtils.isEmpty(buildUnitCode) && StringUtils.isEmpty(dto.getBuildUnitId())) {
-            OrgInfo orgInfo = orgInfoFacade.getOrgInfoByCode(buildUnitCode);
-            if (null != orgInfo) {
-                dto.setBuildUnitId(orgInfo.getId());
-                logger.info("get OrgInfo by OrgCode>>orgCode:{}",orgInfo.getId());
+        String managerUnitCode = dto.getManagerUnitCode();
+        logger.info("get OrgInfo by OrgCode>>orgCode:{}, managerUnitCode:{}",buildUnitCode,managerUnitCode);
+        List<String> list = new ArrayList<>();
+        list.add(buildUnitCode);
+        list.add(managerUnitCode);
+        Map<String, OrgInfo> orgInfoMap = getOrgInfos(list);
+        setOrgIdAndName(dto, buildUnitCode, managerUnitCode, orgInfoMap);
+        return dto;
+    }
+
+    private <T extends ResourceDTO> void setOrgIdAndName(T dto, String buildUnitCode, String managerUnitCode, Map<String, OrgInfo> orgInfoMap) {
+        if (StringUtils.isNotBlank(buildUnitCode)) {
+            OrgInfo buildOrg = orgInfoMap.get(buildUnitCode);
+            if (null != buildOrg) {
+                dto.setBuildUnit(buildOrg.getFullName());
+                dto.setBuildUnitId(buildOrg.getId());
+            }
+        }
+        if (StringUtils.isNotBlank(buildUnitCode)) {
+            OrgInfo manageOrg = orgInfoMap.get(managerUnitCode);
+            if (null != manageOrg) {
+                dto.setManagerUnit(manageOrg.getFullName());
+                dto.setManagerUnitId(manageOrg.getId());
             }
         }
-        return dto;
     }
 
     /**
@@ -392,7 +418,7 @@ public class ResourceServiceImpl extends BaseMybatisService<ServiceResource,Stri
      * @param dto ResourceDTO
      * @return
      */
-    private Object doInsert(ResourceDTO dto) {
+    private <T extends ResourceDTO> Object doInsert(T dto) {
         Object obj;
         String resourceType = dto.getResourceId();
         ResourceOperateStrategy operateStrategy = null;

+ 6 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/impl/ResourceSyncServiceImpl.java

@@ -11,6 +11,7 @@ import com.dragoninfo.dcuc.app.service.IResourceSyncService;
 import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import com.dragonsoft.duceap.commons.util.string.StringUtils;
 import com.dragonsoft.duceap.mybaitsplus.core.services.BaseMybatisService;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -20,6 +21,7 @@ import java.util.List;
  * @author mazq
  * @date 2020/11/26
  */
+@Slf4j
 @Service
 public class ResourceSyncServiceImpl extends BaseMybatisService<ResourceSync,String> implements IResourceSyncService {
 
@@ -38,6 +40,10 @@ public class ResourceSyncServiceImpl extends BaseMybatisService<ResourceSync,Str
                 .eq(ResourceSync::getDeleted,BooleanEnum.FALSE.getValue());
         String appCode = dto.getAppCode();
         String serviceCode = dto.getServiceCode();
+        if(StringUtils.isBlank(appCode) && StringUtils.isBlank(serviceCode)){
+            log.info("insertRemoteResourceSync appCode is null and serviceCode is null");
+            return null;
+        }
         if (!StringUtils.isBlank(appCode)) {
             wrapper.eq(ResourceSync::getAppCode,appCode);
         } else {

+ 14 - 4
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/AppResourceStrategy.java

@@ -8,6 +8,7 @@ import com.dragoninfo.dcuc.app.entity.ApplyInfo;
 import com.dragoninfo.dcuc.app.enumresources.ResourceTypeEnum;
 import com.dragoninfo.dcuc.app.service.IApplyInfoService;
 import com.dragoninfo.dcuc.app.service.IApplyOauthService;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -17,7 +18,7 @@ import org.springframework.stereotype.Component;
  * @create 2020-11-25 14:21
  */
 @Component
-public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
+public class AppResourceStrategy implements ResourceOperateStrategy<AppResourceDTO,ApplyInfo> {
 
     @Autowired
     private IApplyInfoService applyInfoService;
@@ -26,9 +27,8 @@ public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
     private IApplyOauthService applyOauthService;
 
     @Override
-    public ApplyInfo insertRemoteSource(ResourceDTO dto) {
+    public ApplyInfo insertRemoteSource(AppResourceDTO appResourceDTO) {
         ApplyInfo applyInfo;
-        AppResourceDTO appResourceDTO = (AppResourceDTO) dto;
         ApplyInfo exist = applyInfoService.getAppByCode(appResourceDTO.getAppCode());
         if (null == exist) {
             applyInfo = inserApplyInfo(appResourceDTO);
@@ -45,6 +45,10 @@ public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
 
     private ApplyInfo inserApplyInfo(AppResourceDTO dto) {
         ApplyInfo applyInfo = convertToApplyInfo(dto);
+        //删除的应用,不插入数据库
+        if(BooleanEnum.TRUE.getValue().equals(dto.getDeleted())){
+            return applyInfo;
+        }
         String secretKey = getApiKeys(applyInfo.getApplyCode());
         String apiKey = getApiKeys(applyInfo.getApplyCode());
         applyInfo.setSecretKey(secretKey);
@@ -58,6 +62,10 @@ public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
         ApplyInfo infoNew = convertToApplyInfo(dto);
         BeanUtil.copyProperties(infoNew, applyInfo, "id", "apiKey", "secretKey");
         applyInfoService.update(applyInfo);
+        //删除的应用
+        if(BooleanEnum.TRUE.getValue().equals(dto.getDeleted())){
+            applyInfoService.deleteById(applyInfo.getId());
+        }
         return applyInfo;
     }
 
@@ -67,7 +75,10 @@ public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
         ApplyInfo applyInfo = new ApplyInfo();
         applyInfo.setApplyCode(appCode);
         applyInfo.setApplyName(dto.getAppName());
+        applyInfo.setOrgId(dto.getBuildUnitId());
         applyInfo.setOrgName(dto.getBuildUnit());
+        applyInfo.setManagerOrgId(dto.getManagerUnitId());
+        applyInfo.setManagerOrgName(dto.getManagerUnit());
         applyInfo.setJgFzr(dto.getBuildPrincipal());
         applyInfo.setJgFzrPhone(dto.getBuildPrincipalPhone());
         applyInfo.setFzr(dto.getContractPrincipal());
@@ -78,7 +89,6 @@ public class AppResourceStrategy implements ResourceOperateStrategy<ApplyInfo> {
         applyInfo.setApplyCategory(dto.getApplyCategory());
         applyInfo.setPoliceSpecies(dto.getPoliceSpecies());
         applyInfo.setManufacturerId(dto.getContractUnitId());
-        applyInfo.setOrgId(dto.getBuildUnitId());
         applyInfo.setRegistrationTime(dto.getRegistrationTime());
         applyInfo.setApplyStatus(dto.getAppStatus());
         return applyInfo;

+ 12 - 4
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ResourceOperateStrategy.java

@@ -1,14 +1,22 @@
 package com.dragoninfo.dcuc.app.strategy;
 
 
-import com.dragoninfo.dcuc.app.dto.ResourceDTO;
-
 /**
  * @author mazq
  */
-public interface ResourceOperateStrategy<T> {
+public interface ResourceOperateStrategy<T,R> {
 
-    T insertRemoteSource(ResourceDTO content);
+    /**
+     * 具体策略插入资源方法
+     * @param content
+     * @return
+     */
+    R insertRemoteSource(T content);
 
+    /**
+     * 选择具体策略处理资源
+     * @param resourceId
+     * @return
+     */
     boolean canHandle(String resourceId);
 }

+ 12 - 3
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/strategy/ServiceResourceStrategy.java

@@ -4,6 +4,7 @@ package com.dragoninfo.dcuc.app.strategy;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.dragoninfo.dcuc.app.cons.ServiceStatusCons;
 import com.dragoninfo.dcuc.app.dto.ResourceDTO;
 import com.dragoninfo.dcuc.app.dto.ServiceResourceDTO;
 import com.dragoninfo.dcuc.app.entity.ServiceResource;
@@ -14,6 +15,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
+import java.util.TimeZone;
 
 /**
  * @author mazq
@@ -21,14 +23,13 @@ import java.util.Date;
  * @create 2020-11-25 14:21
  */
 @Component
-public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceResource> {
+public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceResourceDTO ,ServiceResource> {
 
     @Autowired
     private ServiceResourceMapper serviceResourceMapper;
 
     @Override
-    public ServiceResource insertRemoteSource(ResourceDTO dto) {
-        ServiceResourceDTO serviceResourceDTO = (ServiceResourceDTO) dto;
+    public ServiceResource insertRemoteSource(ServiceResourceDTO serviceResourceDTO) {
         LambdaQueryWrapper<ServiceResource> wrapper = Wrappers.lambdaQuery();
         wrapper.select()
                .eq(ServiceResource::getServiceCode,serviceResourceDTO.getServiceCode())
@@ -37,6 +38,10 @@ public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceR
         ServiceResource serviceResource;
         if (null == exist) {
             serviceResource = new ServiceResource();
+            //如果是删除状态的服务资源不插入数据库
+            if(ServiceStatusCons.STATUS_DELETED.equals(serviceResourceDTO.getServiceStatus())) {
+                return serviceResource;
+            }
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource);
             serviceResource.setCreateTime(new Date());
             serviceResourceMapper.insert(serviceResource);
@@ -45,6 +50,10 @@ public class ServiceResourceStrategy implements ResourceOperateStrategy<ServiceR
             BeanUtil.copyProperties(serviceResourceDTO, serviceResource, "id","createTime");
             serviceResource.setUpdateTime(new Date());
             serviceResourceMapper.updateById(serviceResource);
+            //如果是删除状态的服务资源,删除
+            if (ServiceStatusCons.STATUS_DELETED.equals(serviceResourceDTO.getServiceStatus())) {
+                serviceResourceMapper.deleteById(serviceResource.getId());
+            }
         }
         return serviceResource;
     }

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

@@ -12,7 +12,7 @@ dcuc:
       kafka: false
       app-topic: 10000028
       service-topic: 10000029
-      bus-sra-id: Y-120000000000-0042
+      bus-sra-id: Y-120000000000-0037 # 测试使用
       bus-sre-idcard: 654001197503078495
       #应用资源请求参数
       page-size: 50

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

@@ -2,10 +2,10 @@ spring:
   profiles:
     active: default
   datasource:
-    username: jzpt_bu
-    password: dragon
+    username: dcuc
+    password: 123
     driver-class-name: com.mysql.jdbc.Driver
-    url: jdbc:mysql://192.168.120.142:3306/dcuc_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+    url: jdbc:mysql://10.254.10.31:3306/dcuc_gd_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     druid:
       filters: sqlaudit
   application:

+ 1 - 0
dcuc-app-service/src/main/resources/config/mysql/V4_1_0002__Add_Index.sql

@@ -0,0 +1 @@
+-- mysql not need add index

+ 4 - 4
dcuc-app-service/src/main/resources/config/mysql/V4_1_0002__Init_Tables.sql → dcuc-app-service/src/main/resources/config/mysql/V4_1_0003__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(3) DEFAULT NULL,
-  `update_time` datetime(3) DEFAULT NULL,
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime 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(3) DEFAULT NULL,
-  `update_time` datetime(3) DEFAULT NULL,
+  `create_time` datetime DEFAULT NULL,
+  `update_time` datetime DEFAULT NULL,
   `sync` varchar(5) DEFAULT NULL,
   `deleted` varchar(5) DEFAULT NULL,
   PRIMARY KEY (`id`),

+ 12 - 0
dcuc-app-service/src/main/resources/config/mysql/V4_1_0004__Update_Tables.sql

@@ -0,0 +1,12 @@
+-- 更新应用表
+ALTER TABLE `t_apply_info` ADD `manager_org_id` VARCHAR(100) DEFAULT NULL;
+ALTER TABLE `t_apply_info` ADD `manager_org_name` VARCHAR(255) DEFAULT NULL;
+-- 更新服务表
+ALTER TABLE `t_service_resource` ADD `manager_unit_id` VARCHAR(100) DEFAULT NULL;
+ALTER TABLE `t_service_resource` ADD `manager_unit` VARCHAR(255) DEFAULT NULL;
+ALTER TABLE `t_service_resource` ADD `manager_unit_code` VARCHAR(100) DEFAULT NULL;
+-- 修改字段长度
+ALTER TABLE `t_service_resource` MODIFY `service_name` VARCHAR(500);
+ALTER TABLE `t_service_resource` MODIFY `service_url` VARCHAR(500);
+ALTER TABLE `t_resource_sync` MODIFY `service_name` VARCHAR(500);
+ALTER TABLE `t_resource_sync` MODIFY `app_name` VARCHAR(500);

+ 5 - 0
dcuc-app-service/src/main/resources/config/mysql/V4_1_0005__alert_column.sql

@@ -0,0 +1,5 @@
+ALTER TABLE `t_service_resource`
+ADD COLUMN `service_type`  varchar(20) NULL COMMENT '服务类型' AFTER `manager_unit_code`,
+ADD COLUMN `service_provide_way`  varchar(20) NULL COMMENT '服务提供方式' AFTER `service_type`,
+ADD COLUMN `must_self`  varchar(1) NULL COMMENT '是否自用服务' AFTER `service_provide_way`,
+ADD COLUMN `app_code`  varchar(100) NULL COMMENT '服务提供应用系统code' AFTER `must_self`;

+ 14 - 0
dcuc-app-service/src/main/resources/config/sql/V4_1_0004__Update_Table.sql

@@ -0,0 +1,14 @@
+-- 更新应用表
+ALTER TABLE "T_APPLY_INFO" ADD "manager_org_id" VARCHAR2(300 BYTE)  NULL;
+ALTER TABLE "T_APPLY_INFO" ADD "manager_org_name" VARCHAR2(765 BYTE)  NULL;
+-- 更新服务表
+ALTER TABLE "T_SERVICE_RESOURCE" ADD "manager_unit_id" VARCHAR2(765 BYTE)  NULL;
+ALTER TABLE "T_SERVICE_RESOURCE" ADD "manager_unit" VARCHAR2(765 BYTE)  NULL;
+ALTER TABLE "T_SERVICE_RESOURCE" ADD "manager_unit_code" VARCHAR2(300 BYTE)  NULL;
+-- 修改字段长度
+ALTER TABLE "T_SERVICE_RESOURCE" MODIFY "SERVICE_NAME" VARCHAR2(800);
+ALTER TABLE "T_SERVICE_RESOURCE" MODIFY "SERVICE_URL" VARCHAR2(800);
+ALTER TABLE "T_RESOURCE_SYNC" MODIFY "SERVICE_NAME" VARCHAR2(800);
+ALTER TABLE "T_RESOURCE_SYNC" MODIFY "APP_NAME" VARCHAR2(800);
+-- 添加主键索引
+ALTER TABLE "T_APPLY_INFO" ADD PRIMARY KEY("ID");

+ 14 - 0
dcuc-app-service/src/main/resources/config/sql/V4_1_0005__ALERT_COLUMN_init.sql

@@ -0,0 +1,14 @@
+ALTER TABLE "T_SERVICE_RESOURCE"
+ADD ( "SERVICE_TYPE" VARCHAR2(20) NULL  ) 
+ADD ( "SERVICE_PROVIDE_WAY" VARCHAR2(20) NULL  ) 
+ADD ( "MUST_SELF" VARCHAR2(1) NULL  ) 
+ADD ( "APP_CODE" VARCHAR2(100) NULL  ) ;
+
+COMMENT ON COLUMN "T_SERVICE_RESOURCE"."SERVICE_TYPE" IS ''服务类型'';
+
+COMMENT ON COLUMN "T_SERVICE_RESOURCE"."SERVICE_PROVIDE_WAY" IS ''服务提供方式'';
+
+COMMENT ON COLUMN "T_SERVICE_RESOURCE"."MUST_SELF" IS ''是否自用服务'';
+
+COMMENT ON COLUMN "T_SERVICE_RESOURCE"."APP_CODE" IS ''服务提供应用系统code'';
+

+ 2 - 2
pom.xml

@@ -5,7 +5,7 @@
     <modelVersion>4.0.0</modelVersion>
     <groupId>com.dragoninfo</groupId>
     <artifactId>dcuc-app</artifactId>
-    <version>2.0.0-tjdsj-SNAPSHOT</version>
+    <version>2.1.2-tjdsj-SNAPSHOT</version>
     <packaging>pom</packaging>
     <modules>
         <module>dcuc-app-api</module>
@@ -129,4 +129,4 @@
         </snapshotRepository>
     </distributionManagement>
 
-</project>
+</project>