|  |  |  | 
|---|
|  |  |  | for (DevpSlave.Sta inSta : devp.getInSta()) { | 
|---|
|  |  |  | // 获取条码扫描仪信息 | 
|---|
|  |  |  | BarcodeThread barcodeThread = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | BarcodeThread barcodeThread1 = null; | 
|---|
|  |  |  | BarcodeThread barcodeThread2 = null; | 
|---|
|  |  |  | if (barcodeThread == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | String barcode = barcodeThread.getBarcode(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String barcode1 = ""; | 
|---|
|  |  |  | String barcode2 = ""; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //101站有3个扫码器,当0扫码器没有数据时,获取9、10两个扫码器数据 | 
|---|
|  |  |  | if((inSta.getStaNo().equals(101) || inSta.getStaNo().equals(104)) && ( "NoRead".equals(barcode) || Cools.isEmpty(barcode) )){ | 
|---|
|  |  |  | BarcodeThread barcodeThread1 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode1()); | 
|---|
|  |  |  | if((inSta.getStaNo().equals(101) || inSta.getStaNo().equals(104))){ | 
|---|
|  |  |  | barcodeThread1 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode1()); | 
|---|
|  |  |  | if (barcodeThread1 != null) { | 
|---|
|  |  |  | barcode = barcodeThread1.getBarcode(); | 
|---|
|  |  |  | barcode1 = barcodeThread1.getBarcode(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if("NoRead".equals(barcode) || Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | BarcodeThread barcodeThread2 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode2()); | 
|---|
|  |  |  | if (barcodeThread2 != null) { | 
|---|
|  |  |  | barcode = barcodeThread2.getBarcode(); | 
|---|
|  |  |  | barcodeThread2 = (BarcodeThread) SlaveConnection.get(SlaveType.Barcode, inSta.getBarcode2()); | 
|---|
|  |  |  | if (barcodeThread2 != null) { | 
|---|
|  |  |  | barcode2 = barcodeThread2.getBarcode(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer len1=0 , len2=0, len3=0; | 
|---|
|  |  |  | if(barcode != null) { | 
|---|
|  |  |  | String b[]=barcode.split(";"); | 
|---|
|  |  |  | barcode=b[b.length-1]; | 
|---|
|  |  |  | len1 = barcode.length(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(barcode1 != null) { | 
|---|
|  |  |  | String b[]=barcode1.split(";"); | 
|---|
|  |  |  | barcode1=b[b.length-1]; | 
|---|
|  |  |  | len2 = barcode1.length(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(barcode2 != null) { | 
|---|
|  |  |  | String b[]=barcode2.split(";"); | 
|---|
|  |  |  | barcode2=b[b.length-1]; | 
|---|
|  |  |  | len3 = barcode2.length(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if(len2 > len1 && len2 >= len3){ | 
|---|
|  |  |  | barcode = barcode1; | 
|---|
|  |  |  | } else if (len3 > len1 && len3 >= len2){ | 
|---|
|  |  |  | barcode = barcode2; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //判断101和104是否是拣料、并板、盘点再入库 | 
|---|
|  |  |  | WrkMast wrkMast1=wrkMastMapper.selectpj(inSta.getStaNo(),barcode); | 
|---|
|  |  |  | if((inSta.getStaNo().equals(101) || inSta.getStaNo().equals(104)) &&!Cools.isEmpty(barcode)&&!Cools.isEmpty(wrkMast1)){ | 
|---|
|  |  |  | log.error("101或104拣料、并板、盘点再入库", wrkMast1.getWrkNo()); | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!Cools.isEmpty(barcode)) { | 
|---|
|  |  |  | log.info("{}号条码扫描器检测条码信息:{}", inSta.getBarcode(), barcode); | 
|---|
|  |  |  | 
|---|
|  |  |  | param.setFull(staProtocol.isFull()); | 
|---|
|  |  |  | String response = new HttpHandler.Builder() | 
|---|
|  |  |  | .setUri(wmsUrl) | 
|---|
|  |  |  | .setPath("/rpc/pakin/loc/v1") | 
|---|
|  |  |  | .setPath("/rpc/ ") | 
|---|
|  |  |  | .setJson(JSON.toJSONString(param)) | 
|---|
|  |  |  | .build() | 
|---|
|  |  |  | .doPost(); | 
|---|
|  |  |  | 
|---|
|  |  |  | StartupDto dto = jsonObject.getObject("data", StartupDto.class); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | barcodeThread.setBarcode(""); | 
|---|
|  |  |  | if(barcodeThread1 !=null){ | 
|---|
|  |  |  | barcodeThread1.setBarcode(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if(barcodeThread2 !=null){ | 
|---|
|  |  |  | barcodeThread2.setBarcode(""); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | staProtocol.setWorkNo(dto.getWorkNo().shortValue()); | 
|---|
|  |  |  | staProtocol.setStaNo(dto.getStaNo().shortValue()); | 
|---|
|  |  |  | devpThread.setPakMk(staProtocol.getSiteId(), false); | 
|---|
|  |  |  | 
|---|
|  |  |  | wrkMast.setIoTime(now); | 
|---|
|  |  |  | wrkMast.setIoType(wrkMast.getIoType() - 50); // 入出库类型: 103->53,104->54,107->57 | 
|---|
|  |  |  | wrkMast.setWrkSts(2L); // 工作状态: 2.设备上走 | 
|---|
|  |  |  | wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Integer sourceStaNo = 0; | 
|---|
|  |  |  | switch (wrkMast.getStaNo()){ | 
|---|
|  |  |  | case 100: | 
|---|
|  |  |  | sourceStaNo = 101; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 103: | 
|---|
|  |  |  | sourceStaNo = 104; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 110: | 
|---|
|  |  |  | sourceStaNo = 111; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 113: | 
|---|
|  |  |  | sourceStaNo = 114; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 200: | 
|---|
|  |  |  | sourceStaNo = 201; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 203: | 
|---|
|  |  |  | sourceStaNo = 204; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 300: | 
|---|
|  |  |  | sourceStaNo = 301; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case 303: | 
|---|
|  |  |  | sourceStaNo = 304; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wrkMast.setSourceStaNo(sourceStaNo); // 源站 | 
|---|
|  |  |  | //                        wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 源站 | 
|---|
|  |  |  | wrkMast.setStaNo(staNo); // 目标站 | 
|---|
|  |  |  | wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 目标库位 = 出库时的源库位 | 
|---|
|  |  |  | wrkMast.setSourceLocNo(""); // 源库位清空 | 
|---|
|  |  |  | 
|---|
|  |  |  | List<WrkMast> wrkMasts = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo()); | 
|---|
|  |  |  | //            获取工作状态为14的工作档 | 
|---|
|  |  |  | WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep14(slave.getId(), crnStn.getStaNo()); | 
|---|
|  |  |  | if ( wrkMast1 !=null && (wrkMast1.getIoType().equals(103) || wrkMast1.getIoType().equals(107)) ) { | 
|---|
|  |  |  | if ( wrkMast1 !=null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | for (WrkMast wrkMast : wrkMasts) { | 
|---|
|  |  |  | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } else if (shallowLoc.getLocSts().equals("Q") || shallowLoc.getLocSts().equals("S")) { | 
|---|
|  |  |  | WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo); | 
|---|
|  |  |  | if (null != waitWrkMast && waitWrkMast.getWrkSts() == 4) { | 
|---|
|  |  |  | if (null != waitWrkMast && (waitWrkMast.getWrkSts() == 4 || waitWrkMast.getWrkSts() == 5)) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机演示  ===>> 所有库位轮询 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | public synchronized void crnDemoOfLocMove2() { | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | for (CrnSlave crn : slaveProperties.getCrn()) { | 
|---|
|  |  |  | if (!crn.getDemo()) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | }   // 必须为演示状态 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId()); | 
|---|
|  |  |  | CrnProtocol crnProtocol = crnThread.getCrnProtocol(); | 
|---|
|  |  |  | if (crnProtocol == null) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 只有当堆垛机空闲 并且 无任务时才继续执行 | 
|---|
|  |  |  | if (crnProtocol.getStatusType() == CrnStatusType.IDLE && crnProtocol.getTaskNo() == 0 && crnProtocol.getModeType() == CrnModeType.AUTO) { | 
|---|
|  |  |  | // 获取移库工作档信息 | 
|---|
|  |  |  | WrkMast wrkMast = wrkMastMapper.selectLocMove(crn.getId()); | 
|---|
|  |  |  | if (null != wrkMast) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | LocMast sourceLoc = locMastService.queryDemoSourceLoc1(crn.getId()); | 
|---|
|  |  |  | if (null == sourceLoc ) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | LocMast loc = locMastService.queryDemoLoc2(crn.getId(),sourceLoc.getLocType1()); | 
|---|
|  |  |  | if ( null == loc) { | 
|---|
|  |  |  | continue; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String sourceLocNo = sourceLoc.getLocNo(); | 
|---|
|  |  |  | String locNo = loc.getLocNo(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取工作号 | 
|---|
|  |  |  | int workNo = commonService.getWorkNo(0); | 
|---|
|  |  |  | // 保存工作档 | 
|---|
|  |  |  | wrkMast = new WrkMast(); | 
|---|
|  |  |  | wrkMast.setWrkNo(workNo); | 
|---|
|  |  |  | wrkMast.setIoTime(new Date()); | 
|---|
|  |  |  | wrkMast.setWrkSts(11L); // 工作状态:11.生成出库ID | 
|---|
|  |  |  | wrkMast.setIoType(11); // 入出库状态: 11.库格移载 | 
|---|
|  |  |  | wrkMast.setIoPri(13D); | 
|---|
|  |  |  | wrkMast.setCrnNo(crn.getId()); | 
|---|
|  |  |  | wrkMast.setSourceLocNo(sourceLocNo); // 源库位 | 
|---|
|  |  |  | wrkMast.setLocNo(locNo); // 目标库位 | 
|---|
|  |  |  | wrkMast.setFullPlt("N"); // 满板:Y | 
|---|
|  |  |  | wrkMast.setPicking("N"); // 拣料 | 
|---|
|  |  |  | wrkMast.setExitMk("N"); // 退出 | 
|---|
|  |  |  | wrkMast.setEmptyMk(sourceLoc.getLocSts().equals("D") ? "Y" : "N"); // 空板 | 
|---|
|  |  |  | wrkMast.setBarcode(sourceLoc.getBarcode()); // 托盘码 | 
|---|
|  |  |  | wrkMast.setLinkMis("N"); | 
|---|
|  |  |  | wrkMast.setAppeTime(new Date()); | 
|---|
|  |  |  | wrkMast.setModiTime(new Date()); | 
|---|
|  |  |  | int res = wrkMastMapper.insert(wrkMast); | 
|---|
|  |  |  | if (res == 0) { | 
|---|
|  |  |  | throw new CoolException("保存工作档失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 工作档明细保存 | 
|---|
|  |  |  | //                List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", sourceLocNo)); | 
|---|
|  |  |  | //                for (LocDetl locDetl : locDetls) { | 
|---|
|  |  |  | //                    WrkDetl wrkDetl = new WrkDetl(); | 
|---|
|  |  |  | //                    wrkDetl.setWrkNo(workNo); | 
|---|
|  |  |  | //                    wrkDetl.setIoTime(new Date()); | 
|---|
|  |  |  | //                    wrkDetl.setAnfme(locDetl.getAnfme()); | 
|---|
|  |  |  | //                    VersionUtils.setWrkDetl(wrkDetl, locDetl); // 版本控制 | 
|---|
|  |  |  | //                    wrkDetl.setAppeTime(new Date()); | 
|---|
|  |  |  | //                    wrkDetl.setModiTime(new Date()); | 
|---|
|  |  |  | //                    if (!wrkDetlService.insert(wrkDetl)) { | 
|---|
|  |  |  | //                        throw new CoolException("保存工作档明细失败"); | 
|---|
|  |  |  | //                    } | 
|---|
|  |  |  | //                } | 
|---|
|  |  |  | // 修改源库位状态 | 
|---|
|  |  |  | if (sourceLoc.getLocSts().equals("D")) { | 
|---|
|  |  |  | sourceLoc.setLocSts("R"); // R.出库预约 | 
|---|
|  |  |  | sourceLoc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(sourceLoc)) { | 
|---|
|  |  |  | throw new CoolException("更新源库位状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | throw new CoolException("源库位出库失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 修改目标库位状态 | 
|---|
|  |  |  | if (loc.getLocSts().equals("O")) { | 
|---|
|  |  |  | loc.setLocSts("S"); // S.入库预约 | 
|---|
|  |  |  | loc.setCtnKind(1); | 
|---|
|  |  |  | loc.setModiTime(new Date()); | 
|---|
|  |  |  | if (!locMastService.updateById(loc)) { | 
|---|
|  |  |  | throw new CoolException("更新目标库位状态失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | throw new CoolException("移转失败"); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (Exception e) { | 
|---|
|  |  |  | log.error("堆垛机演示  ===>> 库位移转失败", e); | 
|---|
|  |  |  | e.printStackTrace(); | 
|---|
|  |  |  | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 堆垛机命令下发后,异步修改工作档状态 | 
|---|