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