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 DOP010Callback {
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(DOP010Callback.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  = "DOP010";//工位号
99     private static List list = null;
100
101     public DOP010Callback(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     }
132
133     public void handleOrder() throws Exception{
134         IN_TIME = DateTool.getLocalTimeForDate();
135         ProductionOrdeInfoParam param = new ProductionOrdeInfoParam();
136         param.setProductionLine("");//产线
137         param.setOrderStatus("3");//工单状态
138         List<ProductionOrdeInfoResult> list = productionOrdeInfoService.findListBySpec(param);
139         if(list.size()>0) {
140             ProductionOrdeInfoResult result = list.get(0);
141             S_ORDER_CODE = result.getWorkOrderNo();
142             S_PRODUCT_CODE = result.getMaterialCode();
143             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
144
145             //自动生成唯一码
146             Random random = new Random(System.currentTimeMillis());
147             S_SFC_CODE = "EOP"+ random.nextLong();
148
149             List<ReadWriteEntity> lists = new ArrayList<>();
150             lists.add(new ReadWriteEntity(OPCElement.DOP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 151             lists.add(new ReadWriteEntity(OPCElement.DOP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 152             lists.add(new ReadWriteEntity(OPCElement.DOP010_S_SFC_CODE,S_SFC_CODE));
314bc7 153             lists.add(new ReadWriteEntity(OPCElement.DOP010_S_NUMBER,Short.parseShort(result.getPlanQty().toString())));
d43481 154             lists.add(new ReadWriteEntity(OPCElement.DOP010_J_PC_WRITE_ORDER,true));
C 155             miloService.writeToOpcUa(lists);
156             logger.info("DOP010工位,handleOrder PC处理完成!");
157         }else{
158             logger.info("DOP010工位没有可执行的工单,请联系工单管理员下发该产线的工单!");
159         }
160     }
161
162     public void handleFinsh() throws Exception {
163         logger.info("handleFinsh PC处理开始!");
164         String S_PRODUCT_STATE_CODE = miloService.
165                 readFromOpcUa(OPCElement.DOP010_S_PRODUCT_STATE_CODE)
166                 .getValue().toString();
73bc06 167         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.DOP010_J_PC_FINISH,true);
C 168         miloService.writeToOpcUa(entity);//写PC完成
d43481 169         //处理过站信息
C 170         PassingStationCollectionParam param = new PassingStationCollectionParam();
171         param.setWorkOrderNo(S_ORDER_CODE);
172         param.setProductCode(S_PRODUCT_CODE);
173         param.setSfcCode(S_SFC_CODE);
174         param.setProductionLine(PRODUCTION_LINE);
175         param.setLocationCode(LOCATION_CODE);
176         param.setInboundTime(IN_TIME);
177         param.setOutboundTime(DateTool.getLocalTimeForDate());
178         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
179         passingStationCollectionService.add(param);
180
73bc06 181
d43481 182         logger.info("handleFinsh PC处理完成!");
C 183     }
184
185     public void handleMaterial() {
186
187         //查询批次上料信息
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()) {
227             for (int i = 0; i < list.size(); i++) {
228                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
6dadf3 229                 Object value = miloService.
d43481 230                         readFromOpcUa(result.getGatherAddress())
6dadf3 231                         .getValue();//读参数值
C 232                 if(null != value) {
233                     ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
234                     paramCollectionParam.setParamCode(result.getParamCode());
235                     paramCollectionParam.setParamName(result.getParamName());
236                     paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
237                     paramCollectionParam.setSfcCode(S_SFC_CODE);
238                     paramCollectionParam.setProductCode(S_PRODUCT_CODE);
239                     paramCollectionParam.setProductionLine(result.getProductionLine());
240                     paramCollectionParam.setLocationCode(result.getLocationCode());
241                     paramCollectionParam.setParamValue(value.toString());
242                     paramCollectionParam.setParamLower(result.getParamLower());
243                     paramCollectionParam.setParamUpper(result.getParamUpper());
244                     paramCollectionParam.setParamStandard(result.getParamCentral());
245                     paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
246                     paramCollectionParam.setUnit(result.getUnit());
247                     paramCollectionService.add(paramCollectionParam);
248                 }
d43481 249             }
C 250         }
251
252         logger.info("handleInfo END!");
253     }
254     public void handleRepair() throws Exception{
255         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
256         repairManageInfoParam.setLocationCode(LOCATION_CODE);
257         repairManageInfoParam.setManageType("2");
258         repairManageInfoParam.setUpPlc("0");
259         List<RepairManageInfoResult> list = repairManageInfoService.findListBySpec(repairManageInfoParam);
260         if(list.size()>0) {
261             RepairManageInfoResult result = list.get(0);
262
263             //自动生成唯一码
264             Random random = new Random(System.currentTimeMillis());
265             S_SFC_CODE = "BOP" + random.nextLong();
266
267
268             S_ORDER_CODE = result.getWorkOrderNo();
269             S_PRODUCT_CODE = result.getProductCode();
270             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
271             String  repairLocation = result.getPoorLocationCode();//
272
273             //根据工位编码查询工位表中配置的返修工位号
274             LocationInfoParam param = new LocationInfoParam();
275             param.setLocationCode(repairLocation);
276             List<LocationInfoResult> results = locationInfoService.findListBySpec(param);
277             if(results.size()>0) {
278                 LocationInfoResult r = results.get(0);
279                 String repairLocationNo = r.getSpareField2();
280                 if(null != repairLocationNo && "" != repairLocationNo){
281                     List<ReadWriteEntity> lists = new ArrayList<>();
282                     lists.add(new ReadWriteEntity(OPCElement.DOP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 283                     lists.add(new ReadWriteEntity(OPCElement.DOP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 284                     lists.add(new ReadWriteEntity(OPCElement.DOP010_S_SFC_CODE,S_SFC_CODE));
C 285                     lists.add(new ReadWriteEntity(OPCElement.DOP010_P_REPAIR_LOCATION,repairLocationNo));
286                     lists.add(new ReadWriteEntity(OPCElement.DOP010_J_PC_WRITE_ORDER,true));
287                     miloService.writeToOpcUa(lists);
288                     //更新为已经返修上线
289                     Long id = result.getId();
290                     repairManageInfoParam.setId(id);
291                     repairManageInfoParam.setUpPlc("1");
292                     repairManageInfoService.update(repairManageInfoParam);
293
294                 }else{
295                     logger.info("DOP010工位,handleRepair 请查询"+repairLocation+"工位是否配置返修工位号!");
296                 }
297             }else{
298                 logger.info("DOP010工位,handleRepair 无法查询到"+repairLocation+"工位!");
299             }
300         }
301     }
302 }