package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.core.annotations.ManagerAuth; import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.domain.vo.*; import com.zy.asrs.entity.BasLift; import com.zy.asrs.service.BasLiftService; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.ForkLiftProtocolStatusType; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.model.ForkLiftSlave; import com.zy.core.model.command.*; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.ForkLiftThread; 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.List; /** * 提升机接口 */ @Slf4j @RestController @RequestMapping("/lift") public class ForkLiftController { @Autowired private SlaveProperties slaveProperties; @Autowired private BasLiftService basLiftService; @Autowired private RedisUtil redisUtil; @PostMapping("/table/lift/state") @ManagerAuth(memo = "提升机信息表") public R liftStateTable(){ List list = new ArrayList<>(); for (ForkLiftSlave slave : slaveProperties.getForkLift()) { // 表格行 LiftStateTableVo vo = new LiftStateTableVo(); vo.setLiftNo(slave.getId()); //提升机号 list.add(vo); // 获取提升机信息 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, slave.getId()); if (forkLiftThread == null) { vo.setProtocolStatus(ForkLiftProtocolStatusType.NONE.id);//离线 continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null || forkLiftProtocol.getLiftNo()==null) { continue; } vo.setTaskNo(forkLiftProtocol.getTaskNo().shortValue()); // 任务号 vo.setProtocolStatus(forkLiftProtocol.getProtocolStatusType().id); } return R.ok().add(list); } @PostMapping("/table/lift/msg") @ManagerAuth(memo = "提升机数据表") public R liftMsgTable(){ List list = new ArrayList<>(); for (ForkLiftSlave slave : slaveProperties.getForkLift()) { // 表格行 LiftMsgTableVo vo = new LiftMsgTableVo(); vo.setLiftNo(slave.getId()); // 提升机号 list.add(vo); // 获取提升机信息 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, slave.getId()); if (forkLiftThread == null) { continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { continue; } vo.setWorkNo(forkLiftProtocol.getTaskNo().intValue());//任务号 vo.setPakMk(forkLiftProtocol.getPakMk()?"Y" : "N"); // 作业标记 } return R.ok().add(list); } @PostMapping("/output/lift") @ManagerAuth public R liftOutput(){ StringBuilder str = new StringBuilder(); String s; int i = 0; while((s = OutputQueue.LIFT.poll()) != null && i <=10) { str.append("\n").append(s); i++; } return R.ok().add(str.toString()); } @GetMapping("/detl/{liftNo}") public R liftDetl(@PathVariable("liftNo") Integer liftNo){ LiftDataVo vo = new LiftDataVo(); for (ForkLiftSlave liftSlave : slaveProperties.getForkLift()) { if (liftNo.equals(liftSlave.getId())) { vo.setLiftNo(liftSlave.getId()); BasLift basLift = basLiftService.selectById(liftSlave.getId()); if (!Cools.isEmpty(basLift)) { vo.setWorkNo(basLift.getWrkNo()); vo.setPakMk(basLift.getPakMk()); } break; } } return R.ok().add(vo); } @GetMapping("/sensor/detl/{liftNo}") public R liftSensorDetl(@PathVariable("liftNo") Integer liftNo){ LiftSensorDataVo vo = new LiftSensorDataVo(); for (ForkLiftSlave liftSlave : slaveProperties.getForkLift()) { if (liftNo.equals(liftSlave.getId())) { vo.setLiftNo(liftSlave.getId()); // 获取提升机信息 ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSlave.getId()); if (forkLiftThread == null) { return R.error("设备不在线"); } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { return R.error("设备不在线"); } break; } } return R.ok().add(vo); } @PostMapping("/detl/update") @ManagerAuth(memo = "修改数据") public R liftUpdate(@RequestParam Integer liftNo, @RequestParam Short workNo, @RequestParam String pakMk, @RequestParam Integer token) { ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo); if (forkLiftThread == null) { return R.error("plc已掉线"); } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { return R.error("plc已掉线"); } if (workNo != null) { forkLiftThread.setSyncTaskNo(workNo.intValue()); } return R.ok(); } @RequestMapping(value = "/command/query") public R liftCommandQuery(@RequestParam("wrkNo") Integer wrkNo) { Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return R.error(); } LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class); return R.ok().add(redisCommand); } //回退命令 @RequestMapping(value = "/command/rollback") public R liftCommandRollback(@RequestParam("wrkNo") Integer wrkNo , @RequestParam("commandStep") Integer commandStep) { Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return R.error(); } LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class); redisCommand.setCommandStep(commandStep); redisUtil.set(RedisKeyType.LIFT.key + wrkNo, JSON.toJSONString(redisCommand)); return R.ok(); } //命令完成状态切换 @RequestMapping(value = "/command/completeSwitch") public R liftCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo , @RequestParam("commandStep") Integer commandStep , @RequestParam("complete") Integer complete) { Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return R.error(); } LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class); LiftAssignCommand assignCommand = redisCommand.getAssignCommand(); List commands = assignCommand.getCommands(); ForkLiftCommand command = commands.get(commandStep); command.setComplete(complete != 0); redisUtil.set(RedisKeyType.LIFT.key + wrkNo, JSON.toJSONString(redisCommand)); return R.ok(); } //重启任务(命令) @RequestMapping(value = "/command/restart") public R liftCommandCompleteSwitch(@RequestParam("wrkNo") Integer wrkNo) { Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return R.error(); } LiftRedisCommand redisCommand = JSON.parseObject(o.toString(), LiftRedisCommand.class); Short liftNo = redisCommand.getLiftNo(); ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo.intValue()); if (forkLiftThread == null) { return R.error(); } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { return R.error(); } if (!forkLiftThread.isIdle()) { return R.error(); } //提升机处于空闲状态,进行任务的恢复 forkLiftThread.setSyncTaskNo(redisCommand.getWrkNo().intValue());//将提升机线程分配任务号 return R.ok(); } //删除任务(命令) @RequestMapping(value = "/command/del") public R liftCommandDel(@RequestParam("wrkNo") Integer wrkNo) { Object o = redisUtil.get(RedisKeyType.LIFT.key + wrkNo); if (o == null) { return R.error(); } redisUtil.del(RedisKeyType.LIFT.key + wrkNo); return R.ok(); } }