Просмотр исходного кода

公式相关:天气获取公式

yangyj 2 лет назад
Родитель
Сommit
c1d2cca74c

+ 6 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -434,6 +434,12 @@ public class CustomFunction {
         return "";
     }
 
+    public static Object weather(List<Object> date,Map<String,Object> map){
+           if(ListUtils.isNotEmpty(date)&&map!=null){
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(e).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+           }
+           return "";
+    }
 
     public static Object dateMax(Object range) {
         if (StringUtils.isNotEmpty(range)) {

+ 8 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -1,6 +1,10 @@
 package com.mixsmart.utils;
 
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.oss.OSS;
@@ -9,6 +13,7 @@ import com.aliyun.oss.model.CannedAccessControlList;
 import com.aliyun.oss.model.ObjectMetadata;
 import com.aliyun.oss.model.PutObjectRequest;
 import com.aliyun.oss.model.PutObjectResult;
+import com.jfireel.expression.Expression;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
 import org.apache.poi.ss.usermodel.*;
 import java.awt.Color;
@@ -44,6 +49,8 @@ import java.awt.*;
 import java.awt.Font;
 import java.awt.geom.Ellipse2D;
 import java.io.*;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.List;
 import java.util.regex.Matcher;
@@ -422,7 +429,7 @@ public class FormulaUtils {
             , "2△_压浆压力值 (Mpa)_满足施工技术 规范规定_查油压表读书;每管道检查_实测值或实测偏差值"
     );
 
-/*    public static void main(String[] args) {
+   /* public static void main(String[] args) {
         itemNames.stream().map(FormulaUtils::parseItemName).forEach(System.out::println);
     }*/
 

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

@@ -85,6 +85,7 @@ public class FormulaTurnPoint implements FormulaStrategy {
                     tableData.add(tmp);
                 }
             }
+            @SuppressWarnings("unchecked")
             Map<String, Object> g8 = (Map<String, Object>) tec.getConstantMap().computeIfAbsent("G8", k -> new HashMap<>());
             List<Object> data = ITurnPointCalculator.create(tableData, configMap, g8);
             if (Func.isNotEmpty(data)) {

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/TableElementConverter.java

@@ -102,9 +102,9 @@ public class TableElementConverter implements ITableElementConverter {
         this.coordinateMap = coordinateMap;
         this.nodeId = wtc.getPkId();
         this.wbsTreeId = wtc.getId();
-        if (Func.isNotEmpty(tableInfoList)) {
+/*        if (Func.isNotEmpty(tableInfoList)) {总监办有问题
             this.contractId = Long.parseLong(tableInfoList.get(0).getContractId());
-        }
+        }*/
         this.currentNode = wtc;
         this.tableAll = tableAll;
     }

+ 3 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java

@@ -346,10 +346,12 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
                     CurrentNode currentNode = null;
                     Long pKeyId = null;
+                    Long contractId=null;
                     if (type.equals(ExecuteType.INSPECTION)) {
                         WbsTreeContract wtc = this.wbsTreeContractService.getOne(Wrappers.<WbsTreeContract>lambdaQuery().eq(WbsTreeContract::getPKeyId, nodeId));
                         pKeyId = wtc.getPKeyId();
                         currentNode = createCurrentNode(wtc);
+                        contractId=Long.parseLong(wtc.getContractId());
                     } else if (type.equals(ExecuteType.TESTING)) {
                         WbsTreePrivate wtp = this.wbsTreePrivateService.getOne(Wrappers.<WbsTreePrivate>lambdaQuery().eq(WbsTreePrivate::getPKeyId, nodeId));
                         pKeyId = wtp.getPKeyId();
@@ -359,6 +361,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                         TableElementConverter tec = new TableElementConverter(tableInfoList, keyMappers, formulas, coordinateMap, currentNode, tableAll);
                         tec.setExecuteType(type);
                         tec.setLog(log);
+                        tec.setContractId(contractId);
                         if (tec.isPresent()) {
                             tec.before();
                             this.formulaService.execute(tec);

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

@@ -1,6 +1,7 @@
 package org.springblade.manager.service.impl;
 
 
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.util.HashUtil;
 import cn.hutool.log.StaticLog;
@@ -15,7 +16,6 @@ import org.jsoup.Jsoup;
 import org.jsoup.nodes.Document;
 import org.jsoup.nodes.Element;
 import org.jsoup.select.Elements;
-import org.springblade.common.utils.BaseUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.tool.api.R;
@@ -78,10 +78,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     private final IFormulaDataBlockService formulaDataBlockService;
 
     private   TableElementConverter tec;
-//    private   Map<String,Object> constantMap;
-//    private   List<FormData> formDataList;
-//    private   Map<String,FormData> formDataMap;
-//    private   Map<String,Map<String,Object>> tableDataMaps;
     public final static String WP="WP";
     public final static String CHAIN="trees";
     public final static String FC="FC.";
@@ -175,6 +171,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
 
+
     /**补充确实的原始依赖*/
    public void checkingMissingList(){
        List<String> missingList = new ArrayList<>();
@@ -650,6 +647,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public IFormulaService calculate() {
+        /*天气*/
+        weather();
         /*通用计算*/
         generalCalc();
        /*汇总信息处理*/
@@ -659,6 +658,33 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return this;
     }
 
+
+    private void weather(){
+          List<String> dateList=new ArrayList<>();
+          tec.formDataList.forEach(e->{
+               if(e.executable()&&e.getFormula().getFormula().contains(".weather(")){
+                   String code= RegexUtil.findResult("(?<=weather\\(E\\[')[^']+(?='\\],WEATHER\\))",e.getFormula().getFormula());
+                   if(code!=null){
+                      FormData formData= tec.getFormDataMap().get(code);
+                      if(formData!=null&&!formData.empty()){
+                         Optional<String> op= formData.getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).findFirst();
+                         op.ifPresent(t->{
+                             dateList.add(new DateTime(t).toString(DatePattern.NORM_DATE_PATTERN));
+                         });
+                      }
+                   }
+               }
+          });
+           if(dateList.size()>0){
+              List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList(" select DATE(b.create_time) ds,b.weather from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id=1530020611913850882 and DATE(b.create_time) in('"+ String.join(",", dateList) +"')");
+              Map<String,String> map= new HashMap<>();
+               listMap.forEach(m->{
+                   map.put(Func.toStr(m.get("ds")),Func.toStr(m.get("weather")));
+               });
+               tec.constantMap.put("WEATHER",map);
+           }
+    }
+
     /**通用计算*/
     public void generalCalc(){
         String checkTable ="";
@@ -754,6 +780,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
 
     }
+
     /**附表处理*/
     public void forSubTb(){
         try {