| | |
| | | import com.zy.core.thread.LedThread; |
| | | import com.zy.core.thread.SiemensDevpThread; |
| | | import com.zy.entity.*; |
| | | import com.zy.entity.param.StockOutParam; |
| | | import com.zy.mapper.*; |
| | | import com.zy.service.*; |
| | | import com.zy.system.entity.Config; |
| | | import com.zy.system.service.ConfigService; |
| | | import com.zy.utils.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | |
| | | |
| | | taskStaNoToRgvStaNoMap.put(1050,1044);taskStaNoToRgvStaNoMap.put(1078,1044);taskStaNoToRgvStaNoMap.put(1064,1044);taskStaNoToRgvStaNoMap.put(1071,1044);taskStaNoToRgvStaNoMap.put(1096,1094); |
| | | taskStaNoToRgvStaNoMap.put(1104,1100);taskStaNoToRgvStaNoMap.put(1102,1100);taskStaNoToRgvStaNoMap.put(1090,1090);taskStaNoToRgvStaNoMap.put(1002,1001);taskStaNoToRgvStaNoMap.put(1016,1018); |
| | | taskStaNoToRgvStaNoMap.put(1020,1019);taskStaNoToRgvStaNoMap.put(1024,1022);taskStaNoToRgvStaNoMap.put(1035,1034);taskStaNoToRgvStaNoMap.put(1040,1033);taskStaNoToRgvStaNoMap.put(1043,1041); |
| | | taskStaNoToRgvStaNoMap.put(1020,1019);taskStaNoToRgvStaNoMap.put(1024,1022);taskStaNoToRgvStaNoMap.put(1031,1033);taskStaNoToRgvStaNoMap.put(1035,1034);taskStaNoToRgvStaNoMap.put(1040,1033);taskStaNoToRgvStaNoMap.put(1043,1041); |
| | | |
| | | canningLineRgvConnectionSiteList.add(1083);canningLineRgvConnectionSiteList.add(1086); |
| | | canningLineRgvConnectionSiteList.add(1089); |
| | |
| | | private WrkMastService wrkMastService; |
| | | @Autowired |
| | | private BasRgvMapService basRgvMapService; |
| | | |
| | | @Resource |
| | | private ConfigService configService; |
| | | |
| | | @Value("${wms.url}") |
| | | private String wmsUrl; |
| | |
| | | if (!staProtocol.isLoading()){ |
| | | continue; |
| | | } |
| | | if (!staProtocol.isPakMk()) { |
| | | continue; |
| | | } |
| | | News.info("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | log.error("{}入库回退:{},任务号:{}", inSta.getStaNo(), errMsg,wrkNo); |
| | | return; |
| | | // 如果超限报警或超重等,出到1024 |
| | | if(errMsg.equals("扫码失败")) { |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // 判断是否满足入库条件 |
| | |
| | | ) { |
| | | if(Cools.isEmpty(barcode) || "NG".endsWith(barcode) || "NoRead".equals(barcode) || "00000000".equals(barcode) || barcode.startsWith("ERROR")) { |
| | | log.error("{}号条码检测失败,条码信息:{}", inSta.getBarcode(), barcode); |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "条码检测失败:"+barcode)); |
| | | continue; |
| | | } |
| | | // 判断重复工作档 |
| | | WrkMast wrkMast = wrkMastMapper.selectPakInStep1(inSta.getStaNo(), barcode); |
| | | if (wrkMast != null) { |
| | | MessageQueue.offer(SlaveType.Led, inSta.getLed(), new Task(3, "条码已重复:" + barcode)); |
| | | continue; |
| | | } |
| | | |
| | |
| | | param.setBucketCount(staProtocol.getBucketCount()); |
| | | param.setTailSupportFlag(staProtocol.isTailSupportFlag()); |
| | | param.setWantBucketFlag(getWantBucketFlag()); |
| | | param.setErrMsg(errMsg); |
| | | |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | |
| | | StaProtocol staProtocol1084 = devpThread.getStation().get(1084); |
| | | StaProtocol staProtocol1087 = devpThread.getStation().get(1087); |
| | | List<SearchLocParam.WantBucket> wantBucketList = new ArrayList<>(); |
| | | wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag())); |
| | | wantBucketList.add(new SearchLocParam.WantBucket(1064,staProtocol1084.getWantBucketFlag())); |
| | | wantBucketList.add(new SearchLocParam.WantBucket(1071,staProtocol1081.getWantBucketFlag())); |
| | | wantBucketList.add(new SearchLocParam.WantBucket(1078,staProtocol1087.getWantBucketFlag())); |
| | | return wantBucketList; |
| | | } |
| | |
| | | break; |
| | | } |
| | | |
| | | if (crnStn.getStaNo() == 1093) { // 判断出库到到1093,判断1092是否有物,有物不可出 |
| | | StaProtocol staProtocol2 = devpThread.getStation().get(1092); |
| | | if(!staProtocol2.isAutoing() || staProtocol2.isLoading() || staProtocol2.getWorkNo() != 0) { |
| | | log.warn("1号堆垛机出库取货前,判断1092站点信息自动:{},有物:{},工作号:{},不可入",staProtocol2.isAutoing(),staProtocol2.isLoading(),staProtocol2.getWorkNo()); |
| | | continue; |
| | | } |
| | | } |
| | | |
| | | // 双深库位且浅库位有货,则需先对浅库位进行库位移转 |
| | | if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) { |
| | | News.warnNoLog(""+mark+" - 2"+" - 6"+" - 双深库位且浅库位有货,则需先对浅库位进行库位移转 : 开始执行 任务号={}",wrkMast.getWrkNo()); |
| | |
| | | } |
| | | newLocNo = newLocNo + locNo.substring(2); |
| | | // 对应库位有无任务 |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", newLocNo)); |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("source_loc_no", newLocNo).eq("wrk_sts",11)); |
| | | if(wrkMast1 == null) { |
| | | if(locNo.startsWith("10") || locNo.startsWith("11")){ // 浅库位 |
| | | |
| | |
| | | crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 目标库位排 |
| | | |
| | | // 源站1057 |
| | | if(slave.getId() == 4 && crnStn.getStaNo() == 1057 && sourceSta.getRow1() == 12) { |
| | | if(slave.getId() == 4 && crnStn.getStaNo() == 1057 && (sourceSta.getRow1() == 11 || sourceSta.getRow1() == 12)) { |
| | | crnCommand.setDestinationPosX((short) 9); |
| | | } |
| | | crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 目标库位列 |
| | |
| | | // 状态:等待确认 并且 任务完成位 = 1 |
| | | if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) { |
| | | News.warnNoLog(""+mark+" - 0"+" - 开始执行对工作档的完成操作"); |
| | | if (crnProtocol.getTaskNo() == 9999) { |
| | | if (crnProtocol.getTaskNo() == 9999) { // 回原点任务号 |
| | | // 堆垛机复位 |
| | | crnThread.setResetFlag(true); |
| | | } else { |
| | |
| | | // News.infoNoLog(""+mark+" - 0"+" - 对工作档的完成操作执行完成"); |
| | | } |
| | | |
| | | /** |
| | | * 堆垛机回原点 |
| | | */ |
| | | public synchronized void originGo() { |
| | | |
| | | for (CrnSlave crn : slaveProperties.getCrn()) { |
| | | // 获取堆垛机信息 |
| | | 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 |
| | | && crnProtocol.getLoaded() == 0 && crnProtocol.getForkPos() == 0) { |
| | | // 判断是不是已在原点 |
| | | if(crnProtocol.getBay() == 0 && crnProtocol.getLevel() == 1) { |
| | | continue; |
| | | } |
| | | // 判断是不是空闲三分钟 |
| | | BasCrnp basCrnp = basCrnpService.selectById(crn.getId()); |
| | | Date now = new Date(); |
| | | Date modiTime = basCrnp.getModiTime(); |
| | | long diffInMillis = now.getTime()-modiTime.getTime(); |
| | | if(diffInMillis < 3 * 60 * 1000) { |
| | | continue; |
| | | } |
| | | |
| | | CrnCommand crnCommand = new CrnCommand(); |
| | | crnCommand.setCrnNo(crn.getId()); // 堆垛机编号 |
| | | crnCommand.setTaskNo((short) 9999); // 工作号 |
| | | crnCommand.setTaskMode(CrnTaskModeType.GO_ORIGIN); // 任务模式: 回原点 |
| | | crnCommand.setSourcePosX((short) (crn.getId() == 1 ? 4 : crn.getId() == 2 ? 6 : crn.getId() == 3 ? 7 : 11)); // 源库位排 |
| | | crnCommand.setSourcePosY((short) 0); // 源库位列 |
| | | crnCommand.setSourcePosZ((short) 1); // 源库位层 |
| | | crnCommand.setDestinationPosX((short) 0); // 目标库位排 |
| | | crnCommand.setDestinationPosY((short) 0); // 目标库位列 |
| | | crnCommand.setDestinationPosZ((short) 0); // 目标库位层 |
| | | if (!MessageQueue.offer(SlaveType.Crn, crn.getId(), new Task(2, crnCommand))) { |
| | | News.error("回原点任务下发失败", crn.getId(), JSON.toJSON(crnCommand)); |
| | | } else { |
| | | log.info("{}号堆垛机回原点任务下发成功:{}", crn.getId(), JSON.toJSON(crnCommand)); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | /** |
| | | * 堆垛机异常信息记录 |
| | | */ |
| | |
| | | break; |
| | | } |
| | | ledCommand.setSourceLocNo(wrkMast.getSourceLocNo()); |
| | | ledCommand.setLocNo(wrkMast.getLocNo()); |
| | | ledCommand.setSourceStaNo(wrkMast.getSourceStaNo()); |
| | | ledCommand.setStaNo(wrkMast.getStaNo()); |
| | | ledCommand.setBarcode(wrkMast.getBarcode()); |
| | | if (wrkMast.getIoType() != 110 && wrkMast.getIoType() != 10) { |
| | | List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | // List<WrkDetl> wrkDetls = wrkDetlService.findByWorkNo(wrkMast.getWrkNo()); |
| | | wrkDetls.forEach(wrkDetl -> ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getSpecs(),wrkDetl.getManuDate(),wrkDetl.getModel(),wrkDetl.getWeight(),wrkDetl.getManLength(),wrkDetl.getVolume()))); |
| | | // wrkDetls.forEach(wrkDetl -> { |
| | | // Double total = 0.0; |
| | | // EntityWrapper<LocDetl> wrapper = new EntityWrapper<>(); |
| | | // LocDetl locDetl = locDetlService.selectOne(wrapper.eq("zpallet", wrkDetl.getZpallet()).eq("matnr", wrkDetl.getMatnr())); |
| | | // if (Cools.isEmpty(locDetl)) { |
| | | // total = wrkDetl.getAnfme(); |
| | | // } else { |
| | | // total = locDetl.getAnfme(); |
| | | // } |
| | | // if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 1) { |
| | | // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); |
| | | // } |
| | | // if (wrkMast.getIoType() == 103 && (null == wrkDetl.getInspect() || 0 == wrkDetl.getInspect())) { |
| | | // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); |
| | | // } |
| | | // if (wrkMast.getIoType() == 107) { |
| | | // ledCommand.getMatDtos().add(new MatDto(wrkDetl.getMatnr(), wrkDetl.getMaktx(), wrkDetl.getBatch(), wrkDetl.getSpecs(), wrkDetl.getManu(), wrkDetl.getMemo(), wrkDetl.getAnfme(),total)); |
| | | // } |
| | | // }); |
| | | MatDto matDto = new MatDto(); |
| | | // 明细 |
| | | WrkDetl wrkDetl1 = wrkDetlService.selectOne(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); |
| | | if (wrkDetl1 != null) { |
| | | ledCommand.setOrderNo(wrkDetl1.getOrderNo()); |
| | | matDto.setMaknx(wrkDetl1.getMaktx()); |
| | | matDto.setMatnr(wrkDetl1.getMatnr()); |
| | | matDto.setBatch(wrkDetl1.getBatch()); |
| | | matDto.setManuDate(wrkDetl1.getManuDate()); |
| | | matDto.setAnfme(wrkDetl1.getAnfme()); |
| | | matDto.setWeight(wrkDetl1.getWeight()); |
| | | matDto.setGrossWeight(wrkDetl1.getManLength()); |
| | | ledCommand.getMatDtos().add(matDto); |
| | | } |
| | | commands.add(ledCommand); |
| | | // 订单 |
| | | // if(wrkDetl1 != null && !Cools.isEmpty(wrkDetl1.getOrderNo())) { |
| | | // |
| | | // } |
| | | commands.add(0,ledCommand); |
| | | } |
| | | Set<Integer> workNos = wrkMasts.stream().map(WrkMast::getWrkNo).collect(Collectors.toSet()); |
| | | // 获取LED线程 |
| | |
| | | case 1019:dismantlingMachine = 1020;break; |
| | | case 1034:dismantlingMachine = 1035;break; |
| | | } |
| | | if(staProtocol.getSiteId() == 1034 && staProtocol.isHigh()) { |
| | | continue; |
| | | } |
| | | if (wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 110).eq("sta_no", dismantlingMachine)).size() > 0) { |
| | | // log.warn("{}站点已经存在两个空板出库任务", entry.getKey()); |
| | | continue; |
| | |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | log.info("空托出库请求成功:请求参数{},返回值:{}", map, response); |
| | | } else { |
| | | log.error("空拖出库请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response); |
| | | // log.error("空拖出库请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("空拖出库请求接口异常!!!url:{};request:{};response:{}", wmsUrl + "/rpc/auto/emptyOut/v1", map, response); |
| | |
| | | log.error("呼叫rgv,任务号不存在:{}",staProtocol.getWorkNo()); |
| | | continue; |
| | | } |
| | | if (staProtocol.getSiteId() == 1090 && wrkMast.getLocNo() == null) { |
| | | if (staProtocol.getSiteId() == 1090 && wrkMast.getStaNo() == 1090) { |
| | | continue; |
| | | } |
| | | if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && wrkMast.getRgvNo() == null) { |
| | | if ((wrkMast.getWrkSts() == 2 || wrkMast.getWrkSts() == 15) && (wrkMast.getRgvNo() == null || wrkMast.getRgvDstaNo() == 1090)) { |
| | | // 有1090的任务跳过rgv分配 |
| | | if(wrkMast.getStaNo() == 1090) { |
| | | int count = wrkMastService.selectCount(new EntityWrapper<WrkMast>().where("sta_no = 1090 or source_sta_no = 1090 ")); |
| | | if (count > 1) { |
| | | continue; |
| | | } |
| | | } |
| | | wrkMast.setRgvNo(0); |
| | | wrkMast.setRgvSstaNo(site); |
| | | wrkMast.setRgvDstaNo(taskStaNoToRgvStaNoMap.get(wrkMast.getStaNo())); |
| | |
| | | } |
| | | |
| | | if(wrkMast.getIoType() == 3 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) { // 到1024出库口,放到输送线后任务完成 |
| | | wrkMast.setWrkSts(2L); |
| | | if(wrkMast.getWrkSts() != 2 ){ |
| | | log.warn("rgv放货完成3,rgv未复位:rgv号{},任务号:{},任务状态{}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts()); |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(5L); |
| | | // if(wrkMast.getStaNo() == 1090) { |
| | | // wrkMast.setWrkSts(3L); |
| | | // } |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else if(wrkMast.getIoType() == 101 && (wrkMast.getStaNo() == 1024 || wrkMast.getStaNo() == 1016 || wrkMast.getStaNo() == 1043)) { |
| | | if(wrkMast.getWrkSts() != 2 ) { |
| | | log.warn("rgv放货完成101,rgv未复位:rgv号{},任务号:{},任务状态{}", wrkMast.getRgvNo(), wrkMast.getWrkNo(), wrkMast.getWrkSts()); |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(15L); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | | } else if(wrkMast.getIoType() == 110 && (wrkMast.getStaNo() == 1002 || wrkMast.getStaNo() == 1020 ||wrkMast.getStaNo() == 1035)) { |
| | | if(wrkMast.getWrkSts() != 2 ){ |
| | | log.warn("rgv放货完成110,rgv未复位:rgv号{},任务号:{},任务状态{}",wrkMast.getRgvNo(),wrkMast.getWrkNo(),wrkMast.getWrkSts()); |
| | | continue; |
| | | } |
| | | wrkMast.setWrkSts(15L); |
| | | wrkMast.setModiTime(new Date()); |
| | | wrkMastService.updateById(wrkMast); |
| | |
| | | log.error("异常口入库任务号无任务:{}", staProtocol.getWorkNo()); |
| | | return; |
| | | } else if (wrkMast.getLocNo() != null) { |
| | | log.info("异常口入库库位已分配:{}", wrkMast.getLocNo()); |
| | | // log.info("异常口入库库位已分配:{}", wrkMast.getLocNo()); |
| | | return; |
| | | } else if(wrkMast.getStaNo() != 1090) { |
| | | log.info("异常口入库入库目标站点已分配:{}", wrkMast.getStaNo()); |
| | | // log.info("异常口入库入库目标站点已分配:{}", wrkMast.getStaNo()); |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | CanningLineInLocParam param = new CanningLineInLocParam(); |
| | | param.setWrkNo(staProtocol.getWrkNo()); |
| | | param.setWrkNo(staProtocol.getWorkNo()); |
| | | param.setSourceStaNo(1090); |
| | | param.setTbFlag(staProtocol.isInEnable()); // true入成品库,false入空桶库 |
| | | |
| | |
| | | log.info("异常口入库请求wms原始返回:" + response); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | // StartupDto dto = jsonObject.getObject("data", StartupDto.class); |
| | | // staProtocol.setWorkNo(dto.getWorkNo()); |
| | | // staProtocol.setStaNo(dto.getStaNo().shortValue()); |
| | | // devpThread.setPakMk(staProtocol.getSiteId(), false); |
| | | // boolean result = MessageQueue.offer(SlaveType.Devp, 2, new Task(2, staProtocol)); |
| | | // if (result) { |
| | | // log.info("异常口入库推送输送线命令成功:" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo()); |
| | | // News.info("异常口入库推送输送线命令成功:" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo()); |
| | | // } else { |
| | | // log.error("异常口入库推送输送线命令失败:" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo()); |
| | | // News.error("异常口入库推送输送线命令失败:" + dto.getWorkNo() + "," + 1090 + "," + dto.getStaNo()); |
| | | // throw new CoolException("异常口入库推送输送线命令失败:" + 1090); |
| | | // } |
| | | log.error("异常口入库请求接口成功常,url:{},request:{},response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response); |
| | | } else { |
| | | log.error("异常口入库请求接口异常,url:{},request:{},response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response); |
| | | News.error("异常口入库请求接口异常!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/CanningLine/loc/v1", JSON.toJSONString(param), response); |
| | |
| | | SearchLocParam param = new SearchLocParam(); |
| | | param.setIoType(10); |
| | | param.setSourceStaNo(site); |
| | | param.setBucketType("21"); // 空母托盘 |
| | | param.setLocType1((short) 1); |
| | | |
| | | String response = new HttpHandler.Builder() |
| | |
| | | } |
| | | |
| | | // 站点条件判断 |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.getWrkNo() == 0) { |
| | | if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() |
| | | && staProtocol.getWorkNo() == 0 && staProtocol.isHigh()) { |
| | | WrkMast wrkMast1 = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 3).eq("source_sta_no", 1034).eq("sta_no", 1024)); |
| | | if (wrkMast1 != null) { |
| | | return; |
| | | } |
| | | |
| | | Date now = new Date(); |
| | | // 保存工作档 |
| | |
| | | wrkMast.setIoTime(now); |
| | | wrkMast.setWrkSts(2L); |
| | | wrkMast.setIoType(3); |
| | | wrkMast.setIoPri(15D); |
| | | wrkMast.setSourceStaNo(1034); // 源站 |
| | | wrkMast.setStaNo(1024); // 目标站 |
| | | wrkMast.setAppeTime(now); |
| | |
| | | log.error("子托盘底座母托盘回流命令推送队列失败:" + wrkMast.getWrkNo() + "," + staProtocol.getSiteId()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | public synchronized void autoOutEmptyBucket() { |
| | | Config config = configService.selectOne(new EntityWrapper<Config>().eq("code","autoOutEmptyBucket").eq("status",1)); |
| | | if (config == null || Cools.isEmpty(config.getValue())) { |
| | | return; |
| | | } |
| | | |
| | | // 需要自动补空桶的站点 |
| | | String[] split = config.getValue().split("="); |
| | | |
| | | for (SearchLocParam.WantBucket wantBucket : getWantBucketFlag()) { |
| | | if (wantBucket.getBucketType() != 0) { // 罐装线有要桶信号 |
| | | boolean flag = true; // 是否需要自动补,true不需要,false需要 |
| | | for(String item: split) { |
| | | if(String.valueOf(wantBucket.getSite()).equals(item)) { |
| | | flag = false; |
| | | break; |
| | | } |
| | | } |
| | | if(flag) { |
| | | return; |
| | | } |
| | | // <4 < 2 < 4 |
| | | int count = wrkMastMapper.selectInGzxCount(wantBucket.getSite()); |
| | | if (wantBucket.getSite() == 1071 && count <= 2 || wantBucket.getSite() == 1064 && count == 0 || wantBucket.getSite() == 1078 && count <= 2) { |
| | | // 判断库里有无空桶组 |
| | | List<LocDetl> locDetlList = locDetlService.selectListByMatnr(wantBucket.getBucketType()); |
| | | for (int i = 0; i < locDetlList.size(); i++) { |
| | | LocDetl locDetl = locDetlList.get(i); |
| | | String loc1 = locDetl.getLocNo(); |
| | | String aisle1 = loc1.substring(0, 2); |
| | | String column1 = loc1.substring(2, 5); |
| | | String level1 = loc1.substring(5, 7); |
| | | |
| | | for (int j = i + 1; j < locDetlList.size(); j++) { |
| | | LocDetl locDetl1 = locDetlList.get(j); |
| | | String loc2 = locDetl1.getLocNo(); |
| | | String aisle2 = loc2.substring(0, 2); |
| | | String column2 = loc2.substring(2, 5); |
| | | String level2 = loc2.substring(5, 7); |
| | | |
| | | // 检查是否满足组队条件 |
| | | if (isSameAisleGroup(aisle1, aisle2) && column1.equals(column2) && level1.equals(level2)) { |
| | | // 创建空桶出库任务 |
| | | try { |
| | | StockOutParam param = new StockOutParam(); |
| | | param.setOutSite(wantBucket.getSite()); |
| | | List<StockOutParam.LocDetl> locDetls = new ArrayList<>(); |
| | | StockOutParam.LocDetl locDetl2 = new StockOutParam.LocDetl(); |
| | | locDetl2.setLocNo(locDetl.getLocNo()); |
| | | locDetl2.setMatnr(locDetl.getMatnr()); |
| | | locDetl2.setBatch(locDetl.getBatch()); |
| | | locDetl2.setBrand(locDetl.getBrand()); |
| | | locDetl2.setCount(locDetl.getAnfme()); |
| | | locDetl2.setBoxType1(locDetl.getBoxType1()); |
| | | locDetl2.setBoxType2(locDetl.getBoxType2()); |
| | | locDetl2.setBoxType3(locDetl.getBoxType3()); |
| | | locDetl2.setStandby1(locDetl.getStandby1()); |
| | | locDetl2.setStandby2(locDetl.getStandby2()); |
| | | locDetl2.setStandby3(locDetl.getStandby3()); |
| | | locDetls.add(locDetl2); |
| | | |
| | | StockOutParam.LocDetl locDetl3 = new StockOutParam.LocDetl(); |
| | | locDetl3.setLocNo(locDetl1.getLocNo()); |
| | | locDetl3.setMatnr(locDetl1.getMatnr()); |
| | | locDetl3.setBatch(locDetl1.getBatch()); |
| | | locDetl3.setBrand(locDetl1.getBrand()); |
| | | locDetl3.setCount(locDetl1.getAnfme()); |
| | | locDetl3.setBoxType1(locDetl1.getBoxType1()); |
| | | locDetl3.setBoxType2(locDetl1.getBoxType2()); |
| | | locDetl3.setBoxType3(locDetl1.getBoxType3()); |
| | | locDetl3.setStandby1(locDetl1.getStandby1()); |
| | | locDetl3.setStandby2(locDetl1.getStandby2()); |
| | | locDetl3.setStandby3(locDetl1.getStandby3()); |
| | | locDetls.add(locDetl3); |
| | | param.setLocDetls(locDetls); |
| | | |
| | | String response = new HttpHandler.Builder() |
| | | .setUri(wmsUrl) |
| | | .setPath("/rpc/autoOutEmptyBucket") |
| | | .setJson(JSON.toJSONString(param)) |
| | | .build() |
| | | .doPost(); |
| | | log.info("自动出空桶请求wms原始返回:" + response); |
| | | JSONObject jsonObject = JSON.parseObject(response); |
| | | if (jsonObject.getInteger("code").equals(200)) { |
| | | log.info("自动出空桶成功:{}",wantBucket.getSite()); |
| | | return; |
| | | } else { |
| | | News.error("自动空桶出库" + ":请求接口失败!!!url:{};request:{};response:{}", wmsUrl + "/rpc/pakin/loc/v1", JSON.toJSONString(param), response); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | // 判断两个排是否属于同一组 |
| | | private static boolean isSameAisleGroup(String aisle1, String aisle2) { |
| | | return (aisle1.equals("09") && aisle2.equals("10")) || |
| | | (aisle1.equals("10") && aisle2.equals("09")) || |
| | | (aisle1.equals("11") && aisle2.equals("12")) || |
| | | (aisle1.equals("12") && aisle2.equals("11")); |
| | | } |
| | | |
| | | /** |
| | |
| | | CanningLineInLocParam param = new CanningLineInLocParam(); |
| | | param.setWrkNo(staProtocol.getWrkNo()); |
| | | param.setMatnr(staProtocol.getMatnr().trim()); |
| | | param.setBatch(staProtocol.getBatch()); |
| | | param.setBatch(staProtocol.getBatch().trim()); |
| | | param.setManuDate(staProtocol.getManuDate()); |
| | | param.setWeight(staProtocol.getWeight()); |
| | | param.setGrossWeight(staProtocol.getGrossWeight()); |
| | | param.setWeight(Math.round(staProtocol.getWeight() * 100.0) / 100.0); |
| | | param.setGrossWeight(Math.round(staProtocol.getGrossWeight() * 100.0) / 100.0); |
| | | param.setReinspection(staProtocol.isReinspection()); |
| | | param.setSourceStaNo(site + 2); |
| | | param.setTbFlag(staProtocol2.isBarcodeErr()); |
| | | |
| | | param.setCannedVolume(Math.round(staProtocol.getCannedVolume() * 100.0) / 100.0); |
| | | // param.setWrkNo(57); |
| | | // param.setMatnr("101"); |
| | | // param.setBatch("tt1"); |
| | |
| | | staProtocol.setBucketCount(wrkDetl.getAnfme().intValue()); |
| | | boolean result = MessageQueue.offer(SlaveType.Devp, inGzxSiteList.indexOf(site) + 4, new Task(4, staProtocol)); |
| | | if (result) { |
| | | log.info("告诉罐装线入库桶信息命令队列推送成功:" + staProtocol.getWorkNo() + "," + site + "," + staProtocol.getBucketType() +"," + staProtocol.getBucketCount()); |
| | | log.info("告诉罐装线入库桶信息命令队列推送成功:" + staProtocol.getWorkNo() + "," +"托盘码:" + wrkMast.getBarcode() +"," + site + "," + staProtocol.getBucketType() +"," + staProtocol.getBucketCount()); |
| | | News.info("告诉罐装线入库桶信息命令队列推送成功:" + staProtocol.getWorkNo() + "," + site + "," + staProtocol.getBucketType() +"," + staProtocol.getBucketCount()); |
| | | wrkMast.setWhsType(1); // 更新推送标识,避免重复推送 |
| | | wrkMastService.updateById(wrkMast); |