Parcourir la source

后管元素表回显和元素库必填项

lvy il y a 1 jour
Parent
commit
f35bb3aca6

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

@@ -84,4 +84,13 @@ public class WbsFormElement extends BaseEntity {
     @ApiModelProperty(value = "是否辅助(1-是,0-不是)")
     private Integer assist;
 
+    /**
+     * 是否必填,0否、1是。默认0
+     */
+    @ApiModelProperty(value = "是否必填,0否、1是。默认0")
+    private Integer required;
+
+    @ApiModelProperty(value = "是否忽略")
+    private String nodeIgnore;
+
 }

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/WbsTreeContract.java

@@ -328,7 +328,7 @@ public class WbsTreeContract extends BaseEntity {
     @JsonProperty(value = "treePId")
     private Long treePId;
 
-    @ApiModelProperty(value = "是否完成日期填写 1是 2否")
+    @ApiModelProperty(value = "是否完成日期填写/必填。1无,2缺少日期,3缺少必要数据,4:缺少日期和必要数据")
     private Integer dateIsComplete;
 
     @ApiModelProperty(value = "导入Id")

+ 5 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsNodeTableVO.java

@@ -27,6 +27,11 @@ public class WbsNodeTableVO implements Serializable {
      */
     private String tableName;
 
+    /**
+     * 元素表名称
+     */
+    private String elementTableName;
+
     /**
      * 排序
      */

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractLazyVO.java

@@ -136,7 +136,7 @@ public class WbsTreeContractLazyVO implements Serializable {
     @ApiModelProperty(value = "关联后管节点ID")
     private Long isTypePrivatePid;
 
-    @ApiModelProperty(value = "是否完成日期填写1是2否")
+    @ApiModelProperty(value = "是否完成日期填写/必填。1无,2缺少日期,3缺少必要数据,4:缺少日期和必要数据")
     private Integer dateIsComplete;
 
     @ApiModelProperty(value = "是否最近同步节点")

+ 1 - 1
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsTreeContractTreeAllVO.java

@@ -41,7 +41,7 @@ public class WbsTreeContractTreeAllVO implements INode<WbsTreeContractTreeAllVO>
     @ApiModelProperty(value = "是否为自定义新增节点 1=是")
     private Integer isCustom;
 
-    @ApiModelProperty(value = "是否完成日期填写 1是 2否")
+    @ApiModelProperty(value = "是否完成日期填写/必填。1无,2缺少日期,3缺少必要数据,4:缺少日期和必要数据")
     private Integer dateIsComplete;
 
     @ApiModelProperty(value = "是否为自定义新增节点 1=是")

+ 120 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -1044,6 +1044,7 @@ public class ExcelTabController extends BladeController {
                     keyNames.attr("placeholder", textdictInfoVO.getSigRoleName());
                 }
             }
+            setTableTips(wbsTreeContract, table);
             fileInputStream.close();
             return R.data(table + "");
         } catch (Exception e) {
@@ -1051,6 +1052,94 @@ public class ExcelTabController extends BladeController {
         }
     }
 
+    private void setTableTips(WbsTreeContract tableNode, Element tableHtml) {
+        if (tableNode == null || tableHtml == null || tableNode.getDateIsComplete() == null || tableNode.getDateIsComplete() == 1) {
+            return;
+        }
+
+        String tableName = tableNode.getInitTableName();
+        List<Map<String, Object>> valueMapList = jdbcTemplate.queryForList("select * from " + tableName + " where p_key_id = " + tableNode.getPKeyId());
+        if (CollectionUtil.isEmpty(valueMapList) ||  CollectionUtil.isEmpty(valueMapList.get(0))) {
+            return;
+        }
+        List<WbsFormElement> wbsFormElementList = jdbcTemplate.query("select * from m_wbs_form_element where f_id = ( select id from m_table_info where tab_en_name in ( '" + tableName + "' ) and is_deleted = 0) and is_deleted = 0 and (required = 1 or ignore is not null)",
+                new BeanPropertyRowMapper<>(WbsFormElement.class));
+        if (CollectionUtil.isEmpty(wbsFormElementList)) {
+            return;
+        }
+        Map<String, WbsFormElement> keyMap = wbsFormElementList.stream().collect(Collectors.toMap(WbsFormElement::getEKey, item -> item, (v1, v2) -> v1));
+        Elements elements = tableHtml.select("el-date-picker");
+        elements.forEach(element -> {
+            String keyname = element.attr("keyname");
+            String key = keyname.split("__")[0];
+            if (!keyMap.containsKey(key)) {
+                WbsFormElement wbsFormElement = keyMap.get(key);
+                if (wbsFormElement != null && wbsFormElement.getNodeIgnore() != null && wbsFormElement.getNodeIgnore().contains(tableNode.getPId() + "")) {
+                    Elements parents = element.parents();
+                    for (Element parent : parents) {
+                        if (parent.hasAttr("@mouseup.left")) {
+                            String attr = parent.attr("@mouseup.left");
+                            parent.attr("@mouseup.left", attr.substring(0, attr.length() - 1) + ", false)");
+                            break;
+                        }
+                    }
+                    return;
+                }
+            }
+            Elements parents = element.parents();
+            for (Element parent : parents) {
+                if (parent.hasAttr("@mouseup.left")) {
+                    String attr = parent.attr("@mouseup.left");
+                    parent.attr("@mouseup.left", attr.substring(0, attr.length() - 1) + ", true)");
+                    break;
+                }
+            }
+            element.wrap("<div display=\"line\"></div>");
+            element.before("<el-tooltip content=\"缺少日期,点击忽略\" placement=\"top\" effect=\"light\">" +
+                    "<hc-icon name=\"error-warning\"/ style = \"margin-right: 2px;color:#f56c6c;\">" +
+                    "</el-tooltip>");
+        });
+        Map<String, Object> map = valueMapList.get(0);
+        DataStructureFormatUtils.parseDataByKey( map);
+
+        for (WbsFormElement wbsFormElement : wbsFormElementList) {
+            Object obj = map.get(wbsFormElement.getEKey());
+            if (obj != null && obj.toString().contains("_^_")) {
+                continue;
+            }
+            // 查找html中标签属性 keyname中包含 wbsFormElement.getEKey()的标签
+            Elements keyNames = tableHtml.getElementsByAttributeValueContaining("keyname", wbsFormElement.getEKey());
+            if (!keyNames.isEmpty()) {
+                keyNames.forEach(element -> {
+                    if (wbsFormElement.getNodeIgnore() != null && wbsFormElement.getNodeIgnore().contains(tableNode.getPId() + "")) {
+                        Elements parents = element.parents();
+                        for (Element parent : parents) {
+                            if (parent.hasAttr("@mouseup.left")) {
+                                String attr = parent.attr("@mouseup.left");
+                                parent.attr("@mouseup.left", attr.substring(0, attr.length() - 1) + ", false)");
+                                break;
+                            }
+                        }
+                        return;
+                    }
+                    Elements parents = element.parents();
+                    for (Element parent : parents) {
+                        if (parent.hasAttr("@mouseup.left")) {
+                            String attr = parent.attr("@mouseup.left");
+                            parent.attr("@mouseup.left", attr.substring(0, attr.length() - 1) + ", true)");
+                            break;
+                        }
+                    }
+                    element.wrap("<div></div>");
+                    element.before("<el-tooltip content=\"此项为必填项,点击忽略\" placement=\"top\" effect=\"light\" @click=\"cancelRequiredTips($event, " + wbsFormElement.getEKey() +")\">" +
+                            "<hc-icon name=\"error-warning\"/ style = \"margin-right: 2px;color:#f56c6c;\">" +
+                            "</el-tooltip>");
+                });
+            }
+        }
+
+    }
+
     /**
      * 后管清表生成html
      */
@@ -5542,4 +5631,35 @@ public class ExcelTabController extends BladeController {
         return R.data(excelTabService.getWbsTreeExcelTab(id,nodeId));
     }
 
+
+    @GetMapping("/ignoreTips")
+    @ApiOperationSupport(order = 30)
+    @ApiOperation(value = "忽略必填提示", notes = "忽略必填提示")
+    public R<Boolean> ignoreTips(@RequestParam Long pkeyId, @RequestParam String key) {
+        if (key == null) {
+            throw new ServiceException("参数错误");
+        }
+        WbsTreeContract table = wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, pkeyId));
+        if (table == null) {
+            throw new ServiceException("没有找到表单");
+        }
+        List<org.springblade.manager.entity.TableInfo> tableInfos = tableInfoService.list(Wrappers.<org.springblade.manager.entity.TableInfo>lambdaQuery().eq(org.springblade.manager.entity.TableInfo::getTabEnName, table.getInitTableName()));
+        if (tableInfos == null || tableInfos.isEmpty()) {
+            return R.fail("没有找到关联元素");
+        }
+        org.springblade.manager.entity.TableInfo tableInfo = tableInfos.get(0);
+        if (key.contains("__")) {
+            key = key.split("__")[0];
+        }
+        List<WbsFormElement> list = wbsFormElementService.list(Wrappers.<WbsFormElement>lambdaQuery().eq(WbsFormElement::getFId, tableInfo.getId()).eq(WbsFormElement::getEKey, key));
+        if (list == null || list.isEmpty()) {
+            return R.fail("没有找到关联元素");
+        }
+        WbsFormElement element = list.get(0);
+        if (element.getNodeIgnore() == null || !element.getNodeIgnore().contains(table.getPId() + "")) {
+            element.setNodeIgnore(element.getNodeIgnore() == null ? "" : element.getNodeIgnore() + "," + table.getPId());
+            wbsFormElementService.update(Wrappers.<WbsFormElement>lambdaUpdate().eq(WbsFormElement::getId, element.getId()).set(WbsFormElement::getNodeIgnore, element.getNodeIgnore()));
+        }
+        return R.data(true);
+    }
 }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreeMapper.xml

@@ -419,6 +419,7 @@
                                as tableElementKey,
                init_table_name as initTableName,
                b.parent_id     as nodeId
+               ,a.required
         from m_wbs_form_element a
                  inner join m_wbs_tree b on a.f_id = b.init_table_id
         where b.id = #{id}
@@ -438,6 +439,7 @@
                                as tableElementKey,
                init_table_name as initTableName,
                b.parent_id     as nodeId
+                ,a.required
         from m_wbs_form_element a
                  inner join m_wbs_tree_private b on a.f_id = b.init_table_id
         where b.p_key_id = #{id}
@@ -452,6 +454,7 @@
              , e_length
              , e_allow_deviation
              , e_Inspection_method
+             ,a.required
              , CONCAT(a.tab_en_name, ':', e_key) as
                                                     tableElementKey
              , a.tab_en_name                     as initTableName,

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/mapper/WbsTreePrivateMapper.xml

@@ -540,6 +540,7 @@
                 FROM m_wbs_form_element
                 WHERE f_id = wt.init_table_id
                   and is_deleted = 0)                                                               AS "elementTotal"
+                , (SELECT tab_ch_name from m_table_info where tab_en_name = wt.init_table_name)     As elementTableName
         FROM m_wbs_tree_private AS wt
         WHERE wt.type = 2
           AND wt.is_deleted = 0

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

@@ -3552,6 +3552,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     }
 
     @Override
+    @Async
     public boolean checkNodeAllDate(WbsTreeContract contract) {
 //        List<Integer> tableOwners = new ArrayList<>();
 //        if (StringUtils.isEmpty(contract.getTableOwner())) {
@@ -3567,9 +3568,10 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 //            tableOwners.add(5);
 //            tableOwners.add(6);
 //        }
+                checkTableRequired(contract);
         List<WbsTreeContract> list = baseMapper.selectList(new LambdaQueryWrapper<>(WbsTreeContract.class).eq(WbsTreeContract::getPId, contract.getPKeyId()).ne(WbsTreeContract::getIsBussShow, 2));//.in(WbsTreeContract::getTableOwner, tableOwners);
         if (!list.isEmpty()) {
-            boolean b = list.stream().anyMatch(w -> w.getDateIsComplete() != null && w.getDateIsComplete() == 2);
+            boolean b = list.stream().anyMatch(w -> w.getDateIsComplete() != null && w.getDateIsComplete() > 1);
             String ancestorsPId = contract.getAncestorsPId();
             if (ancestorsPId.startsWith("0,")) {
                 ancestorsPId = ancestorsPId.substring(2);
@@ -3589,6 +3591,65 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         }
         return true;
     }
+    private void checkTableRequired(WbsTreeContract parentNode){
+        List<WbsTreeContract> list = this.list(Wrappers.<WbsTreeContract>lambdaUpdate().eq(WbsTreeContract::getPId, parentNode.getPKeyId())
+                .ne(WbsTreeContract::getIsBussShow, 2));
+        if (!list.isEmpty()) {
+            // 获取元素信息
+            Set<String> tableNames = list.stream().map(WbsTreeContract::getInitTableName).filter(StringUtil::hasText).collect(Collectors.toSet());
+            List<TableInfo> tableInfoList = tableInfoMapper.selectList(Wrappers.<TableInfo>lambdaQuery().in(TableInfo::getTabEnName, tableNames).eq(TableInfo::getIsDeleted, 0));
+            if (tableInfoList == null || tableInfoList.isEmpty()) {
+                return;
+            }
+            Set<Long> fIds = tableInfoList.stream().map(TableInfo::getId).collect(Collectors.toSet());
+            List<WbsFormElement> elements = wbsFormElementMapper.selectList(Wrappers.<WbsFormElement>lambdaQuery().in(WbsFormElement::getFId, fIds).eq(WbsFormElement::getIsDeleted, 0));
+            if (elements.isEmpty()) {
+                return;
+            }
+            Map<String, Long> tableMap = tableInfoList.stream().collect(Collectors.toMap(TableInfo::getTabEnName, TableInfo::getId, (k1, k2) -> k1));
+            Map<String, List<WbsFormElement>> map = elements.stream().collect(Collectors.groupingBy(WbsFormElement::getFId));
+            for (WbsTreeContract node : list) {
+                String tableName = node.getInitTableName();
+                if (!StringUtil.hasText(tableName)) {
+                    continue;
+                }
+                Long fId = tableMap.get(tableName);
+                if (fId == null) {
+                    continue;
+                }
+                List<WbsFormElement> elements1 = map.get(fId.toString());
+                if (elements1 == null || elements1.isEmpty()) {
+                    continue;
+                }
+                List<Map<String, Object>> valueMapList = jdbcTemplate.queryForList("select * from " + tableName + " where p_key_id = " + node.getPKeyId() + " order by id desc limit 1");
+                if (valueMapList.isEmpty()) {
+                    return;
+                }
+                Map<String, Object> valueMap = valueMapList.get(0);
+                if (valueMap == null || valueMap.isEmpty()) {
+                    return;
+                }
+                DataStructureFormatUtils.parseDataByKey(valueMap);
+                boolean flag = true;
+                for (WbsFormElement element : elements1) {
+                    Object o = valueMap.get(element.getEKey());
+                    if (o == null) {
+                        flag = false;
+                        break;
+                    }
+                    String value = o.toString();
+                    if (!StringUtil.hasText( value) || !value.contains("_^_")) {
+                        flag = false;
+                        break;
+                    }
+                }
+                if (!flag) {
+                    this.update(Wrappers.<WbsTreeContract>lambdaUpdate().eq(WbsTreeContract::getPKeyId, node.getPKeyId())
+                            .setSql("date_is_complete = ifnull(date_is_complete,1) + 2").apply(" (date_is_complete is null or date_is_complete <= 2)"));
+                }
+            }
+        }
+    }
 
     @Override
     public Integer findIsExistTreeNode(List<String> ids) {