自动任务
This commit is contained in:
		| @@ -6,18 +6,24 @@ import com.mt.wms.core.api.Assert; | ||||
| import com.mt.wms.core.base.BaseService; | ||||
| import com.mt.wms.core.dal.entity.AutoExeTask; | ||||
| import com.mt.wms.core.dal.entity.AutoExeTaskHis; | ||||
| import com.mt.wms.core.dal.entity.CurrTask; | ||||
| import com.mt.wms.core.dal.service.AutoExeTaskHisServiceBiz; | ||||
| import com.mt.wms.core.dal.service.AutoExeTaskServiceBiz; | ||||
| import com.mt.wms.core.dal.service.CurrTaskServiceBiz; | ||||
| import com.mt.wms.core.errorcode.ApiErrorCode; | ||||
| import com.mt.wms.core.params.IdParam; | ||||
| import com.mt.wms.core.vo.IdVo; | ||||
| import com.mt.wms.core.vo.PageVo; | ||||
| import com.mt.wms.core.vo.R; | ||||
| import com.mt.wms.empty.controller.ApmsController; | ||||
| import com.mt.wms.empty.params.AutoTaskParam; | ||||
| import com.mt.wms.empty.params.AutoTaskQueryParam; | ||||
| import com.mt.wms.empty.service.AutoTaskService; | ||||
| import com.mt.wms.empty.vo.ApmsEndProcessVo; | ||||
| import com.mt.wms.empty.vo.AutoTaskVo; | ||||
| import org.apache.commons.lang.StringUtils; | ||||
| import org.slf4j.Logger; | ||||
| import org.slf4j.LoggerFactory; | ||||
| import org.springframework.beans.BeanUtils; | ||||
| import org.springframework.stereotype.Service; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
| @@ -33,10 +39,16 @@ import java.util.List; | ||||
| @Service | ||||
| @Transactional | ||||
| public class AutoTaskServiceImpl extends BaseService implements AutoTaskService { | ||||
|  | ||||
|     private final static Logger logger = LoggerFactory.getLogger(AutoTaskServiceImpl.class); | ||||
|     @Resource | ||||
|     private AutoExeTaskServiceBiz autoExeTaskServiceBiz; | ||||
|     @Resource | ||||
|     private AutoExeTaskHisServiceBiz autoExeTaskHisServiceBiz; | ||||
|     @Resource | ||||
|     private CurrTaskServiceBiz currTaskServiceBiz; | ||||
|     @Resource | ||||
|     private ApmsController apmsController; | ||||
|     @Override | ||||
|     public R<AutoTaskVo> get(IdParam idParam) { | ||||
|         Assert.notNull(ApiErrorCode.INVALID_PARAMETER,idParam.getId()); | ||||
| @@ -55,12 +67,14 @@ public class AutoTaskServiceImpl extends BaseService implements AutoTaskService | ||||
|     public R<PageVo<AutoTaskVo>> page(AutoTaskQueryParam autoTaskQueryParam) { | ||||
|         QueryWrapper<AutoExeTask> wrapper=new QueryWrapper<>(); | ||||
|         wrapper.eq((autoTaskQueryParam.getStatus()!=null&&("").equals(autoTaskQueryParam.getStatus())),AutoExeTask.STATUS,autoTaskQueryParam.getStatus()); | ||||
|         wrapper.in(AutoExeTask.STATUS,0,1); | ||||
|         Page<AutoExeTask> page = autoExeTaskServiceBiz.page(new Page<>(autoTaskQueryParam.getCurrent(), autoTaskQueryParam.getSize()), wrapper); | ||||
|         return successful(new PageVo<>(page,AutoTaskVo.class)); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public R<IdVo> stop(IdParam idParam) { | ||||
|  | ||||
|         AutoExeTask autoExeTask = autoExeTaskServiceBiz.getById(idParam.getId()); | ||||
|         //状态置为终止 | ||||
|         autoExeTask.setStatus(3); | ||||
| @@ -71,7 +85,19 @@ public class AutoTaskServiceImpl extends BaseService implements AutoTaskService | ||||
|         autoExeTaskHisServiceBiz.save(autoExeTaskHis); | ||||
|         //释放后续步骤 | ||||
|         // TODO: 2022/3/3 | ||||
|             //删除对应的几条currtask(未执行的),通知apms生产单作废 | ||||
|             List<CurrTask> currTaskList = currTaskServiceBiz.list(new QueryWrapper<CurrTask>() | ||||
|                     .eq(CurrTask.AUTO_EXE_TASK_ID, autoExeTask.getId()).eq(CurrTask.STATUS,0)); | ||||
|             for (CurrTask currTask:currTaskList | ||||
|                  ) { | ||||
|                 R<ApmsEndProcessVo> apmsEndProcessVoR = apmsController.deleteBySheetNo(currTask.getSheetNo()); | ||||
|                 if (!apmsEndProcessVoR.getData().getSuccess()){ | ||||
|                     logger.info("Apms作废生产单接口错误"); | ||||
|                     return R.failed("Apms作废生产单接口错误"); | ||||
|                 } | ||||
|                 currTaskServiceBiz.removeById(currTask); | ||||
|             } | ||||
|         autoExeTaskServiceBiz.removeById(autoExeTask); | ||||
|         return null; | ||||
|         return successful(IdVo.builder().id(idParam.getId()).build()); | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -73,7 +73,7 @@ public class AsynRunTaskService extends BaseService { | ||||
|             otherNowPoint=1; | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             while (conflictBoolean){ | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
| @@ -87,6 +87,8 @@ public class AsynRunTaskService extends BaseService { | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         }else { | ||||
| @@ -94,7 +96,7 @@ public class AsynRunTaskService extends BaseService { | ||||
|             otherNowPoint=2; | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             while (conflictBoolean){ | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
| @@ -107,6 +109,8 @@ public class AsynRunTaskService extends BaseService { | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| @@ -182,16 +186,55 @@ public class AsynRunTaskService extends BaseService { | ||||
|         if (vehicleId==1){ | ||||
|             // TODO: 2022/2/26 获取RGV2当前位置 | ||||
|             otherNowPoint=1; | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 //type=1为 入 | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 39); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv2/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         }else { | ||||
|             //获取RGV1当前位置 | ||||
|             otherNowPoint=2; | ||||
|         } | ||||
|             //两辆小车是否冲突 | ||||
|         Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), currTask.getTargetPosition(), otherNowPoint); | ||||
|         while (conflictBoolean){ | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 1); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv1/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| /*        //两辆小车是否冲突 | ||||
|         Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, location.getCode(), currTask.getTargetPosition(), otherNowPoint); | ||||
|         if (conflictBoolean){ | ||||
|             //若冲突 | ||||
|             // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|         }*/ | ||||
|  | ||||
|         //新建一条执行任务的关系表存放任务执行信息 | ||||
|         RunTask runTask=new RunTask(); | ||||
| @@ -208,9 +251,33 @@ public class AsynRunTaskService extends BaseService { | ||||
|         inStockInfo.setStatus(1); | ||||
|         inStockInfoServiceBiz.updateById(inStockInfo); | ||||
|         // TODO: 2021/12/14  调用车辆填入起终点,得到车辆执行结果 | ||||
|  | ||||
|         Long startPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getStartPosition())).getCode(); | ||||
|         Long endPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getEndPosition())).getCode(); | ||||
|         Map<String, Object> json = new HashMap(); | ||||
|         // taskType 1 搬运 | ||||
|         json.put("taskType", 1); | ||||
|         json.put("sendRow", endPoint); | ||||
|         json.put("pickRow",startPoint); | ||||
|         json.put("taskNo",currTaskId); | ||||
|         json.put("ideNumber",1); | ||||
|         json.put("processNumber",currTask.getPlcValue()); | ||||
|         String taskJson = JSON.toJSONString(json); | ||||
|         String result =null; | ||||
|         try { | ||||
|             if (vehicleId==1){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv1/sendTask", taskJson); | ||||
|             } | ||||
|             if (vehicleId==2){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv2/sendTask", taskJson); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|         } | ||||
|         JSONObject jsonObject = JSON.parseObject(result); | ||||
|         int status = Integer.parseInt(String.valueOf(jsonObject.get("msg"))); | ||||
|         //执行成功,托盘进炉 | ||||
|         if (true){ | ||||
|         if (status==1){ | ||||
|             //更新调度表状态为完成 | ||||
|             runTask.setUpdateTime(LocalDateTime.now()); | ||||
|             runTask.setEndTime(LocalDateTime.now()); | ||||
| @@ -246,15 +313,48 @@ public class AsynRunTaskService extends BaseService { | ||||
|         if (vehicleId==1){ | ||||
|             // TODO: 2022/2/26 获取RGV2当前位置 | ||||
|             otherNowPoint=1; | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 //type=1为 入 | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 39); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv2/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         }else { | ||||
|             //获取RGV1当前位置 | ||||
|             otherNowPoint=2; | ||||
|         } | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|         while (conflictBoolean){ | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 1); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv1/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         PointInfo pointOfLocation = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, location.getCode())); | ||||
|         //新建一条执行任务的关系表存放任务执行信息,终点为缓存区空闲库位 | ||||
| @@ -282,8 +382,32 @@ public class AsynRunTaskService extends BaseService { | ||||
|         setCommonField(inStockInfo); | ||||
|         inStockInfoServiceBiz.save(inStockInfo); | ||||
|         // TODO: 2021/12/14  调用车辆填入起终点,得到车辆执行结果,填入任务号(待确认) | ||||
|  | ||||
|         if (true){ | ||||
|         Long startPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getStartPosition())).getCode(); | ||||
|         Long endPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getEndPosition())).getCode(); | ||||
|         Map<String, Object> json = new HashMap(); | ||||
|         // taskType 1 搬运 | ||||
|         json.put("taskType", 1); | ||||
|         json.put("sendRow", endPoint); | ||||
|         json.put("pickRow",startPoint); | ||||
|         json.put("taskNo",currTaskId); | ||||
|         json.put("ideNumber",1); | ||||
|         json.put("processNumber",currTask.getPlcValue()); | ||||
|         String taskJson = JSON.toJSONString(json); | ||||
|         String result =null; | ||||
|         try { | ||||
|             if (vehicleId==1){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv1/sendTask", taskJson); | ||||
|             } | ||||
|             if (vehicleId==2){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv2/sendTask", taskJson); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|         } | ||||
|         JSONObject jsonObject = JSON.parseObject(result); | ||||
|         int status = Integer.parseInt(String.valueOf(jsonObject.get("msg"))); | ||||
|         if (status==1){ | ||||
|             //更新关系表状态为完成 | ||||
|             runTask.setUpdateTime(LocalDateTime.now()); | ||||
|             runTask.setStatus(2); | ||||
| @@ -317,15 +441,48 @@ public class AsynRunTaskService extends BaseService { | ||||
|         if (vehicleId==1){ | ||||
|             // TODO: 2022/2/26 获取RGV2当前位置 | ||||
|             otherNowPoint=1; | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 //type=1为 入 | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 39); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv2/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         }else { | ||||
|             //获取RGV1当前位置 | ||||
|             otherNowPoint=2; | ||||
|         } | ||||
|             //两辆小车是否冲突 | ||||
|             Boolean conflictBoolean = taskDistanceUtils.conflictForVehicle(vehicleId, currTask.getStartPosition(), currTask.getTargetPosition(), otherNowPoint); | ||||
|         while (conflictBoolean){ | ||||
|             if (conflictBoolean){ | ||||
|                 //若冲突 | ||||
|                 // TODO: 2022/2/26  执行小车移位任务。移位任务完成后再判断是否冲突,移位任务可以直接让小车移位到两端 | ||||
|                 Map<String, Integer> json = new HashMap(); | ||||
|                 // taskType 4 单移动 | ||||
|                 json.put("taskType", 4); | ||||
|                 json.put("sendRow", 1); | ||||
|                 String taskJson = JSON.toJSONString(json); | ||||
|                 try { | ||||
|                     HttpClient.httpPost("http://localhost:8009/rgv1/sendTask",taskJson); | ||||
|                 } catch (IOException e) { | ||||
|                     e.printStackTrace(); | ||||
|                     logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|                     //wocket推送到页面 | ||||
|                     return; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         // TODO: 2021/12/28 location排序 | ||||
|         Location location = locationServiceBiz.list(new QueryWrapper<Location>() | ||||
| @@ -366,7 +523,32 @@ public class AsynRunTaskService extends BaseService { | ||||
|         setCommonField(inStockInfo); | ||||
|         inStockInfoServiceBiz.save(inStockInfo); | ||||
|         // TODO: 2021/12/14  调用车辆填入起终点,得到车辆执行结果,填入任务号(待确认) | ||||
|         if (true){ | ||||
|         Long startPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getStartPosition())).getCode(); | ||||
|         Long endPoint = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.NOTE, runTask.getEndPosition())).getCode(); | ||||
|         Map<String, Object> json = new HashMap(); | ||||
|         // taskType 1 搬运 | ||||
|         json.put("taskType", 1); | ||||
|         json.put("sendRow", endPoint); | ||||
|         json.put("pickRow",startPoint); | ||||
|         json.put("taskNo",currTaskId); | ||||
|         json.put("ideNumber",1); | ||||
|         json.put("processNumber",currTask.getPlcValue()); | ||||
|         String taskJson = JSON.toJSONString(json); | ||||
|         String result =null; | ||||
|         try { | ||||
|             if (vehicleId==1){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv1/sendTask", taskJson); | ||||
|             } | ||||
|             if (vehicleId==2){ | ||||
|                 result = HttpClient.httpPost("http://localhost:8009/rgv2/sendTask", taskJson); | ||||
|             } | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             logger.error(new Date() + "WCS接口超时未响应!"); | ||||
|         } | ||||
|         JSONObject jsonObject = JSON.parseObject(result); | ||||
|         int status = Integer.parseInt(String.valueOf(jsonObject.get("msg"))); | ||||
|         if (status==1){ | ||||
|             //更新关系表状态为完成 | ||||
|             runTask.setUpdateTime(LocalDateTime.now()); | ||||
|             runTask.setStatus(2); | ||||
| @@ -394,9 +576,14 @@ public class AsynRunTaskService extends BaseService { | ||||
|     } | ||||
|     //出库。起点为缓存区库位,终点为提升台 | ||||
|     @Async("asyncServiceExecutor") | ||||
|     public void asynRunOutStock(Long runTaskId,Long locationId){ | ||||
|         //修改调度任务状态 | ||||
|         RunTask runTask = runTaskServiceBiz.getById(runTaskId); | ||||
|     public void asynRunOutStock(Long locationId){ | ||||
|         RunTask runTask=new RunTask(); | ||||
|         setCommonField(runTask); | ||||
|         //runTask.setVehicleId(vehicleId); | ||||
|         runTask.setBeginTime(LocalDateTime.now()); | ||||
|         //runTask.setStartPosition(currTask.getOutStartPosition()); | ||||
|         //runTask.setEndPosition(currTask.getOutTargetPosition()); | ||||
|         runTaskServiceBiz.save(runTask); | ||||
|         //修改缓存区状态 | ||||
|         InStockInfo inStockInfo = inStockInfoServiceBiz.getOne(new QueryWrapper<InStockInfo>() | ||||
|                 .eq("location_id", locationId)); | ||||
|   | ||||
| @@ -51,6 +51,8 @@ public class RunTaskUtils { | ||||
|     private AutoExeTaskServiceBiz autoExeTaskServiceBiz; | ||||
|     @Resource | ||||
|     private KilnInfoServiceBiz kilnInfoServiceBiz; | ||||
|     @Resource | ||||
|     private PlcNameSpaceServiceBiz plcNameSpaceServiceBiz; | ||||
|  | ||||
|     /** | ||||
|      * 进炉加工 | ||||
| @@ -58,7 +60,7 @@ public class RunTaskUtils { | ||||
|      * @return | ||||
|      * @throws InterruptedException | ||||
|      */ | ||||
|     public R runTaskForInKiln(Long currTaskId) throws InterruptedException       { | ||||
|     public R runTaskForInKiln(Long currTaskId) throws InterruptedException{ | ||||
|         CurrTask currTask = currTaskServiceBiz.getById(currTaskId); | ||||
|         //起点,起点和终点是液压台code、窑炉code、缓存区code | ||||
|         String startPosition = currTask.getStartPosition(); | ||||
| @@ -90,15 +92,19 @@ public class RunTaskUtils { | ||||
|             //有小车在运行,提示当前有车辆在运行,请稍后 | ||||
|             return R.failed("当前轨道有RGV车辆在运动,请等待当前RGV车辆执行完毕再执行任务!"); | ||||
|         } | ||||
|         // TODO: 2022/2/27  传入任务id,起始点,若终点是窑炉,获取窑炉状态 | ||||
|         int kilnStatus = 1; | ||||
|  | ||||
|         // TODO: 2022/2/27  传入任务id,起始点,若终点是窑炉,获取窑炉状态,能放两坨货的窑炉怎么判定状态? | ||||
|         KilnInfo kilnInfo = kilnInfoServiceBiz.getById(currTask.getKilnId()); | ||||
|         String kilnNamePlace = plcNameSpaceServiceBiz.getOne(new QueryWrapper<PlcNameSpace>() | ||||
|                 .eq(PlcNameSpace.EQ_TYPE, 0) | ||||
|                 .eq(PlcNameSpace.EQ_ID, kilnInfo.getId())).getName(); | ||||
|         String result = readPlcToString(kilnNamePlace, "AllowIn"); | ||||
|         Boolean resultBoolean = Boolean.valueOf(JSONObject.parseObject(result).get("result").toString()); | ||||
|         //窑炉状态为不可用 | ||||
|         if (kilnStatus == 0) { | ||||
|         if (kilnInfo.getStatus() == 1) { | ||||
|             return R.failed("目标窑炉不可用!"); | ||||
|         } | ||||
|         //窑炉可用未满 | ||||
|         if (kilnStatus==1){ | ||||
|         if (resultBoolean){ | ||||
|             //计算出路径最短的车辆id | ||||
|             Long vehicleId = taskDistanceUtils.chooseVehicle(currTask.getStartPosition(), currTask.getTargetPosition()); | ||||
|             //占用车辆 | ||||
| @@ -115,7 +121,7 @@ public class RunTaskUtils { | ||||
|             return R.ok("操作成功,任务已开始执行。"); | ||||
|         } | ||||
|         //窑炉已满 | ||||
|         if (kilnStatus==2){ | ||||
|         if (resultBoolean){ | ||||
|             //查询缓存区库位是否已满 | ||||
|             int count = locationServiceBiz.count(new QueryWrapper<Location>() | ||||
|                     .eq(Location.STATUS, 0) | ||||
| @@ -249,4 +255,26 @@ public class RunTaskUtils { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取变量值 | ||||
|      * @param nameSpace nameSpace前缀 | ||||
|      * @param variableName 变量名称 | ||||
|      * @return result字符串 | ||||
|      */ | ||||
|     private String readPlcToString(String nameSpace, String variableName){ | ||||
|         String identifier=nameSpace.concat(variableName); | ||||
|         Map<String, Object> json = new HashMap(); | ||||
|         json.put("nameSpace", 6); | ||||
|         json.put("plcName", "plc1"); | ||||
|         json.put("identifier",identifier); | ||||
|         String result = null; | ||||
|         try { | ||||
|             result = HttpClient.httpPost("http://localhost:8009/opcua/read", JSON.toJSONString(json)); | ||||
|         } catch (IOException e) { | ||||
|             e.printStackTrace(); | ||||
|             logger.info("readPLC: "+identifier+" 的值失败"); | ||||
|         } | ||||
|         return result; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -89,9 +89,19 @@ public class TaskDistanceUtils { | ||||
|         //小车当前位置、起点、终点,找出最大最小值 | ||||
|         int min=(((nowPoint<start)?nowPoint:start)<end)?((nowPoint<start)?nowPoint:start):end; | ||||
|         int max=(((nowPoint>start)?nowPoint:start)>end)?((nowPoint>start)?nowPoint:start):end; | ||||
|         //另一辆小车在在小车路径上比如冲突,不在小车路径上时判定一下安全距离(4米) | ||||
|         if (otherNowPoint>=min&&otherNowPoint<=max){ | ||||
|             return true; | ||||
|         }else { | ||||
|             Double maxDistance = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.CODE, max)).getDistance(); | ||||
|             Double minDistance = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.CODE, min)).getDistance(); | ||||
|             Double otherVehicleDistance = pointInfoServiceBiz.getOne(new QueryWrapper<PointInfo>().eq(PointInfo.CODE, otherNowPoint)).getDistance(); | ||||
|             if (Math.abs(otherVehicleDistance-maxDistance)<4){ | ||||
|                 return true; | ||||
|             } | ||||
|             if (Math.abs(otherVehicleDistance-minDistance)<4){ | ||||
|                 return true; | ||||
|             } | ||||
|             return false; | ||||
|         } | ||||
|     } | ||||
|   | ||||
| @@ -56,6 +56,12 @@ public class CurrTaskMainQueryVo extends BaseVo implements PageVo.ConvertVo { | ||||
|      */ | ||||
|     @ApiModelProperty("任务类型") | ||||
|     private Integer taskType; | ||||
|  | ||||
|     /** | ||||
|      * 是否自动执行:	0手动,1自动,如果是自动任务这里要监控进出和到缓存区的调度任务 | ||||
|      */ | ||||
|     @ApiModelProperty("是否自动执行:手动,1自动") | ||||
|     private Integer is_auto; | ||||
|     /** | ||||
|      * 开始位置 | ||||
|      */ | ||||
|   | ||||
		Verwijs in nieuw issue
	
	Block a user