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