cl
2024-05-23 ba1a7a9ef126296e2798e313dc5b43f775a1123c
提交 | 用户 | 时间
d43481 1 package cn.stylefeng.guns.plcserver.callback;
C 2
3
ba1a7a 4 import cn.hutool.core.collection.CollUtil;
C 5 import cn.hutool.core.util.ObjectUtil;
d43481 6 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.params.CollectionParamConfParam;
C 7 import cn.stylefeng.guns.modular.bs.collectionParamConf.model.result.CollectionParamConfResult;
8 import cn.stylefeng.guns.modular.bs.collectionParamConf.service.CollectionParamConfService;
9 import cn.stylefeng.guns.modular.bs.equipmentInfo.service.EquipmentInfoService;
10 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
ba1a7a 11 import cn.stylefeng.guns.modular.cm.paramCollection.entity.ParamCollection;
d43481 12 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
C 13 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
14 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
15 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.result.PassingStationCollectionResult;
16 import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
17 import cn.stylefeng.guns.modular.dq.materialTraceability.model.params.MaterialTraceabilityParam;
18 import cn.stylefeng.guns.modular.dq.materialTraceability.service.MaterialTraceabilityService;
19 import cn.stylefeng.guns.modular.em.equipmentAlarm.service.EquipmentAlarmService;
20 import cn.stylefeng.guns.modular.em.equipmentStatus.service.EquipmentStatusService;
21 import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
22 import cn.stylefeng.guns.modular.om.productionOrdeInfo.service.ProductionOrdeInfoService;
23 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.params.ProductionOrderBatchInfoParam;
24 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.result.ProductionOrderBatchInfoResult;
25 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.service.ProductionOrderBatchInfoService;
26 import cn.stylefeng.guns.modular.om.productionOrderRecords.model.params.ProductionOrderRecordsParam;
27 import cn.stylefeng.guns.modular.om.productionOrderRecords.model.result.ProductionOrderRecordsResult;
28 import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
29 import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
30 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
31 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
32 import cn.stylefeng.guns.plcserver.opc.OPCElement;
33
34 import cn.stylefeng.guns.plcserver.tool.DateTool;
35 import cn.stylefeng.guns.plcserver.tool.LogUtil;
36 import com.kangaroohy.milo.model.ReadWriteEntity;
37 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
38 import com.kangaroohy.milo.service.MiloService;
39 import org.apache.log4j.Logger;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.stereotype.Component;
42
43 import java.util.ArrayList;
44 import java.util.Date;
45 import java.util.List;
46
47 @Component
73bc06 48 public class OP050Callback{
d43481 49
C 50     public MiloService miloService;
51
52     @Autowired
53     public ProductionOrdeInfoService productionOrdeInfoService;
54     @Autowired
55     public PassingStationCollectionService passingStationCollectionService;
56     @Autowired
57     public ParamCollectionService paramCollectionService;
58     @Autowired
59     public CollectionParamConfService collectionParamConfService;
60     @Autowired
61     public SerialNumbersConfService serialNumbersConfService;
62     @Autowired
63     private EquipmentStatusService equipmentStatusService;
64
65     @Autowired
66     private EquipmentAlarmService equipmentAlarmService;
67     @Autowired
68     private MaterialTraceabilityService materialTraceabilityService;
69     @Autowired
70     private EquipmentInfoService equipmentInfoService;
71     @Autowired
72     private RepairManageInfoService repairManageInfoService;
73
74     @Autowired
75     private LocationInfoService locationInfoService;
76
77     @Autowired
78     private GreaseManageService greaseManageService;
79
80     @Autowired
81     private ProductionOrderRecordsService productionOrderRecordsService;
82
83     @Autowired
84     private ProductionOrderBatchInfoService productionOrderBatchInfoService;
85
86     private static Logger logger;
87     LogUtil logUtil = new LogUtil();
88     static {
89         logger = Logger.getLogger(OP050Callback.class);
90     }
91     private static Date IN_TIME = null;
92     private static String S_ORDER_CODE = "";//工单编号
93     private static String S_PRODUCT_CODE = "";//产品编号
94     private static String S_PRODUCT_TYPE= "";//产品类型
95     private static String S_SFC_CODE = "";//总成编码
96     private static String PRODUCTION_LINE  = "OP";//产线号
97     private static String LOCATION_CODE  = "OP050";//工位号
98     private static List list = null;
ba1a7a 99     private static String PRODUCT_STATE = "合格";
d43481 100     public OP050Callback(MiloService miloService,
C 101                          ProductionOrdeInfoService productionOrdeInfoService,
102                          PassingStationCollectionService passingStationCollectionService,
103                          ParamCollectionService paramCollectionService,
104                          CollectionParamConfService collectionParamConfService,
105                          SerialNumbersConfService serialNumbersConfService,
106                          EquipmentStatusService equipmentStatusService,
107                          EquipmentAlarmService equipmentAlarmService,
108                          MaterialTraceabilityService materialTraceabilityService,
109                          EquipmentInfoService equipmentInfoService,
110                          RepairManageInfoService repairManageInfoService,
111                          LocationInfoService locationInfoService,
112                          GreaseManageService greaseManageService,
113                          ProductionOrderRecordsService productionOrderRecordsService,
114                          ProductionOrderBatchInfoService productionOrderBatchInfoService) {
115         this.miloService = miloService;
116         this.productionOrdeInfoService = productionOrdeInfoService;
117         this.passingStationCollectionService = passingStationCollectionService;
118         this.paramCollectionService = paramCollectionService;
119         this.collectionParamConfService = collectionParamConfService;
120         this.serialNumbersConfService = serialNumbersConfService;
121         this.equipmentStatusService = equipmentStatusService;
122         this.equipmentAlarmService = equipmentAlarmService;
123         this.materialTraceabilityService = materialTraceabilityService;
124         this.equipmentInfoService = equipmentInfoService;
125         this.repairManageInfoService = repairManageInfoService;
126         this.locationInfoService = locationInfoService;
127         this.greaseManageService = greaseManageService;
128         this.productionOrderRecordsService = productionOrderRecordsService;
129         this.productionOrderBatchInfoService = productionOrderBatchInfoService;
130     }
73bc06 131
d43481 132
C 133     //PC读工单
134     public void handleOrder() throws Exception {
135         logger.info("handleOrder PC处理开始!");
136         IN_TIME = DateTool.getLocalTimeForDate();
137         List<String> lists = new ArrayList<>();
138         lists.add(OPCElement.OP050_S_ORDER_CODE);
139         lists.add(OPCElement.OP050_S_PRODUCT_CODE);
140         lists.add(OPCElement.OP050_S_SFC_CODE);
141         List<ReadWriteEntity> returnLists= miloService.readFromOpcUa(lists);
142         returnLists.forEach(element->{
143             switch(element.getIdentifier()){
144                 case OPCElement.OP050_S_ORDER_CODE:
145                     S_ORDER_CODE = element.getValue().toString();
146                     break;
147                 case OPCElement.OP050_S_PRODUCT_CODE:
148                     S_PRODUCT_TYPE = element.getValue().toString();
149                     S_PRODUCT_CODE = GlobalVariable.PRODUCT_CODE_MAP.get(S_PRODUCT_TYPE);
150                     break;
151                 case OPCElement.OP050_S_SFC_CODE:
152                     S_SFC_CODE = element.getValue().toString();
153                     break;
154                 default:
155                     break;
156             }
157         });
158         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_J_PC_WRITE_ORDER,true);
159         miloService.writeToOpcUa(entity);
160         logger.info("handleOrder PC处理完成!");
161     }
162
163     public void handleFinsh() throws Exception{
ff13e6 164
C 165
166
d43481 167         logger.info("handleFinsh PC处理开始!");
ff13e6 168
73bc06 169
C 170         Object copSfcCode = miloService.
171                 readFromOpcUa(OPCElement.OP050_S_SFC_CODE_COP)
172                 .getValue();
173         Object bopSfcCode = miloService.
174                 readFromOpcUa(OPCElement.OP050_S_SFC_CODE_BOP)
175                 .getValue();
176
177
ff13e6 178         Object object = miloService.
d43481 179                 readFromOpcUa(OPCElement.OP050_S_PRODUCT_STATE_CODE)
ff13e6 180                 .getValue();
C 181         String S_PRODUCT_STATE_CODE = "";
182         if(null != object){
183             S_PRODUCT_STATE_CODE = object.toString();
184         }
ba1a7a 185         if("2".equals(S_PRODUCT_STATE_CODE)){
C 186             PRODUCT_STATE = "不合格";
187         }
73bc06 188
C 189         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_J_PC_FINISH,true);
190         miloService.writeToOpcUa(entity);//写PC完成
d43481 191
C 192         PassingStationCollectionParam param = new PassingStationCollectionParam();
193         param.setWorkOrderNo(S_ORDER_CODE);
194         param.setProductCode(S_PRODUCT_CODE);
195         param.setSfcCode(S_SFC_CODE);
196         param.setProductionLine(PRODUCTION_LINE);
197         param.setLocationCode(LOCATION_CODE);
198         param.setInboundTime(IN_TIME);
199         param.setOutboundTime(DateTool.getLocalTimeForDate());
200         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
201         passingStationCollectionService.add(param);
202
203
73bc06 204
d43481 205
ff13e6 206         if(null != copSfcCode && null != bopSfcCode){
d43481 207         //根据分总成编码,将EOP物料数据绑定关系修改为总成编码
ff13e6 208             materialTraceabilityService.updateSFC(S_SFC_CODE,copSfcCode.toString());
C 209             materialTraceabilityService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
d43481 210
ff13e6 211             //根据分总成编码,将EOP过站数据绑定关系修改为总成编码
C 212             passingStationCollectionService.updateSFC(S_SFC_CODE,copSfcCode.toString());
213             passingStationCollectionService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
d43481 214
C 215
ff13e6 216             //根据分总成编码,将EOP采集数据绑定关系修改为总成编码
C 217             paramCollectionService.updateSFC(S_SFC_CODE,copSfcCode.toString());
218             paramCollectionService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
219         }
d43481 220         logger.info("S_SFC_CODE:"+S_SFC_CODE);
C 221         logger.info("copSfcCode:"+copSfcCode);
222         logger.info("bopSfcCode:"+bopSfcCode);
223
224         //查询COP和BOP是否合格
ba1a7a 225         PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
d43481 226         passingStationCollectionParam.setSfcCode(S_SFC_CODE);
C 227         List<PassingStationCollectionResult> passingStationCollectionResultList =
228                 passingStationCollectionService.findListBySpec(passingStationCollectionParam);
229
230         String isProductState = "true";
231         for(int i=0;i<passingStationCollectionResultList.size();i++){
232             PassingStationCollectionResult passingStationCollectionResult = passingStationCollectionResultList.get(i);
ff13e6 233             if("2".equals(passingStationCollectionResult.getOutRsSign())){
d43481 234                 isProductState = "false";
C 235                 break;
236             }
237         }
238         //修改报工记录
ff13e6 239         if("2".equals(S_PRODUCT_STATE_CODE) || "false".equals(isProductState)){
ba1a7a 240             isProductState = "true";
d43481 241             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
C 242             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
243             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
244             List<ProductionOrderRecordsResult> list = productionOrderRecordsService.findListBySpec(productionOrderRecordsParam);
245             if(list.size()>0){
246                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
247                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
ba1a7a 248                 productionOrderRecordsParam.setWhetherPass("不合格");
C 249                 productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
d43481 250                 productionOrderRecordsService.update(productionOrderRecordsParam);
C 251             }
ba1a7a 252         }
d43481 253
73bc06 254
d43481 255         logger.info("handleFinsh PC处理完成!");
C 256     }
257     public void handleMaterial() {
ba1a7a 258         if(S_ORDER_CODE.isEmpty()){
C 259             return;
260         }
d43481 261         //查询批次上料信息
C 262         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
263         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
264         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
265         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
266         for(int i=0;i<list.size();i++){
267             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
268             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
269             if(remainingQuantity>0 ){
270                 //新增物料追溯
271                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
272                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
273                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
274                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
275                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
276                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
277                 materialTraceabilityParam.setAssemblyQty(1);
278                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
279                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
280                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
281
282                 materialTraceabilityService.add(materialTraceabilityParam);
283                 //更新剩余数量
284                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
285                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
286                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
287             }
288         }
289     }
290
291     //PC读参数信息
292     public void handleInfo() throws Exception {
293         logger.info("handleInfo START!");
294
295         if(null == list){
296             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
297             collectionParamConfParam.setLocationCode(LOCATION_CODE);
298             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
299         }
300         if(null != list && !list.isEmpty()) {
ba1a7a 301
C 302             List<String> nodeIdList = new ArrayList<>();
d43481 303             for (int i = 0; i < list.size(); i++) {
C 304                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
ba1a7a 305                 nodeIdList.add(result.getGatherAddress());
C 306             }
307
308             List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
309             if(CollUtil.isNotEmpty(nodeIdList)){
310                 readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
311             }
312
313             List<ParamCollection> paramCollectionlist = new ArrayList<>();
314             if (CollUtil.isNotEmpty(nodeIdList)){
315                 for(int i=0;i<nodeIdList.size();i++){
316                     if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
317                         CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
318
319                         String value = "0";
320                         if (readWriteEntityList.get(i).getValue() != null){
321                             value = readWriteEntityList.get(i).getValue().toString();
322                         }
323                         if(result.getParamName() != null && result.getParamName().contains("状态")){
324                             if("2".equals(value)){
325                                 value = "不合格";
326                             }else {
327                                 value = "合格";
328                             }
329                         }
330                         ParamCollection paramCollectionParam = new ParamCollection();
331                         paramCollectionParam.setParamCode(result.getParamCode());
332                         paramCollectionParam.setParamName(result.getParamName());
333                         paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
334                         paramCollectionParam.setSfcCode(S_SFC_CODE);
335                         paramCollectionParam.setProductCode(S_PRODUCT_CODE);
336                         paramCollectionParam.setProductionLine(result.getProductionLine());
337                         paramCollectionParam.setLocationCode(result.getLocationCode());
338                         paramCollectionParam.setParamValue(value.toString());
339                         paramCollectionParam.setParamLower(result.getParamLower());
340                         paramCollectionParam.setParamUpper(result.getParamUpper());
341                         paramCollectionParam.setParamStandard(result.getParamCentral());
342                         paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
343                         paramCollectionParam.setUnit(result.getUnit());
344                         paramCollectionParam.setSpareField2(PRODUCT_STATE);
345                         paramCollectionlist.add(paramCollectionParam);
346                     }
6dadf3 347                 }
ba1a7a 348                 paramCollectionService.saveBatch(paramCollectionlist);
d43481 349             }
C 350         }
351
352         logger.info("handleInfo END!");
353     }
354
355 }