cl
2024-01-23 ff13e6159eab48d53bb528a10d0ab8850fdf7ad5
提交 | 用户 | 时间
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{
ff13e6 197
C 198
199
d43481 200         logger.info("handleFinsh PC处理开始!");
ff13e6 201
C 202         Object object = miloService.
d43481 203                 readFromOpcUa(OPCElement.OP050_S_PRODUCT_STATE_CODE)
ff13e6 204                 .getValue();
C 205         String S_PRODUCT_STATE_CODE = "";
206         if(null != object){
207             S_PRODUCT_STATE_CODE = object.toString();
208         }
d43481 209
C 210         PassingStationCollectionParam param = new PassingStationCollectionParam();
211         param.setWorkOrderNo(S_ORDER_CODE);
212         param.setProductCode(S_PRODUCT_CODE);
213         param.setSfcCode(S_SFC_CODE);
214         param.setProductionLine(PRODUCTION_LINE);
215         param.setLocationCode(LOCATION_CODE);
216         param.setInboundTime(IN_TIME);
217         param.setOutboundTime(DateTool.getLocalTimeForDate());
218         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
219         passingStationCollectionService.add(param);
220
221
ff13e6 222         Object copSfcCode = miloService.
d43481 223                 readFromOpcUa(OPCElement.OP050_S_SFC_CODE_COP)
ff13e6 224                 .getValue();
C 225         Object bopSfcCode = miloService.
d43481 226                 readFromOpcUa(OPCElement.OP050_S_SFC_CODE_BOP)
ff13e6 227                 .getValue();
d43481 228
ff13e6 229         if(null != copSfcCode && null != bopSfcCode){
d43481 230         //根据分总成编码,将EOP物料数据绑定关系修改为总成编码
ff13e6 231             materialTraceabilityService.updateSFC(S_SFC_CODE,copSfcCode.toString());
C 232             materialTraceabilityService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
d43481 233
ff13e6 234             //根据分总成编码,将EOP过站数据绑定关系修改为总成编码
C 235             passingStationCollectionService.updateSFC(S_SFC_CODE,copSfcCode.toString());
236             passingStationCollectionService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
d43481 237
C 238
ff13e6 239             //根据分总成编码,将EOP采集数据绑定关系修改为总成编码
C 240             paramCollectionService.updateSFC(S_SFC_CODE,copSfcCode.toString());
241             paramCollectionService.updateSFC(S_SFC_CODE,bopSfcCode.toString());
242         }
d43481 243         logger.info("S_SFC_CODE:"+S_SFC_CODE);
C 244         logger.info("copSfcCode:"+copSfcCode);
245         logger.info("bopSfcCode:"+bopSfcCode);
246
247         //查询COP和BOP是否合格
248         PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
249         passingStationCollectionParam.setSfcCode(S_SFC_CODE);
250         List<PassingStationCollectionResult> passingStationCollectionResultList =
251                 passingStationCollectionService.findListBySpec(passingStationCollectionParam);
252
253         String isProductState = "true";
254         for(int i=0;i<passingStationCollectionResultList.size();i++){
255             PassingStationCollectionResult passingStationCollectionResult = passingStationCollectionResultList.get(i);
ff13e6 256             if("2".equals(passingStationCollectionResult.getOutRsSign())){
d43481 257                 isProductState = "false";
C 258                 break;
259             }
260         }
261         //修改报工记录
ff13e6 262         if("2".equals(S_PRODUCT_STATE_CODE) || "false".equals(isProductState)){
d43481 263             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
C 264             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
265             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
266             List<ProductionOrderRecordsResult> list = productionOrderRecordsService.findListBySpec(productionOrderRecordsParam);
267             if(list.size()>0){
268                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
269                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
ff13e6 270                 productionOrderRecordsParam.setWhetherPass("2");
d43481 271                 productionOrderRecordsService.update(productionOrderRecordsParam);
C 272             }
273         }
274
275         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP050_J_PC_FINISH,true);
276         miloService.writeToOpcUa(entity);//写PC完成
277         logger.info("handleFinsh PC处理完成!");
278     }
279     public void handleMaterial() {
280
281         //查询批次上料信息
282         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
283         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
284         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
285         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
286         for(int i=0;i<list.size();i++){
287             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
288             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
289             if(remainingQuantity>0 ){
290                 //新增物料追溯
291                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
292                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
293                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
294                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
295                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
296                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
297                 materialTraceabilityParam.setAssemblyQty(1);
298                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
299                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
300                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
301
302                 materialTraceabilityService.add(materialTraceabilityParam);
303                 //更新剩余数量
304                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
305                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
306                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
307             }
308         }
309     }
310
311     //PC读参数信息
312     public void handleInfo() throws Exception {
313         logger.info("handleInfo START!");
314
315         if(null == list){
316             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
317             collectionParamConfParam.setLocationCode(LOCATION_CODE);
318             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
319         }
320         if(null != list && !list.isEmpty()) {
321             for (int i = 0; i < list.size(); i++) {
322                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
6dadf3 323                 Object value = miloService.
d43481 324                         readFromOpcUa(result.getGatherAddress())
6dadf3 325                         .getValue();//读参数值
C 326                 if(null != value) {
327                     ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
328                     paramCollectionParam.setParamCode(result.getParamCode());
329                     paramCollectionParam.setParamName(result.getParamName());
330                     paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
331                     paramCollectionParam.setSfcCode(S_SFC_CODE);
332                     paramCollectionParam.setProductCode(S_PRODUCT_CODE);
333                     paramCollectionParam.setProductionLine(result.getProductionLine());
334                     paramCollectionParam.setLocationCode(result.getLocationCode());
335                     paramCollectionParam.setParamValue(value.toString());
336                     paramCollectionParam.setParamLower(result.getParamLower());
337                     paramCollectionParam.setParamUpper(result.getParamUpper());
338                     paramCollectionParam.setParamStandard(result.getParamCentral());
339                     paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
340                     paramCollectionParam.setUnit(result.getUnit());
341                     paramCollectionService.add(paramCollectionParam);
342                 }
d43481 343             }
C 344         }
345
346         logger.info("handleInfo END!");
347     }
348
349 }