|
|
@@ -1,6 +1,5 @@
|
|
|
package org.springblade.manager.controller;
|
|
|
|
|
|
-import cn.hutool.core.stream.CollectorUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
@@ -31,10 +30,8 @@ import org.springblade.manager.entity.*;
|
|
|
import org.springblade.manager.mapper.WbsTreeContractMapper;
|
|
|
import org.springblade.manager.mapper.WbsTreePrivateMapper;
|
|
|
import org.springblade.manager.service.*;
|
|
|
-import org.springblade.manager.utils.FileUtils;
|
|
|
import org.springblade.manager.vo.*;
|
|
|
import org.springblade.manager.wrapper.WbsTreePrivateWrapper;
|
|
|
-import org.springblade.system.cache.DictCache;
|
|
|
import org.springblade.system.user.entity.User;
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
@@ -44,8 +41,8 @@ import org.springframework.web.bind.annotation.*;
|
|
|
import javax.validation.Valid;
|
|
|
import java.io.FileNotFoundException;
|
|
|
import java.io.IOException;
|
|
|
-import java.io.InputStream;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@@ -516,6 +513,80 @@ public class WbsTreePrivateController extends BladeController {
|
|
|
return R.fail(200, "未查询到数据");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据pkeyid检验html是否存在错误细腻些
|
|
|
+ * @param pKeyId
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @GetMapping("/getHtmlErrorByPKeyId")
|
|
|
+ @ApiOperationSupport(order = 3)
|
|
|
+ @ApiOperation(value = "根据pkeyid检验html是否存在错误细腻些", notes = "传入pKeyId")
|
|
|
+ public R<Boolean> getHtmlErrorByPKeyId(Long pKeyId){
|
|
|
+ AtomicBoolean htmlError = new AtomicBoolean(false);
|
|
|
+
|
|
|
+ WbsTreePrivate f = wbsTreePrivateService.getById(pKeyId);
|
|
|
+ String htmlUrl = f.getHtmlUrl();
|
|
|
+ String initTableId = f.getInitTableId();
|
|
|
+ if(StringUtil.isNotBlank(htmlUrl) && StringUtils.isNotEmpty(initTableId)){
|
|
|
+ //获取元素表数据
|
|
|
+ List<WbsFormElement> wbsFormElements = wbsFormElementService.getBaseMapper().selectList(Wrappers.<WbsFormElement>lambdaQuery()
|
|
|
+ .eq(WbsFormElement::getFId, initTableId)
|
|
|
+ .eq(WbsFormElement::getIsDeleted, 0)
|
|
|
+ );
|
|
|
+
|
|
|
+ List<String> keys = wbsFormElements.stream().map(WbsFormElement::getEKey).collect(Collectors.toList());
|
|
|
+
|
|
|
+
|
|
|
+ // 读取html页面信息
|
|
|
+ String htmlString = "";
|
|
|
+ //解析html
|
|
|
+ try {
|
|
|
+ R excelHtml = excelTabController.getExcelHtml(f.getPKeyId());
|
|
|
+ htmlString = excelHtml.getData().toString();
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
+ if(StringUtil.isEmpty(htmlString)){
|
|
|
+ return R.data(htmlError.get());
|
|
|
+ }
|
|
|
+ // 样式集合
|
|
|
+ Document doc = Jsoup.parse(htmlString);
|
|
|
+ //获取所有input标签
|
|
|
+ String[] tagNames = {"el-input", "el-date-picker", "el-time-picker", "hc-form-select-search",
|
|
|
+ "hc-table-form-upload", "hc-form-checkbox-group", "el-radio-group", "el-select"};
|
|
|
+ Elements inputs = new Elements();
|
|
|
+ for (String tagName : tagNames) {
|
|
|
+ inputs.addAll(doc.select(tagName));
|
|
|
+ }
|
|
|
+ //判断标签是否存在id属性
|
|
|
+ inputs.forEach(input -> {
|
|
|
+ String id = input.attr("id");
|
|
|
+ if(StringUtils.isEmpty(id)){
|
|
|
+ htmlError.set(true);
|
|
|
+ } else {
|
|
|
+ /**
|
|
|
+ * 判断当前元素是否符合格式
|
|
|
+ * 1、是否存在key_
|
|
|
+ * 2、是否存在__
|
|
|
+ * 3、key_后面是否为数字
|
|
|
+ * 4、__后面是否为坐标
|
|
|
+ * 5、key是否在元素库中存在
|
|
|
+ */
|
|
|
+ if(!id.contains("key_")
|
|
|
+ || !id.contains("__")
|
|
|
+ || !StringUtils.isNumber(id.split("__")[0].replace("key_",""))
|
|
|
+ || !id.split("__")[1].contains("_")
|
|
|
+ || !StringUtils.isNumber(id.split("__")[1].split("_")[0])
|
|
|
+ || !StringUtils.isNumber(id.split("__")[1].split("_")[1])
|
|
|
+ || !keys.contains(id.split("__")[0])
|
|
|
+ ){
|
|
|
+ htmlError.set(true);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return R.data(htmlError.get());
|
|
|
+ }
|
|
|
+
|
|
|
@GetMapping("/remove-table")
|
|
|
@ApiOperationSupport(order = 4)
|
|
|
@ApiOperation(value = "删除节点下的元素表", notes = "传入表单id、wbsId、projectId")
|
|
|
@@ -1229,71 +1300,6 @@ public class WbsTreePrivateController extends BladeController {
|
|
|
})
|
|
|
public R<IPage<TreeNodeVOByTabType>> tabTypeLazyTreeByProject(Long parentId, String projectId, String titleName, Query query) {
|
|
|
IPage<TreeNodeVOByTabType> page = wbsTreePrivateService.tabTypeLazyTreeByProject(Condition.getPage(query), parentId, projectId, titleName);
|
|
|
- List<TreeNodeVOByTabType> records = page.getRecords();
|
|
|
- records.forEach(f->{
|
|
|
- String htmlUrl = f.getHtmlUrl();
|
|
|
- String initTableId = f.getInitTableId();
|
|
|
- if(StringUtil.isNotBlank(htmlUrl) && StringUtils.isNotEmpty(initTableId)){
|
|
|
- //获取元素表数据
|
|
|
- List<WbsFormElement> wbsFormElements = wbsFormElementService.getBaseMapper().selectList(Wrappers.<WbsFormElement>lambdaQuery()
|
|
|
- .eq(WbsFormElement::getFId, initTableId)
|
|
|
- .eq(WbsFormElement::getIsDeleted, 0)
|
|
|
- );
|
|
|
-
|
|
|
- List<String> keys = wbsFormElements.stream().map(WbsFormElement::getEKey).collect(Collectors.toList());
|
|
|
-
|
|
|
-
|
|
|
- // 读取html页面信息
|
|
|
- String htmlString = "";
|
|
|
- //解析html
|
|
|
- try {
|
|
|
- R excelHtml = excelTabController.getExcelHtml(f.getPkeyId());
|
|
|
- htmlString = excelHtml.getData().toString();
|
|
|
- } catch (Exception e) {
|
|
|
- }
|
|
|
- if(StringUtil.isEmpty(htmlString)){
|
|
|
- return;
|
|
|
- }
|
|
|
- // 样式集合
|
|
|
- Document doc = Jsoup.parse(htmlString);
|
|
|
- //获取所有input标签
|
|
|
- //获取所有input标签
|
|
|
- String[] tagNames = {"el-input", "el-date-picker", "el-time-picker", "hc-form-select-search",
|
|
|
- "hc-table-form-upload", "hc-form-checkbox-group", "el-radio-group", "el-select"};
|
|
|
- Elements inputs = new Elements();
|
|
|
- for (String tagName : tagNames) {
|
|
|
- inputs.addAll(doc.select(tagName));
|
|
|
- }
|
|
|
- //判断标签是否存在id属性
|
|
|
- inputs.forEach(input -> {
|
|
|
- String id = input.attr("id");
|
|
|
- if(StringUtils.isEmpty(id)){
|
|
|
- f.setHtmlElementError(1);
|
|
|
- input.attr("htmlElementError", "1");
|
|
|
- } else {
|
|
|
- /**
|
|
|
- * 判断当前元素是否符合格式
|
|
|
- * 1、是否存在key_
|
|
|
- * 2、是否存在__
|
|
|
- * 3、key_后面是否为数字
|
|
|
- * 4、__后面是否为坐标
|
|
|
- * 5、key是否在元素库中存在
|
|
|
- */
|
|
|
- if(!id.contains("key_")
|
|
|
- || !id.contains("__")
|
|
|
- || !StringUtils.isNumber(id.split("__")[0].replace("key_",""))
|
|
|
- || !id.split("__")[1].contains("_")
|
|
|
- || !StringUtils.isNumber(id.split("__")[1].split("_")[0])
|
|
|
- || !StringUtils.isNumber(id.split("__")[1].split("_")[1])
|
|
|
- || !keys.contains(id.split("__")[0])
|
|
|
- ){
|
|
|
- f.setHtmlElementError(1);
|
|
|
- input.attr("htmlElementError", "1");
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
return R.data(page);
|
|
|
}
|
|
|
|