package com.jcdm.main.plcserver.sub; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.jcdm.common.core.domain.BaseEntity; import com.jcdm.main.bs.domain.BsTechnologyRouteChildInfo; import com.jcdm.main.bs.orderScheduling.domain.BsOrderScheduling; import com.jcdm.main.bs.orderScheduling.service.IBsOrderSchedulingService; import com.jcdm.main.bs.technologyRouteChild.service.IBsTechnologyRouteChildInfoService; import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; import com.jcdm.main.da.collectionParamConf.service.IDaCollectionParamConfService; import com.jcdm.main.da.opcuaconfig.domain.DaOpcuaConfig; import com.jcdm.main.da.paramCollection.domain.DaParamCollection; import com.jcdm.main.da.paramCollection.service.IDaParamCollectionService; import com.jcdm.main.da.passingStationCollection.domain.DaPassingStationCollection; import com.jcdm.main.da.passingStationCollection.domain.ProductNewPassStation; import com.jcdm.main.da.passingStationCollection.service.ProductNewPassStationService; import com.jcdm.main.da.passingStationCollection.service.impl.DaPassingStationCollectionServiceImpl; import com.jcdm.main.plcserver.conf.OPCElement; import com.jcdm.main.rm.repairRecord.domain.RmRepairRecord; import com.jcdm.main.rm.repairRecord.service.IRmRepairRecordService; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.runner.subscription.SubscriptionCallback; import com.kangaroohy.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import java.math.BigDecimal; import java.sql.Time; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j @Component public class OPCUaSubscription implements SubscriptionCallback { private static final Logger logger = LoggerFactory.getLogger("sys-user"); public static MiloService miloService; public IDaCollectionParamConfService collectionParamConfService; public IDaParamCollectionService daParamCollectionService; public DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl; public List lists; public static final HashMap map = new HashMap<>(); public IBsOrderSchedulingService bsOrderSchedulingService; public IRmRepairRecordService rmRepairRecordService; public IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService; public ProductNewPassStationService productNewPassStationService; public HashMap> allCollectParamList = new HashMap<>(); public OPCUaSubscription(MiloService miloService, IDaCollectionParamConfService collectionParamConfService, IDaParamCollectionService daParamCollectionService, DaPassingStationCollectionServiceImpl passingStationCollectionServiceImpl, IBsOrderSchedulingService bsOrderSchedulingService, List lists, IRmRepairRecordService rmRepairRecordService, IBsTechnologyRouteChildInfoService bsTechnologyRouteChildInfoService, ProductNewPassStationService productNewPassStationService) { OPCUaSubscription.miloService = miloService; this.collectionParamConfService = collectionParamConfService; this.daParamCollectionService = daParamCollectionService; this.passingStationCollectionServiceImpl = passingStationCollectionServiceImpl; this.bsOrderSchedulingService = bsOrderSchedulingService; this.lists = lists; this.rmRepairRecordService = rmRepairRecordService; this.bsTechnologyRouteChildInfoService = bsTechnologyRouteChildInfoService; this.productNewPassStationService = productNewPassStationService; } @Override public void onSubscribe(String identifier, Object value) { String ecpStr = "";//异常记录标记 try { if(null != value && "1".equals(value.toString())) { //1、检索SN号 //2、过站参数采集 //3、扫码枪数据回传 List collect1 = lists.stream().filter(x -> OPCElement.SN_CHECK.equals(x.getrFunction())) .map(DaOpcuaConfig::getNode).collect(Collectors.toList()); List collect2 = lists.stream().filter(x -> OPCElement.SAVE_DATA.equals(x.getrFunction())) .map(DaOpcuaConfig::getNode).collect(Collectors.toList()); if (collect1.contains(identifier)){ logger.info("-------监听到,{}的CODE_CHECK的信号",identifier); //logger.info("-------time--------------,{}",LocalDateTime.now()); //sn if (OPCElement.OP010_CODE_CHECK.equals(identifier)){ ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP010.CodeCheckFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 } else if (OPCElement.OP020_CODE_CHECK.equals(identifier)) { ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP020.CodeCheckFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 } else if (OPCElement.OP030_CODE_CHECK.equals(identifier)) { ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP030.CodeCheckFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 Object SNCodeObject = miloService.readFromOpcUa("CFL4HX.OP030.Code").getValue(); if (ObjectUtil.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); if (StrUtil.isNotBlank(snCode)){ String type = productNewFlag(snCode); if ("280".equals(type) || "380".equals(type)){ //获取箱体码 ProductNewPassStation productNewPassStation = new ProductNewPassStation(); productNewPassStation.setFinishFlag(OPCElement.UN_FINISH); productNewPassStation.setSfcCode(snCode); List productPassStationList = productNewPassStationService.getProductPassStationList(productNewPassStation); if (CollUtil.isNotEmpty(productPassStationList)){ List collect = productPassStationList.stream().sorted(Comparator.comparing(ProductNewPassStation::getCreateTime).reversed()).collect(Collectors.toList()); ProductNewPassStation productNewPassStation1 = collect.get(0); String boxCode = productNewPassStation1.getBoxCode(); passingStationCollectionServiceImpl.sendMessage(type+"*"+boxCode,"OP030"); } } } } } else if (OPCElement.OP040_CODE_CHECK.equals(identifier)) { ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP040.CodeCheckFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 //推送数据 log.info("进入OP040.CodeCheck"); tile2("CFL4HX.OP040.CodeCheck"); } else { this.SNRetrieval(identifier,value.toString()); if (identifier.equals(OPCElement.OP120_ZZ_CODE_CHECK) && "1".equals(value.toString())){ //总装上线扫码传输数据 logger.info("-------监听到,{}的扫码枪扫码的CODE_CHECK的信号",identifier); scannerGunMessage(); } } } if (collect2.contains(identifier)){ if ("1".equals(value.toString())){ logger.info("-------监听到,{}的SAVE_REQUEST_LAST的信号",identifier); //logger.info("-------time--------------,{}",LocalDateTime.now()); //HX线改装 if (OPCElement.OP010_REQUEST_PRODUCT_TYPE.equals(identifier)){ Object SNCodeObject = miloService.readFromOpcUa("CFL4HX.OP010.Code").getValue(); if (ObjectUtil.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.OP010.ProductTypeSN",snCode); OPCUaSubscription.miloService.writeToOpcUa(entity3);//写产品SN号反馈 ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP010.SNDone", 1); OPCUaSubscription.miloService.writeToOpcByte(entity2);//写完成 } } else if (OPCElement.OP010_SAVE_REQUEST.equals(identifier)) { ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP010.SaveFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity2);//写完成 } else if (OPCElement.OP020_PRINT_REQUEST.equals(identifier)) { Object SNCodeObject = miloService.readFromOpcUa("CFL4HX.OP020.Code").getValue(); if (ObjectUtil.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); DaPassingStationCollection passingStationCollectionCheck = new DaPassingStationCollection(); passingStationCollectionCheck.setLocationCode("OP020"); passingStationCollectionCheck.setSfcCode(snCode); List checkList = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(passingStationCollectionCheck); if (CollUtil.isNotEmpty(checkList)){ if (snCode.startsWith("380")){ log.info("enter-380"); String[] split = snCode.split(StrUtil.SPACE); if (split.length>1){ ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP020.PrintSN1", split[0]); OPCUaSubscription.miloService.writeToOpcUa(entity);//写完成 ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP020.PrintSN2", "☆"+split[1]+"☆"); OPCUaSubscription.miloService.writeToOpcUa(entity2);//写完成 ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.OP020.SendSNDone", 2); OPCUaSubscription.miloService.writeToOpcByte(entity3);//写完成 } } else { ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP020.PrintSN1", snCode); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.OP020.SendSNDone", 2); OPCUaSubscription.miloService.writeToOpcByte(entity3);//写完成 } } else { if (snCode.startsWith("380")){ log.info("enter-380"); String[] split = snCode.split(StrUtil.SPACE); if (split.length>1){ ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP020.PrintSN1", split[0]); OPCUaSubscription.miloService.writeToOpcUa(entity);//写完成 ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP020.PrintSN2", "☆"+split[1]+"☆"); OPCUaSubscription.miloService.writeToOpcUa(entity2);//写完成 ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.OP020.SendSNDone", 1); OPCUaSubscription.miloService.writeToOpcByte(entity3);//写完成 } } else { ReadWriteEntity entity = new ReadWriteEntity("CFL4HX.OP020.PrintSN1", snCode); OPCUaSubscription.miloService.writeToOpcByte(entity);//写完成 ReadWriteEntity entity3 = new ReadWriteEntity("CFL4HX.OP020.SendSNDone", 1); OPCUaSubscription.miloService.writeToOpcByte(entity3);//写完成 } } } } else if (OPCElement.OP030_SAVE_REQUEST.equals(identifier)) { cleanForm("CFL4HX.OP030.SaveFeed"); ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP030.SaveFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity2);//写完成 } else if (OPCElement.OP040_SAVE_REQUEST.equals(identifier)) { cleanForm040(OPCElement.OP040_SAVE_REQUEST); ReadWriteEntity entity2 = new ReadWriteEntity("CFL4HX.OP040.SaveFeed", 1); OPCUaSubscription.miloService.writeToOpcByte(entity2);//写完成 } else { this.SaveData(identifier); } } } } } catch (Exception e) { System.out.println(e.getMessage()); } finally { if (!"".equals(ecpStr)) { System.out.println(ecpStr + "\r\n"); } } } private void scannerGunMessage() throws Exception { String[] parts = OPCElement.OP120_ZZ_CODE_CHECK.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); if (null == SNCodeObject){ SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); } if (null != SNCodeObject){ String SNCode = SNCodeObject.toString(); passingStationCollectionServiceImpl.sendMessage(SNCode,"OP120"); } } public void SNRetrieval(String Node, String value) throws Exception { String[] parts = Node.split("[.]"); if(value.equals("1")) { //SN号检索 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; BsOrderScheduling bsOrderSchedulingQuery = new BsOrderScheduling(); bsOrderSchedulingQuery.setEngineNo(SNCode); List queryOrderList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderSchedulingQuery); if (CollUtil.isNotEmpty(queryOrderList)){ a = "1"; }else { a = "4"; } //如果是返修工位需要传输返修工位号 List daPassingStationCollections = new ArrayList<>(); List 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"; }else { a = "2"; } } logger.info("-----返回codeCheckFeed-----,{}",a); // String a="1"; // 1:OK可生产 2:NG不可生产 3:NG可返工 4:PC检索失败(无记录)5:PC检索失败(软件) if (StrUtil.isNotBlank(a)){ int input = Integer.parseInt(a); ReadWriteEntity entity = new ReadWriteEntity(parts[0]+"."+parts[1]+".CodeCheckFeed", input); logger.info("发动机号:{},监听到{}的CodeCheck的信号",SNCode,Node); miloService.writeToOpcByte(entity); logger.info("监听到返回codecheckfeed信号,{}",entity); //首站传输订单号 // if (OPCElement.OP050_HX_CODE_CHECK.equals(Node)){ // //查询订单号 // BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); // bsOrderScheduling.setEngineNo(SNCode); // List tempList = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling); // String orderNum = ""; // if (CollUtil.isNotEmpty(tempList)){ // BsOrderScheduling bsOrderScheduling1 = tempList.get(0); // orderNum = bsOrderScheduling1.getOrderNo(); // } // ReadWriteEntity entity2 = new ReadWriteEntity(parts[0]+"."+parts[1]+".OrderNumber", orderNum); // miloService.writeToOpcUa(entity2); // } //如果是返修工位需要传输返修工位号 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,daPassingStationCollections,rmRepairRecords); } if (OPCElement.OP050_CODE_CHECK.equals(Node)) { //新机型050 String type = productNewFlag(SNCode); if ("280".equals(type) || "380".equals(type)){ ProductNewPassStation productNewPassStation = new ProductNewPassStation(); productNewPassStation.setSfcCode(SNCode); List passStationList = productNewPassStationService.getProductPassStationList(productNewPassStation); ProductNewPassStation productNewPassStation2 = new ProductNewPassStation(); productNewPassStation2.setFinishFlag("0"); List collect = productNewPassStationService.getProductPassStationList(productNewPassStation2) .stream().sorted(Comparator.comparing(ProductNewPassStation::getCreateTime)) .collect(Collectors.toList()); String partSfcCode = ""; if (CollUtil.isNotEmpty(collect)){ ProductNewPassStation passStation = collect.get(0); partSfcCode = passStation.getSfcCode(); } if (CollUtil.isNotEmpty(passStationList)){ ProductNewPassStation passStation = passStationList.get(0); String productType = ""; if (ObjectUtils.isNotEmpty(passStation)){ productType = passStation.getProductType(); } passingStationCollectionServiceImpl.sendMessage(SNCode+"*sfcCode*"+productType+"*"+partSfcCode,"OP050"); } } } if (OPCElement.OP060_CODE_CHECK.equals(Node)){ String type = productNewFlag(SNCode); if ("280".equals(type) || "380".equals(type)){ checkBoxRod(Node); } } System.out.println(entity); } } } } private void rework(String SNCode,String Node,List daPassingStationCollections,List rmRepairRecords) throws Exception{ BsOrderScheduling bsOrderScheduling = new BsOrderScheduling(); bsOrderScheduling.setEngineNo(SNCode); List allProcessCoed = new ArrayList<>(); List bsTechnologyRouteChildInfos = new ArrayList<>(); List collect = bsOrderSchedulingService.selectBsOrderSchedulingList(bsOrderScheduling).stream().map(BsOrderScheduling::getModel).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)){ String s = collect.get(0); //查找次机型的完整工序 bsTechnologyRouteChildInfos = bsTechnologyRouteChildInfoService.selectAllTechnologyRouteByProductCode(s); if (CollUtil.isNotEmpty(bsTechnologyRouteChildInfos)){ allProcessCoed = bsTechnologyRouteChildInfos.stream().map(BsTechnologyRouteChildInfo::getProcessesCode).collect(Collectors.toList()); } } // RmRepairRecord rmRepairRecord = new RmRepairRecord(); // rmRepairRecord.setBoxCode(SNCode); List writeList = new ArrayList<>(); // List rmRepairRecords = rmRepairRecordService.selectRmRepairRecordList(rmRepairRecord); //过站记录 // DaPassingStationCollection PassingStationCollection=new DaPassingStationCollection(); // PassingStationCollection.setSfcCode(SNCode); //过站记录 // List daPassingStationCollections = passingStationCollectionServiceImpl.selectDaPassingStationCollectionList(PassingStationCollection); //所有返工工位 List collect1 = rmRepairRecords.stream().map(RmRepairRecord::getProcessesCode).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect1)){ //查询出所有需要返修工位的最小op块 Integer minOP = 0; if (CollUtil.isNotEmpty(collect1)){ List 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 collect2 = sortList.stream().filter(Objects::nonNull).sorted().collect(Collectors.toList()); minOP = collect2.get(0); } } //获取过站记录的最大工位 String maxCode = null; if (CollUtil.isNotEmpty(daPassingStationCollections)){ List 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(); } } //所有放行工位 List passStation = new ArrayList<>(); //所有生产工位 List productStation = new ArrayList<>(); //最大工位编号 Integer maxCodeNum = 0; if (StrUtil.isNotEmpty(maxCode)){ String finalMaxCode = maxCode; //获取当前工位对应工步号 List 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 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 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); }); } //对OP755做特殊处理 List OP755List = new ArrayList<>(); if (OPCElement.OP755_ZZ_CODE_CHECK.equals(Node)){ List patchList = new ArrayList<>(); patchList.add(par+".OP740"); patchList.add(par+".OP760"); patchList.add(par+".OP770"); patchList.add(par+".OP780"); for (String s : patchList) { ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(s); readWriteEntity.setValue(0); OP755List.add(readWriteEntity); } } ReadWriteEntity readWriteEntity = new ReadWriteEntity(); readWriteEntity.setIdentifier(parts[0]+"."+parts[1]+".Repair_sign"); readWriteEntity.setValue(minOP); miloService.writeToOpcShort(readWriteEntity); miloService.writeToOpcByte(writeList); logger.info("{}返修写入:,{}",SNCode,writeList); if (CollUtil.isNotEmpty(OP755List)){ miloService.writeToOpcByte(OP755List); } } } public void SaveData(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code1").getValue(); if (null == SNCodeObject){ SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); } if(null != SNCodeObject) { String SNCode = SNCodeObject.toString(); Object object = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Runtime").getValue(); String gatherAddress = parts[0] + "." + parts[1]; List list = new ArrayList<>(); if (allCollectParamList.containsKey(gatherAddress)){ list = allCollectParamList.get(gatherAddress); }else { DaCollectionParamConf daCollectionParamConf = new DaCollectionParamConf(); daCollectionParamConf.setGatherAddress(gatherAddress); daCollectionParamConf.setRemarks("1"); list = collectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf); if (CollUtil.isNotEmpty(list)){ //加入hashmap allCollectParamList.put(gatherAddress,list); } } //60只采集老车型 if (OPCElement.OP060_SAVE_REQUEST.equals(Node) || OPCElement.OP060_SAVE_REQUEST_LAST.equals(Node)){ String s = productNewFlag(SNCode); if ("280".equals(s) || "380".equals(s)){ list = new ArrayList<>(); } } //80、100只采集新车型 if (OPCElement.OP080_SAVE_REQUEST.equals(Node) || OPCElement.OP080_SAVE_REQUEST_LAST.equals(Node) || OPCElement.OP100_SAVE_REQUEST.equals(Node) || OPCElement.OP100_SAVE_REQUEST_LAST.equals(Node)){ String s = productNewFlag(SNCode); if (StrUtil.isNotEmpty(s)){ if (!"280".equals(s) && !"380".equals(s)){ list = new ArrayList<>(); } } } List nodeIdList = list.stream().map(info -> { String nodeid = info.getGatherAddress(); return nodeid; }).collect(Collectors.toList()); List readWriteEntityList = new ArrayList<>(); if(CollUtil.isNotEmpty(nodeIdList)){ //long time1 = new Date().getTime(); readWriteEntityList = miloService.readFromOpcUa(nodeIdList); //long time2 = new Date().getTime(); //logger.info("读取点位花费时间:{},",time2-time1); } //返回plc保存成功 if (parts.length==3){ if ("SaveRequest".equals(parts[2])){ if (OPCElement.OP050_SAVE_REQUEST.equals(Node)){ cleanForm050(Node); } else if (OPCElement.OP060_SAVE_REQUEST.equals(Node)){ cleanForm060(Node); } ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeed", 1); miloService.writeToOpcByte(entity); }else if ("SaveRequestLast".equals(parts[2])){ if (OPCElement.OP050_SAVE_REQUEST_LAST.equals(Node)){ cleanForm050(Node); } else if (OPCElement.OP060_SAVE_REQUEST_LAST.equals(Node)){ cleanForm060(Node); } ReadWriteEntity entity = new ReadWriteEntity(parts[0] + "." + parts[1] + ".SaveFeedLast", 1); miloService.writeToOpcByte(entity); } logger.info("{}保存请求信号返回,MES->PLC的SaveFeedLast信号",Node); //logger.info("-------请求返回-----,{}",LocalDateTime.now()); } BsOrderScheduling bsOrderScheduling=bsOrderSchedulingService.selectBsOrderSchedulingSNCode(SNCode); List daParamCollectionlist = new ArrayList<>(); if (CollUtil.isNotEmpty(nodeIdList)){ for(int i=0;i productPassStationList = productNewPassStationService.getProductPassStationList(passStation); if (CollUtil.isNotEmpty(productPassStationList)){ ProductNewPassStation productNewPassStation = productPassStationList.get(0); String boxCode = productNewPassStation.getBoxCode(); String productType = productNewPassStation.getProductType(); log.info("发送到OP040的页面数据productType,{}",productType); log.info("发送到OP040的页面数据boxCode,{}",boxCode); passingStationCollectionServiceImpl.sendMessage(productType+"*"+boxCode, "OP040"); } } else if ("280".equals(productNewFlag)){ } } } public void cleanForm(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); if (ObjectUtils.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); String s = productNewFlag(snCode); if ("280".equals(s) || "380".equals(s)){ log.info("发送到OP030的清除"); passingStationCollectionServiceImpl.sendMessage("clean","OP030"); } } } public void cleanForm040(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); if (ObjectUtils.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); String s = productNewFlag(snCode); if ("280".equals(s) || "380".equals(s)){ log.info("发送到OP040的页面清除"); passingStationCollectionServiceImpl.sendMessage("clean*clean","OP040"); } } } public void cleanForm050(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); if (ObjectUtils.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); String s = productNewFlag(snCode); if ("280".equals(s) || "380".equals(s)){ ProductNewPassStation passStation = new ProductNewPassStation(); passStation.setSfcCode(snCode); List productPassStationList = productNewPassStationService.getProductPassStationList(passStation); if (CollUtil.isNotEmpty(productPassStationList)){ productNewPassStationService.updatePassStationBySfcCode(snCode); } passingStationCollectionServiceImpl.sendMessage("clean*clean","OP050"); } } } public void cleanForm060(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); if (ObjectUtils.isNotEmpty(SNCodeObject)){ String snCode = SNCodeObject.toString(); String s = productNewFlag(snCode); if ("280".equals(s) || "380".equals(s)){ passingStationCollectionServiceImpl.sendMessage("clean*clean","OP060"); } } } public void checkBoxRod(String Node) throws Exception { String[] parts = Node.split("[.]"); Object SNCodeObject = miloService.readFromOpcUa(parts[0] + "." + parts[1] + ".Code").getValue(); if (null != SNCodeObject) { String SNCode = SNCodeObject.toString(); String s = productNewFlag(SNCode); if ("280".equals(s) || "380".equals(s)){ sendTo060(SNCode,parts); } } } private void sendTo060(String SNCode, String[] parts) throws Exception { String boxCode = ""; String rodCode = ""; ProductNewPassStation productNewPassStation = new ProductNewPassStation(); productNewPassStation.setSfcCode(SNCode); List productPassStationList = productNewPassStationService.getProductPassStationList(productNewPassStation); if (CollUtil.isNotEmpty(productPassStationList)){ ProductNewPassStation passStation = productPassStationList.get(0); boxCode = passStation.getBoxCode(); rodCode = passStation.getRodCode(); } //配瓦校验 passingStationCollectionServiceImpl.sendMessage(boxCode + "*" + rodCode + "*" + SNCode, parts[1]); } }