1
2 天以前 aaff1db4bcd0d2bb9664ae951ef4c04cf9d9dd46
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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;
import com.vincent.rsf.server.system.service.FlowInstanceService;
import com.vincent.rsf.server.system.service.FlowStepInstanceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
 
import java.util.Date;
 
@Service("flowStepInstanceService")
public class FlowStepInstanceServiceImpl extends ServiceImpl<FlowStepInstanceMapper, FlowStepInstance> implements FlowStepInstanceService {
 
    @Autowired
    private TaskService taskService;
 
    @Override
    @Transactional(rollbackFor = Exception.class)
    public boolean jumpCurrent(Long id) {
        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));
 
            //检测当前步骤
            FlowStepInstance flowStepInstanceNow = getOne(new LambdaQueryWrapper<FlowStepInstance>()
                    .eq(FlowStepInstance::getWmsNowTaskStatus, one.getTaskStatus())
                    .eq(FlowStepInstance::getTaskNo, taskNo)
                    .eq(FlowStepInstance::getFlowInstanceNo, flowStepInstance.getFlowInstanceNo())
                    .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)
                            .eq(FlowStepInstance::getFlowInstanceNo, flowStepInstance.getFlowInstanceNo())
                            .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)
                            .eq(FlowStepInstance::getFlowInstanceNo, flowStepInstance.getFlowInstanceNo())
                            .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());
//        flowInstanceService.updateById(flowInstance);
        return true;
    }
 
}