| | |
| | | package com.billion.main.plcServer.sub; |
| | | |
| | | import com.billion.common.utils.StringUtils; |
| | | import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; |
| | | import com.billion.main.bs.domain.BsBomChildInfo; |
| | | import com.billion.main.bs.service.IBsBomChildInfoService; |
| | | import com.billion.main.constant.Constants; |
| | |
| | | import com.billion.main.om.domain.OmProductionOrderInfo; |
| | | import com.billion.main.om.service.IOmOrderSchedulingService; |
| | | import com.billion.main.om.service.IOmProductionOrderInfoService; |
| | | import com.billion.main.plcServer.util.TimeUtil; |
| | | import com.billion.main.sys.domain.SysCount; |
| | | import com.billion.main.sys.service.ISysCountService; |
| | | import com.kangaroohy.milo.model.ReadWriteEntity; |
| | |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | |
| | | @Slf4j |
| | | @Component |
| | | public class OPCUaSubscription implements SubscriptionCallback { |
| | | |
| | | public static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | public static MiloService miloService; |
| | | public IDaParamCollectionService daParamCollectionService; |
| | | public IDaStationCollectionService daStationCollectionService; |
| | |
| | | this.daMaterialCollectionService = daMaterialCollectionService; |
| | | this.sysCountService = sysCountService; |
| | | } |
| | | |
| | | @Override |
| | | public void onSubscribe(String identifier, Object value) { |
| | | log.info("地址:"+identifier+"值:"+value); |
| | |
| | | if (Constants.RecordData.equals(tab)){ |
| | | //工站交互初始化 |
| | | if (Constants.ZERO.equals(valueString)){ |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("0").build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(0).build()); |
| | | //请求进站 |
| | | } else if (Constants.ONE.equals(valueString)){ |
| | | //1.1//首工站 |
| | | if(Constants.C005.equals(device) || Constants.OP005.equals(device) || Constants.P010.equals(device)){ |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build()); |
| | | if(Constants.ONLINE.contains(device)){ |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build()); |
| | | } |
| | | ///////除首工站所有工站 |
| | | else if(Constants.PLC1.contains(device) && Constants.OP310.contains(device)){ |
| | | //1.2//除首工站所有工站 |
| | | else if( |
| | | Constants.PLC1.contains(device) || |
| | | Constants.PLC2.contains(device) || |
| | | Constants.PLC3.contains(device) || |
| | | Constants.PLC4.contains(device) || |
| | | Constants.OFFLINE.contains(device) |
| | | ){ |
| | | //校验SFCCode是否存在 |
| | | Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue(); |
| | | Object PalletID = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue(); |
| | | if (SFCCode == null ) { |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("23").build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(13).build()); |
| | | log.info( "进站失败:地址SFCCode为空"); |
| | | } else { |
| | | OmOrderScheduling omOrderScheduling = new OmOrderScheduling(); |
| | | omOrderScheduling.setRemarks(PalletID.toString()); |
| | | omOrderScheduling.setSfcCode(SFCCode.toString()); |
| | | List<OmOrderScheduling> resultList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling); |
| | | log.info("查询结果数量: {}", resultList); |
| | | BsBomChildInfo bsbomChildInfo= new BsBomChildInfo(); |
| | | bsbomChildInfo.setLocationCode(device); |
| | | bsbomChildInfo.setBomCode(resultList.get(0).getWorkOrderNo()); |
| | | //下发配方 |
| | | formula(thoroughfare, device, bsbomChildInfo); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build()); |
| | | |
| | | if(resultList != null){ |
| | | if(Constants.OP010.equals(device)||Constants.OP310.equals(device)){ |
| | | String EngineType =resultList.get(0).getProductCode(); |
| | | String SerialNumber = SFCCode.toString().substring(EngineType.length()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(EngineType).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SerialNumber").value(SerialNumber).build()); |
| | | } |
| | | String getWorkOrderNo = resultList.get(0).getWorkOrderNo(); |
| | | BsBomChildInfo bsbomChildInfo= new BsBomChildInfo(); |
| | | bsbomChildInfo.setLocationCode(device); |
| | | bsbomChildInfo.setBomCode(getWorkOrderNo); |
| | | //下发配方 |
| | | formula(thoroughfare, device, bsbomChildInfo); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build()); |
| | | }else { |
| | | log.info( "进站失败:未检索到SFCCode:{}对应工单" ,SFCCode); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(13).build()); |
| | | } |
| | | } |
| | | } |
| | | //出站保存数据 |
| | |
| | | //上线工位 |
| | | if(Constants.ONLINE.contains(device)){ |
| | | Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue(); |
| | | Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue(); |
| | | Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue().toString(); |
| | | Object EngineType = miloService.readFromOpcUa(thoroughfare + "." + device + ".EngineType").getValue().toString(); |
| | | omOrderScheduling.setWorkOrderNo(workOrderNumber.toString()); |
| | | omOrderScheduling.setNowQty((Long) nowQty); |
| | | omOrderScheduling.setNowQty(nowQty.toString()); |
| | | omOrderScheduling.setSfcCode(SFCCode.toString()); |
| | | omOrderScheduling.setProductCode(EngineType.toString()); |
| | | omOrderScheduling.setStatus("1"); |
| | | Date Time = new Date(); |
| | | ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime"); |
| | | Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString()))); |
| | | omOrderScheduling.setOnlineTime(Time); |
| | | //托盘绑定SFCCode和工单和产线 |
| | | if(Constants.OP005.equals(device)){ |
| | | omProductionOrderInfoService.updateBodyStatus1(); |
| | | omOrderScheduling.setRemarks("Body"); |
| | | sysCountService.updateSerialNumber(); |
| | | OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder(); |
| | | if (Objects.equals(nowQty, getBodyOrder2.getPlanQty().toString())){ |
| | | omProductionOrderInfoService.updateBodyStatus2(); |
| | | } |
| | | } |
| | | if(Constants.C005.equals(device)){ |
| | | omProductionOrderInfoService.updateHeadStatus1(); |
| | | omOrderScheduling.setRemarks("Head"); |
| | | sysCountService.updateHeadNumber(); |
| | | OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder(); |
| | | if (Objects.equals(nowQty, getHeadOrder2.getPlanQty().toString())){ |
| | | omProductionOrderInfoService.updateHeadStatus2(); |
| | | } |
| | | } |
| | | omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling); |
| | | }else if(Constants.OFFLINE.contains(device)){ |
| | | if(Constants.C070.equals(device)){ |
| | | Date Time = new Date(); |
| | | ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime"); |
| | | Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString()))); |
| | | omOrderScheduling.setOfflineTime(Time); |
| | | if(Constants.C060.equals(device)){ |
| | | omOrderScheduling.setRemarks("Head"); |
| | | omOrderScheduling.setSfcCode(SFCCode.toString()); |
| | | List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling); |
| | | Object nowQty = omOrderSchedulingList.get(0).getNowQty(); |
| | | String nowQty = omOrderSchedulingList.get(0).getNowQty(); |
| | | Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo(); |
| | | omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString()); |
| | | List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo); |
| | | Object headQty = omProductionOrderInfoList.get(0).getHeadQty(); |
| | | if (nowQty == headQty){ |
| | | omProductionOrderInfoList.get(0).setHeadStatus("3"); |
| | | |
| | | |
| | | omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0)); |
| | | if (Objects.equals(nowQty, headQty.toString())){ |
| | | UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo()); |
| | | updateWrapper.set("head_status", "2"); |
| | | omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper); |
| | | } |
| | | } else if (Constants.OP310.equals(device)) { |
| | | omOrderScheduling.setRemarks("Body"); |
| | | omOrderScheduling.setSfcCode(SFCCode.toString()); |
| | | List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling); |
| | | Object nowQty = omOrderSchedulingList.get(0).getNowQty(); |
| | | String nowQty = omOrderSchedulingList.get(0).getNowQty(); |
| | | Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo(); |
| | | omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString()); |
| | | List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo); |
| | | Object bodyQty = omProductionOrderInfoList.get(0).getBodyQty(); |
| | | if (nowQty == bodyQty){ |
| | | omProductionOrderInfoList.get(0).setBodyStatus("3"); |
| | | |
| | | |
| | | omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0)); |
| | | if (Objects.equals(nowQty, bodyQty.toString())){ |
| | | UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo()); |
| | | updateWrapper.set("body_status", "2"); |
| | | omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper); |
| | | } |
| | | } |
| | | } else if (Constants.P010.equals(device)) { |
| | | Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue(); |
| | | Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue(); |
| | | omOrderScheduling.setWorkOrderNo(workOrderNumber.toString()); |
| | | omOrderScheduling.setNowQty((Long) nowQty); |
| | | omOrderScheduling.setNowQty(nowQty.toString()); |
| | | omOrderScheduling.setSfcCode(SFCCode.toString()); |
| | | omOrderScheduling.setRemarks("Pre"); |
| | | omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling); |
| | |
| | | omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString()); |
| | | List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo); |
| | | Object preQty = omProductionOrderInfoList.get(0).getPreQty(); |
| | | if (nowQty == preQty){ |
| | | omProductionOrderInfoList.get(0).setPreStatus("3"); |
| | | |
| | | |
| | | omProductionOrderInfoService.updateOmProductionOrderInfo(omProductionOrderInfoList.get(0)); |
| | | |
| | | if (nowQty == preQty.toString()){ |
| | | UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>(); |
| | | updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo()); |
| | | updateWrapper.set("pre_status", "2"); |
| | | omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper); |
| | | } |
| | | sysCountService.updatePreNumber(); |
| | | omProductionOrderInfoService.updatePreStatus1(); |
| | | OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder(); |
| | | if (Objects.equals(nowQty, getPreOrder2.getPlanQty().toString())){ |
| | | omProductionOrderInfoService.updatePreStatus2(); |
| | | } |
| | | } |
| | | //出站保存 |
| | | DaStationCollection daStationCollection = new DaStationCollection(); |
| | | daStationCollection.setLocationCode(device); |
| | | daStationCollection.setSfcCode(SFCCode.toString()); |
| | | Object StationStatus = miloService.readFromOpcUa(thoroughfare + "." + device + ".StationStatus").getValue(); |
| | | Date startTime = new Date(); |
| | | ReadWriteEntity startTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime");//进站时间 |
| | | startTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(startTimeRead.getValue().toString()))); |
| | | daStationCollection.setInboundTime( startTime); |
| | | Date stopTime = new Date(); |
| | | ReadWriteEntity stopTimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime");//进站时间 |
| | | stopTime = format.parse(TimeUtil.test(TimeUtil.stringProcessing(stopTimeRead.getValue().toString()))); |
| | | daStationCollection.setOutboundTime( stopTime); |
| | | daStationCollection.setStatus(StationStatus.toString()); |
| | | daStationCollectionService.insertDaStationCollection(daStationCollection); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(21).build()); |
| | | //查询descriptive字段等于1的采集项保存到扫码保存到da_material_collection表里 |
| | | DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf(); |
| | | daCollectionParamConf1.setProcessesCode(device); |
| | |
| | | List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1); |
| | | for (DaCollectionParamConf conf : daCollectionParamConfList1) { |
| | | String gatherAddress = conf.getGatherAddress(); |
| | | Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 获取原始值对象:ml-citation{ref="4" data="citationList"} |
| | | if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) { |
| | | log.warn("采集地址{}返回空值,跳过存储", gatherAddress); |
| | | continue; // 终止当前循环迭代:ml-citation{ref="1,2" data="citationList"} |
| | | String valueObj = null; |
| | | ReadWriteEntity entity = miloService.readFromOpcUa(gatherAddress); |
| | | if (entity != null) { |
| | | Object value = entity.getValue(); |
| | | if (value != null) { |
| | | valueObj = value.toString(); // 最终赋值 |
| | | if (!Objects.equals(valueObj, " ")) { |
| | | DaMaterialCollection materialCollection = new DaMaterialCollection(); |
| | | materialCollection.setSfcCode(SFCCode.toString()); |
| | | materialCollection.setLocationCode(device); |
| | | materialCollection.setParamName(conf.getParameterSetName()); |
| | | materialCollection.setParamValue(miloService.readFromOpcUa(gatherAddress).getValue().toString()); |
| | | Date Time = new Date(); |
| | | ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime"); |
| | | Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString()))); |
| | | materialCollection.setCollectTime(Time); |
| | | daMaterialCollectionService.insertDaMaterialCollection(materialCollection); |
| | | } |
| | | else { |
| | | log.info("采集项为空: {}", gatherAddress); |
| | | } |
| | | } |
| | | } |
| | | DaMaterialCollection materialCollection = new DaMaterialCollection(); |
| | | materialCollection.setSfcCode(SFCCode.toString()); |
| | | materialCollection.setLocationCode(device); |
| | | materialCollection.setParamName(conf.getParameterSetName()); |
| | | materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue()); |
| | | materialCollection.setCollectTime(new Date()); |
| | | daMaterialCollectionService.insertDaMaterialCollection(materialCollection); |
| | | } |
| | | //查询descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里 |
| | | // 查询descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里 |
| | | DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf(); |
| | | daCollectionParamConf2.setProcessesCode(device); |
| | | daCollectionParamConf2.setDescriptive("2"); |
| | | List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2); |
| | | for (DaCollectionParamConf conf : daCollectionParamConfList2) { |
| | | String gatherAddress = conf.getGatherAddress(); |
| | | Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 获取原始值对象:ml-citation{ref="4" data="citationList"} |
| | | if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) { |
| | | log.warn("采集地址{}返回空值,跳过存储", gatherAddress); |
| | | continue; // 终止当前循环迭代:ml-citation{ref="1,2" data="citationList"} |
| | | String valueObj = miloService.readFromOpcUa(gatherAddress).getValue().toString(); // 获取原始值对象:ml-citation{ref="4" data="citationList"} |
| | | if (!Objects.equals(valueObj, "0.0") && !Objects.equals(valueObj, "0")) { |
| | | DaParamCollection paramCollection = new DaParamCollection(); |
| | | paramCollection.setSfcCode(SFCCode.toString()); |
| | | paramCollection.setLocationCode(device); |
| | | paramCollection.setParamName(conf.getParameterSetName()); |
| | | paramCollection.setParamValue(miloService.readFromOpcUa(gatherAddress).getValue().toString()); |
| | | Date Time = new Date(); |
| | | ReadWriteEntity TimeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime"); |
| | | Time = format.parse(TimeUtil.test(TimeUtil.stringProcessing(TimeRead.getValue().toString()))); |
| | | paramCollection.setCollectTime(Time); |
| | | daParamCollectionService.insertDaParamCollection(paramCollection); |
| | | } |
| | | DaParamCollection paramCollection = new DaParamCollection(); |
| | | paramCollection.setSfcCode(SFCCode.toString()); |
| | | paramCollection.setLocationCode(device); |
| | | paramCollection.setParamName(conf.getParameterSetName()); |
| | | paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue()); |
| | | paramCollection.setCollectionTime(new Date()); |
| | | daParamCollectionService.insertDaParamCollection(paramCollection); |
| | | else { |
| | | log.info("采集项为空: {}", gatherAddress); |
| | | } |
| | | } |
| | | DaStationCollection daStationCollection = new DaStationCollection(); |
| | | daStationCollection.setLocationCode(device); |
| | | daStationCollection.setSfcCode(SFCCode.toString()); |
| | | daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue()); |
| | | daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue()); |
| | | daStationCollectionService.insertDaStationCollection(daStationCollection); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build()); |
| | | } |
| | | } |
| | | } |
| | |
| | | log.error(e.getMessage()); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //首工站下发工单,并生成SN码 |
| | | private static final String[] MONTH = {"A","B","C","D","E","F","G","H","I","J","K","L"}; |
| | | public void plackWorkOrder(String thoroughfare, String device, String tab, String valueString) { |
| | | try { |
| | | if (Constants.WorkOrderRequest.equals(tab)) { |
| | | if (Constants.ZERO.equals(valueString)) { |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("0").build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(0).build()); |
| | | }else if (Constants.ONE.equals(valueString)){ |
| | | if (Constants.OP005.equals(device)){ |
| | | // 查询数据库获取符合条件的订单信息 |
| | |
| | | //判断当前下发数量是否满足计划数量 |
| | | //更新工单状态 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getBodyOrder.getWorkOrderNo()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getBodyOrder.getPlanQty())).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getBodyOrder.getEngineType()).build()); |
| | | //生成sn码 |
| | | SysCount serialNumber = sysCountService.getSerialNumber(); |
| | |
| | | String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12) |
| | | String A5 = String.format("%05d", serialNumber.getSerialNumber()); |
| | | String SFCCode = A1 + A2 + A3+ A4 + A5; |
| | | String SerialNumber = A2 + A3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SerialNumber").value(SerialNumber).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updateSerialNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | }else{ |
| | | sysCountService.clean(); |
| | | sysCountService.updateYear(); |
| | |
| | | String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12) |
| | | String A5 = String.format("%05d", sysCountService.getSerialNumber().getSerialNumber()); |
| | | String SFCCode = A1 + A2 + newA3+ A4 + A5; |
| | | String SerialNumber = A2 + newA3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SerialNumber").value(SerialNumber).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updateSerialNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | } |
| | | // 更新 WorkOrderRequestDone 地址块 |
| | | BsBomChildInfo bsbomChildInfo= new BsBomChildInfo(); |
| | |
| | | bsbomChildInfo.setBomCode(getBodyOrder.getWorkOrderNo()); |
| | | //发下工艺配方 |
| | | formula(thoroughfare, device, bsbomChildInfo); |
| | | omProductionOrderInfoService.updateBodyStatus1(); |
| | | // omProductionOrderInfoService.updateBodyStatus1(); |
| | | //判断缸体工单完成 |
| | | OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder(); |
| | | if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){ |
| | | omProductionOrderInfoService.updateBodyStatus2(); |
| | | } |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getBodyOrder2.getBodyQty()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build()); |
| | | // OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder(); |
| | | // if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){ |
| | | // omProductionOrderInfoService.updateBodyStatus2(); |
| | | // } |
| | | String PalletID = String.valueOf(getBodyOrder.getBodyQty() + 1); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build()); |
| | | log.info("工位{}请求工单成功",device); |
| | | } |
| | | else{ |
| | | log.info("请求工单失败:未检索到工单"); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build()); |
| | | } |
| | | } else if (Constants.C005.equals(device)) { |
| | | // 查询数据库获取符合条件的订单信息 |
| | | OmProductionOrderInfo getHeadOrder = omProductionOrderInfoService.getHeadOrder(); |
| | |
| | | //判断当前下发数量是否满足计划数量 |
| | | //更新工单状态 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getHeadOrder.getWorkOrderNo()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getHeadOrder.getPlanQty())).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getHeadOrder.getEngineType()).build()); |
| | | //生成sn码 |
| | | SysCount headNumber = sysCountService.getHeadNumber(); |
| | |
| | | String SFCCode = A1 + A2 + A3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updateHeadNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | }else{ |
| | | sysCountService.clean(); |
| | | sysCountService.updateYear(); |
| | |
| | | String SFCCode = A1 + A2 + newA3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updateHeadNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | } |
| | | // 更新 WorkOrderRequestDone 地址块 |
| | | BsBomChildInfo bsbomChildInfo= new BsBomChildInfo(); |
| | |
| | | bsbomChildInfo.setBomCode(getHeadOrder.getWorkOrderNo()); |
| | | //发下工艺配方 |
| | | formula(thoroughfare, device, bsbomChildInfo); |
| | | omProductionOrderInfoService.updateHeadStatus1(); |
| | | // omProductionOrderInfoService.updateHeadStatus1(); |
| | | //判断缸体工单完成 |
| | | OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder(); |
| | | if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){ |
| | | omProductionOrderInfoService.updateHeadStatus2(); |
| | | } |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getHeadOrder2.getHeadQty()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build()); |
| | | // OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder(); |
| | | // if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){ |
| | | // omProductionOrderInfoService.updateHeadStatus2(); |
| | | // } |
| | | String PalletID = String.valueOf(getHeadOrder.getHeadQty() + 1); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build()); |
| | | log.info("工位{}请求工单成功",device); |
| | | } |
| | | else{ |
| | | log.info("请求工单失败:未检索到对应工单"); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build()); |
| | | } |
| | | } else if (Constants.P010.equals(device)) { |
| | | // 查询数据库获取符合条件的订单信息 |
| | |
| | | //判断当前下发数量是否满足计划数量 |
| | | //更新工单状态 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getPreOrder.getWorkOrderNo()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getPreOrder.getPlanQty())).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getPreOrder.getEngineType()).build()); |
| | | //生成sn码 |
| | | SysCount preNumber = sysCountService.getPreNumber(); |
| | |
| | | String SFCCode = A1 + A2 + A3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updatePreNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | }else{ |
| | | sysCountService.clean(); |
| | | sysCountService.updateYear(); |
| | |
| | | String SFCCode = A1 + A2 + newA3+ A4 + A5; |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build()); |
| | | sysCountService.updateHeadNumber(); |
| | | log.info("SFCCode:{}下发成功",SFCCode); |
| | | } |
| | | |
| | | // 更新 WorkOrderRequestDone 地址块 |
| | | BsBomChildInfo bsbomChildInfo= new BsBomChildInfo(); |
| | | bsbomChildInfo.setLocationCode(device); |
| | | bsbomChildInfo.setBomCode(getPreOrder.getWorkOrderNo()); |
| | | //发下工艺配方 |
| | | formula(thoroughfare, device, bsbomChildInfo); |
| | | omProductionOrderInfoService.updatePreStatus1(); |
| | | // omProductionOrderInfoService.updatePreStatus1(); |
| | | //判断缸体工单完成 |
| | | OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder(); |
| | | if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){ |
| | | omProductionOrderInfoService.updatePreStatus2(); |
| | | } |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getPreOrder2.getPreQty()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build()); |
| | | // OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder(); |
| | | // if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){ |
| | | // omProductionOrderInfoService.updatePreStatus2(); |
| | | // } |
| | | String PalletID = String.valueOf(getPreOrder.getPreQty() + 1); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(PalletID).build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(11).build()); |
| | | log.info("工位{}请求工单成功",device); |
| | | } |
| | | else{ |
| | | log.info("请求工单失败:未检索到对应工单"); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value(12).build()); |
| | | } |
| | | } |
| | | } |
| | |
| | | List<BsBomChildInfo> bomChildList = bsBomChildInfoService.selectBsBomChildInfoList(bsbomChildInfo); |
| | | for (int i = 1; i <= bomChildList.size(); i++) { |
| | | // 生成 MaterialCode 节点 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Code"+ i).value(bomChildList.get(i-1).getMaterialCode()).build()); |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material"+ i +"Code").value(bomChildList.get(i-1).getMaterialCode()).build()); |
| | | // 生成 MaterialNumber 节点 |
| | | miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Number"+ i).value(bomChildList.get(i-1).getCostQty()).build()); |
| | | miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material"+ i +"Number").value(Integer.parseInt(bomChildList.get(i-1).getCostQty())).build()); |
| | | } |
| | | } |
| | | |