Эх сурвалжийг харах

优化元素识别插入字段和实体表初始化修改

lvy 1 сар өмнө
parent
commit
5e80188f2b

+ 83 - 42
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -95,9 +95,21 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
     @Override
     public Boolean initTable(List<WbsFormElement> elementList, String tableName) {
-        String sql = createSQL(elementList);
+        List<WbsFormElement> collect = elementList.stream().filter(element -> {
+            String eKey = element.getEKey();
+            String[] split = eKey.split("_");
+            if (split.length > 1 && StringUtil.isNumeric(split[1])) {
+                int i = Integer.parseInt(split[1]);
+                return i <= 80;
+            }
+            return true;
+        }).collect(Collectors.toList());
+        String sql = createSQL(collect);
         try {
             boolean b = wbsFormElementMapper.createTable(sql, tableName) >= 0;
+            if (b) {
+                alterMTableOpsFiled(tableName);
+            }
             return b;
         } catch (Exception e) {
             return true;
@@ -147,6 +159,7 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public WbsFormElement saveAndSyn(WbsFormElement wbsFormElement, String tableName) {
 
         String isExitSql = "select * from information_schema.TABLES where TABLE_NAME='" + tableName + "'";
@@ -571,18 +584,29 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
                         //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, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
-                            //判断是否追加成功
-                            int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                            if (row2 != 1) {
-                                //追加失败,删除元素,跳过
-                                baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
-                                continue;
+                        if (newKeyNumber > 80) {
+                            //判断是否存在该Key字段
+                            int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), "key_201");
+                            if (row1 == 0) {
+                                try {
+                                    jdbcTemplate.execute("alter table " + wbsTree.getInitTableName() + " add key_201 text");
+                                } catch (Exception e) {
+                                    e.printStackTrace();
+                                }
+                            }
+                        } else {
+                            //判断是否存在该Key字段
+                            int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row1 == 0) {
+                                //追加字段到实体表中
+                                wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                                //判断是否追加成功
+                                int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                                if (row2 != 1) {
+                                    //追加失败,删除元素,跳过
+                                    baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                    continue;
+                                }
                             }
                         }
                         newKeyNumber++;
@@ -647,18 +671,29 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
                     //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, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
-                        //判断是否追加成功
-                        int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                        if (row2 != 1) {
-                            //追加失败,删除元素,跳过
-                            baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
-                            continue;
+                    if (newKeyNumber > 80) {
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), "key_201");
+                        if (row1 == 0) {
+                            try {
+                                jdbcTemplate.execute("alter table " + wbsTree.getInitTableName() + " add key_201 text");
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    } else {
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                        if (row1 == 0) {
+                            //追加字段到实体表中
+                            wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            //判断是否追加成功
+                            int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row2 != 1) {
+                                //追加失败,删除元素,跳过
+                                baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                continue;
+                            }
                         }
                     }
                     newKeyNumber++;
@@ -726,18 +761,29 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 
                     //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, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
-                        //判断是否追加成功
-                        int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
-                        if (row2 == 0) {
-                            //追加失败,删除元素,跳过
-                            baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
-                            continue;
+                    if (newKeyNumber > 80) {
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), "key_201");
+                        if (row1 == 0) {
+                            try {
+                                jdbcTemplate.execute("alter table " + wbsTree.getInitTableName() + " add key_201 text");
+                            } catch (Exception e) {
+                                e.printStackTrace();
+                            }
+                        }
+                    } else {
+                        //判断是否存在该Key字段
+                        int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                        if (row1 == 0) {
+                            //追加字段到实体表中
+                            wbsTreeMapper.alterTableFiled(wbsTree.getInitTableName(), key, "varchar", DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            //判断是否追加成功
+                            int row2 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), key);
+                            if (row2 == 0) {
+                                //追加失败,删除元素,跳过
+                                baseMapper.deleteElementByfId2(wbsFormElementInfo.getId());
+                                continue;
+                            }
                         }
                     }
                     newKeyNumber++;
@@ -982,11 +1028,6 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     log.error("新增字段异常:", e);
                 }
             }
-            //判断是否追加成功
-            int row2 = wbsTreeMapper.isThereAField(initTableName, "key_201");
-            if (row2 != 1) {
-                throw new ServiceException("新增字段异常, 请联系后台管理员处理");
-            }
         }
     }
 }

+ 49 - 19
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -58,6 +58,7 @@ import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.ITableFileService;
 import org.springblade.manager.service.IWbsParamService;
 import org.springblade.manager.service.IWbsTreeContractService;
+import org.springblade.manager.util.DataStructureFormatUtils;
 import org.springblade.manager.utils.CompositeKey;
 import org.springblade.manager.vo.*;
 import org.springblade.system.cache.ParamCache;
@@ -870,32 +871,32 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                     break;
                 }
             }
-
-            if (DataMap != null && DataMap.size() >= 1) {
-                String dataCol = "";
+            String dataCol = "";
+            for (int j = 0; j < dataSize; j++) {
+                if (j == dataSize - 1) {
+                    dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j];
+                } else {
+                    dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j] + "☆";
+                }
+            }
+            boolean flag = isSaveKey201(info, wbsInfo, dataCol);
+            if (!DataMap.isEmpty()) {
                 String updateSql = "update " + wbsInfo.getInitTableName() + " set " + info.getKey() + "=";
-                for (int j = 0; j < dataSize; j++) {
-                    if (j == dataSize - 1) {
-                        dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j];
-                    } else {
-                        dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j] + "☆";
-                    }
+                if (flag) {
+                    updateSql = "update " + wbsInfo.getInitTableName() + " set key_201 = concat(key_201,'$$'," + "'" + info.getKey() + ":" + dataCol + "') where p_key_id= " + wbsTreeContract.getPKeyId() + ";";
+                } else {
+                    updateSql = updateSql + "'" + dataCol + "' where p_key_id=" + wbsTreeContract.getPKeyId() + " ;";
                 }
-                updateSql = updateSql + "'" + dataCol + "' where p_key_id=" + wbsTreeContract.getPKeyId() + " ;";
                 moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
                 addSql.append(updateSql);
             } else {
                 long dataId = SnowFlakeUtil.getId();
                 String insertSql = "insert into " + wbsInfo.getInitTableName() + "(id,p_key_id," + info.getKey() + ") VALUES (" + dataId + "," + wbsTreeContract.getPKeyId() + ",'";
-                String dataCol = "";
-                for (int j = 0; j < dataSize; j++) {
-                    if (j == dataSize - 1) {
-                        dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j];
-                    } else {
-                        dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j] + "☆";
-                    }
+                if (flag) {
+                    insertSql = "insert into " + wbsInfo.getInitTableName() + "(id,p_key_id,key_201) values (" + dataId + "," + wbsTreeContract.getPKeyId() + ",'" + info.getKey() + ":" + dataCol + "');";
+                } else {
+                    insertSql = insertSql + dataCol + "');";
                 }
-                insertSql = insertSql + dataCol + "');";
                 moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
                 addSql.append(insertSql);
             }
@@ -960,7 +961,11 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                         dataCol = dataCol + moreData.get(j) + "_^_" + excLenght[j] + "☆";
                     }
                 }
-                insertSql = insertSql + dataCol + "');";
+                if (isSaveKey201(info, wbsInfo, dataCol)) {
+                    insertSql = "insert into " + wbsInfo.getInitTableName() + "(id,p_key_id,key_201) values (" + dataId + "," + wbsTreeContract.getPKeyId() + ",'" + info.getKey() + ":" + dataCol + "');";
+                } else {
+                    insertSql = insertSql + dataCol + "');";
+                }
                 moreData = moreData.stream().skip(excLenght.length).map(com.mixsmart.utils.StringUtils::handleNull).collect(Collectors.toList());
                 addSql.append(insertSql);
             }
@@ -979,6 +984,31 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return false;
     }
 
+    private boolean isSaveKey201(RangeInfo info, WbsTreeContract wbsInfo, String dataCol) {
+        boolean flag = false;
+        try {
+            String[] split = info.getKey().split("_");
+            flag = split.length > 1 && StringUtil.isNumeric(split[1]) && Integer.parseInt(split[1]) > 80;
+            if (!flag) {
+                List<Map<String, Object>> fieldMap = jdbcTemplate.queryForList("select distinct COLUMN_NAME as fieldName, CHARACTER_MAXIMUM_LENGTH as fieldLength from information_schema.COLUMNS where  TABLE_NAME = '" + wbsInfo.getInitTableName() +
+                        "' and COLUMN_NAME in ('" + info.getKey() + "', 'key_201" + "')");
+                if (!fieldMap.isEmpty()) {
+                    Map<String, Object> map1 = fieldMap.stream().filter(map -> map.get("fieldName") != null).collect(Collectors.toMap(map -> map.get("fieldName") + "", map -> map.get("fieldLength")));
+                    Object length = map1.get(info.getKey());
+                    if (length != null && Integer.parseInt(length.toString()) > dataCol.length()) {
+                        flag = true;
+                        if (map1.get("key_201") == null) {
+                            jdbcTemplate.execute("alter table " + wbsInfo.getInitTableName() + " add column key_201 text ");
+                        }
+                    }
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return flag;
+    }
+
     @Override
     public void syncCurrentFormToAllContract(WbsTreePrivate wbsTreePrivate) {
         baseMapper.syncCurrentFormToAllContract(wbsTreePrivate);

+ 13 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -308,8 +308,19 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                             wbsFormElement.setRemark(map.get("备注"));
 
                             wbsFormElementService.save(wbsFormElement);
-
-                            baseMapper.alterTableFiled(initTableName, wbsFormElement.getEKey(), "varchar", WbsFormElementServiceImpl.DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            if (keyNumb[0] > 80) {
+                                //判断是否存在该Key字段
+                                int row1 = wbsTreeMapper.isThereAField(wbsTree.getInitTableName(), "key_201");
+                                if (row1 == 0) {
+                                    try {
+                                        jdbcTemplate.execute("alter table " + wbsTree.getInitTableName() + " add key_201 text");
+                                    } catch (Exception e) {
+                                        e.printStackTrace();
+                                    }
+                                }
+                            } else {
+                                baseMapper.alterTableFiled(initTableName, wbsFormElement.getEKey(), "varchar", WbsFormElementServiceImpl.DEFAULT_ELEMENT_LENGTH_VARCHAR);
+                            }
                         }
 
                     });