Przeglądaj źródła

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

yangyj 1 rok temu
rodzic
commit
284066ca18
21 zmienionych plików z 750 dodań i 222 usunięć
  1. 31 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenInventoryBatchSaveDTO.java
  2. 30 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenInventoryUpdateDTO.java
  3. 20 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenMeterUpdateDTO.java
  4. 29 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskDataRemoveDTO.java
  5. 5 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/ChangeTokenFormTask.java
  6. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemContract.java
  7. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemProject.java
  8. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterMidPayItemSystem.java
  9. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeContract.java
  10. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeProject.java
  11. 1 1
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/entity/MeterTreeSystem.java
  12. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeFormVO2.java
  13. 3 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeNodeVO.java
  14. 47 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeTokenFormVO2.java
  15. 6 0
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/MaterialMeterFormTaskVO.java
  16. 2 7
      blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/TaskDataDetailVO.java
  17. 504 170
      blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java
  18. 11 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.java
  19. 41 0
      blade-service/blade-meter/src/main/java/org/springblade/meter/mapper/ChangeTokenFormMapper.xml
  20. 0 20
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java
  21. 12 18
      blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeProjectServiceImpl.java

+ 31 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenInventoryBatchSaveDTO.java

@@ -0,0 +1,31 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.vo.ChangeFormVO2;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class TaskChangeTokenInventoryBatchSaveDTO implements Serializable {
+
+    @ApiModelProperty(value = "清单信息")
+    private List<ChangeFormVO2> formList;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+    @ApiModelProperty(value = "合同段id")
+    private Long contractId;
+
+    @ApiModelProperty(value = "任务id",required = true)
+    private Long taskId;
+
+    @ApiModelProperty(value = "中间列表数据的id")
+    private Long dataId;
+
+    @ApiModelProperty(value = "申请部位的primaryKeyId")
+    private Long primaryKeyIdMeter;
+
+}

+ 30 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenInventoryUpdateDTO.java

@@ -0,0 +1,30 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+@Data
+public class TaskChangeTokenInventoryUpdateDTO implements Serializable {
+
+    @ApiModelProperty(value = "合同段id")
+    private Long contractId;
+
+    @ApiModelProperty(value = "任务id",required = true)
+    private Long taskId;
+
+    @ApiModelProperty(value = "中间列表的id")
+    private Long dataId;
+
+    @ApiModelProperty(value = "部位的主键id")
+    private Long primaryKeyIdMeter;
+
+    @ApiModelProperty(value = "清单的主键id")
+    private Long primaryKeyIdInventory;
+
+    @ApiModelProperty(value = "变更增减数量")
+    private BigDecimal changTotal;
+
+}

+ 20 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskChangeTokenMeterUpdateDTO.java

@@ -0,0 +1,20 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TaskChangeTokenMeterUpdateDTO implements Serializable {
+
+    @ApiModelProperty(value = "任务id",required = true)
+    private Long taskId;
+
+    @ApiModelProperty(value = "主键id")
+    private Long primaryKeyId;
+
+    @ApiModelProperty(value = "合同图号")
+    private String contractPicture;
+
+}

+ 29 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskDataRemoveDTO.java

@@ -0,0 +1,29 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class TaskDataRemoveDTO implements Serializable {
+
+    @ApiModelProperty(value = "项目id", required = true)
+    private Long projectId;
+
+    @ApiModelProperty(value = "合同段id", required = true)
+    private Long contractId;
+
+    @ApiModelProperty(value = "任务id", required = true)
+    private Long taskId;
+
+    @ApiModelProperty(value = "中间列表的数据id", required = true)
+    private Long dataId;
+
+    @ApiModelProperty(value = "主键id,取值:1、中期计量清单删除取taskDetailId;2、变更令的部位删除,清单删除都取primaryKeyId主键id")
+    private Long primaryKeyId;
+
+    @ApiModelProperty(value = "变更令删除时传入type,1=申请部位删除,2=申请清单删除")
+    private Integer type;
+
+}

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

@@ -112,6 +112,10 @@ public class ChangeTokenFormTask extends BaseEntity {
     @ApiModelProperty(value = "下达日期")
     private LocalDateTime commandDate;
 
-
+    /**
+     * 单条数据驳回描述信息
+     */
+    @ApiModelProperty(value = "单条数据驳回描述信息")
+    private String repealDesc;
 
 }

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

@@ -55,7 +55,7 @@ public class MeterMidPayItemContract extends BaseEntity {
     private Integer payApplicableType;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -52,7 +52,7 @@ public class MeterMidPayItemProject extends BaseEntity {
     private Integer payApplicableType;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -49,7 +49,7 @@ public class MeterMidPayItemSystem extends BaseEntity {
     private Integer payApplicableType;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -54,7 +54,7 @@ public class MeterTreeContract extends BaseEntity {
     private String remarks;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -49,7 +49,7 @@ public class MeterTreeProject extends BaseEntity {
     private String remarks;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -37,7 +37,7 @@ public class MeterTreeSystem extends BaseEntity {
     private String remarks;
 
     @ApiModelProperty(value = "租户id")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty(value = "排序")
     private Integer sort;

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

@@ -14,6 +14,9 @@ import java.math.BigDecimal;
 @Data
 public class ChangeFormVO2 {
 
+    @ApiModelProperty(value = "主键id")
+    private Long primaryKeyId;
+
     @ApiModelProperty(value = "项目id")
     private Long projectId;
 

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

@@ -16,6 +16,9 @@ import java.util.Objects;
 @Data
 public class ChangeNodeVO {
 
+    @ApiModelProperty(value = "主键id")
+    private Long primaryKeyId;
+
     @ApiModelProperty(value = "id")
     private Long id;
 

+ 47 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/ChangeTokenFormVO2.java

@@ -0,0 +1,47 @@
+/*
+ *      Copyright (c) 2018-2028, Chill Zhuang All rights reserved.
+ *
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are met:
+ *
+ *  Redistributions of source code must retain the above copyright notice,
+ *  this list of conditions and the following disclaimer.
+ *  Redistributions in binary form must reproduce the above copyright
+ *  notice, this list of conditions and the following disclaimer in the
+ *  documentation and/or other materials provided with the distribution.
+ *  Neither the name of the dreamlu.net developer nor the names of its
+ *  contributors may be used to endorse or promote products derived from
+ *  this software without specific prior written permission.
+ *  Author: Chill 庄骞 (smallchill@163.com)
+ */
+package org.springblade.meter.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springblade.meter.entity.AttachmentForm;
+import org.springblade.meter.entity.ChangeTokenForm;
+
+import java.util.List;
+
+/**
+ * 变更令表视图实体类
+ *
+ * @author BladeX
+ * @since 2023-11-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class ChangeTokenFormVO2 extends ChangeTokenForm {
+	private static final long serialVersionUID = 1L;
+
+	@ApiModelProperty(value = "变更类型名称")
+	private String changeTypeName;
+
+	@ApiModelProperty(value = "变更归类名称")
+	private String changeClassifyName;
+
+	@ApiModelProperty(value = "部位集合")
+	private List<ChangeNodeVO> nodeList;
+
+}

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

@@ -10,4 +10,10 @@ public class MaterialMeterFormTaskVO extends MaterialMeterFormTask {
     @ApiModelProperty(value = "是否已批注,1=是,0=否")
     private Integer isComment;
 
+    @ApiModelProperty(value = "材料是否符合要求名称")
+    private String materialConformName;
+
+    @ApiModelProperty(value = "存放是否符合要求名称")
+    private String storageConformName;
+
 }

+ 2 - 7
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/vo/TaskDataDetailVO.java

@@ -3,8 +3,6 @@ package org.springblade.meter.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springblade.meter.entity.AttachmentFormTask;
-import org.springblade.meter.entity.ChangeTokenInventoryTask;
-import org.springblade.meter.entity.ChangeTokenMeterTask;
 
 import java.io.Serializable;
 import java.util.List;
@@ -18,11 +16,8 @@ public class TaskDataDetailVO implements Serializable {
     @ApiModelProperty(value = "中间计量-关联清单列表数据")
     private List<MeterInventoryVO> associatedDataInfoList;
 
-    @ApiModelProperty(value = "变更令-关联部位数据")
-    private List<ChangeTokenMeterTask> changeTokenMeterTaskList;
-
-    @ApiModelProperty(value = "变更令-关联部位清单数据")
-    private List<ChangeTokenInventoryTask> changeTokenInventoryTaskList;
+    @ApiModelProperty(value = "变更令-详情信息")
+    private ChangeTokenFormVO2 changeTokenFormVO;
 
     @ApiModelProperty(value = "附件文件信息")
     private List<AttachmentFormTask> attachmentFormTask;

+ 504 - 170
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -27,7 +27,6 @@ import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.core.tool.utils.ObjectUtil;
-import org.springblade.feign.ArchiveFileTaskClient;
 import org.springblade.manager.entity.ContractInfo;
 import org.springblade.manager.entity.ContractRelationJlyz;
 import org.springblade.meter.dto.*;
@@ -545,6 +544,14 @@ public class TaskController extends BladeController {
     @ApiOperation(value = "任务废除(任务撤销、驳回审批)", notes = "按一期废除,即按整条任务废除(中期计量申请、材料计量单、开工预付款计量单、变更令、任务查看-废除任务)")
     @PushMessage(clientId = ClientIdConstant.METER_CLIENT_ID)
     public R<Object> repeal(@RequestBody TaskRepealDTO taskRepealDTO) {
+        /*加锁*/
+        String redisValue = bladeRedis.get("meter:repeal:user:" + SecureUtil.getUserId());
+        if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
+            return R.fail(400, "请勿重复提交,30秒后再尝试");
+        }
+        bladeRedis.set("meter:repeal:user:" + SecureUtil.getUserId(), "1");
+        bladeRedis.expire("meter:repeal:user:" + SecureUtil.getUserId(), 30);
+
         if (ObjectUtil.isNotEmpty(taskRepealDTO) && ObjectUtil.isNotEmpty(taskRepealDTO.getTaskId())) {
             if (ObjectUtil.isNotEmpty(taskRepealDTO.getMeterTaskRepealDesc()) && taskRepealDTO.getMeterTaskRepealDesc().length() > 1000) {
                 throw new ServiceException("任务废除原因最长1000个字符,请重新输入");
@@ -901,14 +908,14 @@ public class TaskController extends BladeController {
                 TaskParallel taskParallel = taskParallels.get(i);
                 Map<String, String> taskUserOther = new LinkedHashMap<>();
                 taskUserOther.put("name", taskParallel.getTaskUserName());
-                if (taskParallel.getStatus().equals(2)) {
-                    taskUserOther.put("date", sdf.format(task.getUpdateTime()));
+                if (taskParallel.getStatus().equals(2) || taskParallel.getStatus().equals(3)) {
+                    taskUserOther.put("date", sdf.format(taskParallel.getUpdateTime()));
                 }
                 taskUserOther.put("status", taskParallel.getStatus().toString());
                 if (i == taskParallels.size() - 1) {
-                    taskUserOther.put("flowValue", (taskParallel.getStatus().equals(2) ? "同意" : "待审批") + "</br></br>结束流程");
+                    taskUserOther.put("flowValue", (taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除") + "</br></br>结束流程");
                 } else {
-                    taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : "待审批");
+                    taskUserOther.put("flowValue", taskParallel.getStatus().equals(2) ? "同意" : taskParallel.getStatus().equals(1) ? "待审批" : "已废除");
                 }
                 taskProcessInfo.add(taskUserOther);
             }
@@ -1003,7 +1010,7 @@ public class TaskController extends BladeController {
     @ApiOperation(value = "任务数据信息详情", notes = "传入任务id,数据dataId")
     public R<TaskDataDetailVO> dataDetail(@RequestParam String id, @RequestParam String dataId) {
         if (ObjectUtil.isEmpty(id) || ObjectUtil.isEmpty(dataId)) {
-            throw new ServiceException("任务、数据id不能为空");
+            throw new ServiceException("任务id、数据id不能为空");
         }
         TaskDataDetailVO vo = new TaskDataDetailVO();
         Task task = jdbcTemplate.query("SELECT meter_task_type,form_data_id FROM u_task WHERE id = " + id, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
@@ -1018,24 +1025,37 @@ public class TaskController extends BladeController {
 
             } else if (task.getMeterTaskType().equals(2)) {
                 MaterialMeterFormTask materialMeterFormTask = materialMeterFormServiceTask.getById(dataId);
-                vo.setBasicsInfo(materialMeterFormTask);
+                MaterialMeterFormTaskVO materialMeterFormTaskVO = BeanUtil.copyProperties(materialMeterFormTask, MaterialMeterFormTaskVO.class);
+                if (materialMeterFormTaskVO != null) {
+                    materialMeterFormTaskVO.setMaterialConformName(materialMeterFormTaskVO.getMaterialConform().equals(0) ? "不符合" : "符合");
+                    materialMeterFormTaskVO.setStorageConformName(materialMeterFormTaskVO.getStorageConform().equals(0) ? "不符合" : "符合");
+                    vo.setBasicsInfo(materialMeterFormTaskVO);
+                }
 
             } else if (task.getMeterTaskType().equals(3)) {
                 StartPayMeterFormTask startPayMeterFormTask = startPayMeterFormServiceTask.getById(dataId);
                 vo.setBasicsInfo(startPayMeterFormTask);
 
             } else if (task.getMeterTaskType().equals(4)) {
-                ChangeTokenFormTask changeTokenFormTask = changeTokenFormServiceTask.getById(dataId);
-                if (changeTokenFormTask != null) {
-                    vo.setBasicsInfo(changeTokenFormTask);
-
-                    List<ChangeTokenMeterTask> changeTokenMeterTasks = changeTokenMeterServiceTask.getBaseMapper().selectList(Wrappers.<ChangeTokenMeterTask>lambdaQuery()
-                            .eq(ChangeTokenMeterTask::getChangeTokenId, changeTokenFormTask.getId()));
-                    vo.setChangeTokenMeterTaskList(changeTokenMeterTasks);
-
-                    List<ChangeTokenInventoryTask> changeTokenInventoryTasks = changeTokenInventoryServiceTask.getBaseMapper().selectList(Wrappers.<ChangeTokenInventoryTask>lambdaQuery()
-                            .eq(ChangeTokenInventoryTask::getChangeTokenId, changeTokenFormTask.getId()));
-                    vo.setChangeTokenInventoryTaskList(changeTokenInventoryTasks);
+                ChangeTokenFormVO2 changeTokenFormVO = changeTokenFormService.getBaseMapper().detailCopy(Long.parseLong(dataId));
+                if (changeTokenFormVO != null) {
+                    List<ChangeNodeVO> nodeListCopy = changeTokenFormService.getBaseMapper().getNodeListCopy(changeTokenFormVO.getContractId(), changeTokenFormVO.getId());
+                    if (nodeListCopy.size() > 0) {
+                        List<ChangeFormVO2> formListCopy = changeTokenFormService.getBaseMapper().getFormListCopy(changeTokenFormVO.getContractId(), changeTokenFormVO.getId());
+                        if (formListCopy.size() > 0) {
+                            Map<Long, List<ChangeFormVO2>> map = formListCopy.stream().collect(Collectors.groupingBy(ChangeFormVO2::getContractMeterId));
+                            for (ChangeNodeVO nodeVO : nodeListCopy) {
+                                List<ChangeFormVO2> vo2s = map.get(nodeVO.getId());
+                                nodeVO.setFormList(vo2s);
+                            }
+                        } else {
+                            for (ChangeNodeVO nodeVO : nodeListCopy) {
+                                nodeVO.setNodeUrl(middleMeterApplyService.getNodeDivide(nodeVO.getId()));
+                            }
+                        }
+                        changeTokenFormVO.setNodeList(nodeListCopy);
+                    }
+                    vo.setChangeTokenFormVO(changeTokenFormVO);
                 }
             }
 
@@ -1048,19 +1068,21 @@ public class TaskController extends BladeController {
         return R.data(200, vo, "操作成功");
     }
 
-    @GetMapping("/data/remove")
+    @PostMapping("/data/remove")
     @ApiOperationSupport(order = 7)
-    @ApiOperation(value = "任务关联的数据删除(清单、变更令删除)", notes = "传入任务id,数据taskDetailId")
-    public R<Object> dataRemove(@RequestParam String id, @RequestParam String taskDetailId) {
-        if (ObjectUtil.isEmpty(id) || ObjectUtil.isEmpty(taskDetailId)) {
-            throw new ServiceException("任务、数据taskDetailId不能为空");
+    @ApiOperation(value = "任务关联的数据删除(清单、变更令删除)", notes = "传入TaskDataRemoveDTO")
+    public R<Object> dataRemove(@RequestBody TaskDataRemoveDTO dto) {
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
         }
-
-        Task task = jdbcTemplate.query("SELECT meter_task_type,form_data_id FROM u_task WHERE id = " + id, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        String sql = "SELECT meter_task_type,form_data_id,process_instance_id FROM u_task WHERE id = ?";
+        Task task = jdbcTemplate.query(sql, new Object[]{dto.getTaskId()}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
         if (task != null) {
+            check(task);
+
             if (task.getMeterTaskType().equals(1)) {
-                /*清单*/
-                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(taskDetailId);
+                /*中间计量清单*/
+                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(dto.getDataId());
                 if (inventoryFormApplyTask != null) {
                     MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
                     if (middleMeterApplyTask != null && inventoryFormApplyServiceTask.removeById(inventoryFormApplyTask.getId())) {
@@ -1082,9 +1104,62 @@ public class TaskController extends BladeController {
 
             } else if (task.getMeterTaskType().equals(4)) {
                 /*变更令*/
-                //TODO
-            }
+                if (Arrays.asList(1, 2).contains(dto.getType())) {
+                    /*获取变更令*/
+                    ChangeTokenFormTask tokenFormTask = changeTokenFormServiceTask.getById(dto.getDataId());
+                    if (dto.getType().equals(1)) { //申请部位删除
+                        ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getPrimaryKeyId());
+                        if (changeTokenMeterTask != null) {
+                            /*获取清单信息*/
+                            List<ChangeFormVO2> formListCopy = changeTokenFormService.getBaseMapper().getFormListCopyByMeterId(dto.getContractId(), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
+                            if (formListCopy.size() > 0) {
+                                BigDecimal currentChangeMoneyAll = formListCopy.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add); //累加
+                                BigDecimal remainingChangeMoney = tokenFormTask.getChangeMoney().subtract(currentChangeMoneyAll); //相减
+
+                                /*修改变更令变更金额*/
+                                String updateSql = "UPDATE s_change_token_form_task SET change_money = ? WHERE id = ?";
+                                Object[] params = {remainingChangeMoney, dto.getDataId()};
+                                jdbcTemplate.update(updateSql, params);
+
+                                /*删除部位信息*/
+                                String delSql_1 = "DELETE FROM s_change_token_meter_task WHERE id = ?";
+                                Object[] delParams_1 = {dto.getPrimaryKeyId()};
+                                jdbcTemplate.update(delSql_1, delParams_1);
+
+                                /*删除部位下的清单信息*/
+                                List<Long> collect = formListCopy.stream().map(ChangeFormVO2::getPrimaryKeyId).collect(Collectors.toList());
+                                String placeholders = collect.stream().map(id -> "?").collect(Collectors.joining(","));
+                                String delSql_2 = "DELETE FROM s_change_token_inventory_task WHERE id IN (" + placeholders + ")";
+                                Object[] delParams_2 = collect.toArray();
+                                jdbcTemplate.update(delSql_2, delParams_2);
+
+                                return R.data(200, remainingChangeMoney, "操作成功");
+                            }
+                        }
 
+                    } else if (dto.getType().equals(2)) { //申请清单删除
+                        /*获取清单信息*/
+                        String sql_1 = "SELECT * FROM s_change_token_inventory_task WHERE id = ?";
+                        Object[] params_1 = {dto.getPrimaryKeyId()};
+                        ChangeTokenInventoryTask changeTokenInventoryTask = jdbcTemplate.query(sql_1, params_1, new BeanPropertyRowMapper<>(ChangeTokenInventoryTask.class)).stream().findAny().orElse(null);
+                        if (changeTokenInventoryTask != null) {
+                            BigDecimal subtract = tokenFormTask.getChangeMoney().subtract(changeTokenInventoryTask.getChangeMoney()); //相减
+
+                            /*修改变更令变更金额*/
+                            String updateSql = "UPDATE s_change_token_form_task SET change_money = ? WHERE id = ?";
+                            Object[] params = {subtract, dto.getDataId()};
+                            jdbcTemplate.update(updateSql, params);
+
+                            /*删除清单信息*/
+                            String delSql = "DELETE FROM s_change_token_inventory_task WHERE id = ?";
+                            Object[] delParams = {dto.getPrimaryKeyId()};
+                            jdbcTemplate.update(delSql, delParams);
+
+                            return R.data(200, subtract, "操作成功");
+                        }
+                    }
+                }
+            }
         }
         return R.fail("操作失败");
     }
@@ -1093,36 +1168,44 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 8)
     @ApiOperation(value = "清单数据修改", notes = "传入InventoryFormApplyTaskDTO")
     public R<Object> dataInventoryFormApplyTaskUpdate(@RequestBody InventoryFormApplyTaskDTO dto) {
-        InventoryFormApplyTask obj = BeanUtil.copyProperties(dto, InventoryFormApplyTask.class);
-        if (ObjectUtil.isEmpty(obj)) {
-            throw new ServiceException("操作异常");
-        }
-        obj.setId(dto.getTaskDetailId());
-        InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(obj.getId());
-        if (ObjectUtil.isEmpty(inventoryFormApplyTask)) {
-            throw new ServiceException("未获取到清单数据");
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
         }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
 
-        if (inventoryFormApplyServiceTask.updateById(obj)) {
-            MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
-            if (middleMeterApplyTask != null) {
+            InventoryFormApplyTask obj = BeanUtil.copyProperties(dto, InventoryFormApplyTask.class);
+            if (ObjectUtil.isEmpty(obj)) {
+                throw new ServiceException("操作异常");
+            }
+            obj.setId(dto.getTaskDetailId());
+            InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(obj.getId());
+            if (ObjectUtil.isEmpty(inventoryFormApplyTask)) {
+                throw new ServiceException("未获取到清单数据");
+            }
 
-                /*清单信息*/
-                List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getFormCopy(middleMeterApplyTask.getId(), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
-
-                BigDecimal totalSum = BigDecimal.ZERO;
-                for (MeterInventoryVO meterInventoryVO : formToTask) {
-                    BigDecimal currentMeterTotal = meterInventoryVO.getCurrentMeterTotal();
-                    BigDecimal currentMeterMoney = meterInventoryVO.getCurrentMeterMoney();
-                    BigDecimal product = currentMeterTotal.multiply(currentMeterMoney);
-                    totalSum = totalSum.add(product);
-                }
+            if (inventoryFormApplyServiceTask.updateById(obj)) {
+                MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
+                if (middleMeterApplyTask != null) {
 
-                String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
-                Object[] params = {totalSum, inventoryFormApplyTask.getMiddleMeterId()};
-                jdbcTemplate.update(updateSql, params);
+                    /*清单信息*/
+                    List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getFormCopy(middleMeterApplyTask.getId(), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
+
+                    BigDecimal totalSum = BigDecimal.ZERO;
+                    for (MeterInventoryVO meterInventoryVO : formToTask) {
+                        BigDecimal currentMeterTotal = meterInventoryVO.getCurrentMeterTotal();
+                        BigDecimal currentMeterMoney = meterInventoryVO.getCurrentMeterMoney();
+                        BigDecimal product = currentMeterTotal.multiply(currentMeterMoney);
+                        totalSum = totalSum.add(product);
+                    }
 
-                return R.data(200, totalSum, "操作成功");
+                    String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
+                    Object[] params = {totalSum, inventoryFormApplyTask.getMiddleMeterId()};
+                    jdbcTemplate.update(updateSql, params);
+
+                    return R.data(200, totalSum, "操作成功");
+                }
             }
         }
         return R.fail(400, "操作失败");
@@ -1132,55 +1215,63 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 9)
     @ApiOperation(value = "清单数据新增(添加清单)", notes = "查询获取数据接口还是调/middleMeterApply/addFormList;入参传入InventoryFormApplyTaskBatchDTO")
     public R<Object> dataInventoryFormApplyTaskSave(@RequestBody InventoryFormApplyTaskBatchDTO dto) {
-        /*获取中间计量单信息*/
-        MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(dto.getDataId());
-
-        if (ObjectUtil.isEmpty(middleMeterApplyTask)) {
-            throw new ServiceException("未获取到中间计量单信息");
-        }
-
-        /*获取数据源分解清单*/
-        List<MeterInventoryVO> formList = middleMeterApplyService.addResolveForm(dto.getContractId(), dto.getNodeId(), dto.getIds());
-
-        if (formList.size() != 0) {
-            /*复制表taskVO数据*/
-            BigDecimal currentMeterMoneyTotal = BigDecimal.ZERO;
-            List<InventoryFormApplyTask> formAppliesTask = formList.stream().map(l -> {
-                InventoryFormApplyTask formApplyTask = new InventoryFormApplyTask();
-                formApplyTask.setTaskId(dto.getTaskId());
-                formApplyTask.setBusinessDate(middleMeterApplyTask.getBusinessDate());
-                formApplyTask.setProjectId(dto.getProjectId());
-                formApplyTask.setContractId(dto.getContractId());
-                formApplyTask.setContractFormId(l.getId());
-                formApplyTask.setMiddleMeterId(dto.getDataId());
-                formApplyTask.setContractPeriodId(dto.getContractPeriodId());
-                formApplyTask.setMeterNumber(middleMeterApplyTask.getMeterNumber());
-                formApplyTask.setContractMeterId(dto.getNodeId());
-                formApplyTask.setFormNumber(l.getFormNumber());
-                formApplyTask.setFormName(l.getFormName());
-                formApplyTask.setCurrentPrice(l.getCurrentPrice());
-                formApplyTask.setBuildPictureTotal(l.getResolveTotal());
-                formApplyTask.setChangeBuildPictureTotal(l.getChangeTotal());
-                formApplyTask.setApproveStatus(1); //待审批
-                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
-                    formApplyTask.setCurrentMeterTotal(l.getCurrentMeterTotal());
-                    formApplyTask.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
-                } else {
-                    throw new ServiceException("计量金额和计量数量不能为空");
-                }
-                return formApplyTask;
-            }).collect(Collectors.toList());
-            for (InventoryFormApplyTask formApplyTask : formAppliesTask) {
-                currentMeterMoneyTotal = currentMeterMoneyTotal.add(formApplyTask.getCurrentMeterMoney());
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            /*获取中间计量单信息*/
+            MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(dto.getDataId());
+
+            if (ObjectUtil.isEmpty(middleMeterApplyTask)) {
+                throw new ServiceException("未获取到中间计量单信息");
             }
-            inventoryFormApplyServiceTask.saveBatch(formAppliesTask);
 
-            /*修改计量单当前总金额*/
-            String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
-            Object[] params = {currentMeterMoneyTotal, middleMeterApplyTask.getId()};
-            jdbcTemplate.update(updateSql, params);
+            /*获取数据源分解清单*/
+            List<MeterInventoryVO> formList = middleMeterApplyService.addResolveForm(dto.getContractId(), dto.getNodeId(), dto.getIds());
+
+            if (formList.size() != 0) {
+                /*复制表taskVO数据*/
+                BigDecimal currentMeterMoneyTotal = BigDecimal.ZERO;
+                List<InventoryFormApplyTask> formAppliesTask = formList.stream().map(l -> {
+                    InventoryFormApplyTask formApplyTask = new InventoryFormApplyTask();
+                    formApplyTask.setTaskId(dto.getTaskId());
+                    formApplyTask.setBusinessDate(middleMeterApplyTask.getBusinessDate());
+                    formApplyTask.setProjectId(dto.getProjectId());
+                    formApplyTask.setContractId(dto.getContractId());
+                    formApplyTask.setContractFormId(l.getId());
+                    formApplyTask.setMiddleMeterId(dto.getDataId());
+                    formApplyTask.setContractPeriodId(dto.getContractPeriodId());
+                    formApplyTask.setMeterNumber(middleMeterApplyTask.getMeterNumber());
+                    formApplyTask.setContractMeterId(dto.getNodeId());
+                    formApplyTask.setFormNumber(l.getFormNumber());
+                    formApplyTask.setFormName(l.getFormName());
+                    formApplyTask.setCurrentPrice(l.getCurrentPrice());
+                    formApplyTask.setBuildPictureTotal(l.getResolveTotal());
+                    formApplyTask.setChangeBuildPictureTotal(l.getChangeTotal());
+                    formApplyTask.setApproveStatus(1); //待审批
+                    if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
+                        formApplyTask.setCurrentMeterTotal(l.getCurrentMeterTotal());
+                        formApplyTask.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
+                    } else {
+                        throw new ServiceException("计量金额和计量数量不能为空");
+                    }
+                    return formApplyTask;
+                }).collect(Collectors.toList());
+                for (InventoryFormApplyTask formApplyTask : formAppliesTask) {
+                    currentMeterMoneyTotal = currentMeterMoneyTotal.add(formApplyTask.getCurrentMeterMoney());
+                }
+                inventoryFormApplyServiceTask.saveBatch(formAppliesTask);
+
+                /*修改计量单当前总金额*/
+                String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
+                Object[] params = {currentMeterMoneyTotal, middleMeterApplyTask.getId()};
+                jdbcTemplate.update(updateSql, params);
 
-            return R.data(200, formList, "操作成功");
+                return R.data(200, formList, "操作成功");
+            }
         }
 
         return R.fail("操作失败");
@@ -1190,8 +1281,16 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 10)
     @ApiOperation(value = "材料数据修改", notes = "传入MaterialMeterFormTask")
     public R<Object> dataMaterialMeterFormServiceTaskUpdate(@RequestBody MaterialMeterFormTask obj) {
-        if (materialMeterFormServiceTask.updateById(obj)) {
-            return R.success("操作成功");
+        if (ObjectUtil.isEmpty(obj.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + obj.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (materialMeterFormServiceTask.updateById(obj)) {
+                return R.success("操作成功");
+            }
         }
         return R.fail("操作失败");
     }
@@ -1200,52 +1299,238 @@ public class TaskController extends BladeController {
     @ApiOperationSupport(order = 11)
     @ApiOperation(value = "开工预付款数据修改", notes = "传入StartPayMeterFormTask")
     public R<Object> dataStartPayMeterFormServiceTaskUpdate(@RequestBody StartPayMeterFormTask obj) {
-        if (startPayMeterFormServiceTask.updateById(obj)) {
-            return R.success("操作成功");
+        if (ObjectUtil.isEmpty(obj.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + obj.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (startPayMeterFormServiceTask.updateById(obj)) {
+                return R.success("操作成功");
+            }
         }
         return R.fail("操作失败");
     }
 
-    @PostMapping("/data/uploadFile")
+    @PostMapping("/data/changeTokenFrom/update")
     @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "变更令-基础信息修改", notes = "传入ChangeTokenFormTask")
+    public R<Object> dataChangeTokenFromUpdate(@RequestBody ChangeTokenFormTask obj) {
+        if (ObjectUtil.isEmpty(obj.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + obj.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (changeTokenFormServiceTask.updateById(obj)) {
+                return R.success("操作成功");
+            }
+        }
+        return R.fail("操作失败");
+    }
+
+    @PostMapping("/data/changeTokenMeter/update")
+    @ApiOperationSupport(order = 13)
+    @ApiOperation(value = "变更令-申请部位合同图号修改", notes = "传入TaskChangeTokenMeterUpdateDTO")
+    public R<Object> dataChangeTokenMeterUpdate(@RequestBody TaskChangeTokenMeterUpdateDTO dto) {
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (ObjectUtil.isNotEmpty(dto.getPrimaryKeyId())) {
+                String sql = "UPDATE s_change_token_meter_task SET contract_picture = ? WHERE id = ?";
+                Object[] params = {(ObjectUtil.isNotEmpty(dto.getContractPicture()) ? dto.getContractPicture() : null), dto.getPrimaryKeyId()};
+                jdbcTemplate.update(sql, params);
+                return R.success("操作成功");
+            }
+        }
+        return R.fail("操作失败");
+    }
+
+    @PostMapping("/data/changeTokenInventory/update")
+    @ApiOperationSupport(order = 14)
+    @ApiOperation(value = "变更令-申请清单修改", notes = "传入TaskChangeTokenInventoryUpdateDTO")
+    public R<Object> dataChangeTokenInventoryUpdate(@RequestBody TaskChangeTokenInventoryUpdateDTO dto) {
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (ObjectUtil.isNotEmpty(dto.getPrimaryKeyIdInventory())) {
+                String sql = "SELECT * FROM s_change_token_inventory_task WHERE id = ?";
+                Object[] params = {dto.getPrimaryKeyIdInventory()};
+                ChangeTokenInventoryTask changeTokenInventoryTask = jdbcTemplate.query(sql, params, new BeanPropertyRowMapper<>(ChangeTokenInventoryTask.class)).stream().findAny().orElse(null);
+                if (changeTokenInventoryTask != null) {
+                    //变更前数量
+                    BigDecimal changeAfterTotal = changeTokenInventoryTask.getChangeBeforeTotal();
+                    //变更数量
+                    BigDecimal changTotalNow = dto.getChangTotal();
+                    //变更后数量
+                    BigDecimal afterTotalNow = changeAfterTotal.add(changTotalNow);
+
+                    //变更金额(变更数量*单价)
+                    BigDecimal changeMoneyNow = changTotalNow.multiply(changeTokenInventoryTask.getCurrentPrice());
+                    //变更后金额(变更金额+变更前金额)
+                    BigDecimal afterChangeMoneyNow = changeMoneyNow.add(changeTokenInventoryTask.getChangeBeforeMoney());
+
+                    /*修改单条清单信息*/
+                    String updateSqlInventory = "UPDATE s_change_token_inventory_task SET change_total = ? ,change_after_total = ? , change_money = ? , change_after_money = ? WHERE id = ?";
+                    Object[] updateParamsInventory = {changTotalNow, afterTotalNow, changeMoneyNow, afterChangeMoneyNow, dto.getPrimaryKeyIdInventory()};
+                    jdbcTemplate.update(updateSqlInventory, updateParamsInventory);
+
+                    /*修改部位变更金额*/
+                    ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getPrimaryKeyIdMeter());
+                    List<ChangeFormVO2> formListCopyByMeterId = changeTokenFormService.getBaseMapper().getFormListCopyByMeterId(dto.getContractId(), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
+                    BigDecimal sumOfCurrentChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    BigDecimal add = changeTokenMeterTask.getChangeMoney().add(sumOfCurrentChangeMoneyByMeterId);
+                    String updateSqlMeter = "UPDATE s_change_token_meter_task SET change_money = ? WHERE id = ?";
+                    Object[] updateParamsMeter = {add, dto.getPrimaryKeyIdMeter()};
+                    jdbcTemplate.update(updateSqlMeter, updateParamsMeter);
+
+                    /*修改变更令申请金额*/
+                    List<ChangeFormVO2> formListCopyAll = changeTokenFormService.getBaseMapper().getFormListCopy(dto.getContractId(), dto.getDataId());
+                    BigDecimal sumOfCurrentChangeMoneyAll = formListCopyAll.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                    String updateSqlForm = "UPDATE s_change_token_form_task SET change_money = ? WHERE id = ?";
+                    Object[] updateParamsForm = {sumOfCurrentChangeMoneyAll, dto.getDataId()};
+                    jdbcTemplate.update(updateSqlForm, updateParamsForm);
+
+                    return R.success("操作成功");
+                }
+            }
+        }
+        return R.fail("操作失败");
+    }
+
+    @PostMapping("/data/changeTokenInventory/save")
+    @ApiOperationSupport(order = 15)
+    @ApiOperation(value = "变更令-申请清单添加", notes = "/changeTokenForm/addForm接口获取清单信息;传入TaskChangeTokenInventoryBatchSaveDTO")
+    public R<Object> dataChangeTokenInventorySave(@RequestBody TaskChangeTokenInventoryBatchSaveDTO dto) {
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            if (dto.getFormList().size() > 0) {
+                List<ChangeTokenInventoryTask> inventoryList = new ArrayList<>();
+                for (ChangeFormVO2 vo2 : dto.getFormList()) {
+                    ChangeTokenInventoryTask inventory = new ChangeTokenInventoryTask();
+                    inventory.setProjectId(dto.getProjectId());
+                    inventory.setContractId(dto.getContractId());
+                    inventory.setChangeTokenId(dto.getDataId());
+                    inventory.setContractFormId(vo2.getId());
+                    inventory.setChangeBeforeTotal(vo2.getContractTotal());
+                    inventory.setChangeTotal(vo2.getCurrentChangeTotal());
+                    //设置清单3个基础信息,因为变更后不能改变
+                    inventory.setFormNumber(vo2.getFormNumber());
+                    inventory.setFormName(vo2.getFormName());
+                    inventory.setCurrentPrice(vo2.getCurrentPrice());
+                    if (vo2.getContractMeterId() == null) {
+                        throw new ServiceException("未找到清单(" + vo2.getFormName() + ")的部位id");
+                    }
+                    //设置节点id
+                    inventory.setContractMeterId(vo2.getContractMeterId());
+                    //计算变更后
+                    inventory.setChangeAfterTotal(inventory.getChangeBeforeTotal().add(inventory.getChangeTotal()));
+                    inventory.setChangeBeforeMoney(vo2.getContractMoney());
+                    //计算变更增减金额
+                    inventory.setChangeMoney(vo2.getCurrentPrice().multiply(inventory.getChangeTotal()));
+                    //计算变更后金额
+                    inventory.setChangeAfterMoney(vo2.getCurrentPrice().multiply(inventory.getChangeAfterTotal()));
+                    inventoryList.add(inventory);
+                }
+                changeTokenInventoryServiceTask.saveBatch(inventoryList);
+
+                /*修改部位变更金额*/
+                ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getPrimaryKeyIdMeter());
+                List<ChangeFormVO2> formListCopyByMeterId = changeTokenFormService.getBaseMapper().getFormListCopyByMeterId(dto.getContractId(), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
+                BigDecimal sumOfCurrentChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                BigDecimal add = changeTokenMeterTask.getChangeMoney().add(sumOfCurrentChangeMoneyByMeterId);
+                String updateSqlMeter = "UPDATE s_change_token_meter_task SET change_money = ? WHERE id = ?";
+                Object[] updateParamsMeter = {add, dto.getPrimaryKeyIdMeter()};
+                jdbcTemplate.update(updateSqlMeter, updateParamsMeter);
+
+                /*修改变更令申请金额*/
+                List<ChangeFormVO2> formListCopyAll = changeTokenFormService.getBaseMapper().getFormListCopy(dto.getContractId(), dto.getDataId());
+                BigDecimal sumOfCurrentChangeMoneyAll = formListCopyAll.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
+                String updateSqlForm = "UPDATE s_change_token_form_task SET change_money = ? WHERE id = ?";
+                Object[] updateParamsForm = {sumOfCurrentChangeMoneyAll, dto.getDataId()};
+                jdbcTemplate.update(updateSqlForm, updateParamsForm);
+
+                return R.data(200, "操作成功");
+            } else {
+                throw new ServiceException("请添加变更清单后再保存");
+            }
+        }
+        return R.fail("操作失败");
+    }
+
+    @PostMapping("/data/uploadFile")
+    @ApiOperationSupport(order = 16)
     @ApiOperation(value = "附件文件上传", notes = "传入TaskDataUploadFileDTO")
     public R<Object> dataUploadFile(@RequestBody TaskDataUploadFileDTO dto) {
-        List<AttachmentFormTask> fileList = dto.getFileList();
-        if (fileList != null && fileList.size() != 0) {
-            for (AttachmentFormTask file : fileList) {
-                file.setProjectId(dto.getProjectId());
-                file.setContractId(dto.getContractId());
-                file.setMasterId(dto.getDataId());
-                file.setTaskId(dto.getTaskId());
+        if (ObjectUtil.isEmpty(dto.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            List<AttachmentFormTask> fileList = dto.getFileList();
+            if (fileList != null && fileList.size() != 0) {
+                for (AttachmentFormTask file : fileList) {
+                    file.setProjectId(dto.getProjectId());
+                    file.setContractId(dto.getContractId());
+                    file.setMasterId(dto.getDataId());
+                    file.setTaskId(dto.getTaskId());
+                }
+                attachmentFormServiceTask.saveOrUpdateBatch(fileList);
+                return R.success("操作成功");
             }
-            attachmentFormServiceTask.saveOrUpdateBatch(fileList);
-            return R.success("操作成功");
         }
         return R.fail("操作失败");
     }
 
     @GetMapping("/data/removeFile")
-    @ApiOperationSupport(order = 13)
-    @ApiOperation(value = "附件文件删除", notes = "传入文件id")
-    public R<Object> dataRemoveFile(@RequestParam String id) {
-        AttachmentFormTask attachmentFormTask = attachmentFormServiceTask.getById(id);
-        if (attachmentFormTask != null) {
-            jdbcTemplate.execute("DELETE FROM s_attachment_form_task WHERE id = " + id);
-            return R.success("操作成功");
+    @ApiOperationSupport(order = 17)
+    @ApiOperation(value = "附件文件删除", notes = "传入文件id、任务taskId")
+    public R<Object> dataRemoveFile(@RequestParam String id, @RequestParam String taskId) {
+        if (ObjectUtil.isEmpty(taskId)) {
+            throw new ServiceException("未获取到taskId");
+        }
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + taskId, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            AttachmentFormTask attachmentFormTask = attachmentFormServiceTask.getById(id);
+            if (attachmentFormTask != null) {
+                jdbcTemplate.execute("DELETE FROM s_attachment_form_task WHERE id = " + id);
+                return R.success("操作成功");
+            }
         }
         return R.fail("操作失败");
     }
 
     @PostMapping("/data/audit")
-    @ApiOperationSupport(order = 14)
+    @ApiOperationSupport(order = 18)
     @ApiOperation(value = "单条数据同意或驳回", notes = "传入TaskAuditDTO")
     public R<Object> updateStatus(@RequestBody TaskAuditDTO dto) {
         if (ObjectUtil.isEmpty(dto.getDataId()) || ObjectUtil.isEmpty(dto.getTaskId())) {
-            throw new ServiceException("任务、数据id不能为空");
+            throw new ServiceException("任务id、数据id不能为空");
         }
         if (Arrays.asList("1", "2").contains(dto.getAuditStatus())) {
-            Task task = jdbcTemplate.query("SELECT meter_task_type FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+            Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + dto.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
             if (task != null) {
+                check(task);
+
                 if (task.getMeterTaskType().equals(1)) {
                     middleMeterApplyServiceTask.update(Wrappers.<MiddleMeterApplyTask>lambdaUpdate()
                             .set(MiddleMeterApplyTask::getStatus, dto.getAuditStatus())
@@ -1265,7 +1550,10 @@ public class TaskController extends BladeController {
                             .eq(StartPayMeterFormTask::getId, dto.getDataId()));
 
                 } else if (task.getMeterTaskType().equals(4)) {
-                    //TODO 变更令
+                    changeTokenFormServiceTask.update(Wrappers.<ChangeTokenFormTask>lambdaUpdate()
+                            .set(ChangeTokenFormTask::getStatus, dto.getAuditStatus())
+                            .set(ChangeTokenFormTask::getRepealDesc, ObjectUtil.isNotEmpty(dto.getRepealDesc()) ? dto.getRepealDesc() : null)
+                            .eq(ChangeTokenFormTask::getId, dto.getDataId()));
 
                 }
                 return R.success("操作成功");
@@ -1275,7 +1563,7 @@ public class TaskController extends BladeController {
     }
 
     @PostMapping("/approve")
-    @ApiOperationSupport(order = 15)
+    @ApiOperationSupport(order = 19)
     @ApiOperation(value = "同意审批(批量审批)", notes = "传入TaskApproveDTO")
     @PushMessage(clientId = ClientIdConstant.METER_CLIENT_ID)
     public R<Object> approve(@RequestBody TaskApproveDTO dto) {
@@ -1284,12 +1572,12 @@ public class TaskController extends BladeController {
         }
 
         /*加锁*/
-        String redisValue = bladeRedis.get("meter:approve:" + dto.getTaskId());
+        String redisValue = bladeRedis.get("meter:approve:user:" + SecureUtil.getUserId());
         if (StringUtils.isNotEmpty(redisValue) && redisValue.equals("1")) {
-            return R.fail(400, "当前任务已提交审批,请勿重复提交,60秒后再尝试");
+            return R.fail(400, "请勿重复提交,30秒后再尝试");
         }
-        bladeRedis.set("meter:approve:" + dto.getTaskId(), "1");
-        bladeRedis.expire("meter:approve:" + dto.getTaskId(), 60);
+        bladeRedis.set("meter:approve:user:" + SecureUtil.getUserId(), "1");
+        bladeRedis.expire("meter:approve:user:" + SecureUtil.getUserId(), 30);
 
         String sql_1 = "SELECT * FROM u_task WHERE id = ?";
         Task task = jdbcTemplate.query(sql_1, new Object[]{dto.getTaskId()}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
@@ -1333,6 +1621,12 @@ public class TaskController extends BladeController {
         return R.fail("操作失败");
     }
 
+    private void check(Task task) {
+        String sql_2 = "SELECT * FROM u_task_parallel WHERE process_instance_id = ? ORDER BY sort";
+        List<TaskParallel> taskParallels = jdbcTemplate.query(sql_2, new Object[]{task.getProcessInstanceId()}, new BeanPropertyRowMapper<>(TaskParallel.class));
+        checkTheTaskPersonSort(taskParallels);
+    }
+
     private boolean checkTheTaskPersonSort(List<TaskParallel> taskParallels) {
         //未完成审批人信息
         List<String> name = new ArrayList<>();
@@ -1365,7 +1659,7 @@ public class TaskController extends BladeController {
             List<MiddleMeterApplyTask> middleMeterApplyTasks = middleMeterApplyServiceTask.getBaseMapper().selectList(Wrappers.<MiddleMeterApplyTask>lambdaQuery()
                     .eq(MiddleMeterApplyTask::getContractPeriodId, formDataId)
                     .eq(MiddleMeterApplyTask::getTaskId, dto.getTaskId())
-                    .isNull(MiddleMeterApplyTask::getStatus) //表示用户未选择,那么默认同意
+                    .ne(MiddleMeterApplyTask::getStatus, 2)
             );
             List<Long> ids = middleMeterApplyTasks.stream().map(MiddleMeterApplyTask::getId).collect(Collectors.toList());
             if (ids.size() > 0) {
@@ -1380,7 +1674,7 @@ public class TaskController extends BladeController {
             List<MaterialMeterFormTask> materialMeterFormTasks = materialMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<MaterialMeterFormTask>lambdaQuery()
                     .eq(MaterialMeterFormTask::getMeterPeriodId, formDataId)
                     .eq(MaterialMeterFormTask::getTaskId, dto.getTaskId())
-                    .isNull(MaterialMeterFormTask::getStatus) //表示用户未选择,那么默认同意
+                    .ne(MaterialMeterFormTask::getStatus, 2)
             );
             List<Long> ids = materialMeterFormTasks.stream().map(MaterialMeterFormTask::getId).collect(Collectors.toList());
             if (ids.size() > 0) {
@@ -1394,7 +1688,7 @@ public class TaskController extends BladeController {
             List<StartPayMeterFormTask> startPayMeterFormTasks = startPayMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<StartPayMeterFormTask>lambdaQuery()
                     .eq(StartPayMeterFormTask::getMeterPeriodId, formDataId)
                     .eq(StartPayMeterFormTask::getTaskId, dto.getTaskId())
-                    .isNull(StartPayMeterFormTask::getStatus) //表示用户未选择,那么默认同意
+                    .ne(StartPayMeterFormTask::getStatus, 2)
             );
             List<Long> ids = startPayMeterFormTasks.stream().map(StartPayMeterFormTask::getId).collect(Collectors.toList());
             if (ids.size() > 0) {
@@ -1405,7 +1699,11 @@ public class TaskController extends BladeController {
                 startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
             }
         } else if (task.getMeterTaskType().equals(4)) {
-            //TODO 变更令
+            List<ChangeTokenFormTask> query = jdbcTemplate.query("SELECT id FROM s_change_token_form_task WHERE status != 2 id IN(" + formDataId + ")", new BeanPropertyRowMapper<>(ChangeTokenFormTask.class));
+            List<Long> collect = query.stream().map(ChangeTokenFormTask::getId).collect(Collectors.toList());
+            if (collect.size() > 0) {
+                jdbcTemplate.execute("UPDATE s_change_token_form_task SET status = 1 WHERE id IN(" + StringUtils.join(collect, ",") + ")");
+            }
         }
     }
 
@@ -1465,7 +1763,7 @@ public class TaskController extends BladeController {
                 startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
             }
         } else if (task.getMeterTaskType().equals(4)) {
-            //TODO 变更令
+            jdbcTemplate.execute("UPDATE s_change_token_form_task SET approve_status = 2 WHERE id IN(" + formDataId + ")");
         }
         return this;
     }
@@ -1481,7 +1779,7 @@ public class TaskController extends BladeController {
             String sql = "UPDATE u_task_parallel SET status = ? ,update_time = ? WHERE id = ?";
             Object[] param = {
                     2,
-                    new java.sql.Timestamp(System.currentTimeMillis()),
+                    new Date(),
                     taskParallelOne.getId()};
             jdbcTemplate.update(sql, param);
         }
@@ -1522,70 +1820,106 @@ public class TaskController extends BladeController {
             startPayMeterFormService.saveBatch(startPayMeterForms, 1000);
 
         } else if (task.getMeterTaskType().equals(4)) {
-            //TODO 变更令
+            for (String dataId : task.getFormDataId().split(",")) {
+                ChangeTokenFormTask changeTokenFormTask = changeTokenFormServiceTask.getById(dataId);
+                if (changeTokenFormTask != null) {
+                    List<ChangeTokenMeterTask> changeTokenMeterTasks = changeTokenMeterServiceTask.getBaseMapper().selectList(Wrappers.<ChangeTokenMeterTask>lambdaQuery()
+                            .eq(ChangeTokenMeterTask::getChangeTokenId, changeTokenFormTask.getId()));
+                    Set<Long> contractMeterIds = changeTokenMeterTasks.stream().map(ChangeTokenMeterTask::getContractMeterId).collect(Collectors.toSet());
+                    if (contractMeterIds.size() > 0) {
+                        List<ChangeTokenInventoryTask> changeTokenInventoryTasks = changeTokenInventoryServiceTask.getBaseMapper().selectList(Wrappers.<ChangeTokenInventoryTask>lambdaQuery()
+                                .eq(ChangeTokenInventoryTask::getChangeTokenId, changeTokenFormTask.getId())
+                                .in(ChangeTokenInventoryTask::getContractMeterId, contractMeterIds));
+                        if (changeTokenInventoryTasks.size() > 0) {
+                            jdbcTemplate.execute("DELETE FROM s_change_token_inventory WHERE change_token_id = " + dataId);
+                            jdbcTemplate.execute("DELETE FROM s_change_token_meter WHERE change_token_id = " + dataId);
+                            jdbcTemplate.execute("DELETE FROM s_change_token_form WHERE id = " + dataId);
+
+                            ChangeTokenForm changeTokenForm = BeanUtil.copyProperties(changeTokenFormTask, ChangeTokenForm.class);
+                            changeTokenFormService.save(changeTokenForm);
+
+                            List<ChangeTokenMeter> changeTokenMeter = BeanUtil.copyProperties(changeTokenMeterTasks, ChangeTokenMeter.class);
+                            changeTokenMeterService.saveBatch(changeTokenMeter, 1000);
+
+                            List<ChangeTokenInventory> changeTokenInventoryList = BeanUtil.copyProperties(changeTokenInventoryTasks, ChangeTokenInventory.class);
+                            changeTokenInventoryService.saveBatch(changeTokenInventoryList, 1000);
+                        }
+                    }
+                }
+            }
         }
         return this;
     }
 
     @GetMapping("/comment/list")
-    @ApiOperationSupport(order = 16)
+    @ApiOperationSupport(order = 20)
     @ApiOperation(value = "批注信息列表", notes = "传入任务taskId,数据dataId")
     public R<List<TaskComment>> commentList(@RequestParam String taskId, @RequestParam String dataId) {
         if (StringUtils.isNotEmpty(taskId) && StringUtils.isNotEmpty(dataId)) {
             String sql = "SELECT * FROM s_task_comment WHERE task_id = ? AND data_id = ? ORDER BY create_time";
-            List<TaskComment> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(TaskComment.class), taskId, dataId);
+            List<TaskComment> query = jdbcTemplate.query(sql, new Object[]{taskId, dataId}, new BeanPropertyRowMapper<>(TaskComment.class));
             return R.data(200, query, "操作成功");
         }
         return R.data(200, null, "未查询到信息");
     }
 
     @PostMapping("/comment/submit")
-    @ApiOperationSupport(order = 17)
+    @ApiOperationSupport(order = 21)
     @ApiOperation(value = "批注信息新增或修改", notes = "传入TaskComment")
     @Transactional
     public R<Object> commentSubmit(@RequestBody TaskComment taskComment) {
+        if (ObjectUtil.isEmpty(taskComment.getTaskId())) {
+            throw new ServiceException("未获取到taskId");
+        }
         if (ObjectUtil.isEmpty(SecureUtil.getUserId())) {
             throw new ServiceException("未获取到当前用户信息");
         }
         if (ObjectUtil.isNotEmpty(taskComment.getComment()) && taskComment.getComment().length() > 1000) {
             throw new ServiceException("批注信息最长1000个字符,请重新输入");
         }
-        try {
-            String querySql = "SELECT COUNT(*) FROM s_task_comment WHERE task_id = ? AND data_id = ? AND user_id = ?";
-            Object[] queryParams = {
-                    taskComment.getTaskId(),
-                    taskComment.getDataId(),
-                    SecureUtil.getUserId()
-            };
-            Integer count = jdbcTemplate.queryForObject(querySql, Integer.class, queryParams);
-            int rowCount = (count != null) ? count : 0;
-            if (rowCount == 0) {
-                String insertSql = "INSERT INTO s_task_comment(id, task_id, data_id, user_id, user_name, comment, create_time) VALUES (?, ?, ?, ?, ?, ?, ?)";
-                Object[] insertParams = {
-                        SnowFlakeUtil.getId(),
-                        taskComment.getTaskId(),
-                        taskComment.getDataId(),
-                        SecureUtil.getUserId(),
-                        SecureUtil.getNickName(),
-                        ObjectUtil.isNotEmpty(taskComment.getComment()) ? taskComment.getComment() : null,
-                        new java.sql.Timestamp(System.currentTimeMillis())
-                };
-                jdbcTemplate.update(insertSql, insertParams);
-            } else {
-                String updateSql = "UPDATE s_task_comment SET comment = ?, create_time = ? WHERE task_id = ? AND data_id = ? AND user_id = ?";
-                Object[] updateParams = {
-                        ObjectUtil.isNotEmpty(taskComment.getComment()) ? taskComment.getComment() : null,
-                        new java.sql.Timestamp(System.currentTimeMillis()),
+        Task task = jdbcTemplate.query("SELECT meter_task_type,process_instance_id FROM u_task WHERE id = " + taskComment.getTaskId(), new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+        if (task != null) {
+            check(task);
+
+            try {
+                String querySql = "SELECT COUNT(*) FROM s_task_comment WHERE task_id = ? AND data_id = ? AND user_id = ?";
+                Object[] queryParams = {
                         taskComment.getTaskId(),
                         taskComment.getDataId(),
                         SecureUtil.getUserId()
                 };
-                jdbcTemplate.update(updateSql, updateParams);
+                Integer count = jdbcTemplate.queryForObject(querySql, Integer.class, queryParams);
+                int rowCount = (count != null) ? count : 0;
+                if (rowCount == 0) {
+                    String insertSql = "INSERT INTO s_task_comment(id, task_id, data_id, user_id, user_name, comment, create_time) VALUES (?, ?, ?, ?, ?, ?, ?)";
+                    Object[] insertParams = {
+                            SnowFlakeUtil.getId(),
+                            taskComment.getTaskId(),
+                            taskComment.getDataId(),
+                            SecureUtil.getUserId(),
+                            SecureUtil.getNickName(),
+                            ObjectUtil.isNotEmpty(taskComment.getComment()) ? taskComment.getComment() : null,
+                            new Date()
+                    };
+                    jdbcTemplate.update(insertSql, insertParams);
+                } else {
+                    String updateSql = "UPDATE s_task_comment SET comment = ?, create_time = ? WHERE task_id = ? AND data_id = ? AND user_id = ?";
+                    Object[] updateParams = {
+                            ObjectUtil.isNotEmpty(taskComment.getComment()) ? taskComment.getComment() : null,
+                            new Date(),
+                            taskComment.getTaskId(),
+                            taskComment.getDataId(),
+                            SecureUtil.getUserId()
+                    };
+                    jdbcTemplate.update(updateSql, updateParams);
+                }
+
+                return R.data(200, null, "操作成功");
+            } catch (Exception e) {
+                return R.fail("操作失败" + e.getMessage());
             }
-            return R.data(200, null, "操作成功");
-        } catch (Exception e) {
-            return R.fail("操作失败" + e.getMessage());
         }
+        return R.fail("操作失败");
     }
 
 }

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

@@ -49,14 +49,25 @@ public interface ChangeTokenFormMapper extends BaseMapper<ChangeTokenForm> {
 
     ChangeTokenFormVO detail(@Param("id") Long id);
 
+    ChangeTokenFormVO2 detailCopy(@Param("id") Long id);
+
     //获取变更令下节点
     List<ChangeNodeVO> getNodeList(@Param("contractId") Long contractId,@Param("id") Long id);
+
+    List<ChangeNodeVO> getNodeListCopy(@Param("contractId") Long contractId,@Param("id") Long id);
+
     //获取变更令下节点,附带最新施工图金额和变更后金额
     List<ChangeNodeVO> getNodeList2(@Param("id") Long id,@Param("contractId") Long contractId);
     //获取变更令下节点,回退时使用,附带修改前的施工图号
     List<ChangeNodeVO> getNodeList3(@Param("id") Long id,@Param("contractId") Long contractId);
+
     //获取变更令下清单
     List<ChangeFormVO2> getFormList(@Param("contractId") Long contractId,@Param("id") Long id);
+
+    List<ChangeFormVO2> getFormListCopy(@Param("contractId") Long contractId,@Param("id") Long id);
+
+    List<ChangeFormVO2> getFormListCopyByMeterId(@Param("contractId") Long contractId,@Param("id") Long id,@Param("contractMeterId") Long contractMeterId);
+
     //获取变更令下清单,附带最新变更后数量和变更后金额
     List<ChangeFormVO2> getFormList2(@Param("id") Long id,@Param("contractId") Long contractId);
     //获取变更令下清单,回退时使用,附带修改前的变更后数量与变更后金额

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

@@ -178,6 +178,15 @@
         from s_change_token_form ctf
         where id = #{id}
     </select>
+
+    <select id="detailCopy" resultType="org.springblade.meter.vo.ChangeTokenFormVO2">
+        select *,
+               (select dict_value from blade_dict where is_deleted = 0 and code = 'meter_change_type' and dict_key = ctf.change_type) as changeTypeName,
+               (select dict_value from blade_dict where is_deleted = 0 and code = 'meter_change_classify' and dict_key = ctf.change_classify) as changeClassifyName
+        from s_change_token_form_task ctf
+        where id = #{id}
+    </select>
+
     <select id="getNodeList" resultType="org.springblade.meter.vo.ChangeNodeVO">
         select ctm.contract_meter_id as id,ctm.node_name,ctm.node_url,before_change_money,
                if(ctm.is_supplement = 1,'是','否') as isSupplementName,
@@ -186,6 +195,16 @@
         where ctm.contract_id = #{contractId} and ctm.is_deleted = 0
           AND ctm.change_token_id = #{id}
     </select>
+
+    <select id="getNodeListCopy" resultType="org.springblade.meter.vo.ChangeNodeVO">
+        select ctm.id AS primaryKeyId,ctm.contract_meter_id as id,ctm.node_name,ctm.node_url,before_change_money,
+               if(ctm.is_supplement = 1,'是','否') as isSupplementName,
+               ctm.contract_picture,ctm.change_money,before_contract_picture
+        from s_change_token_meter_task ctm
+        where ctm.contract_id = #{contractId} and ctm.is_deleted = 0
+          AND ctm.change_token_id = #{id}
+    </select>
+
     <select id="getNodeList2" resultType="org.springblade.meter.vo.ChangeNodeVO">
         select ctm.contract_meter_id as id,ctm.node_name,ctm.node_url,
                (select build_picture_money from s_meter_tree_contract where id = ctm.contract_meter_id) as beforeBuildMoney,
@@ -202,6 +221,7 @@
         where ctm.contract_id = #{contractId} and ctm.is_deleted = 0
           AND ctm.change_token_id = #{id}
     </select>
+
     <select id="getFormList" resultType="org.springblade.meter.vo.ChangeFormVO2">
         select cti.contract_form_id as id,cti.form_number,cti.form_name,cti.current_price,cti.contract_meter_id,
                cti.change_before_total as contractTotal,cti.change_total as currentChangeTotal,
@@ -211,6 +231,27 @@
         where cti.contract_id = #{contractId} and cti.is_deleted = 0
           AND cti.change_token_id = #{id} and is_collect_form = 0
     </select>
+
+    <select id="getFormListCopy" resultType="org.springblade.meter.vo.ChangeFormVO2">
+        select cti.id as primaryKeyId,cti.contract_form_id as id,cti.form_number,cti.form_name,cti.current_price,cti.contract_meter_id,
+               cti.change_before_total as contractTotal,cti.change_total as currentChangeTotal,
+               cti.change_after_total as changeTotal,cti.change_before_money as contractMoney,
+               cti.change_money as currentChangeMoney,cti.change_after_money as changeMoney
+        from s_change_token_inventory_task cti
+        where cti.contract_id = #{contractId} and cti.is_deleted = 0
+          AND cti.change_token_id = #{id} and is_collect_form = 0
+    </select>
+
+    <select id="getFormListCopyByMeterId" resultType="org.springblade.meter.vo.ChangeFormVO2">
+        select cti.id as primaryKeyId,cti.contract_form_id as id,cti.form_number,cti.form_name,cti.current_price,cti.contract_meter_id,
+               cti.change_before_total as contractTotal,cti.change_total as currentChangeTotal,
+               cti.change_after_total as changeTotal,cti.change_before_money as contractMoney,
+               cti.change_money as currentChangeMoney,cti.change_after_money as changeMoney
+        from s_change_token_inventory_task cti
+        where cti.contract_id = #{contractId} and cti.is_deleted = 0
+          AND cti.change_token_id = #{id} AND cti.contract_meter_id = #{contractMeterId} and is_collect_form = 0
+    </select>
+
     <select id="getFormList2" resultType="org.springblade.meter.vo.ChangeFormVO2">
         select cti.contract_form_id as id,cti.form_number,cti.form_name,cti.current_price,cti.contract_meter_id,cti.change_token_id,
                cti.change_before_total as contractTotal,cti.change_total as currentChangeTotal,

+ 0 - 20
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeContractServiceImpl.java

@@ -76,10 +76,6 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                 cObj.setAncestor(null); //后面重新计算子级ancestor
             }
 
-            if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                cObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-            }
-
             meterTreeContractResultData.add(cObj);
         }
 
@@ -212,10 +208,6 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                                         cObj.setAncestor(null); //后面重新计算子级ancestor
                                     }
 
-                                    if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                                        cObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                                    }
-
                                     meterTreeContractResultData.add(cObj);
                                 }
 
@@ -325,10 +317,6 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                                         cObj.setAncestor(null); //后面重新计算子级ancestor
                                     }
 
-                                    if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                                        cObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                                    }
-
                                     meterTreeContractResultData.add(cObj);
                                 }
 
@@ -433,10 +421,6 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                         /*ancestor*/
                         cObj.setAncestor(meterTreeContractNode.getAncestor() + "," + cObj.getParentId());
 
-                        if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                            cObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                        }
-
                         baseMapper.insert(cObj);
                     }
 
@@ -494,10 +478,6 @@ public class MeterTreeContractServiceImpl extends BaseServiceImpl<MeterTreeContr
                             cObj.setAncestor(null); //后面重新计算子级ancestor
                         }
 
-                        if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                            cObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                        }
-
                         meterTreeContractResultData.add(cObj);
                     }
 

+ 12 - 18
blade-service/blade-meter/src/main/java/org/springblade/meter/service/impl/MeterTreeProjectServiceImpl.java

@@ -40,7 +40,7 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
     @Transactional(rollbackFor = Exception.class)
     public R<Object> projectTreeInitOrSync(Long meterTemplateId, Long projectId) {
         /*首先判断是否存在项目树*/
-        MeterTreeProject rootNode = baseMapper.selectOne(Wrappers.<MeterTreeProject>lambdaQuery()
+        List<MeterTreeProject> rootNode = baseMapper.selectList(Wrappers.<MeterTreeProject>lambdaQuery()
                 .select(MeterTreeProject::getTemplateId)
                 .eq(MeterTreeProject::getTemplateId, meterTemplateId) //当前模板
                 .eq(MeterTreeProject::getProjectId, projectId)
@@ -49,7 +49,7 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
                 .eq(MeterTreeProject::getStatus, 1));
 
         /*非当前模板,表示已修改项目的系统级模板绑定,那么需要先删除旧模板数据(一个项目只关联了一个模板)*/
-        MeterTreeProject rootNodeOther = baseMapper.selectOne(Wrappers.<MeterTreeProject>lambdaQuery()
+        List<MeterTreeProject> rootNodeOther = baseMapper.selectList(Wrappers.<MeterTreeProject>lambdaQuery()
                 .select(MeterTreeProject::getTemplateId)
                 .ne(MeterTreeProject::getTemplateId, meterTemplateId) //非当前模板
                 .eq(MeterTreeProject::getProjectId, projectId)
@@ -57,17 +57,19 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
                 .eq(MeterTreeProject::getAncestor, "0")
                 .eq(MeterTreeProject::getStatus, 1));
 
-        if (rootNodeOther != null) {
-            /*逻辑删除旧项目模板信息*/
-            jdbcTemplate.execute("UPDATE s_meter_tree_project SET is_deleted = 1 WHERE project_id = " + projectId + " AND template_id = " + rootNodeOther.getTemplateId());
-            logger.info(" ==================== 已成功逻辑删除旧系统模板id {} 项目id {} 的项目单元树数据 ==================== ", rootNodeOther.getTemplateId(), projectId);
+        if (rootNodeOther.size() > 0) {
+            for (MeterTreeProject meterTreeProject : rootNodeOther) {
+                /*逻辑删除旧项目模板信息*/
+                jdbcTemplate.execute("DELETE FROM s_meter_tree_project WHERE project_id = " + projectId + " AND template_id = " + meterTreeProject.getTemplateId());
+                logger.info(" ==================== 已成功删除旧系统模板id {} 项目id {} 的项目单元树数据 ==================== ", meterTreeProject.getTemplateId(), projectId);
 
-            /*逻辑删除项目下所有合同段的模板信息*/
-            jdbcTemplate.execute("UPDATE s_meter_tree_contract SET is_deleted = 1 WHERE project_id = " + projectId + " AND template_id = " + rootNodeOther.getTemplateId());
-            logger.info(" ==================== 已成功逻辑删除旧系统模板id {} 项目id {} 的合同段单元树数据 ==================== ", rootNodeOther.getTemplateId(), projectId);
+                /*逻辑删除项目下所有合同段的模板信息*/
+                jdbcTemplate.execute("DELETE FROM s_meter_tree_contract WHERE project_id = " + projectId + " AND template_id = " + meterTreeProject.getTemplateId());
+                logger.info(" ==================== 已成功删除旧系统模板id {} 项目id {} 的合同段单元树数据 ==================== ", meterTreeProject.getTemplateId(), projectId);
+            }
         }
 
-        if (rootNode == null) {
+        if (rootNode.size() == 0) {
             /*================== 新增初始化 ==================*/
             /*获取系统单元树信息*/
             List<MeterTreeSystem> meterTreeSystems = meterTreeSystemMapper.selectList(Wrappers.<MeterTreeSystem>lambdaQuery()
@@ -108,10 +110,6 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
                         pObj.setAncestor(null); //后面重新计算子级ancestor
                     }
 
-                    if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                        pObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                    }
-
                     meterTreeProjectsResultData.add(pObj);
                 }
 
@@ -242,10 +240,6 @@ public class MeterTreeProjectServiceImpl extends BaseServiceImpl<MeterTreeProjec
                                         pObj.setAncestor(null); //后面重新计算子级ancestor
                                     }
 
-                                    if (ObjectUtil.isNotEmpty(SecureUtil.getTenantId())) {
-                                        pObj.setTenantId(Long.parseLong(SecureUtil.getTenantId()));
-                                    }
-
                                     meterTreeProjectsResultData.add(pObj);
                                 }