Quellcode durchsuchen

Merge remote-tracking branch 'origin/test-merge' into test-merge

cr vor 1 Woche
Ursprung
Commit
28c7e38fad

+ 43 - 1
blade-service/blade-manager/src/main/java/com/mixsmart/utils/CustomFunction.java

@@ -469,7 +469,7 @@ public class CustomFunction {
             return result;
     }
 
-
+    // 获取天气
     public static Object weather( Object dateObj,Map<String,Object> map){
            if(dateObj!=null&&map!=null){
                List<Object> date=obj2ListObj(dateObj);
@@ -478,8 +478,50 @@ public class CustomFunction {
            return "";
     }
 
+    //天气 - 气温
+    public static Object weathertem( Object dateObj,Map<String,Object> map){
+        if(dateObj!=null&&map!=null){
+            List<Object> date=obj2ListObj(dateObj);
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(FormulaUtils.range2end(e)).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+        }
+        return "";
+    }
 
+    // 获取最大温度
+    public static Object maxtembydate( Object dateObj,Map<String,Object> map){
+        if(dateObj!=null&&map!=null){
+            List<Object> date=obj2ListObj(dateObj);
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(FormulaUtils.range2end(e)).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+        }
+        return "";
+    }
 
+    // 获取最小温度
+    public static Object mintembydate( Object dateObj,Map<String,Object> map){
+        if(dateObj!=null&&map!=null){
+            List<Object> date=obj2ListObj(dateObj);
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(FormulaUtils.range2end(e)).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+        }
+        return "";
+    }
+
+    // 获取星期几
+    public static Object weekbydate( Object dateObj,Map<String,Object> map){
+        if(dateObj!=null&&map!=null){
+            List<Object> date=obj2ListObj(dateObj);
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(FormulaUtils.range2end(e)).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+        }
+        return "";
+    }
+
+    // 获取最大温度
+    public static Object maxminbydate( Object dateObj,Map<String,Object> map){
+        if(dateObj!=null&&map!=null){
+            List<Object> date=obj2ListObj(dateObj);
+            return  date.stream().map(StringUtils::handleNull).filter(StringUtils::isNotEmpty).map(e->map.get(new DateTime(FormulaUtils.range2end(e)).toString(DatePattern.NORM_DATE_PATTERN))).collect(Collectors.toList());
+        }
+        return "";
+    }
 
     public static List<Object> obj2ListObj(Object input) {
         if (input == null) {

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

@@ -79,6 +79,7 @@ import java.io.*;
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -1245,8 +1246,21 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         try {
             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 (e.executable() && (e.getFormula().getFormula().contains(".weather(") //天气
+                        || e.getFormula().getFormula().contains(".maxtembydate(") // 最大气温
+                        || e.getFormula().getFormula().contains(".mintembydate(")  // 最小气温
+                        || e.getFormula().getFormula().contains("maxminbydate(")  //最大最小气温
+                        || e.getFormula().getFormula().contains("weathertem(")    // 气温/天气
+                        || e.getFormula().getFormula().contains("weekbydate(")  // 日期计算周几
+                )) {
+                    String tyepData[] = new String[]{"WEATHER","MAXTEMBYDATE","MINTEMBYDATE","MAXMINBYDATE","WEATHERTEM","WEEKBYDATE"};
+                    String code ="";
+                    for (int i=0;i<tyepData.length;i++){
+                        code = RegexUtil.findResult("(?<=\\(E\\[')[^']+(?='\\],"+tyepData[i]+"\\))", e.getFormula().getFormula());
+                        if (code != null) {
+                            break;
+                        }
+                    }
                     if (code != null) {
                         FormData formData = tec.getFormDataMap().get(code);
                         if (formData != null && !formData.empty()) {
@@ -1257,12 +1271,51 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             });
             if (dateList.size() > 0) {
-                List<Map<String, Object>> listMap = this.jdbcTemplate.queryForList(" select DATE(b.record_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=" + tec.getContractId() + " and DATE(b.record_time) in('" + dateList.stream().distinct().collect(Collectors.joining("','")) + "')");
+                List<Map<String, Object>> listMap = this.jdbcTemplate.queryForList(" select DATE(b.record_time) ds,b.weather,temp_high as maxtembydate,temp_low as mintembydate,CONCAT_WS('~',temp_low,temp_high) as maxminbydate,CONCAT(b.weather,'、',temp_low,'℃~',temp_high,'℃') as weathertem from m_project_contract_area a join u_weather_info b on a.id=contract_area_id where a.contract_id=" + tec.getContractId() + " and DATE(b.record_time) in('" + dateList.stream().distinct().collect(Collectors.joining("','")) + "')");
+
+                // 天气
                 Map<String, String> map = new HashMap<>();
+                //最高气温
+                Map<String, String> map2 = new HashMap<>();
+                //最低气温
+                Map<String, String> map3 = new HashMap<>();
+                //星期几
+                Map<String, String> map4 = new HashMap<>();
+                //最高最低气温
+                Map<String, String> map5 = new HashMap<>();
+                //气温 天气
+                Map<String, String> map6 = new HashMap<>();
                 listMap.forEach(m -> {
-                    map.put(Func.toStr(m.get("ds")), Func.toStr(m.get("weather")));
+                    String ds = Func.toStr(m.get("ds"));
+                    map.put(ds, Func.toStr(m.get("weather")));
+                    //将时间转化星期几
+                    if (StringUtils.isNotEmpty(ds)) {
+                        Date datetime = null;
+                        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                        try {
+                            datetime = dateFormat.parse(ds);
+                        }catch (Exception e){
+
+                        }
+                        String[] weekDays = {"日", "一", "二", "三", "四", "五", "六"};
+                        Calendar calendar = Calendar.getInstance();
+                        calendar.setTime(datetime);
+                        String week = weekDays[calendar.get(Calendar.DAY_OF_WEEK) - 1];
+                        map4.put(ds, week);
+                    }else {
+                        map4.put(ds, "");
+                    }
+                    map2.put(ds, Func.toStr(m.get("maxtembydate")));
+                    map3.put(ds, Func.toStr(m.get("mintembydate")));
+                    map5.put(ds, Func.toStr(m.get("maxminbydate")));
+                    map6.put(ds, Func.toStr(m.get("weathertem")));
                 });
                 tec.constantMap.put("WEATHER", map);
+                tec.constantMap.put("MAXTEMBYDATE", map2);
+                tec.constantMap.put("MINTEMBYDATE", map3);
+                tec.constantMap.put("WEEKBYDATE", map4);
+                tec.constantMap.put("MAXMINBYDATE", map5);
+                tec.constantMap.put("WEATHERTEM", map6);
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -1279,7 +1332,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
             checkTable = op.get().getInitTableName();
         }
         for (FormData fd : tec.formDataList) {
-            if(fd.getCode().equals("m_20230423154304_1650042591250481152:key_42")){
+            if(fd.getCode().equals("_20240528110420_1795289980302524416:key_8")){
                 System.out.println("111");
             }
             if (fd.verify()) {
@@ -1549,6 +1602,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                 }
                             } else {
                                 putEle(f, ele, currentMap, fd);
+                               //公式获取值
                                 Object data = Expression.parse(formula.getFormula()).calculate(currentMap);
                                 //如果有空串,也要加进data不然表格数据顺序会混乱
                                 try {
@@ -1623,7 +1677,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                         }
                                     }
                                 }
-
+                                // 公式获取的数据 准备写入 准装 字段和值的关系
                                 write(tec, fd, data);
                             }
                             /*错位计算偏移量重置*/
@@ -6151,6 +6205,9 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         if(Objects.equals("≠",s1)){
             s1 = "!=";
         }
+        if(Objects.equals("=",s1)){
+            s1 = "==";
+        }
         if(Objects.equals("<",s1)){
             s1 = "<";
         }
@@ -6284,8 +6341,6 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 /*设计值可以是数值类型,或空(等效0)*/
                 if (dataFd != null) {
                     List<Object> values = dataFd.getRawValue();
-                    /*保留小数位,去除*/
-                    values = values.stream().map(e -> StringUtils.number2StringZero(e,8)).collect(Collectors.toList());
                     //boolean nonNumeric = values.stream().filter(StringUtils::isNotEmpty).anyMatch(e -> !StringUtils.isNumber(e));
                     boolean nonNumeric = values.stream()
                             .filter(StringUtils::isNotEmpty)
@@ -6672,7 +6727,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
 
     @Override
-    public R<Object> evaluate(Long pkeyId) {
+    public R evaluate(Long pkeyId) {
         if (StringUtils.isNumber(pkeyId)) {
             /*节点信息*/
             WtcEva wtcEva = this.getSqlOne(
@@ -6726,7 +6781,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                                     xm.setName(name);
                                     xm.setSubItem(info.getTitle());
 
-                                    if(name.contains("△")){
+                                    if(name.contains("△")||name.contains("Δ")){
                                         xm.setWeight(2);
                                     }else{
                                         xm.setWeight(1);
@@ -6936,7 +6991,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                 }
             } catch (Exception e) {
                 e.printStackTrace();
-                return R.data("暂无数据");
+                return R.fail("暂无数据");
             }
         }
         return R.fail("无数据");
@@ -7008,6 +7063,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
         return remap;
     }
+
     public Map<String, String> getWtpParent(String meterType, String projectId) {
         Map<String, Object> map = this.jdbcTemplate.queryForMap("select id,wbs_id wbsId,CONCAT(ancestors_p_id,',',p_key_id) path from  m_wbs_tree_private a  where a.node_name=? and a.project_id=?", meterType, projectId);
         Map<String, String> result = new HashMap<>();
@@ -7939,5 +7995,5 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         }
         return wbsTreeContract;
     }
-
+    
 }