Bladeren bron

Merge remote-tracking branch 'origin/master'

liuyc 1 jaar geleden
bovenliggende
commit
900f821144
40 gewijzigde bestanden met toevoegingen van 974 en 102 verwijderingen
  1. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterPeriodDTO.java
  2. 11 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MiddleMeterApplyDTO.java
  3. 2 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenForm.java
  4. 11 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java
  5. 11 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java
  6. 7 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MaterialMeterForm.java
  7. 7 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MiddleMeterApply.java
  8. 2 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/StatementFileForm.java
  9. 40 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractInventoryFormVO2.java
  10. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/InterimPayCertificateVO.java
  11. 7 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MaterialMeterFormVO.java
  12. 61 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryDetailVO.java
  13. 46 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java
  14. 7 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterApplyVO.java
  15. 40 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ResolveInventoryVO.java
  16. 18 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java
  17. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMaterialController.java
  18. 2 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMeterPeriodController.java
  19. 44 39
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InterimPayCertificateController.java
  20. 89 32
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java
  21. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java
  22. 9 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml
  23. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.java
  24. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml
  25. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.java
  26. 5 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.xml
  27. 4 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MaterialMeterFormMapper.xml
  28. 21 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java
  29. 55 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  30. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java
  31. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractMaterialService.java
  32. 12 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInterimPayCertificateService.java
  33. 6 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java
  34. 26 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java
  35. 52 8
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java
  36. 5 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java
  37. 62 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateServiceImpl.java
  38. 6 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java
  39. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterPeriodServiceImpl.java
  40. 271 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterPeriodDTO.java

@@ -32,6 +32,9 @@ import java.util.List;
 @Data
 public class MeterPeriodDTO {
 
+	@ApiModelProperty(value = "项目id")
+	private Long projectId;
+
 	@ApiModelProperty(value = "合同段id")
 	private Long contractId;
 

+ 11 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MiddleMeterApplyDTO.java

@@ -16,9 +16,14 @@
  */
 package org.springblade.meter.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.meter.entity.MiddleMeterApply;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.meter.vo.MeterInventoryVO;
+
+import java.util.List;
 
 /**
  * 中间计量申请表数据传输对象实体类
@@ -31,4 +36,10 @@ import lombok.EqualsAndHashCode;
 public class MiddleMeterApplyDTO extends MiddleMeterApply {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "计量清单列表")
+	private List<MeterInventoryVO> formList;
+
+	@ApiModelProperty(value = "附件集合")
+	private List<AttachmentForm> fileList;
+
 }

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

@@ -123,8 +123,8 @@ public class ChangeTokenForm extends BaseEntity {
     /**
      * 下达状态
      */
-    @ApiModelProperty(value = "下达状态")
-    private String commandStatus;
+    @ApiModelProperty(value = "下达状态0未下达1已下达")
+    private Integer commandStatus;
 
 
 }

+ 11 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InterimPayCertificate.java

@@ -55,6 +55,11 @@ public class InterimPayCertificate extends BaseEntity {
      */
     @ApiModelProperty(value = "合同计量期id")
     private Long contractPeriodId;
+    /**
+     * 计量期
+     */
+    @ApiModelProperty(value = "合同计量期-期号")
+    private String periodNumber;
     /**
      * 材料计量期id逗号分隔
      */
@@ -95,6 +100,12 @@ public class InterimPayCertificate extends BaseEntity {
      */
     @ApiModelProperty(value = "支付金额")
     private BigDecimal payMoney;
+    /**
+     * 是否锁定
+     */
+    @ApiModelProperty(value = "是否锁定:0未锁定,1锁定")
+    private Integer isLock;
+
 
 
 }

+ 11 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormApply.java

@@ -19,6 +19,7 @@ package org.springblade.meter.entity;
 import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
@@ -63,6 +64,16 @@ public class InventoryFormApply extends BaseEntity {
      */
     @ApiModelProperty(value = "本期计量数量")
     private Integer currentMeterTotal;
+    /**
+     * 本期计量金额
+     */
+    @ApiModelProperty(value = "本期计量金额")
+    private BigDecimal currentMeterMoney;
+    /**
+     * 合同计量期id
+     */
+    @ApiModelProperty(value = "合同计量期id")
+    private Long contractPeriodId;
 
 
 }

+ 7 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MaterialMeterForm.java

@@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
@@ -79,6 +80,11 @@ public class MaterialMeterForm extends BaseEntity {
      */
     @ApiModelProperty(value = "计量金额")
     private BigDecimal meterMoney;
+    /**
+     * 业务日期
+     */
+    @ApiModelProperty(value = "业务日期")
+    private LocalDate businessDate;
     /**
      * 备料堆放地点
      */
@@ -117,7 +123,7 @@ public class MaterialMeterForm extends BaseEntity {
     /**
      * 审批状态
      */
-    @ApiModelProperty(value = "审批状态")
+    @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批,3已废除")
     private Integer approveStatus;
     /**
      * 排序

+ 7 - 2
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MiddleMeterApply.java

@@ -98,8 +98,8 @@ public class MiddleMeterApply extends BaseEntity {
     /**
      * 变更令id
      */
-    @ApiModelProperty(value = "变更令id")
-    private Long changeTokenId;
+    @ApiModelProperty(value = "变更令编号")
+    private String changeTokenNumber;
     /**
      * 图片地址
      */
@@ -110,6 +110,11 @@ public class MiddleMeterApply extends BaseEntity {
      */
     @ApiModelProperty(value = "计算式")
     private String calculateFormula;
+    /**
+     * 审批状态
+     */
+    @ApiModelProperty(value = "审批状态,0未上报,1待审批,2已审批,3已废除")
+    private Integer approveStatus;
 
 
 }

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

@@ -51,8 +51,8 @@ public class StatementFileForm extends BaseEntity {
     /**
      * 报表id
      */
-    @ApiModelProperty(value = "报表id")
-    private Long statementId;
+    @ApiModelProperty(value = "计量期id")
+    private Long meterPeriodId;
     /**
      * 报表类型:1中期支付2材料3看开工
      */

+ 40 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractInventoryFormVO2.java

@@ -0,0 +1,40 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.ContractInventoryForm;
+
+/**
+ * 合同工程清单VO  懒加载树返回单层节点
+ *
+ * @author BladeX
+ * @since 2023-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ContractInventoryFormVO2 extends ContractInventoryForm {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "ture有子节点,false没有子节点")
+	private Boolean hasChild;
+
+	@ApiModelProperty(value = "节点名称")
+	private String nodeName;
+}

+ 6 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/InterimPayCertificateVO.java

@@ -16,10 +16,13 @@
  */
 package org.springblade.meter.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.meter.entity.InterimPayCertificate;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * 中期支付证书视图实体类
  *
@@ -31,4 +34,7 @@ import lombok.EqualsAndHashCode;
 public class InterimPayCertificateVO extends InterimPayCertificate {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "支付项集合")
+	List<Object> payList;
+
 }

+ 7 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MaterialMeterFormVO.java

@@ -22,6 +22,7 @@ import org.springblade.meter.entity.MaterialMeterForm;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -38,6 +39,12 @@ public class MaterialMeterFormVO extends MaterialMeterForm {
 	@ApiModelProperty(value = "审批状态名称")
 	private String approveStatusName;
 
+	@ApiModelProperty(value = "计量期名称")
+	private String meterPeriodName;
+
+	@ApiModelProperty(value = "合同材料名称")
+	private String contractMaterialName;
+
 	@ApiModelProperty(value = "材料是否符合要求名称")
 	private String materialConformName;
 

+ 61 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryDetailVO.java

@@ -0,0 +1,61 @@
+package org.springblade.meter.vo;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Param   计量清单明细视图类,用于中间计量申请
+ * @Author wangwl
+ * @Date 2023/12/5 17:18
+ **/
+@Data
+public class MeterInventoryDetailVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "清单id")
+    private Long contractFormId;
+
+    @ApiModelProperty(value = "清单编号")
+    private String formNumber;
+
+    @ApiModelProperty(value = "变更后数量")
+    private Integer changeTotal;
+
+    @ApiModelProperty(value = "审批状态名称")
+    private String approveStatusName;
+
+    @ApiModelProperty(value = "计量期名称")
+    private String meterPeriodName;
+
+    @ApiModelProperty(value = "工程划分")
+    private String engineerDivide;
+
+    @ApiModelProperty(value = "审核状态名称")
+    private String formName;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal currentPrice;
+
+    @ApiModelProperty(value = "本期计量数量")
+    private Integer currentMeterTotal;
+
+    @ApiModelProperty(value = "本期计量金额")
+    private BigDecimal currentMeterMoney;
+
+    @ApiModelProperty(value = "完成金额")
+    private BigDecimal allMeterMoney;
+
+    @ApiModelProperty(value = "累计计量数量")
+    private Integer allMeterTotal;
+
+    @ApiModelProperty(value = "明细")
+    private List<MeterInventoryDetailVO> detail;
+
+
+}

+ 46 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java

@@ -0,0 +1,46 @@
+package org.springblade.meter.vo;
+
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param   计量清单视图类,用于中间计量申请
+ * @Author wangwl
+ * @Date 2023/12/5 17:18
+ **/
+@Data
+public class MeterInventoryVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "清单编号")
+    private String formNumber;
+
+    @ApiModelProperty(value = "清单名称")
+    private String formName;
+
+    @ApiModelProperty(value = "单价")
+    private BigDecimal currentPrice;
+
+    @ApiModelProperty(value = "分解数量")
+    private Integer resolveTotal;
+
+    @ApiModelProperty(value = "变更后数量")
+    private Integer changeTotal;
+
+    @ApiModelProperty(value = "本期计量数量")
+    private Integer currentMeterTotal;
+
+    @ApiModelProperty(value = "含变更数量")
+    private Integer containChangeTotal;
+
+    @ApiModelProperty(value = "本期计量金额")
+    private BigDecimal currentMeterMoney;
+
+}

+ 7 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterApplyVO.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.meter.vo;
 
+import io.swagger.annotations.ApiModelProperty;
 import org.springblade.meter.entity.MiddleMeterApply;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -31,4 +32,10 @@ import lombok.EqualsAndHashCode;
 public class MiddleMeterApplyVO extends MiddleMeterApply {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "审批状态名称")
+	private String approveStatusName;
+
+	@ApiModelProperty(value = "计量期号")
+	private String periodNumber;
+
 }

+ 40 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ResolveInventoryVO.java

@@ -0,0 +1,40 @@
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param   分解清单视图类,用于中间计量申请
+ * @Author wangwl
+ * @Date 2023/12/5 18:22
+ **/
+@Data
+public class ResolveInventoryVO {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @ApiModelProperty(value = "清单编号")
+    private String formNumber;
+
+    @ApiModelProperty(value = "清单名称")
+    private String formName;
+
+    @ApiModelProperty(value = "现在单价")
+    private BigDecimal currentPrice;
+
+    @ApiModelProperty(value = "合同数量")
+    private Integer contractTotal;
+
+    @ApiModelProperty(value = "合同变更数量")
+    private Integer ChangeTotal;
+
+    @ApiModelProperty(value = "施工图变更后数量")
+    private Integer buildChangeTotal;
+
+    @ApiModelProperty(value = "分解剩余量")
+    private Integer resolveResidueTotal;
+
+}

+ 18 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java

@@ -26,6 +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.vo.ContractInventoryFormVO;
+import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
 import org.springblade.meter.vo.InventoryFormDetailVO;
 import org.springframework.web.bind.annotation.*;
@@ -69,6 +70,22 @@ public class ContractInventoryFormController extends BladeController {
 		return R.data(treeAll);
 	}
 
+	/**
+	 * 获取合同清单树懒加载
+	 */
+	@GetMapping("lazyTree")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "获取合同清单树-懒加载", notes = "返回懒加载树,首次节点父id传0")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "parentId", value = "父节点id", required = true),
+			@ApiImplicitParam(name = "contractId", value = "contractId", required = true),
+			@ApiImplicitParam(name = "projectId", value = "projectId", required = true)
+	})
+	public R<List<ContractInventoryFormVO2>> lazyTree(Long projectId, Long contractId, Long parentId){
+		List<ContractInventoryFormVO2> treeAll = contractInventoryFormService.lazyTree(projectId,contractId,parentId);
+		return R.data(treeAll);
+	}
+
 
 	@PostMapping("importExcel")
 	@ApiOperationSupport(order = 1)
@@ -153,7 +170,7 @@ public class ContractInventoryFormController extends BladeController {
 	 * 获取导入模板 合同工程清单表
 	 */
 	@GetMapping("/getImportTemplate")
-	@ApiOperationSupport(order = 7)
+	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "获取导入模板", notes = "返回导入模板URL")
 	public R<String> getImportTemplate() {
 		return R.data("https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20231201/853cebb7e9c89c982dd15f842fed42a3.xls");

+ 3 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMaterialController.java

@@ -33,6 +33,8 @@ import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.meter.service.IContractMaterialService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 合同材料表 控制器
  *
@@ -92,7 +94,7 @@ public class ContractMaterialController extends BladeController {
 	@GetMapping("/materialTree")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "材料树", notes = "传入合同id")
-	public R<ContractMaterialTreeVO> materialTree(Long contractId) {
+	public R<List<ContractMaterialTreeVO>> materialTree(Long contractId) {
 		return R.data(contractMaterialService.materialTree(contractId));
 	}
 

+ 2 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractMeterPeriodController.java

@@ -77,7 +77,7 @@ public class ContractMeterPeriodController extends BladeController {
 	}
 
 	/**
-	 * 计量期列表-全部 材料开工计量期表
+	 * 计量期列表-全部
 	 */
 	@GetMapping("/allPeriod")
 	@ApiOperationSupport(order = 3)
@@ -87,7 +87,7 @@ public class ContractMeterPeriodController extends BladeController {
 	}
 
 	/**
-	 * 计量期列表-未关联报表 材料开工计量期表
+	 * 计量期列表-未关联报表
 	 */
 	@GetMapping("/conditionPeriod")
 	@ApiOperationSupport(order = 3)

+ 44 - 39
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InterimPayCertificateController.java

@@ -16,9 +16,7 @@
  */
 package org.springblade.meter.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
@@ -27,6 +25,7 @@ import org.springblade.core.mp.support.Condition;
 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.vo.InterimPayCertificateVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -49,68 +48,74 @@ public class InterimPayCertificateController extends BladeController {
 	private final IInterimPayCertificateService interimPayCertificateService;
 
 	/**
-	 * 详情
+	 * 新增 中期支付证书
 	 */
-	@GetMapping("/detail")
+	@PostMapping("/add")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入interimPayCertificate")
-	public R<InterimPayCertificate> detail(InterimPayCertificate interimPayCertificate) {
-		InterimPayCertificate detail = interimPayCertificateService.getOne(Condition.getQueryWrapper(interimPayCertificate));
-		return R.data(detail);
+	@ApiOperation(value = "新增", notes = "传入interimPayCertificate")
+	public R add(@Valid @RequestBody InterimPayCertificate interimPayCertificate) {
+		interimPayCertificateService.add(interimPayCertificate);
+		return R.success("新增成功");
 	}
 
 	/**
-	 * 分页 中期支付证书
+	 * 详情
 	 */
-	@GetMapping("/list")
+	@GetMapping("/detail")
 	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入interimPayCertificate")
-	public R<IPage<InterimPayCertificate>> list(InterimPayCertificate interimPayCertificate, Query query) {
-		IPage<InterimPayCertificate> pages = interimPayCertificateService.page(Condition.getPage(query), Condition.getQueryWrapper(interimPayCertificate));
-		return R.data(pages);
+	@ApiOperation(value = "详情-修改时回显", notes = "传入id,返回详情,目前没有返回支付项集合")
+	public R<InterimPayCertificateVO> detail(Long id) {
+		InterimPayCertificateVO detail = interimPayCertificateService.detail(id);
+		return R.data(detail);
 	}
 
-
-
 	/**
-	 * 新增 中期支付证书
+	 * 修改 中期支付证书
 	 */
-	@PostMapping("/save")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增", notes = "传入interimPayCertificate")
-	public R save(@Valid @RequestBody InterimPayCertificate interimPayCertificate) {
-		return R.status(interimPayCertificateService.save(interimPayCertificate));
+	@PostMapping("/update")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "修改", notes = "传入interimPayCertificate,只需要传入和新增时相同的参数")
+	public R update(@Valid @RequestBody InterimPayCertificate interimPayCertificate) {
+		interimPayCertificateService.update2(interimPayCertificate);
+		return R.success("修改成功");
 	}
 
 	/**
-	 * 修改 中期支付证书
+	 * 分页 中期支付证书
 	 */
-	@PostMapping("/update")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "修改", notes = "传入interimPayCertificate")
-	public R update(@Valid @RequestBody InterimPayCertificate interimPayCertificate) {
-		return R.status(interimPayCertificateService.updateById(interimPayCertificate));
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 4)
+	@ApiOperation(value = "分页", notes = "传入分页信息和合同id")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true)
+	})
+	public R<IPage<InterimPayCertificate>> page(InterimPayCertificate interimPayCertificate, Query query) {
+		IPage<InterimPayCertificate> pages = interimPayCertificateService.page(Condition.getPage(query), Condition.getQueryWrapper(interimPayCertificate));
+		return R.data(pages);
 	}
 
 	/**
-	 * 新增或修改 中期支付证书
+	 * 锁定
 	 */
-	@PostMapping("/submit")
-	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "新增或修改", notes = "传入interimPayCertificate")
-	public R submit(@Valid @RequestBody InterimPayCertificate interimPayCertificate) {
-		return R.status(interimPayCertificateService.saveOrUpdate(interimPayCertificate));
+	@GetMapping("/locking")
+	@ApiOperationSupport(order = 5)
+	@ApiOperation(value = "锁定", notes = "传入id和isLock,锁定isLock传0,取消锁定传1")
+	public R<String> locking(Long id,Integer isLock) {
+		interimPayCertificateService.locking(id,isLock);
+		return R.data("锁定成功");
 	}
 
+
 	
 	/**
 	 * 删除 中期支付证书
 	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
+	@PostMapping("/delete")
+	@ApiOperationSupport(order = 6)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(interimPayCertificateService.deleteLogic(Func.toLongList(ids)));
+	public R delete(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+		interimPayCertificateService.delete(Func.toLongList(ids));
+		return R.success("删除成功");
 	}
 
 	

+ 89 - 32
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -16,9 +16,7 @@
  */
 package org.springblade.meter.controller;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import io.swagger.annotations.ApiParam;
+import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
 import javax.validation.Valid;
@@ -27,6 +25,11 @@ import org.springblade.core.mp.support.Condition;
 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.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -34,6 +37,8 @@ import org.springblade.meter.entity.MiddleMeterApply;
 import org.springblade.meter.service.IMiddleMeterApplyService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 中间计量申请表 控制器
  *
@@ -48,60 +53,96 @@ public class MiddleMeterApplyController extends BladeController {
 
 	private final IMiddleMeterApplyService middleMeterApplyService;
 
+
 	/**
-	 * 详情
+	 * 添加清单
 	 */
-	@GetMapping("/detail")
+	@GetMapping("/addFormList")
 	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "详情", notes = "传入middleMeterApply")
-	public R<MiddleMeterApply> detail(MiddleMeterApply middleMeterApply) {
-		MiddleMeterApply detail = middleMeterApplyService.getOne(Condition.getQueryWrapper(middleMeterApply));
-		return R.data(detail);
+	@ApiOperation(value = "添加清单", notes = "传入节点id合同段id和已经存在的清单id,逗号分隔.返回清单集合")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true)
+	})
+	public R<List<ResolveInventoryVO>> addFormList(Long contractId , Long nodeId ,String ids) {
+		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(contractId,nodeId,ids);
+		return R.data(vos);
 	}
 
 	/**
-	 * 分页 中间计量申请表
+	 * 添加分解清单
 	 */
-	@GetMapping("/list")
+	@GetMapping("/addResolveForm")
 	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "分页", notes = "传入middleMeterApply")
-	public R<IPage<MiddleMeterApply>> list(MiddleMeterApply middleMeterApply, Query query) {
-		IPage<MiddleMeterApply> pages = middleMeterApplyService.page(Condition.getPage(query), Condition.getQueryWrapper(middleMeterApply));
-		return R.data(pages);
+	@ApiOperation(value = "添加分解清单", notes = "传入选中的行的id,逗号分隔.返回计量清单列表")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "ids", value = "传入选中的行的id,逗号分隔", required = true)
+	})
+	public R<List<MeterInventoryVO>> addResolveForm(Long contractId ,String ids) {
+		List<MeterInventoryVO> vos = middleMeterApplyService.addResolveForm(contractId,ids);
+		return R.data(vos);
 	}
 
+	/**
+	 * 获取当前节点工程划分
+	 */
+	@GetMapping("/getNodeDivide")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "获取当前节点工程划分", notes = "传入节点id")
+	public R<String> getNodeDivide(Long nodeId) {
+		return R.data(middleMeterApplyService.getNodeDivide(nodeId));
+	}
 
 	/**
-	 * 新增 中间计量申请表
+	 * 获取当前节点变更令
 	 */
-	@PostMapping("/save")
+	@GetMapping("/getNodeToken")
 	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "新增", notes = "传入middleMeterApply")
-	public R save(@Valid @RequestBody MiddleMeterApply middleMeterApply) {
-		return R.status(middleMeterApplyService.save(middleMeterApply));
+	@ApiOperation(value = "获取当前节点变更令", notes = "传入节点id,返回变更令编号,没有返回null")
+	public R<String> getNodeToken(Long nodeId) {
+		return R.data(middleMeterApplyService.getNodeToken(nodeId));
 	}
 
 	/**
-	 * 修改 中间计量申请表
+	 * 新增 中间计量申请表
 	 */
-	@PostMapping("/update")
+	@PostMapping("/add")
 	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "修改", notes = "传入middleMeterApply")
-	public R update(@Valid @RequestBody MiddleMeterApply middleMeterApply) {
-		return R.status(middleMeterApplyService.updateById(middleMeterApply));
+	@ApiOperation(value = "新增", notes = "传入middleMeterApplyDTO")
+	public R save(@Valid @RequestBody MiddleMeterApplyDTO dto) {
+		middleMeterApplyService.add(dto);
+		return R.success("新增成功");
 	}
 
 	/**
-	 * 新增或修改 中间计量申请表
+	 * 修改 中间计量申请表
 	 */
-	@PostMapping("/submit")
+	@PostMapping("/update")
 	@ApiOperationSupport(order = 6)
-	@ApiOperation(value = "新增或修改", notes = "传入middleMeterApply")
-	public R submit(@Valid @RequestBody MiddleMeterApply middleMeterApply) {
-		return R.status(middleMeterApplyService.saveOrUpdate(middleMeterApply));
+	@ApiOperation(value = "修改", notes = "传入middleMeterApplyDTO")
+	public R update(@Valid @RequestBody MiddleMeterApplyDTO dto) {
+		middleMeterApplyService.update2(dto);
+		return R.success("修改成功");
+	}
+
+	/**
+	 * 分页 中间计量申请表
+	 */
+	@GetMapping("/page")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传合同id,节点id,计量期id和分页信息")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "contractUnitId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+	})
+	public R<IPage<MiddleMeterApplyVO>> list(MiddleMeterApply middleMeterApply, Query query) {
+		IPage<MiddleMeterApplyVO> pages = middleMeterApplyService.page2(middleMeterApply,query);
+		return R.data(pages);
 	}
 
-	
 	/**
 	 * 删除 中间计量申请表
 	 */
@@ -109,8 +150,24 @@ public class MiddleMeterApplyController extends BladeController {
 	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		return R.status(middleMeterApplyService.deleteLogic(Func.toLongList(ids)));
+		middleMeterApplyService.delete(Func.toLongList(ids));
+		return R.success("删除成功");
+	}
+
+	/**
+	 * 清单明细
+	 */
+	@GetMapping("/formDetail")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "清单明细", notes = "传入合同id,合同计量期id,返回值包含展开明细")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+	})
+	public R<List<MeterInventoryDetailVO>> formDetail(MiddleMeterApply middleMeterApply) {
+		return R.data(middleMeterApplyService.formDetail(middleMeterApply));
 	}
 
+
 	
 }

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java

@@ -20,6 +20,7 @@ import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ContractInventoryForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.springblade.meter.vo.ContractInventoryFormVO;
+import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
 import org.springblade.meter.vo.InventoryFormDetailVO;
 
@@ -43,4 +44,6 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     void updateNodeLock(@Param("id") Long id,@Param("contractId") Long contractId,@Param("isLock") Integer isLock);
 
     void updateNode(@Param("id") Long id,@Param("contractId") Long contractId);
+
+    List<ContractInventoryFormVO2> getChildNode(@Param("contractId") Long contractId, @Param("parentId") Long parentId);
 }

+ 9 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml

@@ -68,6 +68,15 @@
         where is_deleted=0 and contract_id = #{contractId} and parent_id = #{id}
         order by sort
     </select>
+    <select id="getChildNode" resultType="org.springblade.meter.vo.ContractInventoryFormVO2">
+        select *,
+               if(scif.is_supplement=0,concat(scif.form_number, scif.form_name),concat(scif.form_number, scif.form_name,'[增补]')) as nodeName,
+               (select COUNT(1) from s_contract_inventory_form
+                WHERE contract_id = #{contractId} and is_deleted=0 and parent_id = scif.id) as hasChild
+        from s_contract_inventory_form scif
+        where contract_id = #{contractId} and is_deleted = 0 and parent_id = #{parentId}
+        order by sort
+    </select>
 
 
 </mapper>

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.java

@@ -16,8 +16,10 @@
  */
 package org.springblade.meter.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.InterimPayCertificate;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.meter.vo.InterimPayCertificateVO;
 
 /**
  * 中期支付证书 Mapper 接口
@@ -28,4 +30,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface InterimPayCertificateMapper extends BaseMapper<InterimPayCertificate> {
 
 
+    InterimPayCertificateVO getById(@Param("id") Long id);
 }

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InterimPayCertificateMapper.xml

@@ -24,6 +24,10 @@
         <result column="calculate_date" property="calculateDate"/>
         <result column="pay_money" property="payMoney"/>
     </resultMap>
+    <select id="getById" resultType="org.springblade.meter.vo.InterimPayCertificateVO">
+        select * from s_interim_pay_certificate
+        where id = #{id}
+    </select>
 
 
 </mapper>

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.java

@@ -16,9 +16,12 @@
  */
 package org.springblade.meter.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.InventoryFormMeter;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
+import java.util.List;
+
 /**
  * 工程清单与合同计量单元	中间表 Mapper 接口
  *
@@ -28,4 +31,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface InventoryFormMeterMapper extends BaseMapper<InventoryFormMeter> {
 
 
+    List<Long> getNodeAllForm(@Param("nodeId") Long nodeId);
 }

+ 5 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.xml

@@ -18,8 +18,11 @@
         <result column="contract_meter_id" property="contractMeterId"/>
         <result column="build_picture_total" property="buildPictureTotal"/>
     </resultMap>
-
-
+    <select id="getNodeAllForm" resultType="java.lang.Long">
+        select contract_form_id
+        from s_inventory_form_meter
+        where contract_meter_id = #{nodeId} and is_deleted = 0
+    </select>
 
 
 </mapper>

+ 4 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MaterialMeterFormMapper.xml

@@ -32,9 +32,10 @@
     </resultMap>
     <select id="meterPage" resultType="org.springblade.meter.vo.MaterialMeterFormVO">
         select *,
+             (select material_name from s_contract_material scm where scm.id = mmf.contract_material_id )  as contractMaterialName,
             CASE when approve_status = 0 then '未上报' when approve_status = 1 then '待审批' when approve_status = 2 then '已审批'
                  else '已废除' end as approveStatusName
-        from s_material_meter_form
+        from s_material_meter_form mmf
         where contract_id = #{contractId} and is_deleted = 0
         <if test="meterPeriodId!=null and meterPeriodId!=''">
             and meter_period_id = #{meterPeriodId}
@@ -42,9 +43,10 @@
     </select>
     <select id="detail" resultType="org.springblade.meter.vo.MaterialMeterFormVO">
         select *,
+              (select period_number from s_meter_period smp where smp.id = mmf.meter_period_id) as meterPeriodName,
             if(material_conform = 0,'否','是') as materialConformName,
             if(storage_conform = 0,'否','是') as storageConformName
-        from s_material_meter_form
+        from s_material_meter_form mmf
         where id = #{id}
     </select>
 

+ 21 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java

@@ -16,8 +16,18 @@
  */
 package org.springblade.meter.mapper;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+import org.springblade.meter.entity.ChangeTokenMeter;
+import org.springblade.meter.entity.MeterTreeContract;
 import org.springblade.meter.entity.MiddleMeterApply;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+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 java.util.List;
 
 /**
  * 中间计量申请表 Mapper 接口
@@ -28,4 +38,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
 
+    List<ResolveInventoryVO> getFormList(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId,@Param("ids") List<Long> ids);
+
+    List<MeterInventoryVO> getResolveFormInfo(@Param("contractId") Long contractId,@Param("ids") List<Long> longs);
+
+    ChangeTokenMeter getNodeToken(@Param("nodeId") Long nodeId);
+
+    List<MeterTreeContract> getNodeDivide(@Param("contractId") Long contractId, @Param("ids") List<Long> ids);
+
+    IPage<MiddleMeterApplyVO> page2(IPage<MiddleMeterApplyVO> iPage,@Param("apply") MiddleMeterApply middleMeterApply);
+
+    List<MeterInventoryDetailVO> meterPeriodAllForm(@Param("apply") MiddleMeterApply apply);
 }

+ 55 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml

@@ -23,11 +23,64 @@
         <result column="certificate_number" property="certificateNumber"/>
         <result column="meter_money" property="meterMoney"/>
         <result column="debit_form_id" property="debitFormId"/>
-        <result column="change_token_id" property="changeTokenId"/>
+        <result column="change_token_Number" property="changeTokenNumber"/>
         <result column="picture_url" property="pictureUrl"/>
         <result column="calculate_formula" property="calculateFormula"/>
     </resultMap>
-
+    <select id="getFormList" resultType="org.springblade.meter.vo.ResolveInventoryVO">
+        select id,form_number,form_name,current_price,contract_total,change_total,
+               change_total as buildChangeTotal,
+        (change_total - IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0)) as resolveResidueTotal
+        from s_contract_inventory_form  cif where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
+            AND id in
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+    </select>
+    <select id="getResolveFormInfo" resultType="org.springblade.meter.vo.MeterInventoryVO">
+        select id,form_number,form_name,current_price,change_total,
+               IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0) as resolveResidueTotal,
+               0 as currentMeterTotal,0 as containChangeTotal,0 as currentMeterMoney,
+               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0 and contract_form_id = cif.id),0)) as allMeterTotal
+        from s_contract_inventory_form  cif where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
+        AND id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{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} and command_status = 1 limit 1
+    </select>
+    <select id="getNodeDivide" resultType="org.springblade.meter.entity.MeterTreeContract">
+        select *
+        from s_meter_tree_contract
+        where is_deleted = 0 and contract_id = #{contractId}
+        AND id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+    <select id="page2" resultType="org.springblade.meter.vo.MiddleMeterApplyVO">
+        SELECT *,
+               CASE when approve_status = 0 then '未上报' when approve_status = 1 then '待审批' when approve_status = 2 then '已审批'
+                    else '已废除' end as approveStatusName,
+               (select period_number from s_contract_meter_period cmp where cmp.id = mma.contract_period_id) as periodNumber
+        FROM s_middle_meter_apply mma
+        WHERE contract_id = #{apply.contractId} and is_deleted = 0 and contract_period_id = #{apply.contractPeriodId}
+              and contract_unit_id in (SELECT id FROM s_meter_tree_contract mtc
+                    WHERE contract_id = #{apply.contractId} and is_deleted = 0
+                    and (mtc.id = #{apply.contractUnitId} or FIND_IN_SET(mtc.id = #{apply.contractUnitId}, ancestor) > 0)
+                  )
+    </select>
+    <select id="meterPeriodAllForm" resultType="org.springblade.meter.vo.MeterInventoryDetailVO">
+        SELECT cif.id,cif.form_number,cif.form_name,cif.current_price,cif.change_total,ifa.current_meter_total,ifa.current_meter_money,ifa.contract_form_id,
+               (select period_number from s_contract_meter_period cmp where cmp.id = ifa.contract_period_id) as meterPeriodName,
+                (select engineer_divide from s_middle_meter_apply mma where mma.id = ifa.middle_meter_id) as engineerDivide,
+               CASE when (select approve_status from s_middle_meter_apply mma where mma.id = ifa.middle_meter_id) = 0 then '未上报' when (select approve_status from s_middle_meter_apply mma where mma.id = ifa.middle_meter_id) = 1 then '待审批' when (select approve_status from s_middle_meter_apply mma where mma.id = ifa.middle_meter_id) = 2 then '已审批'
+                    else '已废除' end as approveStatusName
+        from s_inventory_form_apply ifa left join s_contract_inventory_form cif on ifa.contract_form_id = cif.id
+        WHERE ifa.contract_id = #{apply.contractId} and ifa.contract_period_id =#{apply.contractPeriodId} and ifa.is_deleted = 0
+    </select>
 
 
 </mapper>

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java

@@ -20,6 +20,7 @@ import org.springblade.core.tool.api.R;
 import org.springblade.meter.entity.ContractInventoryForm;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.vo.ContractInventoryFormVO;
+import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
 import org.springblade.meter.vo.InventoryFormDetailVO;
 import org.springframework.web.multipart.MultipartFile;
@@ -50,4 +51,6 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
     void sort(String ids);
 
     void delete(Long id,Long contractId);
+
+    List<ContractInventoryFormVO2> lazyTree(Long projectId, Long contractId, Long parentId);
 }

+ 3 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractMaterialService.java

@@ -20,6 +20,8 @@ import org.springblade.meter.entity.ContractMaterial;
 import org.springblade.core.mp.base.BaseService;
 import org.springblade.meter.vo.ContractMaterialTreeVO;
 
+import java.util.List;
+
 /**
  * 合同材料表 服务类
  *
@@ -29,5 +31,5 @@ import org.springblade.meter.vo.ContractMaterialTreeVO;
 public interface IContractMaterialService extends BaseService<ContractMaterial> {
 
 
-    ContractMaterialTreeVO materialTree(Long contractId);
+    List<ContractMaterialTreeVO> materialTree(Long contractId);
 }

+ 12 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInterimPayCertificateService.java

@@ -18,6 +18,9 @@ package org.springblade.meter.service;
 
 import org.springblade.meter.entity.InterimPayCertificate;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.meter.vo.InterimPayCertificateVO;
+
+import java.util.List;
 
 /**
  * 中期支付证书 服务类
@@ -28,4 +31,13 @@ import org.springblade.core.mp.base.BaseService;
 public interface IInterimPayCertificateService extends BaseService<InterimPayCertificate> {
 
 
+    void add(InterimPayCertificate interimPayCertificate);
+
+    void update2(InterimPayCertificate interimPayCertificate);
+
+    void delete(List<Long> toLongList);
+
+    void locking(Long id, Integer isLock);
+
+    InterimPayCertificateVO detail(Long id);
 }

+ 6 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java

@@ -19,6 +19,8 @@ package org.springblade.meter.service;
 import org.springblade.meter.entity.InventoryFormMeter;
 import org.springblade.core.mp.base.BaseService;
 
+import java.util.List;
+
 /**
  * 工程清单与合同计量单元	中间表 服务类
  *
@@ -27,5 +29,9 @@ import org.springblade.core.mp.base.BaseService;
  */
 public interface IInventoryFormMeterService extends BaseService<InventoryFormMeter> {
 
+    //传入合同计量单元最底层节点id,获取节点下所有分解的清单id
+    List<Long> getNodeAllForm(Long nodeId);
+
+
 
 }

+ 26 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java

@@ -16,8 +16,17 @@
  */
 package org.springblade.meter.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+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 java.util.List;
 
 /**
  * 中间计量申请表 服务类
@@ -28,4 +37,21 @@ import org.springblade.core.mp.base.BaseService;
 public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply> {
 
 
+    List<ResolveInventoryVO> addFormList(Long contractId,Long nodeId , String ids);
+
+    List<MeterInventoryVO> addResolveForm(Long contractId ,String ids);
+
+    void add(MiddleMeterApplyDTO dto);
+
+    String getNodeToken(Long nodeId);
+
+    String getNodeDivide(Long nodeId);
+
+    void update2(MiddleMeterApplyDTO dto);
+
+    IPage<MiddleMeterApplyVO> page2(MiddleMeterApply middleMeterApply, Query query);
+
+    void delete(List<Long> ids);
+
+    List<MeterInventoryDetailVO> formDetail(MiddleMeterApply middleMeterApply);
 }

+ 52 - 8
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java

@@ -37,6 +37,7 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.meter.utils.ForestNodeMerger;
 import org.springblade.meter.vo.ContractInventoryFormVO;
+import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
 import org.springblade.meter.vo.InventoryFormDetailVO;
 import org.springframework.stereotype.Service;
@@ -256,7 +257,6 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
             info.setAncestors("0");
             info.setProjectId(projectId);
             info.setContractId(contractId);
-            info.setImportNumber("-1");
             info.setFormNumber("");
             info.setFormName("合同工程清单");
             info.setIsFormNode(0);
@@ -280,6 +280,19 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         }
         //查询下级节点集合,并统计合同金额,变更后金额
         List<ContractInventoryFormVO> list = baseMapper.getChildList(id,vo.getContractId());
+        //统计合同金额,变更后金额给当前节点设置
+        BigDecimal contractTotal = new BigDecimal(0);
+        BigDecimal changeTotal = new BigDecimal(0);
+        for (ContractInventoryFormVO formVO : list) {
+            if (formVO.getContractMoney() != null){
+                contractTotal = changeTotal.add(formVO.getContractMoney());
+            }
+            if (formVO.getChangeMoney() != null){
+                changeTotal = changeTotal.add(formVO.getChangeMoney());
+            }
+        }
+        vo.setContractMoney(contractTotal);
+        vo.setChangeMoney(changeTotal);
         vo.setList(list);
         return vo;
     }
@@ -312,6 +325,12 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
                 throw new ServiceException("增补清单必须为清单节点");
             }
         }
+        if (StringUtils.isBlank(form.getFormNumber())){
+            throw new ServiceException("清单编号不能为空");
+        }
+        if (StringUtils.isBlank(form.getFormName())){
+            throw new ServiceException("清单名称不能为空");
+        }
         //获取父级节点信息,判断是否已经锁定,判断是否为清单节点
         ContractInventoryForm parentNode = this.getById(form.getParentId());
         if (parentNode.getIsLock() == 1){
@@ -335,13 +354,13 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         //设置祖级节点
         form.setAncestors(parentNode.getAncestors()+","+parentNode.getId());
         //如果不是根节点则设置层级
-        if (parentNode.getNodeTier() != null) {
-            int i = form.getFormNumber().split("-").length - 1;
-            if (i != (parentNode.getNodeTier() + 1)){
-                throw new ServiceException("清单编号规则错误,请修改后保存");
-            }
-            form.setNodeTier(i);
-        }
+//        if (parentNode.getNodeTier() != null) {
+//            int i = form.getFormNumber().split("-").length - 1;
+//            if (i != (parentNode.getNodeTier() + 1)){
+//                throw new ServiceException("清单编号规则错误,请修改后保存");
+//            }
+//            form.setNodeTier(i);
+//        }
         this.save(form);
     }
 
@@ -423,6 +442,31 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         baseMapper.updateNode(id,contractId);
     }
 
+
+    /**
+     * 获取合同清单树懒加载
+     */
+    @Override
+    public List<ContractInventoryFormVO2> lazyTree(Long projectId, Long contractId, Long parentId) {
+        //获取当前节点下数据
+        List<ContractInventoryFormVO2> vos = baseMapper.getChildNode(contractId, parentId);
+        //如果不存在,则创建根节点
+        if (vos.size() == 0 && parentId == 0){
+            ContractInventoryForm info = new ContractInventoryForm();
+            info.setParentId(0L);
+            info.setAncestors("0");
+            info.setProjectId(projectId);
+            info.setContractId(contractId);
+            info.setFormNumber("");
+            info.setFormName("合同工程清单");
+            info.setIsFormNode(0);
+            baseMapper.insert(info);
+            vos = baseMapper.getChildNode(contractId,0L);
+            return vos;
+        }
+        return  vos;
+    }
+
     /**
      * 判断当前节点是否已经分解或变更过,变更过返回true
      */

+ 5 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractMaterialServiceImpl.java

@@ -25,6 +25,7 @@ import org.springblade.meter.vo.ContractMaterialVO;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -41,7 +42,8 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
      * 材料树 合同材料表
      */
     @Override
-    public ContractMaterialTreeVO materialTree(Long contractId) {
+    public List<ContractMaterialTreeVO> materialTree(Long contractId) {
+        List<ContractMaterialTreeVO> vos = new ArrayList<>();
         ContractMaterialTreeVO vo = new ContractMaterialTreeVO();
         vo.setId(-1L);
         vo.setNodeName("材料清单");
@@ -58,6 +60,7 @@ public class ContractMaterialServiceImpl extends BaseServiceImpl<ContractMateria
             vo.setHasChild(true);
             vo.setChildren(voList);
         }
-        return vo;
+        vos.add(vo);
+        return vos;
     }
 }

+ 62 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InterimPayCertificateServiceImpl.java

@@ -16,11 +16,18 @@
  */
 package org.springblade.meter.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import org.springblade.core.log.exception.ServiceException;
 import org.springblade.meter.entity.InterimPayCertificate;
+import org.springblade.meter.entity.MeterPeriod;
 import org.springblade.meter.mapper.InterimPayCertificateMapper;
 import org.springblade.meter.service.IInterimPayCertificateService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.meter.vo.InterimPayCertificateVO;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
 
 /**
  * 中期支付证书 服务实现类
@@ -32,5 +39,60 @@ import org.springframework.stereotype.Service;
 public class InterimPayCertificateServiceImpl extends BaseServiceImpl<InterimPayCertificateMapper, InterimPayCertificate> implements IInterimPayCertificateService {
 
 
+    /**
+     * 新增 中期支付证书
+     */
+    @Override
+    @Transactional
+    public void add(InterimPayCertificate interimPayCertificate) {
+        //生成报表,计算之后生成金额设置进支付证书
+        this.save(interimPayCertificate);
+    }
+
+    /**
+     * 修改 中期支付证书
+     */
+    @Override
+    @Transactional
+    public void update2(InterimPayCertificate interimPayCertificate) {
+        //生成报表,计算之后生成金额设置进支付证书
+        this.updateById(interimPayCertificate);
+    }
+
+    /**
+     * 删除 中期支付证书
+     */
+    @Override
+    public void delete(List<Long> toLongList) {
+        for (Long aLong : toLongList) {
+            //获取支付证书
+            InterimPayCertificate certificate = this.getById(aLong);
+            //判断是否锁定
+            if (certificate.getIsLock() == 0){
+                this.removeById(aLong);
+            }else {
+                throw new ServiceException("删除失败,当前证书已锁定");
+            }
+        }
+    }
+
+    @Override
+    public void locking(Long id, Integer isLock) {
+        Integer type;
+        if (isLock == 0){
+            type = 1;
+        }else {
+            type = 0;
+        }
+        this.update(new LambdaUpdateWrapper<InterimPayCertificate>()
+                .eq(InterimPayCertificate::getId,id)
+                .set(InterimPayCertificate::getIsLock,type));
+    }
 
+    @Override
+    public InterimPayCertificateVO detail(Long id) {
+        InterimPayCertificateVO vo = baseMapper.getById(id);
+        //设置支付项集合
+        return vo;
+    }
 }

+ 6 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java

@@ -22,6 +22,8 @@ import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * 工程清单与合同计量单元	中间表 服务实现类
  *
@@ -32,5 +34,8 @@ import org.springframework.stereotype.Service;
 public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryFormMeterMapper, InventoryFormMeter> implements IInventoryFormMeterService {
 
 
-
+    @Override
+    public List<Long> getNodeAllForm(Long nodeId) {
+        return baseMapper.getNodeAllForm(nodeId);
+    }
 }

+ 3 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterPeriodServiceImpl.java

@@ -68,6 +68,9 @@ public class MeterPeriodServiceImpl extends BaseServiceImpl<MeterPeriodMapper, M
             baseMapper.remove(dto.getContractId(),dto.getType());
             for (int i = 0; i < list.size(); i++) {
                 MeterPeriod period = list.get(i);
+                period.setProjectId(dto.getProjectId());
+                period.setContractId(dto.getContractId());
+                period.setType(dto.getType());
                 //校验开始结束日期
                 if (period.getPeriodYear() == null || period.getPeriodMonth() == null) {
                     throw new ServiceException("请填写年份、月份");

+ 271 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -16,11 +16,33 @@
  */
 package org.springblade.meter.service.impl;
 
-import org.springblade.meter.entity.MiddleMeterApply;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.common.utils.SnowFlakeUtil;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.mp.support.Query;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.meter.dto.MiddleMeterApplyDTO;
+import org.springblade.meter.entity.*;
 import org.springblade.meter.mapper.MiddleMeterApplyMapper;
-import org.springblade.meter.service.IMiddleMeterApplyService;
+import org.springblade.meter.service.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
+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.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 中间计量申请表 服务实现类
@@ -29,8 +51,255 @@ import org.springframework.stereotype.Service;
  * @since 2023-11-29
  */
 @Service
+@AllArgsConstructor
 public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterApplyMapper, MiddleMeterApply> implements IMiddleMeterApplyService {
 
+    private final IInventoryFormMeterService formMeterService;
+
+    private final IChangeTokenFormService changeTokenFormService;
+
+    private final MeterTreeContractService meterTreeContractService;
+
+    private final IInventoryFormApplyService inventoryFormApplyService;
+
+    private final IAttachmentFormService attachmentFormService;
+
+    
+
+    /**
+     * 添加清单
+     */
+    @Override
+    public List<ResolveInventoryVO> addFormList(Long contractId, Long nodeId ,String ids) {
+        //获取当前节点下关联的清单,如果没有直接返回
+        List<ResolveInventoryVO> vos = new ArrayList<>();
+        List<Long> list = formMeterService.getNodeAllForm(nodeId);
+        if (list.size() == 0) {
+            return vos;
+        }
+        //去除已经存在的清单,如果去除之后集合为空,则直接返回
+        if (StringUtils.isNotBlank(ids)) {
+            //查询出还未添加的清单
+            list = list.stream().filter(l -> !ids.contains(l.toString())).collect(Collectors.toList());
+            if (list.size() == 0) {
+                return vos;
+            }
+        }
+        vos = baseMapper.getFormList(contractId, nodeId, list);
+        return vos;
+    }
+
+    /**
+     * 添加分解清单
+     */
+    @Override
+    public List<MeterInventoryVO> addResolveForm(Long contractId ,String ids) {
+        List<MeterInventoryVO> vos = new ArrayList<>();
+        if (StringUtils.isBlank(ids)){
+            return vos;
+        }
+        //获取清单和分解信息
+        List<Long> longs = Func.toLongList(ids);
+        vos = baseMapper.getResolveFormInfo(contractId,longs);
+        return vos;
+    }
+
+    /**
+     * 新增 中间计量申请表
+     */
+    @Override
+    @Transactional
+    public void add(MiddleMeterApplyDTO dto) {
+        //保存中间计量申请,设置计量金额为0,如果存在计量清单,则统计计量清单总金额
+        MiddleMeterApply apply = new MiddleMeterApply();
+        Long id = SnowFlakeUtil.getId();
+        dto.setId(id);
+        BeanUtils.copyProperties(dto,apply);
+        apply.setMeterMoney(null);
+        //保存计量清单
+        List<MeterInventoryVO> formList = dto.getFormList();
+         if (formList.size() != 0){
+             BigDecimal big = new BigDecimal(0);
+             //保存清单
+            List<InventoryFormApply> formApplies = formList.stream().map(l -> {
+                InventoryFormApply formApply = new InventoryFormApply();
+                formApply.setProjectId(dto.getProjectId());
+                formApply.setContractId(dto.getContractId());
+                formApply.setContractFormId(l.getId());
+                formApply.setMiddleMeterId(id);
+                formApply.setContractPeriodId(dto.getContractPeriodId());
+                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
+                    formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
+                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(new BigDecimal(l.getCurrentMeterTotal())));
+                }else {
+                    throw new ServiceException("计量金额和计量数量不能为空");
+                }
+                return formApply;
+            }).collect(Collectors.toList());
+             for (InventoryFormApply formApply : formApplies) {
+                 big = big.add(formApply.getCurrentMeterMoney());
+             }
+             apply.setMeterMoney(big);
+            inventoryFormApplyService.saveBatch(formApplies);
+        }
+        this.save(apply);
+        //保存附件
+        List<AttachmentForm> fileList = dto.getFileList();
+        if (fileList != null && fileList.size() != 0) {
+            for (AttachmentForm file : fileList) {
+                file.setMasterId(id);
+            }
+            attachmentFormService.saveBatch(fileList);
+        }
+
+    }
+
+    /**
+     * 获取当前节点变更令
+     */
+    @Override
+    public String getNodeToken(Long nodeId) {
+        //判断是否存在变更令
+        ChangeTokenMeter nodeToken = baseMapper.getNodeToken(nodeId);
+        if (nodeToken == null){
+            return null;
+        }
+        //获取变更令
+        ChangeTokenForm tokenForm = changeTokenFormService.getById(nodeToken.getId());
+        return tokenForm.getChangeNumber();
+    }
+
+    /**
+     * 获取当前节点工程划分
+     */
+    @Override
+    public String getNodeDivide(Long nodeId) {
+        //获取当前节点
+        MeterTreeContract contract = meterTreeContractService.getById(nodeId);
+        //获取祖级节点
+        String ancestor = contract.getAncestor();
+        List<Long> ids = Func.toLongList(ancestor);
+        List<MeterTreeContract> list = baseMapper.getNodeDivide(contract.getContractId(), ids);
+        StringBuilder str = new StringBuilder();
+        for (MeterTreeContract c : list) {
+            str.append(c.getNodeName()+"-");
+        }
+        str.append(contract.getNodeName());
+        return str.toString();
+    }
+
+    /**
+     * 修改 中间计量申请表
+     */
+    @Override
+    @Transactional
+    public void update2(MiddleMeterApplyDTO dto) {
+        //保存中间计量申请,设置计量金额为0,如果存在计量清单,则统计计量清单总金额
+        MiddleMeterApply apply = new MiddleMeterApply();
+        BeanUtils.copyProperties(dto,apply);
+        apply.setMeterMoney(null);
+        //保存计量清单
+        List<MeterInventoryVO> formList = dto.getFormList();
+        if (formList.size() != 0){
+            BigDecimal big = new BigDecimal(0);
+            //删除当前节点本期清单
+            inventoryFormApplyService.remove(new LambdaQueryWrapper<InventoryFormApply>()
+                    .eq(InventoryFormApply::getMiddleMeterId,dto.getId())
+                    .eq(InventoryFormApply::getContractPeriodId,dto.getContractPeriodId()));
+            //保存清单
+            List<InventoryFormApply> formApplies = formList.stream().map(l -> {
+                InventoryFormApply formApply = new InventoryFormApply();
+                formApply.setProjectId(dto.getProjectId());
+                formApply.setContractId(dto.getContractId());
+                formApply.setContractFormId(l.getId());
+                formApply.setMiddleMeterId(dto.getId());
+                formApply.setContractPeriodId(dto.getContractPeriodId());
+                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
+                    formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
+                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(new BigDecimal(l.getCurrentMeterTotal())));
+                }else {
+                    throw new ServiceException("计量金额和计量数量不能为空");
+                }
+                return formApply;
+            }).collect(Collectors.toList());
+            for (InventoryFormApply formApply : formApplies) {
+                big = big.add(formApply.getCurrentMeterMoney());
+            }
+            apply.setMeterMoney(big);
+            inventoryFormApplyService.saveBatch(formApplies);
+        }
+        this.updateById(apply);
+        //删除附件
+        attachmentFormService.deleteByMasterId(dto.getId());
+        //保存附件
+        List<AttachmentForm> fileList = dto.getFileList();
+        if (fileList != null && fileList.size() != 0) {
+            for (AttachmentForm file : fileList) {
+                file.setMasterId(dto.getId());
+            }
+            attachmentFormService.saveOrUpdateBatch(fileList);
+        }
+
+    }
+
+    /**
+     * 分页 中间计量申请表
+     */
+    @Override
+    public IPage<MiddleMeterApplyVO> page2(MiddleMeterApply middleMeterApply, Query query) {
+        IPage<MiddleMeterApplyVO> iPage = new Page<>(query.getCurrent(),query.getSize());
+        iPage = baseMapper.page2(iPage,middleMeterApply);
+        return iPage;
+    }
 
+    /**
+     * 删除 中间计量申请表
+     */
+    @Override
+    @Transactional
+    public void delete(List<Long> ids) {
+        for (Long id : ids) {
+            //删除中间计量申请信息
+            baseMapper.deleteById(id);
+            //删除中间表当前中间计量申请数据
+            inventoryFormApplyService.remove(new LambdaQueryWrapper<InventoryFormApply>()
+                    .eq(InventoryFormApply::getMiddleMeterId,id));
+        }
+    }
 
+    /**
+     * 清单明细
+     */
+    @Override
+    public List<MeterInventoryDetailVO> formDetail(MiddleMeterApply apply) {
+        List<MeterInventoryDetailVO> vos = new ArrayList<>();
+        //查询当前计量期所有的计量清单
+        List<MeterInventoryDetailVO> list = baseMapper.meterPeriodAllForm(apply);
+        if (list.size() == 0){
+            return vos;
+        }
+        //按照清单id分组
+        Map<Long, List<MeterInventoryDetailVO>> map = list.stream().collect(Collectors.groupingBy(MeterInventoryDetailVO::getContractFormId));
+        //统计后插入结果集
+        for (Long aLong : map.keySet()) {
+            List<MeterInventoryDetailVO> voList = map.get(aLong);
+            MeterInventoryDetailVO vo = new MeterInventoryDetailVO();
+            MeterInventoryDetailVO vo1 = voList.get(0);
+            vo.setFormNumber(vo1.getFormNumber());
+            vo.setFormName(vo1.getFormName());
+            vo.setChangeTotal(vo1.getChangeTotal());
+            vo.setCurrentPrice(vo1.getCurrentPrice());
+            Integer total = 0;
+            BigDecimal money = new BigDecimal(0);
+            for (MeterInventoryDetailVO inventoryVO : voList) {
+                total += inventoryVO.getCurrentMeterTotal();
+                money = money.add(inventoryVO.getCurrentMeterMoney());
+            }
+            vo.setAllMeterTotal(total);
+            vo.setAllMeterMoney(money);
+            vo.setDetail(voList);
+            vos.add(vo);
+        }
+        return vos;
+    }
 }