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<RgvStateTableVo> list = new ArrayList<>();
|
List<BasRgv> rgvs = basRgvService.selectList(new EntityWrapper<BasRgv>().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();
|
}
|
}
|