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.RgvCommandMoveParam; import com.zy.asrs.domain.param.RgvCommandTaskCompleteParam; import com.zy.asrs.domain.param.RgvCommandTransportParam; import com.zy.asrs.domain.vo.RgvStateTableVo; import com.zy.asrs.entity.BasRgv; import com.zy.asrs.entity.BasRgvErr; import com.zy.asrs.service.BasRgvService; import com.zy.asrs.service.BasRgvErrService; import com.zy.core.cache.MessageQueue; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.RgvModeType; import com.zy.core.enums.RgvStatusType; import com.zy.core.enums.SlaveType; import com.zy.core.model.Task; import com.zy.core.model.command.RgvCommand; import com.zy.core.model.protocol.RgvProtocol; import com.zy.core.thread.RgvThread; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; @Slf4j @RestController @RequestMapping("/rgv") public class RgvController { @Autowired private BasRgvService basRgvService; @Autowired private BasRgvErrService basRgvErrService; @PostMapping("/table/rgv/state") @ManagerAuth(memo = "RGV信息表") public R rgvStateTable() { List list = new ArrayList<>(); List rgvs = basRgvService.selectList(new EntityWrapper().orderBy("rgv_no")); for (BasRgv basRgv : rgvs) { RgvStateTableVo vo = new RgvStateTableVo(); vo.setRgvNo(basRgv.getRgvNo()); list.add(vo); RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, basRgv.getRgvNo()); if (rgvThread == null) { continue; } RgvProtocol rgvProtocol = rgvThread.getStatus(); if (rgvProtocol == null) { continue; } vo.setTaskNo(rgvProtocol.getTaskNo()); RgvModeType modeType = RgvModeType.get(rgvProtocol.getMode()); vo.setMode(modeType == null ? "" : modeType.desc); RgvStatusType statusType = RgvStatusType.get(rgvProtocol.getStatus() == null ? null : rgvProtocol.getStatus()); vo.setStatus(statusType == null ? "" : statusType.desc); vo.setLoading(rgvProtocol.getLoaded() != null && rgvProtocol.getLoaded() == 1 ? "有物" : "无物"); vo.setTrackSiteNo(String.valueOf(rgvProtocol.getRgvPos())); String deviceStatus = ""; if (modeType == RgvModeType.AUTO) { deviceStatus = "AUTO"; } if (rgvProtocol.getTaskNo() != null && rgvProtocol.getTaskNo() > 0) { deviceStatus = "WORKING"; } if(rgvProtocol.getAlarm() > 0) { deviceStatus = "ERROR"; } vo.setDeviceStatus(deviceStatus); vo.setWarnCode(String.valueOf(rgvProtocol.getAlarm())); if (rgvProtocol.getAlarm() != null && rgvProtocol.getAlarm() > 0) { BasRgvErr err = basRgvErrService.selectById(rgvProtocol.getAlarm()); vo.setAlarm(err == null ? "未知异常" : err.getErrName()); vo.setDeviceStatus("ERROR"); } } return R.ok().add(list); } @PostMapping("/output/site") @ManagerAuth(memo = "RGV报文日志输出") public R rgvOutput() { StringBuilder str = new StringBuilder(); String s; int i = 0; while ((s = OutputQueue.RGV.poll()) != null && i <= 10) { str.append("\n").append(s); i++; } return R.ok().add(str.toString()); } @PostMapping("/command/transport") public R rgvCommandTransport(@RequestBody RgvCommandTransportParam param) { if (Cools.isEmpty(param) || param.getRgvNo() == null || param.getTargetPos() == null) { return R.error("缺少参数"); } Integer rgvNo = param.getRgvNo(); Integer sourcePos = param.getSourcePos(); Integer targetPos = param.getTargetPos(); RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); if (rgvThread == null) { return R.error("线程不存在"); } RgvCommand command = rgvThread.getTransportCommand(9999, rgvNo, sourcePos, targetPos); MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command)); return R.ok(); } @PostMapping("/command/move") public R rgvCommandMove(@RequestBody RgvCommandMoveParam param) { if (Cools.isEmpty(param) || param.getRgvNo() == null || param.getTargetPos() == null) { return R.error("缺少参数"); } Integer rgvNo = param.getRgvNo(); Integer targetPos = param.getTargetPos(); RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); if (rgvThread == null) { return R.error("线程不存在"); } RgvCommand command = rgvThread.getMoveCommand(9999, rgvNo, targetPos); MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command)); return R.ok(); } @PostMapping("/command/taskComplete") public R rgvCommandTaskComplete(@RequestBody RgvCommandTaskCompleteParam param) { if (Cools.isEmpty(param) || param.getRgvNo() == null) { return R.error("缺少参数"); } Integer rgvNo = param.getRgvNo(); RgvThread rgvThread = (RgvThread) SlaveConnection.get(SlaveType.Rgv, rgvNo); if (rgvThread == null) { return R.error("线程不存在"); } RgvCommand command = rgvThread.getResetCommand(rgvNo); MessageQueue.offer(SlaveType.Rgv, rgvNo, new Task(2, command)); return R.ok(); } }