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