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());
|
}
|
|
}
|