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.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 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
73bc06 44 public class EOP040Callback {
d43481 45
C 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(EOP040Callback.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  = "EOP";//产线号
93     private static String LOCATION_CODE  = "EOP040";//工位号
94     private static List list = null;
ba1a7a 95     private static String PRODUCT_STATE = "合格";
d43481 96     public EOP040Callback(MiloService miloService,
C 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     //PC读工单
129     public void handleOrder() throws Exception {
130         logger.info("handleOrder PC处理开始!");
131         IN_TIME = DateTool.getLocalTimeForDate();
132         List<String> lists = new ArrayList<>();
133         lists.add(OPCElement.EOP040_S_ORDER_CODE);
134         lists.add(OPCElement.EOP040_S_PRODUCT_CODE);
135         lists.add(OPCElement.EOP040_S_SFC_CODE);
136         List<ReadWriteEntity> returnLists= miloService.readFromOpcUa(lists);
137         returnLists.forEach(element->{
138             switch(element.getIdentifier()){
139                 case OPCElement.EOP040_S_ORDER_CODE:
140                     S_ORDER_CODE = element.getValue().toString();
141                     break;
142                 case OPCElement.EOP040_S_PRODUCT_CODE:
143                     S_PRODUCT_TYPE = element.getValue().toString();
144                     S_PRODUCT_CODE = GlobalVariable.PRODUCT_CODE_MAP.get(S_PRODUCT_TYPE);
145                     break;
146                 case OPCElement.EOP040_S_SFC_CODE:
147                     S_SFC_CODE = element.getValue().toString();
148                     break;
149                 default:
150                     break;
151             }
152         });
153         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP040_J_PC_WRITE_ORDER,true);
154         miloService.writeToOpcUa(entity);
155         logger.info("handleOrder PC处理完成!");
156     }
157
158     public void handleFinsh() throws Exception {
159         logger.info("handleFinsh PC处理开始!");
160         String S_PRODUCT_STATE_CODE = miloService.
161                 readFromOpcUa(OPCElement.EOP040_S_PRODUCT_STATE_CODE)
162                 .getValue().toString();
ba1a7a 163         if("2".equals(S_PRODUCT_STATE_CODE)){
C 164             PRODUCT_STATE = "不合格";
165         }
73bc06 166         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.EOP040_J_PC_FINISH,true);
C 167         miloService.writeToOpcUa(entity);//写PC完成
d43481 168         //处理过站信息
C 169         PassingStationCollectionParam param = new PassingStationCollectionParam();
170         param.setWorkOrderNo(S_ORDER_CODE);
171         param.setProductCode(S_PRODUCT_CODE);
172         param.setSfcCode(S_SFC_CODE);
173         param.setProductionLine(PRODUCTION_LINE);
174         param.setLocationCode(LOCATION_CODE);
175         param.setInboundTime(IN_TIME);
176         param.setOutboundTime(DateTool.getLocalTimeForDate());
177         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
178         passingStationCollectionService.add(param);
179
180         logger.info("handleFinsh PC处理完成!");
181     }
182
183     public void handleMaterial() {
ba1a7a 184         if(S_ORDER_CODE.isEmpty()){
C 185             return;
186         }
d43481 187         //查询批次上料信息
C 188         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
189         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
190         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
191         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
192         for(int i=0;i<list.size();i++){
193             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
194             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
195             if(remainingQuantity>0 ){
196                 //新增物料追溯
197                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
198                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
199                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
200                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
201                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
202                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
203                 materialTraceabilityParam.setAssemblyQty(1);
204                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
205                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
206                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
207
208                 materialTraceabilityService.add(materialTraceabilityParam);
209                 //更新剩余数量
210                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
211                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
212                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
213             }
214         }
215     }
216
217     //PC读参数信息
218     public void handleInfo() throws Exception {
219         logger.info("handleInfo START!");
220
221         if(null == list){
222             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
223             collectionParamConfParam.setLocationCode(LOCATION_CODE);
224             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
225         }
226         if(null != list && !list.isEmpty()) {
ba1a7a 227
C 228             List<String> nodeIdList = new ArrayList<>();
d43481 229             for (int i = 0; i < list.size(); i++) {
C 230                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
ba1a7a 231                 nodeIdList.add(result.getGatherAddress());
C 232             }
233
234             List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
235             if(CollUtil.isNotEmpty(nodeIdList)){
236                 readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
237             }
238
239             List<ParamCollection> paramCollectionlist = new ArrayList<>();
240             if (CollUtil.isNotEmpty(nodeIdList)){
241                 for(int i=0;i<nodeIdList.size();i++){
242                     if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
243                         CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
244
245                         String value = "0";
246                         if (readWriteEntityList.get(i).getValue() != null){
247                             value = readWriteEntityList.get(i).getValue().toString();
248                         }
249                         if(result.getParamName() != null && result.getParamName().contains("状态")){
250                             if("2".equals(value)){
251                                 value = "不合格";
252                             }else {
253                                 value = "合格";
254                             }
255                         }
256                         ParamCollection paramCollectionParam = new ParamCollection();
257                         paramCollectionParam.setParamCode(result.getParamCode());
258                         paramCollectionParam.setParamName(result.getParamName());
259                         paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
260                         paramCollectionParam.setSfcCode(S_SFC_CODE);
261                         paramCollectionParam.setProductCode(S_PRODUCT_CODE);
262                         paramCollectionParam.setProductionLine(result.getProductionLine());
263                         paramCollectionParam.setLocationCode(result.getLocationCode());
264                         paramCollectionParam.setParamValue(value.toString());
265                         paramCollectionParam.setParamLower(result.getParamLower());
266                         paramCollectionParam.setParamUpper(result.getParamUpper());
267                         paramCollectionParam.setParamStandard(result.getParamCentral());
268                         paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
269                         paramCollectionParam.setUnit(result.getUnit());
270                         paramCollectionParam.setSpareField2(PRODUCT_STATE);
271                         paramCollectionlist.add(paramCollectionParam);
272                     }
6dadf3 273                 }
ba1a7a 274                 paramCollectionService.saveBatch(paramCollectionlist);
d43481 275             }
C 276         }
277
278         logger.info("handleInfo END!");
279     }
280
281 }