pjb
18 小时以前 29e0a8a8f74a7155f7e6c0d854bb7566c655b0c8
记录输送线异常日志,手动站点转移,
6个文件已修改
263 ■■■■■ 已修改文件
src/main/java/com/zy/core/MainProcess.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/mapper/WrkMastMapper.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/WrkMastService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/impl/MainServiceImpl.java 246 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/service/impl/WrkMastServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/WrkMastMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/core/MainProcess.java
@@ -88,6 +88,9 @@
                    // 堆垛机异常信息记录
                    mainService.recCrnErr(7);
                    // 输送线异常信息记录
                    mainService.recDevpErr();
                    // 出库  ===>> 工作档信息写入led显示器
                    mainService.ledExecute(9);
@@ -99,6 +102,9 @@
                    // 堆垛机回原点
                    mainService.originGo();
                    //手动站位转移
                    mainService.manualStationTransfer();
                } catch (Exception e) {
                    e.printStackTrace();
                }
src/main/java/com/zy/mapper/WrkMastMapper.java
@@ -118,6 +118,7 @@
    WrkMast selectPickStep2(@Param("barcode")String barcode);
    WrkMast selectByWrkNo(@Param("wrkNo")Integer wrkNo);
    WrkMast selectByIoTypeAndWrkSts(@Param("ioType")Integer ioTyper,@Param("wrkSts")Long wrkSts);
    /**
     * 获取一条到104站点的出库任务
src/main/java/com/zy/service/WrkMastService.java
@@ -12,6 +12,7 @@
    List<WrkMast> selectToBeCompleteData();
    List<WrkMast> selectToBeHistoryData();
    WrkMast selectByIoTypeAndWrkSts(Integer ioType,Long wrkSts);
    int getOutToStn182(Integer devpNo);
src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -77,6 +77,7 @@
    // 成品库堆垛机出库站点到rgv接驳点
    public static final Map<Integer,Short>  crnOutSiteToRgvSite = new HashMap<>();
    public static final Map<Integer,Short>  crnOutSiteToRgvSite2 = new HashMap<>();
    static {
        emptyPalletSiteMap.put(1001,"M"); // emptyPalletSiteMap.put(1002,"M");
@@ -104,6 +105,9 @@
        outGzxSiteList.add(1081);outGzxSiteList.add(1084);outGzxSiteList.add(1087);
        crnOutSiteToRgvSite.put(1093, (short) 1091);crnOutSiteToRgvSite.put(1099, (short) 1097);crnOutSiteToRgvSite.put(1107, (short) 1105);
        crnOutSiteToRgvSite2.put(1087, (short) 1089);crnOutSiteToRgvSite2.put(1084, (short) 1086);crnOutSiteToRgvSite2.put(1081, (short) 1083);
        crnOutSiteToRgvSite2.put(1043, (short) 1041);crnOutSiteToRgvSite2.put(1016, (short) 1018);
    }
    @Autowired
@@ -146,6 +150,9 @@
    @Resource
    private ConfigService configService;
    @Resource
    private BasDevpErrLogService basDevpErrLogService;
    @Value("${wms.url}")
    private String wmsUrl;
@@ -1387,6 +1394,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) {
@@ -1439,6 +1614,9 @@
                    case 110:
                        ledCommand.setTitle("空板出库");
                        ledCommand.setEmptyMk(true);
                        break;
                    case 120:
                        ledCommand.setTitle("手动转移");
                        break;
                    default:
                        News.error("任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType());
@@ -1766,7 +1944,7 @@
            } else {
                staProtocol = staProtocol.clone();
            }
            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && staProtocol.getWorkNo() <= 9000) {
            if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.isInEnable() || staProtocol.isOutEnable() && site == 1090) && staProtocol.getWorkNo() != 0 && (staProtocol.getWorkNo() <= 9000 || staProtocol.getWorkNo()>=30000)) {
                if (staProtocol.getSiteId() == 1034 && !staProtocol.isHigh()) { // 1034空母拖回流任务需要高信号
                    continue;
                }
@@ -1808,7 +1986,7 @@
                if (staProtocol.getSiteId() == 1090 && wrkMast.getStaNo() == 1090) {
                    continue;
                }
                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) {
                if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15 || (wrkMast.getIoType() == 120 && wrkMast.getWrkSts() == 52)) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) {
                    // 有1090的任务跳过rgv分配
                    if(wrkMast.getStaNo() == 1090) {
                        DevpThread devpThread2 = (DevpThread) SlaveConnection.get(SlaveType.Devp, 2);
@@ -1882,6 +2060,14 @@
                        continue;
                    }
                    wrkMast.setWrkSts(15L);
                    wrkMast.setModiTime(new Date());
                    wrkMastService.updateById(wrkMast);
                } else if(wrkMast.getIoType() == 120) {
                    if(wrkMast.getWrkSts() != 53 ){
                        log.warn("rgv放货完成120,rgv未复位:rgv号{},任务号:{},任务状态{}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts());
                        continue;
                    }
                    wrkMast.setWrkSts(54L);
                    wrkMast.setModiTime(new Date());
                    wrkMastService.updateById(wrkMast);
                }
@@ -2427,4 +2613,60 @@
            }
        }
    }
    /**
     * 手动站位转移
     */
    public synchronized void manualStationTransfer() {
        WrkMast wrkMast = wrkMastMapper.selectByIoTypeAndWrkSts(120, 51L);
        if (Cools.isEmpty(wrkMast)) {
            return;
        }
        int devpId;
        if (wrkMast.getSourceStaNo() < 1044) {
            devpId = 1;
        } else if (wrkMast.getSourceStaNo() < 1091) {
            devpId = 2;
        } else {
            devpId = 3;
        }
        SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devpId);
        try {
            StaProtocol staProtocol = devpThread.getStation().get(wrkMast.getSourceStaNo());
            if (staProtocol == null) {
                wrkMast.setIoTime(new Date());
                wrkMastService.updateById(wrkMast);
                return;
            } else {
                staProtocol = staProtocol.clone();
            }
            // 站点条件判断
            if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.getWorkNo() == 0 && staProtocol.isPakMk()) {
                // 更新站点信息 且 下发plc命令
                StaProtocol staProtocolNew = new StaProtocol();
                staProtocolNew.setSiteId(staProtocol.getSiteId());
                staProtocolNew.setWorkNo(wrkMast.getWrkNo());
                staProtocolNew.setStaNo(crnOutSiteToRgvSite2.get(wrkMast.getSourceStaNo()));
                devpThread.setPakMk(staProtocol.getSiteId(), false);
                boolean result = MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocolNew));
                log.info("手动站位转移输送线下发:" + staProtocolNew.getWrkNo() + "," + staProtocolNew.getSiteId());
                if (!result) {
                    News.errorNoLog("" + " - 1" + " - 更新plc站点信息失败");
                    throw new CoolException("更新plc站点信息失败");
                }
                wrkMast.setIoTime(new Date());
                wrkMast.setWrkSts(52L);
                wrkMastService.updateById(wrkMast);
            } else {
                wrkMast.setIoTime(new Date());
                wrkMastService.updateById(wrkMast);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/zy/service/impl/WrkMastServiceImpl.java
@@ -36,4 +36,9 @@
    public WrkMast selectByWrkNo(int wrkNo) {
        return this.baseMapper.selectByWrkNo(wrkNo);
    }
    @Override
    public WrkMast selectByIoTypeAndWrkSts(Integer ioType,Long wrkSts) {
        return this.baseMapper.selectByIoTypeAndWrkSts(ioType,wrkSts);
    }
}
src/main/resources/mapper/WrkMastMapper.xml
@@ -68,6 +68,10 @@
        <result column="work_no_other" property="workNoOther" />
    </resultMap>
    <select id="selectByIoTypeAndWrkSts"  resultMap="BaseResultMap">
        select top 1 * from asr_wrk_mast where io_type = #{ioType} and wrk_sts = #{wrkSts} order by io_time
    </select>
    <select id="selectInGzxCount" resultType="java.lang.Integer">
       select
         count(*)