Prechádzať zdrojové kódy

试验和计量、日志,元素长度

lvy 1 týždeň pred
rodič
commit
7ec7ad4250

+ 10 - 14
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -736,6 +736,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
             //参数
             LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
+            updateFieldLength(tabName, dataMap2);
             for (String key : dataMap2.keySet()) {
                 keySql.append(", ").append(key);
                 valSql.append(", '").append(dataMap2.get(key)).append("'");
@@ -1105,7 +1106,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         for (TableInfo tableInfo : tableInfoList) {
                             //获取字段信息
                             LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
-
+                            updateFieldLength(table.getTabEnName(),dataMap2);
                             //拼接SQL
                             StringBuilder sql = new StringBuilder("INSERT INTO " + table.getTabEnName()),
                                     keySql = new StringBuilder("id, group_id"),
@@ -1233,9 +1234,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     String delSql = "delete from " + tabName + " where p_key_id=" + tableInfo.getPkeyId();
                     String sqlInfo = "";
                     LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
-                    if (!updateFieldLength(tabName, dataMap2)) {
-                        throw new ServiceException("字段长度超出限制, 系统无法进行自增,请前往后台管理系统手动设置");
-                    }
+                    updateFieldLength(tabName, dataMap2);
                     /*检查发现有p_key_id缺失的情况,导致表单数据丢失,所以强制覆盖*/
                     dataMap2.put("p_key_id", tableInfo.getPkeyId());
                     //统计保存的字段
@@ -1346,17 +1345,14 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
        // return R.success(fileName1);
     }
 
-    public boolean updateFieldLength(String tableName, Map<String, String> fieldNameAndLengthMap) {
+    public void updateFieldLength(String tableName, Map<String, String> fieldNameAndLengthMap) {
         if (fieldNameAndLengthMap == null || fieldNameAndLengthMap.isEmpty()) {
-            return true;
+            return;
         }
-        fieldNameAndLengthMap.remove("id");
-        fieldNameAndLengthMap.remove("p_key_id");
-        fieldNameAndLengthMap.remove("group_id");
-        if (fieldNameAndLengthMap.isEmpty()) {
-            return true;
+        String fields = fieldNameAndLengthMap.keySet().stream().filter(key -> !key.equals("id") && !key.equals("p_key_id") && !key.equals("group_id")).map(key -> "'" + key + "'").collect(Collectors.joining(","));
+        if (fields.isEmpty()) {
+            return;
         }
-        String fields = fieldNameAndLengthMap.keySet().stream().map(key -> "'" + key + "'").collect(Collectors.joining(","));
         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 = '" + tableName +
                 "' and COLUMN_NAME in (" + fields + ")");
         Map<String, Integer> map = fieldMap.stream().collect(toMap(k -> k.get("fieldName") + "", v -> {
@@ -1397,10 +1393,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             } catch (Exception e) {
                 transactionManager1.rollback(transactionStatus);
                 log.error("更新字段长度失败, error: " + e.getMessage());
-                return false;
+                throw new ServiceException("字段长度超出限制, 系统无法进行扩容,请尝试缩小字段长度或者联系系统管理员处理");
             }
         }
-        return true;
     }
 
     public String reason(String log) {
@@ -3950,6 +3945,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 //新增SQL
                 String sqlInfo = "";
                 LinkedHashMap<String, String> dataMap2 = tableInfo.getDataMap();
+                updateFieldLength(wbsTreePrivate.getInitTableName() ,dataMap2);
                 if(!dataMap2.containsKey("p_key_id")){
                     if(tableInfo.getPkeyId()!=null&&!tableInfo.getPkeyId().equals("")){
                         dataMap2.put("p_key_id",tableInfo.getPkeyId());

+ 12 - 30
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -322,25 +322,10 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         //修改之前的值
         String fId1 = wbsFormElementList.get(0).getFId();
         List<WbsFormElement> beforeUpdateWbsFormElements = baseMapper.selectList(Wrappers.<WbsFormElement>query().lambda().eq(WbsFormElement::getFId, fId1));
+        Map<Long, Integer> eLengthMap = beforeUpdateWbsFormElements.stream().collect(Collectors.toMap(WbsFormElement::getId, WbsFormElement::getELength, (v1, v2) -> v1 > v2 ? v1 : v2));
         //修改元素基础信息
         wbsFormElementList.forEach(obj -> obj.setStatus(1));
         boolean b = this.updateBatchById(wbsFormElementList);
-
-
-        //当前设置的字段总长度
-        Integer nowTotalLength = 0;
-        for (WbsFormElement wbsFormElement : wbsFormElementList) {
-            // + 10 预留字段长度,用来保存在excel中的位置信息,比如:xx_^_12_12, 不适合一个字段存储多个位置
-            nowTotalLength += wbsFormElement.getELength() + 10;
-        }
-        //当前表总字段长度
-        int sumLength = baseMapper.selectSumColumnLength(jdbcTemplate.queryForObject("SELECT DATABASE()", String.class), initTableName);
-        if (nowTotalLength > MYSQL_MAX_COLUMN_LENGTH) {
-            //修改元素字段长度
-            throw new ServiceException("无法添加字段,可用长度:" + (MYSQL_MAX_COLUMN_LENGTH - sumLength));
-        }
-
-
         //修改实体表信息
         if (b) {
             String fId = "";
@@ -379,21 +364,18 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
 //                } else if (eLength >= 0 && eLength <= 65) {
 //                    eLength = DEFAULT_ELEMENT_LENGTH_NUMBER;
 //                }
-
-                //判断是否存在该Key字段
-                int row1 = wbsTreeMapper.isThereAField(initTableName, eKey);
-                if (row1 > 0) {
-                    try {
-                        // + 10 预留字段长度,用来保存在excel中的位置信息,比如:xx_^_12_12, 不适合一个字段存储多个位置
-                        baseMapper.updateFiledType(initTableName, eKey, "varchar", eLength + 10);
-                    } catch (Exception e) {
-                        // 数据库字段长度大于修改长度,则忽略
-                        if (e.getMessage().contains("Data truncated for column '" + eKey + "' at row 1")) {
-                            continue;
+                Integer length = eLengthMap.get(wbsFormElement.getId());
+                if (length == null || !length.equals(eLength)) {
+                    //判断是否存在该Key字段
+                    int row1 = wbsTreeMapper.isThereAField(initTableName, eKey);
+                    if (row1 > 0) {
+                        try {
+                            baseMapper.updateFiledType(initTableName, eKey, "varchar", eLength);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                            this.updateBatchById(beforeUpdateWbsFormElements);
+                            return R.fail(eName + "长度范围超出总最大限制,请尝试缩小当前字段与其他字段长度或者联系系统管理员处理");
                         }
-                        e.printStackTrace();
-                        this.updateBatchById(beforeUpdateWbsFormElements);
-                        throw new RuntimeException("字段长度范围超出总最大限制,请尝试缩小当前字段长度或其他字段长度");
                     }
                 }
             }