Przeglądaj źródła

清表关联wbs并创建元素优化

lvy 1 dzień temu
rodzic
commit
162da4ef95

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ExctabCell.java

@@ -80,4 +80,10 @@ public class ExctabCell extends BaseEntity {
      */
     private String textDeviation;
 
+    /**
+     * exid
+     */
+    @ApiModelProperty(value = "exid")
+    private Long exid;
+
 }

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsFormElement.java

@@ -71,4 +71,10 @@ public class WbsFormElement extends BaseEntity {
     @ApiModelProperty(value = "动态字典,征拆统计")
     @JsonProperty(value = "dynamicDict")
     private Integer dynamicDict;
+
+    /**
+     * exid
+     */
+    @ApiModelProperty(value = "exid")
+    private Long exid;
 }

+ 2 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreePrivateTableVO.java

@@ -25,6 +25,8 @@ public class WbsTreePrivateTableVO  implements Serializable {
     @ApiModelProperty(value = "表单list")
     List<WbsNodeTableVO> list;
 
+    private int sort;
+
     public WbsTreePrivateTableVO() {
     }
     public WbsTreePrivateTableVO(String title, List<WbsNodeTableVO> list) {

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExctabCellController.java

@@ -24,6 +24,7 @@ import lombok.AllArgsConstructor;
 
 import javax.validation.Valid;
 
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -103,6 +104,7 @@ public class ExctabCellController extends BladeController {
             Date date = new Date();
             Timestamp timestamp = new Timestamp(date.getTime());
             exctabCell.setCreateTime(timestamp);
+            exctabCell.setExid(SnowFlakeUtil.getId());
         }
         return R.status(exctabCellService.saveBatch(exctabCells));
     }

+ 72 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsFormElementController.java

@@ -15,19 +15,25 @@ import org.springblade.manager.dto.FormElementDTO2;
 import org.springblade.manager.dto.WbsFormElementDTO;
 import org.springblade.manager.dto.WbsFormElementDTO2;
 import org.springblade.manager.entity.WbsFormElement;
+import org.springblade.manager.entity.WbsTreePrivate;
 import org.springblade.manager.excel.*;
 import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsFormElementVO2;
 import org.springblade.manager.vo.WbsNodeTableVO;
+import org.springblade.manager.vo.WbsTreePrivateTableVO;
 import org.springblade.manager.wrapper.WbsFormElementWrapper;
+import org.springblade.system.entity.Dict;
+import org.springblade.system.feign.IDictClient;
+import org.springblade.system.feign.ISysClient;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.core.boot.ctrl.BladeController;
 import org.springframework.web.multipart.MultipartFile;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 @RestController
 @AllArgsConstructor
@@ -36,6 +42,7 @@ import java.util.List;
 public class WbsFormElementController extends BladeController {
 
     private final IWbsFormElementService wbsFormElementService;
+    private final IDictClient dictClient;
 
     /**
      * 详情
@@ -251,4 +258,67 @@ public class WbsFormElementController extends BladeController {
         return R.fail(200, "");
     }
 
+    /**
+     * 元素识别关联公共WBS模板-查询节点下已关联的所有表单并按照所属方分组
+     */
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "元素识别关联公共WBS模板-查询节点下已关联的所有表单并按照所属方分组", notes = "传入节点id、清表id")
+    @RequestMapping(value = "/get-group-node-tables", method = RequestMethod.GET)
+    public R<List<WbsTreePrivateTableVO>> searchNodeTablesGroup(String nodeId, String excelTabId) {
+        List<WbsNodeTableVO> list = wbsFormElementService.searchNodeTables(nodeId, excelTabId);
+        if (list == null || list.isEmpty()) {
+            return R.fail(200, "操作失败");
+        }
+        R<List<Dict>> dictResult = dictClient.getList("owner_type");
+        if (!dictResult.isSuccess() || dictResult.getData() == null) {
+            return R.fail(200, "网络异常,请稍后再试");
+        }
+        Map<String, Dict> map = dictResult.getData().stream().collect(Collectors.toMap(Dict::getDictKey, Function.identity()));
+        Map<String, List<WbsNodeTableVO>> groupMap = list.stream().peek(item -> {
+            if (item.getInitTableName() != null && !item.getInitTableName().contains("m_")) {
+                item.setIsLinkTable(2);
+            }
+        }).collect(Collectors.groupingBy(item -> {
+            Dict dict = map.get(item.getTableOwner());
+            if (dict ==  null || dict.getDictValue() == null || !dict.getDictValue().contains("|")) {
+                return "其他";
+            }
+            return dict.getDictValue().split("\\|")[0].trim() + "___" + (dict.getSort() == null ? 999 : dict.getSort());
+        }));
+        Map<String, WbsTreePrivateTableVO> resultMap = new HashMap<>();
+        groupMap.forEach((key, value) -> {
+            String[] split = key.split("___");
+            WbsTreePrivateTableVO vo = resultMap.get(split[0]);
+            if (vo == null) {
+                vo = new WbsTreePrivateTableVO();
+                vo.setTitle(split[0]);
+                vo.setList(value);
+                if (key.contains("___")) {
+                    vo.setSort(Integer.parseInt(split[1]));
+                } else {
+                    vo.setSort(9999);
+                }
+                resultMap.put(split[0], vo);
+            } else {
+                List<WbsNodeTableVO> list1 = vo.getList();
+                if (list1 == null) {
+                    vo.setList(value);
+                } else {
+                    list1.addAll(value);
+                }
+            }
+        });
+        return R.data(resultMap.values().stream().sorted(Comparator.comparingInt(WbsTreePrivateTableVO::getSort)).collect(Collectors.toList()), "查询成功");
+    }
+
+    /**
+     * 元素识别关联公共WBS模板-查询节点下是否存在当前元素表
+     */
+    @ApiOperationSupport(order = 16)
+    @ApiOperation(value = "元素识别关联公共WBS模板-查询节点下是否存在当前元素表", notes = "传入节点id、表单名称")
+    @RequestMapping(value = "/checkTableExist", method = RequestMethod.GET)
+    public R<Object> checkTableExist(String nodeId, String tableName) {
+        return R.data(wbsFormElementService.checkTableExist(nodeId, tableName), "查询成功");
+    }
+
 }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsFormElementService.java

@@ -57,4 +57,5 @@ public interface IWbsFormElementService extends BaseService<WbsFormElement> {
 
     boolean saveRelation(FormElementDTO2 formElementDTO);
 
+    Boolean checkTableExist(String nodeId, String tableName);
 }

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

@@ -6600,6 +6600,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
             exctabCell.setIsDeleted(0);
             exctabCell.setTextInfo(title);
             exctabCell.setCreateTime(new Date());
+            exctabCell.setExid(SnowFlakeUtil.getId());
 
             if (title.contains("日期") || title.contains("年") || title.contains("月") || title.contains("日")) {
                 //日期

+ 23 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsFormElementServiceImpl.java

@@ -27,6 +27,7 @@ import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.ITableInfoService;
 import org.springblade.manager.service.IWbsFormElementService;
 import org.springblade.manager.utils.FileUtils;
+import org.springblade.manager.utils.StringCNUtils;
 import org.springblade.manager.utils.WbsElementUtil;
 import org.springblade.manager.vo.WbsFormElementVO;
 import org.springblade.manager.vo.WbsFormElementVO2;
@@ -645,9 +646,15 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
                     firstWbsFormElement = wbsFormElements.stream().findFirst().orElse(wbsFormElements.get(wbsFormElements.size() - 1));
 
                     //去重,元素表中名称已存在的元素不添加
-                    newList = formElementDTO.getElementList().stream().filter(a ->
-                            !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
-                    ).collect(Collectors.toList());
+                    newList = formElementDTO.getElementList().stream().filter(a -> {
+//                            !wbsFormElements.stream().map(WbsFormElement::getEName).collect(Collectors.toList()).contains(a.getEName())
+                        for (WbsFormElement element : wbsFormElements) {
+                            if (StringCNUtils.compareStringIgnoreSpace(a.getEName(), element.getEName())) {
+                                return false;
+                            }
+                        }
+                        return true;
+                    }).collect(Collectors.toList());
 
                 } else {
                     //不存在元素
@@ -795,6 +802,15 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
         return true;
     }
 
+    @Override
+    public Boolean checkTableExist(String nodeId, String tableName) {
+        if (tableName == null || tableName.trim().isEmpty()) {
+            throw new ServiceException("请输入表名");
+        }
+        Long l = wbsTreeMapper.selectCount(Wrappers.<WbsTree>query().lambda().eq(WbsTree::getParentId, nodeId).eq(WbsTree::getNodeName, tableName.trim()).eq(WbsTree::getStatus, 1).eq(WbsTree::getType, 2));
+        return l != null && l > 0;
+    }
+
     @Transactional(rollbackFor = Exception.class)
     public boolean saveFormElement(FormElementDTO2 formElementDTO) {
         //获取新增节点ids
@@ -920,6 +936,10 @@ public class WbsFormElementServiceImpl extends BaseServiceImpl<WbsFormElementMap
             if (Func.toLong(dept.getParentId()) == Func.toLong(dept.getId())) {
                 throw new ServiceException("父节点不可选择自身!");
             }
+            Boolean exist = checkTableExist(dept.getParentId() + "", dept.getNodeName());
+            if (exist) {
+                throw new ServiceException("当前元素表已存在 (" + dept.getNodeName() + "), 不允许新增");
+            }
             dept.setTenantId(parent.getTenantId());
             String ancestors = parent.getAncestors() + StringPool.COMMA + dept.getParentId();
             dept.setAncestors(ancestors);

+ 77 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/StringCNUtils.java

@@ -0,0 +1,77 @@
+package org.springblade.manager.utils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class StringCNUtils {
+    private static final Map<Character, Character> SYMBOL_MAP = new HashMap<>();
+
+    static {
+        SYMBOL_MAP.put(',', ',');
+        SYMBOL_MAP.put('。', '.');
+        SYMBOL_MAP.put(';', ';');
+        SYMBOL_MAP.put(':', ':');
+        SYMBOL_MAP.put('?', '?');
+        SYMBOL_MAP.put('!', '!');
+        SYMBOL_MAP.put('“', '"');
+        SYMBOL_MAP.put('”', '"');
+        SYMBOL_MAP.put('‘', '\'');
+        SYMBOL_MAP.put('’', '\'');
+        SYMBOL_MAP.put('(', '(');
+        SYMBOL_MAP.put(')', ')');
+        SYMBOL_MAP.put('【', '[');
+        SYMBOL_MAP.put('】', ']');
+        SYMBOL_MAP.put('《', '<');
+        SYMBOL_MAP.put('》', '>');
+        SYMBOL_MAP.put('—', '-');
+        SYMBOL_MAP.put('…', '.');
+    }
+
+    /**
+     * 将中文符号替换为英文符号
+     * @param text 中文文本
+     * @return 替换后的英文文本
+     */
+    public static String replaceChineseSymbolsEfficiently(String text) {
+        if (text == null) return null;
+        StringBuilder sb = new StringBuilder(text.length());
+        for (int i = 0; i < text.length(); i++) {
+            char ch = text.charAt(i);
+            Character replacement = SYMBOL_MAP.get(ch);
+            if (replacement != null) {
+                sb.append(replacement);
+            } else {
+                sb.append(ch);
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
+     * 比较两个字符串是否相等,忽略空格
+     * 将中文标点符号转换为英文标点符号后在比较
+     */
+    public static boolean compareStringIgnoreSpace(String a, String b) {
+        if (a == null || b == null) {
+            return false;
+        }
+        a = a.replaceAll("\\s", "");
+        b = b.replaceAll("\\s", "");
+        if (a.equals(b)) {
+            return true;
+        }
+        return replaceChineseSymbolsEfficiently(a).equals(replaceChineseSymbolsEfficiently(b));
+    }
+
+    /**
+     * 比较两个字符串是否相等,忽略空格,忽略所有中文标点符号和英文标点符号
+     */
+    public static boolean compareStringIgnoreSpaceAndSymbols(String a, String b) {
+        if (a == null || b == null) {
+            return false;
+        }
+        return a.replaceAll("\\p{Punct}\\s", "").equals(b.replaceAll("\\p{Punct}\\s", ""));
+    }
+
+
+}