Quellcode durchsuchen

feat: 新增同步字段关系

huangzqa vor 2 Jahren
Ursprung
Commit
34dd238e23

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

@@ -62,6 +62,14 @@ public interface IDataResourceFacade {
     @GetMapping(value = "dataSecSync")
     ResponseStatus dataSecSync();
 
+    /**
+     * 字段关系同步
+     *
+     * @return 状态
+     */
+    @GetMapping(value = "columnRelationSync")
+    ResponseStatus columnRelationSync();
+
     /**
      * 数据资源分类同步
      *

+ 35 - 0
dcuc-app-model/src/main/java/com/dragoninfo/dcuc/app/vo/AppColumnRelationVO.java

@@ -0,0 +1,35 @@
+package com.dragoninfo.dcuc.app.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * <p>
+ *
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2022/10/3
+ */
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+public class AppColumnRelationVO {
+
+    /**
+     * 编号
+     */
+    private String id;
+    /**
+     * 表码名称
+     */
+    private String codeName;
+    /**
+     * 表码值
+     */
+    private String codeValue;
+
+}

+ 43 - 6
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/facade/DataResourceFacade.java

@@ -13,10 +13,7 @@ import com.dragoninfo.dcuc.app.entity.sub.DataSec;
 import com.dragoninfo.dcuc.app.entity.sub.FieldCla;
 import com.dragoninfo.dcuc.app.enumresources.sub.DataClaTypeEnum;
 import com.dragoninfo.dcuc.app.enumresources.sub.FieldClaTypeEnum;
-import com.dragoninfo.dcuc.app.service.sub.IDataClaService;
-import com.dragoninfo.dcuc.app.service.sub.IDataLevelService;
-import com.dragoninfo.dcuc.app.service.sub.IDataSecService;
-import com.dragoninfo.dcuc.app.service.sub.IFieldClaService;
+import com.dragoninfo.dcuc.app.service.sub.*;
 import com.dragoninfo.dcuc.app.vo.*;
 import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
 import com.dragonsoft.duceap.commons.util.UUIDUtils;
@@ -61,7 +58,10 @@ public class DataResourceFacade implements IDataResourceFacade {
     private IFieldClaService fieldClaService;
 
     @Autowired
-    private IDataCatalogBusiness dataIndexBusiness;
+    private IDataCatalogBusiness dataCatalogBusiness;
+
+    @Autowired
+    private IAppColumnRelationService appColumnRelationService;
 
 
     @Override
@@ -351,6 +351,30 @@ public class DataResourceFacade implements IDataResourceFacade {
         return ResponseStatus.success();
     }
 
+    @Override
+    public ResponseStatus columnRelationSync() {
+        //因为子线程中需要调用总线需要用到请求头中的信息
+        //需要将requestAttributes设置到子线程中的RequestContextHolder
+        //SpringWeb暂时未提供RequestContextHolder父子线程共享ThreadLocal中的数据的配置,需要手动设置
+        RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
+        //开启父子线程
+        //方法内部有从ThreadLocal获取信息
+        //CompletableFuture默认使用ForkJoin线程池,不要使用1.8的新线程开启方法
+        //如果使用线程池需要用包装类将线程包装后设置RequestContextHolder
+        Runnable r = () -> {
+            RequestContextHolder.setRequestAttributes(requestAttributes);
+            try {
+                List<AppColumnRelationVO> list = getColumnRelationCatalogFromRemote();
+                appColumnRelationService.sync(list);
+            } finally {
+                RequestContextHolder.resetRequestAttributes();
+            }
+        };
+        Thread t = new Thread(r);
+        t.start();
+        return ResponseStatus.success();
+    }
+
     @Override
     public ResponseStatus dataSecSync() {
         //因为子线程中需要调用总线需要用到请求头中的信息
@@ -427,7 +451,7 @@ public class DataResourceFacade implements IDataResourceFacade {
 
     @Override
     public ResponseStatus syncTableAndColumn() {
-        dataIndexBusiness.syncTableAndColumn();
+        dataCatalogBusiness.syncTableAndColumn();
         return ResponseStatus.success();
     }
 
@@ -671,6 +695,19 @@ public class DataResourceFacade implements IDataResourceFacade {
                 .collect(Collectors.toList());
     }
 
+    /**
+     * 从数据资源目录获取数据-字段关系
+     *
+     * @return 列表
+     */
+    private List<AppColumnRelationVO> getColumnRelationCatalogFromRemote() {
+        return getFirstChildResourceClassifies(dataResourceService.getColumnRelationCatalog())
+                .stream()
+                .map(childResourceClassify -> new AppColumnRelationVO(null, childResourceClassify.getCodeValue(), childResourceClassify.getCodeName()))
+                .collect(Collectors.toList());
+    }
+
+
     /**
      * 从数据资源目录获取数据-安全级别数据
      *

+ 11 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/IAppColumnRelationService.java

@@ -1,5 +1,10 @@
 package com.dragoninfo.dcuc.app.service.sub;
 
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragoninfo.dcuc.app.vo.DataLevelVo;
+
+import java.util.List;
+
 /**
  * <p>
  *
@@ -9,4 +14,10 @@ package com.dragoninfo.dcuc.app.service.sub;
  * @date 2022/10/2
  */
 public interface IAppColumnRelationService {
+    /**
+     * 同步数据
+     *
+     * @param list 列表
+     */
+    void sync(List<AppColumnRelationVO> list);
 }

+ 66 - 0
dcuc-app-service/src/main/java/com/dragoninfo/dcuc/app/service/sub/impl/AppColumnRelationServiceImpl.java

@@ -1,9 +1,19 @@
 package com.dragoninfo.dcuc.app.service.sub.impl;
 
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.dragoninfo.dcuc.app.entity.sub.AppColumnRelation;
 import com.dragoninfo.dcuc.app.mapper.sub.AppColumnRelationMapper;
 import com.dragoninfo.dcuc.app.service.sub.IAppColumnRelationService;
+import com.dragoninfo.dcuc.app.vo.AppColumnRelationVO;
+import com.dragoninfo.dcuc.app.vo.DataLevelVo;
+import com.dragonsoft.duceap.base.enums.BooleanEnum;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * <p>
@@ -19,4 +29,60 @@ public class AppColumnRelationServiceImpl implements IAppColumnRelationService {
     @Autowired
     private AppColumnRelationMapper appColumnRelationMapper;
 
+    @Transactional(rollbackFor = Throwable.class)
+    @Override
+    public void sync(List<AppColumnRelationVO> list) {
+        for (AppColumnRelationVO appColumnRelationVO : list) {
+
+            String codeValue = appColumnRelationVO.getCodeValue();
+            String codeName = appColumnRelationVO.getCodeName();
+            AppColumnRelation appColumnRelation = getByCode(codeValue);
+            if (appColumnRelation == null) {
+                appColumnRelation = new AppColumnRelation();
+                appColumnRelation.setDeleted(BooleanEnum.FALSE.value);
+                appColumnRelation.setCodeValue(codeValue);
+                appColumnRelation.setCodeName(codeName);
+
+                String columnOneClassValue = getOneCodeVale(codeValue);
+
+                String columnTwoClassValue = getTwoCodeVale(codeValue);
+                appColumnRelation.setColumnOneClassValue(columnOneClassValue);
+                appColumnRelation.setColumnTwoClassValue(columnTwoClassValue);
+                appColumnRelationMapper.insert(appColumnRelation);
+            } else {
+                appColumnRelation.setCodeName(appColumnRelation.getCodeName());
+                appColumnRelationMapper.updateById(appColumnRelation);
+            }
+        }
+
+    }
+
+    public AppColumnRelation getByCode(String code) {
+        LambdaQueryWrapper<AppColumnRelation> lambdaQuery = Wrappers.lambdaQuery();
+        lambdaQuery.eq(AppColumnRelation::getCodeValue, code);
+        return appColumnRelationMapper.selectOne(lambdaQuery);
+    }
+
+    public String getOneCodeVale(String relationCodeValue) {
+        if (StrUtil.isBlank(relationCodeValue)) {
+            throw new IllegalArgumentException();
+        }
+        String[] split = relationCodeValue.split("->");
+        String onFullInfo = split[0];
+
+        String[] onFullInfoStrings = onFullInfo.split("_");
+        return onFullInfoStrings[1];
+    }
+
+    public String getTwoCodeVale(String relationCodeValue) {
+        if (StrUtil.isBlank(relationCodeValue)) {
+            throw new IllegalArgumentException();
+        }
+        String[] split = relationCodeValue.split("->");
+        String onFullInfo = split[1];
+
+        String[] onFullInfoStrings = onFullInfo.split("_");
+        return onFullInfoStrings[1];
+    }
+
 }