Explorar el Código

treeCode、距离转点、分部评定

yangyj hace 1 año
padre
commit
8c7e75b0c3
Se han modificado 14 ficheros con 152 adiciones y 41 borrados
  1. 1 0
      blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java
  2. 4 1
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdate.java
  3. 64 28
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdateAspect.java
  4. 8 0
      blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArgType.java
  5. 1 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/TreeNode.java
  6. 6 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java
  7. 2 2
      blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java
  8. 27 4
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  9. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsParamController.java
  10. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/ITurnPointCalculator.java
  11. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/TurnPoint.java
  12. 1 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java
  13. 32 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  14. 3 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java

+ 1 - 0
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -302,4 +302,5 @@ public class BaseUtils {
 
 
 
+
 }

+ 4 - 1
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdate.java

@@ -1,5 +1,7 @@
 package org.springblade.business.entity;
 
+import org.springblade.business.vo.ArgType;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -12,5 +14,6 @@ import java.lang.annotation.Target;
 @Target(ElementType.METHOD)
 @Retention(RetentionPolicy.RUNTIME)
 public @interface TreeCodeUpdate {
-    String name() default "";
+    ArgType type() default ArgType.CID;
+    String  value() default "";
 }

+ 64 - 28
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/TreeCodeUpdateAspect.java

@@ -6,14 +6,27 @@ import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.springblade.business.vo.AddContractTreeNodeVO;
+import org.springblade.business.vo.ArgType;
+import org.springblade.business.vo.CopyContractTreeNodeVO;
+import org.springblade.common.utils.BaseUtils;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * @author yangyj
@@ -32,36 +45,59 @@ public class TreeCodeUpdateAspect {
 
     @Around("p()")
     public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
-        Object result = null;
-        try {
-            Object[] args = joinPoint.getArgs();
-             Map<String,Object> paramsMap=  BeanUtil.toMap(args[0]);
-            String  tcu= this.redisTemplate.opsForValue().get("tcu");
-            if(paramsMap.containsKey("contractId")){
-                  if(Func.isNotBlank(tcu)){
-                      tcu=tcu+","+paramsMap.get("contractId");
-                  }
-             }else if(paramsMap.containsKey("needCopyPrimaryKeyId")){
-                List<Map<String,Object>> listMap=  jdbcTemplate.queryForList("select contract_id contractId from m_wbs_tree_contract where p_key_id ="+paramsMap.get("needCopyPrimaryKeyId"));
-                if(listMap.size()>0){
-                    if(Func.isNotBlank(tcu)){
-                        tcu=tcu+","+listMap.get(0).get("contractId");
-                    }else{
-                        tcu=listMap.get(0).get("contractId").toString();
-                    }
-                }
-             }
-            if(tcu!=null) {
-                this.redisTemplate.opsForValue().set("tcu", tcu);
-            }
-            result= joinPoint.proceed();
-        }catch (Exception e){
-            e.printStackTrace();
-        }
-        /*System.out.println("treeCode刷新标识:执行一次就+1,后台定时检查到超阈值则执行刷新");*/
-        return result;
+        tcuCache(joinPoint);
+        /*System.out.println("treeCode刷新标识:每隔三十秒监控到标识则执行刷新");*/
+        return joinPoint.proceed();
     }
 
 
+     private void tcuCache(ProceedingJoinPoint jp){
+         try{
+             String  tcu= this.redisTemplate.opsForValue().get("tcu");
+             String  contractId=getContractId(jp);
+             if(Func.isNotBlank(tcu)){
+                 tcu=tcu+","+contractId;
+             }else{
+                 tcu=contractId;
+             }
+             if(tcu!=null) {
+                 this.redisTemplate.opsForValue().set("tcu", tcu);
+             }
+         }catch (Exception e){
+             e.printStackTrace();
+         }
+
+     }
+
+     private String getContractId(ProceedingJoinPoint jp){
+         String value = null;
+         Object[] args = jp.getArgs();
+         MethodSignature signature = (MethodSignature) jp.getSignature();
+         Method method = signature.getMethod();
+         TreeCodeUpdate annotation = method.getAnnotation(TreeCodeUpdate.class);
+         if (args.length > 0) {
+             value  = spEl(method,args,annotation.value());
+             if(value!=null) {
+                 if (ArgType.PKD.equals(annotation.type())) {
+                     List<Map<String, Object>> listMap = jdbcTemplate.queryForList("select contract_id contractId from m_wbs_tree_contract where p_key_id =" + value);
+                     if (listMap.size() > 0) {
+                         value= listMap.get(0).get("contractId").toString();
+                     }
+                 }
+             }
+         }
+         return value;
+     }
+     /**解析spEL表达式*/
+     private String spEl(Method method ,Object[] args,String el){
+         ExpressionParser parser = new SpelExpressionParser();
+         EvaluationContext context = new StandardEvaluationContext();
+         for (int i=0;i<method.getParameterCount();i++) {
+             Parameter parameter =  method.getParameters()[i];
+             context.setVariable(parameter.getName(),args[i]);
+         }
+        return Func.toStr(parser.parseExpression(el).getValue(context));
+     }
+
 
 }

+ 8 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ArgType.java

@@ -0,0 +1,8 @@
+package org.springblade.business.vo;
+
+public enum ArgType {
+    /**合同段id*/
+    CID,
+    /**pkeyId*/
+    PKD
+}

+ 1 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/dto/TreeNode.java

@@ -15,6 +15,7 @@ public class TreeNode<T> {
        private Long parentId;
        private T value;
        private String name;
+       private int sort;
        private List<TreeNode<T>> children=new ArrayList<>();
        public boolean hasChildren(){
           return !children.isEmpty();

+ 6 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/FB02.java

@@ -51,6 +51,12 @@ public class FB02 {
         }
     }
 
+    public Integer getPageNum(){
+        if(this.name!=null){
+          return  this.name.getValues().size()/this.name.getCoordsList().size();
+        }
+        return null;
+    }
 
     public void addItem(String subItem,String name,Double passRate, Integer weight){
           this.datas.add(new Item(subItem, name, passRate, weight));

+ 2 - 2
blade-service/blade-business/src/main/java/org/springblade/business/controller/InformationWriteQueryController.java

@@ -1370,7 +1370,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/copyContractTreeNode")
     @ApiOperationSupport(order = 15)
     @ApiOperation(value = "复制节点(新)")
-    @TreeCodeUpdate(name = "pkeyId_${vo.primaryKeyId}")
+    @TreeCodeUpdate(type =ArgType.PKD,value="#vo.needCopyPrimaryKeyId")
     public R<Boolean> copyContractTreeNode(@RequestBody CopyContractTreeNodeVO vo) {
         //表单所属方
         String tabOwner = "";
@@ -2954,7 +2954,7 @@ public class InformationWriteQueryController extends BladeController {
     @PostMapping("/saveContractTreeNode")
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "新增节点及其子节点")
-    @TreeCodeUpdate(name = "contractId_${vo.contractId}")
+    @TreeCodeUpdate(type=ArgType.CID,value = "#vo.contractId")
     public R<Boolean> saveContractTreeNode(@RequestBody AddContractTreeNodeVO vo) {
         //先获取当前节点的信息
         WbsTreeContract treeContract = this.wbsTreeContractClient.getContractWbsTreeByPrimaryKeyId(Long.parseLong(vo.getCurrentNodePrimaryKeyId()));

+ 27 - 4
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -34,15 +34,14 @@ import org.jfree.data.xy.XYSeriesCollection;
 import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.springblade.common.utils.BaseUtils;
-import org.springblade.core.tool.utils.CollectionUtil;
-import org.springblade.core.tool.utils.Func;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.core.tool.utils.StringPool;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.tool.utils.*;
 import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.dto.LocalVariable;
 import org.springblade.manager.entity.Formula;
+import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.formula.NodeTable;
 import org.springblade.manager.utils.FileUtils;
 import reactor.core.publisher.Mono;
@@ -853,6 +852,7 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
 
     }*/
 
+    /*从测点名称中获取里程*/
     public static  Double milestone(String s){
         Pattern pattern=Pattern.compile("(?i)K(\\d+)\\+([\\d.]+)");
         Matcher matcher = pattern.matcher(s);
@@ -862,5 +862,28 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
         return null;
     }
 
+    /*复制表页*/
+    public static  WbsTreeContract copyPage(WbsTreeContract origin){
+        WbsTreeContract target = new WbsTreeContract();
+        BeanUtil.copy(origin, target);
+        target.setPKeyId(SnowFlakeUtil.getId());
+        target.setCreateTime(new Date());
+        String nodeName = origin.getNodeName();
+        String[] oldName = nodeName.split("__");
+        if (oldName.length>1) {
+            nodeName = oldName[0] + "__" + (Integer.parseInt(oldName[1]) + 1);
+        } else {
+            nodeName = nodeName + "__" + 1;
+        }
+        target.setNodeName(nodeName);
+        target.setIsCopeTab(2);
+        target.setIsTabPdf(1); // pdf 不能预览
+        target.setIsBussShow(1); // 是否隐藏表
+        target.setTabFileType(1);//没有上传附件
+        target.setPdfUrl("");
+        return target;
+    }
+
+
 
 }

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

@@ -600,7 +600,7 @@ public class WbsParamController {
         }
     }
 
-    @Scheduled(fixedDelay = 30000)
+    @Scheduled(initialDelay = 100000,fixedDelay = 30000)
     public  void monitor(){
         /*System.out.println("treeCode刷新检测"+ LocalDateTime.now());*/
         try {

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

@@ -356,7 +356,7 @@ public interface ITurnPointCalculator {
                 result.addAll(tp.limit(negative));
             }
             double x=tp.tooFar();
-            if(x>0){
+            if(x!=0){
                /*距离超过两百米需要转点*/
                 List<TurnPoint>   closeZd=  info.getCloseZd();
                 TurnPoint last = closeZd.get(closeZd.size()-1);

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

@@ -442,7 +442,7 @@ public class TurnPoint {
             Double x= BaseUtils.milestone(this.name);
             if(x!=null) {
                 double a=  x-this.levelInfo.getMilestone();
-                if(a>=200){
+                if(Math.abs(a)>=200){
                    return a;
                 }
             }

+ 1 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/FormulaTurnPoint.java

@@ -101,6 +101,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
         }
     }
 
+    /*尝试获取水准点桩号*/
     public void milestone(Long contractId,LevelInfo info){
         List<Map<String,Object>> listMaps= this.jdbcTemplate.queryForList("select name,milestone from t_om_datum_point where contract_id ="+contractId);
         if(listMaps.size()>0){

+ 32 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -3,6 +3,7 @@ package org.springblade.manager.service.impl;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.date.StopWatch;
 import cn.hutool.core.util.HashUtil;
 import cn.hutool.log.StaticLog;
@@ -40,6 +41,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.WebApplicationContext;
 import javax.validation.constraints.NotNull;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -1517,7 +1519,35 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
        /*复制最后一页只有一个单元格的存在内容的元素*/
     }
 
-
+    /*调整页数并返回当所有页*/
+   public List<WbsTreeContract>  adjustPageSize(int pageSizeNow,WbsTreeContract wtc){
+         List<WbsTreeContract> list =this.wbsTreeContractService.list(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getInitTableName,wtc.getInitTableName()).eq(WbsTreeContract::getContractId,wtc.getContractId()).eq(WbsTreeContract::getParentId,wtc.getParentId()).orderByDesc(WbsTreeContract::getCreateTime));
+        int length=list.size();
+         if(pageSizeNow!=length){
+                 int dx = pageSizeNow-length;
+                 if(dx>0) {
+                     /*加页*/
+                     WbsTreeContract origin = list.get(length - 1);
+                     if (origin != null) {
+                         List<WbsTreeContract>  saveList = new ArrayList<>();
+                         for (int i = 0; i < dx; i++) {
+                             WbsTreeContract target = FormulaUtils.copyPage(origin);
+                             saveList.add(target);
+                         }
+                         this.wbsTreeContractService.saveOrUpdateBatch(saveList);
+                         list.addAll(saveList);
+                     }
+                 }else{
+                    /*删页*/
+                     int cut = length+dx;
+                     List<Long> removeList = list.stream().skip(cut).map(WbsTreeContract::getPKeyId).collect(Collectors.toList());
+                     List<WbsTreeContract> remain = list.subList(0,cut);
+                     this.wbsTreeContractService.update(Wrappers.<WbsTreeContract>lambdaUpdate().set(WbsTreeContract::getIsDeleted,1).in(WbsTreeContract::getPKeyId,removeList));
+                     return remain;
+                 }
+          }
+         return list;
+   }
 
     @Override
     public void format() {
@@ -2389,7 +2419,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                     Map<String,String> tableKeysCoordsMap= FormulaUtils.getElementCell(wtc.getHtmlUrl());
                     fb02.initFdCoords(tableKeysCoordsMap);
                     /*根据数据长度,增减页数*/
-
+                    this.adjustPageSize(10,wtc);
                  }
                 return R.success("成功");
             }

+ 3 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsParamServiceImpl.java

@@ -287,7 +287,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
     }
 
     public void builder(Long id,List<String>sqlList){
-        List<Map<String,Object>> treeNodeList= this.jdbcTemplate.queryForList("select node_name name,p_key_id value, id, parent_id parentId from m_wbs_tree_contract where contract_id="+id+" and is_deleted=0 and type=1 ");
+        List<Map<String,Object>> treeNodeList= this.jdbcTemplate.queryForList("select node_name name,p_key_id value, id, parent_id parentId,sort  from m_wbs_tree_contract where contract_id="+id+" and is_deleted=0 and type=1 order by sort,create_time");
         if(treeNodeList.size()>0){
             Map<Long, TreeNode<Long>> treeNodeMap = new HashMap<>(treeNodeList.size()*2);
             Long topId=null;
@@ -297,6 +297,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
                 treeNode.setParentId(Long.parseLong(map.get("parentId").toString()));
                 treeNode.setValue(Long.parseLong(map.get("value").toString()));
                 treeNode.setName(map.get("name").toString());
+                treeNode.setSort(Func.toInt(map.get("sort")));
                 if(treeNode.getParentId().equals(0L)){
                     topId=treeNode.getId();
                 }
@@ -306,6 +307,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
             group.forEach((k,v)->{
                 TreeNode<Long> tmp = treeNodeMap.get(k);
                 if(tmp!=null) {
+                    v=v.stream().sorted(Comparator.comparingInt(TreeNode::getSort)).collect(Collectors.toList());
                     tmp.setChildren(v);
                 }
             });