Pārlūkot izejas kodu

日期相关bug

yangyj 1 gadu atpakaļ
vecāks
revīzija
323300128d

+ 40 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java

@@ -0,0 +1,40 @@
+package org.springblade.manager.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.manager.entity.ContractInfo;
+
+import java.math.BigDecimal;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/14 15:55
+ * @description 基础信息
+ */
+@Data
+public class BaseInfo {
+    /**项目名称*/
+    private String projectName;
+    /**合同段名称*/
+    private String contractName;
+    /**
+     * 合同段编号
+     */
+    private String contractNumber;
+    /**
+     * 业主单位名称
+     */
+    private String contractorUnitName;
+    /**
+     * 施工单位名称
+     */
+    private String constructionUnitName;
+    /**
+     * 监理单位名称
+     */
+    private String supervisionUnitName;
+    /**合同段金额*/
+    private BigDecimal contractAmount;
+
+
+}

+ 14 - 8
blade-service/blade-manager/src/main/java/com/jfireel/expression/node/impl/MinusNode.java

@@ -7,8 +7,7 @@ import com.mixsmart.utils.CustomFunction;
 import com.mixsmart.utils.StringUtils;
 
 import java.math.BigDecimal;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 
 public class MinusNode extends OperatorResultNode {
     public MinusNode() {
@@ -53,18 +52,25 @@ public class MinusNode extends OperatorResultNode {
 
 
 
-/*    public static void main(String[] args) {
+/*
+    public static void main(String[] args) {
         Map<String,Object> map = new HashMap<>();
         map.put("A","1:2.36");
         map.put("B","1:4");
         map.put("C","536");
         map.put("C2","503");
         map.put("D","540/500");
-        System.out.println(Expression.parse("A-B").calculate(map).toString());
-        System.out.println(Expression.parse("D-C").calculate(map).toString());
-        System.out.println(Expression.parse("C-D").calculate(map).toString());
-        System.out.println(Expression.parse("C2-D").calculate(map).toString());
-    }*/
+        map.put("E","662");
+        map.put("F","540");
+        map.put("G","569");
+        map.put("H","502");
+        map.put("Z","660/540/570/500");
+         new ArrayList<>(Arrays.asList(
+                "A-B","D-C","C-D","C2-D","E-Z","F-Z","G-Z","H-Z"
+        )).stream().map(s->Expression.parse(s).calculate(map).toString()).forEach(System.out::println);
+
+    }
+*/
 
 
 

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

@@ -492,9 +492,14 @@ public class CustomFunction {
     public static  Object convert(Object range,boolean isAsc){
         if (Func.isNotEmpty(range)) {
             if(range instanceof List){
-                range= ((List<Object>) range).get(0);
-            }
-            if( Func.isNotEmpty(range)) {
+               List<Object> ranges= (List<Object>) range;
+                if( Func.isNotEmpty(ranges)) {
+                   return ranges.stream().filter(Func::isNotEmpty).map(e->{
+                        String[] s = Func.toStr(e).replaceAll("[\\[\\]\\s]+", "").split(",");
+                        return dateCp(s[0], s[1], isAsc);
+                    }).collect(Collectors.toList());
+                }
+            } else{
                 String[] s = Func.toStr(range).replaceAll("[\\[\\]\\s]+", "").split(",");
                 return dateCp(s[0], s[1], isAsc);
             }
@@ -1439,6 +1444,10 @@ public class CustomFunction {
         return measureOut;
     }
 
+    public static void main(String[] args) {
+        List<Object> list = Arrays.asList("-9*5","2*3");
+        checkpoints(list,"",0,"±5",1);
+    }
 
     /**
      * @return java.lang.Object

+ 22 - 0
blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java

@@ -1,6 +1,8 @@
 package com.mixsmart.utils;
 
 
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
 import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -638,6 +640,19 @@ public class FormulaUtils {
         return t;
     }
 
+    public static List<String> duration2date(String duration){
+        try {
+            if (duration != null && Pattern.matches(RANGE_DATE_REG, duration)) {
+                return Arrays.stream(duration.replaceAll("^\\[|]$", "").split(",")).map(String::trim).map(s -> new DateTime(s).toString(DatePattern.NORM_DATE_PATTERN)).collect(Collectors.toList());
+            }
+            return Collections.singletonList(new DateTime(duration).toString(DatePattern.NORM_DATE_PATTERN));
+        }catch (Exception e){
+            return Collections.singletonList(new DateTime().toString(DatePattern.NORM_DATE_PATTERN));
+        }
+    }
+
+
+
     public static FormData createFormDataFast(String name,String code,String values,String coords){
         if(StringUtils.isNotEmpty(code,name)){
             if(StringUtils.isNotEmpty(coords)) {
@@ -890,6 +905,13 @@ public static Map<String,List<Long>> relatedPages(List<FormData> curFormDatas ,L
         return target;
     }
 
+    public  static  String recovery(List<ElementData> dataList) {
+        if (Func.isNotEmpty(dataList)) {
+            return dataList.stream().filter(e -> !e.isEmpty()).map(e -> e.stringValue() + "_^_" + e.getY() + "_" + e.getX()).collect(Collectors.joining("☆"));
+        }
+        return "";
+    }
+
 
     public static List<TableInfo> getTableInfoList(JSONArray dataArray) {
         if (dataArray != null && !dataArray.isEmpty()) {

+ 3 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/FormulaExecutor.java

@@ -12,7 +12,7 @@ import java.util.regex.Pattern;
  */
 @Data
 public abstract  class   FormulaExecutor implements FormulaHandleChain{
-    final TableElementConverter tec;
+    public  TableElementConverter tec;
     public final static String WP="WP";
     public final static String CHAIN="trees";
     public final static String FC="FC.";
@@ -24,8 +24,9 @@ public abstract  class   FormulaExecutor implements FormulaHandleChain{
     public static final String ELE_CODE_REG= "(?<=E\\[)[^]]+(?=])";
     public static final Pattern P = Pattern.compile(ELE_CODE_REG);
     public final static String CTI="ContractInfo";
-
     public FormulaExecutor(TableElementConverter tec) {
         this.tec = tec;
     }
+    public FormulaExecutor() {
+    }
 }

+ 12 - 4
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java

@@ -1,17 +1,25 @@
 package org.springblade.manager.formula.impl;
 
+import lombok.Data;
+import lombok.EqualsAndHashCode;
 import org.springblade.manager.formula.FormulaExecutor;
+import org.springblade.manager.vo.BaseInfo;
+
+import java.util.function.Function;
 
 /**
  * @author yangyj
  * @Date 2023/12/11 15:33
  * @description TODO
  */
+@EqualsAndHashCode(callSuper = true)
+@Data
 public class ExecutorInit extends FormulaExecutor {
-    public ExecutorInit(TableElementConverter tec) {
-        super(tec);
-    }
-    @Override
+    private  Function<Long, BaseInfo> BaseInfoFc;
     public void handle() {
+        /*加载合同数据*/
+        BaseInfo baseInfo = this.BaseInfoFc.apply(tec.getContractId());
+        /*加载计量期信息*/
+        /*加载合同材料、材料清单*/
     }
 }

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

@@ -50,7 +50,6 @@ public class TableElementConverter implements ITableElementConverter {
     List<KeyMapper> keyMappers;
     List<Formula> formulas;
     Map<Long, Formula> formulaMap = new HashMap<>();
-   /* List<FormData> fds = new ArrayList<>();*/
     /**
      * 所有已经初始化数据的元素集
      */
@@ -163,12 +162,14 @@ public class TableElementConverter implements ITableElementConverter {
 
 
     public Boolean isPresent() {
-        return BaseUtils.isNotNull(this.keyMappers, this.formulas, this.nodeId);
-    }
-    public Boolean isPresent2() {
-        return BaseUtils.isNotNull(this.formDataList, this.nodeId);
+        if(isNew){
+            return BaseUtils.isNotNull(this.formDataList, this.nodeId);
+        }else{
+            return BaseUtils.isNotNull(this.keyMappers, this.formulas, this.nodeId);
+        }
     }
 
+
     @Override
     public void before() {
         if (Func.isNotEmpty(this.keyMappers) && Func.isNotEmpty(this.formulas)) {
@@ -332,7 +333,7 @@ public class TableElementConverter implements ITableElementConverter {
                             List<ElementData> p = pages.get(i);
                             TableInfo info = tables.get(i);
                             info.setToBeUpdated(true);
-                            info.getDataMap().put(fd.getKey(), recovery(p));
+                            info.getDataMap().put(fd.getKey(), FormulaUtils.recovery(p));
                         }
                     } catch (Exception e) {
                         StaticLog.error("元素{}回写报错", fd.getCode());
@@ -396,12 +397,7 @@ public class TableElementConverter implements ITableElementConverter {
         }
     }
 
-    public String recovery(List<ElementData> dataList) {
-        if (Func.isNotEmpty(dataList)) {
-            return dataList.stream().filter(e -> !e.isEmpty()).map(e -> e.stringValue() + "_^_" + e.getY() + "_" + e.getX()).collect(Collectors.joining("☆"));
-        }
-        return "";
-    }
+
 
 
 }

+ 10 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaDao.java

@@ -0,0 +1,10 @@
+package org.springblade.manager.service;
+
+import org.springblade.manager.vo.BaseInfo;
+
+import java.util.function.Function;
+
+public interface IFormulaDao {
+    /**获取项目合同基础信息*/
+    Function<Long, BaseInfo> getBaseInfo();
+}

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

@@ -450,7 +450,7 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
                     tec.setExecuteType(type);
                     tec.setContractId(contractId);
                     tec.setProjectId(projectId);
-                    if (tec.isPresent2()) {
+                    if (tec.isPresent()) {
                         tec.before2();
                         this.formulaService.execute2(tec);
                         tec.after2();

+ 36 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -0,0 +1,36 @@
+package org.springblade.manager.service.impl;
+
+import lombok.RequiredArgsConstructor;
+import org.springblade.manager.entity.ContractInfo;
+import org.springblade.manager.entity.ProjectInfo;
+import org.springblade.manager.service.IContractInfoService;
+import org.springblade.manager.service.IFormulaDao;
+import org.springblade.manager.service.IProjectInfoService;
+import org.springblade.manager.vo.BaseInfo;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.function.Function;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/14 16:33
+ * @description TODO
+ */
+@Service
+@RequiredArgsConstructor
+public class FormulaDaoImpl implements IFormulaDao {
+    private final IContractInfoService contractInfoService;
+    private final IProjectInfoService projectInfoService;
+    @Override
+    public Function<Long, BaseInfo> getBaseInfo() {
+        return contractId->{
+            ContractInfo info=  this.contractInfoService.getById(contractId);
+            ProjectInfo projectInfo= projectInfoService.getById(info.getPId());
+            BaseInfo baseInfo= new BaseInfo();
+            BeanUtils.copyProperties(info,baseInfo);
+            baseInfo.setProjectName(projectInfo.getProjectName());
+            return baseInfo;
+        };
+    }
+}

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

@@ -41,6 +41,7 @@ import org.springblade.manager.mapper.WbsTreePrivateMapper;
 import org.springblade.manager.service.*;
 import org.springblade.manager.utils.FileUtils;
 import org.springblade.manager.vo.*;
+import org.springframework.beans.BeanUtils;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
@@ -51,6 +52,7 @@ import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.function.BiFunction;
+import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -81,6 +83,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         private final  IContractInfoService contractInfoService;
         private final IProjectInfoService projectInfoService;
         private final WbsTreeContractMapper wbsTreeContractMapper;
+        private final IFormulaDao formulaDao;
 
         public final static String WP="WP";
         public final static String CHAIN="trees";
@@ -491,6 +494,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
        );
     }
 
+
     public void missingFill(List<String> missingList,TableElementConverter tec){
         try {
             /*数据池里面没有任何元素匹配和当前依赖匹配*/
@@ -958,14 +962,8 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
                    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->{
-                             /*[2023年08月14日,  2023年08月15日]时间段格式*/
-                             if(t instanceof String){
-                                 t=FormulaUtils.range2end(t);
-                             }
-                             dateList.add(new DateTime(t).toString(DatePattern.NORM_DATE_PATTERN));
-                         });
+                          /*获取所有相关联日期的天气*/
+                         formData.getValues().stream().map(ElementData::stringValue).filter(StringUtils::isNotEmpty).flatMap(s->FormulaUtils.duration2date(s).stream()).distinct().forEach(dateList::add);
                       }
                    }
                }
@@ -2524,6 +2522,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
     }
 
 
+     public void create(){
+
+     }
+
+
     public Map<String,Object> getBussDataInfo(Long pkeyId, int type,Boolean isFormLoading) {
         /*需要加载表单公式的时候isFormLoading==true*/
         Document document=null;
@@ -2792,6 +2795,7 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
 
 
+
 }