package com.zy.asrs.controller;
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
import com.core.annotations.ManagerAuth;
|
import com.core.common.BaseRes;
|
import com.core.common.Cools;
|
import com.core.common.R;
|
import com.core.exception.CoolException;
|
import com.zy.asrs.domain.param.ShuttleOperatorParam;
|
import com.zy.asrs.domain.vo.*;
|
import com.zy.asrs.entity.BasShuttle;
|
import com.zy.asrs.entity.WrkMast;
|
import com.zy.asrs.service.BasShuttleService;
|
import com.zy.asrs.service.WrkMastService;
|
import com.zy.core.cache.MessageQueue;
|
import com.zy.core.cache.OutputQueue;
|
import com.zy.core.cache.SlaveConnection;
|
import com.zy.core.enums.*;
|
import com.zy.core.model.ShuttleSlave;
|
import com.zy.core.model.Task;
|
import com.zy.core.model.command.ShuttleAssignCommand;
|
import com.zy.core.model.command.ShuttleCommand;
|
import com.zy.core.model.protocol.ShuttleProtocol;
|
import com.zy.core.properties.SlaveProperties;
|
import com.zy.core.thread.ShuttleThread;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Random;
|
|
/**
|
* 四向穿梭车接口
|
*/
|
@Slf4j
|
@RestController
|
@RequestMapping("/shuttle")
|
public class ShuttleController {
|
|
@Autowired
|
private SlaveProperties slaveProperties;
|
@Autowired
|
private BasShuttleService basShuttleService;
|
@Autowired
|
private WrkMastService wrkMastService;
|
|
@PostMapping("/table/shuttle/state")
|
@ManagerAuth(memo = "四向穿梭车信息表")
|
public R steStateTable(){
|
List<ShuttleStateTableVo> list = new ArrayList<>();
|
List<BasShuttle> shuttles = basShuttleService.selectList(new EntityWrapper<BasShuttle>().orderBy("shuttle_no"));
|
for (BasShuttle basShuttle : shuttles) {
|
// 表格行
|
ShuttleStateTableVo vo = new ShuttleStateTableVo();
|
vo.setShuttleNo(basShuttle.getShuttleNo()); //四向穿梭车号
|
list.add(vo);
|
// 获取四向穿梭车信息
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, basShuttle.getShuttleNo());
|
if (shuttleThread == null) {
|
continue;
|
}
|
ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
|
if (shuttleProtocol == null || shuttleProtocol.getShuttleNo()==null) {
|
continue;
|
}
|
vo.setTaskNo(shuttleProtocol.getTaskNo().intValue()); // 任务号
|
vo.setBusyStatus(shuttleProtocol.getBusyStatusType().desc); //四向穿梭车状态
|
vo.setStatus(shuttleProtocol.getProtocolStatusType().desc);//当前任务状态
|
vo.setCurrentCode(shuttleProtocol.getCurrentCode());//当前二维码
|
vo.setBatteryPower(shuttleProtocol.getBatteryPower$() == null ? "" : shuttleProtocol.getBatteryPower$() + "%");//电池电量
|
vo.setBatteryTemp(shuttleProtocol.getBatteryTemp$() == null ? "" : shuttleProtocol.getBatteryTemp$() + "°");//电池温度
|
if (!Cools.isEmpty(shuttleProtocol.getErrorCode())) {
|
vo.setErrorCode(shuttleProtocol.getErrorCodeType().desc);//错误编号
|
}
|
vo.setPlcOutputStatusIO(shuttleProtocol.getPlcOutputStatusIO());//Plc输出状态IO
|
if (!Cools.isEmpty(shuttleProtocol.getStatusErrorCode())) {
|
vo.setStatusErrorCode(shuttleProtocol.getStatusErrorCode());//错误信息码
|
}
|
vo.setPlcInputStatus(shuttleProtocol.getPlcInputStatus());//PLC输入状态
|
vo.setCurrentOrBeforeCode(shuttleProtocol.getCurrentOrBeforeCode());//当前或者之前读到的二维码值
|
vo.setCodeOffsetX(shuttleProtocol.getCodeOffsetX());//读到的二维码X方向偏移量
|
vo.setCodeOffsetY(shuttleProtocol.getCodeOffsetY());//读到的二维码Y方向偏移量
|
vo.setCurrentVoltage(shuttleProtocol.getCurrentVoltage());//当前的电压值
|
vo.setCurrentAnalogValue(shuttleProtocol.getCurrentAnalogValue());//当前的模拟量值
|
vo.setCurrentLiftServoSpeed(shuttleProtocol.getCurrentLiftServoSpeed());//当前的升降伺服速度
|
vo.setCurrentMoveServoSpeed(shuttleProtocol.getCurrentMoveServoSpeed());//当前的行走伺服速度
|
vo.setCurrentLiftServoLoad(shuttleProtocol.getCurrentLiftServoLoad());//当前的升降伺服负载率
|
vo.setCurrentMoveServoLoad(shuttleProtocol.getCurrentMoveServoLoad());//当前的行走伺服负载率
|
}
|
return R.ok().add(list);
|
}
|
|
@PostMapping("/table/shuttle/msg")
|
@ManagerAuth(memo = "四向穿梭车数据表")
|
public R steMsgTable(){
|
List<ShuttleMsgTableVo> list = new ArrayList<>();
|
List<BasShuttle> shuttles = basShuttleService.selectList(new EntityWrapper<BasShuttle>().orderBy("shuttle_no"));
|
for (BasShuttle basShuttle : shuttles) {
|
// 表格行
|
ShuttleMsgTableVo vo = new ShuttleMsgTableVo();
|
vo.setShuttleNo(basShuttle.getShuttleNo()); // 四向穿梭车号
|
list.add(vo);
|
// 获取穿梭车信息
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, basShuttle.getShuttleNo());
|
if (shuttleThread == null) {
|
continue;
|
}
|
ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
|
if (shuttleProtocol == null) {
|
continue;
|
}
|
|
vo.setWorkNo(shuttleProtocol.getTaskNo().intValue());//任务号
|
if (shuttleProtocol.getTaskNo() > 0) {
|
WrkMast wrkMast = wrkMastService.selectById(shuttleProtocol.getTaskNo());
|
if (wrkMast != null) {
|
vo.setSourceLocNo(wrkMast.getSourceLocNo());//源库位
|
vo.setDistLocNo(wrkMast.getLocNo());//目标库位
|
}
|
}
|
if (shuttleProtocol.getProtocolStatusType() != null) {
|
vo.setStatus(shuttleProtocol.getProtocolStatusType().desc);//状态
|
}
|
vo.setCodeOffsetX(shuttleProtocol.getCodeOffsetX());//读到的二维码X方向偏移量
|
vo.setCodeOffsetY(shuttleProtocol.getCodeOffsetY());//读到的二维码Y方向偏移量
|
vo.setCurrentVoltage(shuttleProtocol.getCurrentVoltage());//当前的电压值
|
vo.setCurrentAnalogValue(shuttleProtocol.getCurrentAnalogValue());//当前的模拟量值
|
vo.setCurrentMoveServoSpeed(shuttleProtocol.getCurrentMoveServoSpeed());//当前的行走伺服速度
|
vo.setCurrentMoveServoLoad(shuttleProtocol.getCurrentMoveServoLoad() == null ? "" : shuttleProtocol.getCurrentMoveServoLoad() + "%");//当前的行走伺服负载率
|
vo.setCurrentLiftServoLoad(shuttleProtocol.getCurrentLiftServoLoad() == null ? "" : shuttleProtocol.getCurrentLiftServoLoad() + "%");//当前的升降伺服负载率
|
vo.setCurrentLiftServoSpeed(shuttleProtocol.getCurrentLiftServoSpeed());//当前的升降伺服速度
|
vo.setPakMk(shuttleProtocol.getPakMk()?"Y" : "N"); // 作业标记
|
}
|
return R.ok().add(list);
|
}
|
|
@PostMapping("/latest/data/shuttle")
|
@ManagerAuth(memo = "四向穿梭车实时数据")
|
public R shuttleLatestData(){
|
return R.ok();
|
}
|
|
@PostMapping("/output/shuttle")
|
@ManagerAuth
|
public R steOutput(){
|
StringBuilder str = new StringBuilder();
|
String s;
|
int i = 0;
|
while((s = OutputQueue.SHUTTLE.poll()) != null && i <=10) {
|
str.append("\n").append(s);
|
i++;
|
}
|
return R.ok().add(str.toString());
|
}
|
|
@GetMapping("/detl/{shuttleNo}")
|
public R steDetl(@PathVariable("shuttleNo") Integer shuttleNo){
|
ShuttleDataVo vo = new ShuttleDataVo();
|
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
|
if (shuttleNo.equals(shuttleSlave.getId())) {
|
vo.setShuttleNo(shuttleSlave.getId());
|
BasShuttle basShuttle = basShuttleService.selectById(shuttleSlave.getId());
|
if (!Cools.isEmpty(basShuttle)) {
|
vo.setWorkNo(basShuttle.getWrkNo());
|
vo.setPakMk(basShuttle.getPakMk());
|
}
|
break;
|
}
|
}
|
return R.ok().add(vo);
|
}
|
|
@GetMapping("/sensor/detl/{shuttleNo}")
|
public R shuttleSensorDetl(@PathVariable("shuttleNo") Integer shuttleNo){
|
ShuttleSensorDataVo vo = new ShuttleSensorDataVo();
|
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
|
if (shuttleNo.equals(shuttleSlave.getId())) {
|
vo.setShuttleNo(shuttleSlave.getId());
|
// 获取穿梭车信息
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
|
if (shuttleThread == null) {
|
return R.error("设备不在线");
|
}
|
ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
|
if (shuttleProtocol == null) {
|
return R.error("设备不在线");
|
}
|
|
// 穿梭车异常 -----------
|
|
// 穿梭车提示信息 ----------------------
|
|
// 状态信息 -------------
|
|
break;
|
}
|
}
|
return R.ok().add(vo);
|
}
|
|
@PostMapping("/detl/update")
|
@ManagerAuth
|
public R steUpdate(ShuttleDataVo vo){
|
BasShuttle basShuttle = basShuttleService.selectById(vo.getShuttleNo());
|
if (basShuttle == null) {
|
return R.error();
|
}
|
// 获取四向穿梭车信息
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, vo.getShuttleNo());
|
ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
|
if (shuttleProtocol == null) {
|
throw new CoolException(vo.getShuttleNo() + "号四向穿梭车不在线,无法保存");
|
}
|
// if (!Cools.isEmpty(vo.getRow(), vo.getBay(), vo.getLev())) {
|
// if (!shuttleThread.modifyPosHandle(vo.getRow(), vo.getBay(), vo.getLev())) {
|
// throw new CoolException("服务器错误");
|
// }
|
// }
|
ShuttleCommand shuttleCommand = new ShuttleCommand();
|
shuttleCommand.setTaskNo(vo.getWorkNo().shortValue());
|
if (MessageQueue.offer(SlaveType.Shuttle, vo.getShuttleNo(), new Task(2, shuttleCommand))) {
|
} else {
|
throw new CoolException("命令下发失败");
|
}
|
|
basShuttle.setPakMk(vo.getPakMk());
|
basShuttle.setWrkNo(vo.getWorkNo());
|
basShuttle.setUpdateTime(new Date());
|
if (!basShuttleService.updateById(basShuttle)) {
|
throw new CoolException("修改失败");
|
}
|
return R.ok();
|
}
|
|
/****************************************************************/
|
/************************** 手动操作 ******************************/
|
/****************************************************************/
|
|
@ManagerAuth(memo = "手动操作")
|
@PostMapping("/operator/shuttle")
|
public R shuttleOperator(ShuttleOperatorParam param){
|
if (Cools.isEmpty(param.getShuttleNo(), param.getShuttleTaskMode())) {
|
return R.parse(BaseRes.PARAM);
|
}
|
|
if (Cools.isEmpty(param.getSourceLocNo(), param.getDistLocNo())) {
|
return R.parse(BaseRes.PARAM);
|
}
|
|
for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
|
if (param.getShuttleNo().equals(shuttleSlave.getId())) {
|
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
|
if (shuttleThread == null) {
|
throw new CoolException("四向穿梭车不在线");
|
}
|
ShuttleProtocol shuttleProtocol = shuttleThread.getShuttleProtocol();
|
if (shuttleProtocol == null) {
|
throw new CoolException("四向穿梭车不在线");
|
}
|
|
ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode());
|
ShuttleAssignCommand command = new ShuttleAssignCommand();
|
command.setShuttleNo(shuttleSlave.getId().shortValue()); // 四向穿梭车编号
|
command.setTaskMode(shuttleTaskModeType.id.shortValue());
|
command.setSourceLocNo(param.getSourceLocNo());
|
command.setLocNo(param.getDistLocNo());
|
command.setTaskNo((short) 9999);
|
|
if (MessageQueue.offer(SlaveType.Shuttle, shuttleSlave.getId(), new Task(3, command))) {
|
return R.ok();
|
} else {
|
throw new CoolException("命令下发失败");
|
}
|
}
|
}
|
return R.error();
|
}
|
|
}
|