| | |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | | import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; |
| | | import com.kangaroohy.milo.service.MiloService; |
| | | import javafx.animation.Timeline; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | |
| | | Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); |
| | | if(null != SNCodeObject) { |
| | | String SNCode=SNCodeObject.toString(); |
| | | String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); |
| | | // String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); |
| | | String a; |
| | | BsOrderScheduling bsOrderSchedulingQuery = new BsOrderScheduling(); |
| | | bsOrderSchedulingQuery.setEngineNo(SNCode); |
| | | List<BsOrderScheduling> queryOrderList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderSchedulingQuery); |
| | | if (CollUtil.isNotEmpty(queryOrderList)){ |
| | | a = "1"; |
| | | }else { |
| | | a = "4"; |
| | | } |
| | | //如果是返修工位需要传输返修工位号 |
| | | List<DaPassingStationCollection> daPassingStationCollections = new ArrayList<>(); |
| | | List<RmRepairRecord> rmRepairRecords = new ArrayList<>(); |
| | | if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node) |
| | | || OPCElement.OP695_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP755_ZZ_CODE_CHECK.equals(Node)){ |
| | | //过站记录 |
| | | DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); |
| | | PassingStationCollection.setSfcCode(SNCode); |
| | | daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); |
| | | if (CollUtil.isNotEmpty(daPassingStationCollections)){ |
| | | DaPassingStationCollection lastOne = daPassingStationCollections.get(daPassingStationCollections.size() - 1); |
| | | String outRsSign = lastOne.getOutRsSign(); |
| | | if ("合格".equals(outRsSign)){ |
| | | a = "1"; |
| | | }else { |
| | | a = "2"; |
| | | } |
| | | } |
| | | RmRepairRecord rmRepairRecord = new RmRepairRecord(); |
| | | rmRepairRecord.setBoxCode(SNCode); |
| | | rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); |
| | | if (CollUtil.isNotEmpty(rmRepairRecords)){ |
| | | a = "1"; |
| | | } |
| | | |
| | | } |
| | | log.info("-----返回codeCheckFeed-----,{}",a); |
| | | // String a="1"; |
| | | // 1:OK可生产 2:NG不可生产 3:NG可返工 4:PC检索失败(无记录)5:PC检索失败(软件) |
| | |
| | | //如果是返修工位需要传输返修工位号 |
| | | if (OPCElement.OP465_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP355_ZZ_CODE_CHECK.equals(Node) |
| | | || OPCElement.OP695_ZZ_CODE_CHECK.equals(Node) || OPCElement.OP755_ZZ_CODE_CHECK.equals(Node)){ |
| | | rework(SNCode,Node); |
| | | |
| | | rework(SNCode,Node,daPassingStationCollections,rmRepairRecords); |
| | | } |
| | | System.out.println(entity); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | private void rework(String SNCode,String Node) throws Exception{ |
| | | private void rework(String SNCode,String Node,List<DaPassingStationCollection> daPassingStationCollections,List<RmRepairRecord> rmRepairRecords) throws Exception{ |
| | | BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); |
| | | bsOrderScheduling.setEngineNo(SNCode); |
| | | List<String> allProcessCoed = new ArrayList<>(); |
| | | List<BsTechnologyRouteChildInfo> bsTechnologyRouteChildInfos = new ArrayList<>(); |
| | | List<String> collect = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling).stream().map(BsOrderScheduling::getModel).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect)){ |
| | | String s = collect.get(0); |
| | | //查找次机型的完整工序 |
| | | List<BsTechnologyRouteChildInfo> bsTechnologyRouteChildInfos = bsTechnologyRouteChildInfoService.selectAllTechnologyRouteByProductCode(s); |
| | | bsTechnologyRouteChildInfos = bsTechnologyRouteChildInfoService.selectAllTechnologyRouteByProductCode(s); |
| | | if (CollUtil.isNotEmpty(bsTechnologyRouteChildInfos)){ |
| | | allProcessCoed = bsTechnologyRouteChildInfos.stream().map(BsTechnologyRouteChildInfo::getProcessesCode).collect(Collectors.toList()); |
| | | } |
| | | } |
| | | RmRepairRecord rmRepairRecord = new RmRepairRecord(); |
| | | rmRepairRecord.setBoxCode(SNCode); |
| | | // RmRepairRecord rmRepairRecord = new RmRepairRecord(); |
| | | // rmRepairRecord.setBoxCode(SNCode); |
| | | List<ReadWriteEntity> writeList = new ArrayList<>(); |
| | | List<RmRepairRecord> rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); |
| | | // List<RmRepairRecord> rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); |
| | | //过站记录 |
| | | DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); |
| | | PassingStationCollection.setSfcCode(SNCode); |
| | | // DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); |
| | | // PassingStationCollection.setSfcCode(SNCode); |
| | | //过站记录 |
| | | List<DaPassingStationCollection> daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); |
| | | // List<DaPassingStationCollection> daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); |
| | | |
| | | //所有反工工位 |
| | | List<String> collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList()); |
| | | //查询出所有需要返修工位的最小op块 |
| | | Integer minOP = 0; |
| | | if (CollUtil.isNotEmpty(collect1)){ |
| | | //查询出所有需要返修工位的最小op块 |
| | | Integer minOP = 0; |
| | | if (CollUtil.isNotEmpty(collect1)){ |
| | | |
| | | List<Integer> sortList = new ArrayList<>(); |
| | | collect1.stream().forEach(x ->{ |
| | | String op = x.replace("OP", ""); |
| | | if (StrUtil.isNotBlank(op)){ |
| | | int i = Integer.parseInt(op); |
| | | sortList.add(i); |
| | | List<Integer> sortList = new ArrayList<>(); |
| | | collect1.stream().forEach(x ->{ |
| | | String op = x.replace("OP", ""); |
| | | if (StrUtil.isNotBlank(op)){ |
| | | int i = Integer.parseInt(op); |
| | | sortList.add(i); |
| | | } |
| | | }); |
| | | if (CollUtil.isNotEmpty(sortList)){ |
| | | List<Integer> collect2 = sortList.stream().filter(Objects::nonNull).sorted().collect(Collectors.toList()); |
| | | minOP = collect2.get(0); |
| | | } |
| | | }); |
| | | if (CollUtil.isNotEmpty(sortList)){ |
| | | List<Integer> collect2 = sortList.stream().sorted().collect(Collectors.toList()); |
| | | minOP = collect2.get(0); |
| | | } |
| | | } |
| | | //获取过站记录的最大工位 |
| | | String maxCode = null; |
| | | if (CollUtil.isNotEmpty(daPassingStationCollections)){ |
| | | List<DaPassingStationCollection> collect2 = daPassingStationCollections.stream().filter(x -> "不合格".equals(x.getOutRsSign())).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect2)){ |
| | | DaPassingStationCollection lastOne = collect2.get(collect2.size() - 1); |
| | | maxCode = lastOne.getLocationCode(); |
| | | }else { |
| | | DaPassingStationCollection lastOne = daPassingStationCollections.get(daPassingStationCollections.size() - 1); |
| | | maxCode = lastOne.getLocationCode(); |
| | | } |
| | | |
| | | //所有放行工位 |
| | | //过站记录除去返修记录就是传2,返修数据及后面占位数据传1 |
| | | List<String> collect3 = daPassingStationCollections.stream().map(DaPassingStationCollection::getLocationCode).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect1)){ |
| | | collect3 = collect3.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); |
| | | } |
| | | String[] parts = Node.split("[.]"); |
| | | String par = parts[0]+"."+parts[1]; |
| | | if (CollUtil.isNotEmpty(collect3)){ |
| | | collect3.forEach(x -> { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(par+"."+x); |
| | | readWriteEntity.setValue(2); |
| | | writeList.add(readWriteEntity); |
| | | }); |
| | | } |
| | | //需生产工位 |
| | | List<String> collect4 = allProcessCoed; |
| | | if (CollUtil.isNotEmpty(collect3)){ |
| | | List<String> finalCollect = collect3; |
| | | collect4 = allProcessCoed.stream().filter(x -> !finalCollect.contains(x)).collect(Collectors.toList()); |
| | | } |
| | | if (CollUtil.isNotEmpty(collect4)){ |
| | | //数据库查询出的工位 |
| | | collect4.forEach(x -> { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(par+"."+x); |
| | | readWriteEntity.setValue(1); |
| | | writeList.add(readWriteEntity); |
| | | }); |
| | | } |
| | | // List<String> collect2 = allProcessCoed; |
| | | // if (CollUtil.isNotEmpty(rmRepairRecords)){ |
| | | // //数据库查询出的工位 |
| | | // rmRepairRecords.forEach(x -> { |
| | | // ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | // readWriteEntity.setIdentifier(x.getProcessesCode()); |
| | | // readWriteEntity.setValue(1); |
| | | // writeList.add(readWriteEntity); |
| | | // }); |
| | | // collect2 = allProcessCoed.stream().filter(x -> !collect1.contains(x)).collect(Collectors.toList()); |
| | | // } |
| | | // if (CollUtil.isNotEmpty(collect2)){ |
| | | // collect2.forEach(x -> { |
| | | // ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | // readWriteEntity.setIdentifier(x); |
| | | // readWriteEntity.setValue(2); |
| | | // writeList.add(readWriteEntity); |
| | | // }); |
| | | // } |
| | | |
| | | // String a=passingStationCollectionServiceImpl.SelectSN(SNCode,parts[1]); |
| | | // if (StrUtil.isNotBlank(a)){ |
| | | // int input = Integer.parseInt(a); |
| | | // ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input); |
| | | // writeList.add(entity); |
| | | // } |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(parts[0]+"."+parts[1]+".Repair_sign"); |
| | | readWriteEntity.setValue(minOP); |
| | | miloService.writeToOpcShort(readWriteEntity); |
| | | /*if (CollUtil.isNotEmpty(writeList)){ |
| | | List<ReadWriteEntity> tempList = new ArrayList<>(); |
| | | for (int i = 0; i < writeList.size(); i++) { |
| | | miloService.writeToOpc(); |
| | | // tempList.add(writeList.get(i)); |
| | | // if (tempList.size()>10){ |
| | | // miloService.writeToOpcByte(tempList); |
| | | // log.info("写入返修:,{}",tempList); |
| | | // tempList = new ArrayList<>(); |
| | | // } |
| | | } |
| | | // if (CollUtil.isNotEmpty(tempList)){ |
| | | // miloService.writeToOpcByte(tempList); |
| | | // log.info("写入返修:,{}",tempList); |
| | | // } |
| | | |
| | | |
| | | }*/ |
| | | miloService.writeToOpcByte(writeList); |
| | | //所有放行工位 |
| | | List<String> passStation = new ArrayList<>(); |
| | | //所有生产工位 |
| | | List<String> productStation = new ArrayList<>(); |
| | | //最大工位编号 |
| | | Integer maxCodeNum = 0; |
| | | if (StrUtil.isNotEmpty(maxCode)){ |
| | | String finalMaxCode = maxCode; |
| | | //获取当前工位对应工步号 |
| | | List<String> collect2 = bsTechnologyRouteChildInfos.stream() |
| | | .filter(x -> x.getProcessesCode().equals(finalMaxCode)) |
| | | .map(BsTechnologyRouteChildInfo::getStepNo).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect2)){ |
| | | String s = collect2.get(0); |
| | | if (StrUtil.isNotBlank(s)){ |
| | | maxCodeNum = Integer.parseInt(s); |
| | | } |
| | | } |
| | | if (CollUtil.isNotEmpty(bsTechnologyRouteChildInfos)){ |
| | | bsTechnologyRouteChildInfos.forEach(x -> { |
| | | x.setStepNoNum(Integer.parseInt(x.getStepNo())); |
| | | }); |
| | | Integer finalMaxCodeNum = maxCodeNum; |
| | | //勾选的返修工位中最大的工位之后的工位----1 |
| | | List<BsTechnologyRouteChildInfo> collect3 = bsTechnologyRouteChildInfos.stream() |
| | | .filter(x -> x.getStepNoNum() >= finalMaxCodeNum).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(collect3)){ |
| | | //需要生产 |
| | | productStation.addAll(collect3.stream().map(BsTechnologyRouteChildInfo::getProcessesCode).collect(Collectors.toList())); |
| | | } |
| | | //从第一个工位到返修的最大工位之间, |
| | | //勾选了返修标记的需要生产---1,未勾选的不生产---2 |
| | | productStation.addAll(collect1); |
| | | } |
| | | } |
| | | if (CollUtil.isNotEmpty(productStation)){ |
| | | List<String> collect2 = allProcessCoed.stream().filter(x -> !productStation.contains(x)).collect(Collectors.toList()); |
| | | passStation.addAll(collect2); |
| | | } |
| | | String[] parts = Node.split("[.]"); |
| | | String par = parts[0]+"."+parts[1]; |
| | | if (CollUtil.isNotEmpty(passStation)){ |
| | | passStation.forEach(x -> { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(par+"."+x); |
| | | readWriteEntity.setValue(2); |
| | | writeList.add(readWriteEntity); |
| | | }); |
| | | } |
| | | if (CollUtil.isNotEmpty(productStation)){ |
| | | productStation.forEach(x -> { |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(par+"."+x); |
| | | readWriteEntity.setValue(1); |
| | | writeList.add(readWriteEntity); |
| | | }); |
| | | } |
| | | ReadWriteEntity readWriteEntity = new ReadWriteEntity(); |
| | | readWriteEntity.setIdentifier(parts[0]+"."+parts[1]+".Repair_sign"); |
| | | readWriteEntity.setValue(minOP); |
| | | miloService.writeToOpcShort(readWriteEntity); |
| | | miloService.writeToOpcByte(writeList); |
| | | log.info("返修写入:,{}",writeList); |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | |
| | | List<DaParamCollection> daParamCollectionlist = new ArrayList<>(); |
| | | if (CollUtil.isNotEmpty(nodeIdList)){ |
| | | for(int i=0;i<nodeIdList.size();i++){ |
| | | if(!readWriteEntityList.get(i).getValue().toString().equals("0.0")){ |
| | | if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue()) && !readWriteEntityList.get(i).getValue().toString().equals("0.0")){ |
| | | DaParamCollection ParamCollection = new DaParamCollection(); |
| | | ParamCollection.setParamCode(readWriteEntityList.get(i).getIdentifier().toString().split("[.]")[2]); |
| | | ParamCollection.setLocationCode(parts[1]); |
| | |
| | | String str = object.toString(); |
| | | beatTime = Float.valueOf(str).longValue(); |
| | | } |
| | | Object ProductStatus = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".ProductStatus").getValue(); |
| | | log.info("ProductStatus,{}",ProductStatus.toString()); |
| | | String str1="合格" ; |
| | | if (ObjectUtil.isNotEmpty(ProductStatus)){ |
| | | String productStatusString = ProductStatus.toString(); |
| | | if (productStatusString.contains("2") || productStatusString.contains("3")){ |
| | | str1="不合格"; |
| | | }else { |
| | | str1="合格"; |
| | | } |
| | | } |
| | | DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); |
| | | PassingStationCollection.setSfcCode(SNCode); |
| | | PassingStationCollection.setLocationCode(parts[1]); |
| | |
| | | PassingStationCollection.setCollectionTime(new Date()); |
| | | PassingStationCollection.setCreateTime(new Date()); |
| | | PassingStationCollection.setBeatTime(beatTime.toString()); |
| | | PassingStationCollection.setOutRsSign("合格"); |
| | | PassingStationCollection.setOutRsSign(str1); |
| | | passingStationCollectionServiceImpl.insertDaPassingStationCollection(PassingStationCollection); |
| | | log.info("-------保存过站记录数据完成---------"); |
| | | |