Ver código fonte

bug

Signed-off-by: liuyc <56808083@qq.com>
liuyc 1 ano atrás
pai
commit
1dad76a5e6

+ 3 - 2
blade-ops/blade-resource/src/main/java/org/springblade/resource/builder/oss/AliOssBuilder.java

@@ -52,10 +52,11 @@ public class AliOssBuilder {
         // 设置失败请求重试次数,默认为3次。
         conf.setMaxErrorRetry(5);
         OssProperties ossProperties = new OssProperties();
-        ossProperties.setEndpoint(oss.getEndpoint());
+
+        //ossProperties.setEndpoint(oss.getEndpoint());
 
         //本地测试1
-        //ossProperties.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com/");
+        ossProperties.setEndpoint("https://oss-cn-hangzhou.aliyuncs.com/");
 
         ossProperties.setAccessKey(oss.getAccessKey());
         ossProperties.setSecretKey(oss.getSecretKey());

+ 14 - 0
blade-service-api/blade-meter-api/src/main/java/org/springblade/meter/dto/InventoryFormApplyTaskDTO.java

@@ -0,0 +1,14 @@
+package org.springblade.meter.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springblade.meter.entity.InventoryFormApplyTask;
+
+
+@Data
+public class InventoryFormApplyTaskDTO extends InventoryFormApplyTask {
+
+    @ApiModelProperty(value = "任务修改时使用清单id")
+    private Long taskDetailId;
+
+}

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

@@ -16,6 +16,9 @@ public class TaskDataUploadFileDTO implements Serializable {
     @ApiModelProperty(value = "中间列表数据的Id")
     private Long dataId;
 
+    @ApiModelProperty(value = "任务id")
+    private Long taskId;
+
     @ApiModelProperty(value = "项目id")
     private Long projectId;
 

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

@@ -17,7 +17,7 @@ public class TaskPageDTO implements Serializable {
     @ApiModelProperty(value = "选择菜单类型,1=待办,2=已办,3=我发起的")
     private Integer selectedType;
 
-    @ApiModelProperty(value = "任务类型")
+    @ApiModelProperty(value = "任务类型 1=中间计量,2=材料计量,3=开工预付款,4=变更令,5=工程结算,6=收方单")
     private Integer typeValue;
 
     @ApiModelProperty(value = "任务状态")

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

@@ -19,6 +19,9 @@ public class MeterInventoryVO {
     @ApiModelProperty(value = "id")
     private Long id;
 
+    @ApiModelProperty(value = "任务修改时使用id")
+    private Long taskDetailId;
+
     @ApiModelProperty(value = "清单编号")
     private String formNumber;
 

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

@@ -556,7 +556,7 @@ public class TaskController extends BladeController {
                 if (archiveFile != null) {
                     /*此处任务会查询出多条,因为存在多次废除任务,那么form_data_id指向同一个id,所以在新增的时候去重判断,status=1或2,有且只有一条*/
                     Task task = jdbcTemplate.query("select id,status,process_instance_id from u_task where task_create_timestamp is not null and status in (1,2) and form_data_id = '" + archiveId + "'", new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
-                    if (task != null && task.getStatus().equals(1)) {
+                    if (task != null) {
                         //修改档案文件收集业务数据状态=已废除
                         jdbcTemplate.execute("update u_archive_file set status = 3,is_certification = 0,e_visa_file = null where id = " + archiveId);
                         //待审批审批任务=已废除
@@ -581,7 +581,7 @@ public class TaskController extends BladeController {
             String[] taskIds = repealDTO.getIds().split(",");
             for (String taskId : taskIds) {
                 Task task = jdbcTemplate.query("select id,status,process_instance_id,form_data_id from u_task where id = " + taskId, new BeanPropertyRowMapper<>(Task.class)).stream().findAny().orElse(null);
-                if (task != null && task.getStatus().equals(1)) {
+                if (task != null) {
                     //待审批审批任务=已废除
                     jdbcTemplate.execute("update u_task set status = 3 where id = " + task.getId());
                     //审批任务详情=已废除
@@ -663,7 +663,7 @@ public class TaskController extends BladeController {
                                     dto.setAccount("expert" + phone);
                                     //如果当前账户已经存在,则代表账号已经注册,直接跳过当前
                                     R<User> r = userClient.userByAccount(AuthUtil.getTenantId(), dto.getAccount());
-                                    if (r.getData() != null){
+                                    if (r.getData() != null) {
                                         continue;
                                     }
                                     StringSPUtils stringSPUtils = new StringSPUtils();
@@ -1173,7 +1173,7 @@ public class TaskController extends BladeController {
         int size = dto.getSize();
         //封装入参SQL
         List<Object> params = new ArrayList<>();
-        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND is_deleted = 0 AND approval_type != 4"); //approval_type != 4 非档案的任务就是1填报资料,2工程文件,3日志资料
+        StringBuilder sqlString = new StringBuilder("SELECT * FROM u_task WHERE 1=1 AND is_deleted = 0 AND approval_type not in(4,5)");
         if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
             sqlString.append(" AND type = ?");
             params.add(dto.getTypeValue());

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

@@ -663,7 +663,7 @@ public class MeterTreeController extends BladeController {
     @ApiOperationSupport(order = 25)
     @ApiOperation(value = "合同段树节点详情", notes = "传入id")
     public R<MeterTreeContractVO> contractDetail(@RequestParam String id) {
-        MeterTreeContract basicInfo = meterTreeContractService.getById(id);
+        MeterTreeContract basicInfo = jdbcTemplate.query("select * from s_meter_tree_contract where is_deleted = 0 and id = " + id, new BeanPropertyRowMapper<>(MeterTreeContract.class)).stream().findAny().orElse(null);
         if (basicInfo != null) {
             MeterTreeContractVO vo = new MeterTreeContractVO();
             BeanUtil.copyProperties(basicInfo, vo);

+ 128 - 147
blade-service/blade-meter/src/main/java/org/springblade/meter/controller/TaskController.java

@@ -26,6 +26,7 @@ import org.springblade.core.secure.utils.SecureUtil;
 import org.springblade.core.tool.api.R;
 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;
@@ -73,12 +74,13 @@ public class TaskController extends BladeController {
     private final StartPayMeterFormServiceTaskImpl startPayMeterFormServiceTask;
     private final AttachmentFormServiceImpl attachmentFormService;
     private final AttachmentFormServiceTaskImpl attachmentFormServiceTask;
-
     private final MiddleMeterApplyMapper middleMeterApplyMapper;
 
+    private final ChangeTokenFormServiceImpl changeTokenFormService;
+
     @GetMapping("/name")
     @ApiOperationSupport(order = 1)
-    @ApiOperation(value = "获取任务名称", notes = "传入合同段contractId、期数id、type=1(中间计量申请)、=2(材料计量单)、3=(开工预付款计量单)、=4(变更令)")
+    @ApiOperation(value = "获取任务名称", notes = "传入合同段contractId、期数id(变更令传勾选的id字符串英文逗号拼接)、type=1(中间计量申请)、=2(材料计量单)、3=(开工预付款计量单)、=4(变更令)")
     public R<Object> name(@RequestParam String contractId, @RequestParam String id, @RequestParam String type) {
         String name = null;
         if (ObjectUtil.isNotEmpty(contractId) && ObjectUtil.isNotEmpty(id)) {
@@ -101,7 +103,14 @@ public class TaskController extends BladeController {
                     name = "【" + contractInfo.getContractName() + "】" + date + " 开工预付款计量单【" + meterPeriod.getPeriodNumber() + "】";
                 }
             } else if (("4").equals(type)) {
-                //TODO 变更令
+                List<Long> longs = Func.toLongList(id);
+                if (contractInfo != null && longs.size() > 0) {
+                    List<ChangeTokenForm> changeTokenForms = changeTokenFormService.getBaseMapper().selectBatchIds(longs);
+                    if (changeTokenForms.size() > 0) {
+                        List<String> collect = changeTokenForms.stream().map(ChangeTokenForm::getChangeNumber).collect(Collectors.toList());
+                        name = "【" + contractInfo.getContractName() + "】" + date + " 变更令【" + StringUtils.join(collect,"、") + "】";
+                    }
+                }
             }
         }
         return R.data(200, name, "操作成功");
@@ -357,7 +366,7 @@ public class TaskController extends BladeController {
      * @param meterTaskType
      */
     private void buildTaskInfo(Long taskId, MeterApprovalDTO approvalDTO, Set<String> aopParamsSet, Integer meterTaskType) {
-        /*预设流程,获取对应任务人id*/
+        /*预设流程,获取对应任务人id*//*
         String resultString = "";
         if (ObjectUtil.isNotEmpty(approvalDTO.getFixedFlowId())) {
             List<FixedFlowLink> fixedFlowLinks = jdbcTemplate.query("select fixed_flow_link_user,fixed_flow_link_sort from u_fixed_flow_link " +
@@ -374,16 +383,16 @@ public class TaskController extends BladeController {
                 resultString = sortStr.toString();
             }
         }
-        /*如果是预设流程,重新赋值任务人id*/
+        *//*如果是预设流程,重新赋值任务人id*//*
         if (ObjectUtil.isNotEmpty(resultString)) {
-            /*检查预设任务流程的任务人是否存在签字证书信息*/
+            *//*检查预设任务流程的任务人是否存在签字证书信息*//*
             R<Object> objectR = archiveFileTaskClient.checkTaskUserCertificateInfo(resultString);
             if (objectR.isSuccess()) {
                 approvalDTO.setTaskUserIds(resultString);
             } else {
                 throw new ServiceException("未获取到预设任务流程的任务人的签字证书信息,操作失败");
             }
-        }
+        }*/
         if (ObjectUtil.isEmpty(approvalDTO.getTaskUserIds())) {
             throw new ServiceException("未获取到任务人信息,操作失败");
         }
@@ -411,7 +420,7 @@ public class TaskController extends BladeController {
         task.setContractId(approvalDTO.getContractId().toString());
         task.setProjectId(approvalDTO.getProjectId().toString());
         task.setBatch(approvalDTO.getBatch());
-        task.setMeterTaskType(meterTaskType); //计量任务类型 1=中间计量申请,2=材料计量单,3=开工预付款计量单
+        task.setMeterTaskType(meterTaskType); //计量任务类型 1=中间计量申请,2=材料计量单,3=开工预付款计量单、4=变更令...
 
         task.setType(1);
         task.setApprovalType(5); //计量
@@ -515,21 +524,16 @@ public class TaskController extends BladeController {
                 String processInstanceId = task.getProcessInstanceId();
                 List<TaskParallel> taskParallels = jdbcTemplate.query("SELECT * FROM u_task_parallel WHERE process_instance_id = '" + processInstanceId + "' ORDER BY sort", new BeanPropertyRowMapper<>(TaskParallel.class));
                 List<String> taskParallelsUserIds = taskParallels.stream().map(TaskParallel::getTaskUser).collect(Collectors.toList());
-                boolean previousUsersApproved = true;
                 List<String> name = new ArrayList<>();
                 for (TaskParallel parallel : taskParallels) {
-                    //判断是否有人未审批
-                    if (parallel.getStatus() != 2) {
-                        previousUsersApproved = false;
-                        name.add(parallel.getTaskUserName());
+                    if (parallel.getTaskUser().equals(SecureUtil.getUserId().toString())) {
                         break;
                     }
-                    //判断是否是当前用户之前的用户
-                    if (parallel.getTaskUser().equals(AuthUtil.getUserId().toString())) {
-                        break;
+                    if (parallel.getStatus() != 2) {
+                        name.add(parallel.getTaskUserName());
                     }
                 }
-                if (!previousUsersApproved) {
+                if (name.size() > 0) {
                     throw new ServiceException("当前任务还有【" + StringUtils.join(name, "、") + "】未完成审批,请您稍后再试");
                 }
 
@@ -679,7 +683,7 @@ public class TaskController extends BladeController {
         }
 
         if (ObjectUtil.isNotEmpty(dto.getTypeValue())) {
-            sqlString.append(" AND type = ?");
+            sqlString.append(" AND meter_task_type = ?");
             params.add(dto.getTypeValue());
         }
         if (ObjectUtil.isNotEmpty(dto.getStatusValue())) {
@@ -954,8 +958,8 @@ public class TaskController extends BladeController {
                 MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(dataId);
                 vo.setBasicsInfo(middleMeterApplyTask);
 
-                /*清单信息(查询原始表数据,因为包含表中数据的计算统计,复制表中的数据不全)*/
-                List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getForm(Long.parseLong(dataId), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
+                /*清单信息*/
+                List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getFormCopy(Long.parseLong(dataId), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
                 vo.setAssociatedDataInfoList(formToTask);
 
             } else if (task.getMeterTaskType().equals(2)) {
@@ -965,6 +969,7 @@ public class TaskController extends BladeController {
             } else if (task.getMeterTaskType().equals(3)) {
                 StartPayMeterFormTask startPayMeterFormTask = startPayMeterFormServiceTask.getById(dataId);
                 vo.setBasicsInfo(startPayMeterFormTask);
+
             } else if (task.getMeterTaskType().equals(4)) {
                 //TODO 变更令
             }
@@ -980,17 +985,17 @@ public class TaskController extends BladeController {
 
     @GetMapping("/data/remove")
     @ApiOperationSupport(order = 7)
-    @ApiOperation(value = "任务关联的数据删除(清单、变更令删除)", notes = "传入任务id,数据dataId")
-    public R<Object> dataRemove(@RequestParam String id, @RequestParam String dataId) {
-        if (ObjectUtil.isEmpty(id) || ObjectUtil.isEmpty(dataId)) {
-            throw new ServiceException("任务、数据id不能为空");
+    @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不能为空");
         }
 
         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);
         if (task != null) {
             if (task.getMeterTaskType().equals(1)) {
                 /*清单*/
-                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(dataId);
+                InventoryFormApplyTask inventoryFormApplyTask = inventoryFormApplyServiceTask.getById(taskDetailId);
                 if (inventoryFormApplyTask != null) {
                     MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
                     if (middleMeterApplyTask != null && inventoryFormApplyServiceTask.removeById(inventoryFormApplyTask.getId())) {
@@ -999,6 +1004,7 @@ public class TaskController extends BladeController {
                         BigDecimal result = currentMeterMoney.multiply(currentMeterTotal);
 
                         BigDecimal meterMoney = middleMeterApplyTask.getMeterMoney();
+
                         BigDecimal updatedMeterMoney = meterMoney.subtract(result); //相减
 
                         String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
@@ -1020,58 +1026,41 @@ public class TaskController extends BladeController {
 
     @PostMapping("/data/inventoryFormApplyTask/update")
     @ApiOperationSupport(order = 8)
-    @ApiOperation(value = "清单数据修改", notes = "传入InventoryFormApplyTask")
-    public R<Object> dataInventoryFormApplyTaskUpdate(@RequestBody InventoryFormApplyTask obj) {
+    @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("未获取到清单数据");
+        }
 
-        /*更新前数量*/
-        BigDecimal old = inventoryFormApplyTask.getCurrentMeterTotal();
-        /*更新后数量*/
-        BigDecimal update = obj.getCurrentMeterTotal();
-
-        /*如果更新前<更新后,相加*/
-        if (old.compareTo(update) < 0) {
-            BigDecimal total = update.subtract(old); //差值
-            BigDecimal currentMeterMoney = inventoryFormApplyTask.getCurrentMeterMoney();
-            BigDecimal result = currentMeterMoney.multiply(total);
-
-            if (inventoryFormApplyServiceTask.updateById(obj)) {
-
-                MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
-                if (middleMeterApplyTask != null) {
-                    BigDecimal meterMoney = middleMeterApplyTask.getMeterMoney();
-                    BigDecimal updatedMeterMoney = meterMoney.add(result); //相加
+        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 = {updatedMeterMoney, inventoryFormApplyTask.getMiddleMeterId()};
-                    jdbcTemplate.update(updateSql, params);
+                /*清单信息*/
+                List<MeterInventoryVO> formToTask = middleMeterApplyMapper.getFormCopy(middleMeterApplyTask.getId(), middleMeterApplyTask.getContractId(), middleMeterApplyTask.getContractUnitId());
 
-                    return R.data(200, updatedMeterMoney, "操作成功");
+                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);
                 }
-            }
 
-            /*如果更新前>更新后,相减*/
-        } else if (old.compareTo(update) > 0) {
-            BigDecimal total = old.subtract(update); //差值
-            BigDecimal currentMeterMoney = inventoryFormApplyTask.getCurrentMeterMoney();
-            BigDecimal result = currentMeterMoney.multiply(total);
+                String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
+                Object[] params = {totalSum, inventoryFormApplyTask.getMiddleMeterId()};
+                jdbcTemplate.update(updateSql, params);
 
-            if (inventoryFormApplyServiceTask.updateById(obj)) {
-
-                MiddleMeterApplyTask middleMeterApplyTask = middleMeterApplyServiceTask.getById(inventoryFormApplyTask.getMiddleMeterId());
-                if (middleMeterApplyTask != null) {
-                    BigDecimal meterMoney = middleMeterApplyTask.getMeterMoney();
-                    BigDecimal updatedMeterMoney = meterMoney.subtract(result); //相减
-
-                    String updateSql = "UPDATE s_middle_meter_apply_task SET meter_money = ? WHERE id = ?";
-                    Object[] params = {updatedMeterMoney, inventoryFormApplyTask.getMiddleMeterId()};
-                    jdbcTemplate.update(updateSql, params);
-
-                    return R.data(200, updatedMeterMoney, "操作成功");
-                }
+                return R.data(200, totalSum, "操作成功");
             }
         }
-        return R.fail("操作失败");
+        return R.fail(400, "操作失败");
     }
 
     @PostMapping("/data/inventoryFormApplyTask/save")
@@ -1089,32 +1078,6 @@ public class TaskController extends BladeController {
         List<MeterInventoryVO> formList = middleMeterApplyService.addResolveForm(dto.getContractId(), dto.getNodeId(), dto.getIds());
 
         if (formList.size() != 0) {
-            /*原始表数据(为了/data/detail接口回显,因为详情接口查询的是原始数据)*/
-            List<InventoryFormApply> formApplies = formList.stream().map(l -> {
-                InventoryFormApply formApply = new InventoryFormApply();
-                formApply.setBusinessDate(middleMeterApplyTask.getBusinessDate());
-                formApply.setProjectId(dto.getProjectId());
-                formApply.setContractId(dto.getContractId());
-                formApply.setContractFormId(l.getId());
-                formApply.setMiddleMeterId(dto.getDataId());
-                formApply.setContractPeriodId(dto.getContractPeriodId());
-                formApply.setMeterNumber(middleMeterApplyTask.getMeterNumber());
-                formApply.setContractMeterId(dto.getNodeId());
-                formApply.setFormNumber(l.getFormNumber());
-                formApply.setFormName(l.getFormName());
-                formApply.setCurrentPrice(l.getCurrentPrice());
-                formApply.setBuildPictureTotal(l.getResolveTotal());
-                formApply.setChangeBuildPictureTotal(l.getChangeTotal());
-                if (l.getCurrentMeterTotal() != null && l.getCurrentPrice() != null) {
-                    formApply.setCurrentMeterTotal(l.getCurrentMeterTotal());
-                    formApply.setCurrentMeterMoney(l.getCurrentPrice().multiply(l.getCurrentMeterTotal()));
-                } else {
-                    throw new ServiceException("计量金额和计量数量不能为空");
-                }
-                return formApply;
-            }).collect(Collectors.toList());
-            inventoryFormApplyService.saveBatch(formApplies);
-
             /*复制表taskVO数据*/
             BigDecimal currentMeterMoneyTotal = BigDecimal.ZERO;
             List<InventoryFormApplyTask> formAppliesTask = formList.stream().map(l -> {
@@ -1188,6 +1151,7 @@ public class TaskController extends BladeController {
                 file.setProjectId(dto.getProjectId());
                 file.setContractId(dto.getContractId());
                 file.setMasterId(dto.getDataId());
+                file.setTaskId(dto.getTaskId());
             }
             attachmentFormServiceTask.saveOrUpdateBatch(fileList);
             return R.success("操作成功");
@@ -1276,7 +1240,7 @@ public class TaskController extends BladeController {
             /*当前审批轮次*/
             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));
-            boolean isCurrentUserLastApprove = checkTheTaskPersonSort(task, taskParallels);
+            boolean isCurrentUserLastApprove = checkTheTaskPersonSort(taskParallels);
 
             /*单条业务数据状态*/
             updateCopyDataStatus(task, dto);
@@ -1304,27 +1268,29 @@ public class TaskController extends BladeController {
         return R.fail("操作失败");
     }
 
-    private boolean checkTheTaskPersonSort(Task task, List<TaskParallel> taskParallels) {
+    private boolean checkTheTaskPersonSort(List<TaskParallel> taskParallels) {
+        //未完成审批人信息
         List<String> name = new ArrayList<>();
-        boolean previousUsersApproved = true;
-        boolean isCurrentUserLastApprover = true;
+        //是否为最后一个审批人
+        boolean isCurrentUserLastApprover = false;
+
         for (TaskParallel parallel : taskParallels) {
-            //判断是否有人未审批
-            if (parallel.getStatus() != 2) {
-                previousUsersApproved = false;
-                name.add(parallel.getTaskUserName());
-                break;
-            }
-            //判断是否是当前用户之前的用户
             if (parallel.getTaskUser().equals(SecureUtil.getUserId().toString())) {
-                isCurrentUserLastApprover = false; //当前用户不是最后一个审批人
                 break;
             }
+            if (parallel.getStatus() != 2) {
+                name.add(parallel.getTaskUserName());
+            }
         }
-        if (!previousUsersApproved) {
+        if (name.size() > 0) {
             throw new ServiceException("当前任务还有【" + StringUtils.join(name, "、") + "】未完成审批,请您稍后再试");
         }
 
+        TaskParallel taskParallel = taskParallels.get(taskParallels.size() - 1);
+        if (taskParallel.getTaskUser().equals(SecureUtil.getUserId().toString())) {
+            isCurrentUserLastApprover = true;
+        }
+
         return isCurrentUserLastApprover;
     }
 
@@ -1337,11 +1303,13 @@ public class TaskController extends BladeController {
                     .isNull(MiddleMeterApplyTask::getStatus) //表示用户未选择,那么默认同意
             );
             List<Long> ids = middleMeterApplyTasks.stream().map(MiddleMeterApplyTask::getId).collect(Collectors.toList());
-            UpdateWrapper<MiddleMeterApplyTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.in("id", ids);
-            MiddleMeterApplyTask updateEntity = new MiddleMeterApplyTask();
-            updateEntity.setStatus(1);
-            middleMeterApplyServiceTask.update(updateEntity, updateWrapper);
+            if (ids.size() > 0) {
+                UpdateWrapper<MiddleMeterApplyTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.in("id", ids);
+                MiddleMeterApplyTask updateEntity = new MiddleMeterApplyTask();
+                updateEntity.setStatus(1);
+                middleMeterApplyServiceTask.update(updateEntity, updateWrapper);
+            }
 
         } else if (task.getMeterTaskType().equals(2)) {
             List<MaterialMeterFormTask> materialMeterFormTasks = materialMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<MaterialMeterFormTask>lambdaQuery()
@@ -1350,12 +1318,13 @@ public class TaskController extends BladeController {
                     .isNull(MaterialMeterFormTask::getStatus) //表示用户未选择,那么默认同意
             );
             List<Long> ids = materialMeterFormTasks.stream().map(MaterialMeterFormTask::getId).collect(Collectors.toList());
-            UpdateWrapper<MaterialMeterFormTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.in("id", ids);
-            MaterialMeterFormTask updateEntity = new MaterialMeterFormTask();
-            updateEntity.setStatus(1);
-            materialMeterFormServiceTask.update(updateEntity, updateWrapper);
-
+            if (ids.size() > 0) {
+                UpdateWrapper<MaterialMeterFormTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.in("id", ids);
+                MaterialMeterFormTask updateEntity = new MaterialMeterFormTask();
+                updateEntity.setStatus(1);
+                materialMeterFormServiceTask.update(updateEntity, updateWrapper);
+            }
         } else if (task.getMeterTaskType().equals(3)) {
             List<StartPayMeterFormTask> startPayMeterFormTasks = startPayMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<StartPayMeterFormTask>lambdaQuery()
                     .eq(StartPayMeterFormTask::getMeterPeriodId, formDataId)
@@ -1363,12 +1332,13 @@ public class TaskController extends BladeController {
                     .isNull(StartPayMeterFormTask::getStatus) //表示用户未选择,那么默认同意
             );
             List<Long> ids = startPayMeterFormTasks.stream().map(StartPayMeterFormTask::getId).collect(Collectors.toList());
-            UpdateWrapper<StartPayMeterFormTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.in("id", ids);
-            StartPayMeterFormTask updateEntity = new StartPayMeterFormTask();
-            updateEntity.setStatus(1);
-            startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
-
+            if (ids.size() > 0) {
+                UpdateWrapper<StartPayMeterFormTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.in("id", ids);
+                StartPayMeterFormTask updateEntity = new StartPayMeterFormTask();
+                updateEntity.setStatus(1);
+                startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
+            }
         } else if (task.getMeterTaskType().equals(4)) {
             //TODO 变更令
         }
@@ -1382,22 +1352,26 @@ public class TaskController extends BladeController {
                     .eq(MiddleMeterApplyTask::getTaskId, dto.getTaskId())
             );
             List<Long> middleMeterApplyTasksIds = middleMeterApplyTasks.stream().map(MiddleMeterApplyTask::getId).collect(Collectors.toList());
-            UpdateWrapper<MiddleMeterApplyTask> updateWrapper_1 = new UpdateWrapper<>();
-            updateWrapper_1.in("id", middleMeterApplyTasksIds);
-            MiddleMeterApplyTask updateEntity_1 = new MiddleMeterApplyTask();
-            updateEntity_1.setApproveStatus(2);
-            middleMeterApplyServiceTask.update(updateEntity_1, updateWrapper_1);
+            if (middleMeterApplyTasksIds.size() > 0) {
+                UpdateWrapper<MiddleMeterApplyTask> updateWrapper_1 = new UpdateWrapper<>();
+                updateWrapper_1.in("id", middleMeterApplyTasksIds);
+                MiddleMeterApplyTask updateEntity_1 = new MiddleMeterApplyTask();
+                updateEntity_1.setApproveStatus(2);
+                middleMeterApplyServiceTask.update(updateEntity_1, updateWrapper_1);
+            }
 
             List<InventoryFormApplyTask> inventoryFormAppliesTasks = inventoryFormApplyServiceTask.getBaseMapper().selectList(Wrappers.<InventoryFormApplyTask>lambdaQuery()
                     .eq(InventoryFormApplyTask::getContractPeriodId, formDataId)
                     .eq(InventoryFormApplyTask::getTaskId, dto.getTaskId())
             );
             List<Long> inventoryFormAppliesTasksIds = inventoryFormAppliesTasks.stream().map(InventoryFormApplyTask::getId).collect(Collectors.toList());
-            UpdateWrapper<InventoryFormApplyTask> updateWrapper_2 = new UpdateWrapper<>();
-            updateWrapper_2.in("id", inventoryFormAppliesTasksIds);
-            InventoryFormApplyTask updateEntity_2 = new InventoryFormApplyTask();
-            updateEntity_2.setApproveStatus(2);
-            inventoryFormApplyServiceTask.update(updateEntity_2, updateWrapper_2);
+            if (inventoryFormAppliesTasksIds.size() > 0) {
+                UpdateWrapper<InventoryFormApplyTask> updateWrapper_2 = new UpdateWrapper<>();
+                updateWrapper_2.in("id", inventoryFormAppliesTasksIds);
+                InventoryFormApplyTask updateEntity_2 = new InventoryFormApplyTask();
+                updateEntity_2.setApproveStatus(2);
+                inventoryFormApplyServiceTask.update(updateEntity_2, updateWrapper_2);
+            }
 
         } else if (task.getMeterTaskType().equals(2)) {
             List<MaterialMeterFormTask> materialMeterFormTasks = materialMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<MaterialMeterFormTask>lambdaQuery()
@@ -1405,24 +1379,26 @@ public class TaskController extends BladeController {
                     .eq(MaterialMeterFormTask::getTaskId, dto.getTaskId())
             );
             List<Long> ids = materialMeterFormTasks.stream().map(MaterialMeterFormTask::getId).collect(Collectors.toList());
-            UpdateWrapper<MaterialMeterFormTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.in("id", ids);
-            MaterialMeterFormTask updateEntity = new MaterialMeterFormTask();
-            updateEntity.setApproveStatus(2);
-            materialMeterFormServiceTask.update(updateEntity, updateWrapper);
-
+            if (ids.size() > 0) {
+                UpdateWrapper<MaterialMeterFormTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.in("id", ids);
+                MaterialMeterFormTask updateEntity = new MaterialMeterFormTask();
+                updateEntity.setApproveStatus(2);
+                materialMeterFormServiceTask.update(updateEntity, updateWrapper);
+            }
         } else if (task.getMeterTaskType().equals(3)) {
             List<StartPayMeterFormTask> startPayMeterFormTasks = startPayMeterFormServiceTask.getBaseMapper().selectList(Wrappers.<StartPayMeterFormTask>lambdaQuery()
                     .eq(StartPayMeterFormTask::getMeterPeriodId, formDataId)
                     .eq(StartPayMeterFormTask::getTaskId, dto.getTaskId())
             );
             List<Long> ids = startPayMeterFormTasks.stream().map(StartPayMeterFormTask::getId).collect(Collectors.toList());
-            UpdateWrapper<StartPayMeterFormTask> updateWrapper = new UpdateWrapper<>();
-            updateWrapper.in("id", ids);
-            StartPayMeterFormTask updateEntity = new StartPayMeterFormTask();
-            updateEntity.setApproveStatus(2);
-            startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
-
+            if (ids.size() > 0) {
+                UpdateWrapper<StartPayMeterFormTask> updateWrapper = new UpdateWrapper<>();
+                updateWrapper.in("id", ids);
+                StartPayMeterFormTask updateEntity = new StartPayMeterFormTask();
+                updateEntity.setApproveStatus(2);
+                startPayMeterFormServiceTask.update(updateEntity, updateWrapper);
+            }
         } else if (task.getMeterTaskType().equals(4)) {
             //TODO 变更令
         }
@@ -1437,7 +1413,12 @@ public class TaskController extends BladeController {
     private void updateTaskParallelStatus(Task task) {
         TaskParallel taskParallelOne = jdbcTemplate.query("SELECT * FROM u_task_parallel WHERE process_instance_id = '" + task.getProcessInstanceId() + "' AND task_user = " + SecureUtil.getUserId(), new BeanPropertyRowMapper<>(TaskParallel.class)).stream().findAny().orElse(null);
         if (taskParallelOne != null && taskParallelOne.getStatus().equals(1)) {
-            jdbcTemplate.execute("UPDATE u_task_parallel SET status = 2 WHERE id = " + taskParallelOne.getId());
+            String sql = "UPDATE u_task_parallel SET status = ? ,update_time = ? WHERE id = ?";
+            Object[] param = {
+                    2,
+                    new java.sql.Timestamp(System.currentTimeMillis()),
+                    taskParallelOne.getId()};
+            jdbcTemplate.update(sql, param);
         }
     }
 

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

@@ -55,6 +55,8 @@ public interface MiddleMeterApplyMapper extends BaseMapper<MiddleMeterApply> {
 
     List<MeterInventoryVO> getForm(@Param("id") Long id,@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
 
+    List<MeterInventoryVO> getFormCopy(@Param("id") Long id,@Param("contractId") Long contractId,@Param("nodeId") Long nodeId);
+
     ChangeTokenForm getTokenById(@Param("id") Long id);
 
     String getContractInfo(@Param("contractId") Long contractId);

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

@@ -113,7 +113,7 @@
         from s_middle_meter_apply where id = #{id}
     </select>
     <select id="getForm" resultType="org.springblade.meter.vo.MeterInventoryVO">
-        select ifa.contract_form_id as id,ifa.form_number,ifa.form_name,ifa.current_price,ifa.build_picture_total as resolveTotal,
+        select ifa.id as taskDetailId,ifa.contract_form_id as id,ifa.form_number,ifa.form_name,ifa.current_price,ifa.build_picture_total as resolveTotal,
                ifa.change_build_picture_total as changeTotal,
                ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
                ifa.current_meter_money as currentMeterMoney,
@@ -125,6 +125,21 @@
         where ifa.contract_id = #{contractId} and ifa.is_deleted = 0
         AND ifa.middle_meter_id = #{id}
     </select>
+
+    <select id="getFormCopy" resultType="org.springblade.meter.vo.MeterInventoryVO">
+        select ifa.id as taskDetailId,ifa.contract_form_id as id,ifa.form_number,ifa.form_name,ifa.current_price,ifa.build_picture_total as resolveTotal,
+               ifa.change_build_picture_total as changeTotal,
+               ifa.current_meter_total as currentMeterTotal,0 as containChangeTotal,
+               ifa.current_meter_money as currentMeterMoney,
+               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
+                                                                                      and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id and id != ifa.id),0)) as otherMeterTotal,
+               (IFNULL((select sum(current_meter_total) from s_inventory_form_apply where is_deleted = 0
+                                                                                      and contract_meter_id = #{nodeId} and contract_form_id = ifa.contract_form_id),0)) as allMeterTotal
+        from s_inventory_form_apply_task ifa
+        where ifa.contract_id = #{contractId} and ifa.is_deleted = 0
+          AND ifa.middle_meter_id = #{id}
+    </select>
+
     <select id="getTokenById" resultType="org.springblade.meter.entity.ChangeTokenForm">
         select *
         from s_change_token_form where id = #{id}