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 voList = new ArrayList<>(); List agvList = agvService.list(new LambdaQueryWrapper().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.getById(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 voList = new ArrayList<>(); for (Loc loc : locService.list(new LambdaQueryWrapper().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().eq(Loc::getLocSts, LocStsType.PAKIN.val()))) { Task task = taskService.getOne(new LambdaQueryWrapper() .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() .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().eq(Loc::getLocSts, LocStsType.PAKOUT.val()))) { Task task = taskService.getOne(new LambdaQueryWrapper() .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() .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()); } }