1
zhang
2025-06-13 9c3da520c38c813d6b615adb5b49e7519c994f6b
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -7,7 +7,6 @@
import com.core.common.R;
import com.core.exception.CoolException;
import com.zy.asrs.controller.CrnController;
import com.zy.asrs.controller.OpenController;
import com.zy.asrs.controller.SiteController;
import com.zy.asrs.domain.enums.TaskStatusType;
import com.zy.asrs.domain.enums.WorkNoType;
@@ -16,7 +15,10 @@
import com.zy.asrs.entity.param.Result;
import com.zy.asrs.entity.param.StorageEscalationParam;
import com.zy.asrs.entity.param.TaskOverToWms;
import com.zy.asrs.mapper.*;
import com.zy.asrs.mapper.BasCrnErrorMapper;
import com.zy.asrs.mapper.StaDescMapper;
import com.zy.asrs.mapper.TaskWrkMapper;
import com.zy.asrs.mapper.WrkMastMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.CommandUtils;
import com.zy.asrs.utils.Utils;
@@ -31,7 +33,6 @@
import com.zy.core.model.DevpSlave;
import com.zy.core.model.LedSlave;
import com.zy.core.model.Task;
import com.zy.core.model.command.CommandPackage;
import com.zy.core.model.command.CrnCommand;
import com.zy.core.model.protocol.CrnProtocol;
import com.zy.core.model.protocol.StaProtocol;
@@ -39,20 +40,17 @@
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.LedThread;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.system.entity.Config;
import com.zy.system.service.ConfigService;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
 * 立体仓库WCS系统主流程业务
@@ -336,88 +334,29 @@
                        errMsg = "超重";
                        back = true;
                    }
                    if (!back && staProtocol.isBarcodeErr()) {
                        errMsg = "扫码失败";
                        back = true;
                    }
//                    if (!back && staProtocol.isBarcodeErr()) {
//                        errMsg = "扫码失败";
//                        back = true;
//                    }
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && workNo >= 9990
                            && staProtocol.isPakMk()) {
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                        String BoxNo = "";
                        if (barcodeThread != null) {
                            BoxNo = barcodeThread.getBarcode();
                            TaskWrk taskWrk1 = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().eq("barcode", BoxNo));
                            if (!Cools.isEmpty(taskWrk1)) {
                                log.info("托盘码:" + BoxNo + "任务档存在");
                                if (taskWrk1.getIoType() == 1 && taskWrk1.getStartPoint().equals(staProtocol.getSiteId().toString())) {
                                    StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                            .eq("crn_no", taskWrk1.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
                                    if (Cools.isEmpty(staDesc)) {
                                        return;
                                    } else {
                                        continue;
                                    }
                                }
                            }
                            if (back) {
                                storageEscalationParam.setWCSStatus(1);
                                storageEscalationParam.setWCSErrorMessage(storageEscalationParam.getWCSErrorMessage() + errMsg);
                                // led 异常显示
                                if (ledThread != null) {
                                    String errorMsg = errMsg;
                                    MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                                }
                            }
                        }
                        storageEscalationParam.setBoxNo(BoxNo);
                        //是否满板 1满板  0空板
                        storageEscalationParam.setStaType(staProtocol.isEmptyMk() ? 0 : 1);
                        //库位类型 1高库位 0低库位
                        storageEscalationParam.setLocType(staProtocol.isHigh() ? 1 : 0);
                        storageEscalationParam.setTerminalNo(staProtocol.getSiteId());
                        log.info("组托入库={}", storageEscalationParam);
                        String response = "";
                        Boolean success = false;
                        try {
                            response = new HttpHandler.Builder()
                                    .setUri(wmsUrl)
                                    .setPath(inboundTaskApplyPath)
                                    .setJson(JSON.toJSONString(storageEscalationParam))
                                    .build()
                                    .doPost();
                            JSONObject jsonObject = JSON.parseObject(response);
                            if (back) {
                                staProtocol.setWorkNo((short) 9991);
                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            } else {
                                if (!Cools.isEmpty(response) && !Cools.isEmpty(jsonObject.get("ReturnStatus")) && jsonObject.get("ReturnStatus").equals(0) && !Cools.isEmpty(jsonObject.get("Result").toString())) {
                                    Result result = JSON.parseObject(jsonObject.get("Result").toString(), Result.class);
                                    // 创新一个入库工作档
                                    TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo());
                                    if (Cools.isEmpty(taskWrk)) {
                                        taskWrk = createTask1(result, BoxNo,staProtocol.getSiteId());
                                        if (Cools.isEmpty(taskWrk)) {
                                            log.error("库位异常,库位号:={}", taskWrk.getOriginTargetPoint());
                                        } else {
                                            taskWrkService.insert(taskWrk);
                                            StaDesc staDesc = staDescService.selectOne(new EntityWrapper<StaDesc>()
                                                    .eq("crn_no", taskWrk.getCrnNo()).eq("type_no", 1).eq("stn_no", staProtocol.getSiteId()));
                                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                                            staProtocol.setStaNo(staDesc.getCrnStn().shortValue());
                                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        TaskWrk taskWrk = taskWrkService.selectOne(new EntityWrapper<TaskWrk>().orderBy("create_time"));
                        if (taskWrk != null) {
                                            HashMap<String, Object> hashMap = new HashMap<>();
                                            hashMap.put("TaskNo", taskWrk.getTaskNo());
                                            try {
                                                //开始上报,任务开始时,WCS回调WMS
                                                response = new HttpHandler.Builder()
                            String response = new HttpHandler.Builder()
                                                        .setUri(wmsUrl)
                                                        .setPath(taskStatusFeedbackPath)
                                                        .setJson(JSON.toJSONString(hashMap))
@@ -438,67 +377,12 @@
                                                        , response
                                                        , bool
                                                );
                                            } catch (Exception e) {
                                            }
                                        }
                                    } else {
                                        // led 异常显示
                                        if (ledThread != null) {
                                            String errorMsg = "已有入库任务!!!";
                                            MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                                        }
                                        staProtocol.setWorkNo((short) 9991);
                                        staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                        devpThread.setPakMk(staProtocol.getSiteId(), false);
                                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                    }
                                } else {
                                    // led 异常显示
                                    if (ledThread != null) {
                                        String errorMsg = jsonObject.getString("ErrorMessage");
                                        MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(5, errorMsg));
                                    }
                                    staProtocol.setWorkNo((short) 9991);
                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                }
                            }
                        } catch (Exception e) {
                            log.error("请求入库调用接口失败");
                            log.error("异常信息打印:" + e);
                            try {
                                BasDevp basDevp = basDevpService.selectById(inSta.getStaNo());
                                if (Cools.isEmpty(basDevp)) {
                                    log.error("站点号异常" + inSta.getStaNo());
                                } else if (basDevp.getStaErr() != 0) {
                                    basDevp.setStaErr(2);
                                    basDevpService.updateById(basDevp);
                                }
                            } catch (Exception e1) {
                                // 退回
                                log.error("扫码检测程序异常" + inSta.getStaNo() + "异常信息" + e1);
                            }
                        } finally {
                            apiLogService.save("wms请求入库货位接口"
                                    , wmsUrl + inboundTaskApplyPath
                                    , null
                                    , "127.0.0.1"
                                    , JSON.toJSONString(storageEscalationParam)
                                    , response
                                    , success
                            );
                        }
                        log.info("入库请求参数=" + JSON.toJSONString(BoxNo));
                        log.info("入库请求返回参数=" + JSON.toJSONString(response));
                    }
                }
            }
        } catch (Exception e) {
            }
        } catch (
                Exception e) {
            log.error("generateStoreWrkFile e", e);
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }
@@ -969,28 +853,28 @@
                            if (taskWrk == null) {
                                continue;
                            }
                            log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk));
//                            R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false);
                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                            staProtocol.setStaNo(staDesc.getStnNo().shortValue());
                            boolean offer = false;
                            try {
                                offer = MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol));
                            } catch (Exception e) {
                                log.error("下发输送线任务失败:异常:" + e);
                                log.error("下发输送线任务失败:异常:offer:" + offer);
                            }
//                            log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk));
////                            R r = siteController.siteDetlUpdate(Integer.valueOf(taskWrk.getTargetPoint()), taskWrk.getWrkNo().shortValue(), (short) 0, "Y", false, false);
//                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
//                            staProtocol.setStaNo(staDesc.getStnNo().shortValue());
//                            boolean offer = false;
//                            try {
//                                offer = MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol));
//                            } catch (Exception e) {
//                                log.error("下发输送线任务失败:异常:" + e);
//                                log.error("下发输送线任务失败:异常:offer:" + offer);
//                            }
//                            JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(r));
                            if (offer) {
                                log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
//                            if (offer) {
//                                log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
                                taskWrk.setStatus(5);
                                taskWrk.setWrkSts(14);
                                taskWrkService.updateById(taskWrk);
                            } else {
                                log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk));
//                                log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r));
                            }
//                            } else {
//                                log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk));
////                                log.error("下发输送线任务失败:异常信息:"+JSON.toJSONString(r));
//                            }
                        }
                    } catch (Exception e) {
                        log.error("出库到出库站异常:异常信息:" + e);
@@ -1890,6 +1774,7 @@
    }
    //----------------------------------------------------------电视机显示处理----------------------------------------
    /**
     * 其他  ===>> LED显示器复位,显示默认信息
     */