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

Merge remote-tracking branch 'origin/master'

liuyc 1 год назад
Родитель
Сommit
ed00e53aaf
30 измененных файлов с 422 добавлено и 85 удалено
  1. 21 1
      blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java
  2. 20 4
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java
  3. 16 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/Material.java
  4. 10 4
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java
  5. 21 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ReportResult.java
  6. 18 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SelectorModel.java
  7. 2 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/WbsFormElementVO.java
  8. 5 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/AttachmentForm.java
  9. 2 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenForm.java
  10. 6 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MiddleMeterApply.java
  11. 24 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterTokenVO.java
  12. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java
  13. 28 0
      blade-service/blade-manager/src/main/java/com/mixsmart/utils/FormulaUtils.java
  14. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  15. 23 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java
  16. 2 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java
  17. 3 3
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorInit.java
  18. 36 10
      blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java
  19. 3 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IFormulaDao.java
  20. 1 1
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/IWbsTreePrivateService.java
  21. 17 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java
  22. 49 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaServiceImpl.java
  23. 30 13
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java
  24. 2 0
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  25. 11 7
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java
  26. 4 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java
  27. 14 6
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  28. 3 5
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java
  29. 17 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  30. 32 10
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 21 - 1
blade-common/src/main/java/org/springblade/common/utils/BaseUtils.java

@@ -7,8 +7,10 @@ import org.springblade.common.constant.RegexConstant;
 import java.io.*;
 import java.lang.annotation.Annotation;
 import java.math.BigDecimal;
+import java.math.BigInteger;
 import java.net.JarURLConnection;
 import java.net.URL;
+import java.security.MessageDigest;
 import java.util.*;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
@@ -86,6 +88,19 @@ public class BaseUtils {
         }
         return false;
     }
+/*将不同长度的字符串转换为固定长度的Long*/
+    public static long str2Long(String input) {
+        try {
+            MessageDigest md = MessageDigest.getInstance("SHA-256");
+            byte[] hash = md.digest(input.getBytes());
+            BigInteger bigInt = new BigInteger(1, hash);
+
+            // 取正整数
+            return bigInt.longValue() & Long.MAX_VALUE;
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+    }
 
 
     /**
@@ -327,7 +342,12 @@ public class BaseUtils {
         }
         return false;
     }
-
+    public static boolean inChain(String[] cp,String s){
+        if(cp!=null&&cp.length>0&& s!=null&&s.length()>0){
+            return inChain(Arrays.asList(cp), s);
+        }
+        return false;
+    }
 
 
 }

+ 20 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/BaseInfo.java

@@ -1,8 +1,8 @@
 package org.springblade.manager.vo;
 
-import io.swagger.annotations.ApiModelProperty;
+import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
-import org.springblade.manager.entity.ContractInfo;
+import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
 
@@ -12,41 +12,57 @@ import java.math.BigDecimal;
  * @description 基础信息
  */
 @Data
-public class BaseInfo {
-    public static final String TBN="base_info";
+public class BaseInfo  {
+    public static final String ID="20100000000";
+    public static final String TBN="BSI";
+    public static final String TBN_CH="合同信息";
     /**项目名称*/
+    @JSONField(name = "key_1",label="项目名称",ordinal = 1)
     private String projectName;
     /**合同段名称*/
+    @JSONField(name = "key_2",label="合同段名称",ordinal = 2)
     private String contractName;
     /**
      * 合同段编号
      */
+    @JSONField(name = "key_3",label="合同段编号",ordinal = 3)
     private String contractNumber;
     /**
      * 业主单位名称
      */
+    @JSONField(name = "key_4",label="业主单位名称",ordinal = 4)
     private String contractorUnitName;
     /**
      * 施工单位名称
      */
+    @JSONField(name = "key_5",label="施工单位名称",ordinal = 5)
     private String constructionUnitName;
     /**
      * 监理单位名称
      */
+    @JSONField(name = "key_6",label="监理单位名称",ordinal = 6)
     private String supervisionUnitName;
     /**合同段金额*/
+    @JSONField(name = "key_7",label="合同段金额",ordinal = 7)
     private BigDecimal contractAmount;
     /**
      * 开户银行
      * */
+    @JSONField(name = "key_8",label="开户银行",ordinal = 8)
     private String  bankName;
     /**对公账户*/
+    @JSONField(name = "key_9",label="对公账户",ordinal = 9)
     private String  bankAccount;
     /**银行账户名称*/
+    @JSONField(name = "key_10",label="银行账户名称",ordinal = 10)
     private String  bankAccountName;
     /**合同总金额*/
+    @JSONField(name = "key_11",label="合同总金额",ordinal = 11)
     private String  TotalAmount;
     /**预付款比例*/
+    @JSONField(name = "key_12",label="预付款比例",ordinal = 12)
     private Double  deductRatio=0.7;
 
+
+
 }

+ 16 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/Material.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.vo;
 
+import com.alibaba.fastjson.annotation.JSONField;
 import lombok.Data;
 
 import java.util.ArrayList;
@@ -13,23 +14,38 @@ import java.util.List;
 @Data
 public class Material {
     public static final String TBN="MATERIAL";
+    public static final String TBN_CH="材料预付款支付申请表";
     /*b.material_name name,b.unit,b.price,a.meter_amount,
     a.material_source source,material_conform ,a.storage_place,a.storage_status,a.storage_conform,a.remark*/
     /**序号*/
+    @JSONField(name = "key_1",label="序号",ordinal = 1)
     private Integer index;
     /**名称*/
+    @JSONField(name = "key_2",label="材料名称",ordinal = 2)
     private String materialName;
+    @JSONField(name = "key_3",label="单位",ordinal = 3)
     private String unit;
+    @JSONField(name = "key_4",label="单价",ordinal = 4)
     private String price;
+    @JSONField(name = "key_5",label="数量",ordinal = 5)
     private String meterAmount;
+    @JSONField(name = "key_6",label="材料合计价格",ordinal = 6)
     private String sum;
+    @JSONField(name = "key_7",label="预付款比例",ordinal = 7)
     private String ratio;
+    @JSONField(name = "key_8",label="材料预付款",ordinal = 8)
     private String advancePayment;
+    @JSONField(name = "key_9",label="材料来源",ordinal = 9)
     private String source;
+    @JSONField(name = "key_10",label="材料来源是否符合要求",ordinal = 10)
     private String materialConform;
+    @JSONField(name = "key_11",label="备料堆放地点",ordinal = 11)
     private String storagePlace;
+    @JSONField(name = "key_12",label="存储情况",ordinal = 12)
     private String storageStatus;
+    @JSONField(name = "key_13",label="存放方法是否符合要求",ordinal = 13)
     private String storageConform;
+    @JSONField(name = "key_14",label="备注",ordinal = 14)
     private String remark;
     public List<Object> getData(){
         List<Object> data = new ArrayList<>();

+ 10 - 4
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/MeterPeriodInfo.java

@@ -1,6 +1,7 @@
 package org.springblade.manager.vo;
 
-import io.swagger.annotations.ApiModelProperty;
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Data;
 
 import java.time.LocalDate;
 
@@ -9,22 +10,27 @@ import java.time.LocalDate;
  * @Date 2023/12/20 10:36
  * @description 计量期信息
  */
+@Data
 public class MeterPeriodInfo {
+    public static final String ID="20200000000";
     /**计量期信息表名*/
     public static final String TBN="MPI";
+    public static final String TBN_CH="开工材料计量期";
     /**计量期*/
+    @JSONField(name = "key_1",label="计量期",ordinal = 1)
     private String periodNumber;
     /**
      * 期名称
      */
+    @JSONField(name = "key_2",label="计量期名称",ordinal = 2)
     private String periodName;
     /**
      * 报表打印日期
      */
+    @JSONField(name = "key_3",label="报告打印日期",ordinal = 3)
     private LocalDate formPrintDate;
-    /**上期计量金额*/
+    /**上期累计金额*/
+    @JSONField(name = "key_4",label="上期累计金额",ordinal = 4)
     private String  preTotal;
 
-
-
 }

+ 21 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ReportResult.java

@@ -0,0 +1,21 @@
+package org.springblade.manager.vo;
+
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/28 11:29
+ * @description 计量公式计算结果
+ */
+@Data
+public class ReportResult {
+    /**html地址*/
+    private String url;
+    /**表编号*/
+    private String initTableName;
+    /**每一页的数据,格式{y_x:val,y1_x1:val1...}{...}...*/
+    private List<Map<String,Object>> data;
+}

+ 18 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/SelectorModel.java

@@ -0,0 +1,18 @@
+package org.springblade.manager.vo;
+
+/**
+ * @author yangyj
+ * @Date 2023/12/29 16:30
+ * @description 选项模型-计量
+ */
+public class SelectorModel {
+    public static final String NODE_NAME="模型数据";
+    public  static final Long ID=20000000000L;
+    public  static final Long P_ID=12345678910L;
+    public Long getParentId(){
+        return ID;
+    }
+    public String getNodeName(){
+        return NODE_NAME;
+    }
+}

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

@@ -34,4 +34,6 @@ public class WbsFormElementVO extends WbsFormElement {
      * 是否保存业务时间 '0'否 '1'是
      */
     private Integer isBussTime;
+    /*是否包含节点公式*/
+    private Boolean hasPartFormula;
 }

+ 5 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/AttachmentForm.java

@@ -68,6 +68,11 @@ public class AttachmentForm extends BaseEntity {
      */
     @ApiModelProperty(value = "附件pdf地址")
     private String filePdfUrl;
+    /**
+     * 中间计量申请专用字段 1中间计量附件,2变更令附件
+     */
+    @ApiModelProperty(value = "中间计量申请专用字段 1中间计量附件,2变更令附件")
+    private Integer fileType;
 
 
 }

+ 2 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenForm.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
@@ -127,7 +128,7 @@ public class ChangeTokenForm extends BaseEntity {
     private Integer commandStatus;
 
     @ApiModelProperty(value = "下达日期")
-    private LocalDate commandDate;
+    private LocalDateTime commandDate;
 
 
 

+ 6 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MiddleMeterApply.java

@@ -104,10 +104,15 @@ public class MiddleMeterApply extends BaseEntity {
     @ApiModelProperty(value = "收方单id")
     private Long debitFormId;
     /**
-     * 变更令id
+     * 变更令编号
      */
     @ApiModelProperty(value = "变更令编号")
     private String changeTokenNumber;
+    /**
+     * 变更令id
+     */
+    @ApiModelProperty(value = "变更令id,逗号拼接")
+    private String changeTokenIds;
     /**
      * 草图文件
      */

+ 24 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterTokenVO.java

@@ -0,0 +1,24 @@
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.entity.AttachmentForm;
+
+import java.util.List;
+
+/**
+ * @Param   中间计量申请,返回变更令和变更令编号和变更令附件
+ * @Author wangwl
+ * @Date 2024/1/2 9:37
+ **/
+@Data
+public class MiddleMeterTokenVO {
+    @ApiModelProperty(value = "变更令编号,逗号分隔")
+    private String changeTokenNumber;
+
+    @ApiModelProperty(value = "变更令id,逗号分隔")
+    private String changeTokenIds;
+
+    @ApiModelProperty(value = "变更令附件集合")
+    private List<AttachmentForm> files;
+}

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/TaskController.java

@@ -710,7 +710,7 @@ public class TaskController extends BladeController {
                         eVisaObj.setType(1); //审批
 
                         /*更改需求允许不电签审批,eVisaObj.getSealStrategy().size() = 0 的情况下表示没有签章,直接执行流程修改状态,2023年12月28日14:45:01*/
-                        if (eVisaObj.getSealStrategy().size() > 0) {
+                        if (eVisaObj.getSealStrategy() != null && eVisaObj.getSealStrategy().size() > 0) {
                             //TODO ============ 电签审批(每个人都需要电签,按照顺序垂直审批) ============
                             String resultMsg = this.eVisaClient.eVisaCustom(eVisaObj);
                             if (StringUtils.isEmpty(resultMsg) || ("500").equals(resultMsg)) {

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

@@ -7,6 +7,7 @@ import cn.hutool.log.StaticLog;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONField;
 import com.jfireel.expression.Expression;
 import org.apache.commons.lang.math.NumberUtils;
 import org.apache.http.*;
@@ -52,6 +53,8 @@ import org.springblade.manager.formula.NodeTable;
 import org.springblade.manager.formula.impl.CompositeDataAccess;
 import org.springblade.manager.formula.impl.TableElementConverter;
 import org.springblade.manager.utils.FileUtils;
+import org.springblade.manager.vo.BaseInfo;
+import org.springblade.manager.vo.WbsFormElementVO;
 import reactor.core.publisher.Mono;
 
 import java.awt.*;
@@ -60,6 +63,7 @@ import java.awt.Shape;
 import java.awt.geom.Ellipse2D;
 import java.io.*;
 
+import java.lang.reflect.Field;
 import java.nio.charset.StandardCharsets;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
@@ -328,6 +332,30 @@ public class FormulaUtils {
     }
 
 
+    public static List<WbsFormElementVO> toElementVos(Class<?> clazz)  {
+        List<WbsFormElementVO> vos =new ArrayList<>();
+        try {
+            Field tbnField = clazz.getField("TBN");
+            String TBN = (String) tbnField.get(null);
+            for (Field field : clazz.getDeclaredFields()) {
+                JSONField jf = field.getAnnotation(JSONField.class);
+                if (jf != null) {
+                    WbsFormElementVO vo = new WbsFormElementVO();
+                    vo.setEName(jf.label());
+                    vo.setTableElementKey(TBN+ StringPool.COLON +jf.name());
+                    vo.setInitTableName(TBN);
+                    vo.setId(BaseUtils.str2Long(vo.getTableElementKey()));
+                    vos.add(vo);
+                }
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+        return vos;
+    }
+
+
+
     /**从元素名称中解析项目名称,细化项目匹配用*/
     public static  String parseItemName(String eName){
         if (StringUtils.isEmpty(eName)) {

+ 1 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java

@@ -2343,7 +2343,7 @@ public class ExcelTabController extends BladeController {
                                     this.taskClient.reSigningEVisa(String.join(",", l), contractId, projectId, AuthUtil.getHeader());
                                     sum.addAndGet(l.size());
                                     double d = 100 * (double) sum.get() / (double) taskIds.size();
-                                    String str = "上报数据共计" + taskIdsSeg.size() + "条,已经执行" + sum.get() + "条(" + d + "%)";
+                                    String str = "上报数据共计" + taskIdsSeg.size() + "条,已经执行" + sum.get() + "条(" + d + "%)";
                                     sqlIntA.add("insert into m_cache (id,remark,create_time) VALUES (" + SnowFlakeUtil.getId() + ",'" + str + "',NOW())");
                                     this.batchInsert(sqlIntA);
                                     sqlIntA.clear();

+ 23 - 1
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreeController.java

@@ -2,6 +2,7 @@ package org.springblade.manager.controller;
 
 
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.mixsmart.utils.FormulaUtils;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
@@ -45,6 +46,7 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.*;
+import java.util.function.Predicate;
 import java.util.stream.Collectors;
 
 import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE;
@@ -272,7 +274,11 @@ public class WbsTreeController extends BladeController {
     public R<List<WbsFormElementVO>> selectFormElements4Formula(@RequestParam("id") String id, String search) {
         List<WbsFormElementVO> wbsFormElements = null;
         if (StringUtils.isNotEmpty(id)) {
-            wbsFormElements = wbsTreeService.selectFormElements4Formula(id);
+            if(isModel(id)){
+                wbsFormElements= this.dataModel(id);
+            }else{
+                wbsFormElements = wbsTreeService.selectFormElements4Formula(id);
+            }
             if (wbsFormElements.size() > 0) {
                 if (StringUtils.isNotEmpty(search)) {
                     wbsFormElements = wbsFormElements.stream().filter(e -> e.getEName().contains(search)).collect(Collectors.toList());
@@ -284,6 +290,22 @@ public class WbsTreeController extends BladeController {
         return R.data(wbsFormElements, "未查询到元素");
     }
 
+    public  boolean isModel(String id){
+         List<String> list = new ArrayList<>();
+         list.add(BaseInfo.ID);
+         list.add(MeterPeriodInfo.ID);
+         return list.contains(id);
+     };
+
+    public List<WbsFormElementVO> dataModel(String id){
+          if(BaseInfo.ID.equals(id)) {
+              return FormulaUtils.toElementVos(BaseInfo.class);
+          }else if(MeterPeriodInfo.ID.equals(id)){
+              return FormulaUtils.toElementVos(MeterPeriodInfo.class);
+          }
+          return Collections.emptyList();
+    }
+
     /**
      * 新增表单与元素
      */

+ 2 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/WbsTreePrivateController.java

@@ -614,8 +614,8 @@ public class WbsTreePrivateController extends BladeController {
             @ApiImplicitParam(name = "parentId", value = "父级id", required = true),
             @ApiImplicitParam(name = "titleName", value = "搜索关键字", required = true)
     })
-    public R<IPage<TreeNodeVOByTabType>> tabTypeLazyTreeAll(Long parentId, BladeUser bladeUser, String titleName, Query query) {
-        IPage<TreeNodeVOByTabType> page = wbsTreePrivateService.tabTypeLazyTreeAll(Condition.getPage(query), parentId, titleName);
+    public R<IPage<TreeNodeVOByTabType>> tabTypeLazyTreeAll(Long parentId, BladeUser bladeUser, String titleName, Query query,Boolean hasPartFormula) {
+        IPage<TreeNodeVOByTabType> page = wbsTreePrivateService.tabTypeLazyTreeAll(Condition.getPage(query), parentId, titleName,hasPartFormula);
         return R.data(page);
     }
 

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

@@ -22,7 +22,7 @@ public class ExecutorInit extends FormulaExecutor {
         super(tec);
     }
     private  Function<Long, BaseInfo> baseInfoFc;
-    private  Function<Long, Map<String,Object>>  meterPeriodFc;
+    private  Function<Long, MeterPeriodInfo>  meterPeriodFc;
 
 
     public void handle() {
@@ -30,8 +30,8 @@ public class ExecutorInit extends FormulaExecutor {
         BaseInfo baseInfo = this.baseInfoFc.apply(tec.getContractId());
         tec.getConstantMap().put(BaseInfo.TBN,baseInfo);
         /*加载计量期信息*/
-        Map<String,Object> meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
-        tec.getConstantMap().put(MeterPeriodInfo.TBN, BeanUtil.toBean(meterPeriod,MeterPeriodInfo.class));
+        MeterPeriodInfo meterPeriod=meterPeriodFc.apply(tec.getPeriodId());
+        tec.getConstantMap().put(MeterPeriodInfo.TBN, meterPeriod);
     }
 
 

+ 36 - 10
blade-service/blade-manager/src/main/java/org/springblade/manager/formula/impl/ExecutorSpecial.java

@@ -5,16 +5,17 @@ import com.mixsmart.utils.StringUtils;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import org.springblade.core.tool.utils.Func;
-import org.springblade.manager.dto.Coords;
 import org.springblade.manager.dto.ElementData;
 import org.springblade.manager.dto.FormData;
 import org.springblade.manager.formula.FormulaExecutor;
+import org.springblade.manager.formula.NodeTable;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.Material;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -35,9 +36,13 @@ public class ExecutorSpecial extends FormulaExecutor {
 
     @Override
     public void handle() {
-        MaterialCalc materialCalc = new MaterialCalc(tec.getFormDataList());
-        this.specialList.add(materialCalc);
-        this.specialList.forEach(Special::parse);
+        for(NodeTable nodeTable:tec.getTableAll()){
+            if(Material.TBN_CH.equals(nodeTable.getNodeName())){
+                MaterialCalc materialCalc = new MaterialCalc(tec.getFormDataList());
+                this.specialList.add(materialCalc);
+            }
+        }
+        this.specialList.stream().filter(Special::ready).forEach(Special::parse);
     }
     @Data
     public  class MaterialCalc implements Special{
@@ -61,7 +66,23 @@ public class ExecutorSpecial extends FormulaExecutor {
         private String totalAdvance;
         private List<FormData> fds=new ArrayList<>();
         public MaterialCalc(List<FormData> list) {
-            for(FormData fd:list){
+           Optional<FormData> fop=  list.stream().filter(e->e.executable()&&"MATERIAL".equals(e.getFormula().getNumber())).findAny();
+           List<FormData> candidate = new ArrayList<>();
+           if(fop.isPresent()){
+               List<String> relyList= fop.get().getFormula().getRelyList();
+                for(FormData t:list){
+                    if(relyList.contains(t.getCode())) {
+                        candidate.add(t);
+                    }
+                }
+           }else{
+               /*假如不存在配置,则尝试自动识别*/
+                candidate.addAll(list);
+           }
+            select(candidate);
+        }
+        public void select(List<FormData> candidate ){
+            for(FormData fd:candidate){
                 if(fd.getEName().contains("序号")){
                     this.index=fd;
                     fds.add(fd);
@@ -110,6 +131,12 @@ public class ExecutorSpecial extends FormulaExecutor {
                 }
             }
         }
+
+        @Override
+        public boolean ready() {
+            return fds.size()==14;
+        }
+
         public void parse(){
             /*加载合同材料、材料清单*/
             /* b.material_name name,b.unit,b.price,a.meter_amount amount,a.material_source source
@@ -127,9 +154,8 @@ public class ExecutorSpecial extends FormulaExecutor {
                 this.totalAdvance=StringUtils.number2StringZero(materials.stream().mapToDouble(m->Double.parseDouble(m.getAdvancePayment())).sum(),1);
                 List<Object> dataList= materials.stream().flatMap(m->m.getData().stream()).collect(Collectors.toList());
                 if(dataList.size()>0){
-                   Map<Integer,List<Object>> groupData= IntStream.range(0, dataList.size())
-                            .boxed()
-                            .collect(Collectors.groupingBy(index -> index % 14,
+                   Map<Integer,List<Object>> groupData= IntStream.range(0, dataList.size()).boxed()
+                            .collect(Collectors.groupingBy(index -> index % fds.size(),
                                     Collectors.mapping(dataList::get, Collectors.toList())));
                    for(int i=0;i<this.fds.size();i++){
                        List<Object> dl= groupData.get(i);
@@ -138,7 +164,7 @@ public class ExecutorSpecial extends FormulaExecutor {
                    }
                    /*追加合计*/
                    append(this.sum,this.total);
-                   append(this.advancePayment,this.advancePayment);
+                   append(this.advancePayment,this.totalAdvance);
                 }
             }
         }
@@ -156,10 +182,10 @@ public class ExecutorSpecial extends FormulaExecutor {
                  }
              }
         }
-
     }
 
     public interface  Special{
+        boolean ready();
         void parse();
     }
 }

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

@@ -2,6 +2,7 @@ package org.springblade.manager.service;
 
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.Material;
+import org.springblade.manager.vo.MeterPeriodInfo;
 
 import java.util.List;
 import java.util.Map;
@@ -11,7 +12,7 @@ public interface IFormulaDao {
     /**获取项目合同基础信息*/
     Function<Long, BaseInfo> getBaseInfo();
     /**获取计量段信息*/
-    Function<Long, Map<String,Object>> getMeterPeriod();
-    /*获取清单信息*/
+    Function<Long, MeterPeriodInfo> getMeterPeriod();
+    /**获取清单信息*/
     Function<Long, List<Material>> getMaterialForm();
 }

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

@@ -32,7 +32,7 @@ public interface IWbsTreePrivateService extends BaseService<WbsTreePrivate> {
     IPage<TreeNodeVOByTabType> tabTypeLazyTree(IPage<TreeNodeVOByTabType> page, Long parentId, String projectId, String titleName);
 
     // 元素
-    IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName);
+    IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName,Boolean hasPartFormula);
 
     List<WbsTreePrivateDTO2> findWbsTreePrivateSameLevel(String projectId, String parentId, String wbsId);
 

+ 17 - 2
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/FormulaDaoImpl.java

@@ -1,5 +1,6 @@
 package org.springblade.manager.service.impl;
 
+import com.mixsmart.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.Func;
@@ -10,11 +11,14 @@ import org.springblade.manager.service.IFormulaDao;
 import org.springblade.manager.service.IProjectInfoService;
 import org.springblade.manager.vo.BaseInfo;
 import org.springblade.manager.vo.Material;
+import org.springblade.manager.vo.MeterPeriodInfo;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.function.Function;
@@ -44,8 +48,19 @@ public class FormulaDaoImpl implements IFormulaDao {
     }
 
     @Override
-    public Function<Long,Map<String,Object>> getMeterPeriod(){
-        return id-> this.jdbcTemplate.queryForMap("select period_number periodNumber,period_name periodName,form_print_date formPrintDate from s_meter_period where id= "+id);
+    public Function<Long,MeterPeriodInfo> getMeterPeriod(){
+        return id-> {
+           List<MeterPeriodInfo> beans = this.jdbcTemplate.query("select period_number periodNumber,period_name periodName,form_print_date formPrintDate from s_meter_period where id= "+id, new BeanPropertyRowMapper<>(MeterPeriodInfo.class));
+
+            if(beans.size()>0){
+                MeterPeriodInfo bean = beans.get(0);
+                List<Map<String,Object>> listMap= this.jdbcTemplate.queryForList("select sum(b.current_amount) currentAmount from s_meter_period a join s_meter_period b on (a.contract_id=b.contract_id and a.type=b.type) where a.id="+id+" and b.id<>"+id);
+                if(listMap.size()>0) {
+                    bean.setPreTotal(StringUtils.number2String(listMap.get(0).get("currentAmount").toString(),2));
+                }
+            }
+            return new MeterPeriodInfo();
+        };
     }
 
     @Override

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

@@ -1871,6 +1871,11 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
         return Collections.emptyList();
     }
 
+    /*获取*/
+    private void listForMeter(Long projectId,Long pkeyId){
+
+    }
+
 
     private List<Map<String,Object>>   listMap(List<Long> ids,ExecuteType type){
         String pkIds=ids.stream().map(String::valueOf).collect(Collectors.joining(","));
@@ -2242,14 +2247,51 @@ public class FormulaServiceImpl extends BaseServiceImpl<FormulaMapper, Formula>
 
     @Override
     public Map<String,Object> getElementInfoByCodes(String codes){
+       final String ekey="ekey";
+        String[] model = new String[]{BaseInfo.TBN,MeterPeriodInfo.TBN};
+        List<Map<String,Object>> mapList =new ArrayList<>();
         if(StringUtils.isNotEmpty(codes)){
-            String[] relyArr = codes.split(StringPool.COMMA);
-            List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
-                    "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id and b.is_deleted=0  " +
-                    "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
-                    " where  a.tab_en_name in( "+ Arrays.stream(relyArr).map(e->e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining("','","'","'"))+")");
-            if(ListUtils.isNotEmpty(mapList)){
-             return   mapList.stream().filter(e-> Arrays.stream(relyArr).anyMatch(c->StringUtils.isEquals(e.get("ekey"),c))).collect(Collectors.toMap(e->StringUtils.handleNull(e.get("ekey")), e->e));
+            String[] relyArr=codes.split(StringPool.COMMA);
+            List<String> codeList = new ArrayList<>(Arrays.asList(relyArr));
+            Predicate<String> isModel = code-> BaseUtils.inChain(model,code);
+            List<String> modelList= codeList.stream().filter(isModel).collect(Collectors.toList());
+            if(modelList.size()>0) {
+                codeList.removeIf(modelList::contains);
+                for(String code:modelList){
+                    String tbn=code.split(StringPool.COLON)[0];
+                     String tbnCh="";
+                    List<WbsFormElementVO> elementVOS = null;
+                    if(BaseInfo.TBN.equals(tbn)){
+                        elementVOS=FormulaUtils.toElementVos(BaseInfo.class);
+                        tbnCh=BaseInfo.TBN_CH;
+                    }else if(MeterPeriodInfo.TBN.equals(tbn)){
+                        elementVOS=FormulaUtils.toElementVos(MeterPeriodInfo.class);
+                        tbnCh=MeterPeriodInfo.TBN_CH;
+                    }
+                    if(elementVOS!=null){
+                        String finalTbnCh = tbnCh;
+                        elementVOS.stream().filter(e->modelList.contains(e.getTableElementKey())).collect(Collectors.toList()).forEach(e->{
+                            Map<String,Object> map = new HashMap<>();
+                            map.put(ekey,e.getTableElementKey());
+                            map.put("tableName", finalTbnCh);
+                            map.put("ename", e.getEName());
+                            mapList.add(map);
+                        });
+                    }
+
+                }
+            }
+            if(codeList.size()>0) {
+                List<Map<String, Object>> tmpList = this.jdbcTemplate.queryForList("select CONCAT(a.tab_en_name,':',b.e_key) ekey,a.tab_ch_name tableName,b.e_name ename  ,b.e_length elength,c.dict_value type f" +
+                        "rom m_table_info a JOIN m_wbs_form_element b on a.id=b.f_id and b.is_deleted=0  " +
+                        "LEFT JOIN (select dict_key, dict_value from blade_dict where code ='data_type' and parent_id > 0 and is_sealed = 0 and is_deleted = 0 )c on b.e_type=c.dict_key" +
+                        " where  a.tab_en_name in( " + codeList.stream().map(e -> e.split(StringPool.COLON)[0]).distinct().collect(Collectors.joining("','", "'", "'")) + ")");
+                if (tmpList.size() > 0) {
+                    mapList.addAll(tmpList);
+                }
+            }
+            if(mapList.size()>0){
+               return mapList.stream().filter(e-> Arrays.stream(relyArr).anyMatch(c->StringUtils.isEquals(e.get(ekey),c))).collect(Collectors.toMap(e->StringUtils.handleNull(e.get(ekey)), e->e));
             }
 
         }

+ 30 - 13
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreePrivateServiceImpl.java

@@ -45,6 +45,7 @@ import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.validation.constraints.NotNull;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -219,19 +220,25 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     }
 
     @Override
-    public IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName) {
+    public IPage<TreeNodeVOByTabType> tabTypeLazyTreeAll(IPage<TreeNodeVOByTabType> page, Long parentId, String titleName, Boolean hasPartFormula) {
         boolean base=false;
+        if(hasPartFormula==null){
+            hasPartFormula=true;
+        }
         if ((parentId + "").equals("12345678910")) {
             page.setSize(100);
             base=true;
         }
         List<TreeNodeVOByTabType>data ;
-        if("2222236".equals(parentId+"")){
+        if(SelectorModel.ID.equals(parentId)){
              data =this.baseList();
         }else{
              data= baseMapper.tabTypeLazyTreeAll(page, parentId, titleName);
         }
         addBase(data,base);
+        if(base&&!hasPartFormula){
+            data.removeIf(e->e.getId()!=20&&!e.getId().equals(SelectorModel.ID));
+        }
         return page.setRecords(data);
     }
 
@@ -239,26 +246,28 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
     public void addBase(List<TreeNodeVOByTabType> data,Boolean base){
         if(base){
             TreeNodeVOByTabType baseInfo = new TreeNodeVOByTabType();
-            baseInfo.setTitle("基础信息");
-            baseInfo.setPrimaryKeyId("BASIN");
-            baseInfo.setParentId(12345678910L);
-            baseInfo.setId(2222236L);
+            baseInfo.setTitle(SelectorModel.NODE_NAME);
+            /*baseInfo.setPrimaryKeyId("BASIN");*/
+            baseInfo.setParentId(SelectorModel.P_ID);
+            baseInfo.setId(SelectorModel.ID);
             baseInfo.setHasChildren(true);
             data.add(baseInfo);
         }
     }
     public  List<TreeNodeVOByTabType> baseList(){
-        Map<String,String> titleMap = new HashMap<>();
-        titleMap.put("合同信息",BaseInfo.TBN);
-        titleMap.put("开工材料计量期",MeterPeriodInfo.TBN);
+        Map<String,String[]> titleMap = new HashMap<>();
+        titleMap.put(BaseInfo.TBN_CH,new String[]{BaseInfo.TBN,BaseInfo.ID});
+        titleMap.put(MeterPeriodInfo.TBN_CH,new String[]{MeterPeriodInfo.TBN,MeterPeriodInfo.ID});
         return titleMap.entrySet().stream().map(kv->{
             TreeNodeVOByTabType tn = new TreeNodeVOByTabType();
             tn.setTitle(kv.getKey());
-            tn.setTabType("基础信息");
-            tn.setParentId(2222236L);
-            tn.setParentId(2222236L);
+            tn.setTabType(SelectorModel.NODE_NAME);
+            tn.setParentId(SelectorModel.ID);
+            tn.setId(Long.parseLong(kv.getValue()[1]));
+            tn.setPrimaryKeyId(kv.getValue()[1]);
+            tn.setInitTableId(kv.getValue()[1]);
             tn.setHasChildren(false);
-            tn.setInitTableName(kv.getValue());
+            tn.setInitTableName(kv.getValue()[0]);
             return tn;
         }).collect(Collectors.toList());
     }
@@ -2413,6 +2422,14 @@ public class WbsTreePrivateServiceImpl extends BaseServiceImpl<WbsTreePrivateMap
         return true;
     }
 
+    public Boolean hasPart(String id){
+        if(Func.isNotBlank(id)) {
+            List<Map<String,Object>> mapList =this.jdbcTemplate.queryForList("select a.id from m_wbs_tree a join m_wbs_info b on a.wbs_id=b.id where a.id="+id+"  and b.wbs_type=3  union  select p_key_id from m_wbs_tree_private where p_key_id ="+id+" and wbs_type =3");
+            return mapList.size()==0;
+        }
+        return true;
+    }
+
     /**
      * 修改initTableId
      */

+ 2 - 0
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -704,10 +704,12 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
         if (Func.isEmpty(wbsFormElements)) {
             wbsFormElements = wbsTreeMapper.selectFormElements4TableId(id);
         }
+        Boolean hp=this.wbsTreePrivateService.hasPart(id);
         wbsFormElements.forEach(elements -> {
             String eAllowDeviation = elements.getEAllowDeviation();
             //转义
             String escapeChar = getEscapeChar(eAllowDeviation);
+            elements.setHasPartFormula(hp);
             if (escapeChar != null) {
                 elements.setEAllowDeviation(escapeChar);
             }

+ 11 - 7
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -26,10 +26,7 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.meter.dto.MiddleMeterApplyDTO;
-import org.springblade.meter.vo.MeterInventoryDetailVO;
-import org.springblade.meter.vo.MeterInventoryVO;
-import org.springblade.meter.vo.MiddleMeterApplyVO;
-import org.springblade.meter.vo.ResolveInventoryVO;
+import org.springblade.meter.vo.*;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -38,6 +35,7 @@ import org.springblade.meter.service.IMiddleMeterApplyService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -104,9 +102,15 @@ public class MiddleMeterApplyController extends BladeController {
 	 */
 	@GetMapping("/getNodeToken")
 	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "获取当前节点变更令", notes = "传入节点id,返回变更令编号,没有返回null")
-	public R<String> getNodeToken(Long nodeId) {
-		return R.data(middleMeterApplyService.getNodeToken(nodeId));
+	@ApiOperation(value = "获取变更编号,附件", notes = "传入合同id,节点id,和所有清单id逗号拼接,业务日期")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "formIds", value = "所有计量清单id,逗号分隔", required = true),
+			@ApiImplicitParam(name = "businessDate", value = "业务日期", required = true)
+	})
+	public R<MiddleMeterTokenVO> getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate) {
+		return R.data(middleMeterApplyService.getNodeToken(contractId,nodeId,formIds,businessDate));
 	}
 
 	/**

+ 4 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -26,7 +26,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.meter.vo.*;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
+import java.util.Set;
 
 /**
  * 中间计量申请表 Mapper 接口
@@ -41,7 +43,6 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     List<MeterInventoryVO> getResolveFormInfo(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId,@Param("ids") List<Long> longs);
 
-    ChangeTokenMeter getNodeToken(@Param("nodeId") Long nodeId);
 
     List<MeterTreeContract> getNodeDivide(@Param("contractId") Long contractId, @Param("ids") List<Long> ids);
 
@@ -72,4 +73,6 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
     List<NodeSortVO> getLowestNodeBySort(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 
     List<NodeSortVO> getAllNode(@Param("contractId") Long contractId);
+
+    Set<ChangeTokenForm> getNodeToken(@Param("contractId") Long contractId,@Param("ids") List<Long> ids,@Param("nodeId") Long nodeId,@Param("bDate") String businessDate);
 }

+ 14 - 6
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -52,12 +52,7 @@
             #{id}
         </foreach>
     </select>
-    <select id="getNodeToken" resultType="org.springblade.meter.entity.ChangeTokenMeter">
-        select * from s_change_token_meter
-        where is_deleted = 0 and contract_meter_id = #{nodeId}
-        order by create_time desc
-        limit 1
-    </select>
+
     <select id="getNodeDivide" resultType="org.springblade.meter.entity.MeterTreeContract">
         select *
         from s_meter_tree_contract
@@ -180,6 +175,19 @@
 
 
     </select>
+    <select id="getNodeToken" resultType="org.springblade.meter.entity.ChangeTokenForm">
+        <foreach collection="ids" item="id"  separator="union">
+            (select *
+            from s_change_token_form ctf
+            WHERE is_deleted = 0 and ctf.command_status = 1 and ctf.command_date &lt;= #{bDate}
+            and id in (  select change_token_id
+            from s_change_token_inventory
+            WHERE contract_meter_id = #{nodeId} and contract_id = #{contractId}
+            and contract_form_id = #{id} and is_deleted = 0 and is_collect_form = 0)
+            order by command_date desc
+            limit 1)
+        </foreach>
+    </select>
 
 
 </mapper>

+ 3 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java

@@ -21,12 +21,10 @@ import org.springblade.core.mp.support.Query;
 import org.springblade.meter.dto.MiddleMeterApplyDTO;
 import org.springblade.meter.entity.MiddleMeterApply;
 import org.springblade.core.mp.base.BaseService;
-import org.springblade.meter.vo.MeterInventoryDetailVO;
-import org.springblade.meter.vo.MeterInventoryVO;
-import org.springblade.meter.vo.MiddleMeterApplyVO;
-import org.springblade.meter.vo.ResolveInventoryVO;
+import org.springblade.meter.vo.*;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -44,7 +42,7 @@ public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply>
 
     void add(MiddleMeterApplyDTO dto);
 
-    String getNodeToken(Long nodeId);
+    MiddleMeterTokenVO getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate);
 
     String getNodeDivide(Long nodeId);
 

+ 17 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java

@@ -40,6 +40,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -125,6 +126,13 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
     @Override
     @Transactional
     public void add(ChangeTokenFormDTO dto) {
+        //校验编号是否存在
+        ChangeTokenForm one = this.getOne(new LambdaQueryWrapper<ChangeTokenForm>()
+                .eq(ChangeTokenForm::getContractId,dto.getContractId())
+                .eq(ChangeTokenForm::getChangeNumber, dto.getChangeNumber()));
+        if (one != null){
+            throw new ServiceException("当前编号已经存在,请更改后保存");
+        }
         //复制出基础数据
         Long id = SnowFlakeUtil.getId();
         dto.setId(id);
@@ -315,6 +323,13 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
     @Override
     @Transactional
     public void update2(ChangeTokenFormDTO dto) {
+        //校验编号是否存在,未排除当前
+//        ChangeTokenForm one = this.getOne(new LambdaQueryWrapper<ChangeTokenForm>()
+//                .eq(ChangeTokenForm::getContractId,dto.getContractId())
+//                .eq(ChangeTokenForm::getChangeNumber, dto.getChangeNumber()));
+//        if (one != null){
+//            throw new ServiceException("当前编号已经存在,请更改后保存");
+//        }
         //获取当前变更令,判断上报状态
         ChangeTokenForm tokenForm = this.getById(dto.getId());
         if (tokenForm.getApproveStatus() != 0){
@@ -548,7 +563,7 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
             inventory.setContractId(form2.getContractId());
             inventory.setChangeTokenId(vo2.getChangeTokenId());
             inventory.setContractFormId(vo2.getId());
-            inventory.setContractMeterId(vo2.getContractMeterId());
+//            inventory.setContractMeterId(vo2.getContractMeterId());
             //设置汇总清单的数量
             inventory.setChangeBeforeTotal(form2.getChangeTotal());
             inventory.setChangeTotal(total);
@@ -647,7 +662,7 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
         this.update(new LambdaUpdateWrapper<ChangeTokenForm>()
             .eq(ChangeTokenForm::getId,id)
             .set(ChangeTokenForm::getCommandStatus,1)
-            .set(ChangeTokenForm::getCommandDate, LocalDate.now()));
+            .set(ChangeTokenForm::getCommandDate, LocalDateTime.now()));
         //异步重新计算节点金额,和修改施工图号,此方法放到最后,待所有操作成功后再执行
         meterTreeContractService.asyncCalculateNodeMoney(allNode);
     }

+ 32 - 10
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -37,9 +37,11 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -192,18 +194,38 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
      * 获取当前节点变更令
      */
     @Override
-    public String getNodeToken(Long nodeId) {
-        //判断是否存在变更令
-        ChangeTokenMeter nodeToken = baseMapper.getNodeToken(nodeId);
-        if (nodeToken == null){
-            return null;
+    public MiddleMeterTokenVO getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate) {
+        if (nodeId == null || StringUtils.isBlank(formIds) || StringUtils.isBlank(businessDate)){
+            throw new ServiceException("请求参数错误,请检查是否有节点id,业务日期,和计量清单");
+        }
+        MiddleMeterTokenVO vo = new MiddleMeterTokenVO();
+        //当前没有清单就没有变更令
+        if (StringUtils.isBlank(formIds)){
+            return vo;
         }
-        //获取变更令
-        ChangeTokenForm tokenForm = baseMapper.getTokenById(nodeToken.getChangeTokenId());
-        if (tokenForm != null && StringUtils.isNotBlank(tokenForm.getChangeNumber())) {
-            return tokenForm.getChangeNumber();
+        //判断是否存在变更令
+        List<Long> ids = Func.toLongList(formIds);
+        Set<ChangeTokenForm> forms = baseMapper.getNodeToken(contractId,ids,nodeId,businessDate);
+        if (forms.size() != 0){
+            //设置变更令id
+            vo.setChangeTokenIds(forms.stream().map(l->l.getId()+"").collect(Collectors.joining(",")));
+            //获取编号拼接
+            vo.setChangeTokenNumber(forms.stream().map(ChangeTokenForm::getChangeNumber).collect(Collectors.joining(",")));
+            //获取变更令附件并转换
+            List<AttachmentForm> files = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()
+                    .in(AttachmentForm::getMasterId,forms.stream().map(ChangeTokenForm::getId).collect(Collectors.toList()))
+                    );
+            if (files.size() != 0){
+                files.stream().forEach(l->{
+                    l.setId(null);
+                    l.setMasterId(null);
+                    l.setFileType(2);
+                });
+                vo.setFiles(files);
+            }
         }
-        return null;
+
+        return vo;
     }
 
     /**