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 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().eq(Task::getTaskCode, taskNo)); //检测当前步骤 FlowStepInstance flowStepInstanceNow = getOne(new LambdaQueryWrapper() .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() .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() .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; } }