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> res = new ArrayList<>(); ConcurrentHashMap allRgvStatus = RgvStatusCache.getAllRgvStatus(); for (RgvProtocol rgvProtocol : allRgvStatus.values()){ Map 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> res = new ArrayList<>(); try{ RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); TaskProtocolCache taskProtocolCache = rgvThread.getTaskProtocolCache(); ConcurrentHashMap allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); for (TaskProtocol taskProtocol : allTaskProtocol.values()){ Map 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 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().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 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 allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); if (allTaskProtocol.size() > 0) { return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper().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 allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); if (allTaskProtocol.size() > 0) { return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPosition = basDevpPositionService.selectOne(new EntityWrapper().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 allTaskProtocol = taskProtocolCache.getAllTaskProtocol(); if (allTaskProtocol.size() > 0) { return R.error("存在执行中任务,请先处理!!!"); } BasDevpPosition basDevpPositionTake = basDevpPositionService.selectOne(new EntityWrapper().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().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 result = new ArrayList<>(); ConcurrentHashMap 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 result = new ArrayList<>(); ArrayList arrayList = new ArrayList() {{ 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(); } }