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 import cn.stylefeng.guns.plcserver.tool.DateTool;
33 import cn.stylefeng.guns.plcserver.tool.LogUtil;
34 import com.kangaroohy.milo.model.ReadWriteEntity;
35 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
36 import com.kangaroohy.milo.service.MiloService;
37 import org.apache.log4j.Logger;
38 import org.springframework.beans.factory.annotation.Autowired;
39 import org.springframework.stereotype.Component;
40
41 import java.util.ArrayList;
42 import java.util.Date;
43 import java.util.List;
44
45 @Component
73bc06 46 public class COP020Callback {
d43481 47
C 48     public MiloService miloService;
49
50     @Autowired
51     public ProductionOrdeInfoService productionOrdeInfoService;
52     @Autowired
53     public PassingStationCollectionService passingStationCollectionService;
54     @Autowired
55     public ParamCollectionService paramCollectionService;
56     @Autowired
57     public CollectionParamConfService collectionParamConfService;
58     @Autowired
59     public SerialNumbersConfService serialNumbersConfService;
60     @Autowired
61     private EquipmentStatusService equipmentStatusService;
62
63     @Autowired
64     private EquipmentAlarmService equipmentAlarmService;
65     @Autowired
66     private MaterialTraceabilityService materialTraceabilityService;
67     @Autowired
68     private EquipmentInfoService equipmentInfoService;
69     @Autowired
70     private RepairManageInfoService repairManageInfoService;
71
72     @Autowired
73     private LocationInfoService locationInfoService;
74
75     @Autowired
76     private GreaseManageService greaseManageService;
77
78     @Autowired
79     private ProductionOrderRecordsService productionOrderRecordsService;
80
81     @Autowired
82     private ProductionOrderBatchInfoService productionOrderBatchInfoService;
83
84     private static Logger logger;
85     LogUtil logUtil = new LogUtil();
86     static {
87         logger = Logger.getLogger(COP020Callback.class);
88     }
89     private static Date IN_TIME = null;
90     private static String S_ORDER_CODE = "";//工单编号
91     private static String S_PRODUCT_CODE = "";//产品编号
92     private static String S_PRODUCT_TYPE= "";//产品类型
93     private static String S_SFC_CODE = "";//总成编码
94     private static String PRODUCTION_LINE  = "COP";//产线号
95     private static String LOCATION_CODE  = "COP020";//工位号
96     private static List list = null;
ba1a7a 97     private static String PRODUCT_STATE = "合格";
d43481 98     public COP020Callback(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     }
73bc06 129
d43481 130
C 131     //PC读工单
132     public void handleOrder() throws Exception {
133         logger.info("handleOrder PC处理开始!");
134         IN_TIME = DateTool.getLocalTimeForDate();
135         List<String> lists = new ArrayList<>();
136         lists.add(OPCElement.COP020_S_ORDER_CODE);
137         lists.add(OPCElement.COP020_S_PRODUCT_CODE);
138         lists.add(OPCElement.COP020_S_SFC_CODE);
139         List<ReadWriteEntity> returnLists= miloService.readFromOpcUa(lists);
140         returnLists.forEach(element->{
141             switch(element.getIdentifier()){
142                 case OPCElement.COP020_S_ORDER_CODE:
143                     S_ORDER_CODE = element.getValue().toString();
144                     break;
145                 case OPCElement.COP020_S_PRODUCT_CODE:
146                     S_PRODUCT_TYPE = element.getValue().toString();
147                     S_PRODUCT_CODE = GlobalVariable.PRODUCT_CODE_MAP.get(S_PRODUCT_TYPE);
148                     break;
149                 case OPCElement.COP020_S_SFC_CODE:
150                     S_SFC_CODE = element.getValue().toString();
151                     break;
152                 default:
153                     break;
154             }
155         });
156         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP020_J_PC_WRITE_ORDER,true);
157         miloService.writeToOpcUa(entity);
158         logger.info("handleOrder PC处理完成!");
159     }
160
161     public void handleFinsh() throws Exception {
162         logger.info("handleFinsh PC处理开始!");
163         String S_PRODUCT_STATE_CODE = miloService.
164                 readFromOpcUa(OPCElement.COP020_S_PRODUCT_STATE_CODE)
165                 .getValue().toString();
ba1a7a 166         if("2".equals(S_PRODUCT_STATE_CODE)){
C 167             PRODUCT_STATE = "不合格";
168         }
73bc06 169         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP020_J_PC_FINISH,true);
C 170         miloService.writeToOpcUa(entity);//写PC完成
d43481 171         //处理过站信息
C 172         PassingStationCollectionParam param = new PassingStationCollectionParam();
173         param.setWorkOrderNo(S_ORDER_CODE);
174         param.setProductCode(S_PRODUCT_CODE);
175         param.setSfcCode(S_SFC_CODE);
176         param.setProductionLine(PRODUCTION_LINE);
177         param.setLocationCode(LOCATION_CODE);
178         param.setInboundTime(IN_TIME);
179         param.setOutboundTime(DateTool.getLocalTimeForDate());
180         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
181         passingStationCollectionService.add(param);
182
73bc06 183
d43481 184         logger.info("handleFinsh PC处理完成!");
C 185     }
186
187     public void handleMaterial() {
ba1a7a 188         if(S_ORDER_CODE.isEmpty()){
C 189             return;
190         }
d43481 191         //查询批次上料信息
C 192         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
193         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
194         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
195         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
196         for(int i=0;i<list.size();i++){
197             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
198             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
199             if(remainingQuantity>0 ){
200                 //新增物料追溯
201                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
202                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
203                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
204                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
205                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
206                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
207                 materialTraceabilityParam.setAssemblyQty(1);
208                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
209                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
210                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
211
212                 materialTraceabilityService.add(materialTraceabilityParam);
213                 //更新剩余数量
214                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
215                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
216                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
217             }
218         }
219     }
220
221     //PC读参数信息
222     public void handleInfo() throws Exception {
223         logger.info("handleInfo START!");
224
225         if(null == list){
226             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
227             collectionParamConfParam.setLocationCode(LOCATION_CODE);
228             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
229         }
230         if(null != list && !list.isEmpty()) {
ba1a7a 231
C 232             List<String> nodeIdList = new ArrayList<>();
d43481 233             for (int i = 0; i < list.size(); i++) {
C 234                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
ba1a7a 235                 nodeIdList.add(result.getGatherAddress());
C 236             }
237
238             List<ReadWriteEntity> readWriteEntityList = new ArrayList<>();
239             if(CollUtil.isNotEmpty(nodeIdList)){
240                 readWriteEntityList = miloService.readFromOpcUa(nodeIdList);
241             }
242
243             List<ParamCollection> paramCollectionlist = new ArrayList<>();
244             if (CollUtil.isNotEmpty(nodeIdList)){
245                 for(int i=0;i<nodeIdList.size();i++){
246                     if(ObjectUtil.isNotEmpty(readWriteEntityList.get(i).getValue())){
247                         CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
248
249                         String value = "0";
250                         if (readWriteEntityList.get(i).getValue() != null){
251                             value = readWriteEntityList.get(i).getValue().toString();
252                         }
253                         if(result.getParamName() != null && result.getParamName().contains("状态")){
254                             if("2".equals(value)){
255                                 value = "不合格";
256                             }else {
257                                 value = "合格";
258                             }
259                         }
260                         ParamCollection paramCollectionParam = new ParamCollection();
261                         paramCollectionParam.setParamCode(result.getParamCode());
262                         paramCollectionParam.setParamName(result.getParamName());
263                         paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
264                         paramCollectionParam.setSfcCode(S_SFC_CODE);
265                         paramCollectionParam.setProductCode(S_PRODUCT_CODE);
266                         paramCollectionParam.setProductionLine(result.getProductionLine());
267                         paramCollectionParam.setLocationCode(result.getLocationCode());
268                         paramCollectionParam.setParamValue(value.toString());
269                         paramCollectionParam.setParamLower(result.getParamLower());
270                         paramCollectionParam.setParamUpper(result.getParamUpper());
271                         paramCollectionParam.setParamStandard(result.getParamCentral());
272                         paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
273                         paramCollectionParam.setUnit(result.getUnit());
274                         paramCollectionParam.setSpareField2(PRODUCT_STATE);
275                         paramCollectionlist.add(paramCollectionParam);
276                     }
6dadf3 277                 }
ba1a7a 278                 paramCollectionService.saveBatch(paramCollectionlist);
d43481 279             }
C 280         }
281
282         logger.info("handleInfo END!");
283     }
284 }