|
@@ -16,28 +16,30 @@
|
|
|
*/
|
|
|
package org.springblade.manager.service.impl;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
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.log.exception.ServiceException;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.utils.IoUtil;
|
|
|
-import org.springblade.core.tool.utils.ObjectUtil;
|
|
|
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.IParameterElementService;
|
|
|
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.BeanUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.jdbc.core.BeanPropertyRowMapper;
|
|
|
import org.springframework.jdbc.core.JdbcTemplate;
|
|
@@ -49,7 +51,6 @@ import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
-import java.util.stream.Stream;
|
|
|
|
|
|
/**
|
|
|
* 服务实现类
|
|
@@ -64,6 +65,8 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
private IWbsTreeContractService iWbsTreeContractService;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
+ @Autowired
|
|
|
+ private IParameterElementService parameterElementService;
|
|
|
@Override
|
|
|
public IPage<NodeBaseInfoVO> selectNodeBaseInfoPage(IPage<NodeBaseInfoVO> page, NodeBaseInfoVO nodeBaseInfo) {
|
|
|
return page.setRecords(baseMapper.selectNodeBaseInfoPage(page, nodeBaseInfo));
|
|
@@ -162,7 +165,7 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
|
|
|
|
|
|
@Override
|
|
|
- public Object getNodeBaseInfoByPkeyId(Long pkeyId, Long nodeId, String autoType, BigDecimal min, BigDecimal max) {
|
|
|
+ public Object getNodeBaseInfoByPkeyId(Long pkeyId, Long nodeId, String autoType, String paramName, BigDecimal min, BigDecimal max) {
|
|
|
String result="";
|
|
|
String[] strings = autoType.split(",");
|
|
|
List<String> types = Arrays.asList(strings);
|
|
@@ -195,6 +198,7 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ String parameter = null;
|
|
|
if(types.size()==1&&types.contains("8")) {
|
|
|
if (min.compareTo(max) >= 0) {
|
|
|
throw new IllegalArgumentException("max must be greater than min");
|
|
@@ -209,6 +213,41 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
|
|
|
// 设置精度和舍入模式 保留两位小数
|
|
|
result= randomValue.setScale(2, RoundingMode.HALF_UP).toString();
|
|
|
+ Map<String, BigDecimal> map = new HashMap<>();
|
|
|
+ map.put("min", min);
|
|
|
+ map.put("max", max);
|
|
|
+ parameter = JSONObject.toJSONString( map);
|
|
|
+ }
|
|
|
+ if (paramName != null && !paramName.isEmpty()) {
|
|
|
+ try {
|
|
|
+ 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) {
|
|
|
+ element = new ParameterElement();
|
|
|
+ element.setProjectId(Long.valueOf(wbsTreeContract.getProjectId()));
|
|
|
+ element.setContractId(wbsTreeContract.getContractId());
|
|
|
+ element.setNodeId(wbsTreeContract.getCopyPkId() == null ? wbsTreeContract.getPKeyId() + "" : wbsTreeContract.getCopyPkId());
|
|
|
+ element.setType(3);
|
|
|
+ element.setElementName(paramName);
|
|
|
+ element.setParameter(parameter);
|
|
|
+ element.setParamType(autoType);
|
|
|
+ element.setCreateUser(AuthUtil.getUserId());
|
|
|
+ element.setCreateDept(Long.valueOf(AuthUtil.getDeptId()));
|
|
|
+ parameterElementService.save(element);
|
|
|
+ } else {
|
|
|
+ element.setParameter(parameter);
|
|
|
+ element.setParamType(autoType);
|
|
|
+ parameterElementService.updateById(element);
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -228,9 +267,19 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
htmlString = htmlString.replaceAll("placeholder", "placeholderxx");
|
|
|
Document doc = Jsoup.parse(htmlString);
|
|
|
//拿到参数库所有元素与参数库的元素比较
|
|
|
- String sql="select * from m_parameter_element where is_deleted =0";
|
|
|
+ // 全局参数
|
|
|
+ String sql="select * from m_parameter_element where is_deleted =0 and type = 1";
|
|
|
List<ParameterElement> ParameterElementList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ParameterElement.class));
|
|
|
-
|
|
|
+ // 私有参数
|
|
|
+ List<ParameterElement> parameterElements = parameterElementService.list(Wrappers.<ParameterElement>lambdaQuery().eq(ParameterElement::getProjectId, wbsTreeContract.getProjectId())
|
|
|
+ .eq(ParameterElement::getType, 3).eq(ParameterElement::getContractId, wbsTreeContract.getContractId())
|
|
|
+ .eq(ParameterElement::getNodeId, wbsTreeContract.getCopyPkId() == null ? wbsTreeContract.getPKeyId() : wbsTreeContract.getCopyPkId()));
|
|
|
+ if (!parameterElements.isEmpty()) {
|
|
|
+ // 去重
|
|
|
+ Set<String> set = parameterElements.stream().map(ParameterElement::getElementName).collect(Collectors.toSet());
|
|
|
+ ParameterElementList.removeIf(parameterElement -> set.contains(parameterElement.getElementName()));
|
|
|
+ }
|
|
|
+ ParameterElementList.addAll(parameterElements);
|
|
|
String nodeSql="Select * from m_node_base_info where node_id="+nodeId+" and is_deleted=0 limit 1";
|
|
|
NodeBaseInfo nodeBaseInfo;
|
|
|
try {
|
|
@@ -240,33 +289,48 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
}
|
|
|
List<WbsTreeContract> ancestorsNodes = iWbsTreeContractService.getBaseMapper().selectList(new QueryWrapper<WbsTreeContract>().in("p_key_id", Arrays.stream(wbsTreeContractNode.getAncestors().split(",")).toArray()).eq("contract_id", wbsTreeContractNode.getContractId()));
|
|
|
for (ParameterElement parameterElement : ParameterElementList) {
|
|
|
- Elements selects = doc.select("[placeholderxx='" + parameterElement.getElementName() + "']");
|
|
|
+ Elements selects;
|
|
|
+ if (parameterElement.getType() == 3) {
|
|
|
+ selects = doc.getElementsByAttributeValue("keyname",parameterElement.getElementName());
|
|
|
+ } else {
|
|
|
+ selects = doc.select("[placeholderxx='" + parameterElement.getElementName() + "']");
|
|
|
+ }
|
|
|
//元素库里存在表单的元素
|
|
|
if(selects.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对应不上");
|
|
|
+ String[] paramTypes;
|
|
|
+ if (parameterElement.getParameterId() != null) {
|
|
|
+ //用元素查出参数库
|
|
|
+ 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();
|
|
|
+ paramTypes = paramType.split(",");
|
|
|
+ } else {
|
|
|
+ String paramType = parameterElement.getParamType();
|
|
|
+ if (paramType == null || paramType.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ paramTypes = paramType.split(",");
|
|
|
}
|
|
|
- //需要获取的情况
|
|
|
- //拿到参数库的类型
|
|
|
- String paramType = parameter.getParamType();
|
|
|
- String[] paramTypes = paramType.split(",");
|
|
|
+
|
|
|
//根据参数的类型值,来获取不同的值 1-7是获取单位工程名称这些 8是获取划分编号 9是获取范围随机数
|
|
|
for (Element select : selects) {
|
|
|
StringBuilder result=new StringBuilder();
|
|
@@ -362,6 +426,22 @@ public class NodeBaseInfoServiceImpl extends BaseServiceImpl<NodeBaseInfoMapper,
|
|
|
s=s+wbsTreeContract.getPartitionCode();
|
|
|
}
|
|
|
result.append(s);
|
|
|
+ }else if(type.equals("9")) {
|
|
|
+ String parameter = parameterElement.getParameter();
|
|
|
+ if (parameter != null) {
|
|
|
+ JSONObject json = JSONObject.parseObject(parameter);
|
|
|
+ BigDecimal min = json.getBigDecimal("min");
|
|
|
+ BigDecimal max = json.getBigDecimal("max");
|
|
|
+ // 计算区间范围
|
|
|
+ BigDecimal range = max.subtract(min);
|
|
|
+
|
|
|
+ // 生成随机数并调整范围
|
|
|
+ BigDecimal randomFactor = new BigDecimal(Math.random());
|
|
|
+ BigDecimal randomValue = min.add(range.multiply(randomFactor));
|
|
|
+
|
|
|
+ // 设置精度和舍入模式 保留两位小数
|
|
|
+ result.append(randomValue.setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
map.put(select.attr("keyname"),result.toString());
|