فهرست منبع

质检资料保存时动态扩容数据库实体表字段长度

lvy 3 هفته پیش
والد
کامیت
649405953b

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

@@ -1367,10 +1367,11 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         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 -> {
-            if (v.get("fieldLength") == null) {
+            try {
+                return Integer.parseInt(v.get("fieldLength") + "");
+            } catch (Exception e) {
                 return 0;
             }
-            return Integer.parseInt(v.get("fieldLength") + "");
         }, Math::max));
 
         List<WbsFormElement> elementList = jdbcTemplate.query("SELECT id,e_key,e_length from m_wbs_form_element WHERE f_id = (SELECT id from m_table_info WHERE tab_en_name = '" + tableName
@@ -1379,21 +1380,25 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         sql.append("alter table ").append(tableName);
         elementList.forEach(element -> {
             String data = fieldNameAndLengthMap.get(element.getEKey());
-            if (data != null && element.getELength() != null && data.length() > element.getELength()) {
+            Integer fieldLength = map.get(element.getEKey());
+            if (data != null && element.getELength() != null && data.length() > fieldLength) {
                 int length = data.length();
                 // 取整
                 length = (length / 10 + 1) * 10;
-                Integer fieldLength = map.get(element.getEKey());
-                if (fieldLength != null && fieldLength < element.getELength()) {
+                if (length < element.getELength()) {
+                    length = element.getELength();
+                    element.setELength(null);
+                } else {
                     element.setELength(length);
-                    sql.append(" modify column ").append(element.getEKey()).append(" ").append("varchar").append("(").append(length).append("),");
                 }
+                sql.append(" modify column ").append(element.getEKey()).append(" ").append("varchar").append("(").append(length).append("),");
             }
         });
         if (sql.indexOf("modify") > 0) {
+            sql.deleteCharAt(sql.length() - 1);
             TransactionStatus transactionStatus = this.beginTransaction(transactionManager1);
             try {
-                jdbcTemplate.batchUpdate("update m_wbs_form_element set e_length = ? where id = ?", elementList.stream().map(element -> new Object[]{element.getELength(), element.getId()}).collect(Collectors.toList()));
+                jdbcTemplate.batchUpdate("update m_wbs_form_element set e_length = ? where id = ?", elementList.stream().filter(element -> element.getELength() != null).map(element -> new Object[]{element.getELength(), element.getId()}).collect(Collectors.toList()));
                 jdbcTemplate.execute(sql.toString());
                 transactionManager1.commit(transactionStatus);
             } catch (Exception e) {