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.model.params.ProductionOrderRecordsParam;
27 import cn.stylefeng.guns.modular.om.productionOrderRecords.model.result.ProductionOrderRecordsResult;
28 import cn.stylefeng.guns.modular.om.productionOrderRecords.service.ProductionOrderRecordsService;
29 import cn.stylefeng.guns.modular.sc.repairManageInfo.model.params.RepairManageInfoParam;
30 import cn.stylefeng.guns.modular.sc.repairManageInfo.model.result.RepairManageInfoResult;
31 import cn.stylefeng.guns.modular.sc.repairManageInfo.service.RepairManageInfoService;
32 import cn.stylefeng.guns.modular.sc.serialNumbersConf.model.params.SerialNumbersConfParam;
33 import cn.stylefeng.guns.modular.sc.serialNumbersConf.model.result.SerialNumbersConfResult;
34 import cn.stylefeng.guns.modular.sc.serialNumbersConf.service.SerialNumbersConfService;
35 import cn.stylefeng.guns.plcserver.opc.GlobalVariable;
36 import cn.stylefeng.guns.plcserver.opc.OPCElement;
37 import cn.stylefeng.guns.plcserver.opc.unit.OPCUnit;
38 import cn.stylefeng.guns.plcserver.opc.unit.SFCCodeTool;
39 import cn.stylefeng.guns.plcserver.tool.DateTool;
40 import cn.stylefeng.guns.plcserver.tool.LogUtil;
41 import com.kangaroohy.milo.model.ReadWriteEntity;
42 import com.kangaroohy.milo.runner.subscription.SubscriptionCallback;
43 import com.kangaroohy.milo.service.MiloService;
44 import org.apache.commons.lang3.StringUtils;
45 import org.apache.log4j.Logger;
46 import org.springframework.beans.factory.annotation.Autowired;
47 import org.springframework.stereotype.Component;
48
49 import java.util.*;
50
51 @Component
73bc06 52 public class COP010Callback  {
d43481 53
C 54     public MiloService miloService;
55
56     @Autowired
57     public ProductionOrdeInfoService productionOrdeInfoService;
58     @Autowired
59     public PassingStationCollectionService passingStationCollectionService;
60     @Autowired
61     public ParamCollectionService paramCollectionService;
62     @Autowired
63     public CollectionParamConfService collectionParamConfService;
64     @Autowired
65     public SerialNumbersConfService serialNumbersConfService;
66     @Autowired
67     private EquipmentStatusService equipmentStatusService;
68
69     @Autowired
70     private EquipmentAlarmService equipmentAlarmService;
71     @Autowired
72     private MaterialTraceabilityService materialTraceabilityService;
73     @Autowired
74     private EquipmentInfoService equipmentInfoService;
75     @Autowired
76     private RepairManageInfoService repairManageInfoService;
77
78     @Autowired
79     private LocationInfoService locationInfoService;
80
81     @Autowired
82     private GreaseManageService greaseManageService;
83
84     @Autowired
85     private ProductionOrderRecordsService productionOrderRecordsService;
86
87     @Autowired
88     private ProductionOrderBatchInfoService productionOrderBatchInfoService;
89
90     private static Logger logger;
91     LogUtil logUtil = new LogUtil();
92     static {
93         logger = Logger.getLogger(COP010Callback.class);
94     }
95     private static Date IN_TIME = null;
96     private static String S_ORDER_CODE = "";//工单编号
97     private static String S_PRODUCT_CODE = "";//产品编号
98     private static String S_PRODUCT_TYPE= "";//产品类型
99     private static String S_SFC_CODE = "";//总成编码
100     private static String PRODUCTION_LINE  = "COP";//产线号
101     private static String LOCATION_CODE  = "COP010";//工位号
102     private static List list = null;
103
104     public COP010Callback(MiloService miloService,
105                           ProductionOrdeInfoService productionOrdeInfoService,
106                           PassingStationCollectionService passingStationCollectionService,
107                           ParamCollectionService paramCollectionService,
108                           CollectionParamConfService collectionParamConfService,
109                           SerialNumbersConfService serialNumbersConfService,
110                           EquipmentStatusService equipmentStatusService,
111                           EquipmentAlarmService equipmentAlarmService,
112                           MaterialTraceabilityService materialTraceabilityService,
113                           EquipmentInfoService equipmentInfoService,
114                           RepairManageInfoService repairManageInfoService,
115                           LocationInfoService locationInfoService,
116                           GreaseManageService greaseManageService,
117                           ProductionOrderRecordsService productionOrderRecordsService,
118                           ProductionOrderBatchInfoService productionOrderBatchInfoService) {
119         this.miloService = miloService;
120         this.productionOrdeInfoService = productionOrdeInfoService;
121         this.passingStationCollectionService = passingStationCollectionService;
122         this.paramCollectionService = paramCollectionService;
123         this.collectionParamConfService = collectionParamConfService;
124         this.serialNumbersConfService = serialNumbersConfService;
125         this.equipmentStatusService = equipmentStatusService;
126         this.equipmentAlarmService = equipmentAlarmService;
127         this.materialTraceabilityService = materialTraceabilityService;
128         this.equipmentInfoService = equipmentInfoService;
129         this.repairManageInfoService = repairManageInfoService;
130         this.locationInfoService = locationInfoService;
131         this.greaseManageService = greaseManageService;
132         this.productionOrderRecordsService = productionOrderRecordsService;
133         this.productionOrderBatchInfoService = productionOrderBatchInfoService;
134     }
135
136     public void handleOrder() throws Exception{
137
138         IN_TIME = DateTool.getLocalTimeForDate();
139         ProductionOrdeInfoParam param = new ProductionOrdeInfoParam();
140         param.setProductionLine("");//产线
141         param.setOrderStatus("3");//工单状态
142         List<ProductionOrdeInfoResult> list = productionOrdeInfoService.findListBySpec(param);
143
144         if(list.size()>0) {
145             ProductionOrdeInfoResult result = list.get(0);
146
147             S_ORDER_CODE = result.getWorkOrderNo();
148             S_PRODUCT_CODE = result.getMaterialCode();
149             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
150
151             //自动生成唯一码
152             Random random = new Random(System.currentTimeMillis());
153             S_SFC_CODE = "COP"+random.nextLong();
154
155             List<ReadWriteEntity> lists = new ArrayList<>();
156             lists.add(new ReadWriteEntity(OPCElement.COP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 157             lists.add(new ReadWriteEntity(OPCElement.COP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 158             lists.add(new ReadWriteEntity(OPCElement.COP010_S_SFC_CODE,S_SFC_CODE));
314bc7 159             lists.add(new ReadWriteEntity(OPCElement.COP010_S_NUMBER,Short.parseShort(result.getPlanQty().toString())));
d43481 160             lists.add(new ReadWriteEntity(OPCElement.COP010_J_PC_WRITE_ORDER,true));
C 161             miloService.writeToOpcUa(lists);
162
163             logger.info("COP010工位,handleOrder PC处理完成!2");
164         }else{
165             logger.info("COP010工位没有可执行的工单,请联系工单管理员下发该产线的工单!");
166         }
167     }
168
169     public void handleFinsh() throws Exception {
170         logger.info("handleFinsh PC处理开始!");
171         String S_PRODUCT_STATE_CODE = miloService.
172                 readFromOpcUa(OPCElement.COP010_S_PRODUCT_STATE_CODE)
173                 .getValue().toString();
73bc06 174         ReadWriteEntity entity = new ReadWriteEntity(OPCElement.COP010_J_PC_FINISH,true);
C 175         miloService.writeToOpcUa(entity);//写PC完成
d43481 176         //处理过站信息
C 177         PassingStationCollectionParam param = new PassingStationCollectionParam();
178         param.setWorkOrderNo(S_ORDER_CODE);
179         param.setProductCode(S_PRODUCT_CODE);
180         param.setSfcCode(S_SFC_CODE);
181         param.setProductionLine(PRODUCTION_LINE);
182         param.setLocationCode(LOCATION_CODE);
183         param.setInboundTime(IN_TIME);
184         param.setOutboundTime(DateTool.getLocalTimeForDate());
185         param.setOutRsSign(S_PRODUCT_STATE_CODE);//出站是否合格
186         passingStationCollectionService.add(param);
187
73bc06 188
d43481 189         logger.info("handleFinsh PC处理完成!");
C 190     }
191
192     public void handleMaterial() {
193
194         //查询批次上料信息
195         ProductionOrderBatchInfoParam productionOrderBatchInfoParam = new ProductionOrderBatchInfoParam();
196         productionOrderBatchInfoParam.setWorkOrderNo(S_ORDER_CODE);
197         productionOrderBatchInfoParam.setLocationCode(LOCATION_CODE);
198         List<ProductionOrderBatchInfoResult> list = productionOrderBatchInfoService.findListBySpec(productionOrderBatchInfoParam);
199         for(int i=0;i<list.size();i++){
200             ProductionOrderBatchInfoResult productionOrderBatchInfoResult = list.get(i);
201             int remainingQuantity =  productionOrderBatchInfoResult.getResidueQuantity();//剩余数量
202             if(remainingQuantity>0 ){
203                 //新增物料追溯
204                 MaterialTraceabilityParam materialTraceabilityParam = new MaterialTraceabilityParam();
205                 materialTraceabilityParam.setWorkOrderNo(S_ORDER_CODE);
206                 materialTraceabilityParam.setProductCode(S_PRODUCT_CODE);
207                 materialTraceabilityParam.setProductNo(S_SFC_CODE);
208                 materialTraceabilityParam.setLineCode(PRODUCTION_LINE);
209                 materialTraceabilityParam.setLocationCode(LOCATION_CODE);
210                 materialTraceabilityParam.setAssemblyQty(1);
211                 materialTraceabilityParam.setAssemblyTime(DateTool.getLocalTimeForDate());
212                 materialTraceabilityParam.setMaterialCode(productionOrderBatchInfoResult.getMaterialCode());//物料编码
213                 materialTraceabilityParam.setMaterialBatchNo(productionOrderBatchInfoResult.getBatch());//物料批次
214
215                 materialTraceabilityService.add(materialTraceabilityParam);
216                 //更新剩余数量
217                 productionOrderBatchInfoParam.setId(productionOrderBatchInfoResult.getId());
218                 productionOrderBatchInfoParam.setResidueQuantity(remainingQuantity-1);//剩余数量
219                 productionOrderBatchInfoService.update(productionOrderBatchInfoParam);
220             }
221         }
222     }
223
224     //PC读参数信息
225     public void handleInfo() throws Exception {
226         logger.info("handleInfo START!");
227
228         if(null == list){
229             CollectionParamConfParam collectionParamConfParam = new CollectionParamConfParam();
230             collectionParamConfParam.setLocationCode(LOCATION_CODE);
231             list = collectionParamConfService.findListBySpec(collectionParamConfParam);
232         }
233         if(null != list && !list.isEmpty()) {
234             for (int i = 0; i < list.size(); i++) {
235                 CollectionParamConfResult result = (CollectionParamConfResult) list.get(i);
6dadf3 236                 Object value = miloService.
d43481 237                         readFromOpcUa(result.getGatherAddress())
6dadf3 238                         .getValue();//读参数值
C 239                 if(null != value) {
240                     ParamCollectionParam paramCollectionParam = new ParamCollectionParam();
241                     paramCollectionParam.setParamCode(result.getParamCode());
242                     paramCollectionParam.setParamName(result.getParamName());
243                     paramCollectionParam.setWorkOrderNo(S_ORDER_CODE);
244                     paramCollectionParam.setSfcCode(S_SFC_CODE);
245                     paramCollectionParam.setProductCode(S_PRODUCT_CODE);
246                     paramCollectionParam.setProductionLine(result.getProductionLine());
247                     paramCollectionParam.setLocationCode(result.getLocationCode());
248                     paramCollectionParam.setParamValue(value.toString());
249                     paramCollectionParam.setParamLower(result.getParamLower());
250                     paramCollectionParam.setParamUpper(result.getParamUpper());
251                     paramCollectionParam.setParamStandard(result.getParamCentral());
252                     paramCollectionParam.setCollectionTime(DateTool.getLocalTimeForDate());
253                     paramCollectionParam.setUnit(result.getUnit());
254                     paramCollectionService.add(paramCollectionParam);
255                 }
d43481 256             }
C 257         }
258
259         logger.info("handleInfo END!");
260     }
261     public void handleRepair() throws Exception{
262         RepairManageInfoParam repairManageInfoParam = new RepairManageInfoParam();
263         repairManageInfoParam.setLocationCode(LOCATION_CODE);
264         repairManageInfoParam.setManageType("2");
265         repairManageInfoParam.setUpPlc("0");
266         List<RepairManageInfoResult> list = repairManageInfoService.findListBySpec(repairManageInfoParam);
267         if(list.size()>0) {
268             RepairManageInfoResult result = list.get(0);
269
270             //自动生成唯一码
271             Random random = new Random(System.currentTimeMillis());
272             S_SFC_CODE = "COP" + random.nextLong();
273
274
275             S_ORDER_CODE = result.getWorkOrderNo();
276             S_PRODUCT_CODE = result.getProductCode();
277             S_PRODUCT_TYPE = GlobalVariable.PRODUCT_TYPE_MAP.get(S_PRODUCT_CODE);
278             String  repairLocation = result.getPoorLocationCode();//
279
280             //根据工位编码查询工位表中配置的返修工位号
281             LocationInfoParam param = new LocationInfoParam();
282             param.setLocationCode(repairLocation);
283             List<LocationInfoResult> results = locationInfoService.findListBySpec(param);
284             if(results.size()>0) {
285                 LocationInfoResult r = results.get(0);
286                 String repairLocationNo = r.getSpareField2();
287                 if(null != repairLocationNo && "" != repairLocationNo){
288                     List<ReadWriteEntity> lists = new ArrayList<>();
289                     lists.add(new ReadWriteEntity(OPCElement.COP010_S_ORDER_CODE,S_ORDER_CODE));
314bc7 290                     lists.add(new ReadWriteEntity(OPCElement.COP010_S_PRODUCT_CODE,Short.parseShort(S_PRODUCT_TYPE)));
d43481 291                     lists.add(new ReadWriteEntity(OPCElement.COP010_S_SFC_CODE,S_SFC_CODE));
C 292                     lists.add(new ReadWriteEntity(OPCElement.COP010_P_REPAIR_LOCATION,repairLocationNo));
293                     lists.add(new ReadWriteEntity(OPCElement.COP010_J_PC_WRITE_ORDER,true));
294                     miloService.writeToOpcUa(lists);
295                     //更新为已经返修上线
296                     Long id = result.getId();
297                     repairManageInfoParam.setId(id);
298                     repairManageInfoParam.setUpPlc("1");
299                     repairManageInfoService.update(repairManageInfoParam);
300
301                 }else{
302                     logger.info("COP010工位,handleRepair 请查询"+repairLocation+"工位是否配置返修工位号!");
303                 }
304             }else{
305                 logger.info("COP010工位,handleRepair 无法查询到"+repairLocation+"工位!");
306             }
307         }
308     }
309 }