| | |
| | | public synchronized void crnStnToOutStn(Integer mark) { |
| | | |
| | | for (CrnSlave crnSlave : slaveProperties.getCrn()) { |
| | | try { |
| | | // 每台堆垛机的所有出库站处理在同一个事务中执行,快速提交释放锁 |
| | | processCrnStnToOutStnForCrn(crnSlave, mark); |
| | | } catch (Exception e) { |
| | | News.error(""+mark+" - crnStnToOutStn"+" - 处理堆垛机{}时发生异常", crnSlave.getId(), e); |
| | | // 继续处理下一台堆垛机,不中断整个流程 |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理单台堆垛机的所有出库站操作(使用独立事务,快速提交释放锁) |
| | | * 注意:必须是public方法,Spring AOP才能代理事务 |
| | | */ |
| | | @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) |
| | | public void processCrnStnToOutStnForCrn(CrnSlave crnSlave, Integer mark) { |
| | | // 遍历堆垛机出库站 |
| | | for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) { |
| | | processCrnStnToOutStn(crnStn, mark); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 处理单个堆垛机出库站的出库操作(无事务,事务由上层方法管理) |
| | | */ |
| | | private void processCrnStnToOutStn(CrnSlave.CrnStn crnStn, Integer mark) { |
| | | // 获取堆垛机出库站信息 |
| | | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, crnStn.getDevpPlcId()); |
| | | StaProtocol staProtocol = devpThread.getStation().get(crnStn.getStaNo()); |
| | | if (staProtocol == null) { |
| | | continue; |
| | | return; |
| | | } else { |
| | | staProtocol = staProtocol.clone(); |
| | | } |
| | |
| | | // 查询工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId()); |
| | | if (wrkMast == null) { |
| | | continue; |
| | | return; |
| | | } |
| | | // 判断工作档条件 |
| | | if (wrkMast.getIoType() < 100 || wrkMast.getStaNo() == null || wrkMast.getSourceStaNo() == null) { |
| | | continue; |
| | | return; |
| | | } |
| | | // 判断吊车是否实际已完成,且电脑状态在move中,以备电脑进行更新工作档 |
| | | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, wrkMast.getCrnNo()); |
| | | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); |
| | | if (crnProtocol.statusType == CrnStatusType.FETCHING || crnProtocol.statusType == CrnStatusType.PUTTING) { |
| | | // 移动中 |
| | | continue; |
| | | return; |
| | | } |
| | | // 判断堆垛机状态等待确认 |
| | | if (crnProtocol.modeType == CrnModeType.AUTO && crnProtocol.getTaskNo().equals(wrkMast.getWrkNo().shortValue()) |
| | |
| | | staProtocol.setWorkNo(wrkMast.getWrkNo()); |
| | | |
| | | if (!MessageQueue.offer(SlaveType.Devp, crnStn.getDevpPlcId(), new Task(2, staProtocol))) { |
| | | continue; |
| | | return; |
| | | } |
| | | wrkMast.setCrnEndTime(new Date()); |
| | | if (wrkMastMapper.updateById(wrkMast) != 0) { |
| | |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | | News.error(""+mark+" - 1"+" - 更新工作档的工作状态为14失败!!! [工作号:{}]", wrkMast.getWrkNo()); |
| | | throw new CoolException("更新工作档的工作状态为14失败"); |
| | | } |
| | | |
| | | }else { |
| | |
| | | +"、货叉位置:"+crnProtocol.forkPosType+"==HOME:0 // 货叉原位:" + CrnForkPosType.HOME); |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |