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 OP090Callback{
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(OP090Callback.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  = "OP090";//工位号
98     private static List list = null;
ba1a7a 99     private static String PRODUCT_STATE = "合格";
d43481 100     public OP090Callback(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     }
131
132
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.OP090_S_ORDER_CODE);
139         lists.add(OPCElement.OP090_S_PRODUCT_CODE);
140         lists.add(OPCElement.OP090_S_SFC_CODE);
141         List<ReadWriteEntity> returnLists= miloService.readFromOpcUa(lists);
142         returnLists.forEach(element->{
143             switch(element.getIdentifier()){
144                 case OPCElement.OP090_S_ORDER_CODE:
145                     S_ORDER_CODE = element.getValue().toString();
146                     break;
147                 case OPCElement.OP090_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.OP090_S_SFC_CODE:
152                     S_SFC_CODE = element.getValue().toString();
153                     break;
154                 default:
155                     break;
156             }
157         });
158         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP090_J_PC_WRITE_ORDER,true);
159         miloService.writeToOpcUa(entity);
160         logger.info("handleOrder PC处理完成!");
161     }
162
163     public void handleFinsh() throws Exception {
164         logger.info("handleFinsh PC处理开始!");
165         //处理过站信息
ff13e6 166         Object object = miloService.
d43481 167                 readFromOpcUa(OPCElement.OP090_S_PRODUCT_STATE_CODE)
ff13e6 168                 .getValue();
C 169
170         String S_PRODUCT_STATE_CODE = "";
171         if(null != object){
172             S_PRODUCT_STATE_CODE = object.toString();
173         }
174
ba1a7a 175         if("2".equals(S_PRODUCT_STATE_CODE)){
C 176             PRODUCT_STATE = "不合格";
177         }
73bc06 178
C 179         Object eopSfcCode = miloService.
180                 readFromOpcUa(OPCElement.OP090_S_SFC_CODE_EOP)
181                 .getValue();
182
183         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.OP090_J_PC_FINISH,true);
184         miloService.writeToOpcUa(entity);//写PC完成
185
d43481 186         PassingStationCollectionParam param = new PassingStationCollectionParam();
C 187         param.setWorkOrderNo(S_ORDER_CODE);
188         param.setProductCode(S_PRODUCT_CODE);
189         param.setSfcCode(S_SFC_CODE);
190         param.setProductionLine(PRODUCTION_LINE);
191         param.setLocationCode(LOCATION_CODE);
192         param.setInboundTime(IN_TIME);
193         param.setOutboundTime(DateTool.getLocalTimeForDate());
194         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
195         passingStationCollectionService.add(param);
196
73bc06 197
d43481 198
ff13e6 199         if(null != eopSfcCode) {
C 200             //根据分总成编码,将EOP物料数据绑定关系修改为总成编码
201             materialTraceabilityService.updateSFC(S_SFC_CODE, eopSfcCode.toString());
d43481 202
ff13e6 203             //根据分总成编码,将EOP过站数据绑定关系修改为总成编码
C 204             passingStationCollectionService.updateSFC(S_SFC_CODE, eopSfcCode.toString());
d43481 205
ff13e6 206             //根据分总成编码,将EOP采集数据绑定关系修改为总成编码
C 207             paramCollectionService.updateSFC(S_SFC_CODE, eopSfcCode.toString());
d43481 208
ff13e6 209             logger.info("S_SFC_CODE:" + S_SFC_CODE);
C 210             logger.info("eopSfcCode:" + eopSfcCode);
211         }
ba1a7a 212         //查询COP和BOP是否合格
d43481 213         PassingStationCollectionParam passingStationCollectionParam = new PassingStationCollectionParam();
C 214         passingStationCollectionParam.setSfcCode(S_SFC_CODE);
215         List<PassingStationCollectionResult> passingStationCollectionResultList =
216                 passingStationCollectionService.findListBySpec(passingStationCollectionParam);
217
218         String isProductState = "true";
219         for(int i=0;i<passingStationCollectionResultList.size();i++){
220             PassingStationCollectionResult passingStationCollectionResult = passingStationCollectionResultList.get(i);
221             if("false".equals(passingStationCollectionResult.getOutRsSign())){
222                 isProductState = "false";
223                 break;
224             }
225         }
226         //修改报工记录
ff13e6 227         if("2".equals(S_PRODUCT_STATE_CODE) || "false".equals(isProductState)){
d43481 228             ProductionOrderRecordsParam productionOrderRecordsParam = new ProductionOrderRecordsParam();
C 229             productionOrderRecordsParam.setWorkOrderNo(S_ORDER_CODE);
230             productionOrderRecordsParam.setProductNo(S_SFC_CODE);
231
232             List<ProductionOrderRecordsResult> list = productionOrderRecordsService.findListBySpec(productionOrderRecordsParam);
233             if(list.size()>0){
234                 ProductionOrderRecordsResult productionOrderRecordsResult = list.get(0);
235                 productionOrderRecordsParam.setId(productionOrderRecordsResult.getId());
ba1a7a 236                 productionOrderRecordsParam.setWhetherPass("不合格");
C 237                 productionOrderRecordsParam.setEndTime(DateTool.getLocalTimeForDate());
d43481 238                 productionOrderRecordsService.update(productionOrderRecordsParam);
C 239             }
ba1a7a 240         }
d43481 241
73bc06 242
d43481 243         logger.info("handleFinsh PC处理完成!");
C 244     }
245     public void handleMaterial() {
ba1a7a 246         if(S_ORDER_CODE.isEmpty()){
C 247             return;
248         }
d43481 249         //查询批次上料信息
C 250         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
251         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
252         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
253         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
254         for(int i=0;i<list.size();i++){
255             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
256             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
257             if(remainingQuantity>0 ){
258                 //新增物料追溯
259                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
260                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
261                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
262                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
263                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
264                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
265                 materialTraceabilityParam.setAssemblyQty(1);
266                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
267                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
268                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
269
270                 materialTraceabilityService.add(materialTraceabilityParam);
271                 //更新剩余数量
272                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
273                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
274                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
275             }
276         }
277     }
278
279     //PC读参数信息
280     public void handleInfo() throws Exception {
281         logger.info("handleInfo START!");
282
283         if(null == list){
284             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
285             collectionParamConfParam.setLocationCode(LOCATION_CODE);
286             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
287         }
288         if(null != list && !list.isEmpty()) {
ba1a7a 289
C 290             List<String> nodeIdList = new ArrayList<>();
d43481 291             for (int i = 0; i < list.size(); i++) {
C 292                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
ba1a7a 293                 nodeIdList.add(result.getGatherAddress());
C 294             }
295
296             List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
297             if(CollUtil.isNotEmpty(nodeIdList)){
298                 readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
299             }
300
301             List<ParamCollection> paramCollectionlist = new ArrayList<>();
302             if (CollUtil.isNotEmpty(nodeIdList)){
303                 for(int i=0;i<nodeIdList.size();i++){
304                     if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
305                         CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
306
307                         String value = "0";
308                         if (readWriteEntityList.get(i).getValue() != null){
309                             value = readWriteEntityList.get(i).getValue().toString();
310                         }
311                         if(result.getParamName() != null && result.getParamName().contains("状态")){
312                             if("2".equals(value)){
313                                 value = "不合格";
314                             }else {
315                                 value = "合格";
316                             }
317                         }
318                         ParamCollection paramCollectionParam = new ParamCollection();
319                         paramCollectionParam.setParamCode(result.getParamCode());
320                         paramCollectionParam.setParamName(result.getParamName());
321                         paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
322                         paramCollectionParam.setSfcCode(S_SFC_CODE);
323                         paramCollectionParam.setProductCode(S_PRODUCT_CODE);
324                         paramCollectionParam.setProductionLine(result.getProductionLine());
325                         paramCollectionParam.setLocationCode(result.getLocationCode());
326                         paramCollectionParam.setParamValue(value.toString());
327                         paramCollectionParam.setParamLower(result.getParamLower());
328                         paramCollectionParam.setParamUpper(result.getParamUpper());
329                         paramCollectionParam.setParamStandard(result.getParamCentral());
330                         paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
331                         paramCollectionParam.setUnit(result.getUnit());
332                         paramCollectionParam.setSpareField2(PRODUCT_STATE);
333                         paramCollectionlist.add(paramCollectionParam);
334                     }
6dadf3 335                 }
ba1a7a 336                 paramCollectionService.saveBatch(paramCollectionlist);
d43481 337             }
C 338         }
339
340         logger.info("handleInfo END!");
341     }
342 }