自动化立体仓库 - WMS系统
#
Administrator
16 小时以前 0467c8f9c2f3604ddd6e7e3a0372ce0fbaa46dff
#
4个文件已修改
62 ■■■■ 已修改文件
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/api/service/impl/HmesApiServiceImpl.java
@@ -100,6 +100,7 @@
                list.add(dto);
            }
        }
        //下发的订单明细,查看库存是否有足够的库存,排除机台的库位
        for (DetlDto detail : list) {
            List<LocDetl> matnr = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("matnr", detail.getMatnr()));
@@ -116,6 +117,19 @@
            if (count<detail.getAnfme()) {
                return R.error("物料="+detail.getMatnr()+"库存不足无法生成订单");
            }
            //机台有冻结时禁止呼叫物料
            BasDevice basDevice = basDeviceService.selectOne(new EntityWrapper<BasDevice>()
                    .eq("status", 1)
                    .eq("dev_no", detail.getStandby1()));
            if (Objects.isNull(basDevice)) {
                return R.error(detail.getStandby1()+"机台信息不存在或已禁用!!");
            }
            List<LocAroundBind> binds = locAroundBindService.selectList(new EntityWrapper<LocAroundBind>()
                    .eq("dev_no", basDevice.getType())
                    .eq("freeze", 1));
            if (!Cools.isEmpty(binds)) {
                return  R.error(detail.getStandby1()+"机台被冻结无法呼叫物料");
            }
        }
        // 单据主档
        order = new OrderPakout(
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -103,12 +103,12 @@
                    markPublishError(wrkMast.getWrkNo(), String.valueOf("目标库位被冻结"));
                    continue;
                }
//            Integer crnNo = wrkMast.getCrnNo();
//            //该堆垛机已经下发任务给wcs后不再下发新的搬运任务
//            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", Arrays.asList(2L, 12L)));
//            if (!wrkMasts1.isEmpty()) {
//                continue;
//            }
            Integer crnNo = wrkMast.getCrnNo();
            //该堆垛机已经下发任务给wcs后不再下发新的搬运任务
            List<WrkMast> wrkMasts1 = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).in("wrk_sts", Arrays.asList(12L)));
            if (!wrkMasts1.isEmpty()) {
                continue;
            }
                //源库位为冻结库位时禁止下发搬运任务给堆垛机
                if (!Cools.isEmpty(wrkMast.getSourceLocNo())) {
                    LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>()
src/main/java/com/zy/common/service/CommonService.java
@@ -216,7 +216,7 @@
        int sRow = rowLastno.getsRow();
        int eRow = rowLastno.geteRow();
        int crnNumber = rowLastno.getCrnQty();
       int sCrnNo= rowLastno.getsCrnNo()!=null?rowLastno.getsCrnNo():1;
        // ===============>>>> 开始执行
        curRow = rowLastno.getCurrentRow();
@@ -229,11 +229,15 @@
                curRow = moveCrnNo * 4 - 2;
            }
        }
        log.info("\ncurRow:\n{}",curRow);
        //此程序用于优化堆垛机异常时的运行时间
        for (int i = times; i < crnNumber * 2; i++) {
        log.info("\ni:\n{}",i);
        log.info("\ntimes:\n{}",times);
        log.info("\ncrnNumber:\n{}",crnNumber);
            int[] locNecessaryParameters = Utils.LocNecessaryParameters(rowLastno, curRow, crnNumber);
            crnNo = locNecessaryParameters[2];
            log.info("\ncrnNo:\n{}",crnNo);
            if (basCrnpService.checkSiteError(crnNo, true)) {
                nearRow = locNecessaryParameters[3];
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
@@ -242,7 +246,9 @@
                        .eq("frozen", 0)
                        .eq("deleted", 0)
                        .eq("whs_type", rowLastnoType.getType().longValue()));
                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>().eq("crn_no", crnNo).le("io_type", 100));
//                log.info("\nlocMasts:\n{}",locMasts);
                int crnCountO = wrkMastService.selectCount(new EntityWrapper<WrkMast>()
                        .eq("crn_no", crnNo).le("io_type", 100));
                if (locMasts.size() - crnCountO <= 2) {
                    if(curRow+2==7){
@@ -254,6 +260,20 @@
                }
                break;
            } else {
//                curRow = crnNo +2;// crnNo=3  curRow=5
//                if (curRow == 9||curRow==10) {
//                    curRow = 1;
//                }
                int nextCrnNo=crnNo + 1;//下一个堆垛机号
                if(nextCrnNo> sCrnNo+crnNumber-1){//下一台大于
                    nextCrnNo=sCrnNo;
                }
                if(nextCrnNo==sCrnNo){
                    curRow=0;
                }else {
                    curRow = sRow + (nextCrnNo - sCrnNo) * 4;
                }
                times++;
            }
        }
@@ -266,6 +286,7 @@
        BasDevp staNo = null;
        if (Utils.BooleanWhsTypeSta(rowLastno, staDescId)) {
            int selectedCrnNo=crnNo;
            // 获取目标站
            wrapper = new EntityWrapper<StaDesc>()
                    .eq("type_no", staDescId)
@@ -287,7 +308,12 @@
            }
            // 更新库位排号
            if (Cools.isEmpty(locMast)) {
                rowLastno.setCurrentRow(curRow);
                int crnNoForRotation=crnNo!=0?crnNo:selectedCrnNo;
                int nextCrnNoAfterSuccess=(crnNoForRotation>=sCrnNo+crnNumber-1?sCrnNo:crnNoForRotation+1);
                int curRowToSave = (nextCrnNoAfterSuccess==sCrnNo)?0:sRow+(nextCrnNoAfterSuccess-sCrnNo)*4;
                rowLastno.setCurrentRow(curRowToSave);
                log.info("\ncurRowToSave:\n{}",curRowToSave);
                rowLastnoService.updateById(rowLastno);
            }
        }
src/main/java/com/zy/common/web/WcsController.java
@@ -104,7 +104,7 @@
                String s = Utils.WMSLocToWCSLoc(wrkMast1.getLocNo());
                dto1.setLocNo(s);
                dto1.setCrnNo(wrkMast1.getCrnNo());
                dto1.setWorkNo(wrkMast1.getWrkNo());
                dto1.setTaskNo(wrkMast1.getWrkNo());
                dto1.setTaskPri((int) Math.round(wrkMast1.getIoPri()));
                return R.ok(dto1);
            }