|  |  |  | 
|---|
|  |  |  | import com.zy.acs.framework.common.SnowflakeIdWorker; | 
|---|
|  |  |  | import com.zy.acs.framework.exception.CoolException; | 
|---|
|  |  |  | import com.zy.acs.manager.common.exception.BusinessException; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.entity.FuncSta; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.entity.Loc; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.entity.Sta; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.entity.Task; | 
|---|
|  |  |  | import com.zy.acs.manager.core.domain.Lane; | 
|---|
|  |  |  | import com.zy.acs.manager.core.service.LaneService; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.entity.*; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.enums.*; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.mapper.TaskMapper; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.service.CodeService; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.service.FuncStaService; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.service.LocService; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.service.TaskService; | 
|---|
|  |  |  | import com.zy.acs.manager.manager.service.*; | 
|---|
|  |  |  | import lombok.extern.slf4j.Slf4j; | 
|---|
|  |  |  | import org.springframework.beans.factory.annotation.Autowired; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  | 
|---|
|  |  |  | public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements TaskService { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private BusService busService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private CodeService codeService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private LocService locService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private StaService staService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private FuncStaService funcStaService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private SnowflakeIdWorker snowflakeIdWorker; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private LaneService laneService; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public synchronized String generateSeqNum() { | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!this.updateById(task)) { | 
|---|
|  |  |  | throw new CoolException(BaseRes.ERROR); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | busService.checkoutComplete(task.getBusId()); | 
|---|
|  |  |  | return Boolean.TRUE; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (!this.updateById(task)) { | 
|---|
|  |  |  | throw new CoolException(BaseRes.ERROR); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | busService.checkoutComplete(task.getBusId()); | 
|---|
|  |  |  | return Boolean.TRUE; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public Lane checkoutOriginLane(Task task) { | 
|---|
|  |  |  | Long codeId = null; | 
|---|
|  |  |  | TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); | 
|---|
|  |  |  | switch (Objects.requireNonNull(typeType)) { | 
|---|
|  |  |  | case LOC_TO_LOC: | 
|---|
|  |  |  | case LOC_TO_STA: | 
|---|
|  |  |  | codeId = locService.getById(task.getOriLoc()).getCode(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case STA_TO_LOC: | 
|---|
|  |  |  | case STA_TO_STA: | 
|---|
|  |  |  | codeId = staService.getById(task.getOriSta()).getCode(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (null == codeId) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return laneService.search(codeService.getCacheById(codeId).getData()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public Lane checkoutDestinationLane(Task task) { | 
|---|
|  |  |  | Long codeId = null; | 
|---|
|  |  |  | TaskTypeType typeType = TaskTypeType.get(task.getTaskTypeEl()); | 
|---|
|  |  |  | switch (Objects.requireNonNull(typeType)) { | 
|---|
|  |  |  | case LOC_TO_LOC: | 
|---|
|  |  |  | case STA_TO_LOC: | 
|---|
|  |  |  | codeId = locService.getById(task.getDestLoc()).getCode(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case LOC_TO_STA: | 
|---|
|  |  |  | case STA_TO_STA: | 
|---|
|  |  |  | codeId = staService.getById(task.getDestSta()).getCode(); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (null == codeId) { | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return laneService.search(codeService.getCacheById(codeId).getData()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<Task> findRunningTasksByLaneHash(String laneHash) { | 
|---|
|  |  |  | if (Cools.isEmpty(laneHash)) { | 
|---|
|  |  |  | return new ArrayList<>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return this.list(new LambdaQueryWrapper<Task>() | 
|---|
|  |  |  | .in(Task::getTaskSts, TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()) | 
|---|
|  |  |  | .and(i -> { | 
|---|
|  |  |  | i.eq(Task::getOriLaneHash, laneHash).or().eq(Task::getDestLaneHash, laneHash); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<Task> findTransportTasksByAgv(Long agvId) { | 
|---|
|  |  |  | if (null == agvId) { | 
|---|
|  |  |  | return new ArrayList<>(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<Task>().eq(Task::getAgvId, agvId); | 
|---|
|  |  |  | wrapper.in(Task::getTaskSts, TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()); | 
|---|
|  |  |  | wrapper.notIn(Task::getTaskType, TaskTypeType.MOVE.val(), TaskTypeType.TO_CHARGE.val(), TaskTypeType.TO_STANDBY.val()); | 
|---|
|  |  |  | return this.list(wrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public Integer findTransportTasksCountByAgv(Long agvId) { | 
|---|
|  |  |  | LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<Task>().eq(Task::getAgvId, agvId); | 
|---|
|  |  |  | wrapper.in(Task::getTaskSts, TaskStsType.WAITING.val(), TaskStsType.ASSIGN.val(), TaskStsType.PROGRESS.val()); | 
|---|
|  |  |  | wrapper.notIn(Task::getTaskType, TaskTypeType.MOVE.val(), TaskTypeType.TO_CHARGE.val(), TaskTypeType.TO_STANDBY.val()); | 
|---|
|  |  |  | return this.count(wrapper); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public Task findLatestTask(Long agvId, TaskStsType taskSts) { | 
|---|
|  |  |  | LambdaQueryWrapper<Task> wrapper = new LambdaQueryWrapper<Task>() | 
|---|
|  |  |  | .orderByDesc(Task::getCreateTime) | 
|---|
|  |  |  | .last("limit 0, 1"); | 
|---|
|  |  |  | if (null != agvId) { | 
|---|
|  |  |  | wrapper.eq(Task::getAgvId, agvId); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (null != taskSts) { | 
|---|
|  |  |  | wrapper.eq(Task::getTaskSts, taskSts.val()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return this.list(wrapper).stream().findFirst().orElse(null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Transactional | 
|---|
|  |  |  | public void maintainLocSts(Task task, Boolean complete) { | 
|---|
|  |  |  | Loc oriLoc = null; Loc destLoc = null; | 
|---|