package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.LiftOperatorParam; import com.zy.asrs.domain.vo.LiftDataVo; import com.zy.asrs.domain.vo.LiftMsgTableVo; import com.zy.asrs.domain.vo.LiftSensorDataVo; import com.zy.asrs.entity.BasLift; import com.zy.asrs.service.BasLiftService; import com.zy.common.service.CommonService; import com.zy.common.utils.RedisUtil; import com.zy.core.action.LiftAction; import com.zy.core.cache.OutputQueue; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.*; import com.zy.core.model.LiftSlave; import com.zy.core.model.command.LiftAssignCommand; import com.zy.core.model.command.LiftCommand; import com.zy.core.model.protocol.LiftProtocol; import com.zy.core.model.protocol.LiftStaProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.thread.LiftThread; 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 LiftController { @Autowired private SlaveProperties slaveProperties; @Autowired private BasLiftService basLiftService; @Autowired private CommonService commonService; @Autowired private RedisUtil redisUtil; @Autowired private LiftAction liftAction; @PostMapping("/table/lift/state") @ManagerAuth(memo = "提升机信息表") public R liftStateTable(){ ArrayList list = new ArrayList<>(); for (LiftSlave slave : slaveProperties.getLift()) { // 表格行 JSONObject baseObj = new JSONObject(); baseObj.put("shuttleNo", slave.getId()); list.add(baseObj); // 获取提升机信息 LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); if (liftThread == null) { continue; } LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { continue; } JSONObject data = JSON.parseObject(JSON.toJSONString(liftProtocol)); List liftStaProtocols = liftThread.getLiftStaProtocols(); data.put("liftStaProtocols", liftStaProtocols); baseObj.putAll(data); } return R.ok().add(list); } @PostMapping("/table/lift/msg") @ManagerAuth(memo = "提升机数据表") public R liftMsgTable(){ List list = new ArrayList<>(); for (LiftSlave slave : slaveProperties.getLift()) { // 表格行 LiftMsgTableVo vo = new LiftMsgTableVo(); vo.setLiftNo(slave.getId()); // 提升机号 list.add(vo); // 获取提升机信息 LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, slave.getId()); if (liftThread == null) { continue; } LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { continue; } vo.setWorkNo(liftProtocol.getTaskNo());//任务号 vo.setPakMk(liftProtocol.getPakMk()?"Y" : "N"); // 作业标记 vo.setLiftStaProtocols(liftThread.getLiftStaProtocols()); vo.setCompleteTaskNo(Integer.parseInt(liftProtocol.getCompleteTaskNo())); vo.setLev(liftProtocol.getLev()); } 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 (LiftSlave liftSlave : slaveProperties.getLift()) { 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 (LiftSlave liftSlave : slaveProperties.getLift()) { if (liftNo.equals(liftSlave.getId())) { vo.setLiftNo(liftSlave.getId()); // 获取提升机信息 LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId()); if (liftThread == null) { return R.error("设备不在线"); } LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { return R.error("设备不在线"); } break; } } return R.ok().add(vo); } /****************************************************************/ /************************** 手动操作 ******************************/ /****************************************************************/ @ManagerAuth(memo = "手动操作") @PostMapping("/operator/lift") public R liftOperator(LiftOperatorParam param){ if (Cools.isEmpty(param.getLiftNo())) { return R.parse(BaseRes.PARAM); } LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, param.getLiftNo()); if (liftThread == null) { throw new CoolException("提升机不在线"); } LiftProtocol liftProtocol = liftThread.getStatus(); if (liftProtocol == null) { throw new CoolException("提升机不在线"); } if (param.getLiftTaskMode() == 1) { return R.ok(); } else if (param.getLiftTaskMode() == 5) { //托盘入 int workNo = commonService.getWorkNo(8);//获取任务号 Integer startSta = param.getSourceStaNo(); Integer targetSta = param.getStaNo(); //获取提升机命令 List liftCommand = liftThread.getPalletInCommand(workNo, startSta, targetSta); ArrayList commands = new ArrayList<>(); commands.addAll(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); assignCommand.setTaskNo((short) workNo); assignCommand.setAuto(false);//手动模式 assignCommand.setTaskMode(LiftCommandModeType.PALLET_IN.id.shortValue()); liftAction.assignWork(liftProtocol.getLiftNo(), assignCommand); return R.ok(); } else if (param.getLiftTaskMode() == 6) { //托盘入 int workNo = commonService.getWorkNo(8);//获取任务号 Integer startSta = param.getSourceStaNo(); Integer targetSta = param.getStaNo(); //获取提升机命令 List liftCommand = liftThread.getPalletOutCommand(workNo, startSta, targetSta); ArrayList commands = new ArrayList<>(); commands.addAll(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); assignCommand.setTaskNo((short) workNo); assignCommand.setAuto(false);//手动模式 assignCommand.setTaskMode(LiftCommandModeType.PALLET_OUT.id.shortValue()); liftAction.assignWork(liftProtocol.getLiftNo(), assignCommand); return R.ok(); } else if (param.getLiftTaskMode() == 7) { //移动 int workNo = commonService.getWorkNo(8);//获取任务号 Integer startSta = param.getSourceStaNo(); Integer targetSta = param.getStaNo(); //获取提升机命令 List liftCommand = liftThread.getMoveCommand(workNo, startSta, targetSta, LiftCommandModeType.MOVE); ArrayList commands = new ArrayList<>(); commands.addAll(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); assignCommand.setTaskNo((short) workNo); assignCommand.setAuto(false);//手动模式 assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); liftAction.assignWork(liftProtocol.getLiftNo(), assignCommand); return R.ok(); } else if (param.getLiftTaskMode() == 8) { //移动 int workNo = commonService.getWorkNo(8);//获取任务号 Integer startSta = param.getSourceStaNo(); Integer targetSta = param.getStaNo(); //获取提升机命令 List liftCommand = liftThread.getMoveWithShuttleCommand(workNo, startSta, targetSta, LiftCommandModeType.MOVE); ArrayList commands = new ArrayList<>(); commands.addAll(liftCommand); //提交到线程去工作 LiftAssignCommand assignCommand = new LiftAssignCommand(); assignCommand.setCommands(commands); assignCommand.setLiftNo(liftProtocol.getLiftNo().shortValue()); assignCommand.setTaskNo((short) workNo); assignCommand.setAuto(false);//手动模式 assignCommand.setTaskMode(LiftCommandModeType.MOVE.id.shortValue()); liftAction.assignWork(liftProtocol.getLiftNo(), assignCommand); return R.ok(); } else if (param.getLiftTaskMode() == 3) { //等待确认 liftThread.setProtocolStatus(LiftProtocolStatusType.WAITING); return R.ok(); } else if (param.getLiftTaskMode() == 0) { //提升机复位 liftThread.setSyncTaskNo(0); liftThread.setProtocolStatus(LiftProtocolStatusType.IDLE); return R.ok(); } else { throw new CoolException("未知命令"); } } // @PostMapping("/detl/update") // @ManagerAuth(memo = "修改数据") // public R liftUpdate(@RequestParam Integer liftNo, // @RequestParam Short workNo, // @RequestParam String pakMk, // @RequestParam Integer token) { // LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo); // if (liftThread == null) { // return R.error("plc已掉线"); // } // LiftProtocol liftProtocol = liftThread.getLiftProtocol(); // if (liftProtocol == null) { // return R.error("plc已掉线"); // } // if (workNo != null) { // liftProtocol.setTaskNo(workNo); // } // if (pakMk != null) { // liftProtocol.setPakMk(pakMk.equals("Y")); // } // if (token != null) { // liftProtocol.setToken(token); // } // 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(); // NyLiftCommand 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(); // LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo.intValue()); // if (liftThread == null) { // return R.error(); // } // LiftProtocol liftProtocol = liftThread.getLiftProtocol(); // if (liftProtocol == null) { // return R.error(); // } // if (!liftProtocol.isIdle()) { // return R.error(); // } // //提升机处于空闲状态,进行任务的恢复 // liftProtocol.setTaskNo(redisCommand.getWrkNo());//将提升机线程分配任务号 // liftProtocol.setProtocolStatus(LiftProtocolStatusType.WORKING);//工作状态 // 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(); // } }