浏览代码

清表关联元素表BUG

liuyc 3 年之前
父节点
当前提交
0b814124d6

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.java

@@ -53,7 +53,7 @@ public interface WbsFormElementMapper extends BaseMapper<WbsFormElement> {
 
     void physicalDeleteBatchIds(@Param("ids") List<Long> ids);
 
-    Object showShowTabLike(@Param("wbsTree") WbsTree wbsTree);
+    Integer showShowTabLike(@Param("wbsTree") WbsTree wbsTree);
 
 
 }

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsFormElementMapper.xml

@@ -149,8 +149,8 @@
         </if>
     </select>
 
-    <select id="showShowTabLike" resultType="java.lang.Object">
-        SHOW TABLES LIKE '${wbsTree.initTableName}'
+    <select id="showShowTabLike" resultType="java.lang.Integer">
+        select count(*) from information_schema.TABLES where table_name = #{wbsTree.initTableName}
     </select>
 
 </mapper>

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.java

@@ -86,6 +86,6 @@ public interface WbsTreeMapper extends BaseMapper<WbsTree> {
 
     List<WbsNodeTableVO> searchNodeTables(String nodeId,String excelId);
 
-    int isThereAField(String initTableName, String key);
+    int isThereAField(@Param("initTableName") String initTableName, @Param("keyId") String keyId);
 
 }

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -469,7 +469,7 @@
     </select>
 
     <select id="isThereAField" resultType="java.lang.Integer">
-        select COUNT(*) from information_schema.columns WHERE table_name = '${initTableName}' and column_name = '${key}'
+        select COUNT(*) from information_schema.columns WHERE table_name = #{initTableName} and column_name = #{keyId}
     </select>
 
 

+ 82 - 81
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -399,17 +399,91 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             for (Long tableId : tableIds) {
                 //获取当前wbs节点元素表信息
                 WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, tableId));
+                if (wbsTree != null) {
+                    if (StringUtils.isNotEmpty(wbsTree.getInitTableName())) {
+                        //查询实体表是否存在
+                        Integer obj = baseMapper.showShowTabLike(wbsTree);
+                        if (obj != 1) {
+                            //不存在对应实体表的元素表不新增同步元素字段
+                            continue;
+                            //throw new ServiceException(StringUtil.format("未获取到 {} 对应实体表信息,同步失败",wbsTree.getDeptName()));
+                        }
+
+                        //获取表单下的元素信息
+                        List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
+                                .eq(WbsFormElement::getFId, tableId));
+                        Collections.reverse(wbsFormElements);
+                        WbsFormElement firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
+
+                        //去重,元素表中名称已存在的元素不添加
+                        List<WbsFormElement> newList = formElementDTO.getElementList().stream().filter(a ->
+                                !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
+                        ).collect(Collectors.toList());
+
+                        //初始化eKey字段
+                        int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
+                        int newKeyNumber = keyNumber + 1;
+                        for (WbsFormElement wbsFormElementInfo : newList) {
+                            String key = "key_" + (newKeyNumber);
+                            //新增元素到当前表中
+                            wbsFormElementInfo.setEKey(key);
+                            wbsFormElementInfo.setId(SnowFlakeUtil.getId());
+                            wbsFormElementInfo.setFId(String.valueOf(tableId));
+                            wbsFormElementInfo.setStatus(1);
+                            wbsFormElementInfo.setELength(Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType())));
+
+                            baseMapper.insert(wbsFormElementInfo);
+
+                            String eTypeFiled = getInitTableFiledType(wbsFormElementInfo.getEType());
+                            int eLengthFiled = Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType()));
+
+                            //判断是否存在该Key字段
+                            int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row1 == 0) {
+                                //追加字段到实体表中
+                                wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, eTypeFiled, eLengthFiled);
+                                //判断是否追加成功
+                                int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                                if (row2 != 1) {
+                                    //追加失败,删除元素,跳过
+                                    baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                    continue;
+                                }
+                            }
+                            newKeyNumber++;
+                        }
+
+                    }
+                }
+            }
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveRelation(FormElementDTO2 formElementDTO) {
+        //获取当前表信息
+        WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, formElementDTO.getId()));
+        if (wbsTree != null) {
+            if (StringUtils.isNotEmpty(wbsTree.getInitTableName())) {
                 //查询实体表是否存在
-                Object obj = baseMapper.showShowTabLike(wbsTree);
-                if (obj == null) {
-                    //不存在对应实体表的元素表不新增同步元素字段
-                    continue;
-                    //throw new ServiceException(StringUtil.format("未获取到 {} 对应实体表信息,同步失败",wbsTree.getDeptName()));
+                Integer obj = baseMapper.showShowTabLike(wbsTree);
+                if (obj != 1) {
+                    throw new ServiceException(StringUtil.format("未获取到 {} 对应实体表信息,关联失败", wbsTree.getDeptName()));
+                }
+
+                //获取当前元素表与清表关系信息
+                List<WbsTabRelationExcelTab> list = baseMapper.selectWbsTabRelationExcelTab(String.valueOf(formElementDTO.getId()), String.valueOf(formElementDTO.getExcelTabId()));
+                if (list.size() <= 0) {
+                    //新增当前元素表与清表关系信息
+                    baseMapper.insertWbsTabRelationExcelTab(SnowFlakeUtil.getId(), formElementDTO.getExcelTabId(), formElementDTO.getId());
                 }
 
                 //获取表单下的元素信息
                 List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
-                        .eq(WbsFormElement::getFId, tableId));
+                        .eq(WbsFormElement::getFId, formElementDTO.getId()));
                 Collections.reverse(wbsFormElements);
                 WbsFormElement firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
 
@@ -426,7 +500,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     //新增元素到当前表中
                     wbsFormElementInfo.setEKey(key);
                     wbsFormElementInfo.setId(SnowFlakeUtil.getId());
-                    wbsFormElementInfo.setFId(String.valueOf(tableId));
+                    wbsFormElementInfo.setFId(String.valueOf(formElementDTO.getId()));
                     wbsFormElementInfo.setStatus(1);
                     wbsFormElementInfo.setELength(Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType())));
 
@@ -442,7 +516,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                         wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, eTypeFiled, eLengthFiled);
                         //判断是否追加成功
                         int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                        if (row2 != 1) {
+                        if (row2 == 0) {
                             //追加失败,删除元素,跳过
                             baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
                             continue;
@@ -450,85 +524,12 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     }
                     newKeyNumber++;
                 }
-
-                //修改关联信息
-                wbsTree.setIsLinkTable(2);
-                wbsTreeMapper.updateById(wbsTree);
             }
         }
 
         return true;
     }
 
-    @Override
-    @Transactional(rollbackFor = Exception.class)
-    public boolean saveRelation(FormElementDTO2 formElementDTO) {
-        //获取当前表信息
-        WbsTree wbsTree = wbsTreeMapper.selectOne(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getId, formElementDTO.getId()));
-        //查询实体表是否存在
-        Object obj = baseMapper.showShowTabLike(wbsTree);
-        if (obj == null) {
-            throw new ServiceException(StringUtil.format("未获取到 {} 对应实体表信息,关联失败", wbsTree.getDeptName()));
-        }
-
-        //获取当前元素表与清表关系信息
-        List<WbsTabRelationExcelTab> list = baseMapper.selectWbsTabRelationExcelTab(String.valueOf(formElementDTO.getId()), String.valueOf(formElementDTO.getExcelTabId()));
-        if (list.size() <= 0) {
-            //新增当前元素表与清表关系信息
-            baseMapper.insertWbsTabRelationExcelTab(SnowFlakeUtil.getId(), formElementDTO.getExcelTabId(), formElementDTO.getId());
-        }
-
-        //获取表单下的元素信息
-        List<WbsFormElement> wbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda()
-                .eq(WbsFormElement::getFId, formElementDTO.getId()));
-        Collections.reverse(wbsFormElements);
-        WbsFormElement firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
-
-        //去重,元素表中名称已存在的元素不添加
-        List<WbsFormElement> newList = formElementDTO.getElementList().stream().filter(a ->
-                !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
-        ).collect(Collectors.toList());
-
-        //初始化eKey字段
-        int keyNumber = Integer.parseInt(firstWbsFormElement.getEKey().split("_")[1]);
-        int newKeyNumber = keyNumber + 1;
-        for (WbsFormElement wbsFormElementInfo : newList) {
-            String key = "key_" + (newKeyNumber);
-            //新增元素到当前表中
-            wbsFormElementInfo.setEKey(key);
-            wbsFormElementInfo.setId(SnowFlakeUtil.getId());
-            wbsFormElementInfo.setFId(String.valueOf(formElementDTO.getId()));
-            wbsFormElementInfo.setStatus(1);
-            wbsFormElementInfo.setELength(Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType())));
-
-            baseMapper.insert(wbsFormElementInfo);
-
-            String eTypeFiled = getInitTableFiledType(wbsFormElementInfo.getEType());
-            int eLengthFiled = Integer.parseInt(setDefaultElementLength(wbsFormElementInfo.getEType()));
-
-            //判断是否存在该Key字段
-            int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-            if (row1 == 0) {
-                //追加字段到实体表中
-                wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, eTypeFiled, eLengthFiled);
-                //判断是否追加成功
-                int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                if (row2 == 0) {
-                    //追加失败,删除元素,跳过
-                    baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
-                    continue;
-                }
-            }
-            newKeyNumber++;
-        }
-
-        //修改关联信息
-        wbsTree.setIsLinkTable(2);
-        wbsTreeMapper.updateById(wbsTree);
-
-        return true;
-    }
-
     @Transactional(rollbackFor = Exception.class)
     public boolean saveFormElement(FormElementDTO2 formElementDTO) {
         //获取新增节点ids