Jelajahi Sumber

CL08水准测量记录表 单份复制bug

liuyc 1 tahun lalu
induk
melakukan
9a20c99898

+ 31 - 19
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1485,6 +1485,7 @@ public class InformationWriteQueryController extends BladeController {
 
                         //获取实体表对应字段
                         List<QueryProcessDataVO> nodeTabCols = informationQueryService.getNodeChildTabColsAllByTabName(tableName);
+
                         //转化为map
                         Map<String, String> nodeTabColsMap = nodeTabCols.stream().collect(Collectors.toMap(QueryProcessDataVO::getQueryType, QueryProcessDataVO::getAncestors, (key1, key2) -> key2));
 
@@ -1499,8 +1500,9 @@ public class InformationWriteQueryController extends BladeController {
                         String keys = StringUtils.join(filteredList, ",");
 
                         /*重置*/
-                        Map<String, String> eMap = reviseValue(nodeOld, null, ekvMap);
-                        //构造入参
+                        //Map<String, String> eMap = reviseValue(nodeOld, null, ekvMap);
+
+                        //构造入参(获取列名、列值)
                         String dataSql = "SELECT " + keys + " FROM " + tableName + " WHERE p_key_id= " + nodeOld.getPKeyId() + " LIMIT 1;";
                         List<LinkedHashMap<String, Object>> resultList = jdbcTemplate.query(dataSql, new RowMapper<LinkedHashMap<String, Object>>() {
                             @Override
@@ -1511,51 +1513,61 @@ public class InformationWriteQueryController extends BladeController {
                                 for (int i = 1; i <= columnCount; i++) {
                                     String columnName = metaData.getColumnName(i);
                                     Object columnValue = rs.getObject(i);
-                                    resultMap.put(columnName, columnValue);
+                                    //判断列值不为null或者不为空串
+                                    if (columnValue != null && !columnValue.toString().isEmpty()) {
+                                        resultMap.put(columnName, columnValue);
+                                    }
                                 }
                                 return resultMap;
                             }
                         });
+
                         StringBuilder newString = new StringBuilder();
+                        List<String> keySet = new LinkedList<>();
                         if (!resultList.isEmpty()) {
                             LinkedHashMap<String, Object> resultMap = resultList.get(0);
                             for (Map.Entry<String, Object> entry : resultMap.entrySet()) {
-                                Object value = reviseValue(eMap, entry.getKey(), entry.getValue());
+                                keySet.add(entry.getKey());
+                                /*Object value = reviseValue(eMap, entry.getKey(), entry.getValue());*/
+                                Object value = entry.getValue();
                                 if (value != null) {
                                     if (value.toString().contains("\n")) {
                                         //如果值中包含换行符,则将换行符替换
                                         value = value.toString().replace("\n", "\\n");
                                     }
                                     newString.append("'").append(value).append("',");
-                                } else {
-                                    newString.append("null,");
                                 }
                             }
                         }
 
-                        if (newString.length() <= 0) {
-                            //如果没值,那么根据keys构造keys数位的null值字符串
-                            int size = filteredList.size();
-                            for (int i = 0; i < size; i++) {
-                                newString.append("null,");
+                        if (newString.length() > 0) {
+                            //首位添加逗号分隔符
+                            newString.insert(0, ',');
+                            //移除最后逗号分隔符
+                            if (newString.charAt(newString.length() - 1) == ',') {
+                                newString.deleteCharAt(newString.length() - 1);
                             }
                         }
-                        //去除末尾的逗号
-                        newString.deleteCharAt(newString.length() - 1);
-                        //首位拼接逗号
-                        newString.insert(0, ",");
+
+                        //所有有值的key
+                        String keysHaveValue = StringUtils.join(keySet, ",");
+                        if (keysHaveValue.length() > 0) {
+                            //首位添加逗号分隔符
+                            keysHaveValue = "," + keysHaveValue;
+                        }
 
                         //delete SQL (先删除旧数据,再新增)
                         String delSql = "DELETE FROM " + tableName + " WHERE p_key_id = " + newData.getPKeyId() + " ; ";
 
                         //insert into SQL
                         copySql.append(delSql).append("INSERT INTO ").append(tableName)
-                                .append(" (id,p_key_id,group_id,")
-                                .append(keys)
+                                .append(" (id,p_key_id,group_id")
+                                .append(keysHaveValue)
                                 .append(") VALUES (")
                                 .append(SnowFlakeUtil.getId()).append(",")
                                 .append(newData.getPKeyId()).append(",null")
-                                .append(newString).append(") ; ");
+                                .append(newString)
+                                .append(");");
                     }
                 }
             }
@@ -1792,7 +1804,7 @@ public class InformationWriteQueryController extends BladeController {
                     addNames.setLength(addNames.length() - 1);
                     addNames.append("}");
                     needCopyNodeRoot.setNodeName(addNames.toString());
-                    //return R.success("操作成功");
+
                     return this.saveOrCopyNodeTree2(addNodeList, null, 32, needCopyNodeRoot);
                 } else {
                     throw new ServiceException("没有找到需要复制的节点信息,请联系管理员");