cl
2024-02-23 73bc0656dc15cd9cc95c6f4f51949ef0437088ce
提交 | 用户 | 时间
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.model.params.LocationInfoParam;
9 import cn.stylefeng.guns.modular.bs.locationInfo.model.result.LocationInfoResult;
10 import cn.stylefeng.guns.modular.bs.locationInfo.service.LocationInfoService;
11 import cn.stylefeng.guns.modular.cm.paramCollection.model.params.ParamCollectionParam;
12 import cn.stylefeng.guns.modular.cm.paramCollection.service.ParamCollectionService;
13 import cn.stylefeng.guns.modular.cm.passingStationCollection.model.params.PassingStationCollectionParam;
14 import cn.stylefeng.guns.modular.cm.passingStationCollection.service.PassingStationCollectionService;
15 import cn.stylefeng.guns.modular.dq.materialTraceability.model.params.MaterialTraceabilityParam;
16 import cn.stylefeng.guns.modular.dq.materialTraceability.service.MaterialTraceabilityService;
17 import cn.stylefeng.guns.modular.em.equipmentAlarm.service.EquipmentAlarmService;
18 import cn.stylefeng.guns.modular.em.equipmentStatus.service.EquipmentStatusService;
19 import cn.stylefeng.guns.modular.gm.greaseManage.service.GreaseManageService;
20 import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.params.ProductionOrdeInfoParam;
21 import cn.stylefeng.guns.modular.om.productionOrdeInfo.model.result.ProductionOrdeInfoResult;
22 import cn.stylefeng.guns.modular.om.productionOrdeInfo.service.ProductionOrdeInfoService;
23 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.params.ProductionOrderBatchInfoParam;
24 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.model.result.ProductionOrderBatchInfoResult;
25 import cn.stylefeng.guns.modular.om.productionOrderBatchInfo.service.ProductionOrderBatchInfoService;
26 import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
27 import cn.stylefeng.guns.modular.sc.repairManageInfo.model.params.RepairManageInfoParam;
28 import cn.stylefeng.guns.modular.sc.repairManageInfo.model.result.RepairManageInfoResult;
29 import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
30 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
31 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
32 import cn.stylefeng.guns.plcserver.opc.OPCElement;
33 import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
34 import cn.stylefeng.guns.plcserver.tool.DateTool;
35 import cn.stylefeng.guns.plcserver.tool.LogUtil;
36 import com.kangaroohy.milo.model.ReadWriteEntity;
37 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
38 import com.kangaroohy.milo.service.MiloService;
39 import org.apache.log4j.Logger;
40 import org.springframework.beans.factory.annotation.Autowired;
41 import org.springframework.stereotype.Component;
42
43 import java.util.ArrayList;
44 import java.util.Date;
45 import java.util.List;
46 import java.util.Random;
47
48 @Component
73bc06 49 public class BOP010Callback {
d43481 50
C 51     public MiloService miloService;
52
53     @Autowired
54     public ProductionOrdeInfoService productionOrdeInfoService;
55     @Autowired
56     public PassingStationCollectionService passingStationCollectionService;
57     @Autowired
58     public ParamCollectionService paramCollectionService;
59     @Autowired
60     public CollectionParamConfService collectionParamConfService;
61     @Autowired
62     public SerialNumbersConfService serialNumbersConfService;
63     @Autowired
64     private EquipmentStatusService equipmentStatusService;
65
66     @Autowired
67     private EquipmentAlarmService equipmentAlarmService;
68     @Autowired
69     private MaterialTraceabilityService materialTraceabilityService;
70     @Autowired
71     private EquipmentInfoService equipmentInfoService;
72     @Autowired
73     private RepairManageInfoService repairManageInfoService;
74
75     @Autowired
76     private LocationInfoService locationInfoService;
77
78     @Autowired
79     private GreaseManageService greaseManageService;
80
81     @Autowired
82     private ProductionOrderRecordsService productionOrderRecordsService;
83
84     @Autowired
85     private ProductionOrderBatchInfoService productionOrderBatchInfoService;
86
87     private static Logger logger;
88     LogUtil logUtil = new LogUtil();
89     static {
90         logger = Logger.getLogger(BOP010Callback.class);
91     }
92     private static Date IN_TIME = null;
93     private static String S_ORDER_CODE = "";//工单编号
94     private static String S_PRODUCT_CODE = "";//产品编号
95     private static String S_PRODUCT_TYPE= "";//产品类型
96     private static String S_SFC_CODE = "";//总成编码
97     private static String PRODUCTION_LINE  = "BOP";//产线号
98     private static String LOCATION_CODE  = "BOP010";//工位号
99     private static List list = null;
100
101     public BOP010Callback(MiloService miloService,
102                           ProductionOrdeInfoService productionOrdeInfoService,
103                           PassingStationCollectionService passingStationCollectionService,
104                           ParamCollectionService paramCollectionService,
105                           CollectionParamConfService collectionParamConfService,
106                           SerialNumbersConfService serialNumbersConfService,
107                           EquipmentStatusService equipmentStatusService,
108                           EquipmentAlarmService equipmentAlarmService,
109                           MaterialTraceabilityService materialTraceabilityService,
110                           EquipmentInfoService equipmentInfoService,
111                           RepairManageInfoService repairManageInfoService,
112                           LocationInfoService locationInfoService,
113                           GreaseManageService greaseManageService,
114                           ProductionOrderRecordsService productionOrderRecordsService,
115                           ProductionOrderBatchInfoService productionOrderBatchInfoService) {
116         this.miloService = miloService;
117         this.productionOrdeInfoService = productionOrdeInfoService;
118         this.passingStationCollectionService = passingStationCollectionService;
119         this.paramCollectionService = paramCollectionService;
120         this.collectionParamConfService = collectionParamConfService;
121         this.serialNumbersConfService = serialNumbersConfService;
122         this.equipmentStatusService = equipmentStatusService;
123         this.equipmentAlarmService = equipmentAlarmService;
124         this.materialTraceabilityService = materialTraceabilityService;
125         this.equipmentInfoService = equipmentInfoService;
126         this.repairManageInfoService = repairManageInfoService;
127         this.locationInfoService = locationInfoService;
128         this.greaseManageService = greaseManageService;
129         this.productionOrderRecordsService = productionOrderRecordsService;
130         this.productionOrderBatchInfoService = productionOrderBatchInfoService;
131     }
73bc06 132
d43481 133
C 134     public void handleOrder() throws Exception{
135
136         IN_TIME = DateTool.getLocalTimeForDate();
137         ProductionOrdeInfoParam param = new ProductionOrdeInfoParam();
138         param.setProductionLine("");//产线
139         param.setOrderStatus("3");//工单状态
140         List<ProductionOrdeInfoResult> list = productionOrdeInfoService.findListBySpec(param);
141
142         if(list.size()>0) {
143             ProductionOrdeInfoResult result = list.get(0);
144
145             S_ORDER_CODE = result.getWorkOrderNo();
146             S_PRODUCT_CODE = result.getMaterialCode();
147             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
148
149             //自动生成唯一码
150             Random random = new Random(System.currentTimeMillis());
151             S_SFC_CODE = "BOP"+random.nextLong();
152
153             List<ReadWriteEntity> lists = new ArrayList<>();
154             lists.add(new ReadWriteEntity(OPCElement.BOP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 155             lists.add(new ReadWriteEntity(OPCElement.BOP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 156             lists.add(new ReadWriteEntity(OPCElement.BOP010_S_SFC_CODE,S_SFC_CODE));
314bc7 157             lists.add(new ReadWriteEntity(OPCElement.BOP010_S_NUMBER,Short.parseShort(result.getPlanQty().toString())));
d43481 158             lists.add(new ReadWriteEntity(OPCElement.BOP010_J_PC_WRITE_ORDER,true));
C 159             miloService.writeToOpcUa(lists);
160
161             logger.info("BOP010工位,handleOrder PC处理完成!2");
162         }else{
163             logger.info("BOP010工位没有可执行的工单,请联系工单管理员下发该产线的工单!");
164         }
165     }
166
167     public void handleFinsh() throws Exception {
168         logger.info("handleFinsh PC处理开始!");
169         String S_PRODUCT_STATE_CODE = miloService.
170                 readFromOpcUa(OPCElement.BOP010_S_PRODUCT_STATE_CODE)
171                 .getValue().toString();
73bc06 172         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.BOP010_J_PC_FINISH,true);
C 173         miloService.writeToOpcUa(entity);//写PC完成
d43481 174         //处理过站信息
C 175         PassingStationCollectionParam param = new PassingStationCollectionParam();
176         param.setWorkOrderNo(S_ORDER_CODE);
177         param.setProductCode(S_PRODUCT_CODE);
178         param.setSfcCode(S_SFC_CODE);
179         param.setProductionLine(PRODUCTION_LINE);
180         param.setLocationCode(LOCATION_CODE);
181         param.setInboundTime(IN_TIME);
182         param.setOutboundTime(DateTool.getLocalTimeForDate());
183         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
184         passingStationCollectionService.add(param);
185
73bc06 186
d43481 187         logger.info("handleFinsh PC处理完成!");
C 188     }
189
190     public void handleMaterial() {
191
192         //查询批次上料信息
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()) {
232             for (int i = 0; i < list.size(); i++) {
233                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
6dadf3 234                 Object value = miloService.
d43481 235                         readFromOpcUa(result.getGatherAddress())
6dadf3 236                         .getValue();//读参数值
C 237                 if(null != value) {
238                     ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
239                     paramCollectionParam.setParamCode(result.getParamCode());
240                     paramCollectionParam.setParamName(result.getParamName());
241                     paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
242                     paramCollectionParam.setSfcCode(S_SFC_CODE);
243                     paramCollectionParam.setProductCode(S_PRODUCT_CODE);
244                     paramCollectionParam.setProductionLine(result.getProductionLine());
245                     paramCollectionParam.setLocationCode(result.getLocationCode());
246                     paramCollectionParam.setParamValue(value.toString());
247                     paramCollectionParam.setParamLower(result.getParamLower());
248                     paramCollectionParam.setParamUpper(result.getParamUpper());
249                     paramCollectionParam.setParamStandard(result.getParamCentral());
250                     paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
251                     paramCollectionParam.setUnit(result.getUnit());
252                     paramCollectionService.add(paramCollectionParam);
253                 }
d43481 254             }
C 255         }
256
257         logger.info("handleInfo END!");
258     }
259     public void handleRepair() throws Exception{
260         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
261         repairManageInfoParam.setLocationCode(LOCATION_CODE);
262         repairManageInfoParam.setManageType("2");
263         repairManageInfoParam.setUpPlc("0");
264         List<RepairManageInfoResult> list = repairManageInfoService.findListBySpec(repairManageInfoParam);
265         if(list.size()>0) {
266             RepairManageInfoResult result = list.get(0);
267
268             //自动生成唯一码
269             Random random = new Random(System.currentTimeMillis());
270             S_SFC_CODE = "BOP" + random.nextLong();
271
272
273             S_ORDER_CODE = result.getWorkOrderNo();
274             S_PRODUCT_CODE = result.getProductCode();
275             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
276             String  repairLocation = result.getPoorLocationCode();//
277
278             //根据工位编码查询工位表中配置的返修工位号
279             LocationInfoParam param = new LocationInfoParam();
280             param.setLocationCode(repairLocation);
281             List<LocationInfoResult> results = locationInfoService.findListBySpec(param);
282             if(results.size()>0) {
283                 LocationInfoResult r = results.get(0);
284                 String repairLocationNo = r.getSpareField2();
285                 if(null != repairLocationNo && "" != repairLocationNo){
286                     List<ReadWriteEntity> lists = new ArrayList<>();
287                     lists.add(new ReadWriteEntity(OPCElement.BOP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 288                     lists.add(new ReadWriteEntity(OPCElement.BOP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 289                     lists.add(new ReadWriteEntity(OPCElement.BOP010_S_SFC_CODE,S_SFC_CODE));
C 290                     lists.add(new ReadWriteEntity(OPCElement.BOP010_P_REPAIR_LOCATION,repairLocationNo));
291                     lists.add(new ReadWriteEntity(OPCElement.BOP010_J_PC_WRITE_ORDER,true));
292                     miloService.writeToOpcUa(lists);
293                     //更新为已经返修上线
294                     Long id = result.getId();
295                     repairManageInfoParam.setId(id);
296                     repairManageInfoParam.setUpPlc("1");
297                     repairManageInfoService.update(repairManageInfoParam);
298
299                 }else{
300                     logger.info("BOP010工位,handleRepair 请查询"+repairLocation+"工位是否配置返修工位号!");
301                 }
302             }else{
303                 logger.info("BOP010工位,handleRepair 无法查询到"+repairLocation+"工位!");
304             }
305         }
306     }
307 }