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