|
@@ -17,25 +17,35 @@
|
|
|
package org.springblade.manager.service.impl;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import org.jsoup.Jsoup;
|
|
|
+import org.jsoup.nodes.Document;
|
|
|
+import org.jsoup.nodes.Element;
|
|
|
+import org.jsoup.select.Elements;
|
|
|
import org.springblade.common.utils.SnowFlakeUtil;
|
|
|
+import org.springblade.core.tool.utils.IoUtil;
|
|
|
import org.springblade.core.tool.utils.StringUtil;
|
|
|
import org.springblade.manager.entity.NodeBaseInfo;
|
|
|
+import org.springblade.manager.entity.Parameter;
|
|
|
+import org.springblade.manager.entity.ParameterElement;
|
|
|
import org.springblade.manager.entity.WbsTreeContract;
|
|
|
import org.springblade.manager.service.IWbsTreeContractService;
|
|
|
+import org.springblade.manager.utils.FileUtils;
|
|
|
import org.springblade.manager.vo.NodeBaseInfoVO;
|
|
|
import org.springblade.manager.mapper.NodeBaseInfoMapper;
|
|
|
import org.springblade.manager.service.INodeBaseInfoService;
|
|
|
import org.springblade.core.mp.base.BaseServiceImpl;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
+import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
|
|
|
+import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.util.Arrays;
|
|
|
-import java.util.Collections;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* 服务实现类
|
|
@@ -48,6 +58,8 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
|
|
|
@Autowired
|
|
|
private IWbsTreeContractService iWbsTreeContractService;
|
|
|
+ @Autowired
|
|
|
+ private JdbcTemplate jdbcTemplate;
|
|
|
@Override
|
|
|
public IPage<NodeBaseInfoVO> selectNodeBaseInfoPage(IPage<NodeBaseInfoVO> page, NodeBaseInfoVO nodeBaseInfo) {
|
|
|
return page.setRecords(baseMapper.selectNodeBaseInfoPage(page, nodeBaseInfo));
|
|
@@ -157,8 +169,119 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Map<String, Object> getAllNodeBaseInfoByPkeyId(Long pkeyId) {
|
|
|
- return Collections.emptyMap();
|
|
|
+ public Map<String, Object> getAllNodeBaseInfoByPkeyId(Long pkeyId,Long nodeId) throws Exception {
|
|
|
+ HashMap<String, Object> map = new HashMap<>();
|
|
|
+ //查出表单
|
|
|
+ WbsTreeContract wbsTreeContract = iWbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", pkeyId));
|
|
|
+ WbsTreeContract wbsTreeContractNode = iWbsTreeContractService.getBaseMapper().selectOne(new QueryWrapper<WbsTreeContract>().eq("p_key_id", nodeId));
|
|
|
+ //解析html表单
|
|
|
+ String htmlUrl = wbsTreeContract.getHtmlUrl();
|
|
|
+ //拿到所有的元素
|
|
|
+ if(htmlUrl!=null){
|
|
|
+ InputStream inputStreamByUrl = FileUtils.getInputStreamByUrl(htmlUrl);
|
|
|
+ String htmlString = IoUtil.readToString(inputStreamByUrl);
|
|
|
+ htmlString = htmlString.replaceAll("placeholder", "placeholderxx");
|
|
|
+ Document doc = Jsoup.parse(htmlString);
|
|
|
+ //拿到参数库所有元素与参数库的元素比较
|
|
|
+ String sql="select * from m_parameter_element where is_deleted !=0";
|
|
|
+ List<ParameterElement> ParameterElementList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ParameterElement.class));
|
|
|
+ List<WbsTreeContract> ancestorsNodes = iWbsTreeContractService.getBaseMapper().selectList(new QueryWrapper<WbsTreeContract>().in("id", Arrays.stream(wbsTreeContractNode.getAncestors().split(",")).toArray()).eq("contract_id", wbsTreeContractNode.getContractId()));
|
|
|
+ for (ParameterElement parameterElement : ParameterElementList) {
|
|
|
+ Elements select = doc.select("[placeholderxx='" + parameterElement.getElementName() + "']");
|
|
|
+ //元素库里存在表单的元素
|
|
|
+ if(select.size()>0){
|
|
|
+ //用元素查出参数库
|
|
|
+ String sql1="Select * from m_parameter where id="+parameterElement.getParameterId();
|
|
|
+ Parameter parameter = jdbcTemplate.queryForObject(sql1, new BeanPropertyRowMapper<>(Parameter.class));
|
|
|
+ //不需要获取的情况
|
|
|
+ //如果参数要区分项目
|
|
|
+ if(parameter.getType()==1){
|
|
|
+ //并且元素不是全局参数
|
|
|
+ if(parameterElement.getType()!=1){
|
|
|
+ //并且元素对应的项目ID不等于表单的项目ID
|
|
|
+ if(parameterElement.getProjectId()!=null&&!wbsTreeContract.getProjectId().equals(parameterElement.getProjectId().toString())){
|
|
|
+ System.out.println(parameter.getParamName()+" 参数库的"+parameterElement.getElementName()+"元素不是全局参数,并且项目Id对应不上");
|
|
|
+ continue;
|
|
|
+ }else {
|
|
|
+ if(parameterElement.getContractId()!=null&&!wbsTreeContract.getContractId().equals(parameterElement.getContractId())){
|
|
|
+ System.out.println(parameter.getParamName()+" 参数库的"+parameterElement.getElementName()+"元素不是全局参数,项目ID能对应上但是合同段Id对应不上");
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //需要获取的情况
|
|
|
+ //拿到参数库的类型
|
|
|
+ String paramType = parameter.getParamType();
|
|
|
+ String[] paramTypes = paramType.split(",");
|
|
|
+ StringBuilder result=new StringBuilder();
|
|
|
+ //根据参数的类型值,来获取不同的值 1-7是获取单位工程名称这些 8是获取划分编号 9是获取范围随机数
|
|
|
+ for (String type : paramTypes) {
|
|
|
+ if(type.equals("1")){
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 1)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ } else if (type.equals("2")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 18)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ } else if (type.equals("3")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 2)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ }else if (type.equals("4")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 3)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ }else if (type.equals("5")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 4)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ }else if (type.equals("6")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 5)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ }else if (type.equals("7")) {
|
|
|
+ String s=ancestorsNodes.stream()
|
|
|
+ .filter(m -> m.getNodeType() == 6)
|
|
|
+ .map(WbsTreeContract::getNodeName)
|
|
|
+ .findFirst()
|
|
|
+ .orElse("");
|
|
|
+ result.append(s);
|
|
|
+ }else if (type.equals("8")) {
|
|
|
+ String s= ancestorsNodes.stream()
|
|
|
+ .map(WbsTreeContract::getPartitionCode) // 获取 partitionCode
|
|
|
+ .filter(partitionCode -> partitionCode != null && !partitionCode.isEmpty()) // 过滤掉空值
|
|
|
+ .collect(Collectors.joining());
|
|
|
+ if(wbsTreeContract.getPartitionCode()!=null){
|
|
|
+ s=s+wbsTreeContract.getPartitionCode();
|
|
|
+ }
|
|
|
+ result.append(s);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put(select.attr("keyname"),result.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return map;
|
|
|
}
|
|
|
|
|
|
}
|