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