自动化立体仓库 - WMS系统
zyx
2024-03-27 1365b4833632f2d1c5fb346cd700e2e998010db6
回调任务更新
8个文件已修改
201 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvOpenController.java 135 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/param/AgvTaskCallBackParam.java 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvBasDevpService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvOpenController.java
@@ -72,22 +72,22 @@
        //save api log (appkey 后续添加)
        AppAuthUtil.auth("",param, request);
        int wrkNo = Integer.parseInt(param.getTaskCode());
        int wrkNo = Integer.parseInt(param.getReqCode());
        if(wrkNo < 0){
            wrkNo = -wrkNo;
        }
        AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("wrk_no", wrkNo));
        if(Cools.isEmpty(agvWrkMast)){
            agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",param.getContainerCode()));
            agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",param.getPodCode()));
            if (Cools.isEmpty(agvWrkMast)){
                return R.error("任务编号错误");
            }
        }
        AgvTask agvTask = AgvTask.valueOf(param.getEventType());
        AgvTask agvTask = AgvTask.valueOf(param.getMethod());
        Class<AgvTask> clz = AgvTask.class;
        try {
            Method method = clz.getDeclaredMethod(param.getStatus(), AgvWrkMast.class, AgvTaskCallBackParam.class);
            Method method = clz.getDeclaredMethod("success", AgvWrkMast.class, AgvTaskCallBackParam.class);
            method.invoke(agvTask,agvWrkMast,param);
        } catch (NoSuchMethodException e) {
            return R.error("任务状态status参数有误");
@@ -114,14 +114,12 @@
    /**
     * 上报任务状态
     */
    task{
    end{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
            //修改AGV工作档的工作状态为205.工作完成
            agvWrkMast.setWrkSts(205L);
            if(param.getLocationCode().contains("@")){
                agvWrkMast.setLocNo(param.getLocationCode());
            }
            //agvWrkMast.setLocNo(param.getLocationCode());
            agvWrkMastService.updateById(agvWrkMast);
            //agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205);
@@ -129,83 +127,47 @@
            //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库
            if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){
                //修改出库站点状态
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode());
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
            }
            //出库任务 110.空板出库
            if(agvWrkMast.getIoType() == 110){
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode());
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
            }
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    /**
     * 上报任务分配给机器人
     */
    task_allocated{
    start{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    /**
     * 上报取箱状态
     */
    tote_load{
    outbin{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
            //入库任务 || 拣料入库任务 ||盘点再入库 ||空板入库
            if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53 || agvWrkMast.getIoType() == 57 || agvWrkMast.getIoType() == 10){
                //修改源站点状态为O.空,以及解绑托盘条码
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","");
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O","",null);
            }
            //修改AGV工作档的工作状态为203.RCS放货中
            agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),203);
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    /**
     * 上报放箱状态
     */
    tote_unload{
    cancel{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
            //修改工作档状态为204.放货完成
@@ -216,81 +178,22 @@
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    robot_reach{
    apply{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    weight{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    },
    rfid{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
        public void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
        }
    };
    //任务状态为成功
    public abstract void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
    //任务状态为失败
    public abstract void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
    //任务状态为取消
    public abstract void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
    //任务状态为挂起
    public abstract void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
//    //任务状态为失败
//    public abstract void fail(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
//    //任务状态为取消
//    public abstract void cancel(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
//    //任务状态为挂起
//    public abstract void suspend(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param);
    @Setter
    AgvBasDevpService agvBasDevpService;
src/main/java/com/zy/asrs/entity/param/AgvTaskCallBackParam.java
@@ -3,45 +3,27 @@
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class AgvTaskCallBackParam implements Serializable {
    private static final long serialVersionUID = 1L;
    //业务任务号
    private String taskCode;
    //上报事件类型
    private String eventType;
    //请求编号
    private String reqCode;
    //任务状态
    private String status;
    private String method;
    //机器人编码
    //AGV编号
    private String robotCode;
    //容器编码
    private String containerCode;
    //货架编号
    private String podCode;
    //工作位编码
    private String locationCode;
    //当前位置编号
    private String currentPositionCode;
    //工作站编码
    private String stationCode;
    //工作位
    private String wbCode;
    //描述信息,描述异常原因/挂起原因等
    private String message;
    //库位是否有容器,盘点任务才会返回该值
    private boolean isLocationHasContainer;
    //背篓层号,从 0 层开始,从下往上编号。64 表示放在了货叉上
    private int trayLevel;
    //重量,单位为 g,仅限于重量盘点
    private int weight;
    //rfid 盘点信息,仅限于 rfid 盘点
    private List<String> rfidInfo;
}
src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java
@@ -24,6 +24,9 @@
    @Select("select station_code from agv_bas_devp where cache_shelves = 'N' and in_enable = 'Y' group by station_code")
    List<String> selectCacheShelvesStationCodeByFloor(@Param("floor") int floor);
    @Select("select dev_no from agv_bas_devp where loc_type1 = #{locType}")
    List<String> selectCacheShelvesStationCodeByLocType(@Param("locType") Short locType);
    @Select("SELECT\n" +
            "\tbas.dev_no,\n" +
            "\tCOUNT ( mast.loc_no ) AS num \n" +
src/main/java/com/zy/asrs/service/AgvBasDevpService.java
@@ -12,7 +12,7 @@
    public void initBasDevp();
    public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode);
    public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode, Short containerType);
    public Map<String, Object> getAgvBasDevpDtoByStationCode(String stationCode);
@@ -25,6 +25,7 @@
    List<AgvBasDevp> getBasDevpByNoCacheShelves();
    List<String> selectCacheShelvesStationCodeByFloor(int floor);
    List<String> selectCacheShelvesStationCodeByLocType(short locType);
    public List<Map<String,Object>> selectDevNoAndNumBystationCode(String stationCode);
src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java
@@ -84,11 +84,12 @@
        return agvBasDevp;
    }
    public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode){
    public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode, Short containerType){
        AgvBasDevp agvBasDevp = this.selectById(devNo);
        agvBasDevp.setLocSts(locSts);
        agvBasDevp.setBarcode(barcode);
        agvBasDevp.setLocType2(containerType);
        this.updateById(agvBasDevp);
    }
@@ -263,6 +264,11 @@
        return this.baseMapper.selectCacheShelvesStationCodeByFloor(floor);
    }
    @Override
    public List<String> selectCacheShelvesStationCodeByLocType(short locType) {
        return this.baseMapper.selectCacheShelvesStationCodeByLocType(locType);
    }
    public List<Map<String,Object>> selectDevNoAndNumBystationCode(String stationCode){
        return this.baseMapper.selectDevNoAndNumBystationCode(stationCode);
    }
src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java
@@ -93,7 +93,7 @@
                //当前库位所处楼层
                int floor = Integer.parseInt(agvLocDetl.getLocNo().split("@")[1]);
                //locDto.setAgvStaNos(queryAgvStaNosByFloor(floor));
                locDto.setAgvStaNos(agvBasDevpService.selectCacheShelvesStationCodeByFloor(floor));
                locDto.setAgvStaNos(agvBasDevpService.selectCacheShelvesStationCodeByLocType(agvLocMast.getLocType1()));
                locDtoList.add(locDto);
                issued -= anfme;
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -548,11 +548,11 @@
        //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库
        if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){
            //修改出库站点状态
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
        }
        //出库任务 110.空板出库
        if(wrkMast.getIoType() == 110){
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode());
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
        }
    }
@@ -575,7 +575,7 @@
            //目标库位
            String locNo = wrkMast.getLocNo();
            agvLocMastService.updateLocStsByLocNo(locNo,"O","",null);
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode());
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode(),wrkMast.getWhsType().shortValue());
            //出库取消
        }else {
@@ -585,7 +585,7 @@
            String devNo = wrkMast.getLocNo();
            agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode(),(short)getContainerTypeByloc(locNo));
            if(devNo.contains("@")){
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","");
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O","",null);
            }
        }
src/main/java/com/zy/common/web/WcsController.java
@@ -595,7 +595,7 @@
        //拣料、盘点完成任务
        if(!Cools.isEmpty(agvWrkMast) && (agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107) && agvWrkMast.getWrkSts() == 205){
            //绑定站点
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",containerCode);
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",containerCode,agvWrkMast.getWhsType().shortValue());
            //生成拣料、盘点再入库任务
            List<AgvWrkMast> agvWrkMastList = new ArrayList<>();
@@ -610,7 +610,7 @@
        //入库任务
        if (!Cools.isEmpty(agvWaitPakinService.selectByContainerCode(containerCode))){
            //绑定站点
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",containerCode);
            agvBasDevpService.updateLocStsAndBarcodeByDevNo(param.getDevNo(),"F",containerCode,agvWrkMast.getWhsType().shortValue());
            //生成工作档
            List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("dev_no", param.getDevNo()));
            agvWorkService.createWaitPainWrkMastStart(agvBasDevpList, null, true);