yangyj пре 1 година
родитељ
комит
96ff5fe274

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

@@ -37,6 +37,15 @@ public class BaseUtils {
         return -1;
     }
 
+    public static  Double milestone(String s){
+        Pattern pattern=Pattern.compile("(?i)K(\\d+)\\+([\\d.]+)");
+        Matcher matcher = pattern.matcher(s);
+        if(matcher.find()){
+            return   Double.parseDouble(matcher.group(1))*1000+ Double.parseDouble(matcher.group(2));
+        }
+        return null;
+    }
+
 
     /**
      * @return java.util.Map<java.lang.String, java.lang.String>

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

@@ -35,6 +35,8 @@ public class CurrentNode {
     private Long wtpPkeyId;
     /**wbs_tree的流水号 需要溯源*/
     private Long wbsNodeId;
+    /**treeCode*/
+    private List<String> treeCode =new ArrayList<>();
     /**
      * 当前节点父级下所有子孙节点里所有的node_type in(6,4)节点的pkeyId
      * */

+ 12 - 3
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -848,10 +848,19 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
   }
 
 /*    public static void main(String[] args) {
-        *//*String s="003000004001000003";*//*
-        String s="00300";
-        treeCodeSplit(s).forEach(System.out::println);
+
+        System.out.println(milestone("k8+120.23"));
+
     }*/
 
+    public static  Double milestone(String s){
+        Pattern pattern=Pattern.compile("(?i)K(\\d+)\\+([\\d.]+)");
+        Matcher matcher = pattern.matcher(s);
+        if(matcher.find()){
+           return   Double.parseDouble(matcher.group(1))*1000+ Double.parseDouble(matcher.group(2));
+        }
+        return null;
+    }
+
 
 }

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

@@ -27,8 +27,6 @@ public interface ITurnPointCalculator {
         if (Func.isNotEmpty(data) && configMap != null) {
             /*重置*/
             levelInfo.reset();
-         /*   LevelInfo levelInfo = new LevelInfo();
-            levelInfo.setDx(g8pcfw);*/
             List<TurnPoint> tmp = new ArrayList<>();
             /*是否尝试初步补充数据*/
             boolean checked=true;
@@ -72,7 +70,6 @@ public interface ITurnPointCalculator {
         return Collections.emptyList();
     }
 
-
     /**判断是否保留原来的转点*/
     static boolean persist(List<TurnPoint> list){
         /*在补充计算之前进行完整性校验,如果成功则不会再生成任何新转点*/
@@ -254,6 +251,13 @@ public interface ITurnPointCalculator {
                     } else if (tp.getType().equals(TurnPoint.BMD)) {
                         /*水准点处理*/
                         tpHandlerBmd(tp);
+                         Double  milestone= info.getBmMap().get(tp.getName().trim());
+                         if(milestone!=null) {
+                             /*如果水准点包含里程信息就会启动距离计算转点 200米一个点,配合高差按多的那个算*/
+                             info.setDistance(true);
+                             /*设置初始里程*/
+                             info.setMilestone(milestone);
+                         }
                     }
                     /*把数据放到输出缓存*/
                     putCache(tp);
@@ -271,7 +275,6 @@ public interface ITurnPointCalculator {
         return Collections.emptyList();
     }
 
-
     static void tpHandlerBmd(TurnPoint tp){
         TurnPoint st = new TurnPoint(tp.getLevelInfo(), new HashMap<>());
         st.setBmd(tp.getBmd());
@@ -352,13 +355,52 @@ public interface ITurnPointCalculator {
             if (!tp.isVisible(negative)) {
                 result.addAll(tp.limit(negative));
             }
+            double x=tp.tooFar();
+            if(x>0){
+               /*距离超过两百米需要转点*/
+                List<TurnPoint>   closeZd=  info.getCloseZd();
+                TurnPoint last = closeZd.get(closeZd.size()-1);
+                 int n = (int)Math.ceil(x/200);
+                List<TurnPoint> list = new ArrayList<>();
+                for(int i=0;i<n;i++){
+                     TurnPoint zd = new TurnPoint(info, new HashMap<>());
+                     zd.setName("ZD"+closeZd.size());
+                     double dx = Math.random() * 0.07 * (RD.nextBoolean() ? -1 : 1);
+                     zd.setBmd(StringUtils.number2StringZero(Double.parseDouble(last.getBmd()) + dx, 3));
+                    double ddx = info.getSightHeight() - zd.getBmd0L();
+                    double xx = Math.abs(ddx);
+                    double small = BigDecimal.valueOf(r.nextDouble() * (info.getStep() - info.getMin() - xx) + info.getMin()).setScale(info.getScale(), ROUND_HALF_UP).doubleValue();
+                    double big = small + xx;
+                    if (ddx < 0) {
+                        /*后大前小,取高*/
+                        zd.setQ(small);
+                        zd.setH(big);
+                    } else {
+                        /*前大后小,趋低*/
+                        zd.setQ(big);
+                        zd.setH(small);
+                    }
+                    info.setSightHeight(zd.getBmd0L());
+                    zd.getDataMap().put(CD, zd.getName());
+                    zd.getDataMap().put(YG, zd.getBmd());
+                    zd.getDataMap().put(QS, zd.getQ());
+                    zd.getDataMap().put(HS, zd.getH());
+                    if(i==n-1) {
+                        /*最后一个重新计算前视,因为是微调所以不再判断高差是否在范围*/
+                        tp.setQ(info.getSightHeight() - tp.getSc0L());
+                    }
+                    list.add(zd);
+                }
+                if(list.size()>0){
+                    result.addAll(list);
+                    closeZd.addAll(list);
+                }
+            }
+
         }
 
     }
 
-
-
-
     /**验证当前测点数据的合理性*/
     static boolean finalizeCe(TurnPoint tp){
         if(Func.isNotBlank(tp.getSc())&&Func.isNotBlank(tp.getSj())&&Func.isNotBlank(tp.getQ())&&Func.isNotBlank(tp.getDx())){

+ 21 - 3
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/LevelInfo.java

@@ -1,8 +1,6 @@
 package org.springblade.manager.formula;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 
 /**
  * @author yangyj
@@ -58,6 +56,10 @@ public class LevelInfo implements  Cloneable {
     private boolean persist=false;
     /**是否开启距离转点模式,宝北项目隧道一个仪高点只能测量两百米范围的测点,超过就必须进行转点,所有需要配合桩号距离判断*/
     private boolean distance=false;
+    /**当前里程*/
+    private Double milestone;
+    /**测站点信息*/
+    private Map<String,Double> BmMap =new HashMap<>();
 
     public Double getBmdSj() {
         return bmdSj;
@@ -187,4 +189,20 @@ public class LevelInfo implements  Cloneable {
     public void setDistance(boolean distance) {
         this.distance = distance;
     }
+
+    public Map<String, Double> getBmMap() {
+        return BmMap;
+    }
+
+    public void setBmMap(Map<String, Double> bmMap) {
+        BmMap = bmMap;
+    }
+
+    public Double getMilestone() {
+        return milestone;
+    }
+
+    public void setMilestone(Double milestone) {
+        this.milestone = milestone;
+    }
 }

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

@@ -85,6 +85,8 @@ public class TurnPoint {
 
     /**是否有效*/
     private int isDeleted=0;
+    /**转点和闭合转点是点对点成对的*/
+    private TurnPoint peer;
 
 
     public TurnPoint(LevelInfo levelInfo, Map<String, Object> dataMap) {
@@ -287,9 +289,7 @@ public class TurnPoint {
     /**转点的核心处理算法,当测点不在测量范围会触发*/
     public List<TurnPoint> limit(Boolean negative) {
         List<TurnPoint> result = new ArrayList<>();
-        /*double step = levelInfo.getStep();*/
         /*负前视必须是表单传入,而非自动生成*/
-        /*boolean fake=(!negative&&getQ0L()<0);*/
         boolean overRange=(!negative&&getQ0L()<levelInfo.getMin()) || getQ0L() > levelInfo.getStep();
         if(StringUtils.isEmpty(getQ())||overRange){
             double q = (double) (r.nextInt(3000) + 500) / 1000;
@@ -311,6 +311,11 @@ public class TurnPoint {
             }
             result.add(tmp);
             levelInfo.getCloseZd().add(tmp.clone());
+            /*设置当前里程*/
+            if(levelInfo.isDistance()) {
+                /*没转一次点相当于往前推进两百米*/
+                levelInfo.setMilestone(levelInfo.getMilestone()+200);
+            }
             loop++;
         } while (hd > 0 && loop < 20);
         return result;
@@ -367,8 +372,7 @@ public class TurnPoint {
         }
     }
 
-    @Override
-    public TurnPoint clone() {
+    public TurnPoint clone()   {
         TurnPoint t = new TurnPoint();
         t.setName("ZD" + (this.levelInfo.getCloseZd().size() + 1));
         BeanUtils.copyProperties(this, t);
@@ -430,4 +434,24 @@ public class TurnPoint {
     public void setIsDeleted(int isDeleted) {
         this.isDeleted = isDeleted;
     }
+    public double tooFar(){
+        if(this.levelInfo.isDistance()){
+            Double x= BaseUtils.milestone(this.name);
+            if(x!=null) {
+                double a=  x-this.levelInfo.getMilestone();
+                if(a>=200){
+                   return a;
+                }
+            }
+        }
+        return 0;
+    }
+
+    public TurnPoint getPeer() {
+        return peer;
+    }
+
+    public void setPeer(TurnPoint peer) {
+        this.peer = peer;
+    }
 }

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

@@ -13,8 +13,10 @@ import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.formula.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Scope;
 import org.springframework.context.annotation.ScopedProxyMode;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.WebApplicationContext;
 
@@ -38,6 +40,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
     /**从节点参数获取G8偏差范围的公式脚本*/
     static final String F_DEV="WP['g8pcfw']";
 
+    private final JdbcTemplate jdbcTemplate;
+
     static {
         KEYS = new ArrayList<>(Arrays.asList(CD, YG, HS, QS, SC, SJ, GC, "备注"));
     }
@@ -83,6 +87,8 @@ public class FormulaTurnPoint implements FormulaStrategy {
                 info.setStep(4.6D);
                 info.setMin(0.4D);
             }
+            /*获取水准点里程*/
+            milestone(tec.getContractId(),info);
            /* 分组计算*/
             List<List<TurnPoint>> result = total.stream().map(e->ITurnPointCalculator.create(e,configMap,info)).collect(Collectors.toList());
             /*附加属性如:顶面和底面高程判断*/
@@ -95,6 +101,18 @@ 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){
+            Map<String,Double> bmMap = info.getBmMap();
+            listMaps.stream().filter(e->StringUtils.isNotEmpty(e.get("milestone"))).forEach(e->{
+                Double x=FormulaUtils.milestone(e.get("milestone").toString());
+                if(x!=null) {
+                    bmMap.put(e.get("name").toString().trim(),x);
+                }
+            });
+        }
+    }
 
     public List<Object> paginate( FormData cur,List<List<TurnPoint>> result,LinkedHashMap<String, String> configMap){
         int rowSize= cur.getCoordsList().size();
@@ -282,4 +300,5 @@ public class FormulaTurnPoint implements FormulaStrategy {
     }
 
 
+
 }

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

@@ -2,6 +2,7 @@ package org.springblade.manager.service;
 
 import org.jsoup.nodes.Document;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.core.tool.api.R;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.entity.Formula;
 import org.springblade.manager.entity.WbsInfo;
@@ -110,5 +111,6 @@ public interface IFormulaService extends BaseService<Formula> {
     /**表单数据加载的时候执行节点参数*/
     void paramFormula(WbsTreeContract wbsTreeContract, Map<String, Object> result, Document document);
 
-
+    /**表单数据加载的时候执行节点参数*/
+    R<Object> pd(Long pkeyId);
 }

+ 22 - 17
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -542,6 +542,9 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                 currentNode.setWbsId(Long.parseLong(publicWtp.getWbsId()));
                 currentNode.setWtpPkeyId(wtp.getPKeyId());
                 currentNode.setWbsNodeId(publicWtp.getId());
+                if(Func.isNotBlank(wtc.getTreeCode())){
+                    currentNode.getTreeCode().addAll(FormulaUtils.treeCodeSplit(wtc.getTreeCode()));
+                }
                 return currentNode;
             }
         }
@@ -1695,23 +1698,25 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                             if ((myData.indexOf("https") >= 0 || myData.indexOf("http") >= 0) && myData.indexOf("aliyuncs") >= 0) {
 
                                 InputStream imageIn = CommonUtil.getOSSInputStream(myData);
-                                byte[] byteNew = IOUtils.toByteArray(imageIn);
-                                byte[] bytes = CommonUtil.compressImage(byteNew);
-                                // 这里根据实际需求选择图片类型
-                                int pictureIdx = workbook.addPicture(bytes, 6);
-                                CreationHelper helper = workbook.getCreationHelper();
-                                ClientAnchor anchor = helper.createClientAnchor();
-                                anchor.setCol1(x1); // param1是列号
-                                anchor.setCol2(x2);
-                                anchor.setRow1(y1); // param2是行号
-                                anchor.setRow2(y2); // param2是行号
-                                //
-                                Drawing drawing = sheet.createDrawingPatriarch();
-                                anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
-                                // 插入图片
-                                Picture pict = drawing.createPicture(anchor, pictureIdx); // 调整图片占单元格百分比的大小,1.0就是100%
-                                pict.resize(1, 1);
-                                FileUtils.imageOrientation(sheet, anchor, new DataVO(x1 - 1, y1 - 1));
+                                if(imageIn!=null) {
+                                    byte[] byteNew = IOUtils.toByteArray(imageIn);
+                                    byte[] bytes = CommonUtil.compressImage(byteNew);
+                                    // 这里根据实际需求选择图片类型
+                                    int pictureIdx = workbook.addPicture(bytes, 6);
+                                    CreationHelper helper = workbook.getCreationHelper();
+                                    ClientAnchor anchor = helper.createClientAnchor();
+                                    anchor.setCol1(x1); // param1是列号
+                                    anchor.setCol2(x2);
+                                    anchor.setRow1(y1); // param2是行号
+                                    anchor.setRow2(y2); // param2是行号
+                                    //
+                                    Drawing drawing = sheet.createDrawingPatriarch();
+                                    anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE);
+                                    // 插入图片
+                                    Picture pict = drawing.createPicture(anchor, pictureIdx); // 调整图片占单元格百分比的大小,1.0就是100%
+                                    pict.resize(1, 1);
+                                    FileUtils.imageOrientation(sheet, anchor, new DataVO(x1 - 1, y1 - 1));
+                                }
 
                             } else if (data.tagName().equals("hc-form-checkbox-group")) {
                                 Row row = sheet.getRow(y1 - 1);

+ 12 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java

@@ -2357,7 +2357,18 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
     }
 
-
+    @Override
+    public R<Object> pd(Long pkeyId) {
+        if(StringUtils.isNumber(pkeyId)) {
+            WbsTreeContract wtc= this.getSqlOne("select tree_code treeCode,contract_id from m_wbs_tree_contract where p_key_id =" + pkeyId,WbsTreeContract.class);
+            LinkedList<String> treeCode = new LinkedList<>(FormulaUtils.treeCodeSplit(wtc.getTreeCode()));
+            List<FormulaDataBlock> formulaDataBlocks = this.getSqlList("select a.* from m_formula_data_block a join (select parent_id from m_wbs_tree_contract where tree_code like '"+treeCode.getLast()+"%' and contract_id ="+wtc.getContractId()+" and major_data_type=2 and is_deleted=0 ORDER BY tree_code)b on a.sw_id=b.parent_id ",FormulaDataBlock.class);
+            if(formulaDataBlocks.size()>0){
+                return R.data(formulaDataBlocks);
+            }
+        }
+        return R.fail("无数据");
+    }
 
 }
 

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

@@ -98,6 +98,7 @@ public class WbsParamServiceImpl extends BaseServiceImpl<WbsParamMapper, WbsPara
                         parentId=t.getParentId();
                     }
                 }
+                Collections.reverse(list);
                 list.add(one);
             }else {
                 list.add(one);