| | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.framework.common.SnowflakeIdWorker; |
| | | import com.zy.acs.manager.common.config.UplinkProperties; |
| | | import com.zy.acs.manager.common.domain.TaskDto; |
| | | import com.zy.acs.manager.common.exception.BusinessException; |
| | | import com.zy.acs.manager.manager.entity.Code; |
| | |
| | | import com.zy.acs.manager.manager.entity.Sta; |
| | | import com.zy.acs.manager.manager.entity.Task; |
| | | import com.zy.acs.manager.manager.enums.TaskTypeType; |
| | | import com.zy.acs.manager.manager.enums.TaskUplinkStateType; |
| | | import com.zy.acs.manager.manager.service.CodeService; |
| | | import com.zy.acs.manager.manager.service.LocService; |
| | | import com.zy.acs.manager.manager.service.StaService; |
| | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.Optional; |
| | | |
| | | /** |
| | | * Created by vincent on 2023/6/14 |
| | |
| | | private MapService mapService; |
| | | @Autowired |
| | | private SnowflakeIdWorker snowflakeIdWorker; |
| | | @Autowired |
| | | private UplinkProperties uplinkProperties; |
| | | |
| | | public List<Task> validBusDto(List<TaskDto> taskDtoList) { |
| | | public List<Task> validTaskDtoList(List<TaskDto> taskDtoList) { |
| | | List<Task> taskList = new ArrayList<>(); |
| | | String uplinkSts = uplinkProperties.getEnabled() ? TaskUplinkStateType.PENDING.toString() : TaskUplinkStateType.SKIPPED.toString(); |
| | | for (TaskDto taskDto : taskDtoList) { |
| | | if (Cools.isEmpty(taskDto.getSeqNum())) { |
| | | throw new BusinessException("seqNum不能为空"); |
| | | if (Cools.isEmpty(taskDto.getTaskNo())) { |
| | | throw new BusinessException("Task seqNum can't be empty!"); |
| | | } |
| | | taskDto.setPriority(Optional.ofNullable(taskDto.getPriority()).orElse(1)); |
| | | Task task = new Task(); |
| | | taskList.add(task); |
| | | task.setUuid(String.valueOf(snowflakeIdWorker.nextId()).substring(3)); |
| | | task.setSeqNum(taskDto.getSeqNum()); |
| | | task.setSeqNum(taskDto.getTaskNo()); |
| | | task.setPriority(taskDto.getPriority()); |
| | | |
| | | // ori -------------------------- |
| | | if (!Cools.isEmpty(taskDto.getOriLoc())) { |
| | | Loc oriLoc = locService.selecatByLocNo(taskDto.getOriLoc()); |
| | | Loc oriLoc = locService.selectByLocNo(taskDto.getOriLoc()); |
| | | if (null == oriLoc) { |
| | | throw new BusinessException("oriLoc: " + taskDto.getOriLoc() + "不存在"); |
| | | throw new BusinessException("oriLoc: " + taskDto.getOriLoc() + " doesn't exist!"); |
| | | } |
| | | task.setOriLoc(oriLoc.getId()); |
| | | // task.setOriCode(oriLoc.getCode()); |
| | | } |
| | | if (!Cools.isEmpty(taskDto.getOriSta())) { |
| | | Sta oriSta = staService.selectByStaNo(taskDto.getOriSta()); |
| | | if (null == oriSta) { |
| | | throw new BusinessException("oriSta: " + taskDto.getOriSta() + "不存在"); |
| | | throw new BusinessException("oriSta: " + taskDto.getOriSta() + " doesn't exist!"); |
| | | } |
| | | task.setOriSta(oriSta.getId()); |
| | | // task.setOriCode(oriSta.getCode()); |
| | | } |
| | | // dest -------------------------- |
| | | if (!Cools.isEmpty(taskDto.getDestLoc())) { |
| | | Loc destLoc = locService.selecatByLocNo(taskDto.getDestLoc()); |
| | | Loc destLoc = locService.selectByLocNo(taskDto.getDestLoc()); |
| | | if (null == destLoc) { |
| | | throw new BusinessException("destLoc: " + taskDto.getDestLoc() + "不存在"); |
| | | throw new BusinessException("destLoc: " + taskDto.getDestLoc() + " doesn't exist!"); |
| | | } |
| | | task.setDestLoc(destLoc.getId()); |
| | | task.setDestCode(destLoc.getCode()); |
| | |
| | | if (!Cools.isEmpty(taskDto.getDestSta())) { |
| | | Sta destSta = staService.selectByStaNo(taskDto.getDestSta()); |
| | | if (null == destSta) { |
| | | throw new BusinessException("destSta: " + taskDto.getDestSta() + "不存在"); |
| | | throw new BusinessException("destSta: " + taskDto.getDestSta() + " doesn't exist!"); |
| | | } |
| | | task.setDestSta(destSta.getId()); |
| | | task.setDestCode(destSta.getCode()); |
| | |
| | | |
| | | // task-type ---------------------------------- |
| | | if (null == task.getOriLoc() && null == task.getOriSta()) { |
| | | throw new BusinessException(task.getSeqNum() + " 错误,oriLoc和oriSta必须存在一项"); |
| | | throw new BusinessException("seNum:" + task.getSeqNum() + " is wrong,there must be at least one of oriLoc and oriSta"); |
| | | } |
| | | if (null != task.getOriLoc() && null != task.getOriSta()) { |
| | | throw new BusinessException(task.getSeqNum() + " 错误,oriLoc和oriSta只能存在一项"); |
| | | throw new BusinessException("seNum:" + task.getSeqNum() + " is wrong,there must be at least one of oriLoc and oriSta"); |
| | | } |
| | | if (null == task.getDestLoc() && null == task.getDestSta()) { |
| | | throw new BusinessException(task.getSeqNum() + " 错误,destLoc和destSta必须存在一项"); |
| | | throw new BusinessException("seNum:" + task.getSeqNum() + " is wrong,either destLoc and destSta must be present"); |
| | | } |
| | | if (null != task.getDestLoc() && null != task.getDestSta()) { |
| | | throw new BusinessException(task.getSeqNum() + " 错误,destLoc和destSta只能存在一项"); |
| | | throw new BusinessException("seNum:" + task.getSeqNum() + " is wrong,either destLoc and destSta must be present"); |
| | | } |
| | | if (null != task.getOriSta()) { |
| | | if (null != task.getDestLoc()) { |
| | |
| | | oriLoc = locService.getById(task.getOriLoc()); |
| | | destLoc = locService.getById(task.getDestLoc()); |
| | | |
| | | startCode = codeService.getById(oriLoc.getCode()); |
| | | endCode = codeService.getById(destLoc.getCode()); |
| | | startCode = codeService.getCacheById(oriLoc.getCode()); |
| | | endCode = codeService.getCacheById(destLoc.getCode()); |
| | | if (null == startCode) { |
| | | throw new BusinessException("oriLoc:" + oriLoc.getLocNo() + " 未绑定地面码"); |
| | | throw new BusinessException("oriLoc:" + oriLoc.getLocNo() + " hasn't been bound to a QrCode yet"); |
| | | } |
| | | if (null == endCode) { |
| | | throw new BusinessException("destLoc:" + destLoc.getLocNo() + " 未绑定地面码"); |
| | | throw new BusinessException("destLoc:" + destLoc.getLocNo() + " is not bound to a QrCode yet"); |
| | | } |
| | | pathList = mapService.validFeasibility(startCode, endCode); |
| | | if (Cools.isEmpty(pathList)) { |
| | | throw new BusinessException(task.getSeqNum() + "任务错误,oriLoc:" + task.getOriLoc() + "无法行走至 destLoc" + task.getDestLoc()); |
| | | throw new BusinessException("seqNum:" + task.getSeqNum() + " is wrong,oriLoc:" + task.getOriLoc() + " is unable to reach destLoc" + task.getDestLoc()); |
| | | } |
| | | task.setPhase(JSON.toJSONString(pathList)); |
| | | task.setUplinkSts(uplinkSts); |
| | | break; |
| | | case LOC_TO_STA: |
| | | oriLoc = locService.getById(task.getOriLoc()); |
| | | destSta = staService.getById(task.getDestSta()); |
| | | |
| | | startCode = codeService.getById(oriLoc.getCode()); |
| | | endCode = codeService.getById(destSta.getCode()); |
| | | startCode = codeService.getCacheById(oriLoc.getCode()); |
| | | endCode = codeService.getCacheById(destSta.getCode()); |
| | | if (null == startCode) { |
| | | throw new BusinessException("oriLoc:" + oriLoc.getLocNo() + " 未绑定地面码"); |
| | | throw new BusinessException("oriLoc:" + oriLoc.getLocNo() + " hasn't been bound to QrCode yet"); |
| | | } |
| | | if (null == endCode) { |
| | | throw new BusinessException("destSta:" + destSta.getStaNo() + " 未绑定地面码"); |
| | | throw new BusinessException("destSta:" + destSta.getStaNo() + " is not bound to QrCode yet"); |
| | | } |
| | | pathList = mapService.validFeasibility(startCode, endCode); |
| | | if (Cools.isEmpty(pathList)) { |
| | | throw new BusinessException(task.getSeqNum() + "任务错误,oriLoc:" + task.getOriLoc() + "无法行走至 destSta" + task.getDestSta()); |
| | | throw new BusinessException("seqNum:" + task.getSeqNum() + " is wrong,oriLoc:" + task.getOriLoc() + " can't move to destSta" + task.getDestSta()); |
| | | } |
| | | task.setPhase(JSON.toJSONString(pathList)); |
| | | task.setUplinkSts(uplinkSts); |
| | | break; |
| | | case STA_TO_LOC: |
| | | oriSta = staService.getById(task.getOriSta()); |
| | | destLoc = locService.getById(task.getDestLoc()); |
| | | |
| | | startCode = codeService.getById(oriSta.getCode()); |
| | | endCode = codeService.getById(destLoc.getCode()); |
| | | startCode = codeService.getCacheById(oriSta.getCode()); |
| | | endCode = codeService.getCacheById(destLoc.getCode()); |
| | | if (null == startCode) { |
| | | throw new BusinessException("oriSta:" + oriSta.getStaNo() + " 未绑定地面码"); |
| | | throw new BusinessException("oriSta:" + oriSta.getStaNo() + " hasn't bound to QrCode yet"); |
| | | } |
| | | if (null == endCode) { |
| | | throw new BusinessException("destLoc:" + destLoc.getLocNo() + " 未绑定地面码"); |
| | | throw new BusinessException("destLoc:" + destLoc.getLocNo() + " is not bound to QrCode yet"); |
| | | } |
| | | pathList = mapService.validFeasibility(startCode, endCode); |
| | | if (Cools.isEmpty(pathList)) { |
| | | throw new BusinessException(task.getSeqNum() + "任务错误,oriSta:" + task.getOriSta() + "无法行走至 destLoc" + task.getDestLoc()); |
| | | throw new BusinessException("seqNum:" + task.getSeqNum() + " is wrong,oriSta:" + task.getOriSta() + " is unable to react destLoc" + task.getDestLoc()); |
| | | } |
| | | task.setPhase(JSON.toJSONString(pathList)); |
| | | task.setUplinkSts(uplinkSts); |
| | | break; |
| | | case STA_TO_STA: |
| | | oriSta = staService.getById(task.getOriSta()); |
| | | destSta = staService.getById(task.getDestSta()); |
| | | |
| | | startCode = codeService.getById(oriSta.getCode()); |
| | | endCode = codeService.getById(destSta.getCode()); |
| | | startCode = codeService.getCacheById(oriSta.getCode()); |
| | | endCode = codeService.getCacheById(destSta.getCode()); |
| | | if (null == startCode) { |
| | | throw new BusinessException("oriSta:" + oriSta.getStaNo() + " 未绑定地面码"); |
| | | throw new BusinessException("oriSta:" + oriSta.getStaNo() + " hasn't been bound to a QrCode yet"); |
| | | } |
| | | if (null == endCode) { |
| | | throw new BusinessException("destSta:" + destSta.getStaNo() + " 未绑定地面码"); |
| | | throw new BusinessException("destSta:" + destSta.getStaNo() + " is not bound to a QrCode yet"); |
| | | } |
| | | pathList = mapService.validFeasibility(startCode, endCode); |
| | | if (Cools.isEmpty(pathList)) { |
| | | throw new BusinessException(task.getSeqNum() + "任务错误,oriSta:" + task.getOriSta() + "无法行走至 destSta" + task.getDestSta()); |
| | | throw new BusinessException("seqNum:" + task.getSeqNum() + " is wrong,oriSta:" + task.getOriSta() + " can't move to destSta" + task.getDestSta()); |
| | | } |
| | | task.setPhase(JSON.toJSONString(pathList)); |
| | | task.setUplinkSts(uplinkSts); |
| | | break; |
| | | default: |
| | | throw new BusinessException(task.getSeqNum() + "任务类型错误"); |
| | | throw new BusinessException("seqNum:" + task.getSeqNum() + " is wrong, cause this type not exist"); |
| | | } |
| | | |
| | | } |