pang.jiabao
2025-05-13 688e299d29bd76cbd30bf3d7267bdc9afad954b0
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -11,13 +11,11 @@
import com.zy.asrs.domain.param.CrnOperatorParam;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.wms.StorageEscalationParam;
import com.zy.asrs.entity.wms.WmsResult;
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;
import com.zy.common.service.CommonService;
import com.zy.core.CrnThread;
@@ -34,9 +32,9 @@
import com.zy.core.properties.SlaveProperties;
import com.zy.core.thread.BarcodeThread;
import com.zy.core.thread.SiemensDevpThread;
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -44,6 +42,7 @@
import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Random;
/**
 * 立体仓库WCS系统主流程业务
@@ -63,6 +62,8 @@
    @Autowired
    private LocMastService locMastService;
    @Autowired
    private LocDetlService locDetlService;
    @Autowired
    private BasCrnpService basCrnpService;
    @Autowired
    private BasDevpService basDevpService;
@@ -72,9 +73,11 @@
    private BasCrnErrorMapper basCrnErrorMapper;
    @Autowired
    private TaskWrkMapper taskWrkMapper;
    @Autowired
    private TaskWrkService taskWrkService;
    @Autowired
    private CommonService commonService;
    @Autowired
    private StaDescMapper staDescMapper;
@@ -84,9 +87,6 @@
    @Autowired
    private CommonService commonService;
    @Autowired
    private ToWmsService toWmsService;
@@ -94,9 +94,19 @@
    private CrnController crnController;
    @Autowired
    private ConfigService configService;
    private TransferTaskService transferTaskService;
    public void generateStoreWrkFile1() throws IOException, InterruptedException {
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Value("${loc-move.enable}")
    private boolean enable;
    public synchronized void generateStoreWrkFile() {
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
@@ -145,70 +155,47 @@
                        back = true;
                    }
                    // 判断是否满足入库条件
                    if (staProtocol.isAutoing() && staProtocol.isLoading()
                            && staProtocol.isInEnable()
                            && !staProtocol.isEmptyMk() && workNo >= 9790
                            && staProtocol.isPakMk()) {
                    if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable()
                            && !staProtocol.isEmptyMk() && workNo >= 9000 && staProtocol.isPakMk()) {
                        // 获取条码扫描仪信息
                        BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode());
                        if (barcodeThread == null) {
                            continue;
                        }
                        String BoxNo = barcodeThread.getBarcode();
                        if (Cools.isEmpty(BoxNo)) {
                            log.error("{}号条码扫描失败,值:{}",inSta.getBarcode(),BoxNo);
                            continue;
                        }
                        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;
                                }
                            }
                            continue;
                        }
                        if (back) {
                            storageEscalationParam.setWCSStatus(1);
                            storageEscalationParam.setWCSErrorMessage(storageEscalationParam.getWCSErrorMessage() + errMsg);
                        }
                        log.info("组托入库={}", storageEscalationParam);
                        storageEscalationParam.setBarcode(BoxNo);
                        WmsResult result = toWmsService.getLocNoFromWms(storageEscalationParam);
                        log.info("组托入库={}", storageEscalationParam);
                        TaskWrk taskWrk = toWmsService.getLocNoFromWms(storageEscalationParam);
                        if (taskWrk == null) {
                            log.error("入库请求wms创建任务工作档为空:{}",storageEscalationParam);
                            continue;
                        }
                        if (back) {
                            log.info("托盘退回==>{},{}", BoxNo, errMsg);
                            staProtocol.setStaNo(inSta.getBackSta().shortValue());
                            devpThread.setPakMk(staProtocol.getSiteId(), false);
                            MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                        } else {
                            if (result != null) {
                                // 创新一个入库工作档
                                TaskWrk taskWrk = taskWrkService.selectByTaskNo(result.getTaskNo());
                                if (Cools.isEmpty(taskWrk)) {
                                    taskWrk = createInTask(result, BoxNo, inSta.getStaNo());
                                    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));
                                    //添加上报日志
                                    toWmsService.addReportLog(taskWrk);
                                } else {
                                    log.info("创建工作档失败==>{}", taskWrk.getTaskNo());
                                    staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                    devpThread.setPakMk(staProtocol.getSiteId(), false);
                                    MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                                }
                            } else {
                                log.info("请求wms获取库位失败==>{}", BoxNo);
                                staProtocol.setStaNo(inSta.getBackSta().shortValue());
                                devpThread.setPakMk(staProtocol.getSiteId(), false);
                                MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
                            }
                            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));
                        }
                        log.info("入库请求返回参数=" + JSON.toJSONString(result));
                    }
                }
            }
@@ -226,8 +213,6 @@
        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()));
                for (StaDesc staDesc : staDescs) {
                    try {
                        // 获取堆垛机出库站信息
                        DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId());
@@ -239,34 +224,36 @@
                        }
                        if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                            // 查询工作档
                            TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), staDesc.getStnNo().toString());
                            TaskWrk taskWrk = taskWrkMapper.selectCrnStaWorking(crnSlave.getId(), String.valueOf(crnStn.getStaNo()-1));
                            if (taskWrk == null) {
                                continue;
                            }
                            log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk));
                            staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                            staProtocol.setStaNo(staDesc.getStnNo().shortValue());
                            boolean offer = false;
                            try {
                                offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                            } catch (Exception e) {
                                log.error("下发输送线任务失败:异常:" + e);
                                log.error("下发输送线任务失败:异常:offer:" + offer);
                            }
                            if (offer) {
                                log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
                                taskWrk.setStatus(5);
                                taskWrk.setWrkSts(14);
                                taskWrkService.updateById(taskWrk);
                                log.info("下发输送线任务:taskWrk:" + JSON.toJSONString(taskWrk));
                                staProtocol.setWorkNo(taskWrk.getWrkNo().shortValue());
                                staProtocol.setStaNo(Short.valueOf(taskWrk.getTargetPoint()));
                                boolean offer = false;
                                try {
                                    offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                                } catch (Exception e) {
                                    log.error("下发输送线任务失败:异常:" + e);
                                    log.error("下发输送线任务失败:异常:offer:" + offer);
                                }
                                if (offer) {
                                    log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(taskWrk));
                                    taskWrk.setStatus(5);
                                    taskWrk.setWrkSts(14);
                                    taskWrk.setCompleteTime(new Date());
                                    taskWrkService.updateById(taskWrk);
                            } else {
                                log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk));
                            }
                                } else {
                                    log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(taskWrk));
                                }
//                            }
                        }
                    } catch (Exception e) {
                        log.error("出库到出库站异常:异常信息:" + e);
                    }
                }
//                }
            }
        }
@@ -368,11 +355,12 @@
//                int workNo = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号
//                taskWrk.setWrkNo(workNo);//工作号
                taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//派发状态
                taskWrk.setAssignTime(new Date());//派发时间
                taskWrk.setExecuteTime(new Date());
//                taskWrk.setAssignTime(new Date());//派发时间
                taskWrk.setWrkSts(3);//工作状态 3.吊车入库
                taskWrk.setCrnNo(staDesc.getCrnNo());//堆垛机号
                taskWrk.setModiTime(new Date());
                taskWrk.setModiUser(9988L);
//                taskWrk.setModiTime(new Date());
//                taskWrk.setModiUser(9988L);
                // 命令下发区 --------------------------------------------------------------------------
                CrnCommand crnCommand = new CrnCommand();
@@ -388,11 +376,13 @@
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位排
                crnCommand.setCommand((short) 1);
                log.info("堆垛机入库任务下发={}", crnCommand);
                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) {
                if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                    throw new CoolException("堆垛机命令生成失败");
                } else {
                    try {
                        // 上报执行状态
                        toWmsService.executionStatusReport(taskWrk.getTaskNo(), taskWrk.getWrkSts());
                        taskWrkService.updateById(taskWrk);
                    } catch (Exception e) {
                        log.error("修改工作档状态 2.设备上走 => 3.吊车入库中 失败!!,工作号={}", taskWrk.getWrkNo());
@@ -438,6 +428,15 @@
                    if (flag) {
                        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 {
                        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)) {
@@ -495,7 +494,7 @@
                            taskWrk.setMarkStart(1);
                        }
                        if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command), false)) {
                        if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, command))) {
                            log.error("堆垛机命令生成失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(command));
                            throw new CoolException("堆垛机命令生成失败");
                        } else {
@@ -504,10 +503,12 @@
                                Date now = new Date();
                                taskWrk.setWrkSts(12);
                                taskWrk.setStatus(2);
                                taskWrk.setModiTime(now);
                                taskWrk.setExecuteTime(now);
                                if (taskWrkMapper.updateById(taskWrk) == 0) {
                                    log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                }
                                // 上报执行状态
                                toWmsService.executionStatusReport(taskWrk.getTaskNo(), taskWrk.getWrkSts());
                            } catch (Exception e) {
                                log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
                                log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,异常:" + e);
@@ -568,13 +569,14 @@
                crnCommand.setDestinationPosY(Utils.getBayShort(taskWrk.getTargetPoint()));     // 目标库位列
                crnCommand.setDestinationPosZ(Utils.getLevShort(taskWrk.getTargetPoint()));     // 目标库位层
                crnCommand.setCommand((short) 1);
                if (!CommandUtils.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand), false)) {
                if (!MessageQueue.offer(SlaveType.Crn, taskWrk.getCrnNo(), new Task(2, crnCommand))) {
                    log.error("堆垛机命令下发失败,堆垛机号={},任务数据={}", taskWrk.getCrnNo(), JSON.toJSON(crnCommand));
                } else {
                    // 修改工作档状态 11.生成出库ID => 12.吊车出库中
                    Date now = new Date();
                    taskWrk.setWrkSts(12);
                    taskWrk.setStatus(2);
                    taskWrk.setExecuteTime(now);
                    taskWrk.setModiTime(now);
                    if (taskWrkMapper.updateById(taskWrk) == 0) {
                        log.error("修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", taskWrk.getWrkNo());
@@ -655,6 +657,7 @@
                        locMast1.setModiUser(9999L);
                        locMastService.updateById(locMast1);
                    }
                    taskWrk.setCompleteTime(new Date());
                    taskWrkService.updateById(taskWrk);
                }
@@ -841,36 +844,6 @@
    }
    private TaskWrk createInTask(WmsResult result, String barcode, Integer startPoint) {
        //String locNo = Utils.Fusion(result.getRow(), result.getFloor(), result.getColumn());
        String locNo = result.getLocNo();
        Date now = new Date();
        TaskWrk taskWrk = new TaskWrk();
        int workNo1 = commonService.getWorkNo(WorkNoType.PAKIN.type);//获取入库工作号
        taskWrk.setTaskNo(result.getTaskNo());//任务号
        taskWrk.setWrkNo(workNo1);
        taskWrk.setStatus(TaskStatusType.DISTRIBUTE.id);//任务状态:派发
        taskWrk.setCreateTime(now);
        taskWrk.setIoType(1);//任务类型
        taskWrk.setIoPri(13);//优先级
        taskWrk.setBarcode(barcode);//条码
        LocMast locMast = locMastService.selectByLocNo(locNo);
        taskWrk.setCrnNo(locMast.getCrnNo());
        taskWrk.setTargetPoint(locNo);
        taskWrk.setStartPoint(startPoint + "");
        taskWrk.setCrnNo(result.getCrnNo());
        if (taskWrk.getIoType() == 1) {
            taskWrk.setWrkSts(2);
            if (!Cools.isEmpty(taskWrk.getTargetPoint())) {
                taskWrk.setOriginTargetPoint(taskWrk.getTargetPoint());
            }
        }
        return taskWrk;
    }
    /**
     * 入出库模式切换函数
     */
@@ -878,6 +851,9 @@
        try {
            // 根据输送线plc遍历
            for (DevpSlave devp : slaveProperties.getDevp()) {
                if (devp.getId() == 2) {
                    continue;
                }
                SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId());
                for (DevpSlave.Sta inSta : devp.getInSta()) {
                    WrkMast pakout = wrkMastMapper.selectWorkingPakout(inSta.getBackSta());
@@ -1036,4 +1012,191 @@
        }
    }
    /**
     * 跑库程序
     */
    public void debug(String sts, Long modiUser, Integer loc_type1) {
        if (!enable) {
            return;
        }
        List<BasCrnp> basCrnps = basCrnpService.selectList(new EntityWrapper<BasCrnp>());
        if (basCrnps.isEmpty()) {
            return;
        }
        for (BasCrnp basCrnp : basCrnps) {
            if (!basCrnp.getInEnable().equals("N") || !basCrnp.getOutEnable().equals("Y")) {
                continue;
            }
            List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().eq("crn_no", basCrnp.getCrnNo()).eq("io_type", 11));
            if (Cools.isEmpty(wrkMasts) || wrkMasts.isEmpty()) {
                int i = locMastService.selectCount(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser));
                LocMast locMastStart = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", sts).eq("loc_type1", loc_type1).ne("modi_user", modiUser));
                if (locMastStart == null || i > 1) {
                    continue;
                }
                List<LocMast> locMasts = locMastService.selectList(new EntityWrapper<LocMast>()
                        .eq("loc_sts", "O")
                        .eq("crn_no", basCrnp.getCrnNo())
                        .eq("loc_type1", locMastStart.getLocType1())
                        .ne("modi_user", 77));
                if (Cools.isEmpty(locMasts)) {
                    continue;
                }
                Random random = new Random();
                LocMast locMastEnd = locMasts.get(random.nextInt(locMasts.size()));
                locMove(locMastStart, locMastEnd, Long.parseLong(basCrnp.getCrnNo().toString()));
            }
        }
    }
    public void locMove(LocMast sourceLoc, LocMast locNo, Long userId) {
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLoc.getLocNo()));
        LocMast loc = locMastService.selectById(locNo);
        if (!sourceLoc.getCrnNo().equals(loc.getCrnNo())) {
            throw new CoolException("移转库位属于不同堆垛机");
        }
        Date now = new Date();
        // 获取工作号
        int workNo = commonService.getWorkNo(WorkNoType.PICK.type);
        // 保存工作档
        WrkMast wrkMast = new WrkMast();
        wrkMast.setWrkNo(workNo);
        wrkMast.setIoTime(now);
        wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID
        wrkMast.setIoType(11); // 入出库状态: 11.库格移载
        wrkMast.setIoPri(10D);
        wrkMast.setCrnNo(sourceLoc.getCrnNo());
        wrkMast.setSourceLocNo(sourceLoc.getLocNo()); // 源库位
        wrkMast.setLocNo(locNo.getLocNo()); // 目标库位
        wrkMast.setFullPlt(Cools.isEmpty(locDetls) ? "N" : "Y"); // 满板:Y
        wrkMast.setPicking("N"); // 拣料
        wrkMast.setExitMk("N"); // 退出
        wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板
        wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码
        wrkMast.setLinkMis("N");
        wrkMast.setAppeUser(userId);
        wrkMast.setAppeTime(now);
        wrkMast.setModiUser(userId);
        wrkMast.setModiTime(now);
        boolean res = wrkMastService.insert(wrkMast);
        if (!res) {
            throw new CoolException("保存工作档失败");
        }
        // 工作档明细保存
        for (LocDetl locDetl : locDetls) {
            WrkDetl wrkDetl = new WrkDetl();
            wrkDetl.sync(locDetl);
            wrkDetl.setWrkNo(workNo);
            wrkDetl.setIoTime(now);
            wrkDetl.setAnfme(locDetl.getAnfme());
            wrkDetl.setAppeTime(now);
            wrkDetl.setAppeUser(userId);
            wrkDetl.setModiTime(now);
            wrkDetl.setModiUser(userId);
            if (!wrkDetlService.insert(wrkDetl)) {
                throw new CoolException("保存工作档明细失败");
            }
        }
        // 修改源库位状态
        if (sourceLoc.getLocSts().equals("D") || sourceLoc.getLocSts().equals("F")) {
            sourceLoc.setLocSts("R"); // R.出库预约
            sourceLoc.setModiUser(userId);
            sourceLoc.setModiTime(now);
            if (!locMastService.updateById(sourceLoc)) {
                throw new CoolException("更新源库位状态失败");
            }
        } else {
            throw new CoolException("源库位出库失败,状态:" + sourceLoc.getLocSts$());
        }
        // 修改目标库位状态
        if (loc.getLocSts().equals("O")) {
            loc.setLocSts("S"); // S.入库预约
            loc.setModiTime(now);
            loc.setModiUser(userId);
            if (!locMastService.updateById(loc)) {
                throw new CoolException("更新目标库位状态失败");
            }
        } else {
            throw new CoolException("移转失败,目标库位状态:" + loc.getLocSts$());
        }
    }
    /**
     * 转移任务下发
     */
    public void transferTaskStart() {
        for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) {
            try {
                // 获取入库站信息
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol = devpThread.getStation().get(sta.getStaNo());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                    // 查询工作档
                    TransferTask transferTask = transferTaskService.selectByStartPoint(sta.getStaNo());
                    if (transferTask == null) {
                        continue;
                    }
                    log.info("下发输送线转移任务:taskWrk:" + JSON.toJSONString(transferTask));
                    staProtocol.setWorkNo(transferTask.getWrkNo().shortValue());
                    staProtocol.setStaNo(transferTask.getTargetPoint().shortValue());
                    boolean offer = false;
                    try {
                        offer = MessageQueue.offer(SlaveType.Devp, 1, new Task(2, staProtocol));
                    } catch (Exception e) {
                        log.error("下发输送线转移任务:异常:" + e);
                        log.error("下发输送线转移任务:异常:offer:" + offer);
                    }
                    if (offer) {
                        log.info("下发输送线任务成功:taskWrk:" + JSON.toJSONString(transferTask));
                        transferTask.setStatus(2);
                        transferTaskService.updateById(transferTask);
                    } else {
                        log.error("下发输送线任务失败:taskWrk:" + JSON.toJSONString(transferTask));
                    }
                }
            } catch (Exception e) {
                log.error("转移任务异常:异常信息:" + e);
            }
        }
    }
    /**
     * 转移任务完成
     */
    public void transferTaskEnd() {
        for (DevpSlave.Sta sta : slaveProperties.getDevp().get(1).getInSta()) {
            try {
                // 获取终点站
                DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
                StaProtocol staProtocol = devpThread.getStation().get(sta.getOverSta());
                if (staProtocol == null) {
                    continue;
                } else {
                    staProtocol = staProtocol.clone();
                }
                if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == 0)) {
                    // 查询工作档
                    TransferTask transferTask = transferTaskService.selectByEndPoint(sta.getStaNo());
                    if (transferTask == null) {
                        continue;
                    }
                    log.info("转移任务完成:transferTask:" + JSON.toJSONString(transferTask));
                    transferTask.setStatus(3);
                    transferTaskService.updateById(transferTask);
                }
            } catch (Exception e) {
                log.error("转移任务异常:异常信息:" + e);
            }
        }
    }
}