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