pang.jiabao
2025-09-17 cc6aa321c50a855a4eeed8f8e2f420709522b2f4
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -39,10 +39,8 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -88,6 +86,9 @@
    private WrkMastService wrkMastService;
    @Autowired
    private BasRgvMapService basRgvMapService;
    @Resource
    private BasDevpErrLogService basDevpErrLogService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -907,13 +908,14 @@
            if (crnProtocol == null) {
                continue;
            }
            if (crnProtocol.getModeType() != CrnModeType.STOP) {
                // 有任务
                if (crnProtocol.getTaskNo() != 0) {
                    BasErrLog latest = basErrLogService.findLatestByTaskNo(crn.getId(), crnProtocol.getTaskNo().intValue());
                    // 有异常
                    if (latest == null) {
                        News.warnNoLog(""+mark+" - 1"+" - 开始执行:堆垛机异常信息记录 : 有任务,有异常");
                        News.warnNoLog("" + mark + " - 1" + " - 开始执行:堆垛机异常信息记录 : 有任务,有异常");
                        if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                            WrkMast wrkMast = wrkMastMapper.selectById(crnProtocol.getTaskNo());
                            if (wrkMast == null) {
@@ -945,7 +947,7 @@
                                    "任务中异常"    // 备注
                            );
                            if (!basErrLogService.insert(basErrLog)) {
                                News.error(""+mark+" - 2"+" - 堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                                News.error("" + mark + " - 2" + " - 堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                            }
                        }
                    } else {
@@ -955,7 +957,7 @@
                            latest.setUpdateTime(now);
                            latest.setStatus(2);
                            if (!basErrLogService.updateById(latest)) {
                                News.error(""+mark+" - 3"+" - 堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                                News.error("" + mark + " - 3" + " - 堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                            }
                        }
                    }
@@ -964,7 +966,7 @@
                    BasErrLog latest = basErrLogService.findLatest(crn.getId());
                    // 有异常
                    if (crnProtocol.getAlarm() != null && crnProtocol.getAlarm() > 0) {
                        News.warnNoLog(""+mark+" - 4"+" - 开始执行:堆垛机异常信息记录 : 无任务,有异常");
                        News.warnNoLog("" + mark + " - 4" + " - 开始执行:堆垛机异常信息记录 : 无任务,有异常");
                        // 记录新异常
                        if (latest == null || (latest.getErrCode() != crnProtocol.getAlarm().intValue())) {
                            BasCrnError crnError = basCrnErrorMapper.selectById(crnProtocol.getAlarm());
@@ -993,7 +995,7 @@
                                    "无任务异常"    // 备注
                            );
                            if (!basErrLogService.insert(basErrLog)) {
                                News.error(""+mark+" - 5"+" - 堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                                News.error("" + mark + " - 5" + " - 堆垛机plc异常记录失败 ===>> [id:{}] [error:{}]", crn.getId(), errName);
                            }
                        }
                        // 无异常
@@ -1004,11 +1006,12 @@
                            latest.setUpdateTime(now);
                            latest.setStatus(2);
                            if (!basErrLogService.updateById(latest)) {
                                News.error(""+mark+" - 6"+" - 堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                                News.error("" + mark + " - 6" + " - 堆垛机plc异常记录修复失败 ===>> [id:{}] [errLogId:{}]", crn.getId(), latest.getId());
                            }
                        }
                    }
                }
            }
        }
    }
@@ -1123,6 +1126,174 @@
    }
    /**
     * 输送线异常
     */
    public synchronized void recDevpErr() {
        Date now = new Date();
        for (DevpSlave devp : slaveProperties.getDevp()) {
            Integer devpId = devp.getId();
            DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
            Map<Integer, StaProtocol> station = devpThread.getStation();
            for (Map.Entry<Integer, StaProtocol> entry : station.entrySet()) {
                Integer siteNo = entry.getKey();
                StaProtocol staProtocol = entry.getValue();
                Integer workNo = staProtocol.getWorkNo();
                // 输送线报警
                String plcErr = staPlcErr(staProtocol);
                if (staProtocol.isAutoing()) {
                    // 有任务
                    if (staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) {
                        // 获取输送线报警信息
                        BasDevpErrLog latestByTaskNo = basDevpErrLogService.findLatestByTaskNo(siteNo, workNo);
                        // 有异常
                        if (latestByTaskNo == null) {
                            if (!plcErr.equals("")) {
                                WrkMast wrkMast = wrkMastMapper.selectById(workNo);
                                if (wrkMast == null) {
                                    continue;
                                }
                                BasDevpErrLog basErrLog = new BasDevpErrLog(
                                        null,    // 编号
                                        wrkMast.getWrkNo(),    // 工作号
                                        now,    // 发生时间
                                        null,    // 结束时间
                                        wrkMast.getWrkSts(),    // 工作状态
                                        wrkMast.getIoType(),    // 入出库类型
                                        wrkMast.getCrnNo(),    // 堆垛机
                                        devpId,    // plc
                                        wrkMast.getLocNo(),    // 目标库位
                                        wrkMast.getStaNo(),    // 目标站
                                        siteNo,    // 源站
                                        wrkMast.getSourceLocNo(),    // 源库位
                                        wrkMast.getBarcode(),    // 条码
                                        0,    // 异常码
                                        plcErr,    // 异常
                                        1,    // 异常情况
                                        now,    // 添加时间
                                        null,    // 添加人员
                                        now,    // 修改时间
                                        null,    // 修改人员
                                        "任务中异常"    // 备注
                                );
                                if (!basDevpErrLogService.insert(basErrLog)) {
                                    log.error("输送线异常信息插入表asr_bas_devp_err_log异常:{}", basErrLog);
                                }
                            }
                        } else {
                            // 异常修复
                            if (plcErr.equals("")) {
                                latestByTaskNo.setEndTime(now);
                                latestByTaskNo.setUpdateTime(now);
                                latestByTaskNo.setStatus(2);
                                if (!basDevpErrLogService.updateById(latestByTaskNo)) {
                                    log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latestByTaskNo);
                                }
                            }
                        }
                        // 无任务
                    } else {
                        BasDevpErrLog latest = basDevpErrLogService.findLatest(siteNo);
                        // 有异常
                        if (!plcErr.equals("")) {
                            // 记录新异常
                            if (latest == null || !latest.getError().equals(plcErr) || latest.getStatus() == 2 ) {
                                BasDevpErrLog basErrLog = new BasDevpErrLog(
                                        null,    // 编号
                                        null,    // 工作号
                                        now,    // 发生时间
                                        null,    // 结束时间
                                        null,    // 工作状态
                                        null,    // 入出库类型
                                        0,    // 堆垛机
                                        devpId,    // plc
                                        null,    // 目标库位
                                        null,    // 目标站
                                        siteNo,    // 源站
                                        null,    // 源库位
                                        null,    // 条码
                                        0,    // 异常码
                                        plcErr,    // 异常
                                        1,    // 异常情况
                                        now,    // 添加时间
                                        null,    // 添加人员
                                        now,    // 修改时间
                                        null,    // 修改人员
                                        "无任务异常"    // 备注
                                );
                                if (!basDevpErrLogService.insert(basErrLog)) {
                                    log.error("输送线异常记录asr_bas_devp_err_log异常:{}", basErrLog);
                                }
                            }
                            // 无异常
                        } else {
                            // 异常修复
                            if (latest != null && latest.getStatus() == 1) {
                                latest.setEndTime(now);
                                latest.setUpdateTime(now);
                                latest.setStatus(2);
                                if (!basDevpErrLogService.updateById(latest)) {
                                    log.error("输送线异常记录修复失败asr_bas_devp_err_log异常:{}", latest);
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    // 获取输送线报警
    public String staPlcErr(StaProtocol staProtocol){
        Integer siteId = staProtocol.getSiteId();
        if (staProtocol.getBreakerErr()){
            return "断路器故障";
        }
        if (staProtocol.getInfraredErr()){
            return "光电异常";
        }
        if (staProtocol.getOutTimeErr()){
            return "运行超时";
        }
        if (staProtocol.getSeizeSeatErr()){
            return "占位超时";
        }
        if (staProtocol.getWrkYgoodsN()){
            return "有任务无货故障";
        }
        if (staProtocol.getInverterErr()){
            return "变频器故障";
        }
        if (staProtocol.getContactErr()){
            return "电机接触器故障";
        }
        if (staProtocol.getUpcontactErr()){
            return "顶升电机接触器故障";
        }
        if (staProtocol.isFrontErr()){
            return "前超限";
        }
        if (staProtocol.isBackErr()){
            return "后超限";
        }
        if (staProtocol.isHighErr()){
            return "高超限";
        }
        if (staProtocol.isLeftErr()){
            return "左超限";
        }
        if (staProtocol.isRightErr()){
            return "右超限";
        }
        if (staProtocol.isBarcodeErr() && siteId != 1083 && siteId != 1086 && siteId != 1089 ){
            return "扫码失败";
        }
        return "";
    }
    /**
     * 出库  ===>> 工作档信息写入led显示器
     */
    public synchronized void ledExecute(Integer mark) {