自动化立体仓库 - WMS系统
skyouc
1 天以前 b4c6f129662be7fb14f71235817a24e15f824449
AGV呼叫,回传功能优化
1个文件已添加
7个文件已修改
192 ■■■■■ 已修改文件
src/main/java/com/zy/api/controller/AgvScheduleController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java 110 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/BasStation.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/enums/TaskStatusType.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/controller/AgvScheduleController.java
@@ -31,9 +31,6 @@
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getType())) {
            return R.error("搬运类型不能为空!!");
        }
        return agvScheduleService.callAgvCarry(params);
    }
src/main/java/com/zy/api/service/impl/AgvScheduleServiceImpl.java
@@ -15,6 +15,7 @@
import com.zy.asrs.entity.result.HIKResultDTO;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.enums.TaskIOType;
import com.zy.asrs.enums.TaskStatusType;
import com.zy.asrs.service.ApiLogService;
import com.zy.asrs.service.LocCacheService;
import com.zy.asrs.service.TaskService;
@@ -24,8 +25,10 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
@@ -48,47 +51,80 @@
     * @version 1.0
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R callAgvCarry(CallAgvParams params) {
        if (params.getType().equals(OrderType.ORDER_OUT.type)) {
            //缓存区出库
        } else if (params.getType().equals(OrderType.ORDER_IN.type)) {
            //缓存区入库
        } else {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getWrkNo())) {
            return R.error("任务号不能为空!!");
        }
        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
        if (Objects.isNull(task)) {
            return R.error("任务信息不存在!!");
        }
        if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
                .contains(task.getIoType())) {
            // 入库
            task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_IN.type);
        } else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type)
                .contains(task.getIoType())) {
            // 出库
            task.setWrkSts(TaskStatusType.AGV_TASK_ISSUED_OUT.type);
        }
        if (!taskService.updateById(task)) {
            throw new CoolException("任务状态更新失败!!");
        }
        return R.ok();
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R callback(CallAgvParams params) {
        //TODO 1. 搬运完成,修改站点库位状态
        if (params.getType().equals(OrderType.ORDER_OUT.type)) {
            //出库单
            if (params.getStatus().equals("RUNING")) {
                LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", params.getOrgLoc()));
                if (Objects.isNull(locCache)) {
                    throw new CoolException("库位信息不存在!!");
                }
                if (!locCache.getLocSts().equals(LocStsType.LOC_STS_TYPE_O.type)) {
                    locCache.setLocSts(LocStsType.LOC_STS_TYPE_O.type);
                }
            } else if (params.getStatus().equals("FINISHED")) {
                Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
                if (Objects.isNull(task)) {
                    throw new CoolException("任务信息不存在!!");
                }
                if (!taskService.updateById(task)) {
                    throw new CoolException("任务状态更新失败!!");
                }
            }
        } else {
            //入库单
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        if (Objects.isNull(params.getWrkNo())) {
            return R.error("任务号不能为空!!");
        }
        Task task = taskService.selectOne(new EntityWrapper<Task>().eq("wrk_no", params.getWrkNo()));
        if (Objects.isNull(task)) {
            return R.error("任务信息不存在!!");
        }
        return null;
    }
//        if (!Arrays.asList(TaskStatusType.AGV_TASK_ISSUED_IN.type, TaskStatusType.AGV_TASK_ISSUED_OUT.type).contains(task.getIoType())) {
//            return R.error("");
//        }
//
        if (Arrays.asList(TaskIOType.ALL_IN.type, TaskIOType.PICK_IN.type, TaskIOType.MERGE_IN.type)
                .contains(task.getIoType())) {
            // 入库
            if (params.getStatus().equals("RUNNING")) {
                task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_IN.type);
            } else if (params.getStatus().equals("FINISHED")){
                task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_IN.type);
            }
        } else if (Arrays.asList(TaskIOType.ALL_OUT.type, TaskIOType.PICK_OUT.type, TaskIOType.MERGE_OUT.type)
                .contains(task.getIoType())) {
            // 出库
            if (params.getStatus().equals("RUNNING")) {
                task.setWrkSts(TaskStatusType.AGV_TASK_RUNNING_OUT.type);
            } else if (params.getStatus().equals("FINISHED")){
                task.setWrkSts(TaskStatusType.AGV_TASK_FINISHED_OUT.type);
            }
        }
        if (!taskService.updateById(task)) {
            throw new CoolException("状态修改失败!!");
        }
        return R.ok("执行完成 !!");
    }
    public HIKResultDTO sendAgvTask(HIKApiDTO haiKangApiDTO, String path) {
        HIKResultDTO result = new HIKResultDTO();
@@ -99,8 +135,10 @@
        forwardAGVTaskParam.setCtnrTyp(haiKangApiDTO.getCtnrType());
        forwardAGVTaskParam.setPriority(haiKangApiDTO.getPriority());
        List<ForwardAGVTaskDTO.PositionCodePaths> positionCodePathsList = new ArrayList<>();
        positionCodePathsList.add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getOrg(), haiKangApiDTO.getOrgType()));
        positionCodePathsList.add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getTar(), haiKangApiDTO.getTarType()));
        positionCodePathsList
                .add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getOrg(), haiKangApiDTO.getOrgType()));
        positionCodePathsList
                .add(new ForwardAGVTaskDTO.PositionCodePaths(haiKangApiDTO.getTar(), haiKangApiDTO.getTarType()));
        forwardAGVTaskParam.setPositionCodePath(positionCodePathsList);
        String body = JSON.toJSONString(forwardAGVTaskParam);
        String response = "";
@@ -118,7 +156,7 @@
                result.setMessage(jsonObject.getString("message"));
                log.error("发送agv任务失败!!!url:{};request:{};response:{}", HIKApiConstant.AGV_IP + path, body, response);
            }
//            {"code":"1","data":"","interrupt":false,"message":"重复提交","msgErrCode":"0x3a80D012","reqCode":"fa92b49481a44627ae4d80c1400f28f6"}
            // {"code":"1","data":"","interrupt":false,"message":"重复提交","msgErrCode":"0x3a80D012","reqCode":"fa92b49481a44627ae4d80c1400f28f6"}
        } catch (Exception e) {
            result.setMessage(e.getMessage());
            log.error("发送agv任务异常", e);
@@ -132,14 +170,12 @@
                        "127.0.0.1",
                        body,
                        response,
                        result.isSuccess()
                );
                        result.isSuccess());
            } catch (Exception e) {
                log.error("", e);
            }
        }
        return result;
    }
}
src/main/java/com/zy/asrs/entity/BasStation.java
@@ -311,17 +311,17 @@
            return null;
        }
        if (this.locSts.equals(LocStsType.LOC_STS_TYPE_O.type)) {
            return LocStsType.LOC_STS_TYPE_O.type +  "." +  LocStsType.LOC_STS_TYPE_O.desc;
            return  LocStsType.LOC_STS_TYPE_O.desc;
        } else if (this.locSts.equals(LocStsType.LOC_STS_TYPE_R.type)) {
            return LocStsType.LOC_STS_TYPE_R.type +  "." +  LocStsType.LOC_STS_TYPE_R.desc;
            return  LocStsType.LOC_STS_TYPE_R.desc;
        } else if (this.locSts.equals(LocStsType.LOC_STS_TYPE_S.type)) {
            return LocStsType.LOC_STS_TYPE_S.type +  "." +  LocStsType.LOC_STS_TYPE_S.desc;
            return  LocStsType.LOC_STS_TYPE_S.desc;
        } else if (this.locSts.equals(LocStsType.LOC_STS_TYPE_F.type)) {
            return LocStsType.LOC_STS_TYPE_F.type +  "." +  LocStsType.LOC_STS_TYPE_F.desc;
            return  LocStsType.LOC_STS_TYPE_F.desc;
        } else if (this.locSts.equals(LocStsType.LOC_STS_TYPE_X.type)) {
            return LocStsType.LOC_STS_TYPE_X.type +  "." +  LocStsType.LOC_STS_TYPE_X.desc;
            return LocStsType.LOC_STS_TYPE_X.desc;
        } else if (this.locSts.equals(LocStsType.LOC_STS_TYPE_D.type)) {
            return LocStsType.LOC_STS_TYPE_D.type +  "." +  LocStsType.LOC_STS_TYPE_D.desc;
            return LocStsType.LOC_STS_TYPE_D.desc;
        }
        return null;
    }
src/main/java/com/zy/asrs/enums/TaskStatusType.java
New file
@@ -0,0 +1,40 @@
package com.zy.asrs.enums;
/**
 * 工作状态枚举
 * 根据WrkStaus表生成对应枚举信息
 */
public enum TaskStatusType {
    IN_START("1", "1.生成入库ID"),
    DEVICE_MOVE("2", "2.设备上走"),
    CRANE_IN_PROGRESS("3", "3.吊车入库中"),
    INBOUND_COMPLETED("4", "4.入库完成"),
    INBOUND_ARCHIVED("5", "5.库存更新完成"),
    DEVICE_EXIT("6", "6.设备上退出"),
    OUT_START("11", "11.生成出库ID"),
    CRANE_OUT_PROGRESS("12", "12.吊车出库中"),
    CRANE_EMPTY_OUT_ERROR("13", "13.吊车空出库错误"),
    OUTBOUND_COMPLETED("14", "14.已出库未确认"),
    OUTBOUND_ARCHIVED("15", "15.出库更新完成"),
    AGV_IN_START("201", "201.生成入库ID"),
    AGV_TASK_ISSUED_IN("202", "202.任务下发成功"),
    AGV_TASK_RUNNING_IN("203", "203.任务执行中"),
    AGV_TASK_FINISHED_IN("204", "204.任务执行完成"),
    AGV_INVENTORY_UPDATED_IN("205", "205.库存更新完成"),
    AGV_OUT_START("301", "301.生成出库ID"),
    AGV_TASK_ISSUED_OUT("302", "302.任务下发成功"),
    AGV_TASK_RUNNING_OUT("303", "303.任务执行中"),
    AGV_TASK_FINISHED_OUT("304", "304.任务执行完成"),
    AGV_INVENTORY_UPDATED_OUT("305", "305.库存更新完成"),
    ;
    public Long type;
    public String desc;
    TaskStatusType(String type, String desc) {
        this.type = Long.valueOf(type);
        this.desc = desc;
    }
}
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -2304,7 +2304,7 @@
        Task task = new Task();
        task.setWrkNo(workNo)
                .setIoTime(new Date())
                .setWrkSts(11L) // 工作状态:11.生成出库ID
                .setWrkSts(301L) // 工作状态:11.生成出库ID
                .setIoType(loc.getLocSts().equals("D") ? 110 : 101) // 入出库状态: 11.库格移载
                .setTaskType("agv")
                .setIoPri(10D)
@@ -2396,7 +2396,7 @@
        Task task = new Task();
        task.setWrkNo(workNo)
                .setIoTime(new Date())
                .setWrkSts(1L) // 工作状态:11.生成出库ID
                .setWrkSts(201L) // 工作状态:11.生成出库ID
                .setIoType(1) // 入出库状态: 11.库格移载
                .setTaskType("agv")
                .setIoPri(10D)
src/main/java/com/zy/asrs/task/handler/WorkLogHandler.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.zy.asrs.entity.*;
import com.zy.asrs.enums.TaskStatusType;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -154,7 +155,7 @@
            }
            // 入库 --------------------------------------------------------------------------------
            if (task.getWrkSts() == 5) {
            if (task.getWrkSts().equals(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type)) {
                // 全板入库
                if (task.getIoType() == 1) {
                    // 入库通知单
@@ -184,7 +185,7 @@
                }
                // 出库 --------------------------------------------------------------------------------
            } else if (task.getWrkSts() == 15) {
            } else if (task.getWrkSts().equals(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type)) {
//                if (!Cools.isEmpty(wrkDetls)) {
//                    if (!orderService.saveHandlerOrder(Boolean.FALSE, wrkMast, wrkDetls)) {
//                        exceptionHandle("生成手动出库单据[workNo={0}]失败", wrkMast.getWrkNo());
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -7,6 +7,7 @@
import com.zy.asrs.enums.LocAreaType;
import com.zy.asrs.enums.LocStsType;
import com.zy.asrs.enums.TaskIOType;
import com.zy.asrs.enums.TaskStatusType;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.*;
import com.zy.asrs.task.AbstractHandler;
@@ -727,10 +728,10 @@
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> AgvStart(Task task) {
        // 4.入库完成
        if (task.getWrkSts() == 4) {
        if (task.getWrkSts().equals(TaskStatusType.AGV_TASK_FINISHED_IN.type)) {
            return agvDoIn(task);
            // 14.出库完成
        } else if (task.getWrkSts() == 14) {
        } else if (task.getWrkSts().equals(TaskStatusType.AGV_TASK_FINISHED_OUT.type)) {
            return agvDoOut(task);
        }
        return SUCCESS;
@@ -828,7 +829,7 @@
                throw new CoolException("当前库位状态" + locMast.getLocSts() + ", 无法执行出库操作!!");
            }
            task.setWrkSts(15L);
            task.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type);
            if (!taskService.updateById(task)) {
                throw new CoolException("任务状态修改失败!!");
            }
@@ -864,7 +865,7 @@
            if (!basStationService.updateById(devNo)) {
                throw new CoolException("站点信息修改失败!!");
            }
            task.setWrkSts(15L);
            task.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_OUT.type);
            if (!taskService.updateById(task)) {
                throw new CoolException("任务状态修改失败!!");
            }
@@ -877,7 +878,6 @@
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> agvDoIn(Task wrkMast) {
        LocCache locCache = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
        if (!Objects.isNull(wrkMast.getSourceStaNo())) {
            BasStation station = basStationService.selectOne(new EntityWrapper<BasStation>()
                    .eq("dev_no", wrkMast.getSourceStaNo()));
@@ -963,7 +963,7 @@
            if (!locCacheService.updateById(locCache)) {
                throw new CoolException("库位状态修改失败!");
            }
            wrkMast.setWrkSts(5L);
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
            wrkMast.setModiTime(new Date());
            if (!taskService.updateById(wrkMast)) {
                throw new CoolException("任务状态修改失败!!");
@@ -1058,7 +1058,7 @@
            }
            // 修改工作主档状态
            wrkMast.setWrkSts(5L);
            wrkMast.setWrkSts(TaskStatusType.AGV_INVENTORY_UPDATED_IN.type);
            wrkMast.setModiTime(now);
            if (!taskService.updateById(wrkMast)) {
                // exceptionHandle("更新入库完成状态失败;[workNo={0}]", wrkMast.getWrkNo());
src/main/resources/mapper/TaskMapper.xml
@@ -9,13 +9,13 @@
    </resultMap>
    <select id="selectToBeCompleteData" resultType="com.zy.asrs.entity.Task">
        select * from agv_task where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no
        select * from agv_task where ((wrk_sts = 204 Or wrk_sts = 304 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no
    </select>
    <select id="selectToBeHistoryData" resultType="com.zy.asrs.entity.Task">
        select * from agv_task
        where wrk_sts=5 or wrk_sts=15
        where wrk_sts=205 or wrk_sts=305
        order by io_time,wrk_no asc
    </select>