| package com.zy.asrs.controller; | 
|   | 
| import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
| import com.core.annotations.ManagerAuth; | 
| import com.core.common.Cools; | 
| import com.core.common.R; | 
| import com.zy.asrs.domain.param.RingThroughParam; | 
| import com.zy.asrs.entity.BasDevpPosition; | 
| import com.zy.asrs.service.BasDevpPositionService; | 
| import com.zy.core.cache.RgvErrCache; | 
| import com.zy.core.cache.RgvStatusCache; | 
| import com.zy.core.cache.SlaveConnection; | 
| import com.zy.core.cache.TaskProtocolCache; | 
| import com.zy.core.enums.SlaveType; | 
| import com.zy.core.model.protocol.RgvProtocol; | 
| import com.zy.core.model.protocol.TaskProtocol; | 
| import com.zy.core.thread.RgvThread; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.web.bind.annotation.*; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.HashMap; | 
| import java.util.List; | 
| import java.util.Map; | 
| import java.util.concurrent.ConcurrentHashMap; | 
|   | 
| /** | 
|  * 输送设备接口 | 
|  * Created by vincent on 2020-06-01 | 
|  */ | 
| @RestController | 
| @RequestMapping("/rgv") | 
| public class RgvController { | 
|   | 
|     @Autowired | 
|     private BasDevpPositionService basDevpPositionService; | 
|   | 
|     @GetMapping("/status/all") | 
|     @ManagerAuth(memo = "全部信息") | 
|     public R allStatus(){ | 
|         List<Map<String, Object>> res = new ArrayList<>(); | 
|         ConcurrentHashMap<Integer, RgvProtocol> allRgvStatus = RgvStatusCache.getAllRgvStatus(); | 
|         for (RgvProtocol rgvProtocol : allRgvStatus.values()){ | 
|             Map<String, Object> map2 = new HashMap<>(); | 
|             map2.put("rgvNo", rgvProtocol.getRgvNo()); | 
|             map2.put("taskNo", rgvProtocol.getTaskNo()); | 
|             map2.put("mode", rgvProtocol.getModeType().desc); | 
|             map2.put("status", rgvProtocol.getStatusType().desc); | 
|             map2.put("rgvPos", rgvProtocol.getRgvPos()); | 
|             map2.put("rgvPosDestination", rgvProtocol.getRgvPosDestination()); | 
|             map2.put("loaded", rgvProtocol.getLoaded().equals((short)-1)? "未知":rgvProtocol.getLoaded()==1? "有物":"无物"); | 
|             map2.put("errorRgv", RgvErrCache.getErrorDev(rgvProtocol.getRgvNo())); | 
|             res.add(map2); | 
|         } | 
|         return R.ok().add(res); | 
|     } | 
|   | 
|     @PostMapping("/task/cache/all") | 
|     @ManagerAuth(memo = "全部信息") | 
|     public R allTaskCache(@RequestParam(defaultValue = "0")  Integer rgvNo){ | 
|         List<Map<String, Object>> res = new ArrayList<>(); | 
|         try{ | 
|             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|             TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             for (TaskProtocol taskProtocol : allTaskProtocol.values()){ | 
|                 Map<String, Object> map2 = new HashMap<>(); | 
|                 map2.put("rgvNo", rgvNo); | 
|                 map2.put("taskNo", taskProtocol.getTaskNo()); | 
|                 map2.put("targetPosition", taskProtocol.getTargetPosition()); | 
|                 map2.put("isRunning", taskProtocol.getIsRunning()); | 
|                 map2.put("taskStatus", taskProtocol.getTaskStatus()); | 
|                 map2.put("direction", taskProtocol.isDirection()); | 
|                 res.add(map2); | 
|             } | 
|         } catch (Exception e){ | 
| //            return R.error("异常"+e.getMessage()); | 
|         } | 
|         return R.ok().add(res); | 
|     } | 
|   | 
|     @PostMapping("/run/del")//Take  Put  Walk | 
|     @ManagerAuth(memo = "清空任务") | 
|     public R rgvRunDel(@RequestParam(defaultValue = "0")  Integer rgvNo | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|   | 
|         try { | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             for (TaskProtocol taskProtocol : allTaskProtocol.values()){ | 
|                 taskProtocolCache.removeTaskProtocol(taskProtocol.getTaskNoDirection()); | 
|             } | 
|   | 
|         } catch (Exception e) { | 
|             return R.error("任务删除失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务清空成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/del2")//Take  Put  Walk | 
|     @ManagerAuth(memo = "清除作业启动中") | 
|     public R rgvRunDel2(@RequestParam(defaultValue = "0")  Integer rgvNo | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         try { | 
|             rgvThread.setWrkSign(); | 
|         } catch (Exception e) { | 
|             return R.error("清除作业启动中失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务清空成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/walk")//Take  Put  Walk | 
|     @ManagerAuth(memo = "小车行走") | 
|     public R rgvRunWalk(@RequestParam(defaultValue = "0")  Integer rgvNo, | 
|                             @RequestParam(defaultValue = "9999")  Integer taskNo, | 
|                             @RequestParam(defaultValue = "0")  Integer rgvStaNoPut, | 
|                             @RequestParam(defaultValue = "0")  Long rgvPosDestination | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         if ((rgvStaNoPut == null || rgvStaNoPut == 0) && (rgvPosDestination==null || rgvPosDestination==0L)){ | 
|             return R.error("目标站点请填写"); | 
|         } | 
|         if (rgvPosDestination == null || rgvPosDestination == 0){ | 
|             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); | 
|             if (Cools.isEmpty(basDevpPosition)){ | 
|                 return R.error("目标站点不存在"); | 
|             } | 
|             rgvPosDestination = basDevpPosition.getPlcPosition(); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|   | 
|         TaskProtocol issued = new TaskProtocol(); | 
|   | 
|         try { | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             if (allTaskProtocol.size() > 0) { | 
|                 return R.error("存在执行中任务,请先处理!!!"); | 
|             } | 
|   | 
|             //执行 | 
|             issued.setTaskNo(Long.valueOf(taskNo)); | 
|             issued.setTaskStatus(1); | 
|             issued.setTaskNoDirection(issued.gettaskNoDirection$(issued.getTaskNo(), issued.getTaskStatus())); | 
|             issued.setTargetPosition(rgvPosDestination); | 
|             issued.setIsRunning(1); | 
|             issued.setDirection(true); | 
|   | 
|             taskProtocolCache.updateTaskProtocol(issued); | 
|   | 
|         } catch (Exception e) { | 
|             return R.error("任务生成失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务生成成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/put")//Take  Put  Walk | 
|     @ManagerAuth(memo = "小车放货") | 
|     public R rgvPutWalk(@RequestParam(defaultValue = "0")  Integer rgvNo, | 
|                         @RequestParam(defaultValue = "9999")  Integer taskNo, | 
|                         @RequestParam(defaultValue = "0")  Integer rgvStaNoPut, | 
|                         @RequestParam(defaultValue = "0")  Long rgvPosDestination | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         if (rgvStaNoPut == null || rgvStaNoPut == 0){ | 
|             return R.error("目标站点请填写"); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|   | 
|         TaskProtocol issuedPut = new TaskProtocol(); | 
|   | 
|         try { | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             if (allTaskProtocol.size() > 0) { | 
|                 return R.error("存在执行中任务,请先处理!!!"); | 
|             } | 
|   | 
|             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); | 
|             if (Cools.isEmpty(basDevpPosition)){ | 
|                 return R.error("目标站点不存在"); | 
|             } | 
|             //执行 | 
|             issuedPut.setTaskNo(Long.valueOf(taskNo)); | 
|             issuedPut.setTaskStatus(3); | 
|             issuedPut.setTargetPositionStaNo(basDevpPosition.getDevNo()); | 
|             issuedPut.setTargetPositionStaNoPlcId(basDevpPosition.getPlcId()); | 
|             issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); | 
|             issuedPut.setTargetPosition(basDevpPosition.getPlcPosition()); | 
|             issuedPut.setIsRunning(1); | 
|             issuedPut.setDirection(basDevpPosition.getRgvSign()==1); | 
|   | 
|             taskProtocolCache.updateTaskProtocol(issuedPut); | 
|         } catch (Exception e) { | 
|             return R.error("任务生成失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务生成成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/take")//Take  Put  Walk | 
|     @ManagerAuth(memo = "小车取货") | 
|     public R rgvTakeWalk(@RequestParam(defaultValue = "0") Integer rgvNo, | 
|                         @RequestParam(defaultValue = "9999") Integer taskNo, | 
|                         @RequestParam(defaultValue = "0") Integer rgvStaNoTake, | 
|                         @RequestParam(defaultValue = "0") Long rgvPosDestination | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         if (rgvStaNoTake == null || rgvStaNoTake == 0){ | 
|             return R.error("取货站点请填写"); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|   | 
|         TaskProtocol issuedTake = new TaskProtocol(); | 
|         try { | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             if (allTaskProtocol.size() > 0) { | 
|                 return R.error("存在执行中任务,请先处理!!!"); | 
|             } | 
|   | 
|             BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake)); | 
|             if (Cools.isEmpty(basDevpPosition)){ | 
|                 return R.error("取货站点不存在"); | 
|             } | 
|             //执行 | 
|             issuedTake.setTaskNo(Long.valueOf(taskNo)); | 
|             issuedTake.setTaskStatus(2); | 
|             issuedTake.setTargetPositionStaNo(basDevpPosition.getDevNo()); | 
|             issuedTake.setTargetPositionStaNoPlcId(basDevpPosition.getPlcId()); | 
|             issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); | 
|             issuedTake.setTargetPosition(basDevpPosition.getPlcPosition()); | 
|             issuedTake.setIsRunning(1); | 
|             issuedTake.setDirection(basDevpPosition.getRgvSign()==1); | 
|   | 
|             taskProtocolCache.updateTaskProtocol(issuedTake); | 
|         } catch (Exception e) { | 
|             return R.error("任务生成失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务生成成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/TakeAndPut")//Take  Put  Walk | 
|     @ManagerAuth(memo = "小车取货") | 
|     public R rgvTakeAndPut(@RequestParam(defaultValue = "0") Integer rgvNo, | 
|                          @RequestParam(defaultValue = "9999") Integer taskNo, | 
|                          @RequestParam(defaultValue = "0") Integer rgvStaNoTake, | 
|                          @RequestParam(defaultValue = "0") Integer rgvStaNoPut, | 
|                          @RequestParam(defaultValue = "0") Long rgvPosDestination | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|         if (rgvStaNoTake == null || rgvStaNoTake == 0){ | 
|             return R.error("取货站点请填写"); | 
|         } | 
|         if (rgvStaNoPut == null || rgvStaNoPut == 0){ | 
|             return R.error("放货站点请填写"); | 
|         } | 
|         RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|         TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); | 
|   | 
|         TaskProtocol issuedTake = new TaskProtocol(); | 
|         TaskProtocol issuedPut = new TaskProtocol(); | 
|         try { | 
|             ConcurrentHashMap<String, TaskProtocol> allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); | 
|             if (allTaskProtocol.size() > 0) { | 
|                 return R.error("存在执行中任务,请先处理!!!"); | 
|             } | 
|   | 
|             BasDevpPosition basDevpPositionTake = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoTake)); | 
|             if (Cools.isEmpty(basDevpPositionTake)){ | 
|                 return R.error("取货站点不存在"); | 
|             } | 
|             //执行 | 
|             issuedTake.setTaskNo(Long.valueOf(taskNo)); | 
|             issuedTake.setTaskStatus(2); | 
|             issuedTake.setTargetPositionStaNo(basDevpPositionTake.getDevNo()); | 
|             issuedTake.setTargetPositionStaNoPlcId(basDevpPositionTake.getPlcId()); | 
|             issuedTake.setTaskNoDirection(issuedTake.gettaskNoDirection$(issuedTake.getTaskNo(), issuedTake.getTaskStatus())); | 
|             issuedTake.setTargetPosition(basDevpPositionTake.getPlcPosition()); | 
|             issuedTake.setIsRunning(1); | 
|             issuedTake.setDirection(basDevpPositionTake.getRgvSign()==1); | 
|   | 
|             BasDevpPosition basDevpPositionPut = basDevpPositionService.selectOne(new EntityWrapper<BasDevpPosition>().eq("DEV_NO", rgvStaNoPut)); | 
|             if (Cools.isEmpty(basDevpPositionPut)){ | 
|                 return R.error("目标站点不存在"); | 
|             } | 
|             //执行 | 
|             issuedPut.setTaskNo(Long.valueOf(taskNo)); | 
|             issuedPut.setTaskStatus(3); | 
|             issuedPut.setTargetPositionStaNo(basDevpPositionPut.getDevNo()); | 
|             issuedPut.setTargetPositionStaNoPlcId(basDevpPositionPut.getPlcId()); | 
|             issuedPut.setTaskNoDirection(issuedPut.gettaskNoDirection$(issuedPut.getTaskNo(), issuedPut.getTaskStatus())); | 
|             issuedPut.setTargetPosition(basDevpPositionPut.getPlcPosition()); | 
|             issuedPut.setIsRunning(1); | 
|             issuedPut.setDirection(basDevpPositionPut.getRgvSign()==1); | 
|   | 
|             taskProtocolCache.updateTaskProtocol(issuedTake); | 
|             taskProtocolCache.updateTaskProtocol(issuedPut); | 
|   | 
|         } catch (Exception e) { | 
|             return R.error("任务生成失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务生成成功"); | 
|     } | 
|   | 
|     @PostMapping("/run/delRgvTask")//Take  Put  Walk | 
|     @ManagerAuth(memo = "小车取货") | 
|     public R rgvDelRgvTask(@RequestParam(defaultValue = "0") Integer rgvNo | 
|     ) { | 
|         if (rgvNo==null || rgvNo==0){ | 
|             return R.error("请选择小车"); | 
|         } | 
|   | 
|         try { | 
|             RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); | 
|             rgvThread.setDelRgvTask(); | 
|         } catch (Exception e) { | 
|             return R.error("任务生成失败"+e.getMessage()); | 
|         } | 
|   | 
|         return R.ok("任务生成成功"); | 
|     } | 
|   | 
|   | 
|   | 
|     @PostMapping("/ring/through/rgv/position/data") | 
| //    @ManagerAuth(memo = "小车位置信息") | 
|     public R ringThroughRgv(){ | 
|         List<RingThroughParam> result = new ArrayList<>(); | 
|   | 
|         ConcurrentHashMap<Integer, RgvProtocol> allRgvStatus = RgvStatusCache.getAllRgvStatus(); | 
|         for (RgvProtocol rgvProtocol : allRgvStatus.values()){ | 
|             RingThroughParam ringThroughParam = new RingThroughParam(); | 
|   | 
|             ringThroughParam.setIndex(rgvProtocol.getRgvNo()); | 
| //            ringThroughParam.setIndex(i); | 
| //            double[] doubles = Utils.RingThroughXY2(perimeter, NumUtils.GetRandomIntInRange(183)); | 
| //            double[] doubles = Utils.RingThroughXYRgv(perimeter, perimeter-rgvProtocol.RgvPos.doubleValue()); | 
| //            double[] doubles = Utils.getRgvPosNew(perimeter, rgvProtocol.RgvPos.doubleValue()); | 
| //            double[] doubles = Utils.RingThroughXY2(183.0, 100*i ); | 
|   | 
|             ringThroughParam.setValueX(rgvProtocol.getRgvNo()*100*1D); | 
|             ringThroughParam.setValueY(rgvProtocol.getRgvNo()*100*2D); | 
|             ringThroughParam.setModeColor(rgvProtocol.modeType.color); | 
|             ringThroughParam.setStatusColor(rgvProtocol.statusType.color); | 
|             result.add(ringThroughParam); | 
|         } | 
|         return R.ok().add(result); | 
|     } | 
|   | 
|     @PostMapping("/ring/through/dev/position/data") | 
| //    @ManagerAuth(memo = "站点信息") | 
|     //  站点位置信息 | 
|     public R ringThroughDev(){ | 
|         List<RingThroughParam> result = new ArrayList<>(); | 
|         ArrayList<Integer> arrayList = new ArrayList<Integer>() {{ | 
|             add(1001); | 
|             add(1002); | 
|             add(1003); | 
|             add(1004); | 
|             add(1005); | 
|             add(1006); | 
|             add(1007); | 
|             add(1008); | 
|             add(1009); | 
|             add(1010); | 
|             add(1011); | 
|             add(1012); | 
|             add(1013); | 
|             add(1014); | 
|             add(1015); | 
|             add(1016); | 
|             add(1017); | 
|             add(1018); | 
|             add(1019); | 
|             add(1020); | 
|             add(1021); | 
|             add(1022); | 
|             add(1023); | 
|         }}; | 
|         for (Integer staNo : arrayList){ | 
|             RingThroughParam ringThroughParam = new RingThroughParam(); | 
|             ringThroughParam.setIndex(staNo); | 
| //            double[] doubles = Utils.RingThroughXYSta(perimeter, perimeter-basDevpPosition.getPlcPosition()); | 
| //            ringThroughParam.setValueX(doubles[0]>50? doubles[0]+6:doubles[0]-1); | 
| //            ringThroughParam.setValueY(doubles[1]>50? doubles[1]+6:doubles[1]-1); | 
| //            double[] doubles = Utils.getRgvPosNew(basDevpPosition.getDevNo(),perimeter, basDevpPosition.getPlcPosition()); | 
|             ringThroughParam.setValueX(staNo*100*1D); | 
|             ringThroughParam.setValueY(staNo*100*2D); | 
|             result.add(ringThroughParam); | 
|         } | 
|         return R.ok().add(result); | 
|     } | 
|   | 
|     @PostMapping("/ring/through/track/position/data") | 
| //    @ManagerAuth(memo = "轨道PLC状态信息") | 
|     public R wnergyGatheringRingParamTrack(){ | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping("/ring/through/task/wrk/mast/position/data") | 
| //    @ManagerAuth(memo = "作业信息") | 
|     public R ringThroughTaskWrkMast(){ | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping("/ring/through/task/wrk/mast/position/data/v1") | 
| //    @ManagerAuth(memo = "作业信息") | 
|     public R ringThroughTaskWrkMastV1(){ | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping("/task/rgv/circular/shuttle/mast/position/data") | 
| //    @ManagerAuth(memo = "作业信息") | 
|     public R rgvCircularShuttle(){ | 
|         return R.ok(); | 
|     } | 
|   | 
|     @PostMapping("/task/rgv/circular/shuttle/mast/position/data/v1") | 
| //    @ManagerAuth(memo = "作业信息") | 
|     public R rgvCircularShuttleV1(){ | 
|         return R.ok(); | 
|     } | 
| } |