Explorar o código

Merge remote-tracking branch 'origin/master' into master

yangyj hai 1 ano
pai
achega
6a7a999891
Modificáronse 70 ficheiros con 1035 adicións e 245 borrados
  1. 1 1
      blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java
  2. 1 1
      blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java
  3. 6 0
      blade-service-api/blade-manager-api/pom.xml
  4. 0 6
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java
  5. 8 0
      blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ContractInfoVO.java
  6. 28 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenAddFormDTO.java
  7. 12 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenFormDTO.java
  8. 2 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterTreeContractDTO.java
  9. 0 3
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java
  10. 5 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MaterialStartStatement.java
  11. 5 2
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterContractInfo.java
  12. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemContract.java
  13. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemProject.java
  14. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemSystem.java
  15. 4 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeTemplateInfo.java
  16. 21 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/MeterContractInfoClient.java
  17. 41 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO.java
  18. 46 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO2.java
  19. 77 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java
  20. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterInventoryVO.java
  21. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterTreeContractVO.java
  22. 9 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MiddleMeterApplyVO.java
  23. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/StartPayMeterFormVO.java
  24. 57 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ZeroChangeVO.java
  25. 2 6
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java
  26. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java
  27. 1 1
      blade-service/blade-business/src/main/java/org/springblade/business/utils/FunctionMain.java
  28. 2 2
      blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java
  29. 20 7
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java
  30. 4 2
      blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ExcelTabController.java
  31. 0 5
      blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java
  32. 20 19
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java
  33. 2 4
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ExcelTabServiceImpl.java
  34. 14 29
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java
  35. 13 15
      blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java
  36. 14 45
      blade-service/blade-manager/src/main/java/org/springblade/manager/utils/test.java
  37. 81 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ChangeTokenFormController.java
  38. 21 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java
  39. 23 5
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InventoryFormMeterController.java
  40. 6 10
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java
  41. 18 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java
  42. 19 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/feign/MeterContractInfoClientImpl.java
  43. 15 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java
  44. 61 2
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  45. 9 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.java
  46. 10 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ContractInventoryFormMapper.xml
  47. 2 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormApplyMapper.xml
  48. 3 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.java
  49. 3 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormMeterMapper.xml
  50. 1 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MaterialStartStatementMapper.xml
  51. 8 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterContractInfoMapper.java
  52. 5 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterContractInfoMapper.xml
  53. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.java
  54. 15 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MiddleMeterApplyMapper.xml
  55. 5 3
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/StartPayMeterFormMapper.xml
  56. 28 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenFormService.java
  57. 5 4
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java
  58. 5 1
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java
  59. 2 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/IMiddleMeterApplyService.java
  60. 8 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/MeterContractInfoService.java
  61. 100 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java
  62. 12 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ContractInventoryFormServiceImpl.java
  63. 28 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java
  64. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MaterialMeterFormServiceImpl.java
  65. 15 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterContractInfoServiceImpl.java
  66. 22 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java
  67. 4 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/StartPayMeterFormServiceImpl.java
  68. 55 30
      blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java
  69. 10 22
      blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java
  70. 2 0
      blade-service/blade-user/src/main/java/org/springblade/system/user/util/AesInfoUtil.java

+ 1 - 1
blade-common/src/main/java/org/springblade/common/constant/LauncherConstant.java

@@ -110,7 +110,7 @@ public interface LauncherConstant {
     /**
      * elk dev 地址
      */
-    String ELK_DEV_ADDR = "127.0.0.1:9000";
+    String ELK_DEV_ADDR = "192.168.0.119:9000";
 
     /**
      * elk prod 地址

+ 1 - 1
blade-common/src/main/java/org/springblade/common/launch/LauncherServiceImpl.java

@@ -43,7 +43,7 @@ public class LauncherServiceImpl implements LauncherService {
         PropsUtil.setProperty(props, "spring.datasource.dynamic.enabled", "false");
 
         // 开启elk日志
-        // PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
+        //PropsUtil.setProperty(props, "blade.log.elk.destination", LauncherConstant.elkAddr(profile));
 
         // seata注册地址
         // PropsUtil.setProperty(props, "seata.service.grouplist.default", LauncherConstant.seataAddr(profile));

+ 6 - 0
blade-service-api/blade-manager-api/pom.xml

@@ -23,6 +23,12 @@
             <version>2.9.1.RELEASE</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springblade</groupId>
+            <artifactId>blade-meter-api</artifactId>
+            <version>2.9.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
     <packaging>jar</packaging>
 

+ 0 - 6
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/feign/WbsTreeContractClient.java

@@ -1,6 +1,5 @@
 package org.springblade.manager.feign;
 
-import org.springblade.core.tool.api.R;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.manager.entity.WbsTreeContract;
 import org.springblade.manager.vo.AppWbsTreeContractVO;
@@ -12,7 +11,6 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
-import java.util.Map;
 
 import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
 
@@ -183,8 +181,4 @@ public interface WbsTreeContractClient {
     @GetMapping(API_PREFIX + "/searchNodeAllTableInfo")
     List<AppWbsTreeContractVO> searchNodeAllTableInfo(@RequestParam String primaryKeyId, @RequestParam String type, @RequestParam String contractId, @RequestParam String projectId, @RequestParam Long userId);
 
-    /*删除合同段本地缓存*/
-    @GetMapping(API_PREFIX + "/deleteContractLocalCache")
-    void deleteContractLocalCache(@RequestParam String contractId);
-
 }

+ 8 - 0
blade-service-api/blade-manager-api/src/main/java/org/springblade/manager/vo/ContractInfoVO.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import org.springblade.manager.entity.ContractInfo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.MeterContractInfo;
 
 import java.util.List;
 
@@ -33,4 +34,11 @@ public class ContractInfoVO extends ContractInfo {
     @ApiModelProperty("是否是默认项目")
     private Integer isDefault;
 
+    /**
+     * 计量合同段-关联详情信息
+     */
+    @ApiModelProperty("计量合同段-关联详情信息")
+    private MeterContractInfo meterContractInfo;
+
+
 }

+ 28 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenAddFormDTO.java

@@ -0,0 +1,28 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2023/12/7 16:35
+ **/
+@Data
+public class ChangeTokenAddFormDTO {
+
+    @ApiModelProperty(value = "合同id")
+    private Long contractId;
+
+    @ApiModelProperty(value = "显示类型")
+    private Integer showType;
+
+    @ApiModelProperty(value = "节点id")
+    private Long nodeId;
+
+    @ApiModelProperty(value = "搜索值")
+    private String searchValue;
+
+    @ApiModelProperty(value = "已经存在的变更申请清单id,逗号拼接")
+    private String ids;
+}

+ 12 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/ChangeTokenFormDTO.java

@@ -16,10 +16,14 @@
  */
 package org.springblade.meter.dto;
 
+import io.swagger.annotations.ApiModelProperty;
+import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.meter.entity.ChangeTokenForm;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * 变更令表数据传输对象实体类
  *
@@ -31,4 +35,12 @@ import lombok.EqualsAndHashCode;
 public class ChangeTokenFormDTO extends ChangeTokenForm {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "附件集合")
+	private List<AttachmentForm> nodeList;
+
+	@ApiModelProperty(value = "附件集合")
+	private List<AttachmentForm> formList;
+
+	@ApiModelProperty(value = "附件集合")
+	private List<AttachmentForm> fileList;
 }

+ 2 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/MeterTreeContractDTO.java

@@ -3,6 +3,7 @@ package org.springblade.meter.dto;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.meter.entity.MeterTreeContract;
+import org.springblade.meter.vo.ContractFromVO;
 
 import java.util.List;
 
@@ -13,6 +14,6 @@ import java.util.List;
 public class MeterTreeContractDTO extends MeterTreeContract {
 
     @ApiModelProperty(value = "分解清单列表详情")
-    private List<Object> decompositionList; //TODO 此处Obj替换为分解清单Bean对象
+    private List<ContractFromVO> decompositionList; //TODO 此处Obj替换为分解清单Bean对象
 
 }

+ 0 - 3
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/InventoryFormMeter.java

@@ -17,9 +17,6 @@
 package org.springblade.meter.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
-
-import java.io.Serializable;
-
 import io.swagger.annotations.ApiModelProperty;
 import org.springblade.core.mp.base.BaseEntity;
 import lombok.Data;

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

@@ -54,6 +54,11 @@ public class MaterialStartStatement extends BaseEntity {
      */
     @ApiModelProperty(value = "计量期id,s_meter_period")
     private Long meterPeriodId;
+    /**
+     * 计量期编号
+     */
+    @ApiModelProperty(value = "计量期编号")
+    private String periodNumber;
     /**
      * 1材料2开工
      */

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

@@ -1,16 +1,19 @@
 package org.springblade.meter.entity;
 
+import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springblade.core.mp.base.BaseEntity;
 
 import java.io.Serializable;
 import java.math.BigDecimal;
 
 /**
- * 计量合同段信息详情
+ * 计量合同段关联信息详情
  */
 @Data
-public class MeterContractInfo implements Serializable {
+@TableName(value = "s_meter_contract_info")
+public class MeterContractInfo extends BaseEntity {
 
     @ApiModelProperty(value = "合同段id")
     private Long contractId;

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

@@ -6,7 +6,7 @@ import lombok.Data;
 import org.springblade.core.mp.base.BaseEntity;
 
 /**
- * 合同段中期支付项信息
+ * 合同段中期支付项信息
  */
 @Data
 @TableName(value = "s_meter_mid_pay_item_contract")

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

@@ -6,7 +6,7 @@ import lombok.Data;
 import org.springblade.core.mp.base.BaseEntity;
 
 /**
- * 项目中期支付项信息
+ * 项目中期支付项信息
  */
 @Data
 @TableName(value = "s_meter_mid_pay_item_project")

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

@@ -6,7 +6,7 @@ import lombok.Data;
 import org.springblade.core.mp.base.BaseEntity;
 
 /**
- * 系统中期支付项信息
+ * 系统中期支付项信息
  */
 @Data
 @TableName(value = "s_meter_mid_pay_item_system")

+ 4 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeTemplateInfo.java

@@ -5,6 +5,10 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.core.mp.base.BaseEntity;
 
+
+/**
+ * 计量单元模板
+ */
 @Data
 @TableName(value = "s_meter_tree_template_info")
 public class MeterTreeTemplateInfo extends BaseEntity {

+ 21 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/feign/MeterContractInfoClient.java

@@ -0,0 +1,21 @@
+package org.springblade.meter.feign;
+
+import org.springblade.meter.entity.MeterContractInfo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import static org.springblade.core.launch.constant.AppConstant.APPLICATION_NAME_PREFIX;
+
+@FeignClient(value = APPLICATION_NAME_PREFIX + "meter")
+public interface MeterContractInfoClient {
+
+    /**
+     * 计量合同段详情信息关联保存或修改
+     *
+     * @param meterContractInfo
+     */
+    @PostMapping("/api/meter/contract/saveOrUpdate")
+    void saveOrUpdate(@RequestBody MeterContractInfo meterContractInfo);
+
+}

+ 41 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO.java

@@ -0,0 +1,41 @@
+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/7 15:52
+ **/
+@Data
+public class ChangeFormVO {
+
+    @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;
+}

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

@@ -0,0 +1,46 @@
+package org.springblade.meter.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * @Param   变更申请清单列表 -变更令使用
+ * @Author wangwl
+ * @Date 2023/12/7 15:52
+ **/
+@Data
+public class ChangeFormVO2 {
+
+    @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 currentChangeTotal;
+
+    @ApiModelProperty(value = "合同变更后数量(变更后)")
+    private Integer changeTotal;
+
+    @ApiModelProperty(value = "合同金额(变更前)")
+    private BigDecimal contractMoney;
+
+    @ApiModelProperty(value = "金额变更增减")
+    private BigDecimal currentChangeMoney;
+
+    @ApiModelProperty(value = "变更后金额(变更后)")
+    private BigDecimal changeMoney;
+}

+ 77 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ContractFromVO.java

@@ -0,0 +1,77 @@
+package org.springblade.meter.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.core.tool.node.INode;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @Param
+ * @Author zhuw
+ * @Date 2023/11/29 15:25
+ **/
+@Data
+public class ContractFromVO {
+
+    /**
+     * 主键ID
+     */
+    @JsonSerialize(using = ToStringSerializer.class)
+    private Long id;
+
+    /**
+     * 清单编号
+     */
+    @ApiModelProperty(value = "清单编号")
+    @ExcelProperty("清单编号")
+    private String formNumber;
+    /**
+     * 清单名称
+     */
+    @ApiModelProperty(value = "清单名称")
+    @ExcelProperty("清单名称")
+    private String formName;
+
+    /**
+     * 当前单价
+     */
+    @ApiModelProperty(value = "当前单价")
+    @ExcelIgnore
+    private BigDecimal currentPrice;
+
+    /**
+     * 合同数量
+     */
+    @ApiModelProperty(value = "合同数量")
+    @ExcelProperty("数量")
+    private Integer contractTotal;
+
+    /**
+     * 变更后数量
+     */
+    @ApiModelProperty(value = "变更后数量")
+    @ExcelIgnore
+    private Integer changeTotal;
+
+    /**
+     * 已分解量
+     */
+    @ApiModelProperty(value = "已分解量")
+    @ExcelIgnore
+    private Integer poseNum;
+
+    /**
+     * 是否增补
+     */
+    @ApiModelProperty(value = "是否增补")
+    @ExcelIgnore
+    private Integer isSupplement;
+}

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

@@ -43,4 +43,7 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "本期计量金额")
     private BigDecimal currentMeterMoney;
 
+    @ApiModelProperty(value = "累计计量数量")
+    private Integer allMeterTotal;
+
 }

+ 1 - 1
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MeterTreeContractVO.java

@@ -13,6 +13,6 @@ import java.util.List;
 public class MeterTreeContractVO extends MeterTreeContract {
 
     @ApiModelProperty(value = "分解清单列表详情")
-    private List<Object> decompositionList; //TODO 此处Obj替换为分解清单Bean对象
+    private List<ContractFromVO> decompositionList; //TODO 此处Obj替换为分解清单Bean对象
 
 }

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

@@ -17,10 +17,13 @@
 package org.springblade.meter.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import org.springblade.meter.entity.AttachmentForm;
 import org.springblade.meter.entity.MiddleMeterApply;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * 中间计量申请表视图实体类
  *
@@ -38,4 +41,10 @@ public class MiddleMeterApplyVO extends MiddleMeterApply {
 	@ApiModelProperty(value = "计量期号")
 	private String periodNumber;
 
+	@ApiModelProperty(value = "计量清单列表")
+	private List<MeterInventoryVO> formList;
+
+	@ApiModelProperty(value = "附件集合")
+	private List<AttachmentForm> fileList;
+
 }

+ 3 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/StartPayMeterFormVO.java

@@ -35,6 +35,9 @@ import java.util.List;
 public class StartPayMeterFormVO extends StartPayMeterForm {
 	private static final long serialVersionUID = 1L;
 
+	@ApiModelProperty(value = "期号")
+	private String periodNumber;
+
 	@ApiModelProperty(value = "审批状态名称")
 	private String approveStatusName;
 

+ 57 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ZeroChangeVO.java

@@ -0,0 +1,57 @@
+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/7 14:21
+ **/
+@Data
+public class ZeroChangeVO {
+
+    @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 BigDecimal contractMoney;
+
+    @ApiModelProperty(value = "生成变更时划分数量")
+    private Integer buildChangeTotal;
+
+    @ApiModelProperty(value = "现划分数量")
+    private Integer currentChangeTotal;
+
+    @ApiModelProperty(value = "修正量")
+    private Integer updateTotal;
+
+    @ApiModelProperty(value = "修正金额")
+    private BigDecimal updateMoney;
+
+    @ApiModelProperty(value = "核实量")
+    private Integer verifyTotal;
+
+    @ApiModelProperty(value = "核实金额")
+    private BigDecimal verifyMoney;
+
+    @ApiModelProperty(value = "状态")
+    private Integer statusName;
+
+}

+ 2 - 6
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/InformationQueryServiceImpl.java

@@ -953,9 +953,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                         RedisTemplate.delete(keysParentCount);
                     }
 
-                    //删除合同段本地缓存
-                    //wbsTreeContractClient.deleteContractLocalCache(String.valueOf(sgId));
-                    /*剥离到user服务中*/
+                    //删除本地缓存
                     userClient.deleteContractLocalCache(String.valueOf(sgId));
                 }
             }
@@ -980,9 +978,7 @@ public class InformationQueryServiceImpl extends BaseServiceImpl<InformationQuer
                 RedisTemplate.delete(keysParentCount);
             }
 
-            //删除合同段本地缓存
-            //wbsTreeContractClient.deleteContractLocalCache(contractId);
-            /*剥离到user服务中*/
+            //删除本地缓存
             userClient.deleteContractLocalCache(contractId);
         }
     }

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/TaskServiceImpl.java

@@ -576,7 +576,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
     }
 
 
-    @Scheduled(cron = "0 */1 * * * ?")
+   // @Scheduled(cron = "0 */1 * * * ?")
     public void SignInfo() {
         //执行代码
         logger.debug("扫描开始");

+ 1 - 1
blade-service/blade-business/src/main/java/org/springblade/business/utils/FunctionMain.java

@@ -91,7 +91,7 @@ public class FunctionMain {
 
     public static void getToken() {
         HttpClient httpClient = HttpClientBuilder.create().build();
-        HttpPost httpPost = new HttpPost("http://localhost/blade-auth/oauth/token");
+        HttpPost httpPost = new HttpPost("http://localhost:8090/blade-auth/oauth/token");
         httpPost.setHeader("Authorization", "Basic c2FiZXI6c2FiZXJfc2VjcmV0");
         httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
         httpPost.setHeader("Tenant-Id", "000000");

+ 2 - 2
blade-service/blade-e-visa/src/main/java/org/springblade/evisa/service/impl/EVisaServiceImpl.java

@@ -542,7 +542,7 @@ public class EVisaServiceImpl implements EVisaService {
      */
     public String eVisaCustom(org.springblade.evisa.vo.TaskArchiveDTO taskArchiveDTO) {
         //type=1表示任务审批自定义签章,type=2表示认证电签签章(不涉及审批任务)
-        if (taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 1) {
+        if (taskArchiveDTO.getSealStrategy()!=null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 1) {
             //获取档案任务
             Task task = jdbcTemplate.queryForObject("select form_data_id from u_task where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(Task.class));
             if (task != null) {
@@ -611,7 +611,7 @@ public class EVisaServiceImpl implements EVisaService {
                 }
             }
             return "";
-        } else if (taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 2) {
+        } else if (taskArchiveDTO.getSealStrategy()!=null && taskArchiveDTO.getSealStrategy().size() > 0 && taskArchiveDTO.getType() == 2) {
             //此时的taskArchiveDTO.taskId=档案数据业务id(档案认证不涉及审批流任务)
             //获取档案任务的文件信息(这里根据id再查询一次,入参的时候不想重新构造入参的dto了)
             ArchiveFile archiveFile = jdbcTemplate.queryForObject("select pdf_file_url,e_visa_file from u_archive_file where id = " + taskArchiveDTO.getTaskId(), new BeanPropertyRowMapper<>(ArchiveFile.class));

+ 20 - 7
blade-service/blade-manager/src/main/java/org/springblade/manager/controller/ContractInfoController.java

@@ -91,7 +91,7 @@ public class ContractInfoController extends BladeController {
     }
 
     /**
-     * 分页 合同段信息
+     * 分页 合同段信息
      */
     @GetMapping("/list")
     @ApiOperationSupport(order = 2)
@@ -102,7 +102,7 @@ public class ContractInfoController extends BladeController {
     }
 
     /**
-     * 自定义分页 合同段信息
+     * 自定义分页 合同段信息
      */
     @GetMapping("/page")
     @ApiOperationSupport(order = 3)
@@ -114,7 +114,7 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 新增 合同段信息
+     * 新增 合同段信息
      */
     @PostMapping("/save")
     @ApiOperationSupport(order = 4)
@@ -124,7 +124,7 @@ public class ContractInfoController extends BladeController {
     }
 
     /**
-     * 修改 合同段信息
+     * 修改 合同段信息
      */
     @PostMapping("/update")
     @ApiOperationSupport(order = 5)
@@ -145,7 +145,7 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 新增或修改 合同段信息
+     * 新增或修改 合同段信息
      */
     @PostMapping("/submit")
     @ApiOperationSupport(order = 6)
@@ -159,13 +159,13 @@ public class ContractInfoController extends BladeController {
 
 
     /**
-     * 删除 合同段信息
+     * 删除 合同段信息
      */
     @PostMapping("/remove")
     @ApiOperationSupport(order = 7)
     @ApiOperation(value = "逻辑删除", notes = "传入ids")
     public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-        //白马合同段不允许删除,syncProjectUserInfo合同段同步白马人员接口使用中
+        /*白马合同段不允许删除,syncProjectUserInfo合同段同步白马人员接口使用中*/
         List<String> baiMaList = Arrays.asList("1612335077269143554", "1613022750656921601", "1613823243083792385", "1687370014959017986", "1687370619295309826");
         if (baiMaList.contains(ids)) {
             return R.fail("该项目合同段不允许删除,请联系管理员");
@@ -179,6 +179,19 @@ public class ContractInfoController extends BladeController {
         if (saveUserInfoByProjectMapper.selectSGJL(ids) > 0) {
             return R.fail("当前监理合同段存在关联的施工合同信息,删除失败");
         }
+
+        /*逻辑删除计量相关信息*/
+        ContractInfo info = contractInfoService.getById(ids);
+        if (info != null && info.getContractType().equals(4)) {
+            /*逻辑删除关联信息*/
+            jdbcTemplate.execute("UPDATE s_meter_contract_info SET is_deleted = 1 WHERE contract_id = " + ids);
+            /*逻辑删除合同段计量单元信息*/
+            jdbcTemplate.execute("UPDATE s_meter_tree_contract SET is_deleted = 1 WHERE contract_id = " + ids);
+            /*逻辑删除合同段中期支付项信息*/
+            jdbcTemplate.execute("UPDATE s_meter_mid_pay_item_contract SET is_deleted = 1 WHERE contract_id = " + ids);
+        }
+
+        /*逻辑删除合同段信息*/
         return R.status(contractInfoService.deleteLogic(Func.toLongList(ids)));
     }
 

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

@@ -318,9 +318,11 @@ public class ExcelTabController extends BladeController {
         ExcelInfoUtils.excelInfo(file.getInputStream(), exceUrl, thmlUrl, "1");
         // 上传excel文件
         BladeFile bladeFile = newIOSSClient.uploadFile(file.getOriginalFilename(), exceUrl);
-        // 解析原始excel
 
-        //  BladeFile bladeFileR = newIOSSClient.uploadFileByInputStream(file);
+        if(bladeFile==null || ObjectUtil.isEmpty(bladeFile)){
+            return R.fail("oss上传失败,请校验oss配置是否正确");
+        }
+        // 解析原始excel
         detail.setExtension(file.getOriginalFilename());
         detail.setFileUrl(bladeFile.getLink());
         detail.setFileType(3); // 表示为清表信息  1 表示祖节点  2 表示为节点信息 3 表示清表

+ 0 - 5
blade-service/blade-manager/src/main/java/org/springblade/manager/feign/WbsTreeContractClientImpl.java

@@ -425,10 +425,5 @@ public class WbsTreeContractClientImpl implements WbsTreeContractClient {
         return list;
     }
 
-    /*删除合同段本地缓存*/
-    @Override
-    public void deleteContractLocalCache(String contractId) {
-        wbsTreeContractServiceImpl.deleteContractLocalCache(contractId);
-    }
 
 }

+ 20 - 19
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/ContractInfoServiceImpl.java

@@ -1,6 +1,5 @@
 package org.springblade.manager.service.impl;
 
-import cn.hutool.core.lang.hash.Hash;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -10,9 +9,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.google.common.collect.Lists;
 import lombok.AllArgsConstructor;
-import org.springblade.business.entity.InformationQuery;
 import org.springblade.business.feign.InformationQueryClient;
 import org.springblade.common.utils.BaiduApiUtil;
 import org.springblade.common.utils.SnowFlakeUtil;
@@ -29,6 +26,7 @@ import org.springblade.manager.entity.*;
 import org.springblade.manager.mapper.*;
 import org.springblade.manager.service.IContractInfoService;
 import org.springblade.manager.vo.*;
+import org.springblade.meter.feign.MeterContractInfoClient;
 import org.springblade.system.user.entity.User;
 import org.springblade.system.user.feign.IUserClient;
 import org.springblade.system.user.vo.UserContractInfoVO;
@@ -60,6 +58,7 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
     private final IUserClient iUserClient;
     private final InformationQueryClient informationQueryClient;
     private final ArchiveTreeContractMapper archiveTreeContractMapper;
+    private final MeterContractInfoClient meterContractInfoClient;
     @Autowired
     StringRedisTemplate redisTemplate;
 
@@ -797,19 +796,21 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
 
             boolean row = this.saveOrUpdate(contractInfo);
 
-            //监理、总监办新增
+            /*监理、总监办新增*/
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
                 if (contractInfo.getIdList().size() > 0) {
                     List<WbsTreeContractVO3> infos = contractInfo.getIdList();
                     for (WbsTreeContractVO3 info : infos) {
-                        //新增关系记录
+                        /*新增关系记录*/
                         baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), info.getContractId());
                     }
                 }
 
-                //中西试验室
+                /*总承包合同段(计量合同段)*/
             } else if (contractInfo.getContractType().equals(4)) {
-                //TODO
+                if (ObjectUtil.isNotEmpty(contractInfo.getMeterContractInfo())) {
+                    meterContractInfoClient.saveOrUpdate(contractInfo.getMeterContractInfo());
+                }
             }
 
             return this.submitContractRelevantInfo(row, contractInfo);
@@ -832,30 +833,28 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
             }
             boolean row = this.saveOrUpdate(contractInfo);
 
-            //监理、总监办编辑
+            /*监理、总监办编辑*/
             if (contractInfo.getContractType().equals(2) || contractInfo.getContractType().equals(3)) {
-                //获取当前项目所有施工合同段ids
+                /*获取当前项目所有施工合同段ids*/
                 List<Long> contractInfosSGAll = baseMapper.selectList(Wrappers.<ContractInfo>lambdaQuery()
                         .eq(ContractInfo::getPId, contractInfo.getPId())
                         .eq(ContractInfo::getContractType, 1).eq(ContractInfo::getStatus, 1))
                         .stream().map(ContractInfo::getId).collect(Collectors.toList());
 
-                //更新当下项目所有施工合同段Redis树缓存
+                contractInfosSGAll.add(contractInfo.getId());
+                /*更新当下项目合同段Redis树缓存*/
                 for (Long id : contractInfosSGAll) {
                     informationQueryClient.delAsyncWbsTree(id + "");
                 }
 
-                //更新当前监理合同段Redis树缓存
-                informationQueryClient.delAsyncWbsTree(contractInfo.getId() + "");
-
-                //删除记录信息
+                /*删除记录信息*/
                 List<String> updateId_SG = contractInfo.getIdList().stream().map(WbsTreeContractVO3::getContractId).collect(Collectors.toList());
                 baseMapper.deleteContractRelationJLYZ(contractInfo.getId());
                 for (String id : updateId_SG) {
                     baseMapper.insertContractRelationJLYZ(SnowFlakeUtil.getId(), contractInfo.getId(), id);
                 }
 
-                //当前关联的施工合同段ids
+                /*当前关联的施工合同段ids*/
                 String sql = "select * from m_contract_relation_jlyz where contract_id_jlyz = " + contractInfo.getId();
                 List<String> record_SG = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(ContractRelationJlyz.class)).stream().map(ContractRelationJlyz::getContractIdSg).collect(Collectors.toList()).stream().map(String::valueOf).collect(Collectors.toList());
 
@@ -863,12 +862,12 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                 List<Long> delIds = contractInfosSGAll.stream().filter(f -> !record_SG.contains(f.toString())).collect(Collectors.toList());
 
                 if (saveIds.size() > 0) {
-                    //同步
+                    /*同步*/
                     this.syncUserInfoToContract(contractInfo, saveIds);
                 }
 
                 if (delIds.size() > 0) {
-                    //删除
+                    /*删除*/
                     List<SaveUserInfoByProjectDTO> list = saveUserInfoByProjectService.getBaseMapper().selectList(Wrappers.<SaveUserInfoByProjectDTO>lambdaQuery()
                             .eq(SaveUserInfoByProjectDTO::getProjectId, contractInfo.getPId())
                             .eq(SaveUserInfoByProjectDTO::getIsRecordJlId, contractInfo.getId())
@@ -881,9 +880,11 @@ public class ContractInfoServiceImpl extends BaseServiceImpl<ContractInfoMapper,
                     }
                 }
 
-                //中西试验室编辑
+                /*总承包合同段(计量合同段)*/
             } else if (contractInfo.getContractType().equals(4)) {
-
+                if (ObjectUtil.isNotEmpty(contractInfo.getMeterContractInfo())) {
+                    meterContractInfoClient.saveOrUpdate(contractInfo.getMeterContractInfo());
+                }
             }
 
             return this.submitContractRelevantInfo(row, contractInfo);

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

@@ -1675,13 +1675,10 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
 
                             String myData = DataInfo.get(val) + "";
                             if ((myData.indexOf("T") >= 0 && myData.indexOf("-") >= 0) || (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0)) {
-
                                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
                                 sdf.setTimeZone(TimeZone.getTimeZone("GTM+8"));
                                 SimpleDateFormat formatStr = new SimpleDateFormat("yyyy年MM月dd日");
-
                                 if (myData.indexOf(",") >= 0 && myData.indexOf("]") >= 0) {
-
                                     myData = myData.replace("[", "").replace("]", "").replaceAll("'", "");
                                     String[] dataVal = myData.split(",");
                                     Date Start_dataStr = new Date();
@@ -1842,7 +1839,8 @@ public class ExcelTabServiceImpl extends BaseServiceImpl<ExcelTabMapper, ExcelTa
         FileOutputStream outputStream = new FileOutputStream(excelPath);
         workbook.write(outputStream);
 
-        FileUtils.excel2pdf(excelPath, pdfPath);
+      //  FileUtils.excel2pdf(excelPath, pdfPath);
+        FileUtils.excelToPdf(excelPath, pdfPath);
 
         BladeFile bladeFile = newIOSSClient.uploadFile(pkeyId + ".pdf", pdfPath);
 

+ 14 - 29
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeContractServiceImpl.java

@@ -26,7 +26,9 @@ import org.springblade.common.utils.FileUtils;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.core.redis.cache.BladeRedis;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.node.ForestNodeMerger;
 import org.springblade.core.tool.utils.*;
 import org.springblade.manager.bean.NodeVO;
@@ -75,6 +77,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
     }
 
     private static final Logger logger = LoggerFactory.getLogger(WbsTreeContractServiceImpl.class);
+    private final BladeRedis bladeRedis;
     private final ConstructionLedgerFeignClient constructionLedgerFeign;
     private final WbsTreePrivateMapper wbsTreePrivateMapper;
     private final ContractInfoMapper contractInfoMapper;
@@ -119,6 +122,14 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
 
     @Override
     public boolean submitWbsTreeInContract(WbsTreeContractDTO pawDTO) {
+        /*加锁*/
+        String redisValue = bladeRedis.get("submit-wbs-contract:" + pawDTO.getContractId());
+        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
+            throw new ServiceException("请勿重复提交,请60秒后再尝试");
+        }
+        bladeRedis.set("submit-wbs-contract:" + pawDTO.getContractId(), "1");
+        bladeRedis.expire("submit-wbs-contract:" + pawDTO.getContractId(), 60);
+
         String wbsTreeIds = pawDTO.getWbsTreeIds();
         String[] ids = wbsTreeIds.split(",");
         //项目对应到合同段的入参节点ids
@@ -146,7 +157,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         List<String> saveIds = idList1.stream().filter(f -> !finalNowContractNodeIds.contains(f)).collect(Collectors.toList());
         List<String> delIds = finalNowContractNodeIds.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-        //TODO ---------节点未变只同步元素表---------
+        // ================= 节点未变只同步元素表 =================
         if (saveIds.size() == 0 && delIds.size() == 0) {
             //当前项目所有原始表(从公有树到项目私有树同步后的,或是私有到私有的)
             List<WbsTreePrivate> nowProjectTabs = wbsTreePrivateMapper.selectList(Wrappers.<WbsTreePrivate>query().lambda()
@@ -274,7 +285,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
             }
 
         } else {
-            //TODO ---------删除---------
+            // ================= 删除 =================
             if (delIds.size() > 0) {
                 List<ContractRelationJlyz> contractRelationJLYZList = baseMapper.selectContractRelationInfoByidSG2(pawDTO.getContractId());
                 if (contractRelationJLYZList.size() > 0) {
@@ -301,7 +312,7 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
                 baseMapper.deleteBatch(ids1, pawDTO.getWbsId(), pawDTO.getProjectId(), pawDTO.getContractId());
             }
 
-            //TODO ---------新增---------
+            // ================= 新增 =================
             if (saveIds.size() > 0) {
                 ArrayList<ConstructionLedger> constructionLedgerList = new ArrayList<>();
                 List<WbsTreePrivate> wbsTreePrivatesList = wbsTreePrivateMapper.selectNodeAndTable2(pawDTO.getWbsId(), pawDTO.getProjectId());
@@ -2276,30 +2287,4 @@ public class WbsTreeContractServiceImpl extends BaseServiceImpl<WbsTreeContractM
         return list;
     }
 
-    /*删除合同段本地缓存*/
-    public void deleteContractLocalCache(String contractId) {
-        /*删除节点缓存*/
-        localCacheNodes.remove(contractId);
-
-        /*删除资料缓存*/
-        Iterator<Map.Entry<String, List<WbsTreeContractLazyQueryInfoVO>>> iterator_1 = localCacheQueryInfos.entrySet().iterator();
-        while (iterator_1.hasNext()) {
-            Map.Entry<String, List<WbsTreeContractLazyQueryInfoVO>> entry = iterator_1.next();
-            String cacheKey = entry.getKey();
-            if (cacheKey.startsWith(contractId + "_")) {
-                iterator_1.remove();
-            }
-        }
-
-        /*删除节点计算统计缓存*/
-        Iterator<Map.Entry<String, List<WbsTreeContractLazyVO>>> iterator_2 = localCacheParentCountNodes.entrySet().iterator();
-        while (iterator_2.hasNext()) {
-            Map.Entry<String, List<WbsTreeContractLazyVO>> entry = iterator_2.next();
-            String cacheKey = entry.getKey();
-            if (cacheKey.startsWith(contractId + "_")) {
-                iterator_2.remove();
-            }
-        }
-    }
-
 }

+ 13 - 15
blade-service/blade-manager/src/main/java/org/springblade/manager/service/impl/WbsTreeServiceImpl.java

@@ -855,6 +855,14 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
 
     @Override
     public R<Object> submitWbsTreeInProject(WbsTreeContractDTO pawDTO) {
+        /*加锁*/
+        String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
+        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
+            return R.fail(400, "请勿重复提交,请60秒后再尝试");
+        }
+        bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
+        bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
+
         try {
             if (StringUtils.isEmpty(pawDTO.getWbsId())) {
                 return R.fail(400, "未获取到wbsId,请选择一个正确的wbs模板!");
@@ -881,7 +889,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
             List<String> saveIds = idList1.stream().filter(f -> !idList2.contains(f)).collect(Collectors.toList());
             List<String> delIds = idList2.stream().filter(f -> !idList1.contains(f)).collect(Collectors.toList());
 
-            //TODO -------同步新增独立表单--------
+            // ================= 同步新增独立表单 =================
             if (saveIds.size() == 0 && delIds.size() == 0) {
                 if (pawDTO.getReferenceType().equals("private")) {
                     //新增独立表单
@@ -889,7 +897,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                 }
 
             } else {
-                //TODO ------------删除------------
+                // ================= 删除 =================
                 if (delIds.size() > 0) {
                     if (pawDTO.getReferenceType().equals("public")) {
                         List<Long> ids1 = delIds.stream().map(Long::parseLong).collect(Collectors.toList());
@@ -967,15 +975,8 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                     }
                 }
 
-                //TODO ------------新增------------
+                // ================= 新增 =================
                 if (saveIds.size() > 0) {
-                    if (saveIds.size() >= 1000) {
-                        String redisValue = bladeRedis.get("submit-wbs-project:" + pawDTO.getProjectId());
-                        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
-                            return R.fail(400, "请勿重复提交,请60秒后再尝试");
-                        }
-                    }
-
                     //构造入参集合
                     List<WbsTreePrivate> insertData1 = new ArrayList<>();
                     List<WbsTreePrivate> insertData2 = new ArrayList<>();
@@ -1085,6 +1086,7 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         if (pawDTO.getWbsType() == 5) { //征拆
                             projectInfoMapper.updateTemplateInfoLar(pawDTO.getProjectId(), pawDTO.getWbsId(), "public");
                         }
+
                     } else if (pawDTO.getReferenceType().equals("private")) {
                         List<List<WbsTreePrivate>> partition1 = Lists.partition(insertData2, 1000);
                         for (List<WbsTreePrivate> addList : partition1) {
@@ -1104,17 +1106,13 @@ public class WbsTreeServiceImpl extends BaseServiceImpl<WbsTreeMapper, WbsTree>
                         if (pawDTO.getWbsType() == 2) {
                             projectInfoMapper.updateTemplateInfoTrial(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
-                        if (pawDTO.getWbsType() == 3) { //计量
+                        if (pawDTO.getWbsType() == 3) {
                             projectInfoMapper.updateTemplateInfoMeter(pawDTO.getProjectId(), pawDTO.getPrimaryKeyId(), "private");
                         }
                         if (pawDTO.getWbsType() == 5) {
                             projectInfoMapper.updateTemplateInfoLar(pawDTO.getProjectId(), pawDTO.getWbsId(), "private");
                         }
                     }
-                    if (saveIds.size() >= 1000) {
-                        bladeRedis.set("submit-wbs-project:" + pawDTO.getProjectId(), "1");
-                        bladeRedis.expire("submit-wbs-project:" + pawDTO.getProjectId(), 60);
-                    }
                 }
             }
             return R.success("操作成功");

+ 14 - 45
blade-service/blade-manager/src/main/java/org/springblade/manager/utils/test.java

@@ -1,55 +1,24 @@
 package org.springblade.manager.utils;
 
-
-
-
-
-import com.spire.xls.CellRange;
-import com.spire.xls.Workbook;
-import com.spire.xls.Worksheet;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-import org.jsoup.nodes.Element;
-import org.jsoup.select.Elements;
-import org.springblade.core.tool.utils.IoUtil;
-import org.springblade.core.tool.utils.ResourceUtil;
+import cn.hutool.http.useragent.UserAgentUtil;
+import cn.hutool.jwt.JWT;
+import cn.hutool.jwt.JWTUtil;
+import io.jsonwebtoken.Claims;
+import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.Charsets;
+import org.springblade.core.tool.utils.StringPool;
 
 import java.io.*;
+import java.util.Base64;
 
 public class test {
+    public static void main11(String[] args) throws IOException {
+     String token ="bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0ZW5hbnRfaWQiOiIwMDAwMDAiLCJ1c2VyX25hbWUiOiJwZW5nY3QiLCJyZWFsX25hbWUiOiJQQ1QiLCJhdmF0YXIiOiJodHRwczovL2JsYWRleC1jaG9uZ3FpbmctaW5mby5vc3MtY24taGFuZ3pob3UuYWxpeXVuY3MuY29tLy91cGxvYWQvMjAyMjA2MTYvOGVkMzdhMTU2ZjJiMTc3ZDY5MTgxYzg3Njg5MjczOWYuanBnIiwiYXV0aG9yaXRpZXMiOlsiYWRtaW5pc3RyYXRvciJdLCJjbGllbnRfaWQiOiJjbGllbnQiLCJyb2xlX25hbWUiOiJhZG1pbmlzdHJhdG9yIiwibGljZW5zZSI6InBvd2VyZWQgYnkgYmxhZGV4IiwicG9zdF9pZCI6IjE1MzcyNjAzOTA3NzI1OTI2NDEiLCJ1c2VyX2lkIjoiMTUzNjk4NTA5NDU3MTgyMzEwNSIsInJvbGVfaWQiOiIxMTIzNTk4ODE2NzM4Njc1MjAxIiwicGhvbmUiOiIxODU4MDE0NzU1MCIsInNjb3BlIjpbImFsbCJdLCJuaWNrX25hbWUiOiJQQ1QiLCJvYXV0aF9pZCI6IiIsImRldGFpbCI6eyJ0eXBlIjoid2ViIn0sImV4cCI6MTcwMTMzNTM1OCwiZGVwdF9pZCI6IjE1MzY5ODMwNTYzNjIzODEzMTMiLCJqdGkiOiIzOGE2MDA4Yi01MzQ2LTQ5YjktOGU0OC1hOTNmYjNlNjYyMGYiLCJhY2NvdW50IjoicGVuZ2N0In0._IvCSHGZY8P74XcPWnRw7D46zWORsPCRKkB0HQgxjU0";
 
-    public static void main1(String[] args) throws IOException {
-     //   String excel="/Users/hongchuangyanfa/Downloads/JL1036隧道锚喷支护施工记录表.xlsx";
-        String excel="/Users/hongchuangyanfa/Downloads/养护表格/ZJY6.11.2植筋检验表.xlsx";
-        String poiPath="/Users/hongchuangyanfa/Desktop/pdf/poi.pdf";
-        String pdfPath22="/Users/hongchuangyanfa/Desktop/pdf/poi222.pdf";
-        String pdfPathhtml="/Users/hongchuangyanfa/Desktop/pdf/poi222.html";
-        Workbook workbook2 = new Workbook();
-        workbook2.loadFromFile(excel);
-        //设置转换后的PDF页面高宽适应工作表的内容大小
-        workbook2.getConverterSetting().setSheetFitToPage(true);
-        Worksheet sheet = workbook2.getWorksheets().get(0);
-
-        sheet.saveToHtml(pdfPathhtml);
-
-        File file1 = ResourceUtil.getFile(pdfPathhtml);
-        String htmlString = IoUtil.readToString(new FileInputStream(file1));
-        Document doc = Jsoup.parse(htmlString);
-        Element table = doc.select("table").first();
-        Elements trs = table.select("tr");
-        Elements cols = table.select("Col");
-
-        sheet.deleteRow(trs.size(),sheet.getRows().length - trs.size());
-        sheet.deleteColumn(cols.size(),sheet.getColumns().length - cols.size());
-
-        System.out.println(trs.size());
-        System.out.println(cols.size());
-
-        System.out.println(sheet.getRows().length);
-        System.out.println(sheet.getColumns().length);
-
-
-        ////16384*/
+        byte[] decoded = Base64.getDecoder().decode(token);
+        String token2 = new String(decoded, Charsets.UTF_8_NAME);
+        int index = token2.indexOf(StringPool.COLON);
+        System.out.println("ccd");
     }
 
 }

+ 81 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ChangeTokenFormController.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.ChangeTokenAddFormDTO;
+import org.springblade.meter.dto.ChangeTokenFormDTO;
+import org.springblade.meter.vo.ChangeFormVO;
+import org.springblade.meter.vo.ChangeFormVO2;
+import org.springblade.meter.vo.ZeroChangeVO;
 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.ChangeTokenForm;
 import org.springblade.meter.service.IChangeTokenFormService;
 import org.springblade.core.boot.ctrl.BladeController;
 
+import java.util.List;
+
 /**
  * 变更令表 控制器
  *
@@ -43,11 +48,83 @@ import org.springblade.core.boot.ctrl.BladeController;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/changeTokenForm")
-@Api(value = "变更令表", tags = "变更令表接口")
+@Api(value = "变更管理", tags = "变更管理接口")
 public class ChangeTokenFormController extends BladeController {
 
 	private final IChangeTokenFormService changeTokenFormService;
 
+	/**
+	 * 一键生成零号变更
+	 */
+	@GetMapping("/buildZeroChange")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "一键生成零号变更", notes = "传入合同段id")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true)
+	})
+	public R buildZeroChange(Long contractId) {
+		changeTokenFormService.buildZeroChange(contractId);
+		return R.success("生成成功");
+	}
+
+	/**
+	 * 获取零号变更
+	 */
+	@GetMapping("/getZeroChange")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "获取节点下的零号变更", notes = "传入合同段id,节点id")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true)
+	})
+	public R<List<ZeroChangeVO>> getZeroChange(Long contractId, Long nodeId) {
+		List<ZeroChangeVO> vos = changeTokenFormService.getZeroChange(contractId,nodeId);
+		return R.data(vos);
+	}
+
+	/**
+	 * 新增-添加清单
+	 */
+	@GetMapping("/addForm")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "新增添加清单", notes = "传入合同id,显示类型1显示所有2显示已分解,节点id,搜索值,返回清单集合")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+			@ApiImplicitParam(name = "showType", value = "显示类型1显示所有2显示已分解", required = true),
+			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+			@ApiImplicitParam(name = "searchValue", value = "搜索值", required = true),
+			@ApiImplicitParam(name = "ids", value = "已经存在的变更申请清单id,逗号拼接", required = true)
+	})
+	public R<List<ChangeFormVO>> addForm(ChangeTokenAddFormDTO dto) {
+		List<ChangeFormVO> vos = changeTokenFormService.addForm(dto);
+		return R.data(vos);
+	}
+
+	/**
+	 * 新增-确认选择清单
+	 */
+	@GetMapping("/selectForm")
+	@ApiOperationSupport(order = 1)
+	@ApiOperation(value = "新增确认选择清单", notes = "传入选中的清单id,返回变更申请清单集合")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "ids", value = "选中的清单id,逗号拼接", required = true)
+	})
+	public R<List<ChangeFormVO2>> selectForm(String ids) {
+		List<ChangeFormVO2> vos = changeTokenFormService.selectForm(ids);
+		return R.data(vos);
+	}
+
+	/**
+	 * 新增 变更令表
+	 */
+	@PostMapping("/add")
+	@ApiOperationSupport(order = 3)
+	@ApiOperation(value = "新增变更令", notes = "传入changeTokenFormDTO")
+	public R add(@Valid @RequestBody ChangeTokenFormDTO dto) {
+		changeTokenFormService.add(dto);
+		return R.success("新增成功");
+	}
+
 	/**
 	 * 详情
 	 */

+ 21 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/ContractInventoryFormController.java

@@ -25,6 +25,8 @@ 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.core.tool.utils.ObjectUtil;
+import org.springblade.meter.vo.ContractFromVO;
 import org.springblade.meter.vo.ContractInventoryFormVO;
 import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
@@ -176,5 +178,24 @@ public class ContractInventoryFormController extends BladeController {
 		return R.data("https://bladex-chongqing-info.oss-cn-hangzhou.aliyuncs.com//upload/20231201/853cebb7e9c89c982dd15f842fed42a3.xls");
 	}
 
+
+
+	/**
+	 * 分解获取合同段清单列表
+	 */
+	@GetMapping("getContrInFormAllByConId")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "获取合同工程清单表", notes = "返回获取合同工程清单表列表")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "contractId", value = "", required = true),
+			@ApiImplicitParam(name = "formNum", value = "formNum", required = true)
+	})
+	public R<List<ContractFromVO>> getFormTree(Long contractId, String formNum){
+		if(contractId!=null && ObjectUtil.isEmpty(contractId)){
+			return R.fail("contractId不能为空");
+		}
+		List<ContractFromVO> treeAll = contractInventoryFormService.getContrFormAllByContrId(contractId,formNum);
+		return R.data(treeAll);
+	}
 	
 }

+ 23 - 5
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/InventoryFormMeterController.java

@@ -16,13 +16,12 @@
  */
 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;
 
+import org.apache.commons.lang.StringUtils;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
@@ -43,7 +42,7 @@ import org.springblade.core.boot.ctrl.BladeController;
 @RestController
 @AllArgsConstructor
 @RequestMapping("/inventoryFormMeter")
-@Api(value = "工程清单与合同计量单元	中间表", tags = "工程清单与合同计量单元	中间表接口")
+@Api(value = "工程清单与合同计量单元中间表", tags = "工程清单与合同计量单元中间表接口")
 public class InventoryFormMeterController extends BladeController {
 
 	private final IInventoryFormMeterService inventoryFormMeterService;
@@ -113,5 +112,24 @@ public class InventoryFormMeterController extends BladeController {
 		return R.status(inventoryFormMeterService.deleteLogic(Func.toLongList(ids)));
 	}
 
-	
+
+	/**
+	 * 添加同合计量 清单
+	 */
+	@PostMapping("/saveInvenFormMeter")
+	@ApiOperationSupport(order = 8)
+	@ApiOperation(value = "添加同合计量 清单", notes = "传入")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "meterId", value = "合同计量单元id", required = true),
+			@ApiImplicitParam(name = "formIds", value = "合同工程清单ids,多个以,分割", required = true)
+	})
+	public R inventoryFormMeterService(String meterId,String formIds) {
+		if(meterId==null & StringUtils.isEmpty(meterId)){
+			R.fail("计量单元meterId不能为null");
+		}
+		if(formIds!=null & StringUtils.isNotEmpty(formIds)){
+			R.fail("合同工程清单formIds不能为null");
+		}
+		return inventoryFormMeterService.inventoryFormMeterService(meterId,formIds);
+	}
 }

+ 6 - 10
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MeterTreeController.java

@@ -25,14 +25,8 @@ import org.springblade.meter.entity.MeterTreeContract;
 import org.springblade.meter.entity.MeterTreeProject;
 import org.springblade.meter.entity.MeterTreeSystem;
 import org.springblade.meter.entity.MeterTreeTemplateInfo;
-import org.springblade.meter.service.MeterTreeContractService;
-import org.springblade.meter.service.MeterTreeProjectService;
-import org.springblade.meter.service.MeterTreeSystemService;
-import org.springblade.meter.service.MeterTreeTemplateInfoService;
-import org.springblade.meter.vo.MeterTreeContractTreeVO;
-import org.springblade.meter.vo.MeterTreeContractVO;
-import org.springblade.meter.vo.MeterTreeProjectTreeVO;
-import org.springblade.meter.vo.MeterTreeSystemTreeVO;
+import org.springblade.meter.service.*;
+import org.springblade.meter.vo.*;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
@@ -53,6 +47,7 @@ public class MeterTreeController extends BladeController {
     private final MeterTreeSystemService meterTreeSystemService;
     private final MeterTreeProjectService meterTreeProjectService;
     private final MeterTreeContractService meterTreeContractService;
+    private final IContractInventoryFormService contractInventoryFormService;
 
     @GetMapping("/template/detail")
     @ApiOperationSupport(order = 1)
@@ -564,9 +559,10 @@ public class MeterTreeController extends BladeController {
         if (basicInfo != null) {
             MeterTreeContractVO vo = new MeterTreeContractVO();
             BeanUtil.copyProperties(basicInfo, vo);
-
             //TODO 此处为分解列表信息,查询赋值
-            vo.setDecompositionList(null);
+            List<ContractFromVO> contrFormAllByContrId = contractInventoryFormService.getContrFormAllByContrId(basicInfo.getContractId(), "");
+
+            vo.setDecompositionList(contrFormAllByContrId);
             return R.data(vo);
         }
         return R.data(null);

+ 18 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -116,11 +116,25 @@ public class MiddleMeterApplyController extends BladeController {
 		return R.success("新增成功");
 	}
 
+	/**
+	 * 获取详情
+	 */
+	@GetMapping("/detail")
+	@ApiOperationSupport(order = 6)
+	@ApiOperation(value = "获取详情", notes = "传入id,返回详情,修改时回显")
+	@ApiImplicitParams(value = {
+			@ApiImplicitParam(name = "id", value = "计量申请id", required = true),
+	})
+	public R<MiddleMeterApplyVO> detail(Long id) {
+		MiddleMeterApplyVO  vo = middleMeterApplyService.detail(id);
+		return R.data(vo);
+	}
+
 	/**
 	 * 修改 中间计量申请表
 	 */
 	@PostMapping("/update")
-	@ApiOperationSupport(order = 6)
+	@ApiOperationSupport(order = 7)
 	@ApiOperation(value = "修改", notes = "传入middleMeterApplyDTO")
 	public R update(@Valid @RequestBody MiddleMeterApplyDTO dto) {
 		middleMeterApplyService.update2(dto);
@@ -131,7 +145,7 @@ public class MiddleMeterApplyController extends BladeController {
 	 * 分页 中间计量申请表
 	 */
 	@GetMapping("/page")
-	@ApiOperationSupport(order = 2)
+	@ApiOperationSupport(order = 8)
 	@ApiOperation(value = "分页", notes = "传合同id,节点id,计量期id和分页信息")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
@@ -147,7 +161,7 @@ public class MiddleMeterApplyController extends BladeController {
 	 * 删除 中间计量申请表
 	 */
 	@PostMapping("/remove")
-	@ApiOperationSupport(order = 7)
+	@ApiOperationSupport(order = 9)
 	@ApiOperation(value = "逻辑删除", notes = "传入ids")
 	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
 		middleMeterApplyService.delete(Func.toLongList(ids));
@@ -158,7 +172,7 @@ public class MiddleMeterApplyController extends BladeController {
 	 * 清单明细
 	 */
 	@GetMapping("/formDetail")
-	@ApiOperationSupport(order = 8)
+	@ApiOperationSupport(order = 10)
 	@ApiOperation(value = "清单明细", notes = "传入合同id,合同计量期id,返回值包含展开明细")
 	@ApiImplicitParams(value = {
 			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),

+ 19 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/feign/MeterContractInfoClientImpl.java

@@ -0,0 +1,19 @@
+package org.springblade.meter.feign;
+
+import lombok.AllArgsConstructor;
+import org.springblade.meter.entity.MeterContractInfo;
+import org.springblade.meter.service.impl.MeterContractInfoServiceImpl;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@AllArgsConstructor
+public class MeterContractInfoClientImpl implements MeterContractInfoClient {
+
+    private final MeterContractInfoServiceImpl meterContractInfoServiceImpl;
+
+    @Override
+    public void saveOrUpdate(MeterContractInfo meterContractInfo) {
+        meterContractInfoServiceImpl.saveOrUpdate(meterContractInfo);
+    }
+
+}

+ 15 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java

@@ -16,8 +16,14 @@
  */
 package org.springblade.meter.mapper;
 
+import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ChangeTokenForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.meter.entity.ContractInventoryForm;
+import org.springblade.meter.vo.ChangeFormVO;
+import org.springblade.meter.vo.ZeroChangeVO;
+
+import java.util.List;
 
 /**
  * 变更令表 Mapper 接口
@@ -28,4 +34,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 public interface ChangeTokenFormMapper extends BaseMapper<ChangeTokenForm> {
 
 
+    List<ContractInventoryForm> getAllForm(@Param("contractId") Long contractId);
+
+    List<ZeroChangeVO> getZeroChange(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
+
+    List<ChangeFormVO> getChangeAllForm(@Param("contractId") Long contractId,@Param("searchValue") String searchValue,@Param("ids")  List<Long> ids);
+
+    List<ChangeFormVO> getChangeNodeForm(@Param("contractId") Long contractId,@Param("ids")  List<Long> ids,@Param("searchValue") String searchValue);
+
+    List<Long> getNodeForm(@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 }

+ 61 - 2
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml

@@ -30,8 +30,67 @@
         <result column="approve_status" property="approveStatus"/>
         <result column="command_status" property="commandStatus"/>
     </resultMap>
-
-
+    <select id="getAllForm" resultType="org.springblade.meter.entity.ContractInventoryForm">
+        select cif.id,
+               IFNULL((select sum(build_picture_total) from s_inventory_form_meter ifm
+                where ifm.contract_id = #{contractId} and ifm.is_deleted = 0 and ifm.contract_form_id = cif.id),0) as build_change_total
+        from s_contract_inventory_form cif
+        where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
+    </select>
+    <select id="getZeroChange" resultType="org.springblade.meter.vo.ZeroChangeVO">
+        select id,form_number,form_name,current_price,contract_total,contract_money,
+               build_change_total,
+               IFNULL((select sum(build_picture_total) from s_inventory_form_meter ifm
+                       where ifm.contract_id = #{contractId} and ifm.is_deleted = 0 and ifm.contract_form_id = cif.id),0) as currentChangeTotal
+        from s_contract_inventory_form cif
+        where contract_id = #{contractId} and is_deleted = 0 and is_form_node = 1
+          and id in(SELECT contract_form_id FROM s_inventory_form_meter
+                        WHERE contract_id = #{contractId} and is_deleted = 0
+                        and contract_meter_id in ( SELECT id FROM s_meter_tree_contract mtc WHERE contract_id = #{contractId} and is_deleted = 0
+                                    and (mtc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, ancestor) > 0)
+                                                    )
+                        GROUP BY contract_form_id
+              )
+    </select>
+    <select id="getChangeAllForm" resultType="org.springblade.meter.vo.ChangeFormVO">
+        select id,form_number,form_name,current_price,contract_total,change_total,change_total as buildChangeTotal,
+               (cif.change_total - IFNULL((select sum(build_picture_total) from s_inventory_form_meter ifm
+                           where ifm.contract_id = #{contractId} and ifm.is_deleted = 0 and ifm.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
+        <if test="searchValue != null and searchValue != ''">
+            and form_number like concat('%',#{searchValue},'%')
+        </if>
+        <if test="ids.size != 0">
+            and id not in
+            <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+            </foreach>
+        </if>
+    </select>
+    <select id="getChangeNodeForm" resultType="org.springblade.meter.vo.ChangeFormVO">
+        select id,form_number,form_name,current_price,contract_total,change_total,change_total as buildChangeTotal,
+               (cif.change_total - IFNULL((select sum(build_picture_total) from s_inventory_form_meter ifm
+                                           where ifm.contract_id = #{contractId} and ifm.is_deleted = 0 and ifm.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
+        <if test="searchValue != null and searchValue != ''">
+            and form_number like concat('%',#{searchValue},'%')
+        </if>
+            and id in
+        <foreach collection="ids" item="id" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </select>
+    <select id="getNodeForm" resultType="java.lang.Long">
+        SELECT contract_form_id
+        FROM s_inventory_form_meter
+        WHERE contract_id = #{contractId} and is_deleted = 0
+          and contract_meter_id in ( SELECT id
+                    FROM s_meter_tree_contract mtc WHERE contract_id = #{contractId} and is_deleted = 0
+                            and (mtc.id = #{nodeId} or FIND_IN_SET(#{nodeId}, ancestor) > 0))
+        GROUP BY contract_form_id
+    </select>
 
 
 </mapper>

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

@@ -19,6 +19,7 @@ package org.springblade.meter.mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springblade.meter.entity.ContractInventoryForm;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.meter.vo.ContractFromVO;
 import org.springblade.meter.vo.ContractInventoryFormVO;
 import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
@@ -46,4 +47,12 @@ public interface ContractInventoryFormMapper extends BaseMapper<ContractInventor
     void updateNode(@Param("id") Long id,@Param("contractId") Long contractId);
 
     List<ContractInventoryFormVO2> getChildNode(@Param("contractId") Long contractId, @Param("parentId") Long parentId);
+
+    /**
+     * 获取合同工程清单表
+     * @param contractId
+     * @param formNum
+     * @return
+     */
+    List<ContractFromVO> getContrFormAllByContrId(@Param("contractId") Long contractId, @Param("formNum") String formNum);
 }

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

@@ -78,5 +78,15 @@
         order by sort
     </select>
 
+    <select id="getContrFormAllByContrId" resultType="org.springblade.meter.vo.ContractFromVO">
+        select id,form_number,form_name,current_price,contract_total,change_total,
+        (SELECT count(1) from s_inventory_form_meter a where is_deleted=0 and a.contract_id=u.contract_id and a.contract_form_id=u.id) as poseNum,is_supplement
+        from s_contract_inventory_form u
+        where contract_id = #{contractId} and is_deleted = 0
+        <if test="formNum != null and formNum != ''">
+            and u.form_number like concat('%',#{formNum},'%')
+        </if>
+        order by sort
+    </select>
 
 </mapper>

+ 2 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/InventoryFormApplyMapper.xml

@@ -19,6 +19,7 @@
         <result column="current_meter_total" property="currentMeterTotal"/>
     </resultMap>
 
+    <select id="dadainfo" >
 
-
+    </select>
 </mapper>

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

@@ -16,7 +16,8 @@
  */
 package org.springblade.meter.mapper;
 
-import org.apache.ibatis.annotations.Param;
+import feign.Param;
+import org.springblade.meter.entity.ContractInventoryForm;
 import org.springblade.meter.entity.InventoryFormMeter;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -32,4 +33,5 @@ public interface InventoryFormMeterMapper extends BaseMapper<InventoryFormMeter>
 
 
     List<Long> getNodeAllForm(@Param("nodeId") Long nodeId);
+    ContractInventoryForm dadainfo(@Param("forid") long forid);
 }

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

@@ -24,5 +24,8 @@
         where contract_meter_id = #{nodeId} and is_deleted = 0
     </select>
 
+    <select id="dadainfo" resultType="org.springblade.meter.entity.ContractInventoryForm">
+        select * from s_contract_inventory_form where id=#{forid} ;
+    </select>
 
 </mapper>

+ 1 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MaterialStartStatementMapper.xml

@@ -24,9 +24,7 @@
         <result column="sort" property="sort"/>
     </resultMap>
     <select id="page2" resultType="org.springblade.meter.entity.MaterialStartStatement">
-        select id,meter_period_id,statement_name,repayment_cause,
-               (select period_name from s_meter_period smp where smp.id = mss.statement_period) as statement_period,
-               (select form_print_date from s_meter_period smp where smp.id = mss.statement_period) as print_date
+        select *
         from s_material_start_statement mss
         where contract_id = #{statement.contractId} and type = #{statement.type} and is_deleted = 0
         order by sort

+ 8 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterContractInfoMapper.java

@@ -0,0 +1,8 @@
+package org.springblade.meter.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.springblade.meter.entity.MeterContractInfo;
+
+public interface MeterContractInfoMapper extends BaseMapper<MeterContractInfo> {
+    
+}

+ 5 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/MeterContractInfoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.springblade.meter.mapper.MeterContractInfoMapper">
+
+</mapper>

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

@@ -49,4 +49,8 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
     IPage<MiddleMeterApplyVO> page2(IPage<MiddleMeterApplyVO> iPage,@Param("apply") MiddleMeterApply middleMeterApply);
 
     List<MeterInventoryDetailVO> meterPeriodAllForm(@Param("apply") MiddleMeterApply apply);
+
+    MiddleMeterApplyVO getById(@Param("id") Long id);
+
+    List<MeterInventoryVO> getForm(@Param("id") Long id,@Param("contractId") Long contractId);
 }

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

@@ -39,7 +39,7 @@
     </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,
+               IFNULL((select sum(build_picture_total) from s_inventory_form_meter where is_deleted = 0 and contract_form_id = cif.id),0) as resolveTotal,
                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
@@ -81,6 +81,20 @@
         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>
+    <select id="getById" resultType="org.springblade.meter.vo.MiddleMeterApplyVO">
+        select *
+        from s_middle_meter_apply where id = #{id}
+    </select>
+    <select id="getForm" resultType="org.springblade.meter.vo.MeterInventoryVO">
+        select cif.id,cif.form_number,cif.form_name,cif.current_price,cif.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 resolveTotal,
+               ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
+               ifa.current_meter_money 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_inventory_form_apply ifa left join s_contract_inventory_form cif on ifa.contract_form_id = cif.id
+        where ifa.contract_id = #{contractId} and ifa.is_deleted = 0
+        AND ifa.middle_meter_id = #{id}
+    </select>
 
 
 </mapper>

+ 5 - 3
blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/StartPayMeterFormMapper.xml

@@ -24,17 +24,19 @@
     </resultMap>
     <select id="meterPage" resultType="org.springblade.meter.vo.StartPayMeterFormVO">
         select *,
+               (select period_number from s_meter_period smp where smp.id = spmf.meter_period_id) as periodNumber,
             CASE when approve_status = 0 then '未上报' when approve_status = 1 then '待审批' when approve_status = 2 then '已审批'
             else '已废除' end as approveStatusName
-        from s_start_pay_meter_form
+        from s_start_pay_meter_form spmf
         where contract_id = #{contractId} and is_deleted = 0
         <if test="meterPeriodId!=null and meterPeriodId!=''">
             and meter_period_id = #{meterPeriodId}
         </if>
     </select>
     <select id="detail" resultType="org.springblade.meter.vo.StartPayMeterFormVO">
-        select *
-        from s_start_pay_meter_form
+        select *,
+               (select period_number from s_meter_period smp where smp.id = spmf.meter_period_id) as periodNumber
+        from s_start_pay_meter_form spmf
         where id = #{id}
     </select>
 

+ 28 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IChangeTokenFormService.java

@@ -16,8 +16,15 @@
  */
 package org.springblade.meter.service;
 
+import org.springblade.meter.dto.ChangeTokenAddFormDTO;
+import org.springblade.meter.dto.ChangeTokenFormDTO;
 import org.springblade.meter.entity.ChangeTokenForm;
 import org.springblade.core.mp.base.BaseService;
+import org.springblade.meter.vo.ChangeFormVO;
+import org.springblade.meter.vo.ChangeFormVO2;
+import org.springblade.meter.vo.ZeroChangeVO;
+
+import java.util.List;
 
 /**
  * 变更令表 服务类
@@ -28,4 +35,25 @@ import org.springblade.core.mp.base.BaseService;
 public interface IChangeTokenFormService extends BaseService<ChangeTokenForm> {
 
 
+    /**
+     * 一键生成零号变更
+     */
+    void buildZeroChange(Long contractId);
+
+    /**
+     * 获取零号变更
+     */
+    List<ZeroChangeVO> getZeroChange(Long contractId, Long nodeId);
+
+    /**
+     * 新增 变更令表
+     */
+    void add(ChangeTokenFormDTO dto);
+
+    /**
+     * 新增-添加清单
+     */
+    List<ChangeFormVO> addForm(ChangeTokenAddFormDTO dto);
+
+    List<ChangeFormVO2> selectForm(String ids);
 }

+ 5 - 4
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IContractInventoryFormService.java

@@ -19,10 +19,7 @@ package org.springblade.meter.service;
 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.springblade.meter.vo.*;
 import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
@@ -53,4 +50,8 @@ public interface IContractInventoryFormService extends BaseService<ContractInven
     void delete(Long id,Long contractId);
 
     List<ContractInventoryFormVO2> lazyTree(Long projectId, Long contractId, Long parentId);
+
+    //获取合同工程清单表
+    List<ContractFromVO> getContrFormAllByContrId(Long contractId, String formNum);
+
 }

+ 5 - 1
blade-service/blade-meter/src/main/java/org/springblade/meter/service/IInventoryFormMeterService.java

@@ -16,6 +16,7 @@
  */
 package org.springblade.meter.service;
 
+import org.springblade.core.tool.api.R;
 import org.springblade.meter.entity.InventoryFormMeter;
 import org.springblade.core.mp.base.BaseService;
 
@@ -33,5 +34,8 @@ public interface IInventoryFormMeterService extends BaseService<InventoryFormMet
     List<Long> getNodeAllForm(Long nodeId);
 
 
-
+    /**
+     * 添加同合计量 清单
+     */
+    R inventoryFormMeterService(String meterId, String formIds);
 }

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

@@ -54,4 +54,6 @@ public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply>
     void delete(List<Long> ids);
 
     List<MeterInventoryDetailVO> formDetail(MiddleMeterApply middleMeterApply);
+
+    MiddleMeterApplyVO detail(Long id);
 }

+ 8 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/MeterContractInfoService.java

@@ -0,0 +1,8 @@
+package org.springblade.meter.service;
+
+import org.springblade.core.mp.base.BaseService;
+import org.springblade.meter.entity.MeterContractInfo;
+
+public interface MeterContractInfoService extends BaseService<MeterContractInfo> {
+    
+}

+ 100 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/ChangeTokenFormServiceImpl.java

@@ -16,12 +16,28 @@
  */
 package org.springblade.meter.service.impl;
 
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang.StringUtils;
+import org.springblade.core.log.exception.ServiceException;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.meter.dto.ChangeTokenAddFormDTO;
+import org.springblade.meter.dto.ChangeTokenFormDTO;
 import org.springblade.meter.entity.ChangeTokenForm;
+import org.springblade.meter.entity.ContractInventoryForm;
 import org.springblade.meter.mapper.ChangeTokenFormMapper;
 import org.springblade.meter.service.IChangeTokenFormService;
 import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.meter.service.IContractInventoryFormService;
+import org.springblade.meter.vo.ChangeFormVO;
+import org.springblade.meter.vo.ChangeFormVO2;
+import org.springblade.meter.vo.ZeroChangeVO;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 变更令表 服务实现类
  *
@@ -29,8 +45,92 @@ import org.springframework.stereotype.Service;
  * @since 2023-11-29
  */
 @Service
+@AllArgsConstructor
 public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormMapper, ChangeTokenForm> implements IChangeTokenFormService {
 
+    private final IContractInventoryFormService contractInventoryFormService;
+
+
+    /**
+     * 一键生成零号变更  统计每个清单节点当前分解量,设置进清单的划分数量
+     */
+    @Override
+    public void buildZeroChange(Long contractId) {
+        //联表查询清单表和中间表
+        List<ContractInventoryForm> list = baseMapper.getAllForm(contractId);
+        if (list.size() == 0){
+            throw new ServiceException("生成失败,当前合同段还没有清单");
+        }
+        //修改清单表的划分数量
+        contractInventoryFormService.updateBatchById(list);
+    }
+
+    /**
+     * 获取零号变更
+     */
+    @Override
+    public List<ZeroChangeVO> getZeroChange(Long contractId, Long nodeId) {
+        //获取当前节点下所有分解的清单,还要统计当前分解量
+        List<ZeroChangeVO> vos = baseMapper.getZeroChange(contractId,nodeId);
+        if (vos.size() == 0){
+            return vos;
+        }
+        //计算修正量,核实量
+        for (ZeroChangeVO vo : vos) {
+            //修正量=现划分量—合同数量
+            vo.setUpdateTotal(vo.getCurrentChangeTotal() - vo.getContractTotal());
+            //修正金额=现行单价*修正量
+            vo.setUpdateMoney(vo.getCurrentPrice().multiply(new BigDecimal(vo.getUpdateTotal())));
+            //核实量=先划分数量
+            vo.setVerifyTotal(vo.getCurrentChangeTotal());
+            //核实金额=核实量*现行单价
+            vo.setVerifyMoney(vo.getCurrentPrice().multiply(new BigDecimal(vo.getVerifyTotal())));
+        }
+        return vos;
+    }
+
+    /**
+     * 新增 变更令表
+     */
+    @Override
+    public void add(ChangeTokenFormDTO dto) {
+
+    }
 
+    /**
+     * 新增-添加清单
+     */
+    @Override
+    public List<ChangeFormVO> addForm(ChangeTokenAddFormDTO dto) {
+        List<ChangeFormVO> vos = new ArrayList<>();
+        List<Long> ids = new ArrayList<>();
+        String dtoIds = dto.getIds();
+        if (StringUtils.isNotBlank(dtoIds)){
+            ids = Func.toLongList(dtoIds);
+        }
+        //1查询所有2查询节点下
+        if (dto.getShowType() == 1){
+            vos = baseMapper.getChangeAllForm(dto.getContractId(),dto.getSearchValue(),ids);
+        }else {
+            //先获取节点下的id
+            List<Long> formIds = baseMapper.getNodeForm(dto.getContractId(),dto.getNodeId());
+            //再去重
+            if (ids.size() != 0){
+                formIds = formIds.stream().filter(l -> !dtoIds.contains(l.toString())).collect(Collectors.toList());
+            }
+            if (formIds.size() != 0) {
+                //最后查询具体数据
+                vos = baseMapper.getChangeNodeForm(dto.getContractId(), formIds, dto.getSearchValue());
+            }
+        }
+        return vos;
+    }
 
+    /**
+     * 新增-确认选择清单
+     */
+    @Override
+    public List<ChangeFormVO2> selectForm(String ids) {
+        return null;
+    }
 }

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

@@ -36,6 +36,7 @@ import org.springblade.meter.service.IContractInventoryFormService;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.service.IInventoryFormMeterService;
 import org.springblade.meter.utils.ForestNodeMerger;
+import org.springblade.meter.vo.ContractFromVO;
 import org.springblade.meter.vo.ContractInventoryFormVO;
 import org.springblade.meter.vo.ContractInventoryFormVO2;
 import org.springblade.meter.vo.FormTreeVO;
@@ -467,6 +468,17 @@ public class ContractInventoryFormServiceImpl extends BaseServiceImpl<ContractIn
         return  vos;
     }
 
+    /**
+     * 获取合同工程清单表
+     * @param contractId
+     * @param formNum
+     * @return
+     */
+    @Override
+    public List<ContractFromVO> getContrFormAllByContrId(Long contractId, String formNum) {
+        return  baseMapper.getContrFormAllByContrId(contractId,formNum);
+    }
+
     /**
      * 判断当前节点是否已经分解或变更过,变更过返回true
      */

+ 28 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/InventoryFormMeterServiceImpl.java

@@ -16,6 +16,11 @@
  */
 package org.springblade.meter.service.impl;
 
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import org.springblade.core.tool.api.R;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.meter.entity.ContractInventoryForm;
 import org.springblade.meter.entity.InventoryFormMeter;
 import org.springblade.meter.mapper.InventoryFormMeterMapper;
 import org.springblade.meter.service.IInventoryFormMeterService;
@@ -38,4 +43,27 @@ public class InventoryFormMeterServiceImpl extends BaseServiceImpl<InventoryForm
     public List<Long> getNodeAllForm(Long nodeId) {
         return baseMapper.getNodeAllForm(nodeId);
     }
+    /**
+     * 添加同合计量 清单
+     */
+    @Override
+    public R inventoryFormMeterService(String meterId, String formIds) {
+        List<Long> longList = Func.toLongList(formIds);
+        for(Long forid:longList){
+            InventoryFormMeter inventoryFormMeter = baseMapper.selectOne(Wrappers.<InventoryFormMeter>query().lambda()
+                    .eq(InventoryFormMeter::getContractMeterId, meterId)
+                    .eq(InventoryFormMeter::getContractFormId, forid));
+            if(inventoryFormMeter==null && ObjectUtil.isEmpty(inventoryFormMeter)){
+                ContractInventoryForm inventoryForm = baseMapper.dadainfo(forid);
+                InventoryFormMeter data =new InventoryFormMeter();
+                data.setContractId(inventoryForm.getContractId());
+                data.setProjectId(inventoryForm.getProjectId());
+                data.setContractFormId(forid);
+                data.setContractMeterId(Func.toLong(meterId));
+                data.setBuildPictureTotal(0);
+                baseMapper.insert(data);
+            }
+        }
+        return R.success("成功");
+    }
 }

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MaterialMeterFormServiceImpl.java

@@ -69,6 +69,8 @@ public class MaterialMeterFormServiceImpl extends BaseServiceImpl<MaterialMeterF
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(id);
             }
             attachmentFormService.saveBatch(fileList);
@@ -118,6 +120,8 @@ public class MaterialMeterFormServiceImpl extends BaseServiceImpl<MaterialMeterF
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(form.getId());
             }
             attachmentFormService.saveBatch(fileList);

+ 15 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterContractInfoServiceImpl.java

@@ -0,0 +1,15 @@
+package org.springblade.meter.service.impl;
+
+import lombok.AllArgsConstructor;
+import org.springblade.core.mp.base.BaseServiceImpl;
+import org.springblade.meter.entity.MeterContractInfo;
+import org.springblade.meter.mapper.MeterContractInfoMapper;
+import org.springblade.meter.service.MeterContractInfoService;
+import org.springframework.stereotype.Service;
+
+
+@Service
+@AllArgsConstructor
+public class MeterContractInfoServiceImpl extends BaseServiceImpl<MeterContractInfoMapper, MeterContractInfo> implements MeterContractInfoService {
+
+}

+ 22 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MiddleMeterApplyServiceImpl.java

@@ -147,6 +147,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(id);
             }
             attachmentFormService.saveBatch(fileList);
@@ -235,6 +237,8 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(dto.getId());
             }
             attachmentFormService.saveOrUpdateBatch(fileList);
@@ -302,4 +306,22 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
         }
         return vos;
     }
+
+    /**
+     * 获取详情
+     */
+    @Override
+    public MiddleMeterApplyVO detail(Long id) {
+        //获取中间计量申请
+        MiddleMeterApplyVO vo = baseMapper.getById(id);
+        //获取计量清单列表
+        List<MeterInventoryVO> formList = baseMapper.getForm(id,vo.getContractId());
+        vo.setFormList(formList);
+        //获取附件列表
+        List<AttachmentForm> list = attachmentFormService.list(new LambdaQueryWrapper<AttachmentForm>()
+                .eq(AttachmentForm::getContractId, vo.getContractId())
+                .eq(AttachmentForm::getMasterId, id));
+        vo.setFileList(list);
+        return vo;
+    }
 }

+ 4 - 0
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/StartPayMeterFormServiceImpl.java

@@ -62,6 +62,8 @@ public class StartPayMeterFormServiceImpl extends BaseServiceImpl<StartPayMeterF
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(id);
             }
             attachmentFormService.saveBatch(fileList);
@@ -83,6 +85,8 @@ public class StartPayMeterFormServiceImpl extends BaseServiceImpl<StartPayMeterF
         List<AttachmentForm> fileList = dto.getFileList();
         if (fileList != null && fileList.size() != 0) {
             for (AttachmentForm file : fileList) {
+                file.setProjectId(dto.getProjectId());
+                file.setContractId(dto.getContractId());
                 file.setMasterId(form.getId());
             }
             attachmentFormService.saveBatch(fileList);

+ 55 - 30
blade-service/blade-user/src/main/java/org/springblade/system/user/controller/UserController.java

@@ -17,13 +17,17 @@
 package org.springblade.system.user.controller;
 
 
+import cn.hutool.jwt.JWT;
+import cn.hutool.jwt.JWTUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.MD5Utils;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import io.jsonwebtoken.Claims;
 import io.swagger.annotations.*;
 import lombok.AllArgsConstructor;
 import org.apache.http.Consts;
@@ -31,6 +35,7 @@ import org.apache.http.HttpResponse;
 import org.apache.http.NameValuePair;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.message.BasicNameValuePair;
@@ -423,58 +428,78 @@ public class UserController {
         return R.success("操作成功");
     }
 
-
     /**
      * token验证登录
      */
     @PostMapping("/loginByToken")
     @ApiOperationSupport(order = 20)
     @ApiOperation(value = "token验证加密", notes = "token验证登录")
-    public R loginByToken(String token, String account, String timestamp) {
-        if (StringUtil.isBlank(token)) {
-            return R.fail("请输出token");
-        }
-        if (StringUtil.isBlank(account)) {
-            return R.fail("请输出account");
-        }
-        if (StringUtil.isBlank(timestamp)) {
-            return R.fail("请输出timestamp");
+    public R loginByToken(String  token) {
+      //  this.loginByToken2(token);
+        token = "bearer "+token;
+        HttpClient httpClient = HttpClientBuilder.create().build();
+        HttpGet httpPost = new HttpGet("http://47.110.251.215:8090/blade-auth/oauth/user-info");
+        httpPost.setHeader("Authorization", token); //这个需要 client:
+        List<NameValuePair> params = new ArrayList<NameValuePair>();
+
+        try {
+            HttpResponse httpResponse = httpClient.execute(httpPost);
+            InputStream inputStream = httpResponse.getEntity().getContent();
+            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
+            byte[] buffer = new byte[1024];
+            int index = 0;
+            while ((index = inputStream.read(buffer)) != -1) {
+                outputStream.write(buffer, 0, index);
+            }
+            JSONObject jsonObject = JSON.parseObject(outputStream.toString());
+            if(jsonObject!=null && ObjectUtil.isNotEmpty(jsonObject)){
+                JSONObject data = jsonObject.getJSONObject("data");
+                String name = data.getString("name");
+                return this.loginByToken2(name);
+            }else{
+                return R.fail("token解析用户失败");
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+            return R.success("操作失败");
         }
 
-        //解析tokne
-        String tokenInfo = AesInfoUtil.decrypt(token, null);
-        if (tokenInfo != null && tokenInfo.length() >= 20) {
-            JSONObject tokenUser = JSON.parseObject(tokenInfo);
-            String tokenPw = tokenUser.getString("password");
+    }
 
-            String tokenAccount = tokenUser.getString("account");
+    @PostMapping("/loginByToken2")
+    @ApiOperationSupport(order = 20)
+    @ApiOperation(value = "token验证加密", notes = "token验证登录")
+    public R loginByToken2(String account) {
+        if (StringUtil.isBlank(account)) {
+            return R.fail("请输出token");
+        }
 
-            String tokenTimestamp = tokenUser.getString("timestamp");
-            if (!account.equals(account)) {
-                return R.fail("token解析用户和account不一致");
-            }
+        if (account != null) {
             QueryWrapper<User> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("account", tokenAccount);
+            queryWrapper.eq("account", account);
             // queryWrapper.eq("password", tokenPw);
             queryWrapper.eq("sys_type", 2);
             User userInfo = userService.getOne(queryWrapper);
             if (userInfo == null) {
                 return R.fail("用户名或密码错误");
             }
-            //获取用户list
+            String tenId =userInfo.getTenantId();
+            String pass = userInfo.getPlaintextPassword();
+            String md5Pass =MD5Utils.md5Hex(pass,"UTF-8");
+            System.out.println("密码"+ md5Pass);
+
             HttpClient httpClient = HttpClientBuilder.create().build();
-            HttpPost httpPost = new HttpPost("http://172.31.222.127:8090/blade-auth/oauth/token");
-            httpPost.setHeader("Authorization", "Basic Y2xpZW50OmNsaWVudF9zZWNyZXQ="); //这个需要 client:
+            HttpPost httpPost = new HttpPost("http://47.110.251.215:8090/blade-auth/oauth/token");
+            httpPost.setHeader("Authorization", "Basic YXJjaGl2ZXM6YXJjaGl2ZXNfc2VjcmV0");
             httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");
             httpPost.setHeader("Tenant-Id", "000000");
             List<NameValuePair> params = new ArrayList<NameValuePair>();
             params.add(new BasicNameValuePair("grant_type", "password"));
-            params.add(new BasicNameValuePair("username", userInfo.getAccount()));
-            params.add(new BasicNameValuePair("password", "e10adc3949ba59abbe56e057f20f883e"));
+            params.add(new BasicNameValuePair("username", account));
+            params.add(new BasicNameValuePair("password", md5Pass));
             params.add(new BasicNameValuePair("scope", "all"));
             params.add(new BasicNameValuePair("tenantId", "000000"));
             httpPost.setEntity(new UrlEncodedFormEntity(params, Consts.UTF_8));
-
             try {
                 HttpResponse httpResponse = httpClient.execute(httpPost);
                 InputStream inputStream = httpResponse.getEntity().getContent();
@@ -484,15 +509,15 @@ public class UserController {
                 while ((index = inputStream.read(buffer)) != -1) {
                     outputStream.write(buffer, 0, index);
                 }
-                System.out.println(JSON.parseObject(outputStream.toString()));
+                System.out.println("\n");
                 return R.data(JSON.parseObject(outputStream.toString()));
             } catch (IOException e) {
                 e.printStackTrace();
-                return R.success("操作失败");
             }
         } else {
-            return R.fail("请确认token是否有误");
+            return R.fail("请确认account是否有误");
         }
+        return R.fail("");
     }
 
     /**

+ 10 - 22
blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java

@@ -708,10 +708,11 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
                                         Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
                                         ArrayList::new
                                 ));
-                        List<WbsTreeContractLazyVO> distinctLowestNodesAll = distinctNodesAll.stream().filter(f -> f.getHasChildren().equals(0)).collect(Collectors.collectingAndThen(
-                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
-                                ArrayList::new
-                        ));
+                        List<WbsTreeContractLazyVO> distinctLowestNodesAll = distinctNodesAll.stream().filter(f -> f.getHasChildren().equals(0))
+                                .collect(Collectors.collectingAndThen(
+                                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
+                                        ArrayList::new
+                                ));
 
                         /*获取当前合同段节点对应的资料填报QueryInfo本地缓存信息*/
                         List<WbsTreeContractLazyQueryInfoVO> queryInfoList = this.getQueryInfoList(contractId, tableOwner);
@@ -722,25 +723,13 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
                         /* ================ 处理数量 ================ */
                         List<WbsTreeContractLazyVO> lowestNodesTB = distinctLowestNodesAll.parallelStream().filter(f -> pKeyIdList.contains(f.getPKeyId())).collect(Collectors.toList());
                         List<Long> lowestNodeParentIdsTB = lowestNodesTB.parallelStream().map(WbsTreeContractLazyVO::getParentId).collect(Collectors.toList());
-                        /*获取当前合同段节点对应计数统计本地缓存信息*/
                         List<WbsTreeContractLazyVO> resultParentNodesTB = this.getCachedParentCountNodes(contractId, lowestNodeParentIdsTB, nodesAll, tableOwner);
-
-                        /*List<WbsTreeContractLazyVO> resultParentNodesTB = new ArrayList<>();
-                        long startTime1 = System.currentTimeMillis();
-                        this.recursiveGetParentNodes(resultParentNodesTB, lowestNodeParentIdsTB, nodesAll);
-                        long endTime1 = System.currentTimeMillis();
-                        long executionTime1 = endTime1 - startTime1;
-                        _logger.info("合同段 " + contractId + " wbs节点树 数量计算 执行时间:" + executionTime1 + " ms");*/
-
                         Map<Long, WbsTreeContractLazyVO> lowestNodesMap = lowestNodesTB.stream()
                                 .peek(vo -> {
                                     Integer colorStatus = queryInfoMaps.get(vo.getPKeyId());
                                     if (colorStatus != null) {
-                                        //任务状态0=未上报=颜色2蓝色、任务状态1=待审批=颜色3橙色、任务状态2=已审批=颜色4绿色、
-                                        ///*任务状态3=已废除=颜色1黑色*/(2023年10月16日13:59:00 已废除改为=颜色2蓝色)
                                         vo.setColorStatus(colorStatus == 0 ? 2 : (colorStatus == 1 ? 3 : (colorStatus == 2 ? 4 : 2)));
                                     } else {
-                                        //未填报的=颜色1黑色
                                         vo.setColorStatus(1);
                                     }
                                 }).collect(Collectors.toMap(WbsTreeContractLazyVO::getPKeyId, Function.identity()));
@@ -824,10 +813,11 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
                                                 Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
                                                 ArrayList::new
                                         ));
-                                List<WbsTreeContractLazyVO> distinctLowestNodesAll = distinctNodesAll.stream().filter(f -> f.getHasChildren().equals(0)).collect(Collectors.collectingAndThen(
-                                        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
-                                        ArrayList::new
-                                ));
+                                List<WbsTreeContractLazyVO> distinctLowestNodesAll = distinctNodesAll.stream().filter(f -> f.getHasChildren().equals(0))
+                                        .collect(Collectors.collectingAndThen(
+                                                Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(WbsTreeContractLazyVO::getPKeyId))),
+                                                ArrayList::new
+                                        ));
 
                                 List<WbsTreeContractLazyQueryInfoVO> queryInfoList = this.getQueryInfoList(sgContractId, tableOwner);
 
@@ -837,9 +827,7 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implement
 
                                 List<WbsTreeContractLazyVO> lowestNodesTB = distinctLowestNodesAll.parallelStream().filter(f -> pKeyIdList.contains(f.getPKeyId())).collect(Collectors.toList());
                                 List<Long> lowestNodeParentIdsTB = lowestNodesTB.parallelStream().map(WbsTreeContractLazyVO::getParentId).collect(Collectors.toList());
-
                                 List<WbsTreeContractLazyVO> resultParentNodesTB = this.getCachedParentCountNodes(sgContractId, lowestNodeParentIdsTB, nodesAll, tableOwner);
-
                                 Map<Long, WbsTreeContractLazyVO> lowestNodesMap = lowestNodesTB.stream()
                                         .peek(vo -> {
                                             Integer colorStatus = queryInfoMaps.get(vo.getPKeyId());

+ 2 - 0
blade-service/blade-user/src/main/java/org/springblade/system/user/util/AesInfoUtil.java

@@ -1,6 +1,7 @@
 package org.springblade.system.user.util;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.nacos.common.utils.MD5Utils;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.http.HttpEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -178,4 +179,5 @@ public class AesInfoUtil {
         response.close();
         return body;
     }
+
 }