Parcourir la source

计量bug

Signed-off-by: liuyc <56808083@qq.com>
liuyc il y a 1 an
Parent
commit
558542de81

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

@@ -25,4 +25,7 @@ public class ChangeTokenAddFormDTO {
 
     @ApiModelProperty(value = "已经存在的变更申请清单id,逗号拼接")
     private String ids;
+
+    @ApiModelProperty(value = "任务id(任务查看时传入)")
+    private Long taskId;
 }

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

@@ -28,4 +28,7 @@ public class TaskChangeTokenInventoryBatchSaveDTO implements Serializable {
     @ApiModelProperty(value = "申请部位的primaryKeyId")
     private Long primaryKeyIdMeter;
 
+    @ApiModelProperty(value = "申请部位的id(实际就是计量单元id)")
+    private Long nodeId;
+
 }

+ 8 - 2
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/TaskDataRemoveDTO.java

@@ -20,8 +20,14 @@ public class TaskDataRemoveDTO implements Serializable {
     @ApiModelProperty(value = "中间列表的数据id", required = true)
     private Long dataId;
 
-    @ApiModelProperty(value = "主键id,取值:1、中期计量清单删除取taskDetailId;2、变更令的部位删除,清单删除都取primaryKeyId主键id")
-    private Long primaryKeyId;
+    @ApiModelProperty(value = "中期计量清单返回的taskDetailId")
+    private Long middleMeterInventoryFormId;
+
+    @ApiModelProperty(value = "变更令部位的primaryKeyId")
+    private Long changeNodeId;
+
+    @ApiModelProperty(value = "变更令清单的primaryKeyId")
+    private Long changeFormId;
 
     @ApiModelProperty(value = "变更令删除时传入type,1=申请部位删除,2=申请清单删除")
     private Integer type;

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

@@ -107,7 +107,8 @@ public class ChangeTokenFormController extends BladeController {
 			@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)
+			@ApiImplicitParam(name = "ids", value = "已经存在的变更申请清单id,逗号拼接", required = true),
+			@ApiImplicitParam(name = "taskId", value = "任务id(任务查看时传入)")
 	})
 	public R<List<ChangeFormVO>> addForm(ChangeTokenAddFormDTO dto) {
 		List<ChangeFormVO> vos = changeTokenFormService.addForm(dto);

+ 179 - 178
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/MiddleMeterApplyController.java

@@ -19,14 +19,15 @@ package org.springblade.meter.controller;
 import io.swagger.annotations.*;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import lombok.AllArgsConstructor;
+
 import javax.validation.Valid;
 
-import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.Func;
 import org.springblade.meter.dto.MiddleMeterApplyDTO;
 import org.springblade.meter.vo.*;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.RequestParam;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -35,7 +36,6 @@ import org.springblade.meter.service.IMiddleMeterApplyService;
 import org.springblade.core.boot.ctrl.BladeController;
 
 import java.math.BigDecimal;
-import java.time.LocalDate;
 import java.util.List;
 
 /**
@@ -50,180 +50,181 @@ import java.util.List;
 @Api(value = "中间计量申请表", tags = "中间计量申请表接口")
 public class MiddleMeterApplyController extends BladeController {
 
-	private final IMiddleMeterApplyService middleMeterApplyService;
-
-
-	/**
-	 * 添加清单
-	 */
-	@GetMapping("/addFormList")
-	@ApiOperationSupport(order = 1)
-	@ApiOperation(value = "添加清单", notes = "传入节点id合同段id和已经存在的清单id,逗号分隔.返回清单集合")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
-			@ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true),
-			@ApiImplicitParam(name = "id", value = "中间计量申请的id", required = true)
-	})
-	public R<List<ResolveInventoryVO>> addFormList(Long id,Long contractId ,Long contractPeriodId, Long nodeId ,String ids) {
-		List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(id,contractId,contractPeriodId,nodeId,ids);
-		return R.data(vos);
-	}
-
-
-	/**
-	 * 添加分解清单
-	 */
-	@GetMapping("/addResolveForm")
-	@ApiOperationSupport(order = 2)
-	@ApiOperation(value = "添加分解清单", notes = "传入选中的行的id,逗号分隔.返回计量清单列表")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
-			@ApiImplicitParam(name = "ids", value = "传入选中的行的id,逗号分隔", required = true)
-	})
-	public R<List<MeterInventoryVO>> addResolveForm(Long contractId ,Long nodeId ,String ids) {
-		List<MeterInventoryVO> vos = middleMeterApplyService.addResolveForm(contractId,nodeId,ids);
-		return R.data(vos);
-	}
-
-	/**
-	 * 获取当前节点工程划分
-	 */
-	@GetMapping("/getNodeDivide")
-	@ApiOperationSupport(order = 3)
-	@ApiOperation(value = "获取当前节点工程划分", notes = "传入节点id")
-	public R<String> getNodeDivide(Long nodeId) {
-		return R.data(middleMeterApplyService.getNodeDivide(nodeId));
-	}
-
-	/**
-	 * 获取当前节点变更令
-	 */
-	@GetMapping("/getNodeToken")
-	@ApiOperationSupport(order = 4)
-	@ApiOperation(value = "获取变更编号,附件", notes = "传入合同id,节点id,和所有清单id逗号拼接,业务日期")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
-			@ApiImplicitParam(name = "formIds", value = "所有计量清单id,逗号分隔", required = true),
-			@ApiImplicitParam(name = "businessDate", value = "业务日期", required = true)
-	})
-	public R<MiddleMeterTokenVO> getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate) {
-		return R.data(middleMeterApplyService.getNodeToken(contractId,nodeId,formIds,businessDate));
-	}
-
-	/**
-	 * 新增 中间计量申请表
-	 */
-	@PostMapping("/add")
-	@ApiOperationSupport(order = 5)
-	@ApiOperation(value = "新增", notes = "传入middleMeterApplyDTO")
-	public R save(@Valid @RequestBody MiddleMeterApplyDTO dto) {
-		middleMeterApplyService.add(dto);
-		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 = 7)
-	@ApiOperation(value = "修改", notes = "传入middleMeterApplyDTO")
-	public R update(@Valid @RequestBody MiddleMeterApplyDTO dto) {
-		middleMeterApplyService.update2(dto);
-		return R.success("修改成功");
-	}
-
-	/**
-	 * 分页 中间计量申请表
-	 */
-	@GetMapping("/page")
-	@ApiOperationSupport(order = 8)
-	@ApiOperation(value = "分页", notes = "传合同id,节点id,计量期id和分页信息")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "contractUnitId", value = "节点id", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true),
-			@ApiImplicitParam(name = "type", value = "类型1按部位排序2按时间排序", required = true)
-	})
-	public R<IPage<MiddleMeterApplyVO>> list(MiddleMeterApply middleMeterApply, Query query,Integer type) {
-		IPage<MiddleMeterApplyVO> pages = middleMeterApplyService.page2(middleMeterApply,query,type);
-		return R.data(pages);
-	}
-
-	/**
-	 * 删除 中间计量申请表
-	 */
-	@PostMapping("/remove")
-	@ApiOperationSupport(order = 9)
-	@ApiOperation(value = "逻辑删除", notes = "传入ids")
-	public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
-		middleMeterApplyService.delete(Func.toLongList(ids));
-		return R.success("删除成功");
-	}
-
-	/**
-	 * 清单明细
-	 */
-	@GetMapping("/formDetail")
-	@ApiOperationSupport(order = 10)
-	@ApiOperation(value = "清单明细", notes = "传入合同id,合同计量期id,返回值包含展开明细")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
-	})
-	public R<List<MeterInventoryDetailVO>> formDetail(MiddleMeterApply middleMeterApply) {
-		return R.data(middleMeterApplyService.formDetail(middleMeterApply));
-	}
-
-	/**
-	 * 获取计量单编号
-	 */
-	@GetMapping("/getMeterNumber")
-	@ApiOperationSupport(order = 11)
-	@ApiOperation(value = "获取计量单编号", notes = "传入合同id,合同计量期id,返回值为计量单编号")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
-	})
-	public R<String> getMeterNumber(MiddleMeterApply middleMeterApply) {
-		return R.data(middleMeterApplyService.getMeterNumber(middleMeterApply));
-	}
-
-	/**
-	 * 获取本期计量总金额
-	 */
-	@GetMapping("/getCurrentMeterMoney")
-	@ApiOperationSupport(order = 12)
-	@ApiOperation(value = "获取本期计量总金额", notes = "传入合同id,合同计量期id,返回值为总金额")
-	@ApiImplicitParams(value = {
-			@ApiImplicitParam(name = "contractId", value = "合同id", required = true),
-			@ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
-	})
-	public R<BigDecimal> getCurrentMeterMoney(MiddleMeterApply middleMeterApply) {
-		return R.data(middleMeterApplyService.getCurrentMeterMoney(middleMeterApply));
-	}
-
-	@GetMapping("/test")
-	public R<String> test() {
-		return R.data(middleMeterApplyService.test());
-	}
-
-	
+    private final IMiddleMeterApplyService middleMeterApplyService;
+
+
+    /**
+     * 添加清单
+     */
+    @GetMapping("/addFormList")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "添加清单", notes = "传入节点id合同段id和已经存在的清单id,逗号分隔.返回清单集合")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+            @ApiImplicitParam(name = "ids", value = "已经存在的清单id,逗号分隔", required = true),
+            @ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true),
+            @ApiImplicitParam(name = "id", value = "中间计量申请的id", required = true),
+            @ApiImplicitParam(name = "taskId", value = "任务id(任务查看时传入)")
+    })
+    public R<List<ResolveInventoryVO>> addFormList(Long id, Long contractId, Long contractPeriodId, Long nodeId, String ids, String taskId) {
+        List<ResolveInventoryVO> vos = middleMeterApplyService.addFormList(id, contractId, contractPeriodId, nodeId, ids, taskId);
+        return R.data(vos);
+    }
+
+
+    /**
+     * 添加分解清单
+     */
+    @GetMapping("/addResolveForm")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "添加分解清单", notes = "传入选中的行的id,逗号分隔.返回计量清单列表")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+            @ApiImplicitParam(name = "ids", value = "传入选中的行的id,逗号分隔", required = true)
+    })
+    public R<List<MeterInventoryVO>> addResolveForm(Long contractId, Long nodeId, String ids) {
+        List<MeterInventoryVO> vos = middleMeterApplyService.addResolveForm(contractId, nodeId, ids);
+        return R.data(vos);
+    }
+
+    /**
+     * 获取当前节点工程划分
+     */
+    @GetMapping("/getNodeDivide")
+    @ApiOperationSupport(order = 3)
+    @ApiOperation(value = "获取当前节点工程划分", notes = "传入节点id")
+    public R<String> getNodeDivide(Long nodeId) {
+        return R.data(middleMeterApplyService.getNodeDivide(nodeId));
+    }
+
+    /**
+     * 获取当前节点变更令
+     */
+    @GetMapping("/getNodeToken")
+    @ApiOperationSupport(order = 4)
+    @ApiOperation(value = "获取变更编号,附件", notes = "传入合同id,节点id,和所有清单id逗号拼接,业务日期")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "nodeId", value = "节点id", required = true),
+            @ApiImplicitParam(name = "formIds", value = "所有计量清单id,逗号分隔", required = true),
+            @ApiImplicitParam(name = "businessDate", value = "业务日期", required = true)
+    })
+    public R<MiddleMeterTokenVO> getNodeToken(Long contractId, Long nodeId, String formIds, String businessDate) {
+        return R.data(middleMeterApplyService.getNodeToken(contractId, nodeId, formIds, businessDate));
+    }
+
+    /**
+     * 新增 中间计量申请表
+     */
+    @PostMapping("/add")
+    @ApiOperationSupport(order = 5)
+    @ApiOperation(value = "新增", notes = "传入middleMeterApplyDTO")
+    public R save(@Valid @RequestBody MiddleMeterApplyDTO dto) {
+        middleMeterApplyService.add(dto);
+        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 = 7)
+    @ApiOperation(value = "修改", notes = "传入middleMeterApplyDTO")
+    public R update(@Valid @RequestBody MiddleMeterApplyDTO dto) {
+        middleMeterApplyService.update2(dto);
+        return R.success("修改成功");
+    }
+
+    /**
+     * 分页 中间计量申请表
+     */
+    @GetMapping("/page")
+    @ApiOperationSupport(order = 8)
+    @ApiOperation(value = "分页", notes = "传合同id,节点id,计量期id和分页信息")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "contractUnitId", value = "节点id", required = true),
+            @ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true),
+            @ApiImplicitParam(name = "type", value = "类型1按部位排序2按时间排序", required = true)
+    })
+    public R<IPage<MiddleMeterApplyVO>> list(MiddleMeterApply middleMeterApply, Query query, Integer type) {
+        IPage<MiddleMeterApplyVO> pages = middleMeterApplyService.page2(middleMeterApply, query, type);
+        return R.data(pages);
+    }
+
+    /**
+     * 删除 中间计量申请表
+     */
+    @PostMapping("/remove")
+    @ApiOperationSupport(order = 9)
+    @ApiOperation(value = "逻辑删除", notes = "传入ids")
+    public R remove(@ApiParam(value = "主键集合", required = true) @RequestParam String ids) {
+        middleMeterApplyService.delete(Func.toLongList(ids));
+        return R.success("删除成功");
+    }
+
+    /**
+     * 清单明细
+     */
+    @GetMapping("/formDetail")
+    @ApiOperationSupport(order = 10)
+    @ApiOperation(value = "清单明细", notes = "传入合同id,合同计量期id,返回值包含展开明细")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+    })
+    public R<List<MeterInventoryDetailVO>> formDetail(MiddleMeterApply middleMeterApply) {
+        return R.data(middleMeterApplyService.formDetail(middleMeterApply));
+    }
+
+    /**
+     * 获取计量单编号
+     */
+    @GetMapping("/getMeterNumber")
+    @ApiOperationSupport(order = 11)
+    @ApiOperation(value = "获取计量单编号", notes = "传入合同id,合同计量期id,返回值为计量单编号")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+    })
+    public R<String> getMeterNumber(MiddleMeterApply middleMeterApply) {
+        return R.data(middleMeterApplyService.getMeterNumber(middleMeterApply));
+    }
+
+    /**
+     * 获取本期计量总金额
+     */
+    @GetMapping("/getCurrentMeterMoney")
+    @ApiOperationSupport(order = 12)
+    @ApiOperation(value = "获取本期计量总金额", notes = "传入合同id,合同计量期id,返回值为总金额")
+    @ApiImplicitParams(value = {
+            @ApiImplicitParam(name = "contractId", value = "合同id", required = true),
+            @ApiImplicitParam(name = "contractPeriodId", value = "合同计量期id", required = true)
+    })
+    public R<BigDecimal> getCurrentMeterMoney(MiddleMeterApply middleMeterApply) {
+        return R.data(middleMeterApplyService.getCurrentMeterMoney(middleMeterApply));
+    }
+
+    @GetMapping("/test")
+    public R<String> test() {
+        return R.data(middleMeterApplyService.test());
+    }
+
+
 }

+ 100 - 65
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -48,6 +48,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -1142,23 +1143,23 @@ public class TaskController extends BladeController {
 
             if (task.getMeterTaskType().equals(1)) {
                 /*中间计量清单*/
-                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(dto.getDataId());
+                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(dto.getMiddleMeterInventoryFormId());
                 if (inventoryFormApplyTask != null) {
                     MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
-                    if (middleMeterApplyTask != null && inventoryFormApplyServiceTask.removeById(inventoryFormApplyTask.getId())) {
-                        BigDecimal currentMeterMoney = inventoryFormApplyTask.getCurrentMeterMoney();
-                        BigDecimal currentMeterTotal = inventoryFormApplyTask.getCurrentMeterTotal();
-                        BigDecimal result = currentMeterMoney.multiply(currentMeterTotal);
-
-                        BigDecimal meterMoney = middleMeterApplyTask.getMeterMoney();
-
-                        BigDecimal updatedMeterMoney = meterMoney.subtract(result); //相减
-
+                    if (middleMeterApplyTask != null && ObjectUtil.isNotEmpty(middleMeterApplyTask.getBusinessDate())) {
                         /*获取当前节点变更令*/
+                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                        String formattedDate = middleMeterApplyTask.getBusinessDate().format(formatter);
                         MiddleMeterTokenVO nodeToken = middleMeterApplyService.getNodeToken(Long.parseLong(task.getContractId()), middleMeterApplyTask.getContractUnitId(),
-                                inventoryFormApplyTask.getContractFormId().toString(), new SimpleDateFormat("yyyy-MM-dd").format(middleMeterApplyTask.getBusinessDate()));
+                                inventoryFormApplyTask.getContractFormId().toString(), formattedDate);
+
+                        if (nodeToken != null) {//TODO 存在业务逻辑问题,后续需要讨论
+                            BigDecimal currentMeterMoney = inventoryFormApplyTask.getCurrentMeterMoney();
+                            BigDecimal currentMeterTotal = inventoryFormApplyTask.getCurrentMeterTotal();
+                            BigDecimal result = currentMeterMoney.multiply(currentMeterTotal);
+                            BigDecimal meterMoney = middleMeterApplyTask.getMeterMoney();
+                            BigDecimal updatedMeterMoney = meterMoney.subtract(result); //相减
 
-                        if (nodeToken != null) {//TODO
                             /*修改中间计量申请金额,变更令id、编号、以及文件信息*/
                             String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ?,change_token_number = ?,change_token_ids = ? WHERE id = ?";
                             Object[] params = {updatedMeterMoney, nodeToken.getChangeTokenNumber(), nodeToken.getChangeTokenIds(), inventoryFormApplyTask.getMiddleMeterId()};
@@ -1177,7 +1178,14 @@ public class TaskController extends BladeController {
                             }
                             attachmentFormServiceTask.saveBatch(attachmentFormTasks);
 
+                            /*删除taskVO清单*/
+                            jdbcTemplate.execute("DELETE FROM s_inventory_form_apply_task WHERE id = " + inventoryFormApplyTask.getId());
+                            /*删除原始清单(因为重新添加清单时,查看的是原始清单,所以删除)*/
+                            jdbcTemplate.execute("DELETE FROM s_inventory_form_apply WHERE id = " + inventoryFormApplyTask.getId());
+
                             return R.data(200, updatedMeterMoney, "操作成功");
+                        } else {
+                            throw new ServiceException("未获取到当前清单变更令信息");
                         }
                     }
                 }
@@ -1188,7 +1196,7 @@ public class TaskController extends BladeController {
                     /*获取变更令*/
                     ChangeTokenFormTask tokenFormTask = changeTokenFormServiceTask.getById(dto.getDataId());
                     if (dto.getType().equals(1)) { //申请部位删除
-                        ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getPrimaryKeyId());
+                        ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getChangeNodeId());
                         if (changeTokenMeterTask != null) {
                             /*获取清单信息*/
                             List<ChangeFormVO2> formListCopy = changeTokenFormService.getBaseMapper().getFormListCopyByMeterId(Long.parseLong(task.getContractId()), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
@@ -1203,7 +1211,7 @@ public class TaskController extends BladeController {
 
                                 /*删除部位信息*/
                                 String delSql_1 = "DELETE FROM s_change_token_meter_task WHERE id = ?";
-                                Object[] delParams_1 = {dto.getPrimaryKeyId()};
+                                Object[] delParams_1 = {dto.getChangeNodeId()};
                                 jdbcTemplate.update(delSql_1, delParams_1);
 
                                 /*删除部位下的清单信息*/
@@ -1219,23 +1227,32 @@ public class TaskController extends BladeController {
 
                     } 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()); //相减
+                        ChangeTokenInventoryTask changeTokenInventoryTask = changeTokenInventoryServiceTask.getBaseMapper().selectById(dto.getChangeFormId());
+                        /*获取部位信息*/
+                        ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getChangeNodeId());
+
+                        if (changeTokenInventoryTask != null && changeTokenMeterTask != null) {
+                            /*变更令的变更申请金额=申请金额-清单变更增减金额*/
+                            BigDecimal changeTokenFormMoney = tokenFormTask.getChangeMoney().subtract(changeTokenInventoryTask.getChangeMoney()); //相减
+                            /*申请部位变更金额=申请金额-清单变更后金额*/
+                            BigDecimal changeTokenMeterMoney = changeTokenMeterTask.getChangeMoney().subtract(changeTokenInventoryTask.getChangeAfterMoney());
 
                             /*修改变更令变更金额*/
                             String updateSql = "UPDATE s_change_token_form_task SET change_money = ? WHERE id = ?";
-                            Object[] params = {subtract, dto.getDataId()};
+                            Object[] params = {changeTokenFormMoney, dto.getDataId()};
                             jdbcTemplate.update(updateSql, params);
 
+                            /*修改申请部位变更金额*/
+                            String updateSqlMeter = "UPDATE s_change_token_meter_task SET change_money = ? WHERE id = ?";
+                            Object[] updateParamsMeter = {changeTokenMeterMoney, dto.getChangeNodeId()};
+                            jdbcTemplate.update(updateSqlMeter, updateParamsMeter);
+
                             /*删除清单信息*/
                             String delSql = "DELETE FROM s_change_token_inventory_task WHERE id = ?";
-                            Object[] delParams = {dto.getPrimaryKeyId()};
+                            Object[] delParams = {dto.getChangeFormId()};
                             jdbcTemplate.update(delSql, delParams);
 
-                            return R.data(200, subtract, "操作成功");
+                            return R.success("操作成功");
                         }
                     }
                 }
@@ -1316,9 +1333,9 @@ public class TaskController extends BladeController {
 
             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(Long.parseLong(task.getProjectId()));
@@ -1330,37 +1347,50 @@ public class TaskController extends BladeController {
                     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("计量金额和计量数量不能为空");
-                    }
+                    formApplyTask.setApproveStatus(1);//待审批
+
+                    /*默认本期计量数=1,外层自定义修改*/
+                    l.setCurrentMeterTotal(BigDecimal.valueOf(1));
+                    formApplyTask.setCurrentMeterTotal(l.getCurrentMeterTotal());
+
+                    /*单价*/
+                    formApplyTask.setCurrentPrice(l.getCurrentPrice());
+
+                    /*变更金额*/
+                    formApplyTask.setCurrentMeterMoney(formApplyTask.getCurrentPrice().multiply(formApplyTask.getCurrentMeterTotal()));
+
                     return formApplyTask;
                 }).collect(Collectors.toList());
-                for (InventoryFormApplyTask formApplyTask : formAppliesTask) {
-                    currentMeterMoneyTotal = currentMeterMoneyTotal.add(formApplyTask.getCurrentMeterMoney());
-                }
 
                 /*获取所有清单ids*/
                 List<Long> collect = formAppliesTask.stream().map(InventoryFormApplyTask::getContractFormId).collect(Collectors.toList());
 
                 /*获取当前节点变更令*/
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                String formattedDate = middleMeterApplyTask.getBusinessDate().format(formatter);
                 MiddleMeterTokenVO nodeToken = middleMeterApplyService.getNodeToken(Long.parseLong(task.getContractId()), middleMeterApplyTask.getContractUnitId(),
-                        StringUtils.join(collect, ","), new SimpleDateFormat("yyyy-MM-dd").format(middleMeterApplyTask.getBusinessDate()));
-
-                if (nodeToken != null) {//TODO
+                        StringUtils.join(collect, ","), formattedDate);
 
+                if (nodeToken != null) {//TODO 存在业务逻辑问题,后续需要讨论
                     /*入库*/
                     inventoryFormApplyServiceTask.saveBatch(formAppliesTask);
 
+                    /*获取当前所有清单信息*/
+                    List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getFormCopy(middleMeterApplyTask.getId(), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
+
+                    BigDecimal totalSum = BigDecimal.ZERO;
+                    for (MeterInventoryVO meterInventoryVO : formToTask) {
+                        BigDecimal currentMeterTotal = meterInventoryVO.getCurrentMeterTotal();
+                        BigDecimal currentPrice = meterInventoryVO.getCurrentPrice();
+                        BigDecimal product = currentMeterTotal.multiply(currentPrice);
+                        totalSum = totalSum.add(product);
+                    }
+
                     /*修改中间计量申请金额,变更令id、编号、以及文件信息*/
                     String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ?,change_token_number = ?,change_token_ids = ? WHERE id = ?";
-                    Object[] params = {currentMeterMoneyTotal, nodeToken.getChangeTokenNumber(), nodeToken.getChangeTokenIds(), middleMeterApplyTask.getId()};
+                    Object[] params = {totalSum, nodeToken.getChangeTokenNumber(), nodeToken.getChangeTokenIds(), middleMeterApplyTask.getId()};
                     jdbcTemplate.update(updateSql, params);
 
                     /*删除该中间计量的变更令附件*/
@@ -1376,7 +1406,7 @@ public class TaskController extends BladeController {
                     }
                     attachmentFormServiceTask.saveBatch(attachmentFormTasks);
 
-                    return R.data(200, currentMeterMoneyTotal, "操作成功");
+                    return R.data(200, totalSum, "操作成功");
                 }
 
                 return R.data(200, formList, "操作成功");
@@ -1513,16 +1543,15 @@ public class TaskController extends BladeController {
                     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(Long.parseLong(task.getContractId()), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
-                    BigDecimal sumOfCurrentChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
-                    BigDecimal add = changeTokenMeterTask.getChangeMoney().add(sumOfCurrentChangeMoneyByMeterId);
+                    BigDecimal sumOfChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
                     String updateSqlMeter = "UPDATE s_change_token_meter_task SET change_money = ? WHERE id = ?";
-                    Object[] updateParamsMeter = {add, dto.getPrimaryKeyIdMeter()};
+                    Object[] updateParamsMeter = {sumOfChangeMoneyByMeterId, dto.getPrimaryKeyIdMeter()};
                     jdbcTemplate.update(updateSqlMeter, updateParamsMeter);
 
-                    /*修改变更令申请金额*/
+                    /*修改变更令申请金额(为清单的变更增减金额相加)*/
                     List<ChangeFormVO2> formListCopyAll = changeTokenFormService.getBaseMapper().getFormListCopy(Long.parseLong(task.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 = ?";
@@ -1551,42 +1580,48 @@ public class TaskController extends BladeController {
                 List<ChangeTokenInventoryTask> inventoryList = new ArrayList<>();
                 for (ChangeFormVO2 vo2 : dto.getFormList()) {
                     ChangeTokenInventoryTask inventory = new ChangeTokenInventoryTask();
+                    //清单基础信息
                     inventory.setProjectId(Long.parseLong(task.getProjectId()));
                     inventory.setContractId(Long.parseLong(task.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.setChangeTokenId(dto.getDataId());
+                    inventory.setContractFormId(vo2.getId());
+                    inventory.setContractMeterId(dto.getNodeId());
+
+                    /*变更前数量*/
+                    inventory.setChangeBeforeTotal(vo2.getContractTotal());
+
+                    /*默认变更增减数量=1(外层再自定义修改)*/
+                    inventory.setChangeTotal(BigDecimal.valueOf(1));
+
+                    /*变更后数量*/
                     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()));
+
+                    /*变更前金额=变更前数量*单价*/
+                    inventory.setChangeBeforeMoney(inventory.getChangeBeforeTotal().multiply(inventory.getCurrentPrice()));
+
+                    /*变更金额=变更数量*单价*/
+                    vo2.setChangeMoney(inventory.getChangeTotal().multiply(inventory.getCurrentPrice()));
+                    inventory.setChangeMoney(vo2.getChangeMoney());
+
+                    /*变更后金额=变更后数量*单价*/
+                    inventory.setChangeAfterMoney(inventory.getChangeAfterTotal().multiply(inventory.getCurrentPrice()));
+
                     inventoryList.add(inventory);
                 }
                 changeTokenInventoryServiceTask.saveBatch(inventoryList);
 
-                /*修改部位变更金额*/
+                /*修改部位变更金额(当前部位下所有清单的变更后金额相加)*/
                 ChangeTokenMeterTask changeTokenMeterTask = changeTokenMeterServiceTask.getBaseMapper().selectById(dto.getPrimaryKeyIdMeter());
                 List<ChangeFormVO2> formListCopyByMeterId = changeTokenFormService.getBaseMapper().getFormListCopyByMeterId(Long.parseLong(task.getContractId()), dto.getDataId(), changeTokenMeterTask.getContractMeterId());
-                BigDecimal sumOfCurrentChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getCurrentChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
-                BigDecimal add = changeTokenMeterTask.getChangeMoney().add(sumOfCurrentChangeMoneyByMeterId);
+                BigDecimal sumOfChangeMoneyByMeterId = formListCopyByMeterId.stream().map(ChangeFormVO2::getChangeMoney).reduce(BigDecimal.ZERO, BigDecimal::add);
                 String updateSqlMeter = "UPDATE s_change_token_meter_task SET change_money = ? WHERE id = ?";
-                Object[] updateParamsMeter = {add, dto.getPrimaryKeyIdMeter()};
+                Object[] updateParamsMeter = {sumOfChangeMoneyByMeterId, dto.getPrimaryKeyIdMeter()};
                 jdbcTemplate.update(updateSqlMeter, updateParamsMeter);
 
-                /*修改变更令申请金额*/
+                /*修改变更令申请金额(为清单的变更增减金额相加)*/
                 List<ChangeFormVO2> formListCopyAll = changeTokenFormService.getBaseMapper().getFormListCopy(Long.parseLong(task.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 = ?";

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

@@ -37,19 +37,19 @@ import java.util.Set;
 public interface IMiddleMeterApplyService extends BaseService<MiddleMeterApply> {
 
 
-    List<ResolveInventoryVO> addFormList(Long id,Long contractId,Long contractPeriodId ,Long nodeId , String ids);
+    List<ResolveInventoryVO> addFormList(Long id, Long contractId, Long contractPeriodId, Long nodeId, String ids, String taskId);
 
-    List<MeterInventoryVO> addResolveForm(Long contractId ,Long nodeId ,String ids);
+    List<MeterInventoryVO> addResolveForm(Long contractId, Long nodeId, String ids);
 
     void add(MiddleMeterApplyDTO dto);
 
-    MiddleMeterTokenVO getNodeToken(Long contractId,Long nodeId, String formIds, String businessDate);
+    MiddleMeterTokenVO getNodeToken(Long contractId, Long nodeId, String formIds, String businessDate);
 
     String getNodeDivide(Long nodeId);
 
     void update2(MiddleMeterApplyDTO dto);
 
-    IPage<MiddleMeterApplyVO> page2(MiddleMeterApply middleMeterApply, Query query,Integer type);
+    IPage<MiddleMeterApplyVO> page2(MiddleMeterApply middleMeterApply, Query query, Integer type);
 
     void delete(List<Long> ids);
 

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

@@ -22,10 +22,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.Task;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.meter.dto.ChangeTokenAddFormDTO;
 import org.springblade.meter.dto.ChangeTokenFormDTO;
 import org.springblade.meter.entity.*;
@@ -34,6 +36,8 @@ import org.springblade.meter.service.*;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.vo.*;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +58,8 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormMapper, ChangeTokenForm> implements IChangeTokenFormService {
 
+    private final JdbcTemplate jdbcTemplate;
+
     //合同清单
     private final IContractInventoryFormService contractInventoryFormService;
 
@@ -246,6 +252,15 @@ public class ChangeTokenFormServiceImpl extends BaseServiceImpl<ChangeTokenFormM
      */
     @Override
     public List<ChangeFormVO> addForm(ChangeTokenAddFormDTO dto) {
+        if (ObjectUtil.isNotEmpty(dto.getTaskId())){
+            /*任务查看存在监理合同段,入参contractId不对,应该指向任务的contractId*/
+            String sql = "SELECT contract_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){
+                dto.setContractId(Long.parseLong(task.getContractId()));
+            }
+        }
+
         List<ChangeFormVO> vos = new ArrayList<>();
         List<Long> ids = new ArrayList<>();
         String dtoIds = dto.getIds();

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

@@ -21,10 +21,12 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.business.entity.Task;
 import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.mp.support.Query;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.meter.dto.MiddleMeterApplyDTO;
 import org.springblade.meter.entity.*;
 import org.springblade.meter.mapper.MiddleMeterApplyMapper;
@@ -33,6 +35,8 @@ import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.meter.utils.ForestNodeMerger;
 import org.springblade.meter.vo.*;
 import org.springframework.beans.BeanUtils;
+import org.springframework.jdbc.core.BeanPropertyRowMapper;
+import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -55,6 +59,8 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterApplyMapper, MiddleMeterApply> implements IMiddleMeterApplyService {
 
+    private final JdbcTemplate jdbcTemplate;
+
     private final IInventoryFormMeterService formMeterService;
 
     private final MeterTreeContractService meterTreeContractService;
@@ -66,13 +72,23 @@ public class MiddleMeterApplyServiceImpl extends BaseServiceImpl<MiddleMeterAppl
     //合同计量期
     private final IContractMeterPeriodService contractMeterPeriodService;
 
-    
+
 
     /**
      * 添加清单
      */
     @Override
-    public List<ResolveInventoryVO> addFormList(Long id,Long contractId,Long contractPeriodId,Long nodeId ,String ids) {
+    public List<ResolveInventoryVO> addFormList(Long id,Long contractId,Long contractPeriodId,Long nodeId ,String ids, String taskId) {
+        if (ObjectUtil.isNotEmpty(taskId)) {
+            /*任务查看存在监理合同段,入参contractId不对,应该指向任务的contractId*/
+            List<ResolveInventoryVO> vos = new ArrayList<>();
+            String sql = "SELECT contract_id FROM u_task WHERE id = ?";
+            Task task = jdbcTemplate.query(sql, new Object[]{taskId}, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
+            if (task != null) {
+                contractId = (Long.parseLong(task.getContractId()));
+            }
+        }
+
         //获取当前节点下关联的清单,如果没有直接返回
         List<ResolveInventoryVO> vos = new ArrayList<>();
         List<Long> list = formMeterService.getNodeAllForm(nodeId);