ソースを参照

解决后管元素库修改长度失败后回退失败和修改提示语

lvy 3 週間 前
コミット
94012a7bb8

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

@@ -1392,7 +1392,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             } catch (Exception e) {
                 transactionManager1.rollback(transactionStatus);
                 log.error("更新字段长度失败, error: " + e.getMessage());
-                throw new ServiceException("字段长度超出限制, 系统无法进行自增,请前往后台管理系统手动设置");
+                throw new ServiceException("字段长度超出限制, 系统无法进行扩容,请尝试缩小字段长度或者联系系统管理员处理");
             }
         }
     }

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

@@ -314,25 +314,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 = "";
@@ -371,21 +356,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("字段长度范围超出总最大限制,请尝试缩小当前字段长度或其他字段长度");
                     }
                 }
             }