From fb98cd280dd1158e542cc8b94003612700ae4ea4 Mon Sep 17 00:00:00 2001
From: zhou zhou <3272660260@qq.com>
Date: 星期三, 11 三月 2026 14:04:18 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/devlop-phyz' into devlop-phyz

---
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/FlowStepInstanceServiceImpl.java |   76 +++++++++++++++++++++++++++++++++-----
 1 files changed, 66 insertions(+), 10 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/FlowStepInstanceServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/FlowStepInstanceServiceImpl.java
index e8c182e..0d51b93 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/FlowStepInstanceServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/FlowStepInstanceServiceImpl.java
@@ -1,5 +1,8 @@
 package com.vincent.rsf.server.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.vincent.rsf.server.manager.entity.Task;
+import com.vincent.rsf.server.manager.service.TaskService;
 import com.vincent.rsf.server.system.entity.FlowInstance;
 import com.vincent.rsf.server.system.mapper.FlowStepInstanceMapper;
 import com.vincent.rsf.server.system.entity.FlowStepInstance;
@@ -10,26 +13,79 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
 @Service("flowStepInstanceService")
 public class FlowStepInstanceServiceImpl extends ServiceImpl<FlowStepInstanceMapper, FlowStepInstance> implements FlowStepInstanceService {
 
+    @Autowired
+    private TaskService taskService;
     @Autowired
     private FlowInstanceService flowInstanceService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean jumpCurrent(Long id) {
-        FlowStepInstance flowStepInstance = getById(id);
-        if (flowStepInstance == null || flowStepInstance.getFlowInstanceId() == null) {
-            return false;
+        try{
+            FlowStepInstance flowStepInstance = getById(id);
+            if (flowStepInstance == null || flowStepInstance.getFlowInstanceId() == null) return false;
+            Date now = new Date();
+            String taskNo = flowStepInstance.getTaskNo();
+            Task one = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, taskNo));
+            FlowInstance flowInstance = flowInstanceService.getById(flowStepInstance.getFlowInstanceId());
+            List<String> flowInstanceNoList = new ArrayList<>();
+            List<FlowInstance> flowInstanceList = flowInstanceService.list(new LambdaQueryWrapper<FlowInstance>().eq(FlowInstance::getTaskId, flowInstance.getTaskId()));
+            flowInstanceList.forEach(flowInstance1 -> flowInstanceNoList.add(flowInstance1.getFlowInstanceNo()));
+            FlowStepInstance flowStepInstanceNow = getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                    .eq(FlowStepInstance::getWmsNowTaskStatus, one.getTaskStatus())
+                    .eq(FlowStepInstance::getTaskNo, taskNo)
+                    .in(FlowStepInstance::getFlowInstanceNo, flowInstanceNoList)
+                    .ge(FlowStepInstance::getStatus, (short) 1)
+                    .ne(FlowStepInstance::getStatus, (short) 3).last("limit 1"));
+            if (flowStepInstanceNow == null) return false;
+            int stepOrderDifference = flowStepInstanceNow.getStepOrder() - flowStepInstance.getStepOrder();
+            if (stepOrderDifference>0) {//鍥為��
+                for (int i = 1; i <= stepOrderDifference; i++) {
+                    FlowStepInstance flowStepInstanceUpdate = getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                            .eq(FlowStepInstance::getTaskNo, taskNo)
+                            .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder()+i)
+                            .in(FlowStepInstance::getFlowInstanceNo, flowInstanceNoList)
+                            .last("limit 1"));
+                    if (flowStepInstanceUpdate==null) return false;
+                    flowStepInstanceUpdate.setStatus((short)0);
+                    flowStepInstanceUpdate.setErrorMessage(flowStepInstanceUpdate.getErrorMessage()+now+"浜哄伐璋冩暣;");
+                    flowStepInstanceUpdate.setErrorCode(now.toString());
+                    flowStepInstanceUpdate.setUpdateTime(now);
+                    updateById(flowStepInstanceUpdate);
+                }
+            } else if (stepOrderDifference<0) {//璺宠浆
+                for (int i = 1; i <= -stepOrderDifference; i++) {
+                    FlowStepInstance flowStepInstanceUpdate = getOne(new LambdaQueryWrapper<FlowStepInstance>()
+                            .eq(FlowStepInstance::getTaskNo, taskNo)
+                            .eq(FlowStepInstance::getStepOrder, flowStepInstance.getStepOrder()-i)
+                            .in(FlowStepInstance::getFlowInstanceNo, flowInstanceNoList)
+                            .last("limit 1"));
+                    if (flowStepInstanceUpdate==null) return false;
+                    flowStepInstanceUpdate.setStatus((short)3);
+                    flowStepInstanceUpdate.setErrorMessage(flowStepInstanceUpdate.getErrorMessage()+now+"浜哄伐璋冩暣;");
+                    flowStepInstanceUpdate.setErrorCode(now.toString());
+                    flowStepInstanceUpdate.setUpdateTime(now);
+                    updateById(flowStepInstanceUpdate);
+                }
+            }
+            flowStepInstance.setErrorMessage(flowStepInstance.getErrorMessage()+now+"浜哄伐璋冩暣;");
+            flowStepInstance.setErrorCode(now.toString());
+            flowStepInstance.setUpdateTime(now);
+            flowStepInstance.setStatus((short)1);
+            updateById(flowStepInstance);
+            one.setTaskStatus(flowStepInstance.getWmsNowTaskStatus());
+            taskService.updateById(one);
+        } catch (Exception e) {
+            throw new RuntimeException("浜哄伐璋冩暣鍑洪敊锛�" + e);
         }
-
-        FlowInstance flowInstance = new FlowInstance();
-        flowInstance.setId(flowStepInstance.getFlowInstanceId());
-        flowInstance.setCurrentStepCode(flowStepInstance.getStepCode());
-        flowInstance.setCurrentStepOrder(flowStepInstance.getStepOrder());
-        flowInstance.setUpdateTime(new java.util.Date());
-        return flowInstanceService.updateById(flowInstance);
+        return true;
     }
 
 }

--
Gitblit v1.9.1