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.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/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("任务生成成功"); } }