hdy
5 天以前 31960ffca93463cf4f6d417576c8694aed84138e
提交 | 用户 | 时间
1e2ff5 1 package com.billion.main.plcServer.sub;
b9df2f 2
a95ad9 3 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
bf5dcc 4 import com.billion.common.utils.StringUtils;
a2cd0f 5 import com.billion.main.bs.domain.BsBomChildInfo;
H 6 import com.billion.main.bs.service.IBsBomChildInfoService;
7 import com.billion.main.constant.Constants;
bf5dcc 8 import com.billion.main.da.domain.DaCollectionParamConf;
H 9 import com.billion.main.da.domain.DaMaterialCollection;
10 import com.billion.main.da.domain.DaParamCollection;
11 import com.billion.main.da.domain.DaStationCollection;
12 import com.billion.main.da.service.IDaCollectionParamConfService;
13 import com.billion.main.da.service.IDaMaterialCollectionService;
1e2ff5 14 import com.billion.main.da.service.IDaParamCollectionService;
a2cd0f 15 import com.billion.main.da.service.IDaStationCollectionService;
H 16 import com.billion.main.om.domain.OmOrderScheduling;
17 import com.billion.main.om.domain.OmProductionOrderInfo;
18 import com.billion.main.om.service.IOmOrderSchedulingService;
19 import com.billion.main.om.service.IOmProductionOrderInfoService;
b9df2f 20 import com.billion.main.sys.domain.SysCount;
H 21 import com.billion.main.sys.service.ISysCountService;
a2cd0f 22 import com.kangaroohy.milo.model.ReadWriteEntity;
1e2ff5 23 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
H 24 import com.kangaroohy.milo.service.MiloService;
25 import lombok.extern.slf4j.Slf4j;
26 import org.springframework.stereotype.Component;
b9df2f 27
a2cd0f 28 import java.time.LocalDateTime;
bf5dcc 29 import java.util.Date;
a2cd0f 30 import java.util.List;
b9df2f 31 import java.util.Objects;
a2cd0f 32 import java.util.concurrent.CompletableFuture;
1e2ff5 33 @Slf4j
H 34 @Component
35 public class OPCUaSubscription implements SubscriptionCallback {
36     public static MiloService miloService;
37     public IDaParamCollectionService daParamCollectionService;
a2cd0f 38     public IDaStationCollectionService daStationCollectionService;
H 39     public IOmProductionOrderInfoService omProductionOrderInfoService;
40     public IOmOrderSchedulingService omOrderSchedulingService;
bf5dcc 41     public IBsBomChildInfoService bsBomChildInfoService;
H 42     public IDaCollectionParamConfService daCollectionParamConfService;
43     public IDaMaterialCollectionService daMaterialCollectionService;
b9df2f 44     public ISysCountService sysCountService;
bf5dcc 45
1e2ff5 46
H 47     public OPCUaSubscription(MiloService miloService,
a2cd0f 48                              IDaParamCollectionService daParamCollectionService,
H 49                              IDaStationCollectionService daStationCollectionService,
50                              IOmProductionOrderInfoService omProductionOrderInfoService,
51                              IOmOrderSchedulingService omOrderSchedulingService,
bf5dcc 52                              IBsBomChildInfoService bsBomChildInfoService,
H 53                              IDaCollectionParamConfService daCollectionParamConfService,
b9df2f 54                              IDaMaterialCollectionService daMaterialCollectionService,
H 55                              ISysCountService sysCountService
a2cd0f 56                              ) {
1e2ff5 57         OPCUaSubscription.miloService = miloService;
H 58         this.daParamCollectionService = daParamCollectionService;
a2cd0f 59         this.daStationCollectionService = daStationCollectionService;
H 60         this.omProductionOrderInfoService = omProductionOrderInfoService;
61         this.omOrderSchedulingService = omOrderSchedulingService;
bf5dcc 62         this.bsBomChildInfoService = bsBomChildInfoService;
H 63         this.daCollectionParamConfService = daCollectionParamConfService;
64         this.daMaterialCollectionService = daMaterialCollectionService;
b9df2f 65         this.sysCountService = sysCountService;
1e2ff5 66     }
H 67     @Override
68     public void onSubscribe(String identifier, Object value) {
a2cd0f 69         log.info("地址:"+identifier+"值:"+value);
H 70         try {
71             if(null != value ) {
72                 String[] nodes = identifier.split("[.]");
73                 String thoroughfare = nodes[0];//通道
74                 String device = nodes[1];//设备
75                 String tab = nodes[2];//标记
76                 String valueString = value.toString();//地址值
77                 CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> {
78                     onSubscribe(thoroughfare,device,tab,valueString);
79                     plackWorkOrder(thoroughfare,device,tab,valueString);
80                 });
81             }
82         } catch (Exception e) {
83             log.error(e.getMessage());
84         }
85     }
1e2ff5 86
a2cd0f 87     public void onSubscribe(String thoroughfare,String device,String tab,String valueString)  {
H 88         try {
89             if (Constants.RecordData.equals(tab)){
90                 //工站交互初始化
91                 if (Constants.ZERO.equals(valueString)){
92                     miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("0").build());
93                 //请求进站
94                 } else if (Constants.ONE.equals(valueString)){
b9df2f 95                     //1.1//首工站
31960f 96                     if(Constants.ONLINE.contains(device)){
a2cd0f 97                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
H 98                     }
31960f 99                     //除首工站所有工站
H 100                     else if(Constants.PLC1.contains(device) ||
101                             Constants.PLC2.contains(device) ||
102                             Constants.PLC3.contains(device) ||
103                             Constants.PLC4.contains(device) ||
104                             Constants.OFFLINE.contains(device)
105                     ){
a2cd0f 106                         //校验SFCCode是否存在
H 107                         Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
108                         if (SFCCode == null ) {
109                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("23").build());
110                         } else {
111                             OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
112                             List<OmOrderScheduling> resultList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
113                             log.info("查询结果数量: {}", resultList);
114                             BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
115                             bsbomChildInfo.setLocationCode(device);
116                             bsbomChildInfo.setBomCode(resultList.get(0).getWorkOrderNo());
117                             //下发配方
118                             formula(thoroughfare, device, bsbomChildInfo);
119                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("11").build());
120                         }
121                     }
122                 //出站保存数据
123                 } else if (Constants.TWO.equals(valueString)) {
b9df2f 124                     OmProductionOrderInfo omProductionOrderInfo = new OmProductionOrderInfo();
H 125                     OmOrderScheduling omOrderScheduling = new OmOrderScheduling();
126                     Object SFCCode = miloService.readFromOpcUa(thoroughfare + "." + device + ".SFCCode").getValue();
127                     //上线工位
128                     if(Constants.ONLINE.contains(device)){
a2cd0f 129                         Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
b9df2f 130                         Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
a2cd0f 131                         omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
b9df2f 132                         omOrderScheduling.setNowQty((Long) nowQty);
a2cd0f 133                         omOrderScheduling.setSfcCode(SFCCode.toString());
b9df2f 134                         //托盘绑定SFCCode和工单和产线
H 135                         if(Constants.OP005.equals(device)){
136                             omOrderScheduling.setRemarks("Body");
bf5dcc 137                         }
b9df2f 138                         if(Constants.C005.equals(device)){
H 139                             omOrderScheduling.setRemarks("Head");
bf5dcc 140                         }
b9df2f 141                         omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
H 142                     }else if(Constants.OFFLINE.contains(device)){
143                         if(Constants.C070.equals(device)){
144                             omOrderScheduling.setRemarks("Head");
145                             omOrderScheduling.setSfcCode(SFCCode.toString());
146                             List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
147                             Object nowQty = omOrderSchedulingList.get(0).getNowQty();
148                             Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
149                             omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
150                             List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
151                             Object headQty = omProductionOrderInfoList.get(0).getHeadQty();
152                             if (nowQty == headQty){
a95ad9 153                                 UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
A 154                                 updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
31960f 155                                 updateWrapper.set("head_status", "3");
a95ad9 156                                 omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
bf5dcc 157                             }
b9df2f 158                         } else if (Constants.OP310.equals(device)) {
H 159                             omOrderScheduling.setRemarks("Body");
160                             omOrderScheduling.setSfcCode(SFCCode.toString());
161                             List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
162                             Object nowQty = omOrderSchedulingList.get(0).getNowQty();
163                             Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
164                             omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
165                             List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
166                             Object bodyQty = omProductionOrderInfoList.get(0).getBodyQty();
167                             if (nowQty == bodyQty){
31960f 168                                 UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
H 169                                 updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
170                                 updateWrapper.set("body_status", "3");
171                                 omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
bf5dcc 172                             }
H 173                         }
b9df2f 174                     } else if (Constants.P010.equals(device)) {
H 175                         Object workOrderNumber = miloService.readFromOpcUa(thoroughfare + "." + device + ".WorkOrderNumber").getValue();
176                         Object nowQty = miloService.readFromOpcUa(thoroughfare + "." + device + ".PalletID").getValue();
177                         omOrderScheduling.setWorkOrderNo(workOrderNumber.toString());
178                         omOrderScheduling.setNowQty((Long) nowQty);
179                         omOrderScheduling.setSfcCode(SFCCode.toString());
180                         omOrderScheduling.setRemarks("Pre");
181                         omOrderSchedulingService.insertOmOrderScheduling(omOrderScheduling);
182                         List<OmOrderScheduling> omOrderSchedulingList = omOrderSchedulingService.selectOmOrderSchedulingList(omOrderScheduling);
183                         Object WorkOrderNumber = omOrderSchedulingList.get(0).getWorkOrderNo();
184                         omProductionOrderInfo.setWorkOrderNo(WorkOrderNumber.toString());
185                         List<OmProductionOrderInfo> omProductionOrderInfoList = omProductionOrderInfoService.selectOmProductionOrderInfoList(omProductionOrderInfo);
186                         Object preQty = omProductionOrderInfoList.get(0).getPreQty();
187                         if (nowQty == preQty){
31960f 188                             UpdateWrapper<OmProductionOrderInfo> updateWrapper = new UpdateWrapper<>();
H 189                             updateWrapper.eq("work_order_no", omProductionOrderInfoList.get(0).getWorkOrderNo());
190                             updateWrapper.set("pre_status", "3");
191                             omProductionOrderInfoService.update(new OmProductionOrderInfo(),updateWrapper);
b9df2f 192                         }
a2cd0f 193                     }
b9df2f 194                     //查询descriptive字段等于1的采集项保存到扫码保存到da_material_collection表里
H 195                     DaCollectionParamConf daCollectionParamConf1 = new DaCollectionParamConf();
196                     daCollectionParamConf1.setProcessesCode(device);
197                     daCollectionParamConf1.setDescriptive("1");
198                     List<DaCollectionParamConf> daCollectionParamConfList1 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf1);
199                     for (DaCollectionParamConf conf : daCollectionParamConfList1) {
200                         String gatherAddress = conf.getGatherAddress();
201                         Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 获取原始值对象‌:ml-citation{ref="4" data="citationList"}
202                         if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
203                             log.warn("采集地址{}返回空值,跳过存储", gatherAddress);
204                             continue; // 终止当前循环迭代‌:ml-citation{ref="1,2" data="citationList"}
205                         }
206                         DaMaterialCollection materialCollection = new DaMaterialCollection();
207                         materialCollection.setSfcCode(SFCCode.toString());
208                         materialCollection.setLocationCode(device);
209                         materialCollection.setParamName(conf.getParameterSetName());
210                         materialCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
211                         materialCollection.setCollectTime(new Date());
212                         daMaterialCollectionService.insertDaMaterialCollection(materialCollection);
213                     }
214                     //查询descriptive字段等于2的采集项保存到扫码保存到da_param_collection表里
215                     DaCollectionParamConf daCollectionParamConf2 = new DaCollectionParamConf();
216                     daCollectionParamConf2.setProcessesCode(device);
217                     daCollectionParamConf2.setDescriptive("2");
218                     List<DaCollectionParamConf> daCollectionParamConfList2 = daCollectionParamConfService.selectDaCollectionParamConfList(daCollectionParamConf2);
219                     for (DaCollectionParamConf conf : daCollectionParamConfList2) {
220                         String gatherAddress = conf.getGatherAddress();
221                         Object valueObj = miloService.readFromOpcUa(gatherAddress).getValue(); // 获取原始值对象‌:ml-citation{ref="4" data="citationList"}
222                         if (valueObj == null || StringUtils.isEmpty(valueObj.toString())) {
223                             log.warn("采集地址{}返回空值,跳过存储", gatherAddress);
224                             continue; // 终止当前循环迭代‌:ml-citation{ref="1,2" data="citationList"}
225                         }
226                         DaParamCollection paramCollection = new DaParamCollection();
227                         paramCollection.setSfcCode(SFCCode.toString());
228                         paramCollection.setLocationCode(device);
229                         paramCollection.setParamName(conf.getParameterSetName());
230                         paramCollection.setParamValue((String) miloService.readFromOpcUa(gatherAddress).getValue());
231                         paramCollection.setCollectionTime(new Date());
232                         daParamCollectionService.insertDaParamCollection(paramCollection);
233                     }
234                     DaStationCollection daStationCollection = new DaStationCollection();
235                     daStationCollection.setLocationCode(device);
236                     daStationCollection.setSfcCode(SFCCode.toString());
237                     daStationCollection.setInboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StartTime").getValue());
238                     daStationCollection.setOutboundTime((Date) miloService.readFromOpcUa(thoroughfare + "." + device + ".StopTime").getValue());
239                     daStationCollectionService.insertDaStationCollection(daStationCollection);
240                     miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value("21").build());
a2cd0f 241                 }
H 242             }
243         }
244         catch (Exception e) {
245             log.error(e.getMessage());
246         }
247 }
248     //首工站下发工单,并生成SN码
249     private static final String[] MONTH = {"A","B","C","D","E","F","G","H","I","J","K","L"};
250     public void plackWorkOrder(String thoroughfare, String device, String tab, String valueString) {
251     try {
252         if (Constants.WorkOrderRequest.equals(tab)) {
b9df2f 253             if (Constants.ZERO.equals(valueString)) {
H 254                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("0").build());
255             }else if (Constants.ONE.equals(valueString)){
256                 if (Constants.OP005.equals(device)){
bf5dcc 257                     // 查询数据库获取符合条件的订单信息
b9df2f 258                     OmProductionOrderInfo getBodyOrder = omProductionOrderInfoService.getBodyOrder();
H 259                     if (getBodyOrder != null) {
260                         //判断当前下发数量是否满足计划数量
bf5dcc 261                             //更新工单状态
b9df2f 262                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getBodyOrder.getWorkOrderNo()).build());
H 263                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getBodyOrder.getPlanQty())).build());
264                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getBodyOrder.getEngineType()).build());
a2cd0f 265                             //生成sn码
b9df2f 266                             SysCount serialNumber = sysCountService.getSerialNumber();
a2cd0f 267                             String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
b9df2f 268                             //判断是否跨年
H 269                             if(A3.equals(String.valueOf(serialNumber.getYear()))){
270                                 String A1 = getBodyOrder.getEngineType();//获取产品型号
271                                 String A2 = "3";//固定产线
a2cd0f 272                                 String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
b9df2f 273                                 String A5 = String.format("%05d", serialNumber.getSerialNumber());
a2cd0f 274                                 String SFCCode = A1 + A2 + A3+ A4 + A5;
H 275                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
b9df2f 276                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
H 277                                 sysCountService.updateSerialNumber();
a2cd0f 278                             }else{
b9df2f 279                                 sysCountService.clean();
H 280                                 sysCountService.updateYear();
281                                 String A1 = getBodyOrder.getEngineType();//获取产品型号
a2cd0f 282                                 String A2 = "3";
b9df2f 283                                 String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
a2cd0f 284                                 String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
b9df2f 285                                 String A5 = String.format("%05d", sysCountService.getSerialNumber().getSerialNumber());
H 286                                 String SFCCode = A1 + A2 + newA3+ A4 + A5;
a2cd0f 287                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
b9df2f 288                                 miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
H 289                                 sysCountService.updateSerialNumber();
a2cd0f 290                             }
H 291                             // 更新 WorkOrderRequestDone 地址块
292                             BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
293                             bsbomChildInfo.setLocationCode(device);
b9df2f 294                             bsbomChildInfo.setBomCode(getBodyOrder.getWorkOrderNo());
a2cd0f 295                             //发下工艺配方
H 296                             formula(thoroughfare, device, bsbomChildInfo);
b9df2f 297                             omProductionOrderInfoService.updateBodyStatus1();
H 298                             //判断缸体工单完成
299                             OmProductionOrderInfo getBodyOrder2 = omProductionOrderInfoService.getBodyOrder();
300                             if (Objects.equals(getBodyOrder2.getBodyQty(), getBodyOrder2.getPlanQty())){
301                                 omProductionOrderInfoService.updateBodyStatus2();
302                             }
303                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getBodyOrder2.getBodyQty()).build());
304                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
305                     }
306                 } else if (Constants.C005.equals(device)) {
307                     // 查询数据库获取符合条件的订单信息
308                     OmProductionOrderInfo getHeadOrder = omProductionOrderInfoService.getHeadOrder();
309                     if (getHeadOrder != null) {
310                         //判断当前下发数量是否满足计划数量
311                         //更新工单状态
312                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getHeadOrder.getWorkOrderNo()).build());
313                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getHeadOrder.getPlanQty())).build());
314                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getHeadOrder.getEngineType()).build());
315                         //生成sn码
316                         SysCount headNumber = sysCountService.getHeadNumber();
317                         String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
318                         //判断是否跨年
319                         if(A3.equals(String.valueOf(headNumber.getYear()))){
320                             String A1 = getHeadOrder.getEngineType();//获取产品型号
321                             String A2 = "3";//固定产线
322                             String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
323                             String A5 = String.format("%05d", headNumber.getHeadNumber());
324                             String SFCCode = A1 + A2 + A3+ A4 + A5;
325                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
326                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
327                             sysCountService.updateHeadNumber();
328                         }else{
329                             sysCountService.clean();
330                             sysCountService.updateYear();
331                             String A1 = getHeadOrder.getEngineType();//获取产品型号
332                             String A2 = "3";
333                             String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
334                             String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
335                             String A5 = String.format("%05d", sysCountService.getHeadNumber().getHeadNumber());
336                             String SFCCode = A1 + A2 + newA3+ A4 + A5;
337                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
338                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
339                             sysCountService.updateHeadNumber();
a2cd0f 340                         }
b9df2f 341                         // 更新 WorkOrderRequestDone 地址块
H 342                         BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
343                         bsbomChildInfo.setLocationCode(device);
344                         bsbomChildInfo.setBomCode(getHeadOrder.getWorkOrderNo());
345                         //发下工艺配方
346                         formula(thoroughfare, device, bsbomChildInfo);
347                         omProductionOrderInfoService.updateHeadStatus1();
348                         //判断缸体工单完成
349                         OmProductionOrderInfo getHeadOrder2 = omProductionOrderInfoService.getHeadOrder();
350                         if (Objects.equals(getHeadOrder2.getHeadQty(), getHeadOrder2.getPlanQty())){
351                             omProductionOrderInfoService.updateHeadStatus2();
352                         }
353                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getHeadOrder2.getHeadQty()).build());
354                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
355                     }
356                 } else if (Constants.P010.equals(device)) {
357                     // 查询数据库获取符合条件的订单信息
358                     OmProductionOrderInfo getPreOrder = omProductionOrderInfoService.getPreOrder();
359                     if (getPreOrder != null) {
360                         //判断当前下发数量是否满足计划数量
361                         //更新工单状态
362                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderNumber").value(getPreOrder.getWorkOrderNo()).build());
363                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ProductionPlan").value(String.valueOf(getPreOrder.getPlanQty())).build());
364                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".EngineType").value(getPreOrder.getEngineType()).build());
365                         //生成sn码
366                         SysCount preNumber = sysCountService.getPreNumber();
367                         String A3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
368                         if(A3.equals(String.valueOf(preNumber.getYear()))){
369                             String A1 = getPreOrder.getEngineType();//获取产品型号
370                             String A2 = "3";
371                             String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
372                             String A5 = String.format("%05d", preNumber.getPreNumber());
373                             String SFCCode = A1 + A2 + A3+ A4 + A5;
374                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
375                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
376                             sysCountService.updatePreNumber();
377                         }else{
378                             sysCountService.clean();
379                             sysCountService.updateYear();
380                             String A1 = getPreOrder.getEngineType();//获取产品型号
381                             String A2 = "3";
382                             String newA3 = String.valueOf(LocalDateTime.now().getYear()).substring(2);
383                             String A4 = MONTH[LocalDateTime.now().getMonthValue() - 1];// 获取当前月份(1-12)
384                             String A5 = String.format("%05d", sysCountService.getPreNumber().getPreNumber());
385                             String SFCCode = A1 + A2 + newA3+ A4 + A5;
386                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".SFCCode").value(SFCCode).build());
387                             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MESSFCCode").value(SFCCode).build());
388                             sysCountService.updateHeadNumber();
389                         }
390                         // 更新 WorkOrderRequestDone 地址块
391                         BsBomChildInfo bsbomChildInfo= new BsBomChildInfo();
392                         bsbomChildInfo.setLocationCode(device);
393                         bsbomChildInfo.setBomCode(getPreOrder.getWorkOrderNo());
394                         //发下工艺配方
395                         formula(thoroughfare, device, bsbomChildInfo);
396                         omProductionOrderInfoService.updatePreStatus1();
397                         //判断缸体工单完成
398                         OmProductionOrderInfo getPreOrder2 = omProductionOrderInfoService.getPreOrder();
399                         if (Objects.equals(getPreOrder2.getPreQty(), getPreOrder2.getPlanQty())){
400                             omProductionOrderInfoService.updatePreStatus2();
401                         }
402                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".PalletID").value(getPreOrder2.getPreQty()).build());
403                         miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".WorkOrderRequestDone").value("11").build());
a2cd0f 404                     }
H 405                 }
406             }
407         }
408     } catch (Exception e) {
409         log.error(e.getMessage());
1e2ff5 410     }
H 411 }
a2cd0f 412
H 413     //发下工艺配方方法
414     private void formula(String thoroughfare, String device, BsBomChildInfo bsbomChildInfo) throws Exception {
bf5dcc 415         List<BsBomChildInfo> bomChildList = bsBomChildInfoService.selectBsBomChildInfoList(bsbomChildInfo);
a2cd0f 416         for (int i = 1; i <= bomChildList.size(); i++) {
H 417             // 生成 MaterialCode 节点
418             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Code"+ i).value(bomChildList.get(i-1).getMaterialCode()).build());
419             // 生成 MaterialNumber 节点
420             miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".Material1Number"+ i).value(bomChildList.get(i-1).getCostQty()).build());
421         }
422     }
423
424 }
425 //
426