自动化立体仓库 - WMS系统
skyouc
3 天以前 19feb4af89f6e5e67c3dc97cbbcf6cfc40350781
no message
4个文件已修改
311 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/task/AutoLocMoveScheduler.java 126 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoLocMoveHandler.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoLocMoveScheduler.java
@@ -39,67 +39,85 @@
    private OrderDetlService orderDetlService;
    //定时出库   经典双伸
    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLocAutoLocMove(){
        if (slaveWmsParameterProperties.isAutoLocMoveBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMove");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            OrderPakout orderPakout = orderPakoutService.selectOrderMoveStatus();
            if (!Cools.isEmpty(orderPakout)){
//                autoMoveService.selectList()
            }else {
                orderPakout = orderPakoutService.selectOrderMoveStatusInitial();
                if (Cools.isEmpty(orderPakout)){
                    return;
                }
                orderPakout.setMoveStatus(2);
                orderPakoutService.updateById(orderPakout);
            }
//    //定时出库   经典双伸
//    @Scheduled(cron = "0/3 * * * * ? ")
//    public void locToLocAutoLocMove() {
//        if (slaveWmsParameterProperties.isAutoLocMoveBoolean()) {
//            Config config = configService.selectConfigByCode("AutoLocMove");
//            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
//                return;
//            }
//            OrderPakout orderPakout = orderPakoutService.selectOrderMoveStatus();
//            if (!Cools.isEmpty(orderPakout)) {
////                autoMoveService.selectList()
//            } else {
//                orderPakout = orderPakoutService.selectOrderMoveStatusInitial();
//                if (Cools.isEmpty(orderPakout)) {
//                    return;
//                }
//                orderPakout.setMoveStatus(2);
//                orderPakoutService.updateById(orderPakout);
//            }
//        }
//    }
@Scheduled(cron = "0/10 * * * * ? ")
public void locToLoc12() {
//        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
    Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
    if (Cools.isEmpty(config) || config.getValue().equals("false")) {
        return;
    }
    int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
    for (int crnNo = 6; crnNo <= 6; crnNo++) {
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
//        WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
        if (Cools.isEmpty(wrkMast)) {
            autoLocMoveHandler.start(crnNo, 12);
        }
    }
//        }
}
    //定时出库
    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLoc11(){
        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
            for (int crnNo = 1;crnNo < crnCount;crnNo++){
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
                if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)){
                    autoLocMoveHandler.start(crnNo,11);
                }
//    @Scheduled(cron = "0/10 * * * * ? ")
    public void locToLoc11() {
//        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
        Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
        if (Cools.isEmpty(config) || config.getValue().equals("false")) {
            return;
        }
        int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
        for (int crnNo = 1; crnNo <= 2; crnNo++) {
            WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
            WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
            if (Cools.isEmpty(wrkMast) && Cools.isEmpty(wrkMast1)) {
                autoLocMoveHandler.start(crnNo, 11);
            }
        }
//        }
    }
    //定时入库
    @Scheduled(cron = "0/3 * * * * ? ")
    public void locToLoc111() {
        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
            Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
                return;
            }
            int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
            for (int crnNo = 1;crnNo < crnCount;crnNo++){
                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
                if (basCrnp == null) {
                    continue;
                }
                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
                if (Cools.isEmpty(wrkMast)  && Cools.isEmpty(wrkMast1)){
                    autoLocMoveHandler.start(crnNo,111);
                }
            }
        }
    }
//    @Scheduled(cron = "0/3 * * * * ? ")
//    public void locToLoc111() {
//        if (slaveWmsParameterProperties.isAutoLocMoveUnilateralBoolean()){
//            Config config = configService.selectConfigByCode("AutoLocMoveUnilateral");
//            if (Cools.isEmpty(config) || config.getValue().equals("false")) {
//                return;
//            }
//            int crnCount = basCrnpService.selectCount(new EntityWrapper<>());
//            for (int crnNo = 1;crnNo < crnCount;crnNo++){
//                BasCrnp basCrnp = basCrnpService.selectById(crnNo);
//                if (basCrnp == null) {
//                    continue;
//                }
//                WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 111).eq("crn_no", crnNo));
//                WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 11).eq("crn_no", crnNo));
//                if (Cools.isEmpty(wrkMast)  && Cools.isEmpty(wrkMast1)){
//                    autoLocMoveHandler.start(crnNo,111);
//                }
//            }
//        }
//    }
}
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -5,6 +5,8 @@
import com.zy.api.service.WcsApiService;
import com.zy.asrs.entity.Task;
import com.zy.asrs.entity.WrkMast;
import com.zy.asrs.entity.param.CompleteParam;
import com.zy.asrs.service.MobileService;
import com.zy.asrs.service.TaskService;
import com.zy.asrs.service.WrkMastService;
import com.zy.asrs.task.core.ReturnT;
@@ -34,6 +36,8 @@
    private WorkMastHandler workMastHandler;
    @Autowired
    private WcsApiService wcsApiService;
    @Autowired
    private MobileService mobileService;
    @Autowired
    private TaskService taskService;
@@ -82,22 +86,23 @@
     * @author Ryan
     * @date 2026/1/10 14:42
     */
    @Scheduled(cron = "0/15 * * * * ? ")
    @Scheduled(cron = "0/5 * * * * ? ")
    private void autoPubTasks() {
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", Arrays.asList(11L)));
        List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", Arrays.asList(11L, 1L)));
        if (wrkMasts.isEmpty()) {
            return;
        }
        Collections.shuffle(wrkMasts);
        wrkMasts.forEach(wrkMast -> {
            WorkTaskParams params = new WorkTaskParams();
//            if (wrkMast.getIoType().equals(1)) {
//                params.setType("in");
//                params.setTaskNo(wrkMast.getWrkNo() + "")
//                        .setLocNo(wrkMast.getLocNo())
//                        .setBarcode(wrkMast.getBarcode())
//                        .setTaskPri(wrkMast.getIoPri().intValue());
//            } else {
            if (wrkMast.getIoType().equals(11)) {
                CompleteParam param = new CompleteParam();
                param.setTaskNo(wrkMast.getWrkNo() + "");
                param.setSourceLocNo(wrkMast.getSourceLocNo());
                param.setLocNo(wrkMast.getLocNo());
//                param.set
                mobileService.taskMove(param, 9527L);
            } else if (wrkMast.getIoType() > 100) {
                params.setType("out")
                        .setTaskNo(wrkMast.getWrkNo() + "")
                        .setLocNo(wrkMast.getSourceLocNo())
@@ -105,7 +110,7 @@
                        .setStaNo(wrkMast.getStaNo())
                        .setTaskPri(wrkMast.getIoPri().intValue());
                wcsApiService.pubWrkToWcs(params);
//            }
            }
        });
    }
src/main/java/com/zy/asrs/task/handler/AutoLocMoveHandler.java
@@ -40,48 +40,66 @@
    @Transactional(isolation = Isolation.REPEATABLE_READ)
    public ReturnT<String> start(Integer crnNo, Integer ioType) {
        try {
//            //11  穿梭移单边
//            if (ioType==11){
//                for (int bay = 1;bay < 27;bay++){
//                    for (int lev = 1 ; lev <6 ; lev++){
//                        List<LocMast> locMasts = locMastService.selectLocMastShuttleMoveUnilateral(bay,lev,crnNo);
//                        if (!Cools.isEmpty(locMasts) && locMasts.size()<4){
//                            for (LocMast locMast:locMasts){
            //11  穿梭移单边
            if (ioType == 11) {
                for (int bay = 2; bay < 141; bay++) {
                    for (int lev = 1; lev < 22; lev++) {
                        List<LocMast> locMasts = locMastService.selectLocMastShuttleMoveUnilateral(bay, lev, crnNo);
                        if (!Cools.isEmpty(locMasts) && locMasts.size() < 4) {
                            for (LocMast locMast : locMasts) {
//                                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
////                                StartupDto startupDto = commonService.getLocNo(crnNo == 1 ? 6 : 5, ioType, crnNo == 1 ? 917 : 918, locDetl.getMatnr(), locDetl.getBatch(),locDetl.getBrand(), null);
//                                StartupDto startupDto = commonService.getLocNo(crnNo == 1 ? 6 : 5, ioType, crnNo == 1 ? 917 : 918, locDetl.getMatnr(), locDetl.getBatch(),locDetl.getBrand(), null);
//                                FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
//
//                                StartupDto startupDto = commonService.getLocNo( ioType, crnNo == 1 ? 917 : 918, sourceStaNo.getDevNo(), findLocNoAttributeVo, null);
//                                workService.locMove(locMast.getLocNo(), startupDto.getLocNo(),9527L);
//                            }
//                            return SUCCESS;
//                        }
//                    }
//                }
//            }else {//11  单边移穿梭
//                List<Map<String, Object>> list = locDetlService.selectLocDetlUnilateralMoveShuttleMap(crnNo);//111   单边移穿梭
//                for (Map<String, Object> map : list) {
//                    String matnr = map.getOrDefault("matnr","").toString();//物料号
//                    String batch = map.getOrDefault("batch","").toString();//批号
//                    String grade = map.getOrDefault("brand","").toString();//等级
//                    int count = Integer.parseInt(map.get("count").toString());//单边库数量
//                    if (count < 4) {
//                        continue;
//                    }
//
//                    List<LocDetl> locDetlList = locDetlService.selectLocDetlUnilateralMoveShuttle(matnr, batch, grade, crnNo);
//                    for (LocDetl locDetl : locDetlList) {
////                        StartupDto startupDto = commonService.getLocNo(crnNo == 1 ? 4 : 3, ioType, crnNo == 1 ? 901 : 932, locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(), null);
//                        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
//
//                        StartupDto startupDto = commonService.getLocNo( ioType, crnNo == 1 ? 901 : 932, sourceStaNo.getDevNo(), findLocNoAttributeVo, null);
//                        workService.locMove(locDetl.getLocNo(), startupDto.getLocNo(), 9527L);
//                    }
//                }
//                return SUCCESS;
//            }
        }catch (Exception e){
            log.error("自动移库出错,堆垛机号{},工作类型{}",crnNo,ioType);
                                StartupDto startupDto = commonService.getLocNo(ioType, crnNo == 1 ? 109 : 126, 1, null, null);
                                workService.locMove(locMast.getLocNo(), startupDto.getLocNo(), 9527L);
                                break;
                            }
                            return SUCCESS;
                        }
                    }
                }
            } else if (ioType == 12) {
                for (int bay = 2; bay < 61; bay++) {
                    for (int lev = 1; lev < 7; lev++) {
                        List<LocMast> locMasts = locMastService.selectLocMastShuttleMoveUnilateral(bay, lev, crnNo );
                        if (!Cools.isEmpty(locMasts) && locMasts.size() < 4) {
                            for (LocMast locMast : locMasts) {
//                                LocDetl locDetl = locDetlService.selectOne(new EntityWrapper<LocDetl>().eq("loc_no", locMast.getLocNo()));
//                                StartupDto startupDto = commonService.getLocNo(crnNo == 1 ? 6 : 5, ioType, crnNo == 1 ? 917 : 918, locDetl.getMatnr(), locDetl.getBatch(),locDetl.getBrand(), null);
//                                FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
                                StartupDto startupDto = commonService.getLocNo(ioType, crnNo == 1 ? 205 : 215, 3, null, null);
                                workService.locMove(locMast.getLocNo(), startupDto.getLocNo(), 9527L);
                                break;
                            }
                            return SUCCESS;
                        }
                    }
                }
            }else {//11  单边移穿梭
                List<Map<String, Object>> list = locDetlService.selectLocDetlUnilateralMoveShuttleMap(crnNo);//111   单边移穿梭
                for (Map<String, Object> map : list) {
                    String matnr = map.getOrDefault("matnr", "").toString();//物料号
                    String batch = map.getOrDefault("batch", "").toString();//批号
                    String grade = map.getOrDefault("brand", "").toString();//等级
                    int count = Integer.parseInt(map.get("count").toString());//单边库数量
                    if (count < 4) {
                        continue;
                    }
                    List<LocDetl> locDetlList = locDetlService.selectLocDetlUnilateralMoveShuttle(matnr, batch, grade, crnNo);
                    for (LocDetl locDetl : locDetlList) {
//                        StartupDto startupDto = commonService.getLocNo(crnNo == 1 ? 4 : 3, ioType, crnNo == 1 ? 901 : 932, locDetl.getMatnr(), locDetl.getBatch(), locDetl.getBrand(), null);
                        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo(locDetl);
                        StartupDto startupDto = commonService.getLocNo(ioType, crnNo == 1 ? 901 : 932, null, findLocNoAttributeVo, null);
                        workService.locMove(locDetl.getLocNo(), startupDto.getLocNo(), 9527L);
                    }
                }
                return SUCCESS;
            }
        } catch (Exception e) {
            log.error("自动移库出错,堆垛机号{},工作类型{}", crnNo, ioType);
        }
        return SUCCESS;
    }
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -192,8 +192,8 @@
                                }
                            }
                        } catch (Exception ignore) {
                        }
                    }
                    // 修改库位状态 S ====>> F
                    if (locMast.getLocSts().equals("S")) {
@@ -924,31 +924,39 @@
                    throw new CoolException("库位明细保存失败!!");
                }
                // 更新订单完成数量
                OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(),
                        pakin.getMatnr(), pakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
                        pakin.getStandby2(), pakin.getStandby3(),
                        pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
                if (orderDetlPakin == null) {
                    orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(), pakin.getMatnr(),
                            pakin.getBatch(),
                            pakin.getBrand(), pakin.getStandby1(), pakin.getStandby2(),
                            pakin.getStandby3(),
                            pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
                OrderPakin orderPakin = orderPakinService.selectOne(new EntityWrapper<OrderPakin>().eq("order_no", pakin.getOrderNo()));
                if (Objects.isNull(orderPakin)) {
                    throw new CoolException("数据错误,订单信息不存在!!");
                }
                try {
                    if (!Cools.isEmpty(orderDetlPakin)) {
                        if (!orderDetlPakinService.increaseQtyByOrderNo(pakin.getOrderNo(),
                                pakin.getMatnr(),
                                orderDetlPakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
                                pakin.getStandby2(), pakin.getStandby3(),
                                pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3(),
                                pakin.getAnfme())) {
                            throw new CoolException("AGV全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
                                    + "],[locNo=" + wrkMast.getLocNo() + "]");
                        }
                if (!orderPakin.getDocType().equals(0)) {
                    // 更新订单完成数量
                    OrderDetlPakin orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(),
                            pakin.getMatnr(), pakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
                            pakin.getStandby2(), pakin.getStandby3(),
                            pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
                    if (orderDetlPakin == null) {
                        orderDetlPakin = orderDetlPakinService.selectItem(pakin.getOrderNo(), pakin.getMatnr(),
                                pakin.getBatch(),
                                pakin.getBrand(), pakin.getStandby1(), pakin.getStandby2(),
                                pakin.getStandby3(),
                                pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3());
                    }
                } catch (Exception ignore) {
                    try {
                        if (!Cools.isEmpty(orderDetlPakin)) {
                            if (!orderDetlPakinService.increaseQtyByOrderNo(pakin.getOrderNo(),
                                    pakin.getMatnr(),
                                    orderDetlPakin.getBatch(), pakin.getBrand(), pakin.getStandby1(),
                                    pakin.getStandby2(), pakin.getStandby3(),
                                    pakin.getBoxType1(), pakin.getBoxType2(), pakin.getBoxType3(),
                                    pakin.getAnfme())) {
                                throw new CoolException("AGV全板入库 ===>> 更新订单完成数量失败; [workNo=" + wrkMast.getWrkNo()
                                        + "],[locNo=" + wrkMast.getLocNo() + "]");
                            }
                        }
                    } catch (Exception ignore) {
                    }
                }
            });
@@ -977,9 +985,9 @@
            Set<Long> list = apallets.stream().map(WaitPakin::getOrderId).collect(Collectors.toSet());
            List<OrderPakin> pakins = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("id", list));
            if (Objects.isNull(pakins) || pakins.isEmpty()) {
//            throw new CoolException("单据不存在!!");
            }
//            if (Objects.isNull(pakins) || pakins.isEmpty()) {
////            throw new CoolException("单据不存在!!");
//            }
        }else if(wrkMast.getIoType().equals(53)){
            // 根据工作号,查询工作明细档
            List<TaskDetl> wrkDetls53 = taskDetlService