#
vincentlu
2026-04-22 6392d636cd6fc13085183d0aac2f3be0ececf90f
#
6个文件已修改
190 ■■■■■ 已修改文件
zy-acs-flow/src/i18n/en.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/i18n/zh.js 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/http.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/map/insight/agv/AgvControl.jsx 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java 65 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/hik/HikInstantActionPublishService.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-acs-flow/src/i18n/en.js
@@ -968,9 +968,11 @@
                        LOC_TO_STA: 'LOC_TO_STA',
                        STA_TO_LOC: 'STA_TO_LOC',
                        STA_TO_STA: 'STA_TO_STA',
                        CANCEL_TASK: 'CANCEL_TASK',
                        TO_CHARGE: 'TO_CHARGE',
                        STOP_CHARGING: 'STOP_CHARGING',
                        LIFT_UP: 'LIFT_UP',
                        LIFT_DOWN: 'LIFT_DOWN',
                        CANCEL_TASK: 'CANCEL_TASK',
                    },
                    startCode: 'Source Point',
                    endCode: 'Destination Point',
zy-acs-flow/src/i18n/zh.js
@@ -968,9 +968,11 @@
                        LOC_TO_STA: '库位到站点',
                        STA_TO_LOC: '站点到库位',
                        STA_TO_STA: '站点到站点',
                        CANCEL_TASK: '取消任务',
                        TO_CHARGE: '去充电',
                        STOP_CHARGING: '断开充电',
                        LIFT_UP: '原地举升',
                        LIFT_DOWN: '原地下放',
                        CANCEL_TASK: '取消任务',
                    },
                    startCode: '起始定位点',
                    endCode: '目标定位点',
zy-acs-flow/src/map/http.js
@@ -364,6 +364,48 @@
    })
}
export const handleLiftUpAgv = async (param, callback) => {
    await request.post('/handler/control/agv/load/lift/up', param, {
        headers: {
            'appKey': HANDLE_APP_KEY
        }
    }).then((res) => {
        const { code, msg, data } = res.data;
        if (code === 200) {
            notify.success(msg);
            if (callback) {
                callback(data)
            }
        } else {
            notify.error(msg);
        }
    }).catch((error) => {
        notify.error(error.message);
        console.error(error.message);
    })
}
export const handleLiftDownAgv = async (param, callback) => {
    await request.post('/handler/control/agv/load/lift/down', param, {
        headers: {
            'appKey': HANDLE_APP_KEY
        }
    }).then((res) => {
        const { code, msg, data } = res.data;
        if (code === 200) {
            notify.success(msg);
            if (callback) {
                callback(data)
            }
        } else {
            notify.error(msg);
        }
    }).catch((error) => {
        notify.error(error.message);
        console.error(error.message);
    })
}
export const handleRestoreAgvAll = async (param, callback) => {
    await request.post('/handler/restore/agv', param, {
        headers: {
zy-acs-flow/src/map/insight/agv/AgvControl.jsx
@@ -17,7 +17,7 @@
import CheckOutlinedIcon from '@mui/icons-material/CheckOutlined';
import RestartAltIcon from '@mui/icons-material/RestartAlt';
import useCoolHook from './useCoolHook';
import { handleCancelTaskAgv, handleControlAgv, handleStopChargingAgv } from '../../http';
import { handleCancelTaskAgv, handleControlAgv, handleLiftDownAgv, handleLiftUpAgv, handleStopChargingAgv } from '../../http';
function AgvControl(props) {
    const { curAgvNo, curAgvInfo } = props;
@@ -49,6 +49,12 @@
            value: 'STOP_CHARGING',
            label: translate('page.map.insight.control.type.STOP_CHARGING')
        }, {
            value: 'LIFT_UP',
            label: translate('page.map.insight.control.type.LIFT_UP')
        }, {
            value: 'LIFT_DOWN',
            label: translate('page.map.insight.control.type.LIFT_DOWN')
        }, {
            value: 'CANCEL_TASK',
            label: translate('page.map.insight.control.type.CANCEL_TASK')
        }] : []),
@@ -60,6 +66,18 @@
    const onSubmit = (data) => {
        if (curAgvNo) {
            if (data.taskMode === 'LIFT_UP') {
                handleLiftUpAgv({ agvNo: curAgvNo }, () => {
                });
                return;
            }
            if (data.taskMode === 'LIFT_DOWN') {
                handleLiftDownAgv({ agvNo: curAgvNo }, () => {
                });
                return;
            }
            if (data.taskMode === 'CANCEL_TASK') {
                handleCancelTaskAgv({ agvNo: curAgvNo }, () => {
zy-acs-manager/src/main/java/com/zy/acs/manager/core/HandlerController.java
@@ -529,6 +529,71 @@
        return R.ok("取消任务指令已发送");
    }
    @PreAuthorize("hasAuthority('manager:agv:update')")
    @PostMapping("/control/agv/load/lift/up")
    public R liftAgvLoadPlatform(@RequestHeader String appKey,
                                 @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(param.getAgvNo(), appKey)) {
            return R.error();
        }
        if (!APP_KEY.equals(appKey)) {
            return R.error();
        }
        Agv agv = agvService.selectByUuid(param.getAgvNo());
        if (agv == null) {
            return R.error("AGV不存在");
        }
        if (!agvService.judgeEnable(agv.getId())) {
            log.info("{}号AGV不可用,举升失败...", agv.getUuid());
            return R.error();
        }
        AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
        if (agvModel == null || !AgvModelType.UNDERDRIVE_AGV.toString().equals(agvModel.getType())) {
            return R.error("当前AGV车型不支持载货台举升");
        }
        if (!hikInstantActionPublishService.support(agv.getId())) {
            return R.error("当前AGV协议不支持载货台举升");
        }
        if (agvModel.getLiftHeight() == null) {
            return R.error("当前AGV车型未配置举升高度");
        }
        hikInstantActionPublishService.publishPick(agv.getUuid(), agvModel.getLiftHeight() / 1000D);
        return R.ok("载货台举升指令已发送");
    }
    @PreAuthorize("hasAuthority('manager:agv:update')")
    @PostMapping("/control/agv/load/lift/down")
    public R downAgvLoadPlatform(@RequestHeader String appKey,
                                 @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(param.getAgvNo(), appKey)) {
            return R.error();
        }
        if (!APP_KEY.equals(appKey)) {
            return R.error();
        }
        Agv agv = agvService.selectByUuid(param.getAgvNo());
        if (agv == null) {
            return R.error("AGV不存在");
        }
        if (!agvService.judgeEnable(agv.getId())) {
            log.info("{}号AGV不可用,下放失败...", agv.getUuid());
            return R.error();
        }
        AgvModel agvModel = agvModelService.getByAgvId(agv.getId());
        if (agvModel == null || !AgvModelType.UNDERDRIVE_AGV.toString().equals(agvModel.getType())) {
            return R.error("当前AGV车型不支持载货台下降");
        }
        if (!hikInstantActionPublishService.support(agv.getId())) {
            return R.error("当前AGV协议不支持载货台下降");
        }
        hikInstantActionPublishService.publishDrop(agv.getUuid());
        return R.ok("载货台下降指令已发送");
    }
    @RequestMapping(value = "/restore/agv", method = {RequestMethod.GET, RequestMethod.POST})
    public R restoreAgv(@RequestHeader String appKey, @RequestBody HandlerPublishParam param) {
        if (Cools.isEmpty(appKey)) {
zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/hik/HikInstantActionPublishService.java
@@ -36,7 +36,6 @@
    private SnowflakeIdWorker snowflakeIdWorker;
    @Autowired
    private AgvModelService agvModelService;
    public boolean support(Long agvId) {
        AgvModel agvModel = agvModelService.getByAgvId(agvId);
        if (agvModel == null || Cools.isEmpty(agvModel.getProtocol())) {
@@ -59,6 +58,20 @@
        }
        publish(agvNo, buildStopChargingAction(), "stopCharging");
    }
    public void publishPick(String agvNo, Double heightMeters) {
        if (Cools.isEmpty(agvNo) || heightMeters == null) {
            throw new CoolException("pick params can not be blank");
        }
        publish(agvNo, buildPickAction(heightMeters), "pick");
    }
    public void publishDrop(String agvNo) {
        if (Cools.isEmpty(agvNo)) {
            throw new CoolException("drop params can not be blank");
        }
        publish(agvNo, buildDropAction(), "drop");
    }
    private HkAction buildCancelOrderAction() {
@@ -85,6 +98,36 @@
        return action;
    }
    private HkAction buildPickAction(Double heightMeters) {
        HkAction action = new HkAction();
        action.setActionId("pick-" + snowflakeIdWorker.nextId());
        action.setActionType(HkActionType.PICK);
        action.setBlockingType(HkBlockingType.HARD);
        List<HkActionParameter> parameters = new ArrayList<>();
        addParameter(parameters, "loadId", "");
        addParameter(parameters, "loadType", "0");
//        addParameter(parameters, "height", heightMeters);
//        addParameter(parameters, "precision", 0.02);
        action.setActionParameters(parameters);
        return action;
    }
    private HkAction buildDropAction() {
        HkAction action = new HkAction();
        action.setActionId("drop-" + snowflakeIdWorker.nextId());
        action.setActionType(HkActionType.DROP);
        action.setBlockingType(HkBlockingType.HARD);
        List<HkActionParameter> parameters = new ArrayList<>();
        addParameter(parameters, "loadId", "");
        addParameter(parameters, "loadType", "0");
//        addParameter(parameters, "precision", 0.02);
//        addParameter(parameters, "tabZero", Boolean.FALSE);
        action.setActionParameters(parameters);
        return action;
    }
    private void publish(String agvNo, HkAction action, String actionName) {
        HkInstantActionMessage message = new HkInstantActionMessage();
        message.setHeaderId(snowflakeIdWorker.nextId());
@@ -102,4 +145,14 @@
        log.info("push hik {} instant action to redis, agvNo={}, redisKey={}",
                actionName, agvNo, RedisConstant.HK_AGV_INSTANT_ACTION_DOWN_FLAG);
    }
    private void addParameter(List<HkActionParameter> parameters, String key, Object value) {
        if (value == null) {
            return;
        }
        HkActionParameter parameter = new HkActionParameter();
        parameter.setKey(key);
        parameter.setValue(value);
        parameters.add(parameter);
    }
}