Prechádzať zdrojové kódy

Merge remote-tracking branch 'origin/dev' into dev

cr 2 dní pred
rodič
commit
8694d2ea13

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

@@ -100,4 +100,6 @@ public class WbsNodeTableVO implements Serializable {
     @ApiModelProperty(value = "祖级路径")
     private String ancestorPId;
 
+    @ApiModelProperty("html元素是否存在错误:0-不存在,1-存在")
+    private Integer htmlElementError = 0;
 }

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

@@ -950,6 +950,8 @@ public class ExcelTabController extends BladeController {
                     .eq(WbsTreeContract::getWbsId, wbsTreeContract.getWbsId()).last("limit 1"));
             if (process != null) {
                 this.excelTabService.gsColor(pkeyId, process.getPKeyId().toString(), wbsTreeContract.getProjectId(), doc);
+                //设置自动获取的单元格添加html标识
+                this.excelTabService.setAutomatic(pkeyId,process.getPKeyId().toString(),doc);
             }
             doc.select("Col").remove();
 

+ 13 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/NodeBaseInfoController.java

@@ -327,7 +327,19 @@ public class NodeBaseInfoController extends BladeController {
 		return R.data(nodeBaseInfoService.getAllNodeBaseInfoByPkeyId(pkeyId,nodeId));
 	}
 
-
+    /**
+     * 需要自动获取
+     */
+    @GetMapping("/clearAutomatic")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "设置自动获取", notes = "pkeyId表单Id,nodeId节点Id")
+    public R clearAutomatic(@RequestParam Long pkeyId, @RequestParam Long nodeId, @RequestParam(required = false) String paramName) {
+        Boolean b = nodeBaseInfoService.clearAutomatic(pkeyId, nodeId, paramName);
+        if(b){
+            return R.success("设置成功");
+        }
+        return R.fail("失败");
+    }
 
 
 }

+ 65 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -8,6 +8,9 @@ import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.mixsmart.utils.StringUtils;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.select.Elements;
 import org.springblade.business.entity.TrialSelfInspectionRecord;
 import org.springblade.business.vo.SaveLogContractVO;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -19,10 +22,7 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.BladeUser;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.support.Kv;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.core.tool.utils.*;
 
 import org.springblade.manager.dto.NameRuleDto;
 import org.springblade.manager.dto.WbsTreePrivateDTO2;
@@ -31,6 +31,7 @@ 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;
@@ -43,6 +44,7 @@ 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.function.Function;
 import java.util.stream.Collectors;
@@ -401,6 +403,65 @@ public class WbsTreePrivateController extends BladeController {
                                                             @RequestParam("projectId") String projectId) {
         R<List<WbsNodeTableVO>> r = findNodeTableByCondition(parentId, wbsId, projectId);
         List<WbsNodeTableVO> data = r.getData();
+        //解析html
+        data.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
+                // 读取html页面信息
+                InputStream inputStream = null;
+                try {
+                    inputStream = FileUtils.getInputStreamByUrl(htmlUrl);
+                } catch (Exception e) {
+                    throw new RuntimeException("解析html失败");
+                }
+                String htmlString = IoUtil.readToString(inputStream);
+                // 样式集合
+                Document doc = Jsoup.parse(htmlString);
+                //获取所有input标签
+                Elements inputs = doc.select("el-input");
+
+                //判断标签是否存在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");
+                        }
+                    }
+                });
+            }
+        });
+
+
         List<WbsTreePrivateTableVO> list = new ArrayList<>();
         if (data != null && !data.isEmpty()) {
             Integer wbsType = data.get(0).getWbsType();

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

@@ -225,4 +225,6 @@ public interface IExcelTabService extends BaseService<ExcelTab> {
     R batchAddNumbers(BatchAddNumbersDTO dto) throws Exception;
 
     ExcelTabVO templateDetail(Long id);
+
+    void setAutomatic(Long pkeyId, String string, Document doc);
 }

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

@@ -48,4 +48,6 @@ public interface INodeBaseInfoService extends BaseService<NodeBaseInfo> {
 	Map<String,Object> getAllNodeBaseInfoByPkeyId(Long pkeyId,Long nodeId) throws Exception;
 
 	String getNameRuleByRule(String nameRule, Long pkeyId);
+
+	Boolean clearAutomatic(Long pkeyId, Long nodeId, String paramName);
 }

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

@@ -138,6 +138,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     private final IExctabCellService exctabCellService;
     private final WbsTreeContractOldHtmlService wbsTreeContractOldHtmlService;
 
+    private final IParameterElementService parameterElementService;
 
     @Autowired
     StringRedisTemplate RedisTemplate;
@@ -1128,6 +1129,25 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
     }
 
 
+    @Override
+    public void setAutomatic(Long pkeyId, String nodeId, Document doc) {
+        //自动获取数据查询
+        try {
+            WbsTreeContract wbsTreeContract = wbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", pkeyId));
+            List<ParameterElement> nodeBaseInfo = parameterElementService.list(Wrappers.<ParameterElement>lambdaQuery().eq(ParameterElement::getProjectId, wbsTreeContract.getProjectId())
+                    .eq(ParameterElement::getContractId, wbsTreeContract.getContractId()).eq(ParameterElement::getType, 3)
+                    .eq(ParameterElement::getNodeId, wbsTreeContract.getCopyPkId()));
+
+            nodeBaseInfo.forEach(key -> {
+                Elements select = doc.select("table").first().select("[keyname=" + key.getElementName() + "]");
+                select.stream().filter(Objects::nonNull).forEach(element -> element.attr("clearAutomatic", "1"));
+            });
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
     public Element findParentTd(Element element) {
         Element parent = element.parent();
         while (parent != null && !parent.tagName().equalsIgnoreCase("td")) {

+ 18 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/NodeBaseInfoServiceImpl.java

@@ -481,4 +481,22 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
         return result.toString();
     }
 
+    @Override
+    public Boolean clearAutomatic(Long pkeyId, Long nodeId, String paramName) {
+        WbsTreeContract wbsTreeContract = iWbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", pkeyId));
+        if (wbsTreeContract.getCopyPkId() ==  null) {
+            wbsTreeContract.setCopyPkId(wbsTreeContract.getPKeyId() + "");
+            iWbsTreeContractService.update(Wrappers.<WbsTreeContract>lambdaUpdate().set(WbsTreeContract::getCopyPkId, wbsTreeContract.getPKeyId()).eq(WbsTreeContract::getPKeyId, wbsTreeContract.getPKeyId()));
+        }
+        ParameterElement element = parameterElementService.getOne(Wrappers.<ParameterElement>lambdaQuery().eq(ParameterElement::getProjectId, wbsTreeContract.getProjectId())
+                .eq(ParameterElement::getContractId, wbsTreeContract.getContractId()).eq(ParameterElement::getType, 3)
+                .eq(ParameterElement::getElementName, paramName).eq(ParameterElement::getNodeId, wbsTreeContract.getCopyPkId()));
+        if(element != null){
+            //软删除
+            return parameterElementService.update(Wrappers.<ParameterElement>update().lambda()
+                    .set(ParameterElement::getIsDeleted, 1)
+                    .eq(ParameterElement::getId, element.getId()));
+        }
+        return true;
+    }
 }