自动化立体仓库 - WMS系统
zyx
2024-04-01 2d836c8b6a270b7007e1a2e1e9962cb9dcd8b6f6
入库接驳位空板自动出库
全班出库后自动空板入库
10个文件已修改
171 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/AgvBasDevpController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvMobileController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvOpenController.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvLocMastService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/AgvWorkService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java 22 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/entity/Parameter.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/AgvBasDevpController.java
@@ -6,7 +6,10 @@
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.annotations.ManagerAuth;
import com.core.common.*;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.LocMastInitParam;
@@ -15,7 +18,6 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@@ -238,26 +240,31 @@
//            return agvWrkMast;
//        }).collect(Collectors.toList());
        try {
           int code = agvWrkMastService.containerMoveOut(agvWrkMastList);
           if(code == 0){
               //将工作党状态改为容器离场
               agvWrkMastList.forEach(agvWrkMast -> {
                   agvWrkMast.setWrkSts(206L);
                   agvWrkMastService.updateById(agvWrkMast);
               });
               //修改站点状态
//               devNos.forEach(devNo -> {
//                   AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo);
//                   agvBasDevp.setBarcode("");
//                   agvBasDevp.setLocSts("O");
//                   agvBasDevpService.updateById(agvBasDevp);
        agvWrkMastList.forEach(agvWrkMast -> {
            agvWrkMast.setWrkSts(206L);
            agvWrkMastService.updateById(agvWrkMast);
        });
//        try {
//           int code = agvWrkMastService.containerMoveOut(agvWrkMastList);
//           if(code == 0){
//               //将工作党状态改为容器离场
//               agvWrkMastList.forEach(agvWrkMast -> {
//                   agvWrkMast.setWrkSts(206L);
//                   agvWrkMastService.updateById(agvWrkMast);
//               });
           }
        } catch (IOException e) {
            e.printStackTrace();
            return R.error("容器离场失败");
        }
//               //修改站点状态
////               devNos.forEach(devNo -> {
////                   AgvBasDevp agvBasDevp = agvBasDevpService.selectById(devNo);
////                   agvBasDevp.setBarcode("");
////                   agvBasDevp.setLocSts("O");
////                   agvBasDevpService.updateById(agvBasDevp);
////               });
//           }
//        } catch (IOException e) {
//            e.printStackTrace();
//            return R.error("容器离场失败");
//        }
        return R.ok("容器离场成功");
    }
src/main/java/com/zy/asrs/controller/AgvMobileController.java
@@ -105,7 +105,7 @@
        for (AgvMobileStartParam.Pda pda : params.getPad()) {
            pda.setContainerType(Short.valueOf(pda.getContainerCode().substring(0,2)));
            workService.emptyPlateIn(pda.getDevNo(),pda.getContainerCode(),pda.getContainerType(), getUserId());
            workService.emptyPlateIn(pda.getDevNo(),pda.getContainerCode(),pda.getContainerType(), getUserId(),false);
        }
        return R.ok();
@@ -138,4 +138,5 @@
    }
}
src/main/java/com/zy/asrs/controller/AgvOpenController.java
@@ -112,17 +112,13 @@
enum AgvTask{
    /**
     * 上报任务状态
     * 上报任务完成
     */
    end{
        @Transactional
        public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) {
            //修改AGV工作档的工作状态为205.工作完成
            agvWrkMast.setWrkSts(205L);
            //agvWrkMast.setLocNo(param.getLocationCode());
            agvWrkMastService.updateById(agvWrkMast);
            //agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205);
            //出库任务 101.出库 || 103.拣料出库 || 107.盘点出库
            if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){
@@ -132,7 +128,9 @@
            //出库任务 110.空板出库
            if(agvWrkMast.getIoType() == 110){
                agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode(),agvWrkMast.getWhsType().shortValue());
                agvWrkMast.setWrkSts(206L);
            }
            agvWrkMastService.updateById(agvWrkMast);
        }
    },
    /**
src/main/java/com/zy/asrs/service/AgvLocMastService.java
@@ -26,6 +26,8 @@
    AgvLocMast selectEmptyZpallet(int type);
    AgvLocMast selectEmptyZpalletByLocType1(int type);
    public List<String> queryContainerTypeByLocType1(Short locType1);
}
src/main/java/com/zy/asrs/service/AgvWorkService.java
@@ -39,7 +39,7 @@
    /*
    空板入库
     */
    String emptyPlateIn(String station,String containerCode,Short containerType, Long userId);
    String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn);
    void emptyPlateOut(String station, int containerType, Long userId);
src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java
@@ -243,6 +243,13 @@
    }
    @Override
    public AgvLocMast selectEmptyZpalletByLocType1(int type) {
        return this.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_sts","D").eq("loc_type1",type));
    }
    @Override
    public List<String> queryContainerTypeByLocType1(Short locType1) {
        return this.baseMapper.queryContainerTypeByLocType1(locType1);
    }
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -316,27 +316,19 @@
    入库
     */
    @Transactional
    public String emptyPlateIn(String station,String containerCode,Short containerType, Long userId) {
    public String emptyPlateIn(String station,String containerCode,Short containerType, Long userId, boolean emptyAutoIn) {
        Date now = new Date();
        // 源站点状态检测
        //AgvBasDevp agvBasDevp = agvBasDevpService.selectByDevNo(station);
        AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
        //初始定义为空板入库类型
        int ioType = 10;
//        if(Cools.isEmpty(agvBasDevp.getBarcode())){
//            agvBasDevp.setBarcode(containerCode);
//        }
        if(!Cools.eq(agvBasDevp.getBarcode(),containerCode) && !agvBasDevp.getLocSts().equals("O")){
        if(!Cools.eq(agvBasDevp.getBarcode(),containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn){
            throw new CoolException("当前工作位状态为" + agvBasDevp.getLocSts()+",无法进行空板入库");
        }
        //查询工作档
        AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
        if(!Cools.isEmpty(agvWrkMast)){
        if(!Cools.isEmpty(agvWrkMast) && !emptyAutoIn){
            throw new CoolException("当前容器已有入库任务,无法进行入库");
        }
@@ -388,6 +380,12 @@
        //寻找相应类型的空托盘
        AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType);
        if(containerType == 0){
            //空板自动出库,根据站点类型选择
            agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
        }
        if (Cools.isEmpty(agvLocMast)) {
            throw new CoolException("暂无当前出库站点类型的空托盘!");
        }
src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java
@@ -1,19 +1,23 @@
package com.zy.asrs.task;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.zy.asrs.entity.AgvBasDevp;
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.service.AgvBasDevpService;
import com.zy.asrs.service.AgvWrkMastService;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.AgvWrkMastHandler;
import com.zy.common.entity.Parameter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
@@ -137,4 +141,48 @@
            }
        }
    }
    /*
    自动生成空板出库任务
     */
    //@Scheduled(cron = "0/10 * * * * ? ")
    public void autoEmptyOut(){
        boolean packageEmptyAutoOUt = Cools.eq("Y",Parameter.get().getPackageEmptyAutoOUt());
        boolean mateEmptyAutoOut = Cools.eq("Y",Parameter.get().getMateEmptyAutoOut());
        boolean boxEmptyAutoOut = Cools.eq("Y",Parameter.get().getBoxEmptyAutoOut());
        if(!packageEmptyAutoOUt && !mateEmptyAutoOut && !boxEmptyAutoOut){
            return;
        }
        List<Integer> locType1Condition = new ArrayList<>();
        if(packageEmptyAutoOUt){
            locType1Condition.add(1);
        }
        if(mateEmptyAutoOut){
            locType1Condition.add(2);
        }
        if(boxEmptyAutoOut){
            locType1Condition.add(3);
        }
        //找出需要补料的站点
        Wrapper<AgvBasDevp> wrapper = new EntityWrapper<AgvBasDevp>()
                .eq("in_enable", "Y")
                .eq("loc_sts", "O")
                .in("loc_type1", locType1Condition);
        List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(wrapper);
        for (AgvBasDevp agvBasDevp : agvBasDevpList){
            try {
                agvWrkMastHandler.autoEmptyOut(agvBasDevp);
            }catch (Exception e){
                log.error(e.getMessage());
                e.printStackTrace();
            }
        }
    }
}
src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java
@@ -4,10 +4,7 @@
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.AgvLocDetl;
import com.zy.asrs.entity.AgvWaitPakin;
import com.zy.asrs.entity.AgvWrkDetl;
import com.zy.asrs.entity.AgvWrkMast;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
import com.zy.asrs.task.AbstractHandler;
import com.zy.asrs.task.core.ReturnT;
@@ -50,6 +47,8 @@
    private OrderService orderService;
    @Autowired
    private AgvBasDevpService agvBasDevpService;
    @Autowired
    private AgvWorkService agvWorkService;
    @Transactional
    public ReturnT<String> completedPutWayWrk(AgvWrkMast agvWrkMast) {
@@ -118,6 +117,9 @@
        if(agvWrkMast.getIoType() == 101){
            //更新目标库位明细 101.出库 删除源库位库存明细
            agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo()));
            //生成空板入库任务
            Short containerType = Short.valueOf(agvWrkMast.getBarcode().substring(0, 2));
            agvWorkService.emptyPlateIn(agvWrkMast.getLocNo(),agvWrkMast.getBarcode(),containerType,9527L,true);
        }
        //生成AGV工作历史档
@@ -203,6 +205,15 @@
        return SUCCESS;
    }
    @Synchronized
    @Transactional
    public ReturnT<String> autoEmptyOut(AgvBasDevp agvBasDevp) {
        agvWorkService.emptyPlateOut(agvBasDevp.getDevNo(),0,9527L);
        return SUCCESS;
    }
    private String getOrderNoByWrkNo(int wrkNo){
        AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo));
        if(Cools.isEmpty(agvWrkDetl)){
src/main/java/com/zy/common/entity/Parameter.java
@@ -66,4 +66,15 @@
    //机械臂自动补货开关
    private String autoReplenishment;
    //空板自动出库-包装
    private String packageEmptyAutoOUt;
    //空板自动出库-原材料
    private String mateEmptyAutoOut;
    //空板自动出库-箱壳
    private String boxEmptyAutoOut;
}