Sfoglia il codice sorgente

设置自动获取数据记录保存

lvy 1 mese fa
parent
commit
c1eb552e61

+ 10 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/entity/ParameterElement.java

@@ -58,6 +58,16 @@ public class ParameterElement extends BaseEntity {
 	*/
 		private String contractId;
 
+	private String nodeId;
 
+	/**
+	 * 参数类型
+	 */
+	private String paramType;
+
+	/**
+	 * 参数
+	 */
+	private String parameter;
 
 }

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

@@ -209,6 +209,9 @@ public class WbsTreeContract extends BaseEntity {
     @ApiModelProperty(value = "原id,如果当前字段有数据则说明这条数据是复制节点")
     private String oldId;
 
+    @ApiModelProperty(value = "被复制节点p_key_id")
+    private String copyPkId;
+
     /**
      * 表单是否上传附件1否
      */

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

@@ -1652,6 +1652,7 @@ public class ExcelTabController extends BladeController {
         wbsTreeContract.setPKeyId(newPkId);
         wbsTreeContract.setCreateTime(new Date());
         wbsTreeContract.setTabGroupId(tabGroupId);
+        wbsTreeContract.setCopyPkId(wbsInfo.getCopyPkId() == null ? pkeyId + "" : wbsInfo.getCopyPkId());
         String nodeName;
         nodeName = wbsTreeContractList2.get(wbsTreeContractList2.size() - 1).getNodeName();
         if (nodeName.indexOf("__") >= 0) {

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

@@ -247,8 +247,8 @@ public class NodeBaseInfoController extends BladeController {
     @GetMapping("/getNodeBaseInfoByPkeyId")
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "设置自动获取", notes = "pkeyId表单Id,nodeId节点Id")
-    public R getNodeBaseInfoByPkeyId(@RequestParam Long pkeyId, @RequestParam Long nodeId, @RequestParam String autoType,@RequestParam(required = false) BigDecimal min,@RequestParam(required = false)BigDecimal max){
-        return R.data(nodeBaseInfoService.getNodeBaseInfoByPkeyId(pkeyId,nodeId,autoType,min,max));
+    public R getNodeBaseInfoByPkeyId(@RequestParam Long pkeyId, @RequestParam Long nodeId, @RequestParam String autoType, @RequestParam(required = false) String paramName,@RequestParam(required = false) BigDecimal min,@RequestParam(required = false)BigDecimal max){
+        return R.data(nodeBaseInfoService.getNodeBaseInfoByPkeyId(pkeyId,nodeId,autoType, paramName,min,max));
     }
 
 	@GetMapping("/getAllNodeBaseInfoByPkeyId")

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

@@ -43,7 +43,7 @@ public interface INodeBaseInfoService extends BaseService<NodeBaseInfo> {
 
     NodeBaseInfo getOrSaveNodeBaseInfo(Long pKeyId);
 
-    Object getNodeBaseInfoByPkeyId(Long pkeyId, Long nodeId, String autoType, BigDecimal min,BigDecimal max);
+    Object getNodeBaseInfoByPkeyId(Long pkeyId, Long nodeId, String autoType, String paramName, BigDecimal min, BigDecimal max);
 
 	Map<String,Object> getAllNodeBaseInfoByPkeyId(Long pkeyId,Long nodeId) throws Exception;
 }

+ 106 - 26
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/NodeBaseInfoServiceImpl.java

@@ -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());