| package com.zy.acs.manager.manager.controller; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | 
| import com.zy.acs.common.constant.RedisConstant; | 
| import com.zy.acs.common.domain.protocol.AGV_12_UP; | 
| import com.zy.acs.common.domain.protocol.AGV_13_UP; | 
| import com.zy.acs.common.domain.protocol.IMessageBody; | 
| import com.zy.acs.common.enums.AgvInOutFlagType; | 
| import com.zy.acs.common.utils.RedisSupport; | 
| import com.zy.acs.framework.common.Cools; | 
| import com.zy.acs.framework.common.R; | 
| import com.zy.acs.manager.manager.controller.result.DigitalAgvVo; | 
| import com.zy.acs.manager.manager.controller.result.DigitalStockVo; | 
| import com.zy.acs.manager.manager.entity.*; | 
| import com.zy.acs.manager.manager.enums.*; | 
| import com.zy.acs.manager.manager.service.*; | 
| import org.springframework.beans.factory.annotation.Autowired; | 
| import org.springframework.web.bind.annotation.GetMapping; | 
| import org.springframework.web.bind.annotation.RequestMapping; | 
| import org.springframework.web.bind.annotation.RestController; | 
|   | 
| import java.util.ArrayList; | 
| import java.util.List; | 
|   | 
| /** | 
|  * Created by vincent on 4/25/2024 | 
|  */ | 
| @RequestMapping("/digital") | 
| @RestController | 
| public class DigitalController { | 
|   | 
|     private final RedisSupport redis = RedisSupport.defaultRedisSupport; | 
|   | 
|     @Autowired | 
|     private AgvService agvService; | 
|     @Autowired | 
|     private AgvDetailService agvDetailService; | 
|     @Autowired | 
|     private CodeService codeService; | 
|     @Autowired | 
|     private LocService locService; | 
|     @Autowired | 
|     private TaskService taskService; | 
|     @Autowired | 
|     private ActionService actionService; | 
|   | 
|     @GetMapping("/agv/info") | 
|     public R getAgvInfo() { | 
|         List<DigitalAgvVo> voList = new ArrayList<>(); | 
|   | 
|         List<Agv> agvList = agvService.list(new LambdaQueryWrapper<Agv>().eq(Agv::getStatus, StatusType.ENABLE.val)); | 
|         for (Agv agv : agvList) { | 
|             DigitalAgvVo vo = new DigitalAgvVo(); | 
|             vo.setAgvNo(agv.getUuid()); | 
|   | 
|             AgvDetail agvDetail = agvDetailService.selectByAgvId(agv.getId()); | 
|             if (null == agvDetail) { continue; } | 
|             Code currCode = codeService.getCacheById(agvDetail.getCode()); | 
|             if (null == currCode) { continue; } | 
|             vo.synPosition(currCode.getX(), 0, currCode.getY()); | 
|   | 
|   | 
|             IMessageBody msgBody = redis.getObject(RedisConstant.DIGITAL_AGV_FLAG, agv.getUuid()); | 
|             if (null == msgBody) { continue; } | 
|   | 
|   | 
|             // 有码实时数据包 | 
|             if (msgBody instanceof AGV_12_UP) { | 
|                 AGV_12_UP agv_12_up = (AGV_12_UP) msgBody; | 
|                 vo.setTheta((double) agv_12_up.getAGVCurrentAngle()); | 
|                 vo.setHeight((double) agv_12_up.getCurrentAltitude()); | 
|                 vo.setLoaderTheta((double) agv_12_up.getLoaderTheta()); | 
|                 vo.setForkLength((double) agv_12_up.getForkLength()); | 
|   | 
|                 vo.setFinger1(agv_12_up.isFinger1()); | 
|                 vo.setFinger2(agv_12_up.isFinger2()); | 
|                 vo.setFinger3(agv_12_up.isFinger3()); | 
|                 vo.setFinger4(agv_12_up.isFinger4()); | 
|   | 
|                 vo.setInOutFlag(AgvInOutFlagType.query(agv_12_up.getInOutFlag()).val); | 
|   | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(1, agv_12_up.isTempLoc1())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(2, agv_12_up.isTempLoc2())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(3, agv_12_up.isTempLoc3())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(4, agv_12_up.isTempLoc4())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(5, agv_12_up.isTempLoc5())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(6, agv_12_up.isTempLoc6())); | 
|   | 
|                 vo.setHasBox(agv_12_up.isLoaderMid()); | 
|   | 
|                 DigitalChartsController.agvChartsQueue.offer(Cools | 
|                         .add("agvNo", agv.getUuid()) | 
|                         .add("qrcode", agv_12_up.getQrCode()) | 
|                         .add("height", agv_12_up.getCurrentAltitude()) | 
|                         .add("angle", agv_12_up.getAGVCurrentAngle()) | 
|                         .add("loaderTheta", agv_12_up.getLoaderTheta()) | 
|                         .add("forkLength", agv_12_up.getForkLength()) | 
|                         .add("inOutFlag", AgvInOutFlagType.query(agv_12_up.getInOutFlag()).desc) | 
|                 ); | 
|             } | 
|   | 
|             // 无码实时数据包 | 
|             if (msgBody instanceof AGV_13_UP) { | 
|                 AGV_13_UP agv_13_up = (AGV_13_UP) msgBody; | 
|   | 
|                 vo.setTheta((double) agv_13_up.getAGVCurrentAngle()); | 
|                 vo.setHeight((double) agv_13_up.getCurrentAltitude()); | 
|                 vo.setLoaderTheta((double) agv_13_up.getLoaderTheta()); | 
|                 vo.setForkLength((double) agv_13_up.getForkLength()); | 
|   | 
|                 vo.setFinger1(agv_13_up.isFinger1()); | 
|                 vo.setFinger2(agv_13_up.isFinger2()); | 
|                 vo.setFinger3(agv_13_up.isFinger3()); | 
|                 vo.setFinger4(agv_13_up.isFinger4()); | 
|   | 
|                 vo.setInOutFlag(AgvInOutFlagType.query(agv_13_up.getInOutFlag()).val); | 
|   | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(1, agv_13_up.isTempLoc1())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(2, agv_13_up.isTempLoc2())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(3, agv_13_up.isTempLoc3())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(4, agv_13_up.isTempLoc4())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(5, agv_13_up.isTempLoc5())); | 
|                 vo.getTrayList().add(new DigitalAgvVo.Tray(6, agv_13_up.isTempLoc6())); | 
|   | 
|                 vo.setHasBox(agv_13_up.isLoaderMid()); | 
|             } | 
|   | 
|             voList.add(vo); | 
|   | 
|   | 
|         } | 
|   | 
|         return R.ok().add(voList); | 
|     } | 
|   | 
|     /** | 
|      * SELECT | 
|      * ml.loc_no, | 
|      * ml.row, | 
|      * ml.bay, | 
|      * ml.lev, | 
|      * ml.loc_sts AS locStsEl | 
|      * FROM man_loc ml | 
|      * LEFT JOIN man_task mt ON mt.dest_loc = ml.id OR mt.ori_loc = ml.id | 
|      * LEFT JOIN man_action ma ON ma.task_id = mt.id | 
|      * WHERE | 
|      *     ( | 
|      *     ml.loc_sts = 16 -- STOCK | 
|      *     ) | 
|      *     OR | 
|      *     ( | 
|      *     ml.loc_sts = 17 -- PAKIN | 
|      *     AND mt.task_sts IN | 
|      *     ( | 
|      *         15,  -- INIT | 
|      *         17  -- PROGRESS | 
|      *     ) | 
|      *     AND ma.action_type = 22 -- ReadyReleaseToShelvesLoc | 
|      *     AND ma.action_sts = 17 -- FINISH | 
|      *      ) | 
|      *     OR | 
|      *     ( | 
|      *     ml.loc_sts = 18 -- PAKOUT | 
|      *     AND mt.task_sts IN ( | 
|      *         15,  -- INIT | 
|      *         17  -- PROGRESS | 
|      *     ) | 
|      *     AND ma.action_type = 20 -- ReadyTakeFromShelvesLoc | 
|      *     AND ma.action_sts != 17  -- FINISH | 
|      *      ) | 
|      * ORDER BY mt.id DESC | 
|      * LIMIT 0, 10 | 
|      * | 
|      * | 
|      * SELECT | 
|      * ml.loc_no, | 
|      * ml.row, | 
|      * ml.bay, | 
|      * ml.lev, | 
|      * ml.loc_sts AS locStsEl | 
|      * FROM man_loc ml | 
|      * LEFT JOIN man_task mt ON mt.dest_loc = ml.id OR mt.ori_loc = ml.id | 
|      * LEFT JOIN man_action ma ON ma.task_id = mt.id | 
|      * WHERE | 
|      *     ( | 
|      *     ml.loc_sts = (SELECT id FROM man_loc_sts WHERE UUID = 'STOCK') | 
|      *     ) | 
|      *     OR | 
|      *     ( | 
|      *     ml.loc_sts = (SELECT id FROM man_loc_sts WHERE UUID = 'PAKIN') | 
|      *     AND mt.task_sts IN | 
|      *     ( | 
|      *         (SELECT id FROM man_task_sts WHERE UUID = 'INIT'), | 
|      *         (SELECT id FROM man_task_sts WHERE UUID = 'PROGRESS') | 
|      *     ) | 
|      *     AND ma.action_type = (SELECT id FROM man_action_type WHERE UUID = 'ReadyReleaseToShelvesLoc') | 
|      *     AND ma.action_sts = (SELECT id FROM man_action_sts WHERE UUID = 'FINISH') | 
|      *      ) | 
|      *     OR | 
|      *     ( | 
|      *     ml.loc_sts = (SELECT id FROM man_loc_sts WHERE UUID = 'PAKOUT') | 
|      *     AND mt.task_sts IN ( | 
|      *         (SELECT id FROM man_task_sts WHERE UUID = 'INIT'), | 
|      *         (SELECT id FROM man_task_sts WHERE UUID = 'PROGRESS') | 
|      *     ) | 
|      *     AND ma.action_type = (SELECT id FROM man_action_type WHERE UUID = 'ReadyTakeFromShelvesLoc') | 
|      *     AND ma.action_sts != (SELECT id FROM man_action_sts WHERE UUID = 'FINISH') | 
|      *      ) | 
|      * ORDER BY mt.id DESC | 
|      * LIMIT 0, 10 | 
|      * | 
|      * @return | 
|      */ | 
|     @GetMapping("/stock/info") | 
|     public R getStockInfo() { | 
|         List<DigitalStockVo> voList = new ArrayList<>(); | 
|   | 
|         for (Loc loc : locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.STOCK.val()))) { | 
|             DigitalStockVo vo = new DigitalStockVo(); | 
|             vo.setLocNo(loc.getLocNo()); | 
|             vo.setRow(loc.getRow()); | 
|             vo.setBay(loc.getBay()); | 
|             vo.setLev(loc.getLev()); | 
|             vo.setLocSts(loc.getLocStsEl()); | 
|             voList.add(vo); | 
|         } | 
|   | 
|         // 入库放货 | 
|         for (Loc loc : locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.PAKIN.val()))) { | 
|             Task task = taskService.getOne(new LambdaQueryWrapper<Task>() | 
|                             .in(Task::getTaskSts, | 
|                                     TaskStsType.INIT.val() | 
|                                     , TaskStsType.WAITING.val() | 
|                                     , TaskStsType.ASSIGN.val() | 
|                                     , TaskStsType.PROGRESS.val() | 
|                             ) | 
|                             .eq(Task::getDestLoc, loc.getId()) | 
|             ); | 
|             if (null == task) { continue; } | 
|             Action action = actionService.getOne(new LambdaQueryWrapper<Action>() | 
|                             .eq(Action::getTaskId, task.getId()) | 
|                             .eq(Action::getActionType, ActionTypeType.ReadyReleaseToShelvesLoc.val()) | 
| //                            .eq(Action::getActionSts, ActionStsType.FINISH.val()) | 
|             ); | 
|             if (null == action) { continue; } | 
|             if (action.getActionSts().equals(ActionStsType.FINISH.val())) { | 
|                 DigitalStockVo vo = new DigitalStockVo(); | 
|                 vo.setLocNo(loc.getLocNo()); | 
|                 vo.setRow(loc.getRow()); | 
|                 vo.setBay(loc.getBay()); | 
|                 vo.setLev(loc.getLev()); | 
|                 vo.setLocSts(loc.getLocStsEl()); | 
|                 voList.add(vo); | 
|             } | 
|         } | 
|   | 
|         // 出库取货 | 
|         for (Loc loc : locService.list(new LambdaQueryWrapper<Loc>().eq(Loc::getLocSts, LocStsType.PAKOUT.val()))) { | 
|             Task task = taskService.getOne(new LambdaQueryWrapper<Task>() | 
|                     .in(Task::getTaskSts, | 
|                             TaskStsType.INIT.val() | 
|                             , TaskStsType.WAITING.val() | 
|                             , TaskStsType.ASSIGN.val() | 
|                             , TaskStsType.PROGRESS.val() | 
|                     ) | 
|                     .eq(Task::getOriLoc, loc.getId()) | 
|             ); | 
|             if (null == task) { continue; } | 
|             Action action = actionService.getOne(new LambdaQueryWrapper<Action>() | 
|                             .eq(Action::getTaskId, task.getId()) | 
|                             .eq(Action::getActionType, ActionTypeType.ReadyTakeFromShelvesLoc.val()) | 
| //                            .eq(Action::getActionSts, ActionStsType.FINISH.val()) | 
|             ); | 
|             if (null == action) { continue; } | 
|             if (!action.getActionSts().equals(ActionStsType.FINISH.val())) { | 
|                 DigitalStockVo vo = new DigitalStockVo(); | 
|                 vo.setLocNo(loc.getLocNo()); | 
|                 vo.setRow(loc.getRow()); | 
|                 vo.setBay(loc.getBay()); | 
|                 vo.setLev(loc.getLev()); | 
|                 vo.setLocSts(loc.getLocStsEl()); | 
|                 voList.add(vo); | 
|             } | 
|         } | 
|   | 
| //        voList = new ArrayList<>(); | 
| //        voList.add(new DigitalStockVo("A1003016001", 3, 16, 1, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1003017001", 3, 17, 1, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1003018001", 3, 18, 1, "STOCK")); | 
| // | 
| //        voList.add(new DigitalStockVo("A1001016002", 3, 16, 2, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001017002", 3, 17, 2, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001018002", 3, 18, 2, "STOCK")); | 
| // | 
| //        voList.add(new DigitalStockVo("A1001016003", 3, 16, 3, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001017003", 3, 17, 3, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001018003", 3, 18, 3, "STOCK")); | 
| // | 
| //        voList.add(new DigitalStockVo("A1001016004", 3, 16, 5, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001017004", 3, 17, 5, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001018004", 3, 18, 5, "STOCK")); | 
| // | 
| //        voList.add(new DigitalStockVo("A1001016007", 3, 16, 7, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001017007", 3, 17, 7, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001018007", 3, 18, 7, "STOCK")); | 
| // | 
| //        voList.add(new DigitalStockVo("A1001016006", 3, 16, 6, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001017006", 3, 17, 6, "STOCK")); | 
| //        voList.add(new DigitalStockVo("A1001018006", 3, 18, 6, "STOCK")); | 
|         return R.ok().add(voList); | 
|     } | 
|   | 
|     @GetMapping("/stock/info0") | 
|     public R getStockInfo0() { | 
|         return R.ok().add(locService.selectDigitalLocWhichNeedShow()); | 
|     } | 
|   | 
| } |