|  |  |  | 
|---|
|  |  |  | import com.baomidou.mybatisplus.mapper.Wrapper; | 
|---|
|  |  |  | import com.core.common.Cools; | 
|---|
|  |  |  | import com.core.common.DateUtils; | 
|---|
|  |  |  | import com.core.common.R; | 
|---|
|  |  |  | import com.core.exception.CoolException; | 
|---|
|  |  |  | import com.zy.asrs.entity.*; | 
|---|
|  |  |  | import com.zy.asrs.mapper.BasCrnErrorMapper; | 
|---|
|  |  |  | 
|---|
|  |  |  | 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 java.util.*; | 
|---|
|  |  |  | import java.util.stream.Collectors; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastMapper wrkMastMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastLogService wrkMastLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkDetlService wrkDetlService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkDetlLogService wrkDetlLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WaitPakinMapper waitPakinMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | private BasCrnErrorMapper basCrnErrorMapper; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastService wrkMastService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private WrkMastLogService wrkMastLogService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | private ConfigService configService; | 
|---|
|  |  |  | @Autowired | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (inSta.getStaNo() == 1005) { | 
|---|
|  |  |  | if (inSta.getStaNo() == 1002 || inSta.getStaNo() == 1007) { | 
|---|
|  |  |  | //检测是否有出库任务 | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .in("io_type", 101, 103, 107) | 
|---|
|  |  |  | .in("sta_no", 1003, 1007) | 
|---|
|  |  |  | .in("sta_no", 1003, 1004) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (!wrkMasts.isEmpty()) { | 
|---|
|  |  |  | News.error("" + mark + " - 4" + " - 1003站入库,检测存在出库任务,等待出库任务执行完成,托盘码={}", barcode); | 
|---|
|  |  |  | News.error("" + mark + " - 4" + " - 入库,检测存在出库任务,等待出库任务执行完成,托盘码={}", barcode); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | .eq("loc_no", dto.getLocNo())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | short staNo = dto.getStaNo().shortValue(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int sourceStaNo = dto.getSourceStaNo(); | 
|---|
|  |  |  | if (sourceStaNo == 1007) { | 
|---|
|  |  |  | staNo = 2002; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (inSta.getStaNo() == 1002) { | 
|---|
|  |  |  | staNo = 2002; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * 拣料、并板、盘点再入库 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPick(Integer mark) { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickSta()) { | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta pickSta : devp.getPickSta()) { | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(pickSta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.getWorkNo() > 0 | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.getWorkNo() > 0 | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                    // 获取条码扫描仪信息 | 
|---|
|  |  |  | //                    BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, pickSta.getBarcode()); | 
|---|
|  |  |  | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //                    WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | // 无拣料数据 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPakInStep3(staProtocol.getWorkNo().intValue()); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | // 无拣料数据 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 拣、盘、并 作业站转换 | 
|---|
|  |  |  | //                    int stnNo = 0; | 
|---|
|  |  |  | //                    if (wrkMast.getStaNo() == 109) { | 
|---|
|  |  |  | //                        stnNo = 127; | 
|---|
|  |  |  | //                    } else if (wrkMast.getStaNo() == 113) { | 
|---|
|  |  |  | //                        stnNo = 128; | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        log.error("{}号任务数据异常!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | // 获取目标站 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", wrkMast.getIoType() - 50) | 
|---|
|  |  |  | .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)) { | 
|---|
|  |  |  | // 获取目标站 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", wrkMast.getIoType() - 50) | 
|---|
|  |  |  | .eq("stn_no", pickSta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)) { | 
|---|
|  |  |  | //                        News.error(""+mark+" - 2"+" - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
|---|
|  |  |  | //                        staProtocol.setWorkNo((short) 9989); | 
|---|
|  |  |  | //                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1)); | 
|---|
|  |  |  | //                        devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | //                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | //LED | 
|---|
|  |  |  | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg = "此为拣料、并板、盘点再入库.请放在" + pickSta.getBackSta().shortValue() + "站点"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errorMsg)); | 
|---|
|  |  |  | //LED | 
|---|
|  |  |  | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, pickSta.getLed()); | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg = "此为拣料、并板、盘点再入库.请放在" + pickSta.getBackSta().shortValue() + "站点"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, pickSta.getLed(), new Task(5, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | LocTypeDto locTypeDto = new LocTypeDto(staProtocol); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | SearchLocParam param = new SearchLocParam(); | 
|---|
|  |  |  | param.setBarcode(wrkMast.getBarcode()); | 
|---|
|  |  |  | param.setSourceStaNo(pickSta.getStaNo()); | 
|---|
|  |  |  | param.setLocType1(locTypeDto.getLocType1()); | 
|---|
|  |  |  | String response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(wmsUrl) | 
|---|
|  |  |  | .setPath("/rpc/pakin/pick/loc/v1") | 
|---|
|  |  |  | .setJson(JSON.toJSONString(param)) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .doPost(); | 
|---|
|  |  |  | JSONObject jsonObject = JSON.parseObject(response); | 
|---|
|  |  |  | if (jsonObject.getInteger("code").equals(200)) { | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | // 更新站点信息 且 下发plc命令 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setPalletSize(locMast.getLocType2()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.error("" + mark + " - 5" + " - 请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/pick/loc/v1", JSON.toJSONString(param), response); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | + "、空板信号:" + staProtocol.isEmptyMk()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 保存工作明细档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作明细档历史档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 保存工作主档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作主档历史档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 堆垛机站点(目标站) | 
|---|
|  |  |  | Integer staNo = staDesc.getCrnStn(); | 
|---|
|  |  |  | // 更新工作档数据状态 | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setStaNo(staNo); // 目标站 | 
|---|
|  |  |  | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(""); // 源库位清空 | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setUpdMk("");//允许再次移库 | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | throw new CoolException("更新工作档数据状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新明细档io_time (历史档关联使用) | 
|---|
|  |  |  | wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
|---|
|  |  |  | // 修改库位状态 Q.拣料/盘点/并板再入库 | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | locMast.setLocSts("Q"); | 
|---|
|  |  |  | locMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(locMast)) { | 
|---|
|  |  |  | throw new CoolException("修改库位状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | // 更新站点信息 且 下发plc命令 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setPalletSize(locMast.getLocType2()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | + "、空板信号:" + staProtocol.isEmptyMk()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog("" + mark + " - 0" + " - 拣料、并板、盘点再入库  ===》执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | * 拣料、并板、盘点再入库-条码 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void stnToCrnStnPickBarcode(Integer mark) { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta insta : devp.getInSta()) { | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(insta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.getWorkNo() > 0 | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, insta.getBarcode()); | 
|---|
|  |  |  | if (barcodeThread == null) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (DevpSlave devp : slaveProperties.getDevp()) { | 
|---|
|  |  |  | // 遍历拣料入库口 | 
|---|
|  |  |  | for (DevpSlave.Sta insta : devp.getInSta()) { | 
|---|
|  |  |  | // 获取拣料入库站信息 | 
|---|
|  |  |  | SiemensDevpThread devpThread = (SiemensDevpThread) SlaveConnection.get(SlaveType.Devp, devp.getId()); | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(insta.getStaNo()); | 
|---|
|  |  |  | if (staProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", insta.getBarcode(), barcode); | 
|---|
|  |  |  | if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.isAutoing() | 
|---|
|  |  |  | && staProtocol.isLoading() | 
|---|
|  |  |  | && staProtocol.isInEnable() | 
|---|
|  |  |  | && staProtocol.getWorkNo() > 0 | 
|---|
|  |  |  | && staProtocol.isPakMk()) { | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 0" + " - 开始执行"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, insta.getBarcode()); | 
|---|
|  |  |  | if (barcodeThread == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | News.info("" + mark + " - 1" + " - {}号条码扫描器检测条码信息:{}", insta.getBarcode(), barcode); | 
|---|
|  |  |  | if ("NG".endsWith(barcode) || "NoRead".equals(barcode)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | // 无拣料数据 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode); | 
|---|
|  |  |  | if (wrkMast == null) { | 
|---|
|  |  |  | // 无拣料数据 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107) | 
|---|
|  |  |  | || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 拣、盘、并 作业站转换 | 
|---|
|  |  |  | // 拣、盘、并 作业站转换 | 
|---|
|  |  |  | //                    int stnNo = 0; | 
|---|
|  |  |  | //                    if (wrkMast.getStaNo() == 109) { | 
|---|
|  |  |  | //                        stnNo = 127; | 
|---|
|  |  |  | 
|---|
|  |  |  | //                    } else { | 
|---|
|  |  |  | //                        log.error("{}号任务数据异常!", wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | // 获取目标站 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", wrkMast.getIoType() - 50) | 
|---|
|  |  |  | .eq("stn_no", insta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)) { | 
|---|
|  |  |  | // 获取目标站 | 
|---|
|  |  |  | Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>() | 
|---|
|  |  |  | .eq("type_no", wrkMast.getIoType() - 50) | 
|---|
|  |  |  | .eq("stn_no", insta.getStaNo()) // 作业站点 = 拣料出库的目标站 | 
|---|
|  |  |  | .eq("crn_no", wrkMast.getCrnNo()); // 堆垛机号 | 
|---|
|  |  |  | StaDesc staDesc = staDescService.selectOne(wrapper); | 
|---|
|  |  |  | if (Cools.isEmpty(staDesc)) { | 
|---|
|  |  |  | //                        News.error(""+mark+" - 2"+" - 入库路径不存在!type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo()); | 
|---|
|  |  |  | //                        staProtocol.setWorkNo((short) 9989); | 
|---|
|  |  |  | //                        staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1)); | 
|---|
|  |  |  | //                        devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | //                        MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | //LED | 
|---|
|  |  |  | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, insta.getLed()); | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg = "此为拣料、并板、盘点再入库.请放在" + insta.getBackSta().shortValue() + "站点"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, insta.getLed(), new Task(5, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 保存工作明细档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作明细档历史档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 保存工作主档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作主档历史档失败"); | 
|---|
|  |  |  | //LED | 
|---|
|  |  |  | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, insta.getLed()); | 
|---|
|  |  |  | // led 异常显示 | 
|---|
|  |  |  | if (ledThread != null) { | 
|---|
|  |  |  | String errorMsg = "此为拣料、并板、盘点再入库.请放在" + insta.getBackSta().shortValue() + "站点"; | 
|---|
|  |  |  | MessageQueue.offer(SlaveType.Led, insta.getLed(), new Task(5, errorMsg)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 堆垛机站点(目标站) | 
|---|
|  |  |  | Integer staNo = staDesc.getCrnStn(); | 
|---|
|  |  |  | // 更新工作档数据状态 | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setStaNo(staNo); // 目标站 | 
|---|
|  |  |  | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(""); // 源库位清空 | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setUpdMk("");//允许再次移库 | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | throw new CoolException("更新工作档数据状态失败"); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 保存工作明细档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作明细档历史档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 保存工作主档历史档 | 
|---|
|  |  |  | if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作主档历史档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | // 堆垛机站点(目标站) | 
|---|
|  |  |  | Integer staNo = staDesc.getCrnStn(); | 
|---|
|  |  |  | // 更新工作档数据状态 | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setStaNo(staNo); // 目标站 | 
|---|
|  |  |  | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(""); // 源库位清空 | 
|---|
|  |  |  | wrkMast.setModiTime(now); | 
|---|
|  |  |  | wrkMast.setUpdMk("");//允许再次移库 | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | throw new CoolException("更新工作档数据状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新明细档io_time (历史档关联使用) | 
|---|
|  |  |  | wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
|---|
|  |  |  | // 修改库位状态 Q.拣料/盘点/并板再入库 | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | locMast.setLocSts("Q"); | 
|---|
|  |  |  | locMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(locMast)) { | 
|---|
|  |  |  | throw new CoolException("修改库位状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 更新明细档io_time (历史档关联使用) | 
|---|
|  |  |  | wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now); | 
|---|
|  |  |  | // 修改库位状态 Q.拣料/盘点/并板再入库 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | locMast.setLocSts("Q"); | 
|---|
|  |  |  | locMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(locMast)) { | 
|---|
|  |  |  | throw new CoolException("修改库位状态失败"); | 
|---|
|  |  |  | // 更新站点信息 且 下发plc命令 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setPalletSize(locMast.getLocType2()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | + "、空板信号:" + staProtocol.isEmptyMk()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocMast locMast = locMastService.selectById(wrkMast.getLocNo()); | 
|---|
|  |  |  | // 更新站点信息 且 下发plc命令 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setPalletSize(locMast.getLocType2()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol)); | 
|---|
|  |  |  | if (!result) { | 
|---|
|  |  |  | News.error("" + mark + " - 3" + " - 发布命令至输送线队列失败!!! [plc编号:{}]", devp.getId()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 6" + " - 站点信息不符合入库条件!!!" + " 自动信号:" + staProtocol.isLoading() + "、可入信号:" + staProtocol.isInEnable() | 
|---|
|  |  |  | + "、空板信号:" + staProtocol.isEmptyMk()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog("" + mark + " - 0" + " - 拣料、并板、盘点再入库  ===》执行完成"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>() | 
|---|
|  |  |  | .eq("loc_no", wrkMast.getSourceLocNo())); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | short staNo = wrkMast.getStaNo().shortValue(); | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1004) { | 
|---|
|  |  |  | staNo = 2003; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 下发站点信息 | 
|---|
|  |  |  | staProtocol.setWorkNo(wrkMast.getWrkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(wrkMast.getStaNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(staNo); | 
|---|
|  |  |  | staProtocol.setPalletSize(locMast.getLocType2()); | 
|---|
|  |  |  | if (!MessageQueue.offer(SlaveType.Devp, devpId, new Task(2, staProtocol))) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | 
|---|
|  |  |  | //            if(crnThread.isBackHpFlag()){ | 
|---|
|  |  |  | //                continue; | 
|---|
|  |  |  | //            } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //堆垛机回原点任务中 | 
|---|
|  |  |  | Object object = redisUtil.get(RedisConstantType.CRN_MOVE_LOCK + crn.getId()); | 
|---|
|  |  |  | if (object != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
|---|
|  |  |  | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Object object = redisUtil.get(RedisConstantType.CRN_MOVE_LOCK); | 
|---|
|  |  |  | Object object = redisUtil.get(RedisConstantType.CRN_MOVE_LOCK + crn.getId()); | 
|---|
|  |  |  | if (object != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("堆垛机移动命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | crnThread.setBackHpFlag(true); | 
|---|
|  |  |  | redisUtil.set(RedisConstantType.CRN_MOVE_LOCK + crn.getId(), "lock", 60); | 
|---|
|  |  |  | redisUtil.set(RedisConstantType.CRN_MOVE_LOCK + crn.getId(), "lock", 10); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Object object = redisUtil.get(RedisConstantType.CRN_MOVE_LOCK); | 
|---|
|  |  |  | Object object = redisUtil.get(RedisConstantType.CRN_MOVE_LOCK + crn.getId()); | 
|---|
|  |  |  | if (object != null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | News.error("堆垛机移动命令下发失败,堆垛机号={},任务数据={}", crnProtocol.getCrnNo(), JSON.toJSON(crnCommand)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | crnThread.setBackHpFlag(true); | 
|---|
|  |  |  | redisUtil.set(RedisConstantType.CRN_MOVE_LOCK + crn.getId(), "lock", 60); | 
|---|
|  |  |  | redisUtil.set(RedisConstantType.CRN_MOVE_LOCK + crn.getId(), "lock", 10); | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | Thread.sleep(500); | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | 
|---|
|  |  |  | News.warn("" + mark + " - 1" + " - 12" + " - // F、D  库位={},库位状态={}", shallowLoc.getLocNo(), shallowLoc.getLocSts()); | 
|---|
|  |  |  | // 此标记避免多次执行移库任务 | 
|---|
|  |  |  | if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) { | 
|---|
|  |  |  | if (moveLocForDeepLoc(slave, shallowLoc, mark)) { | 
|---|
|  |  |  | if (moveLocForDeepLoc(slave, crnProtocol, shallowLoc, mark)) { | 
|---|
|  |  |  | wrkMast.setUpdMk("Y"); | 
|---|
|  |  |  | wrkMast.setIoPri(14D); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  | 
|---|
|  |  |  | devpCheckTaskStackOver = Integer.parseInt(config2.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int outNumber = 13; | 
|---|
|  |  |  | Config config3 = configService.selectOne(new EntityWrapper<Config>() | 
|---|
|  |  |  | .eq("code", "fullBoardOutboundNumber")); | 
|---|
|  |  |  | if (config3 != null) { | 
|---|
|  |  |  | outNumber = Integer.parseInt(config3.getValue()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer devpWorkingCount = commonService.queryDevpWorkingCount(); | 
|---|
|  |  |  | if (devpWorkingCount > devpTaskStackOver) { | 
|---|
|  |  |  | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1003 || wrkMast.getStaNo() == 1007) { | 
|---|
|  |  |  | if (wrkMast.getStaNo() == 1003 || wrkMast.getStaNo() == 1007 || wrkMast.getStaNo() == 1004) { | 
|---|
|  |  |  | //检测是否有入库任务 | 
|---|
|  |  |  | List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .in("io_type", 1, 53, 57) | 
|---|
|  |  |  | .in("source_sta_no", 1005) | 
|---|
|  |  |  | .notIn("wrk_sts", 3, 4, 5) | 
|---|
|  |  |  | .in("source_sta_no", 1002, 1007) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (!inWrkMasts.isEmpty()) { | 
|---|
|  |  |  | News.error("" + mark + " - 2" + " - 检测存在入库任务,等待入库任务执行完成再出库,工作号={}" + wrkMast.getWrkNo()); | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else if (wrkMast.getIoType() == 101) { | 
|---|
|  |  |  | List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .in("wrk_sts", 12, 14) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (!Cools.isEmpty(inWrkMasts) && inWrkMasts.size() >= outNumber) { | 
|---|
|  |  |  | News.error("" + mark + " - 4" + " - 检测到全板出库的任务已经到达上线,工作号={}" + wrkMast.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //            // 入出库模式判断 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                    continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 判断堆垛机出库站状态 | 
|---|
|  |  |  | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y") | 
|---|
|  |  |  | && staProtocol.getWorkNo() == 0) { | 
|---|
|  |  |  | if (staProtocol.isAutoing() && !staProtocol.isLoading() && staDetl.getCanouting() != null && staDetl.getCanouting().equals("Y")) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //根据参数判断是否校验可出信号 | 
|---|
|  |  |  | String crnOutVerifyOut = "Y"; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (crnOutVerifyOut.equals("Y")) { | 
|---|
|  |  |  | if (!staProtocol.isOutEnable()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (staProtocol.getWorkNo() > 0) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | turnCrnExecuteCurrentChannel = turnCrnExecuteCurrentChannelConfig.getValue(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(turnCrnExecuteCurrentChannel.equals("Y")) { | 
|---|
|  |  |  | if (turnCrnExecuteCurrentChannel.equals("Y")) { | 
|---|
|  |  |  | //判断堆垛机和当前任务是否处于一个巷道 | 
|---|
|  |  |  | if (Utils.getLaneByLocNo(wrkMast.getSourceLocNo()) != crnProtocol.getCrnLane()) { | 
|---|
|  |  |  | //判断堆垛机所在巷道是否存在其他任务,如存在则优先执行 | 
|---|
|  |  |  | 
|---|
|  |  |  | //                            if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk()) | 
|---|
|  |  |  | //                                || Cools.isEmpty(waitWrkMast)) { | 
|---|
|  |  |  | if (Cools.isEmpty(waitWrkMast)) { | 
|---|
|  |  |  | if (moveLocForDeepLoc(slave, shallowLoc, mark)) { | 
|---|
|  |  |  | if (moveLocForDeepLoc(slave, crnProtocol, shallowLoc, mark)) { | 
|---|
|  |  |  | wrkMast.setUpdMk("Y"); | 
|---|
|  |  |  | //                                    wrkMast.setIoPri(14D); | 
|---|
|  |  |  | wrkMastMapper.updateById(wrkMast); | 
|---|
|  |  |  | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.error("" + mark + " - 3" + " - 5" + " - 【库位移转】 修改工作档状态 11.生成出库ID => 12.吊车出库中 失败!!,工作号={}", wrkMast.getWrkNo()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | crnProtocol.setLastIo("O"); | 
|---|
|  |  |  | crnProtocol.setLastIo("I"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.infoNoLog("" + mark + " - 3" + " - 0" + " - 堆垛机入出库作业下发:库位移转完成"); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | if (crnProtocol.getTaskNo() == 9999) { | 
|---|
|  |  |  | // 堆垛机复位 | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | redisUtil.set(RedisConstantType.CRN_MOVE_LOCK + crn.getId(), "lock", 8);//防止回原点后下发指令过快 | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Date now = new Date(); | 
|---|
|  |  |  | if(wrkMast.getIoType() < 100){ | 
|---|
|  |  |  | if (wrkMast.getIoType() < 100) { | 
|---|
|  |  |  | // 入库 + 库位转移  ==> 4.入库完成 | 
|---|
|  |  |  | if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && (wrkMast.getIoType() == 11 || wrkMast.getIoType() == 111))) { | 
|---|
|  |  |  | wrkMast.setWrkSts(4L); | 
|---|
|  |  |  | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 2" + " - 修改成功后复位堆垛机 : 堆垛机号={}", crnThread.getCrnProtocol().getCrnNo()); | 
|---|
|  |  |  | crnThread.setResetFlag(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | List<Long> list = new ArrayList<>(); | 
|---|
|  |  |  | list.add(14L); | 
|---|
|  |  |  | list.add(15L); | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //检测是否有入库任务 | 
|---|
|  |  |  | List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>() | 
|---|
|  |  |  | .in("io_type", 1, 53, 57) | 
|---|
|  |  |  | .in("source_sta_no", 1002, 1007) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (!inWrkMasts.isEmpty()) { | 
|---|
|  |  |  | News.error("" + mark + " - 2" + " - 检测存在入库任务,等待入库任务执行完成再入空托,工作号={}"); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(3); | 
|---|
|  |  |  | // 生成工作档 | 
|---|
|  |  |  | WrkMast wrkMast1 = new WrkMast(); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast1.setIoType(3); // 入出库状态:3.站到站 | 
|---|
|  |  |  | wrkMast1.setIoPri(13D); // 优先级 | 
|---|
|  |  |  | wrkMast1.setSourceStaNo(emptyInSta.getStaNo()); | 
|---|
|  |  |  | wrkMast1.setStaNo(1007); | 
|---|
|  |  |  | wrkMast1.setStaNo(1004); | 
|---|
|  |  |  | wrkMast1.setBarcode(barcode); | 
|---|
|  |  |  | // 操作人员数据 | 
|---|
|  |  |  | wrkMast1.setAppeTime(new Date()); | 
|---|
|  |  |  | 
|---|
|  |  |  | DevpThread devpThread = (DevpThread) SlaveConnection.get(SlaveType.Devp, led.getDevpPlcId()); | 
|---|
|  |  |  | // 命令集合 | 
|---|
|  |  |  | List<LedCommand> commands = new ArrayList<>(); | 
|---|
|  |  |  | // 工作档集合 | 
|---|
|  |  |  | List<WrkMast> wrkMasts = new ArrayList<>(); | 
|---|
|  |  |  | //            // 工作档集合 | 
|---|
|  |  |  | //            List<WrkMast> wrkMasts = new ArrayList<>(); | 
|---|
|  |  |  | List<Integer> workNoList = new ArrayList<>(); | 
|---|
|  |  |  | for (Integer staNo : led.getStaArr()) { | 
|---|
|  |  |  | // 获取叉车站点 | 
|---|
|  |  |  | StaProtocol staProtocol = devpThread.getStation().get(staNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | staProtocol = staProtocol.clone(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Integer wrkNo = null; | 
|---|
|  |  |  | Integer ioType = null; | 
|---|
|  |  |  | Integer targetStaNo = null; | 
|---|
|  |  |  | String sourceLocNo = null; | 
|---|
|  |  |  | String locNo = null; | 
|---|
|  |  |  | String barcode = null; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取工作档数据 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectById(staProtocol.getWorkNo()); | 
|---|
|  |  |  | //                if (null == wrkMast || wrkMast.getWrkSts() < 14 || wrkMast.getIoType() < 100) { continue; } | 
|---|
|  |  |  | if (null == wrkMast) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | List<WrkMastLog> wrkMastLogs = wrkMastLogService.selectList(new EntityWrapper<WrkMastLog>() | 
|---|
|  |  |  | .eq("wrk_no", staProtocol.getWorkNo()) | 
|---|
|  |  |  | .orderBy("modi_time", false) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | if (wrkMastLogs.isEmpty()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | WrkMastLog wrkMastLog = wrkMastLogs.get(0); | 
|---|
|  |  |  | wrkNo = wrkMastLog.getWrkNo(); | 
|---|
|  |  |  | ioType = wrkMastLog.getIoType(); | 
|---|
|  |  |  | sourceLocNo = wrkMastLog.getSourceLocNo(); | 
|---|
|  |  |  | locNo = wrkMastLog.getLocNo(); | 
|---|
|  |  |  | targetStaNo = wrkMastLog.getStaNo(); | 
|---|
|  |  |  | barcode = wrkMastLog.getBarcode(); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | wrkNo = wrkMast.getWrkNo(); | 
|---|
|  |  |  | ioType = wrkMast.getIoType(); | 
|---|
|  |  |  | sourceLocNo = wrkMast.getSourceLocNo(); | 
|---|
|  |  |  | locNo = wrkMast.getLocNo(); | 
|---|
|  |  |  | targetStaNo = wrkMast.getStaNo(); | 
|---|
|  |  |  | barcode = wrkMast.getBarcode(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | News.warnNoLog("" + mark + " - 0" + " - 开始执行:出库  ===>> 工作档信息写入led显示器"); | 
|---|
|  |  |  | wrkMasts.add(wrkMast); | 
|---|
|  |  |  | workNoList.add(wrkNo); | 
|---|
|  |  |  | // 组装命令 | 
|---|
|  |  |  | LedCommand ledCommand = new LedCommand(); | 
|---|
|  |  |  | ledCommand.setWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | ledCommand.setIoType(wrkMast.getIoType()); | 
|---|
|  |  |  | ledCommand.setWorkNo(wrkNo); | 
|---|
|  |  |  | ledCommand.setIoType(ioType); | 
|---|
|  |  |  | // 出库模式 | 
|---|
|  |  |  | switch (wrkMast.getIoType()) { | 
|---|
|  |  |  | switch (ioType) { | 
|---|
|  |  |  | case 1: | 
|---|
|  |  |  | ledCommand.setTitle("全板入库"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | 
|---|
|  |  |  | ledCommand.setTitle("并板入库"); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkMast.getWrkNo(), wrkMast.getIoType()); | 
|---|
|  |  |  | News.error("" + mark + " - 1" + " - 任务入出库类型错误!!![工作号:{}] [入出库类型:{}]", wrkNo, ioType); | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | ledCommand.setLocNo(wrkMast.getLocNo()); | 
|---|
|  |  |  | ledCommand.setStaNo(wrkMast.getStaNo()); | 
|---|
|  |  |  | ledCommand.setBarcode(wrkMast.getBarcode()); | 
|---|
|  |  |  | ledCommand.setSourceLocNo(sourceLocNo); | 
|---|
|  |  |  | ledCommand.setLocNo(locNo); | 
|---|
|  |  |  | ledCommand.setStaNo(targetStaNo); | 
|---|
|  |  |  | ledCommand.setBarcode(barcode); | 
|---|
|  |  |  | //                ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); | 
|---|
|  |  |  | if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { | 
|---|
|  |  |  | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); | 
|---|
|  |  |  | //                    try{ | 
|---|
|  |  |  | //                        if (wrkMast.getIoType()>100){ | 
|---|
|  |  |  | //                            for (WrkDetl wrkDetl : wrkDetls){ | 
|---|
|  |  |  | //                                LocDetl locDetl = locDetlService.selectMatnrSpecs(wrkDetl.getMatnr(), wrkDetl.getSpecs(), wrkMast.getSourceLocNo()); | 
|---|
|  |  |  | //                                wrkDetl.setWeight(locDetl.getAnfme()); | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | //                        }else { | 
|---|
|  |  |  | //                            for (WrkDetl wrkDetl : wrkDetls){ | 
|---|
|  |  |  | //                                wrkDetl.setWeight(wrkDetl.getAnfme()); | 
|---|
|  |  |  | //                            } | 
|---|
|  |  |  | //                        } | 
|---|
|  |  |  | //                    }catch (Exception e){ | 
|---|
|  |  |  | //                        log.error("工作档案明细输入电视机失败1:异常信息==》"+e); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto( | 
|---|
|  |  |  | wrkDetl.getMatnr() | 
|---|
|  |  |  | , wrkDetl.getMaktx() | 
|---|
|  |  |  | , wrkDetl.getAnfme() | 
|---|
|  |  |  | , wrkDetl.getWeight() | 
|---|
|  |  |  | , wrkDetl.getStockNum() | 
|---|
|  |  |  | , wrkDetl.getStockNum2() | 
|---|
|  |  |  | , wrkDetl.getSpecs() | 
|---|
|  |  |  | , wrkDetl.getSku() | 
|---|
|  |  |  | , wrkDetl.getZpallet() | 
|---|
|  |  |  | , wrkDetl.getModel() | 
|---|
|  |  |  | , wrkDetl.getSupp() | 
|---|
|  |  |  | , wrkDetl.getKpCstmrName() | 
|---|
|  |  |  | , wrkDetl.getOrderNo() | 
|---|
|  |  |  | , wrkDetl.getCstateid$() | 
|---|
|  |  |  | ))); | 
|---|
|  |  |  | if (ioType != 110 && ioType != 10) { | 
|---|
|  |  |  | List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkNo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!wrkDetls.isEmpty()) { | 
|---|
|  |  |  | WrkDetl wrkDetl = wrkDetls.get(0); | 
|---|
|  |  |  | double anfme = 0D; | 
|---|
|  |  |  | double weight = 0D; | 
|---|
|  |  |  | for (WrkDetl detl : wrkDetls) { | 
|---|
|  |  |  | anfme += detl.getAnfme(); | 
|---|
|  |  |  | weight += detl.getWeight(); | 
|---|
|  |  |  | wrkDetl.setAnfme(anfme); | 
|---|
|  |  |  | wrkDetl.setWeight(weight); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() | 
|---|
|  |  |  | .eq("loc_no", wrkMast.getSourceLocNo())); | 
|---|
|  |  |  | double totalAnfme = 0D; | 
|---|
|  |  |  | double totalWeight = 0D; | 
|---|
|  |  |  | for (LocDetl locDetl : locDetls) { | 
|---|
|  |  |  | totalAnfme += locDetl.getAnfme(); | 
|---|
|  |  |  | totalWeight += locDetl.getWeight(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkDetl.setStockNum(totalAnfme); | 
|---|
|  |  |  | wrkDetl.setStockNum2(totalWeight); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto( | 
|---|
|  |  |  | wrkDetl.getMatnr() | 
|---|
|  |  |  | , wrkDetl.getMaktx() | 
|---|
|  |  |  | , wrkDetl.getAnfme() | 
|---|
|  |  |  | , wrkDetl.getWeight() | 
|---|
|  |  |  | , wrkDetl.getStockNum() | 
|---|
|  |  |  | , wrkDetl.getStockNum2() | 
|---|
|  |  |  | , wrkDetl.getSpecs() | 
|---|
|  |  |  | , wrkDetl.getSku() | 
|---|
|  |  |  | , wrkDetl.getZpallet() | 
|---|
|  |  |  | , wrkDetl.getModel() | 
|---|
|  |  |  | , wrkDetl.getSupp() | 
|---|
|  |  |  | , wrkDetl.getKpCstmrName() | 
|---|
|  |  |  | , wrkDetl.getOrderNo() | 
|---|
|  |  |  | , wrkDetl.getCstateid$() | 
|---|
|  |  |  | )); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | List<WrkDetlLog> wrkDetlLogs = wrkDetlLogService.selectTodayByWrkNo(wrkNo); | 
|---|
|  |  |  | if(!wrkDetlLogs.isEmpty()) { | 
|---|
|  |  |  | WrkDetlLog wrkDetlLog = wrkDetlLogs.get(0); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | double anfme = 0D; | 
|---|
|  |  |  | double weight = 0D; | 
|---|
|  |  |  | for (WrkDetlLog detl : wrkDetlLogs) { | 
|---|
|  |  |  | anfme += detl.getAnfme(); | 
|---|
|  |  |  | weight += detl.getWeight(); | 
|---|
|  |  |  | wrkDetlLog.setAnfme(anfme); | 
|---|
|  |  |  | wrkDetlLog.setWeight(weight); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() | 
|---|
|  |  |  | .eq("loc_no", sourceLocNo)); | 
|---|
|  |  |  | double totalAnfme = 0D; | 
|---|
|  |  |  | double totalWeight = 0D; | 
|---|
|  |  |  | for (LocDetl locDetl : locDetls) { | 
|---|
|  |  |  | totalAnfme += locDetl.getAnfme(); | 
|---|
|  |  |  | totalWeight += locDetl.getWeight(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | wrkDetlLog.setStockNum(totalAnfme); | 
|---|
|  |  |  | wrkDetlLog.setStockNum2(totalWeight); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ledCommand.getMatDtos().add(new MatDto( | 
|---|
|  |  |  | wrkDetlLog.getMatnr() | 
|---|
|  |  |  | , wrkDetlLog.getMaktx() | 
|---|
|  |  |  | , wrkDetlLog.getAnfme() | 
|---|
|  |  |  | , wrkDetlLog.getWeight() | 
|---|
|  |  |  | , wrkDetlLog.getStockNum() | 
|---|
|  |  |  | , wrkDetlLog.getStockNum2() | 
|---|
|  |  |  | , wrkDetlLog.getSpecs() | 
|---|
|  |  |  | , wrkDetlLog.getSku() | 
|---|
|  |  |  | , wrkDetlLog.getZpallet() | 
|---|
|  |  |  | , wrkDetlLog.getModel() | 
|---|
|  |  |  | , wrkDetlLog.getSupp() | 
|---|
|  |  |  | , wrkDetlLog.getKpCstmrName() | 
|---|
|  |  |  | , wrkDetlLog.getOrderNo() | 
|---|
|  |  |  | , wrkDetlLog.getCstateid$() | 
|---|
|  |  |  | )); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | commands.add(ledCommand); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); | 
|---|
|  |  |  | Set<Integer> workNos = new HashSet<>(workNoList); | 
|---|
|  |  |  | // 获取LED线程 | 
|---|
|  |  |  | LedThread ledThread = (LedThread) SlaveConnection.get(SlaveType.Led, led.getId()); | 
|---|
|  |  |  | // 相同工作号集合则过滤 | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 修改主档led标记 | 
|---|
|  |  |  | for (WrkMast wrkMast : wrkMasts) { | 
|---|
|  |  |  | wrkMast.setOveMk("Y"); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败"); | 
|---|
|  |  |  | throw new CoolException("更新工作档失败"); | 
|---|
|  |  |  | for (Integer wrkNo : workNoList) { | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", wrkNo)); | 
|---|
|  |  |  | if (wrkMast != null) { | 
|---|
|  |  |  | wrkMast.setOveMk("Y"); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | if (wrkMastMapper.updateById(wrkMast) == 0) { | 
|---|
|  |  |  | News.errorNoLog("" + mark + " - 4" + " - 更新工作档失败"); | 
|---|
|  |  |  | throw new CoolException("更新工作档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | * 因双深库位阻塞,对浅库位进行移转(立即执行版) | 
|---|
|  |  |  | * tip:同步 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | private synchronized boolean moveLocForDeepLoc(CrnSlave crn, LocMast shallowLoc, Integer mark) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | private synchronized boolean moveLocForDeepLoc(CrnSlave crn, CrnProtocol crnProtocol, LocMast shallowLoc, Integer mark) { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | News.warnNoLog("" + mark + "moveLocForDeepLoc" + " - 0" + " - 开始执行:因双深库位阻塞,对浅库位进行移转(立即执行版)"); | 
|---|
|  |  |  | List<Integer> rows = locMastService.queryDistinctRow(crn.getId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | for (Integer row : rows) { | 
|---|
|  |  |  | if (Utils.isDeepLoc(slaveProperties, row)) { | 
|---|
|  |  |  | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (loc != null) { | 
|---|
|  |  |  | if (crn.getId() == 1) { | 
|---|
|  |  |  | if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (Utils.isDeepLoc(slaveProperties, loc.getLocNo())) { | 
|---|
|  |  |  | String shallowLocNo = Utils.getShallowLoc(slaveProperties, loc.getLocNo()); | 
|---|
|  |  |  | LocMast shallowLoc1 = locMastService.selectById(shallowLocNo); | 
|---|
|  |  |  | 
|---|
|  |  |  | loc = locMastService.queryFreeLocMast(row, shallowLoc.getLocType1()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (null != loc) {//对应深库位非在库状态,不能移库 | 
|---|
|  |  |  | if (crn.getId() == 1) { | 
|---|
|  |  |  | if (Utils.getLaneByLocNo(loc.getLocNo()) != crnProtocol.getCrnLane()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String deepLoc = Utils.getDeepLoc(slaveProperties, loc.getLocNo()); | 
|---|
|  |  |  | LocMast deepLoc1 = locMastService.selectById(deepLoc); | 
|---|
|  |  |  | if (!deepLoc1.getLocSts().equals("F") && !deepLoc1.getLocSts().equals("D")) { | 
|---|
|  |  |  | 
|---|
|  |  |  | return false; | 
|---|
|  |  |  | //                throw new CoolException("双深库位 --- 浅库位阻塞异常! 待移转浅库位:" + shallowLoc.getLocNo()); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | String deepLoc2 = Utils.getDeepLoc2(slaveProperties, loc.getLocNo()); | 
|---|
|  |  |  | if (deepLoc2 != null) { | 
|---|
|  |  |  | LocMast locnew = locMastService.selectById(deepLoc2); | 
|---|
|  |  |  | if (locnew != null && locnew.getLocSts().equals("O")) { | 
|---|
|  |  |  | loc = locnew; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 获取工作号 | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(0); | 
|---|