自动化立体仓库 - WMS系统
#
1
1 天以前 c63696bec5666ad3064dd72636420e3980ade34f
#
8个文件已修改
161 ■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/OpenController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/constant/AgvConstant.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/OpenController.java
@@ -578,7 +578,7 @@
    @Async
    public void agvBindAndBin(String taskNo) {
        try {
            Thread.sleep(500);
            Thread.sleep(1000);
            openService.agvBindAndBin(taskNo);
        } catch (Exception e) {
            log.error("异步处理AGV搬运后续逻辑失败", e);
src/main/java/com/zy/asrs/service/impl/MobileServiceImpl.java
@@ -11,9 +11,11 @@
import com.zy.asrs.mapper.LocMastMapper;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
import com.zy.common.constant.AgvConstant;
import com.zy.common.constant.MesConstant;
import com.zy.common.entity.Parameter;
import com.zy.common.model.DetlDto;
@@ -22,6 +24,7 @@
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.erp.kingdee.utils.PostMesDataUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -587,6 +590,10 @@
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(),  elem.getAnfme());
                detlDto.setMemo(elem.getMemo());
                detlDto.setSupp(elem.getSupp());
                detlDto.setManu(elem.getManu());
                detlDto.setSuppCode(elem.getSuppCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -613,6 +620,10 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                waitPakin.setSupp(detlDto.getSupp());
                waitPakin.setSuppCode(detlDto.getSuppCode());
                waitPakin.setManu(detlDto.getManu());
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
                waitPakin.setStandby3(detlDto.getStandby3());
@@ -645,6 +656,10 @@
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(),  elem.getAnfme());
                detlDto.setMemo(elem.getMemo());
                detlDto.setSupp(elem.getSupp());
                detlDto.setManu(elem.getManu());
                detlDto.setSuppCode(elem.getSuppCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -670,17 +685,21 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                waitPakin.setSupp(detlDto.getSupp());
                waitPakin.setSuppCode(detlDto.getSuppCode());
                waitPakin.setManu(detlDto.getManu());
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
                waitPakin.setStandby3(detlDto.getStandby3());
                waitPakin.setBoxType1(detlDto.getBoxType1());
                waitPakin.setBoxType2(detlDto.getBoxType2());
                waitPakin.setBoxType3(detlDto.getBoxType3());
                waitPakin.setMemo(detlDto.getMemo());
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
            }
//            orderService.updateSettle(order.getId(), 2L, userId);
            OrderInAndOutUtil.updateOrder(Boolean.TRUE,order.getId(), 2L, userId);
        }
@@ -689,7 +708,7 @@
    @Override
    @Transactional
    public void combAgv(CombParam param, Long userId) {
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats(),param.getLocNo())) {
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            throw new CoolException(BaseRes.PARAM);
        }
//        if(param.getCombMats().size()>1){
@@ -715,20 +734,30 @@
        if (countLoc > 0 || countWrk > 0 || countwait > 0) {
            throw new CoolException("组托档/工作档/库存条码数据已存在===>>" + param.getBarcode());
        }
        if(locMast == null){
            throw new CoolException("不存在该库位" + param.getLocNo());
        }
        Date now = new Date();
        boolean allEmpty = true;
        if (param.getCombMats() != null) {
            for (CombParam.CombMat mat : param.getCombMats()) {
                if (!Cools.isEmpty(mat.getOrderNo())) {
                    allEmpty = false;
                    break;
                }
            }
        }
        // 无单组托
        if (Cools.isEmpty(param.getOrderNo())) {
        if (allEmpty) {
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(),  elem.getAnfme());
                detlDto.setMemo(elem.getMemo());
                detlDto.setSupp(elem.getSupp());
                detlDto.setManu(elem.getManu());
                detlDto.setSuppCode(elem.getSuppCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -755,6 +784,10 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                waitPakin.setSupp(detlDto.getSupp());
                waitPakin.setSuppCode(detlDto.getSuppCode());
                waitPakin.setManu(detlDto.getManu());
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
                waitPakin.setStandby3(detlDto.getStandby3());
@@ -768,7 +801,7 @@
            // 关联组托
        } else {
//            Order order = orderService.selectByNo(param.getOrderNo());
            Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, param.getOrderNo());
            Order order = OrderInAndOutUtil.selectByNo(Boolean.TRUE, param.getCombMats().get(0).getOrderNo());
            if (Cools.isEmpty(order) || order.getSettle() > 2) {
                throw new CoolException("单据编号已过期");
            }
@@ -783,14 +816,14 @@
                if (elem.getAnfme() > orderDetl.getEnableQty()) {
                    throw new CoolException(orderDetl.getMatnr() + "入库数量不合法");
                }
                // 修改订单作业数量
//                if (!orderDetlService.increaseWorkQty(order.getId(), elem.getMatnr(), elem.getBatch(), elem.getAnfme())) {
//                    throw new CoolException("修改单据作业数量失败");
//                }
                OrderInAndOutUtil.increaseWorkQty(Boolean.TRUE,order.getId(), elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(), elem.getAnfme());
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(),elem.getBrand(),elem.getStandby1(),elem.getStandby2(),elem.getStandby3(),
                        elem.getBoxType1(),elem.getBoxType2(),elem.getBoxType3(),  elem.getAnfme());
                detlDto.setMemo(elem.getMemo());
                detlDto.setSupp(elem.getSupp());
                detlDto.setManu(elem.getManu());
                detlDto.setSuppCode(elem.getSuppCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.findDto(detlDtos, detlDto);
                    assert one != null;
@@ -816,6 +849,10 @@
                waitPakin.setAppeTime(now);
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                waitPakin.setMemo(detlDto.getMemo());
                waitPakin.setSupp(detlDto.getSupp());
                waitPakin.setSuppCode(detlDto.getSuppCode());
                waitPakin.setManu(detlDto.getManu());
                waitPakin.setStandby1(detlDto.getStandby1());
                waitPakin.setStandby2(detlDto.getStandby2());
                waitPakin.setStandby3(detlDto.getStandby3());
@@ -825,10 +862,25 @@
                if (!waitPakinService.insert(waitPakin)) {
                    throw new CoolException("保存入库通知档失败");
                }
                locMast.setLocSts("R");
                locMastService.updateById(locMast);
            }
//            orderService.updateSettle(order.getId(), 2L, userId);
            locMast.setLocSts("R");
            if(!locMastService.updateById(locMast)){
                throw new CoolException("新增agv入库任务失败");
            }
            BasAgvLocNoService basAgvLocNoService = SpringUtils.getBean(BasAgvLocNoService.class);
            BasAgvLocNo basAgvLocNoSou = basAgvLocNoService.selectOne(new EntityWrapper<BasAgvLocNo>().eq("loc_no", param.getLocNo()));
            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam();
            agvBindCtnrAndBinParam.setCtnrCode(param.getBarcode());
            agvBindCtnrAndBinParam.setCtnrTyp("1");
            agvBindCtnrAndBinParam.setStgBinCode(basAgvLocNoSou.getAgvLocNo());
            agvBindCtnrAndBinParam.setReqCode(String.valueOf(System.currentTimeMillis()));
            agvBindCtnrAndBinParam.setIndBind("1");
            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑",
                    AgvConstant.AGV_URL+"/"+AgvConstant.AGV_1LBind,AgvConstant.getAGVADAPTOR(1), agvBindCtnrAndBinParam);
            if(resultBind.getCode() != 200){
                throw new CoolException("agv入库绑定失败");
            }
            OrderInAndOutUtil.updateOrder(Boolean.TRUE,order.getId(), 2L, userId);
        }
    }
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -833,24 +833,28 @@
        if (param == null) {
            throw new CoolException("参数不能为空");
        }
        // 创建对象(构造函数中已生成 timestamp)
        BasAgvMast basAgvMast = new BasAgvMast();
        // 生成 WMS 任务号(如无外部传入,可以使用雪花ID 或自增)
        Long ts = basAgvMast.getTimestamp();
        if (ts == null) {
            throw new CoolException("timestamp 生成失败");
        }
        String locNo = null;
        String staNo = null;
        basAgvMast.setBarcode(Long.toString(ts));
        basAgvMast.setTaskNo(commonService.getWorkNo(0));
        // 赋值参数
        basAgvMast.setSourceStaNo(param.getSourceStaNo());
        basAgvMast.setStaNo(param.getStaNo());
        basAgvMast.setSourceLocNo(param.getSourceLocNo());
        basAgvMast.setLocNo(param.getLocNo());
        String locNo = null;
        String staNo = null;
        // 默认值
        basAgvMast.setPriority(1L);          // 默认优先级
        basAgvMast.setStatus(0);             // 初始状态
        basAgvMast.setAppeTime(new Date());  // 添加时间
        basAgvMast.setModiTime(new Date());  // 修改时间
        basAgvMast.setIoType(param.getIoType());// 任务类型
        basAgvMast.setFloorNo(param.getFloorNo()); //楼层
        basAgvMast.setPriority(1L);
        basAgvMast.setStatus(0);
        basAgvMast.setAppeTime(new Date());
        basAgvMast.setModiTime(new Date());
        basAgvMast.setIoType(param.getIoType());
        basAgvMast.setFloorNo(param.getFloorNo());
        switch (basAgvMast.getIoType()){
            // AGV库位==》输送线站点  0
            // AGV库位==》AGV库位  1
@@ -865,10 +869,10 @@
                staNo = param.getSourceStaNo().toString();
                break;
        }
        // 插入数据库
        basAgvMastService.insert(basAgvMast);
        bindCtnrAndBinParam bindParam = new bindCtnrAndBinParam();
        bindParam.setBarcode(basAgvMast.getTimestamp().toString());
        bindParam.setBarcode(Long.toString(ts));
        bindParam.setIndBind("1");
        bindParam.setFloorNo(basAgvMast.getFloorNo());
        bindParam.setLocNo(locNo);
@@ -975,6 +979,8 @@
    }
    @Override
    @Transactional
    public boolean agvApplicationPassedTheGrating(ArmAgvGratingParam arm) {
@@ -1005,7 +1011,7 @@
    @Override
    @Transactional
    public boolean agvBindAndBin(String taskNo) {
        String URL = "http://10.10.10.200:8181/"; // AGV接口地址
        String URL = "http://10.10.10.200:8181"; // AGV接口地址
        String AGVPath = "rcms/services/rest/hikRpcService/bindCtnrAndBin"; // 接口路径
        BasAgvMast basAgvMast = basAgvMastService.selectOne(new EntityWrapper<BasAgvMast>().eq("task_no",taskNo));
        if (Cools.isEmpty(basAgvMast)){
@@ -1016,39 +1022,45 @@
            BasAgvLocNo basAgvLocNoEnd = basAgvLocNoService.selectOne(
                    new EntityWrapper<BasAgvLocNo>().eq("sta_no", basAgvMast.getStaNo())
            );
            BasAgvLocNo locNo = basAgvLocNoService.selectOne(
                    new EntityWrapper<BasAgvLocNo>().eq("loc_no", basAgvMast.getLocNo())
            );
            String binCode = basAgvLocNoEnd != null
                    ? basAgvLocNoEnd.getAgvLocNo()
                    : (locNo != null ? locNo.getAgvLocNo() : null);
            if (Cools.isEmpty(basAgvMast)){
                return false;
            }
            String ctnrCode = basAgvMast.getBarcode().length() > 1?basAgvMast.getBarcode():basAgvMast.getTimestamp().toString();
            AgvBindCtnrAndBinParam agvBindCtnrAndBinParam = new AgvBindCtnrAndBinParam();
            agvBindCtnrAndBinParam.setReqCode(basAgvMast.getTaskNo() + "-" + basAgvMast.getTimestamp());
            agvBindCtnrAndBinParam.setCtnrCode(basAgvMast.getTimestamp().toString());
            agvBindCtnrAndBinParam.setReqCode(basAgvMast.getTaskNo() + "-" + System.currentTimeMillis());
            agvBindCtnrAndBinParam.setCtnrCode(ctnrCode);
            agvBindCtnrAndBinParam.setCtnrTyp("1");
            agvBindCtnrAndBinParam.setStgBinCode(basAgvLocNoEnd.getAgvLocNo());
            agvBindCtnrAndBinParam.setStgBinCode(binCode);
            agvBindCtnrAndBinParam.setIndBind("0");
            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑", URL,AGVPath, agvBindCtnrAndBinParam);
            if (resultBind.getCode()!=200){
            ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑", URL,AGVPath, agvBindCtnrAndBinParam);
            if (resultBind.getCode() ==200){
                basAgvMast.setStatus(4);
                basAgvMastService.updateById(basAgvMast);
                return true;
            }
            return false;
        }else {
            if (basAgvMast.getIoType()==0 && (basAgvMast.getStaNo()==2034 || basAgvMast.getStaNo()==4003)){
            if (basAgvMast.getIoType()==0 && (basAgvMast.getSourceStaNo()==2033 || basAgvMast.getStaNo()==4003)){
                AgvBindCtnrAndBinTwoParam agvBindCtnrAndBinTwoParam = new AgvBindCtnrAndBinTwoParam();
                agvBindCtnrAndBinTwoParam.setReqCode(String.valueOf(snowflakeIdWorker.nextId()));
                agvBindCtnrAndBinTwoParam.setPodcode(basAgvMast.getBarcode());
                agvBindCtnrAndBinTwoParam.setPositionCode(basAgvMast.getStaNo().toString());
                agvBindCtnrAndBinTwoParam.setIndBind("0");;
                ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器绑定解绑",
                ReturnT<String> resultBind = new PostMesDataUtils().postMesDataArmGrating("AGV容器解绑",
                        AgvConstant.AGV_URL+"/"+AgvConstant.AGV_hikRpcService,AgvConstant.getAGVADAPTOR(2), agvBindCtnrAndBinTwoParam);
                if (resultBind.getCode()!=200){
                if (resultBind.getCode()!=1){
                    basAgvMast.setStatus(4);
                    basAgvMastService.updateById(basAgvMast);
                    return true;
                }
            }
        }
        return false;
    }
src/main/java/com/zy/asrs/task/handler/WrkMastAgvHandler.java
@@ -114,10 +114,14 @@
                    LocMast locMast2 = locMastService.selectById(basAgvMast.getLocNo());
                    // 修改库位状态 S ====>> F
                    if (locMast2.getLocSts().equals("S")) {
                    if (locMast2.getLocSts().equals("S") ) {
                        locMast2.setLocSts("F");
                        locMast2.setIoTime(now);
                        locMast2.setModiTime(now);
                    } else if(basAgvMast.getTaskNo()>10000){
                        locMast2.setLocSts("D");
                        locMast2.setIoTime(now);
                        locMast2.setModiTime(now);
                    } else {
                        return FAIL.setMsg("库位状态异常");
                    }
src/main/java/com/zy/asrs/task/kingdee/handler/InboundOrderHandler.java
@@ -470,6 +470,7 @@
                                        OrderDetl orderDetl = new OrderDetl();
                                        orderDetl.sync(mat);
                                        orderDetl.setAnfme(anfme);//总箱数
                                        orderDetl.setErpAnfme(anfme);
                                        orderDetl.setOrderId(order.getId());
                                        orderDetl.setOrderNo(order.getOrderNo());//表头单据
                                        orderDetl.setSupp(supp);//供应商名称(货源)
src/main/java/com/zy/common/constant/AgvConstant.java
@@ -8,9 +8,9 @@
    public static final String AGV_URL = "http://10.10.10.200:8181";
    public static final String AGV_hikRpcService = "rcms/services/rest/hikRpcService";
    public static final String AGV_1LBind = "rcms/services/rest/hikRpcService/bindCtnrAndBin";
    public static final String AGV_bindPodAndBerth = "bindPodAndBerth";//bangding 2
    public static final String AGV_bindCtnrAndBin = "bindCtnrAndBin";//bangding 1
    public static String getAGVADAPTOR(int f) {
        switch (f) {
            case 1:
src/main/java/com/zy/common/service/CommonService.java
@@ -1007,7 +1007,7 @@
        //此程序用于优化堆垛机异常时的运行时间
        int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
        curRow = locNecessaryParameters[1];
        crnNo = locNecessaryParameters[2];
        crnNo = 6;
        rowCount = locNecessaryParameters[0];
        nearRow = locNecessaryParameters[3];
@@ -1047,7 +1047,7 @@
        // 开始查找库位 ==============================>>
        // 1.按规则查找库位
        if (Cools.isEmpty(locMast) && crnNo != 0) {
        if (Cools.isEmpty(locMast)) {
            List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                    .eq("row1", nearRow)
                    .eq("loc_sts", "O").eq("whs_type", rowLastnoType.getType().longValue())
src/main/java/com/zy/common/web/WcsController.java
@@ -126,7 +126,7 @@
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.selectById(param.getSourceStaNo());
        if(sourceStaNo.getWrkNo() == 0 ){
        if(sourceStaNo.getWrkNo() == 0 && sourceStaNo.getDevNo() != 2033){
            return R.error("站点工作号不存在");
        }
        sourceStaNo.setLocType1(param.getLocType1());
@@ -265,7 +265,7 @@
        // 源站点状态检测
//        BasDevp sourceStaNo = basDevpService.checkSiteStatus(transplantWork.getStaNo(), true);
        WrkMast wrkMast1 = wrkMastService.selectWrkMast(transplantWork.getWorkNo(),transplantWork.getBarcode());
//        if(sourceStaNo ==null ){
//        if(sourceStaNo ==null )hnagbao1{
//            return R.error("该站点盘点移栽许可,请查看源站点状态检测");
//        }
        if(wrkMast1== null){