package com.zy.asrs.controller; import com.alibaba.fastjson.JSON; 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.SystemSwitchParam; import com.zy.asrs.entity.BasMap; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.BasMapService; import com.zy.asrs.service.WrkMastService; import com.zy.common.model.MapNode; import com.zy.common.model.enums.NavigationMapType; import com.zy.common.utils.NavigateMapData; import com.zy.common.utils.RedisUtil; import com.zy.core.cache.SlaveConnection; import com.zy.core.enums.RedisKeyType; import com.zy.core.enums.SlaveType; import com.zy.core.model.ForkLiftSlave; import com.zy.core.model.ShuttleSlave; import com.zy.core.model.protocol.ForkLiftProtocol; import com.zy.core.model.protocol.ShuttleProtocol; import com.zy.core.properties.SlaveProperties; import com.zy.core.properties.SystemProperties; import com.zy.core.thread.ForkLiftThread; 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 javax.servlet.http.HttpServletRequest; import java.util.*; /** * 主控图接口 * Created by vincent on 2020-06-01 */ @Slf4j @RestController @RequestMapping("/console") public class ConsoleController { @Autowired private BasMapService basMapService; @Autowired private RedisUtil redisUtil; @Autowired private NavigateMapData navigateMapData; @Autowired private WrkMastService wrkMastService; @Autowired private SlaveProperties slaveProperties; @PostMapping("/system/running/status") @ManagerAuth(memo = "系统运行状态") public R systemRunningStatus(){ return R.ok().add(Cools.add("status", SystemProperties.WCS_RUNNING_STATUS.get())); } @PostMapping("/system/switch") @ManagerAuth(memo = "系统运行开关操作") public R systemSwitch(SystemSwitchParam param) throws InterruptedException { if (Cools.isEmpty(param.getOperatorType())){ return R.error(); } if (param.getOperatorType() == 0) { if (Cools.isEmpty(param.getPassword())){ return R.error("请输入口令"); } if (!param.getPassword().equals(SystemProperties.WCS_PASSWORD)){ return R.error("口令错误"); } } Thread.sleep(200L); SystemProperties.WCS_RUNNING_STATUS.set(param.getOperatorType()==1?Boolean.TRUE:Boolean.FALSE); return R.ok().add(Cools.add("status", SystemProperties.WCS_RUNNING_STATUS.get())); } /** * 获取地图楼层数据 */ @GetMapping("/map/lev/list") @ManagerAuth public R getMapLevList() { List basMaps = basMapService.selectList(new EntityWrapper().orderBy("lev", true)); ArrayList levList = new ArrayList<>(); for (BasMap basMap : basMaps) { levList.add(basMap.getLev()); } return R.ok().add(levList); } /** * 获取地图数据 */ @GetMapping("/map/{lev}/auth") @ManagerAuth public R getMapFromRedis(@PathVariable Integer lev) { Object data = redisUtil.get(RedisKeyType.MAP.key + lev); if (data == null) { return R.error(); } BasMap basMap = JSON.parseObject(data.toString(), BasMap.class); //解析json地图数据 ArrayList arrayList = JSON.parseObject(basMap.getData(), ArrayList.class); List> lists = navigateMapData.filterMap(NavigationMapType.NONE.id, arrayList, lev, null, null);//过滤地图数据 return R.ok().add(lists); } /** * 重置redis中的地图,将占用的库位全部解除 */ @GetMapping("/map/resetMap/auth") @ManagerAuth public R resetMapToRedis() { for (int i = 1; i <= 10; i++) {//总共10层楼 redisUtil.del(RedisKeyType.MAP.key + i); } return R.ok(); } /** * 重置redis中的地图,将占用的库位全部解除 */ @GetMapping("/map/resetMap/{lev}") @ManagerAuth(memo = "重置Redis地图") public R resetMapToRedisByLev(@PathVariable Integer lev, HttpServletRequest request) { redisUtil.del(RedisKeyType.MAP.key + lev); return R.ok(); } /** * 任务检测 */ @GetMapping("/checkTask") @ManagerAuth(memo = "任务检测") public R checkTask() { List wrkMasts = wrkMastService.selectList(new EntityWrapper<>()); if (!wrkMasts.isEmpty()) { return R.error("存在未结束任务"); } for (ShuttleSlave slave : slaveProperties.getShuttle()) { ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, slave.getId()); if (shuttleThread == null) { continue; } ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { continue; } if (shuttleProtocol.getTaskNo() > 0) { return R.error(slave.getId() + "号小车存在工作号"); } } for (ForkLiftSlave slave : slaveProperties.getForkLift()) { ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, slave.getId()); if (forkLiftThread == null) { continue; } ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); if (forkLiftProtocol == null) { continue; } if (forkLiftProtocol.getTaskNo() > 0) { return R.error(slave.getId() + "号货叉提升机存在工作号"); } } return R.ok(); } }