From 5b544fc8d6029a71669b3992c5cfea9a044aaf3f Mon Sep 17 00:00:00 2001 From: cl <418351270@qq.com> Date: 星期四, 04 七月 2024 16:39:29 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java | 151 ++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 133 insertions(+), 18 deletions(-) diff --git a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java index ba6d43d..7bc63c6 100644 --- a/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java +++ b/jcdm-main/src/main/java/com/jcdm/main/plcserver/sub/OPCUaSubscription.java @@ -6,8 +6,10 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; +import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jcdm.common.core.domain.AjaxResult; import com.jcdm.framework.websocket.WebSocketUsers; import com.jcdm.main.constant.Constants; import com.jcdm.main.da.collectionParamConf.domain.DaCollectionParamConf; @@ -21,6 +23,7 @@ import com.jcdm.main.om.productionOrde.domain.OmProductionOrdeInfo; import com.jcdm.main.om.productionOrde.service.IOmProductionOrdeInfoService; import com.jcdm.main.plcserver.util.TimeUtil; +import com.jcdm.main.restful.factoryMes.service.RestfulService; import com.jcdm.main.restful.qingYan.doman.ChildVO; import com.jcdm.main.restful.qingYan.doman.ParentVO; import com.kangaroohy.milo.model.ReadWriteEntity; @@ -29,6 +32,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import org.springframework.web.bind.annotation.GetMapping; import javax.websocket.Session; import java.text.SimpleDateFormat; @@ -89,7 +93,7 @@ if (Constants.RECORD_CHECK_CODE.equals(tab)){//鐢佃姱鏍¢獙 if (Constants.ONE.equals(valueString)){ Integer scanResult = 11; - if (Constants.OP010.equals(device) || Constants.OP030.equals(device)){ + if (Constants.OP010.equals(device)){ //OP010宸ヤ綅鐢佃姱鏉$爜鏍¢獙||OP030宸ヤ綅鐢佃姱鏉$爜鏍¢獙 Object value1 = miloService.readFromOpcUa(thoroughfare + "." + device + ".Scaner").getValue(); if (ObjectUtil.isNotNull(value1)){ @@ -101,13 +105,29 @@ // scanResult = 11; // } } + }else if(Constants.OP030.equals(device)){ + Object value1 = miloService.readFromOpcUa(thoroughfare + "." + device + ".Scaner").getValue(); + if (ObjectUtil.isNotNull(value1)){ + String cellCode = value1.toString(); + //鍙嶉鐢佃姱ocv妫�娴嬬粨鏋� + boolean b = OCVResultFeedBack(thoroughfare, device,cellCode); + //鍥涗釜鐢佃姱鐨勭姸鎬� + if (b){ + scanResult = 11; + }else { + scanResult = 12; + } + }else { + scanResult = 12; + } + } miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".ScanerResult1").value(scanResult).build()); log.info("鍐欏叆鍒板伐浣峽}鐨凷canerResult1鏁版嵁锛歿}",device,scanResult); } }else if (Constants.RECORD_SN.equals(tab)){//姹備笅鍙戞ā缁勭爜璇�9 if (Constants.ONE.equals(valueString)){ - if (Constants.OP100_1.equals(device) || Constants.OP100_2.equals(device) ){ + /*if (Constants.OP100_1.equals(device) || Constants.OP100_2.equals(device) ){ //鏌ヨ瑕佺敓浜х殑宸ュ崟 List<OmProductionOrdeInfo> orderList = omProductionOrdeInfoService.list(new LambdaQueryWrapper<OmProductionOrdeInfo>() .eq(OmProductionOrdeInfo::getOrderStatus, Constants.ONE));//宸ュ崟鐘舵�� @@ -118,7 +138,7 @@ //涓嬪彂浜у搧妯$粍鐮� miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_ModuleCode").value(productNum).build()); miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_WorkOrderNumber").value(productNum).build()); - miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_ProductType").value(productNum).build()); + //miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_ProductType").value(productNum).build()); miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordSNDone").value(1).build()); //鏇存柊宸ュ崟鐘舵�佷负鎵ц涓� @@ -133,7 +153,9 @@ }else{ miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordSNDone").value(2).build());//娌℃湁瑕佺敓浜х殑宸ュ崟 } - } + }*/ + + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordSNDone").value(1).build());//娌℃湁瑕佺敓浜х殑宸ュ崟 } }else if (Constants.RECORD_DATA.equals(tab)){//鍑哄叆绔� if (Constants.ONE.equals(valueString)){//鍏ョ珯 @@ -149,7 +171,25 @@ miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build()); log.info("鍐欏叆鍒板伐浣峽}鐨凴ecordDataDone鏁版嵁锛歿}",device,12); } - } else { + } else if(Constants.OP100_1.equals(device) || Constants.OP100_2.equals(device)){ + //1銆佽繘绔橮LC缁欎骇鍝佺被鍨嬶紝MES璇诲彇浜у搧绫诲瀷 + ReadWriteEntity productTypeRead = miloService.readFromOpcUa(thoroughfare + "." + device + ".MES_ProductType");//浜у搧绫诲瀷 + if (ObjectUtil.isNotNull(productTypeRead.getValue())){ + String productType = productTypeRead.getValue().toString(); + + CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { + //璋冪敤宸ュ巶MES锛屼繚瀛樺埌鏁版嵁搴�,骞朵笖灏嗗伐鍗曚紶缁橮LC + receivingWorkOrders(thoroughfare, device); + }); + + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build()); + log.info("鍐欏叆鍒板伐浣峽}鐨凴ecordDataDone鏁版嵁锛歿}",device,11); + + }else{ + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(12).build()); + } + + }else { miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".RecordDataDone").value(11).build()); log.info("鍐欏叆鍒板伐浣峽}鐨凴ecordDataDone鏁版嵁锛歿}",device,11); } @@ -210,6 +250,44 @@ } + public void receivingWorkOrders(String thoroughfare ,String device) + { + String paramProductNum = ""; + try { + // 鏌ヨ鏈�鏂扮殑宸ュ崟淇℃伅 + OmProductionOrdeInfo lastOrder = omProductionOrdeInfoService.getLastOrder(); + String orderJsonString = RestfulService.getProductionWorkOrderRequest(lastOrder.getProductNum(), "OP230"); + JSONObject jsonObject = new JSONObject(orderJsonString); + // 浠嶫SONObject涓幏鍙杁ata瀵硅薄 + JSONObject dataObject = jsonObject.getJSONObject("data"); + String code = jsonObject.getStr("code"); + // 鍒ゆ柇鎺ュ崟鏄惁鎴愬姛 + if(code.equals("success")) { + log.info("璇锋眰宸ュ巶MES宸ュ崟锛氬叆鍙俻ack{}鍑哄弬pack锛歿}", paramProductNum, dataObject.getStr("productNum")); + OmProductionOrdeInfo omProductionOrdeInfo = new OmProductionOrdeInfo(); + omProductionOrdeInfo.setWorkOrderNo(dataObject.getStr("productionOrderNum")); + omProductionOrdeInfo.setProductNum(dataObject.getStr("productNum")); + omProductionOrdeInfo.setStationCode(dataObject.getStr("stationCode")); + omProductionOrdeInfo.setMaterialCode(dataObject.getStr("materialCode")); + omProductionOrdeInfo.setOnlineCompletionMark("0"); + omProductionOrdeInfo.setSfResult("0"); + omProductionOrdeInfo.setProductCode(dataObject.getStr("model")); + omProductionOrdeInfo.setCreateTime(new Date()); + omProductionOrdeInfo.setCreateUser("宸ュ巶MES"); + omProductionOrdeInfoService.save(omProductionOrdeInfo); + + //鍙戦�佺粰鍓嶅彴 + WebSocketUsers.sendMessageToUserByText(map.get(device), dataObject.getStr("productNum")); + + //鍐橮LC + miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_ModuleCode").value(dataObject.getStr("productNum")).build()); + miloService.writeToOpcUa(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".MES_WorkOrderNumber").value(dataObject.getStr("productionOrderNum")).build()); + + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } /** * 璇诲彇鐢佃姱鐮� @@ -446,8 +524,11 @@ */ private static Integer saveParamCollection(String thoroughfare, String device,List<String> cellCodeList){ Integer result = 21;//杩斿洖缁撴灉 - List<List<ChildVO>> mesList = new ArrayList<>();//瀛樺偍4涓數鑺殑鍙戦�佺粰MES鐨勫�� - + List<ChildVO> mesChildList1 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist1 + List<ChildVO> mesChildList2 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist2 + List<ChildVO> mesChildList3 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist3 + List<ChildVO> mesChildList4 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist4 + List<ChildVO> mesChildList0 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist4 try { //鏌ヨ鍙傛暟閰嶇疆琛� List<DaCollectionParamConf> list = collectionParamConfService.list(new LambdaQueryWrapper<DaCollectionParamConf>() @@ -484,7 +565,6 @@ //绗竴涓數鑺殑鏁版嵁 if (CollUtil.isNotEmpty(paramCollectionList1) && !cellCodeList.get(0).isEmpty()) { - List<ChildVO> mesChildList1 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist1 for (int i = 0; i < paramCollectionList1.size(); i++) { DaParamCollection daParamCollection = new DaParamCollection(); daParamCollection.setSfcCode(cellCodeList.get(0));//鐢佃姱鐮� @@ -509,10 +589,9 @@ childVO.setCheckTime(new Date().toString()); mesChildList1.add(childVO); } - mesList.add(0, mesChildList1); + } if (CollUtil.isNotEmpty(paramCollectionList2) && !cellCodeList.get(1).isEmpty()) { - List<ChildVO> mesChildList2 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist2 for (int i = 0; i < paramCollectionList2.size(); i++) { DaParamCollection daParamCollection = new DaParamCollection(); @@ -538,10 +617,8 @@ childVO.setCheckTime(new Date().toString()); mesChildList2.add(childVO); } - mesList.add(1, mesChildList2); } if (CollUtil.isNotEmpty(paramCollectionList3) && !cellCodeList.get(2).isEmpty()) { - List<ChildVO> mesChildList3 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist3 for (int i = 0; i < paramCollectionList3.size(); i++) { DaParamCollection daParamCollection = new DaParamCollection(); daParamCollection.setSfcCode(cellCodeList.get(2));//鐢佃姱鐮� @@ -566,10 +643,8 @@ childVO.setCheckTime(new Date().toString()); mesChildList3.add(childVO); } - mesList.add(2, mesChildList3); } if (CollUtil.isNotEmpty(paramCollectionList4)&& !cellCodeList.get(3).isEmpty()) { - List<ChildVO> mesChildList4 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist4 for (int i = 0; i < paramCollectionList4.size(); i++) { DaParamCollection daParamCollection = new DaParamCollection(); daParamCollection.setSfcCode(cellCodeList.get(3));//鐢佃姱鐮� @@ -594,14 +669,12 @@ childVO.setCheckTime(new Date().toString()); mesChildList4.add(childVO); } - mesList.add(3, mesChildList4); } //鍏叡鍙傛暟 if (CollUtil.isNotEmpty(paramCollectionList0)) { for (int i = 0; i < cellCodeList.size(); i++) {//寰幆4涓數鑺� if(!cellCodeList.get(i).isEmpty()){ - List<ChildVO> mesChildList0 = new ArrayList<>();//灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist0 for (int j = 0; j < paramCollectionList0.size(); j++) { DaParamCollection daParamCollection = new DaParamCollection(); daParamCollection.setSfcCode(cellCodeList.get(i));//鐢佃姱鐮� @@ -629,7 +702,6 @@ childVO.setCheckTime(new Date().toString()); mesChildList0.add(childVO); } - mesList.add(i, mesChildList0); } //mesList.get(i).addAll(mesChildList0); @@ -651,7 +723,24 @@ for (int i = 0; i < cellCodeList.size(); i++) {//寰幆4涓數鑺� if(!cellCodeList.get(i).isEmpty()){ parentVO.setProductNum(cellCodeList.get(i));//鐢佃姱鐮� - parentVO.setCheckList(mesList.get(i));//鍙傛暟 + //灏佽缁欏伐鍘侻ES鍙戦�佺殑childlist4 + List<ChildVO> mesChildList = new ArrayList<>(mesChildList0); + switch (i) { + case 0 : + mesChildList.addAll(mesChildList1); + break; + case 1 : + mesChildList.addAll(mesChildList2); + break; + case 2 : + mesChildList.addAll(mesChildList3); + break; + case 3 : + mesChildList.addAll(mesChildList4); + break; + + } + parentVO.setCheckList(mesChildList);//鍙傛暟 //CompletableFuture<Void> cp1 = CompletableFuture.runAsync(() -> { log.info("鎵ц宸ュ巶MES鏂规硶start锛屼紶鍏ユ暟鎹細{}",parentVO); HttpResponse execute = HttpRequest.post(orderLineUrl).body(JSONUtil.toJsonStr(parentVO)).execute(); @@ -661,6 +750,7 @@ }); } }catch (Exception e) { + log.error(e.getMessage()); throw new RuntimeException(e); } return result; @@ -670,6 +760,31 @@ * 030宸ヤ綅杩斿洖ocv娴嬭瘯缁撴灉 * @param thoroughfare * @param device + * @param cellCode + * @throws Exception + */ + private boolean OCVResultFeedBack(String thoroughfare, String device,String cellCode) throws Exception { + boolean flag = true; + + List<DaTestDeviceInterfaceTemp> list = daTestDeviceInterfaceTempService.list(new LambdaQueryWrapper<DaTestDeviceInterfaceTemp>() + .eq(DaTestDeviceInterfaceTemp::getStationCode, device) + .eq(DaTestDeviceInterfaceTemp::getProductNum,cellCode)); + if (CollUtil.isNotEmpty(list)){ + DaTestDeviceInterfaceTemp daTestDeviceInterfaceTemp = list.get(0); + if (Constants.ONE.equals(daTestDeviceInterfaceTemp.getTotalResult())){ + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(1).build()); + }else { + flag = false; + miloService.writeToOpcShort(ReadWriteEntity.builder().identifier(thoroughfare + "." + device + ".CellStatus_1").value(2).build()); + } + daTestDeviceInterfaceTempService.deleteDaTestDeviceInterfaceTempById(daTestDeviceInterfaceTemp.getId()); + } + return flag; + } + /** + * 030宸ヤ綅杩斿洖ocv娴嬭瘯缁撴灉 + * @param thoroughfare + * @param device * @throws Exception */ private boolean OCVResultFeedBack(String thoroughfare, String device) throws Exception { -- Gitblit v1.9.3