#
Junjie
2025-05-22 de67dab661ba22ec22e5db1022962470f351e03e
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -19,6 +19,7 @@
import com.zy.asrs.utils.Utils;
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.News;
import com.zy.common.utils.RedisUtil;
import com.zy.core.CrnThread;
import com.zy.core.DevpThread;
@@ -160,9 +161,14 @@
                        }
                        String barcode = barcodeThread.getBarcode();
                        if (Cools.isEmpty(barcode)) {
                            News.watchInfo(String.valueOf(staProtocol.getSiteId()), "入库信号满足,托盘码为空");
                            continue;
                        }
                        TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", barcode));
                        if (taskWrk1 != null) {
                            log.info("托盘码:" + barcode + "任务档存在");
                            News.watchInfo(String.valueOf(staProtocol.getSiteId()), "托盘码:" + barcode + "任务档存在");
                            continue;
                        }
@@ -172,6 +178,7 @@
                        if (back) {
                            requestParam.put("wcsStatus", 1);//失败
                            requestParam.put("wcsErrorMessage", errMsg);//失败原因
                            News.watchInfo(String.valueOf(staProtocol.getSiteId()), errMsg);
                        }else {
                            requestParam.put("wcsStatus", 0);//成功
                        }
@@ -192,8 +199,17 @@
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            redisUtil.set(RedisKeyType.IN_TASK_LOCK.key, "lock", 5);
                            if (jsonObject.getInteger("code") != 200) {
                                log.info("条码:" + barcode + "申请WMS失败,response=" + JSON.toJSONString(jsonObject));
                            if (jsonObject.getInteger("code") == 200) {
                            } else if (jsonObject.getInteger("code") == 500) {
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), "条码:" + barcode + "申请WMS失败,系统回退,response=" + JSON.toJSONString(jsonObject));
                                staProtocol.setWorkNo(9997);
                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                continue;
                            }else {
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), "条码:" + barcode + "申请WMS失败,response=" + JSON.toJSONString(jsonObject));
                                continue;
                            }
@@ -205,18 +221,18 @@
                            // 创新一个入库工作档
                            TaskWrk taskWrk = taskWrkService.selectByTaskNo(String.valueOf(resultWrkNo));
                            if(taskWrk != null) {
                                log.info("任务:" + resultWrkNo + "已经存在");
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), "任务:" + resultWrkNo + "已经存在");
                                continue;
                            }
                            LocMast locMast = locMastService.selectByLocNo(resultLocNo);
                            if (locMast == null) {
                                log.info(resultLocNo + "库位不存在");
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), resultLocNo + "库位不存在");
                                continue;
                            }
                            if (!locMast.getLocSts().equals("O")) {
                                log.info(resultLocNo + "库位不处于空库位");
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), resultLocNo + "库位不处于空库位");
                                continue;
                            }
@@ -238,7 +254,7 @@
                            }
                            if (!taskWrkService.insert(taskWrk)) {
                                log.info("任务:" + resultWrkNo + "任务创建失败");
                                News.watchInfo(String.valueOf(staProtocol.getSiteId()), "任务:" + resultWrkNo + "任务创建失败");
                                continue;
                            }
@@ -313,7 +329,7 @@
        for (CrnSlave crnSlave : slaveProperties.getCrn()) {
            // 遍历堆垛机出库站
            for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
                List<StaDesc> staDescs = staDescMapper.selectList(new EntityWrapper<StaDesc>().eq("type_no", 2).eq("crn_no", crnSlave.getId()).eq("crn_stn", crnStn.getStaNo()));
                for (StaDesc staDesc : staDescs) {
                    try {
                        // 获取堆垛机出库站信息
@@ -376,7 +392,7 @@
            }
            BasCrnp basCrnp = basCrnpService.selectById(crn.getId());
            if (basCrnp == null) {
                log.error("{}号堆垛机尚未在数据库进行维护!", crn.getId());
                News.watchInfo(crn.getId() + "号堆垛机", "{}号堆垛机尚未在数据库进行维护!", crn.getId());
                continue;
            }
@@ -431,7 +447,7 @@
                // 查询站点详细信息
                BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                if (staDetl == null) {
                    log.error("入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    News.watchError(crnStn.getStaNo() + "站点", "入库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                    continue;
                }
@@ -440,18 +456,21 @@
                    flag = true;
                }
                if (!flag) {
                    News.watchError(crnStn.getStaNo() + "站点", "入库 ===>> 堆垛机站点状态检测失败,站点需要满足:自动、有物、有工作号、站点可入");
                    continue;
                }
                // 获取工作状态为2(设备上走)的入库工作档
                TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo().intValue(), staDesc.getStnNo().toString());
                TaskWrk taskWrk = taskWrkMapper.selectPakIn(slave.getId(), staProtocol.getWorkNo(), staDesc.getStnNo().toString());
                if (null == taskWrk) {
                    News.watchError(crnStn.getStaNo() + "站点", "入库 ===>> 工作档不存在,检查任务是否生成");
                    continue;
                }
                // 堆垛机控制过滤
                if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
                    News.watchError(slave.getId() + "号堆垛机", "堆垛机忙碌中");
                    continue;
                }
@@ -515,30 +534,8 @@
                    }
                    // 工作档状态判断
                    if (taskWrk.getIoType() != 2 || taskWrk.getTargetPoint() == null || taskWrk.getStartPoint() == null) {
                        log.error("查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", taskWrk.getWrkNo(), taskWrk.getStartPoint(), taskWrk.getIoType());
                        News.watchError(taskWrk.getWrkNo() + "任务", "查询工作档数据不符合条件--入出类型/站点, 工作号={},源库位={},入出类型={}", taskWrk.getWrkNo(), taskWrk.getStartPoint(), taskWrk.getIoType());
                        continue;
                    }
                    LocMast locMast=locMastService.selectByLocNo(taskWrk.getStartPoint());
                    //判断其库位是否为深库位,如果为深库位找其浅库位是都有货
                    if(locMast.getRow1()==1||locMast.getRow1()==5){
                        LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1()+1))
                                .eq("bay1",locMast.getBay1())
                                .eq("lev1",locMast.getLev1()).eq("loc_sts","F"));
                        if (!Cools.isEmpty(locMast1)){
                            log.info(locMast.getLocNo()+"出深库位,浅库位有货");
                            continue;
                        }
                    }else if(locMast.getRow1()==4||locMast.getRow1()==8){
                        LocMast locMast1=locMastService.selectOne(new EntityWrapper<LocMast>()
                                .eq("row1", (locMast.getRow1()-1))
                                .eq("bay1",locMast.getBay1())
                                .eq("lev1",locMast.getLev1()).eq("loc_sts","F"));
                        if (!Cools.isEmpty(locMast1)){
                            log.info(locMast.getLocNo()+"出深库位,浅库位有货");
                            continue;
                        }
                    }
                    // 获取堆垛机出库站信息
@@ -553,12 +550,12 @@
                    // 查询站点详细信息
                    BasDevp staDetl = basDevpService.selectById(crnStn.getStaNo());
                    if (staDetl == null) {
                        log.error("出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                        News.watchError(taskWrk.getWrkNo() + "任务", "出库 ===>> 堆垛机站点在数据库不存在, 站点编号={}", crnStn.getStaNo());
                        break;
                    }
                    // 判断堆垛机出库站状态
                    if (staProtocol.isAutoing() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                    if (staProtocol.isAutoing() && staProtocol.isOutEnable() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")
                    ) {
                        // 命令下发区 --------------------------------------------------------------------------
@@ -568,7 +565,7 @@
                        }
                        int storeCount = basDevpService.getStoreCount();
                        if(storeCount >= maxCount){
                            log.error("输送线暂存数达到上限{}",storeCount);
                            News.watchError(taskWrk.getWrkNo() + "任务", "输送线暂存数达到上限{}", storeCount);
                            break;
                        }