|  |  | 
 |  |  | package com.zy.asrs.controller; | 
 |  |  |  | 
 |  |  | import com.alibaba.fastjson.JSON; | 
 |  |  | import com.baomidou.mybatisplus.mapper.EntityWrapper; | 
 |  |  | import com.core.common.R; | 
 |  |  | import com.zy.asrs.domain.param.CancelTaskParam; | 
 |  |  | import com.zy.asrs.domain.param.CompleteTaskParam; | 
 |  |  | import com.zy.asrs.domain.param.CreateMoveTaskParam; | 
 |  |  | import com.zy.asrs.domain.ShuttleGatherResult; | 
 |  |  | import com.zy.asrs.domain.enums.NotifyMsgType; | 
 |  |  | import com.zy.asrs.domain.param.*; | 
 |  |  | import com.zy.asrs.entity.ApiLog; | 
 |  |  | import com.zy.asrs.entity.DeviceConfig; | 
 |  |  | import com.zy.asrs.entity.LocMast; | 
 |  |  | import com.zy.asrs.entity.WrkMast; | 
 |  |  | import com.zy.asrs.service.ApiLogService; | 
 |  |  | import com.zy.asrs.service.DeviceConfigService; | 
 |  |  | import com.zy.asrs.service.LocMastService; | 
 |  |  | import com.zy.asrs.service.WrkMastService; | 
 |  |  | import com.zy.asrs.utils.NotifyUtils; | 
 |  |  | import com.zy.common.annotations.OpenApiLog; | 
 |  |  | import com.zy.common.service.CommonService; | 
 |  |  | import com.zy.core.cache.SlaveConnection; | 
 |  |  | import com.zy.core.dispatcher.ShuttleDispatchUtils; | 
 |  |  | import com.zy.core.enums.SlaveType; | 
 |  |  | import com.zy.core.enums.WrkIoType; | 
 |  |  | import com.zy.core.model.protocol.ForkLiftProtocol; | 
 |  |  | import com.zy.core.model.protocol.ShuttleProtocol; | 
 |  |  | 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 java.util.ArrayList; | 
 |  |  | import java.util.Date; | 
 |  |  | import java.util.HashMap; | 
 |  |  | import java.util.List; | 
 |  |  |  | 
 |  |  | @Slf4j | 
 |  |  | @RestController | 
 |  |  | 
 |  |  |     private CommonService commonService; | 
 |  |  |     @Autowired | 
 |  |  |     private ShuttleDispatchUtils shuttleDispatchUtils; | 
 |  |  |     @Autowired | 
 |  |  |     private NotifyUtils notifyUtils; | 
 |  |  |     @Autowired | 
 |  |  |     private ApiLogService apiLogService; | 
 |  |  |     @Autowired | 
 |  |  |     private LocMastService locMastService; | 
 |  |  |     @Autowired | 
 |  |  |     private WrkMastService wrkMastService; | 
 |  |  |     @Autowired | 
 |  |  |     private DeviceConfigService deviceConfigService; | 
 |  |  |  | 
 |  |  |     @PostMapping("/createMoveTask") | 
 |  |  |     @OpenApiLog(memo = "小车移动任务") | 
 |  |  |     public R createMoveTask(@RequestBody CreateMoveTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(null, param.getLocNo(), param.getShuttleNo()); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "小车移动任务" | 
 |  |  |                 , "/createMoveTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , dispatchShuttle ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (dispatchShuttle) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |         return R.error("生成失败"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //移库任务 | 
 |  |  |     @PostMapping("/createLocMoveTask") | 
 |  |  |     @OpenApiLog(memo = "移库任务") | 
 |  |  |     public R createLocMoveTask(@RequestBody CreateLocMoveTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean result = commonService.createLocMoveTask(param); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "移库任务" | 
 |  |  |                 , "/createLocMoveTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , result ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (result) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |         return R.error("生成移库任务失败"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //入库任务 | 
 |  |  |     @PostMapping("/createInTask") | 
 |  |  |     @OpenApiLog(memo = "入库任务") | 
 |  |  |     public R createInTask(@RequestBody CreateInTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean result = commonService.createInTask(param); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "入库任务" | 
 |  |  |                 , "/createInTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , result ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (result) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |         return R.error("生成入库任务失败"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     //出库任务 | 
 |  |  |     @PostMapping("/createOutTask") | 
 |  |  |     @OpenApiLog(memo = "出库任务") | 
 |  |  |     public R createOutTask(@RequestBody CreateOutTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean result = commonService.createOutTask(param); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "出库任务" | 
 |  |  |                 , "/createOutTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , result ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (result) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |         return R.error("生成出库任务失败"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/completeTask") | 
 |  |  |     @OpenApiLog(memo = "任务完成") | 
 |  |  |     public R completeTask(@RequestBody CompleteTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean completeTask = commonService.completeTask(param); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "任务完成" | 
 |  |  |                 , "/completeTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , completeTask ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (completeTask) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/cancelTask") | 
 |  |  |     @OpenApiLog(memo = "任务取消") | 
 |  |  |     public R cancelTask(@RequestBody CancelTaskParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         boolean completeTask = commonService.cancelTask(param); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "任务取消" | 
 |  |  |                 , "/cancelTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , completeTask ? 1 : 0 | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |         if (completeTask) { | 
 |  |  |             return R.ok(); | 
 |  |  |         } | 
 |  |  |         return R.error("任务取消失败"); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/deviceStatus") | 
 |  |  |     @OpenApiLog(memo = "获取设备状态") | 
 |  |  |     public R getDeviceStatus() { | 
 |  |  |         HashMap<String, Object> map = new HashMap<>(); | 
 |  |  |         //获取小车数据 | 
 |  |  |         ArrayList<ShuttleProtocol> shuttleProtocols = new ArrayList<>(); | 
 |  |  |         List<DeviceConfig> shuttleList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() | 
 |  |  |                 .eq("device_type", String.valueOf(SlaveType.Shuttle))); | 
 |  |  |         for (DeviceConfig device : shuttleList) { | 
 |  |  |             ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, device.getDeviceNo()); | 
 |  |  |             if (shuttleThread == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); | 
 |  |  |             if (shuttleProtocol == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             shuttleProtocols.add(shuttleProtocol); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         //获取货叉提升机数据 | 
 |  |  |         ArrayList<ForkLiftProtocol> forkLiftProtocols = new ArrayList<>(); | 
 |  |  |         List<DeviceConfig> forkLiftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>() | 
 |  |  |                 .eq("device_type", String.valueOf(SlaveType.ForkLift))); | 
 |  |  |         for (DeviceConfig device : forkLiftList) { | 
 |  |  |             ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo()); | 
 |  |  |             if (forkLiftThread == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |  | 
 |  |  |             ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus(); | 
 |  |  |             if (forkLiftProtocol == null) { | 
 |  |  |                 continue; | 
 |  |  |             } | 
 |  |  |             forkLiftProtocols.add(forkLiftProtocol); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         map.put("shuttle", shuttleProtocols); | 
 |  |  |         map.put("forkLift", forkLiftProtocols); | 
 |  |  |  | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "获取设备状态" | 
 |  |  |                 , "/deviceStatus" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(map) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok().add(map); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/getLocInformation") | 
 |  |  |     @OpenApiLog(memo = "获取指定库位信息") | 
 |  |  |     public R getLocInformation(@RequestBody GetLocInformationParam param) { | 
 |  |  |         if (param == null) { | 
 |  |  |             return R.error("参数不能为空"); | 
 |  |  |         } | 
 |  |  |         LocMast locMast = locMastService.queryByLoc(param.getLocNo()); | 
 |  |  |         if (locMast == null) { | 
 |  |  |             return R.error("库位信息不存在"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         HashMap<String, Object> map = new HashMap<>(); | 
 |  |  |         map.put("locNo", locMast.getLocNo()); | 
 |  |  |         map.put("locSts", locMast.getLocSts()); | 
 |  |  |  | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "获取指定库位信息" | 
 |  |  |                 , "/getLocInformation" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , JSON.toJSONString(map) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok().add(map); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/getAllLocInformation") | 
 |  |  |     @OpenApiLog(memo = "获取全部库位信息") | 
 |  |  |     public R getAllLocInformation() { | 
 |  |  |         List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()); | 
 |  |  |         if (locMasts.isEmpty()) { | 
 |  |  |             return R.error("库位信息不存在"); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         ArrayList<HashMap<String, Object>> list = new ArrayList<>(); | 
 |  |  |         for (LocMast locMast : locMasts) { | 
 |  |  |             HashMap<String, Object> map = new HashMap<>(); | 
 |  |  |             map.put("locNo", locMast.getLocNo()); | 
 |  |  |             map.put("locSts", locMast.getLocSts()); | 
 |  |  |             list.add(map); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "获取全部库位信息" | 
 |  |  |                 , "/getAllLocInformation" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(list) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok().add(list); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/shuttleGather") | 
 |  |  |     @OpenApiLog(memo = "小车集合") | 
 |  |  |     public R shuttleGather(@RequestBody ShuttleGatherParam param) { | 
 |  |  |         List<ShuttleGatherResult> shuttleGather = shuttleDispatchUtils.shuttleGather(param); | 
 |  |  |  | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "小车集合" | 
 |  |  |                 , "/shuttleGather" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , JSON.toJSONString(shuttleGather) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok().add(shuttleGather); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/shuttleDemo") | 
 |  |  |     @OpenApiLog(memo = "小车演示") | 
 |  |  |     public R shuttleDemo(@RequestBody ShuttleDemoParam param) { | 
 |  |  |         shuttleDispatchUtils.shuttleDemo(param); | 
 |  |  |  | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "小车演示" | 
 |  |  |                 , "/shuttleDemo" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @PostMapping("/queryTask") | 
 |  |  |     @OpenApiLog(memo = "查询任务") | 
 |  |  |     public R queryTask(@RequestBody QueryTaskParam param) { | 
 |  |  |         EntityWrapper<WrkMast> wrapper = new EntityWrapper<>(); | 
 |  |  |         if(param.getTaskNo() != null) { | 
 |  |  |             wrapper.eq("wms_wrk_no", param.getTaskNo()); | 
 |  |  |         } | 
 |  |  |  | 
 |  |  |         if(param.getTaskType() != null) { | 
 |  |  |             WrkIoType ioType = WrkIoType.get(param.getTaskType()); | 
 |  |  |             if(ioType == null) { | 
 |  |  |                 return R.error("任务类型不存在"); | 
 |  |  |             } | 
 |  |  |             wrapper.eq("io_type", ioType.id); | 
 |  |  |         } | 
 |  |  |         List<WrkMast> wrkMasts = wrkMastService.selectList(wrapper); | 
 |  |  |         apiLogService.insert(new ApiLog( | 
 |  |  |                 null | 
 |  |  |                 , "查询任务" | 
 |  |  |                 , "/queryTask" | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , JSON.toJSONString(param) | 
 |  |  |                 , JSON.toJSONString(wrkMasts) | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |                 , 1 | 
 |  |  |                 , new Date() | 
 |  |  |                 , null | 
 |  |  |                 , null | 
 |  |  |         )); | 
 |  |  |  | 
 |  |  |         return R.ok().add(wrkMasts); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |     @GetMapping("/test") | 
 |  |  |     public R test() { | 
 |  |  |         notifyUtils.notify("task", 1, "9999", "W9999", NotifyMsgType.SHUTTLE_MOVING, "data"); | 
 |  |  |         notifyUtils.notify(String.valueOf(SlaveType.Shuttle), 2, "9999", "W9999", NotifyMsgType.SHUTTLE_MOVE_COMPLETE); | 
 |  |  |         return R.ok(); | 
 |  |  |     } | 
 |  |  |  | 
 |  |  | } |