ソースを参照

Merge branch 'master' of http://47.110.251.215:3000/java_org/bladex

huangtf 2 年 前
コミット
c345308118

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

@@ -402,39 +402,17 @@ public class WbsParamController {
                     /*project*/
                     elementMap = this.jdbcTemplate.queryForList(
                             "select c.e_name as name ,c.id from m_wbs_tree_private a " +
-                                    "inner join m_wbs_tree_private b on (a.id=b.parent_id and a.wbs_id=b.wbs_id) " +
+                                    "inner join m_wbs_tree_private b on (a.id=b.parent_id and a.project_id=b.project_id) " +
                                     "inner join m_wbs_form_element c on  b.init_table_id=c.f_id " +
                                     "where  b.project_id=" + projectId + " and a.p_key_id=" + nodeId + "  and b.is_deleted=0 and c.is_deleted=0 ");
                 }
 
                 List<Long> longList = this.jdbcTemplate.queryForList("select element_id from m_element_formula_mapping where is_deleted=0 and scope=35 and param_id in(" + paramList.stream().map(WbsParam::getId).map(String::valueOf).collect(Collectors.joining(",")) + ")", Long.class);
                 if (Func.isNotEmpty(elementMap)) {
-//                    Map<String, Object> tmpMap = new HashMap<>();
                     List<Map<String, Object>> finalElementMap = elementMap;
                     Map<String,Long> fkMap = this.service.formulaIdKeyMap(paramList.stream().map(WbsParam::getK).collect(Collectors.toList()));
                     paramList.forEach(e -> {
                         /*复用节点参数公式,只要公式脚本一样就直接引用*/
-//                        Formula formula = this.formulaService.getOne(Wrappers.<Formula>lambdaQuery().eq(Formula::getParamId, e.getId()));
-//                        if (formula == null) {
-//                            formula = new Formula();
-//                            formula.setOutm(Formula.FULL);
-//                            formula.setParamId(e.getId());
-//                            Map<String, String> keyMap = new HashMap<>();
-//                            keyMap.put("name", e.getName());
-//                            keyMap.put("id", e.getId().toString());
-//                            tmpMap.put(e.getK(), keyMap);
-//                            if (RegexUtil.match(ParamElements.LEVEL_REG, e.getV().trim())) {
-//                                /*取层级*/
-//                                formula.setFormula("FC.tree(trees,WP[" + e.getK() + "])");
-//                            } else {
-//                                /*直接取数*/
-//                                formula.setFormula("WP[" + e.getK() + "]");
-//                            }
-//                            formula.setMap(JSON.toJSONString(tmpMap));
-//                            this.formulaService.save(formula);
-//                            tmpMap.clear();
-//                        }
-//                        Formula finalFormula = formula;
                         String name = e.getName().replace("【水】", "").trim();
                         finalElementMap.forEach(m -> {
                             if (StringUtils.handleNull(m.get("name")).contains(name)) {
@@ -535,8 +513,8 @@ public class WbsParamController {
         }
     }
 
-    @GetMapping("/test")
-    public R<Object> test() {
+    @GetMapping("/createFormulaForWp")
+    public R<Object> createFormulaForWp() {
           /*刷模版公式*/
         List<WbsParam> list =service.list(Wrappers.<WbsParam>lambdaQuery().eq(WbsParam::getType,0));
         Map<String, Object> tmpMap = new HashMap<>();
@@ -556,6 +534,29 @@ public class WbsParamController {
           return R.success("完成");
     }
 
+    @GetMapping("/reMappingProjectAll")
+    public R<Object> reMappingProjectAll(Long projectId){
+        if(projectId==null){
+            return R.fail("请输入项目id");
+        }
+        List<Map<String,Object>> listMaps= this.jdbcTemplate.queryForList(" select p_key_id pkeyId,full_name name from m_wbs_tree_private where is_deleted = 0 and project_id="+projectId+" and node_type=6");
+        if(listMaps.size()>1){
+            int total = listMaps.size();
+            int count=0;
+            for(Map<String,Object> map:listMaps){
+                try {
+                    Long nodeId= Long.parseLong(map.get("pkeyId").toString());
+                    refresh(nodeId,1,projectId);
+                    count++;
+                }catch (Exception e){
+                    System.out.println(map.get("name")+"节点参数刷新失败");
+                    e.printStackTrace();
+                }
+            }
+           return  R.success("刷新"+total+"节点,成功"+count+"节点");
+        }
+        return R.fail("刷新失败");
+    }
 
     @GetMapping("/lack")
     public R<Object> lack(String name) {

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

@@ -355,28 +355,45 @@ public interface ITurnPointCalculator {
     }
     static void tpHandlerCe(List<TurnPoint> result,LevelInfo info ,TurnPoint tp){
         if(!finalizeCe(tp)) {
+            /*负前视,用于判断是否使用倒尺计算*/
+            boolean negative = tp.isNegativeQ();
             if (StringUtils.isNotEmpty(tp.getSc())) {
                 if (StringUtils.isNotEmpty(tp.getSj())) {
                     tp.setDx(tp.getSc0L() - tp.getSj0L());
                 }
-                tp.setQ(info.getSightHeight() - tp.getSc0L());
+                if (StringUtils.isEmpty(tp.getQ())) {
+                    tp.setQ(info.getSightHeight() - tp.getSc0L());
+                }
             } else if (StringUtils.isNotEmpty(tp.getSj())) {
-                String dx = rangeList(1, 0, info.getDx(), 1, 0, 1).get(0).toString();
-                tp.setDx(dx);
-                tp.setSc(tp.getSj0L() + tp.getDx0L());
-                tp.setQ(info.getSightHeight() - tp.getSc0L());
+                if(StringUtils.isEmpty(tp.getDx())) {
+                    String dx = rangeList(1, 0, info.getDx(), 1, 0, 1).get(0).toString();
+                    tp.setDx(dx);
+                }
+                if(StringUtils.isNotEmpty(tp.getQ())){
+                    tp.setSc(info.getSightHeight()-tp.getQ0L());
+                    tp.setDx(tp.getSj0L()-tp.getSj0L());
+                }else{
+                    tp.setSc(tp.getSj0L() + tp.getDx0L());
+                    tp.setQ(info.getSightHeight() - tp.getSc0L());
+                }
             } else if (StringUtils.isNotEmpty(tp.getQ())) {
                 tp.setSc(info.getSightHeight() - tp.getQ0L());
                 if (tp.getSj() != null) {
                     tp.setDx(tp.getSj0L() - tp.getSj0L());
+                }else if(StringUtils.isNotEmpty(tp.getDx())){
+                    tp.setSj(tp.getSc0L()-tp.getDx0L());
                 }
             }
+            if (!tp.isVisible(negative)) {
+                result.addAll(tp.limit(negative));
+            }
         }
-        if (!tp.isVisible()) {
-            result.addAll(tp.limit());
-        }
+
     }
 
+
+
+
     /**验证当前测点数据的合理性*/
     static boolean finalizeCe(TurnPoint tp){
         if(Func.isNotBlank(tp.getSc())&&Func.isNotBlank(tp.getSj())&&Func.isNotBlank(tp.getQ())&&Func.isNotBlank(tp.getDx())){
@@ -384,7 +401,7 @@ public interface ITurnPointCalculator {
             boolean f1= tp.getSc0L()==tp.getLevelInfo().getSightHeight()-tp.getQ0L();
             /*实测高程-设计值高程=偏差值*/
             boolean f2=tp.getSc0L()-tp.getSj0L()==tp.getDx0L();
-            return f1&&f2;
+            return f1&&f2&&tp.isVisible(tp.isNegativeQ());
         }
         return false;
     }

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

@@ -1,5 +1,6 @@
 package org.springblade.manager.formula;
 
+import com.alibaba.fastjson.JSON;
 import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
 import org.springframework.beans.BeanUtils;
@@ -228,13 +229,16 @@ public class TurnPoint {
         return levelInfo.getSightHeight() >= getBmd0L();
     }
 
-    public Boolean isVisible() {
+    public Boolean isVisible(Boolean negative) {
         /*只有测点落在0.5到step之间才有效,负数前视取绝对值*/
+        if(!StringUtils.isNumber(q)){
+            return false;
+        }
         double d = getQ0L();
-        if(d<0){
+        if(negative){
             d=  Math.abs(d);
         }
-        return d >= levelInfo.getMin() && d <= levelInfo.getStep();
+        return d >= levelInfo.getMin() && d <= levelInfo.getStep()&&levelInfo.getSightHeight()-getQ0L()==getSc0L();
     }
 
     public Boolean needClose() {
@@ -242,24 +246,43 @@ public class TurnPoint {
     }
 
     public static void test() {
-        for (int i = 0; i < 100; i++) {
+        for (int i = 0; i < 3; i++) {
             LevelInfo info = new LevelInfo();
-            info.setSightHeight(144.228);
+            info.setSightHeight(401.817+0.454);
             TurnPoint tp = new TurnPoint(info, new HashMap<>());
-            tp.setSc(138.981);
-            System.out.println("第" + (i + 1) + "次");
-            System.out.println(tp.limit().stream().map(TurnPoint::getBmd0L).collect(Collectors.toList()));
+            tp.setQ(0.619);
+            tp.setSc(405.546);
+            if(!tp.isVisible(false)) {
+                System.out.println("第" + (i + 1) + "次");
+                System.out.println(tp.limit(false).stream().map(e -> "{" + e.getQ() + "," + e.getBmd() + "," + e.getH() + "}").collect(Collectors.toList()) + "{" + tp.getQ() + "," + tp.getSc() + "," + tp.getSj() + "}");
+            }else{
+                System.out.println( "{" + tp.getQ() + "," + tp.getSc() + "," + tp.getSj() + "}");
+            }
+
         }
     }
 
+    public Boolean isNegativeQ(){
+        return StringUtils.isNumber(q)&&getQ0L()<0;
+    }
+
+/*    public static void main(String[] args) {
+        test();
+    }*/
+
     public static Random r = new Random();
     /*转点的核心处理算法,当测点不在测量范围会触发*/
-    public List<TurnPoint> limit() {
+    public List<TurnPoint> limit(Boolean negative) {
         List<TurnPoint> result = new ArrayList<>();
         double step = levelInfo.getStep();
-        double q = (double) (r.nextInt(30) + 5) / 10;
-        setQ(q);
-        double target = q + getSc0L();
+        /*负前视必须是表单传入,而非自动生成*/
+        /*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;
+            setQ(q);
+        }
+        double target = getQ0L() + getSc0L();
         double hd = Math.abs(target - levelInfo.getSightHeight());
         boolean higher = target > levelInfo.getSightHeight();
         int loop = 0;

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

@@ -778,7 +778,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                                 em.put(se.getKey(),StringUtils.handleObj2Integer(value));
                                             }
                                         }else{
-                                            em.put(se.getKey(),value);
+                                            em.put(se.getKey(),StringUtils.handleNull(value).replaceAll("[ ]+","").trim());
                                         }
 
                                     }

+ 68 - 28
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/MixProportionInfoServiceImpl.java

@@ -139,33 +139,55 @@ public class MixProportionInfoServiceImpl extends BaseServiceImpl<MixProportionI
         String url = baseMapper.getExcelUrlByPKeyId(dto.getKeyId());
         // 读取html页面信息
         File file1 = ResourceUtil.getFile(url);
-//        File file1 = ResourceUtil.getFile("C:\\Users\\泓创研发01\\Desktop\\privateUrl\\1694957051815395328.html");
+//        File file1 = ResourceUtil.getFile("C:\\Users\\泓创研发01\\Desktop\\privateUrl\\1696079664109322240.html");
         FileInputStream inputStream = new FileInputStream(file1);
         String htmlString = IoUtil.readToString(inputStream);
         Document doc = Jsoup.parse(htmlString);
         Element table = doc.select("table").first();
         Elements td = table.select("td");
-        Boolean isFiled = false;
-        String key = "";
+        String key1 = "";
+        String key2 = "";
+        String key3 = "";
+        String key4 = "";
+        String key5 = "";
+        String key6 = "";
+        String key7 = "";
+        String key8 = "";
+        String key9 = "";
         for (Element element : td) {
-            if (isFiled){
-                key = element.childNodes().get(1).attr("keyname");
-                break;
-            }
-            if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(element.text()) && element.text().equals("施工配合比")){
-                isFiled = true;
+            if (element.childNodes().size() >= 2) {
+                String str = element.childNodes().get(1).attr("placeholder");
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_水泥")) {
+                    key1 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_碎(卵)石1")) {
+                    key2 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_碎(卵)石2")) {
+                    key3 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_碎(卵)石3")) {
+                    key4 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_砂")) {
+                    key5 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_水")) {
+                    key6 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_外掺(料)剂1")) {
+                    key7 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_外掺(料)剂2")) {
+                    key8 = element.childNodes().get(1).attr("keyname");
+                }
+                if (StringUtils.isNotBlank(str) && str.equals("施工配合比_每立方米混凝土材料用量(kg)_外掺(料)剂3")) {
+                    key9 = element.childNodes().get(1).attr("keyname");
+                }
             }
+
         }
-        if (!isFiled){
-            inputStream.close();
-            return R.data(null);
-        }
-        //获取位置前缀后缀
-        String prefix= key.replaceAll("__[\\d_]+", "");
-        String suffix = key.replaceAll("key_\\d+__", "");
-        String[] split = suffix.split("_");
-        String s1 = split[0];
-        Integer s2 = Integer.parseInt(split[1]);
+
         //结果集
         Map<String,BigDecimal> map = new HashMap<>();
         //获取配合比信息
@@ -186,49 +208,67 @@ public class MixProportionInfoServiceImpl extends BaseServiceImpl<MixProportionI
             sand = dto.getSand().divide(new BigDecimal(100)).multiply(info.getSand());
             //黄砂
             BigDecimal sand2 = info.getSand().add(sand);
-            map.put(prefix + "__" + s1 + "_" + (s2 + 1), sand2);
+            if (StringUtils.isNotBlank(key5)) {
+                map.put(key5, sand2);
+            }
         }
         //碎石1
         if (dto.getMacadamOne() != null) {
             macadamOne = dto.getMacadamOne().divide(new BigDecimal(100)).multiply(info.getMacadamOne());
             //碎石1
             BigDecimal macadamOne2 = info.getMacadamOne().add(macadamOne);
-            map.put(prefix + "__" +s1 + "_" +(s2+2),macadamOne2);
+            if (StringUtils.isNotBlank(key2)) {
+                map.put(key2, macadamOne2);
+            }
         }
         //碎石2
         if (dto.getMacadamTwo() != null) {
             macadamTwo = dto.getMacadamTwo().divide(new BigDecimal(100)).multiply(info.getMacadamTwo());
             //碎石2
             BigDecimal macadamTwo2 = info.getMacadamTwo().add(macadamTwo);
-            map.put(prefix + "__" +s1 + "_" +(s2+3),macadamTwo2);
+            if (StringUtils.isNotBlank(key3)) {
+                map.put(key3, macadamTwo2);
+            }
         }
         //碎石3
         if (dto.getMacadamThree() != null) {
             macadamThree = dto.getMacadamThree().divide(new BigDecimal(100)).multiply(info.getMacadamThree());
             //碎石3
             BigDecimal macadamThree2 = info.getMacadamThree().add(macadamThree);
-            map.put(prefix + "__" +s1 + "_" +(s2+4),macadamThree2);
+            if (StringUtils.isNotBlank(key4)) {
+                map.put(key4, macadamThree2);
+            }
         }
 
         //施工配合比计算
         //水泥
         BigDecimal cement = info.getCement();
-        map.put(prefix + "__" +s1 + "_" +(s2),cement);
+        if (StringUtils.isNotBlank(key1)) {
+            map.put(key1, cement);
+        }
 
         //水
         if (dto.getSand() != null && dto.getMacadamOne() != null && dto.getMacadamTwo() != null && dto.getMacadamThree() != null) {
             BigDecimal water = info.getWater().subtract(sand).subtract(macadamOne).subtract(macadamTwo).subtract(macadamThree);
-            map.put(prefix + "__" + s1 + "_" + (s2 + 5), water);
+            if (StringUtils.isNotBlank(key6)) {
+                map.put(key6, water);
+            }
         }
         //掺加剂
         BigDecimal admixture = info.getAdmixture();
-        map.put(prefix + "__" +s1 + "_" +(s2+6),admixture);
+        if (StringUtils.isNotBlank(key7)) {
+            map.put(key7, admixture);
+        }
         //粉煤灰
         BigDecimal coalAsh = info.getCoalAsh();
-        map.put(prefix + "__" +s1 + "_" +(s2+7),coalAsh);
+        if (StringUtils.isNotBlank(key8)) {
+            map.put(key8, coalAsh);
+        }
         //矿渣粉
         BigDecimal slagPowder = info.getSlagPowder();
-        map.put(prefix + "__" +s1 + "_" +(s2+8),slagPowder);
+        if (StringUtils.isNotBlank(key9)) {
+            map.put(key9, slagPowder);
+        }
         inputStream.close();
         return R.data(map);
     }