jeecg-module-dry/jeecg-module-dry-api/pom.xml
@@ -42,11 +42,11 @@ <!-- <artifactId>bcprov-jdk15on</artifactId>--> <!-- <version>1.70</version>--> <!-- </dependency>--> <dependency> <groupId>com.kangaroohy</groupId> <artifactId>milo-spring-boot-starter</artifactId> <version>3.0.4</version> </dependency> <!-- <dependency>--> <!-- <groupId>com.kangaroohy</groupId>--> <!-- <artifactId>milo-spring-boot-starter</artifactId>--> <!-- <version>3.0.4</version>--> <!-- </dependency>--> <dependency> <groupId>ai.djl.pytorch</groupId> <artifactId>pytorch-engine</artifactId> jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/api/JeecgSystemApi.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package org.jeecg.modules.dry.api; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.api.fallback.JeecgSystemFallback; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @FeignClient(value = "ichd-system", fallbackFactory = JeecgSystemFallback.class) @Component public interface JeecgSystemApi { @GetMapping(value = "/sys/dict/getDictText/{dictCode}/{key}") Result<String> getDictText(@PathVariable("dictCode") String dictCode, @PathVariable("key") String key); } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/api/fallback/JeecgSystemFallback.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,25 @@ package org.jeecg.modules.dry.api.fallback; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.dry.api.DryHelloApi; import org.jeecg.modules.dry.api.JeecgSystemApi; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; /** * @author JeecgBoot */ @Slf4j @Component public class JeecgSystemFallback implements FallbackFactory<JeecgSystemApi> { @Setter private Throwable cause; @Override public JeecgSystemApi create(Throwable throwable) { log.error("å¾®æå¡æ¥å£è°ç¨å¤±è´¥ï¼ {}", cause); return null; } } jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/common/OPCUA.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,273 @@ //package org.jeecg.modules.dry.common; // //import lombok.extern.slf4j.Slf4j; //import org.eclipse.milo.opcua.sdk.client.OpcUaClient; //import org.eclipse.milo.opcua.sdk.client.api.identity.AnonymousProvider; //import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscription; //import org.eclipse.milo.opcua.sdk.client.api.subscriptions.UaSubscriptionManager; //import org.eclipse.milo.opcua.sdk.client.nodes.UaNode; //import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedDataItem; //import org.eclipse.milo.opcua.sdk.client.subscriptions.ManagedSubscription; //import org.eclipse.milo.opcua.stack.core.AttributeId; //import org.eclipse.milo.opcua.stack.core.Identifiers; //import org.eclipse.milo.opcua.stack.core.UaException; //import org.eclipse.milo.opcua.stack.core.security.SecurityPolicy; //import org.eclipse.milo.opcua.stack.core.types.builtin.*; //import org.eclipse.milo.opcua.stack.core.types.builtin.unsigned.UInteger; //import org.eclipse.milo.opcua.stack.core.types.enumerated.MonitoringMode; //import org.eclipse.milo.opcua.stack.core.types.enumerated.TimestampsToReturn; //import org.eclipse.milo.opcua.stack.core.types.structured.MonitoredItemCreateRequest; //import org.eclipse.milo.opcua.stack.core.types.structured.MonitoringParameters; //import org.eclipse.milo.opcua.stack.core.types.structured.ReadValueId; // //import java.nio.file.Files; //import java.nio.file.Path; //import java.nio.file.Paths; //import java.util.ArrayList; //import java.util.List; //import java.util.Objects; //import java.util.concurrent.CountDownLatch; //import java.util.concurrent.atomic.AtomicInteger; // // //@Slf4j //public class OPCUA { // // private static AtomicInteger atomic = new AtomicInteger(1); // // å®ä¹æå¡ç«¯å°å // private final static String endPointUrl = "opc.tcp://127.0.0.1:49320"; // // // /** // * å建OPC UA客æ·ç«¯ // * @return // * @throws Exception // */ // public static OpcUaClient createClient() throws Exception { // // Path securityTempDir = Paths.get(System.getProperty("java.io.tmpdir"), "security"); // Files.createDirectories(securityTempDir); // if (!Files.exists(securityTempDir)) { // throw new Exception("unable to create security dir: " + securityTempDir); // } // return OpcUaClient.create(endPointUrl, // endpoints -> // endpoints.stream() // .filter(e -> e.getSecurityPolicyUri().equals(SecurityPolicy.None.getUri())) // .findFirst(), // configBuilder -> // configBuilder // .setApplicationName(LocalizedText.english("eclipse milo opc-ua client")) // .setApplicationUri("urn:eclipse:milo:examples:client") // //è®¿é®æ¹å¼ // .setIdentityProvider(new AnonymousProvider()) // .setRequestTimeout(UInteger.valueOf(5000)) // .build() // ); // } // // /** // * éåæ å½¢èç¹ // * // * @param client OPC UA客æ·ç«¯ // * @param uaNode èç¹ // * @throws Exception // */ // public static void browseNode(OpcUaClient client, UaNode uaNode) throws Exception { // List<? extends UaNode> nodes; // if (uaNode == null) { // nodes = client.getAddressSpace().browseNodes(Identifiers.ObjectsFolder); // } else { // nodes = client.getAddressSpace().browseNodes(uaNode); // } // for (UaNode nd : nodes) { // //æé¤ç³»ç»è¡æ§èç¹ï¼è¿äºç³»ç»æ§èç¹åç§°ä¸è¬é½æ¯ä»¥"_"å¼å¤´ // if (Objects.requireNonNull(nd.getBrowseName().getName()).contains("_")) { // continue; // } // System.out.println("Node= " + nd.getBrowseName().getName()); // browseNode(client, nd); // } // } // // // /** // * 读åèç¹æ°æ® // * // * @param client OPC UA客æ·ç«¯ // * @throws Exception // */ // public static void readNode(OpcUaClient client) throws Exception { // int namespaceIndex = 2; // String identifier = "TD-01.SB-01.AG-01"; // //èç¹ // NodeId nodeId = new NodeId(namespaceIndex, identifier); // //读åèç¹æ°æ® // DataValue value = client.readValue(0.0, TimestampsToReturn.Neither, nodeId).get(); // // System.out.println(identifier + ": " + String.valueOf(value.getValue().getValue())); // } // // // /** // * åå ¥èç¹æ°æ® // * // * @param client // * @throws Exception // */ // public static void writeNodeValue(OpcUaClient client) throws Exception { // //èç¹ // NodeId nodeId = new NodeId(2, "TD-01.SB-01.AG-01"); // short i = 3; // //åå»ºæ°æ®å¯¹è±¡,æ¤å¤çæ°æ®å¯¹è±¡ä¸å®è¦å®ä¹ç±»åï¼ä¸ç¶ä¼åºç°ç±»åé误ï¼å¯¼è´æ æ³åå ¥ // DataValue nowValue = new DataValue(new Variant(i), null, null); // //åå ¥èç¹æ°æ® // StatusCode statusCode = client.writeValue(nodeId, nowValue).join(); // System.out.println("ç»æï¼" + statusCode.isGood()); // } // // // /** // * 订é (å个) // * // * @param client // * @throws Exception // */ // public static void subscribe(OpcUaClient client) throws Exception { // //å建åå¸é´é1000msç订é 对象 // client // .getSubscriptionManager() // .createSubscription(1000.0) // .thenAccept(t -> { // //èç¹ // NodeId nodeId = new NodeId(2, "TD-01.SB-01.AG-01"); // ReadValueId readValueId = new ReadValueId(nodeId, AttributeId.Value.uid(), null, null); // //åå»ºçæ§çåæ° // MonitoringParameters parameters = new MonitoringParameters(UInteger.valueOf(atomic.getAndIncrement()), 1000.0, null, UInteger.valueOf(10), true); // //åå»ºçæ§é¡¹è¯·æ± // //è¯¥è¯·æ±æåç¨äºå建订é ã // MonitoredItemCreateRequest request = new MonitoredItemCreateRequest(readValueId, MonitoringMode.Reporting, parameters); // List<MonitoredItemCreateRequest> requests = new ArrayList<>(); // requests.add(request); // //åå»ºçæ§é¡¹ï¼å¹¶ä¸æ³¨ååé弿¹åæ¶åçåè°å½æ°ã // t.createMonitoredItems( // TimestampsToReturn.Both, // requests, // (item, id) -> item.setValueConsumer((it, val) -> { // System.out.println("nodeid :" + it.getReadValueId().getNodeId()); // System.out.println("value :" + val.getValue().getValue()); // }) // ); // }).get(); // // //æç»è®¢é // Thread.sleep(Long.MAX_VALUE); // } // // // /** // * æ¹é订é // * // * @param client // * @throws Exception // */ //// private static void managedSubscriptionEvent(OpcUaClient client) throws Exception { //// final CountDownLatch eventLatch = new CountDownLatch(1); //// //// //å¤ç订é ä¸å¡ //// handlerNode(client); //// //// //æç»çå¬ //// eventLatch.await(); //// } // // /** // * å¤ç订é ä¸å¡ // * // * @param client OPC UA客æ·ç«¯ // */ // public static void handlerNode(OpcUaClient client) { // try { // //å建订é // ManagedSubscription subscription = ManagedSubscription.create(client); // // //ä½ æéè¦è®¢é çkey // List<String> key = new ArrayList<>(); // key.add("éé 1.è®¾å¤ 1.æ è®° 1"); // key.add("éé 1.è®¾å¤ 1.æ è®° 2"); // // List<NodeId> nodeIdList = new ArrayList<>(); // for (String s : key) { // nodeIdList.add(new NodeId(2, s)); // } // // //çå¬ // List<ManagedDataItem> dataItemList = subscription.createDataItems(nodeIdList); // for (ManagedDataItem managedDataItem : dataItemList) { // managedDataItem.addDataValueListener((t) -> { // System.out.println(managedDataItem.getNodeId().getIdentifier().toString() + ":" + t.getValue().getValue().toString()); // }); // } // } catch (Exception e) { // e.printStackTrace(); // } // } // // /** // * èªå®ä¹è®¢é çå¬ // */ // public static class CustomSubscriptionListener implements UaSubscriptionManager.SubscriptionListener { // // private OpcUaClient client; // // CustomSubscriptionListener(OpcUaClient client) { // this.client = client; // } // // public void onKeepAlive(UaSubscription subscription, DateTime publishTime) { // log.debug("onKeepAlive"); // } // // public void onStatusChanged(UaSubscription subscription, StatusCode status) { // log.debug("onStatusChanged"); // } // // public void onPublishFailure(UaException exception) { // log.debug("onPublishFailure"); // } // // public void onNotificationDataLost(UaSubscription subscription) { // log.debug("onNotificationDataLost"); // } // // /** // * éè¿æ¶ å°è¯æ¢å¤ä¹åç订é å¤±è´¥æ¶ ä¼è°ç¨æ¤æ¹æ³ // * @param uaSubscription 订é // * @param statusCode ç¶æ // */ // public void onSubscriptionTransferFailed(UaSubscription uaSubscription, StatusCode statusCode) { // log.debug("æ¢å¤è®¢é 失败 éè¦éæ°è®¢é "); // //å¨åè°æ¹æ³ä¸éæ°è®¢é // handlerNode(client); // } // } // // /** // * æ¹é订é // * // * @param client // * @throws Exception // */ // public static void managedSubscriptionEvent(OpcUaClient client) throws Exception { // final CountDownLatch eventLatch = new CountDownLatch(1); // // //æ·»å 订é çå¬å¨ï¼ç¨äºå¤çæçº¿éè¿åç订é é®é¢ // client.getSubscriptionManager().addSubscriptionListener(new CustomSubscriptionListener(client)); // // //å¤ç订é ä¸å¡ // handlerNode(client); // // //æç»çå¬ // eventLatch.await(); // } //} jeecg-module-dry/jeecg-module-dry-api/src/main/java/org/jeecg/modules/dry/util/HerbUtil.java
@@ -1,170 +1,170 @@ package org.jeecg.modules.dry.util; import ai.djl.Device; import ai.djl.Model; import ai.djl.inference.Predictor; import ai.djl.modality.Classifications; import ai.djl.modality.cv.Image; import ai.djl.modality.cv.ImageFactory; import ai.djl.modality.cv.transform.*; import ai.djl.modality.cv.translator.ImageClassificationTranslator; import ai.djl.translate.Translator; import lombok.extern.slf4j.Slf4j; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.stereotype.Component; import javax.imageio.ImageIO; import javax.imageio.stream.ImageOutputStream; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.util.ArrayList; import java.util.List; @Slf4j @Component public class HerbUtil { //è§å®è¾å ¥å°ºå¯¸ private static final int INPUT_SIZE = 224; private static final int TARGET_SIZE = 256; //æ ç¾æä»¶ ä¸ç§ç±»å«ååå ä¸è¡ private List<String> herbNames; //ç¨äºè¯å« Predictor<Image, Classifications> predictor; //模å private Model model; public HerbUtil() { //å è½½æ ç¾å°herbNamesä¸ this.loadHerbNames(); //åå§å模åå·¥ä½ this.init(); } public List<Classifications.Classification> predict(InputStream inputStream) { List<Classifications.Classification> result = new ArrayList<>(); Image input = this.resizeImage(inputStream); try { Classifications output = predictor.predict(input); System.out.println("æ¨æµä¸ºï¼" + output.best().getClassName() + ", æ¦çï¼" + output.best().getProbability()); System.out.println(output); result = output.topK(); } catch (Exception e) { log.error("è¯æè¯å«å¼å¸¸ï¼ï¼"); log.error(input.toString()); log.error(predictor.toString()); e.printStackTrace(); } return result; } private void loadHerbNames() { BufferedReader reader = null; herbNames = new ArrayList<>(); try { InputStream in = HerbUtil.class.getClassLoader().getResourceAsStream("class.txt"); reader = new BufferedReader(new InputStreamReader(in)); String name = null; while ((name = reader.readLine()) != null) { herbNames.add(name); } System.out.println(herbNames); } catch (Exception e) { e.printStackTrace(); } finally { if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } private void init() { Translator<Image, Classifications> translator = ImageClassificationTranslator.builder() //ä¸é¢çtransformæ ¹æ®èªå·±çæ¹ .addTransform(new CenterCrop(INPUT_SIZE,INPUT_SIZE)) .addTransform(new ToTensor()) .addTransform(new Normalize( new float[] {0.485f, 0.456f, 0.406f}, new float[] {0.229f, 0.224f, 0.225f})) //è½½å ¥æææ ç¾è¿å» .optSynset(herbNames) //æç»æ¾ç¤ºæ¦çæé«ç5个 .optTopK(5) .build(); //é便起å Model model = Model.newInstance("model", Device.cpu()); try { // ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); // Resource[] resources = resolver.getResources("../pytorch/model34.pt"); // Resource resource = resources[0]; File f = new File("../pytorch/model34.pt"); InputStream inputStream = new FileInputStream(f); // InputStream inputStream = HerbUtil.class.getClassLoader().getResourceAsStream("model34.pt"); if (inputStream == null) { throw new RuntimeException("æ¾ä¸å°æ¨¡åæä»¶"); } model.load(inputStream); predictor = model.newPredictor(translator); } catch (Exception e) { e.printStackTrace(); } } private Image resizeImage(InputStream inputStream) { BufferedImage input = null; try { input = ImageIO.read(inputStream); } catch (IOException e) { e.printStackTrace(); } int iw = input.getWidth(), ih = input.getHeight(); int w = 256, h = 256; double scale = Math.max(1. * w / iw, 1. * h / ih); int nw = (int) (iw * scale), nh = (int) (ih * scale); java.awt.Image img; //åªæå¤ªé¿æå¤ªå®½æä¼ä¿ç横纵æ¯ï¼å¡«å é¢è² // boolean needResize = 1. * iw / ih > 1.4 || 1. * ih / iw > 1.4; // if (needResize) { img = input.getScaledInstance(nw, nh, BufferedImage.SCALE_SMOOTH); // } else { // img = input.getScaledInstance(INPUT_SIZE, INPUT_SIZE, BufferedImage.SCALE_SMOOTH); //package org.jeecg.modules.dry.util; // //import ai.djl.Device; //import ai.djl.Model; //import ai.djl.inference.Predictor; //import ai.djl.modality.Classifications; //import ai.djl.modality.cv.Image; //import ai.djl.modality.cv.ImageFactory; //import ai.djl.modality.cv.transform.*; //import ai.djl.modality.cv.translator.ImageClassificationTranslator; //import ai.djl.translate.Translator; //import lombok.extern.slf4j.Slf4j; //import org.springframework.core.io.Resource; //import org.springframework.core.io.support.PathMatchingResourcePatternResolver; //import org.springframework.core.io.support.ResourcePatternResolver; //import org.springframework.stereotype.Component; // //import javax.imageio.ImageIO; //import javax.imageio.stream.ImageOutputStream; //import java.awt.*; //import java.awt.image.BufferedImage; //import java.io.*; //import java.util.ArrayList; //import java.util.List; // //@Slf4j //@Component //public class HerbUtil { // // //è§å®è¾å ¥å°ºå¯¸ // private static final int INPUT_SIZE = 224; // // private static final int TARGET_SIZE = 256; // // //æ ç¾æä»¶ ä¸ç§ç±»å«ååå ä¸è¡ // private List<String> herbNames; // // //ç¨äºè¯å« // Predictor<Image, Classifications> predictor; // // //模å // private Model model; // // public HerbUtil() { // //å è½½æ ç¾å°herbNamesä¸ // this.loadHerbNames(); // //åå§å模åå·¥ä½ // this.init(); // // // // } BufferedImage out = new BufferedImage(nw, nh, BufferedImage.TYPE_INT_RGB); Graphics g = out.getGraphics(); //å å°æ´ä¸ª224*224åºåå¡«å 128 128 128é¢è² g.setColor(new Color(255, 255, 255)); g.fillRect(0, 0, nw, nh); out.getGraphics().drawImage(img, 0, 0, null); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream); ImageIO.write(out, "jpg", imageOutputStream); //å»Dççææ ImageIO.write(out, "jpg", new File("E:\\out.jpg")); InputStream is = new ByteArrayInputStream(outputStream.toByteArray()); return ImageFactory.getInstance().fromInputStream(is); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("å¾ç转æ¢å¤±è´¥"); } } } // // public List<Classifications.Classification> predict(InputStream inputStream) { // List<Classifications.Classification> result = new ArrayList<>(); // Image input = this.resizeImage(inputStream); // try { // Classifications output = predictor.predict(input); // System.out.println("æ¨æµä¸ºï¼" + output.best().getClassName() // + ", æ¦çï¼" + output.best().getProbability()); // System.out.println(output); // result = output.topK(); // } catch (Exception e) { // log.error("è¯æè¯å«å¼å¸¸ï¼ï¼"); // log.error(input.toString()); // log.error(predictor.toString()); // e.printStackTrace(); // } // return result; // } // // private void loadHerbNames() { // BufferedReader reader = null; // herbNames = new ArrayList<>(); // try { // InputStream in = HerbUtil.class.getClassLoader().getResourceAsStream("class.txt"); // reader = new BufferedReader(new InputStreamReader(in)); // String name = null; // while ((name = reader.readLine()) != null) { // herbNames.add(name); // } // System.out.println(herbNames); // } catch (Exception e) { // e.printStackTrace(); // } finally { // if (reader != null) { // try { // reader.close(); // } catch (IOException e) { // e.printStackTrace(); // } // } // } // } // // private void init() { // Translator<Image, Classifications> translator = ImageClassificationTranslator.builder() // //ä¸é¢çtransformæ ¹æ®èªå·±çæ¹ // .addTransform(new CenterCrop(INPUT_SIZE,INPUT_SIZE)) // // .addTransform(new ToTensor()) // .addTransform(new Normalize( // new float[] {0.485f, 0.456f, 0.406f}, // new float[] {0.229f, 0.224f, 0.225f})) // // //è½½å ¥æææ ç¾è¿å» // .optSynset(herbNames) // //æç»æ¾ç¤ºæ¦çæé«ç5个 // .optTopK(5) // .build(); // //é便起å // Model model = Model.newInstance("model", Device.cpu()); // try { //// ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); //// Resource[] resources = resolver.getResources("../pytorch/model34.pt"); // // Resource resource = resources[0]; // File f = new File("../pytorch/model34.pt"); // // InputStream inputStream = new FileInputStream(f); // // InputStream inputStream = HerbUtil.class.getClassLoader().getResourceAsStream("model34.pt"); // if (inputStream == null) { // throw new RuntimeException("æ¾ä¸å°æ¨¡åæä»¶"); // } // model.load(inputStream); // // predictor = model.newPredictor(translator); // } catch (Exception e) { // e.printStackTrace(); // } // } // // private Image resizeImage(InputStream inputStream) { // BufferedImage input = null; // try { // input = ImageIO.read(inputStream); // } catch (IOException e) { // e.printStackTrace(); // } // int iw = input.getWidth(), ih = input.getHeight(); // int w = 256, h = 256; // double scale = Math.max(1. * w / iw, 1. * h / ih); // int nw = (int) (iw * scale), nh = (int) (ih * scale); // java.awt.Image img; // //åªæå¤ªé¿æå¤ªå®½æä¼ä¿ç横纵æ¯ï¼å¡«å é¢è² // // boolean needResize = 1. * iw / ih > 1.4 || 1. * ih / iw > 1.4; // // if (needResize) { // img = input.getScaledInstance(nw, nh, BufferedImage.SCALE_SMOOTH); // // } else { // // img = input.getScaledInstance(INPUT_SIZE, INPUT_SIZE, BufferedImage.SCALE_SMOOTH); // // } // BufferedImage out = new BufferedImage(nw, nh, BufferedImage.TYPE_INT_RGB); // Graphics g = out.getGraphics(); // //å å°æ´ä¸ª224*224åºåå¡«å 128 128 128é¢è² // g.setColor(new Color(255, 255, 255)); // g.fillRect(0, 0, nw, nh); // out.getGraphics().drawImage(img, 0, 0, null); // ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // try { // ImageOutputStream imageOutputStream = ImageIO.createImageOutputStream(outputStream); // ImageIO.write(out, "jpg", imageOutputStream); // //å»Dççææ // ImageIO.write(out, "jpg", new File("E:\\out.jpg")); // InputStream is = new ByteArrayInputStream(outputStream.toByteArray()); // return ImageFactory.getInstance().fromInputStream(is); // } catch (IOException e) { // e.printStackTrace(); // throw new RuntimeException("å¾ç转æ¢å¤±è´¥"); // } // } //} jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryOpcDeviceController.java
@@ -1,205 +1,205 @@ package org.jeecg.modules.dry.controller; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.common.util.oConvertUtils; import org.jeecg.modules.dry.entity.DryOpcDevice; import org.jeecg.modules.dry.service.IDryOpcDeviceService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.extern.slf4j.Slf4j; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.jeecg.common.aspect.annotation.AutoLog; import org.apache.shiro.authz.annotation.RequiresPermissions; /** * @Description: dry_opc_device * @Author: jeecg-boot * @Date: 2023-11-28 * @Version: V1.0 */ @Api(tags="dry_opc_device") @RestController @RequestMapping("/dry/dryOpcDevice") @Slf4j public class DryOpcDeviceController extends JeecgController<DryOpcDevice, IDryOpcDeviceService> { @Autowired private IDryOpcDeviceService dryOpcDeviceService; @Autowired private MiloService miloService; /** * å页å表æ¥è¯¢ * * @param dryOpcDevice * @param pageNo * @param pageSize * @param req * @return */ //@AutoLog(value = "dry_opc_device-å页å表æ¥è¯¢") @ApiOperation(value="dry_opc_device-å页å表æ¥è¯¢", notes="dry_opc_device-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<IPage<DryOpcDevice>> queryPageList(DryOpcDevice dryOpcDevice, @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, HttpServletRequest req) { QueryWrapper<DryOpcDevice> queryWrapper = QueryGenerator.initQueryWrapper(dryOpcDevice, req.getParameterMap()); Page<DryOpcDevice> page = new Page<DryOpcDevice>(pageNo, pageSize); IPage<DryOpcDevice> pageList = dryOpcDeviceService.page(page, queryWrapper); return Result.OK(pageList); } @GetMapping(value = "/listAll") public Result<List<DryOpcDevice>> queryList(DryOpcDevice dryOpcDevice, HttpServletRequest req) { QueryWrapper<DryOpcDevice> queryWrapper = QueryGenerator.initQueryWrapper(dryOpcDevice, req.getParameterMap()); queryWrapper.orderByAsc("sort_order"); List<DryOpcDevice> list = dryOpcDeviceService.list(queryWrapper); list.forEach(item -> { try { ReadWriteEntity readWriteEntity = miloService.readFromOpcUa(item.getIdentifier()); item.setValue((Boolean) readWriteEntity.getValue()); } catch (Exception e) { throw new RuntimeException(e); } }); return Result.OK(list); } /** * æ·»å * * @param dryOpcDevice * @return */ @AutoLog(value = "dry_opc_device-æ·»å ") @ApiOperation(value="dry_opc_device-æ·»å ", notes="dry_opc_device-æ·»å ") @RequiresPermissions("dry:dry_opc_device:add") @PostMapping(value = "/add") public Result<String> add(@RequestBody DryOpcDevice dryOpcDevice) { dryOpcDeviceService.save(dryOpcDevice); return Result.OK("æ·»å æåï¼"); } /** * ç¼è¾ * * @param dryOpcDevice * @return */ @AutoLog(value = "dry_opc_device-ç¼è¾") @ApiOperation(value="dry_opc_device-ç¼è¾", notes="dry_opc_device-ç¼è¾") @RequiresPermissions("dry:dry_opc_device:edit") @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) public Result<String> edit(@RequestBody DryOpcDevice dryOpcDevice) { dryOpcDeviceService.updateById(dryOpcDevice); return Result.OK("ç¼è¾æå!"); } /** * éè¿idå é¤ * * @param id * @return */ @AutoLog(value = "dry_opc_device-éè¿idå é¤") @ApiOperation(value="dry_opc_device-éè¿idå é¤", notes="dry_opc_device-éè¿idå é¤") @RequiresPermissions("dry:dry_opc_device:delete") @DeleteMapping(value = "/delete") public Result<String> delete(@RequestParam(name="id",required=true) String id) { dryOpcDeviceService.removeById(id); return Result.OK("å 餿å!"); } /** * æ¹éå é¤ * * @param ids * @return */ @AutoLog(value = "dry_opc_device-æ¹éå é¤") @ApiOperation(value="dry_opc_device-æ¹éå é¤", notes="dry_opc_device-æ¹éå é¤") @RequiresPermissions("dry:dry_opc_device:deleteBatch") @DeleteMapping(value = "/deleteBatch") public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { this.dryOpcDeviceService.removeByIds(Arrays.asList(ids.split(","))); return Result.OK("æ¹éå 餿å!"); } /** * éè¿idæ¥è¯¢ * * @param id * @return */ //@AutoLog(value = "dry_opc_device-éè¿idæ¥è¯¢") @ApiOperation(value="dry_opc_device-éè¿idæ¥è¯¢", notes="dry_opc_device-éè¿idæ¥è¯¢") @GetMapping(value = "/queryById") public Result<DryOpcDevice> queryById(@RequestParam(name="id",required=true) String id) { DryOpcDevice dryOpcDevice = dryOpcDeviceService.getById(id); if(dryOpcDevice==null) { return Result.error("æªæ¾å°å¯¹åºæ°æ®"); } return Result.OK(dryOpcDevice); } /** * 导åºexcel * * @param request * @param dryOpcDevice */ @RequiresPermissions("dry:dry_opc_device:exportXls") @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, DryOpcDevice dryOpcDevice) { return super.exportXls(request, dryOpcDevice, DryOpcDevice.class, "dry_opc_device"); } /** * éè¿excelå¯¼å ¥æ°æ® * * @param request * @param response * @return */ @RequiresPermissions("dry:dry_opc_device:importExcel") @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { return super.importExcel(request, response, DryOpcDevice.class); } } //package org.jeecg.modules.dry.controller; // //import java.util.Arrays; //import java.util.List; //import java.util.Map; //import java.util.stream.Collectors; //import java.io.IOException; //import java.io.UnsupportedEncodingException; //import java.net.URLDecoder; //import javax.servlet.http.HttpServletRequest; //import javax.servlet.http.HttpServletResponse; // //import com.kangaroohy.milo.model.ReadWriteEntity; //import com.kangaroohy.milo.service.MiloService; //import org.jeecg.common.api.vo.Result; //import org.jeecg.common.system.query.QueryGenerator; //import org.jeecg.common.util.oConvertUtils; //import org.jeecg.modules.dry.entity.DryOpcDevice; //import org.jeecg.modules.dry.service.IDryOpcDeviceService; // //import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; //import com.baomidou.mybatisplus.core.metadata.IPage; //import com.baomidou.mybatisplus.extension.plugins.pagination.Page; //import lombok.extern.slf4j.Slf4j; // //import org.jeecgframework.poi.excel.ExcelImportUtil; //import org.jeecgframework.poi.excel.def.NormalExcelConstants; //import org.jeecgframework.poi.excel.entity.ExportParams; //import org.jeecgframework.poi.excel.entity.ImportParams; //import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; //import org.jeecg.common.system.base.controller.JeecgController; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.web.bind.annotation.*; //import org.springframework.web.multipart.MultipartFile; //import org.springframework.web.multipart.MultipartHttpServletRequest; //import org.springframework.web.servlet.ModelAndView; //import com.alibaba.fastjson.JSON; //import io.swagger.annotations.Api; //import io.swagger.annotations.ApiOperation; //import org.jeecg.common.aspect.annotation.AutoLog; //import org.apache.shiro.authz.annotation.RequiresPermissions; // // /** // * @Description: dry_opc_device // * @Author: jeecg-boot // * @Date: 2023-11-28 // * @Version: V1.0 // */ //@Api(tags="dry_opc_device") //@RestController //@RequestMapping("/dry/dryOpcDevice") //@Slf4j //public class DryOpcDeviceController extends JeecgController<DryOpcDevice, IDryOpcDeviceService> { // @Autowired // private IDryOpcDeviceService dryOpcDeviceService; // // // @Autowired // private MiloService miloService; // // // /** // * å页å表æ¥è¯¢ // * // * @param dryOpcDevice // * @param pageNo // * @param pageSize // * @param req // * @return // */ // //@AutoLog(value = "dry_opc_device-å页å表æ¥è¯¢") // @ApiOperation(value="dry_opc_device-å页å表æ¥è¯¢", notes="dry_opc_device-å页å表æ¥è¯¢") // @GetMapping(value = "/list") // public Result<IPage<DryOpcDevice>> queryPageList(DryOpcDevice dryOpcDevice, // @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, // @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, // HttpServletRequest req) { // QueryWrapper<DryOpcDevice> queryWrapper = QueryGenerator.initQueryWrapper(dryOpcDevice, req.getParameterMap()); // Page<DryOpcDevice> page = new Page<DryOpcDevice>(pageNo, pageSize); // IPage<DryOpcDevice> pageList = dryOpcDeviceService.page(page, queryWrapper); // return Result.OK(pageList); // } // // @GetMapping(value = "/listAll") // public Result<List<DryOpcDevice>> queryList(DryOpcDevice dryOpcDevice, // // HttpServletRequest req) { // QueryWrapper<DryOpcDevice> queryWrapper = QueryGenerator.initQueryWrapper(dryOpcDevice, req.getParameterMap()); // queryWrapper.orderByAsc("sort_order"); // List<DryOpcDevice> list = dryOpcDeviceService.list(queryWrapper); // list.forEach(item -> { // try { // ReadWriteEntity readWriteEntity = miloService.readFromOpcUa(item.getIdentifier()); // item.setValue((Boolean) readWriteEntity.getValue()); // } catch (Exception e) { // throw new RuntimeException(e); // } // }); // return Result.OK(list); // } // // // /** // * æ·»å // * // * @param dryOpcDevice // * @return // */ // @AutoLog(value = "dry_opc_device-æ·»å ") // @ApiOperation(value="dry_opc_device-æ·»å ", notes="dry_opc_device-æ·»å ") // @RequiresPermissions("dry:dry_opc_device:add") // @PostMapping(value = "/add") // public Result<String> add(@RequestBody DryOpcDevice dryOpcDevice) { // dryOpcDeviceService.save(dryOpcDevice); // return Result.OK("æ·»å æåï¼"); // } // // /** // * ç¼è¾ // * // * @param dryOpcDevice // * @return // */ // @AutoLog(value = "dry_opc_device-ç¼è¾") // @ApiOperation(value="dry_opc_device-ç¼è¾", notes="dry_opc_device-ç¼è¾") // @RequiresPermissions("dry:dry_opc_device:edit") // @RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST}) // public Result<String> edit(@RequestBody DryOpcDevice dryOpcDevice) { // dryOpcDeviceService.updateById(dryOpcDevice); // return Result.OK("ç¼è¾æå!"); // } // // /** // * éè¿idå é¤ // * // * @param id // * @return // */ // @AutoLog(value = "dry_opc_device-éè¿idå é¤") // @ApiOperation(value="dry_opc_device-éè¿idå é¤", notes="dry_opc_device-éè¿idå é¤") // @RequiresPermissions("dry:dry_opc_device:delete") // @DeleteMapping(value = "/delete") // public Result<String> delete(@RequestParam(name="id",required=true) String id) { // dryOpcDeviceService.removeById(id); // return Result.OK("å 餿å!"); // } // // /** // * æ¹éå é¤ // * // * @param ids // * @return // */ // @AutoLog(value = "dry_opc_device-æ¹éå é¤") // @ApiOperation(value="dry_opc_device-æ¹éå é¤", notes="dry_opc_device-æ¹éå é¤") // @RequiresPermissions("dry:dry_opc_device:deleteBatch") // @DeleteMapping(value = "/deleteBatch") // public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) { // this.dryOpcDeviceService.removeByIds(Arrays.asList(ids.split(","))); // return Result.OK("æ¹éå 餿å!"); // } // // /** // * éè¿idæ¥è¯¢ // * // * @param id // * @return // */ // //@AutoLog(value = "dry_opc_device-éè¿idæ¥è¯¢") // @ApiOperation(value="dry_opc_device-éè¿idæ¥è¯¢", notes="dry_opc_device-éè¿idæ¥è¯¢") // @GetMapping(value = "/queryById") // public Result<DryOpcDevice> queryById(@RequestParam(name="id",required=true) String id) { // DryOpcDevice dryOpcDevice = dryOpcDeviceService.getById(id); // if(dryOpcDevice==null) { // return Result.error("æªæ¾å°å¯¹åºæ°æ®"); // } // return Result.OK(dryOpcDevice); // } // // /** // * 导åºexcel // * // * @param request // * @param dryOpcDevice // */ // @RequiresPermissions("dry:dry_opc_device:exportXls") // @RequestMapping(value = "/exportXls") // public ModelAndView exportXls(HttpServletRequest request, DryOpcDevice dryOpcDevice) { // return super.exportXls(request, dryOpcDevice, DryOpcDevice.class, "dry_opc_device"); // } // // /** // * éè¿excelå¯¼å ¥æ°æ® // * // * @param request // * @param response // * @return // */ // @RequiresPermissions("dry:dry_opc_device:importExcel") // @RequestMapping(value = "/importExcel", method = RequestMethod.POST) // public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { // return super.importExcel(request, response, DryOpcDevice.class); // } // //} jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/DryRealTimeDataController.java
@@ -12,7 +12,7 @@ import org.jeecg.modules.dry.entity.DryHerbInfo; import org.jeecg.modules.dry.service.*; import org.jeecg.modules.dry.util.HerbUtil; //import org.jeecg.modules.dry.util.HerbUtil; import org.jeecg.modules.dry.vo.CommandMessageVo; import org.jeecg.modules.dry.vo.DryHerbInfoVo; import org.jeecg.modules.dry.vo.RealTimeDataVo; @@ -36,8 +36,8 @@ @Autowired private IDryRealTimeDataService dryRealTimeDataService; @Autowired private HerbUtil herbUtil; // @Autowired // private HerbUtil herbUtil; @Autowired private IDryHerbInfoService herbInfoService; @@ -85,43 +85,43 @@ return dryRealTimeDataService.sendSocketMsg(msgVo); } @ApiOperation(value = "è¯æè¯å«") @PostMapping("/identify") public Result<?> identify(@RequestParam("file") MultipartFile file) throws Exception { try { if (file.isEmpty()) { throw new RuntimeException("ä¸ä¼ æä»¶ä¸è½ä¸ºç©º"); } InputStream inputStream = file.getInputStream(); List<Classifications.Classification> predict = herbUtil.predict(inputStream); if(predict.size()>0) { Map<String, Double> collect = predict.stream().collect(Collectors.toMap(Classifications.Classification::getClassName, Classifications.Classification::getProbability)); List<DryHerbInfoVo> voList = new ArrayList<>(); Set<String> strings = collect.keySet(); List<DryHerbInfo> list = herbInfoService.list(new LambdaQueryWrapper<DryHerbInfo>().in(DryHerbInfo::getPinyin, strings)); list.forEach(item -> { DryHerbInfoVo dryHerbInfoVo = new DryHerbInfoVo(); BeanUtil.copyProperties(item, dryHerbInfoVo); dryHerbInfoVo.setProbabily(collect.get(item.getPinyin())); voList.add(dryHerbInfoVo); }); List<DryHerbInfoVo> collect1 = voList.stream().sorted(Comparator.comparing(DryHerbInfoVo::getProbabily, Comparator.reverseOrder())). collect(Collectors.toList()); return Result.ok(collect1); } else { return Result.error("AIè¯å«æå¡å¼å¸¸"); } } catch (Exception e) { e.printStackTrace(); return Result.error("AIè¯å«æå¡å¼å¸¸"); } } // // @ApiOperation(value = "è¯æè¯å«") // @PostMapping("/identify") // public Result<?> identify(@RequestParam("file") MultipartFile file) throws Exception { // try { // if (file.isEmpty()) { // throw new RuntimeException("ä¸ä¼ æä»¶ä¸è½ä¸ºç©º"); // } // InputStream inputStream = file.getInputStream(); // List<Classifications.Classification> predict = herbUtil.predict(inputStream); // // if(predict.size()>0) { // Map<String, Double> collect = predict.stream().collect(Collectors.toMap(Classifications.Classification::getClassName, Classifications.Classification::getProbability)); // // // List<DryHerbInfoVo> voList = new ArrayList<>(); // Set<String> strings = collect.keySet(); // List<DryHerbInfo> list = herbInfoService.list(new LambdaQueryWrapper<DryHerbInfo>().in(DryHerbInfo::getPinyin, strings)); // list.forEach(item -> { // DryHerbInfoVo dryHerbInfoVo = new DryHerbInfoVo(); // BeanUtil.copyProperties(item, dryHerbInfoVo); // dryHerbInfoVo.setProbabily(collect.get(item.getPinyin())); // voList.add(dryHerbInfoVo); // }); // // List<DryHerbInfoVo> collect1 = voList.stream().sorted(Comparator.comparing(DryHerbInfoVo::getProbabily, Comparator.reverseOrder())). // collect(Collectors.toList()); // // return Result.ok(collect1); // } else { // return Result.error("AIè¯å«æå¡å¼å¸¸"); // } // // } catch (Exception e) { // e.printStackTrace(); // return Result.error("AIè¯å«æå¡å¼å¸¸"); // } // } } jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/controller/OpcController.java
@@ -1,66 +1,66 @@ package org.jeecg.modules.dry.controller; import com.kangaroohy.milo.model.ReadWriteEntity; import com.kangaroohy.milo.service.MiloService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode; import org.eclipse.milo.opcua.stack.core.types.builtin.Variant; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.dry.entity.DryOpcDevice; import org.jeecg.modules.dry.service.IDryOpcDeviceService; import org.jeecg.modules.dry.vo.CommandMessageVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.concurrent.ExecutionException; /** * opcæ§å¶å¨ï¼ç¨äºæ§å¶ç°åºæåå¤´çµæºï¼ç¯çå¼å ³ */ @Api(tags="OPCæ§å¶å¨") @RestController @RequestMapping("/dry/opc") @Slf4j public class OpcController { @Autowired private MiloService miloService; @Autowired private IDryOpcDeviceService opcDeviceService; @ApiOperation(value="å鿧嶿令", notes="åæå¡ç«¯å鿧嶿令ï¼ç±æå¡ç«¯è½¬åç»æ§å¶æ¨¡å") @PostMapping("/sendWriteCommand") public Result<?> sendWriteCommand(@RequestBody CommandMessageVo msgVo) throws Exception { miloService.writeToOpcUa(ReadWriteEntity.builder() .identifier(msgVo.getCode()) //Kep䏿¯Booleanç±»å .value(Boolean.valueOf(msgVo.getMsg())) .build()); return Result.OK(); } @ApiOperation(value="å鿧嶿令", notes="åæå¡ç«¯å鿧嶿令ï¼ç±æå¡ç«¯è½¬åç»æ§å¶æ¨¡å") @PostMapping("/initDevice") public Result<?> initDevice() throws Exception { List<DryOpcDevice> list = opcDeviceService.list(); list.forEach(item -> { }); return Result.OK(); } } //package org.jeecg.modules.dry.controller; // //import com.kangaroohy.milo.model.ReadWriteEntity; //import com.kangaroohy.milo.service.MiloService; //import io.swagger.annotations.Api; //import io.swagger.annotations.ApiOperation; //import lombok.extern.slf4j.Slf4j; //import org.eclipse.milo.opcua.sdk.client.OpcUaClient; //import org.eclipse.milo.opcua.stack.core.types.builtin.DataValue; //import org.eclipse.milo.opcua.stack.core.types.builtin.NodeId; //import org.eclipse.milo.opcua.stack.core.types.builtin.StatusCode; //import org.eclipse.milo.opcua.stack.core.types.builtin.Variant; //import org.jeecg.common.api.vo.Result; //import org.jeecg.modules.dry.entity.DryOpcDevice; //import org.jeecg.modules.dry.service.IDryOpcDeviceService; //import org.jeecg.modules.dry.vo.CommandMessageVo; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.web.bind.annotation.PostMapping; //import org.springframework.web.bind.annotation.RequestBody; //import org.springframework.web.bind.annotation.RequestMapping; //import org.springframework.web.bind.annotation.RestController; // //import java.util.List; //import java.util.concurrent.ExecutionException; // ///** // * opcæ§å¶å¨ï¼ç¨äºæ§å¶ç°åºæåå¤´çµæºï¼ç¯çå¼å ³ // */ // //@Api(tags="OPCæ§å¶å¨") //@RestController //@RequestMapping("/dry/opc") //@Slf4j //public class OpcController { // // @Autowired // private MiloService miloService; // // @Autowired // private IDryOpcDeviceService opcDeviceService; // // // @ApiOperation(value="å鿧嶿令", notes="åæå¡ç«¯å鿧嶿令ï¼ç±æå¡ç«¯è½¬åç»æ§å¶æ¨¡å") // @PostMapping("/sendWriteCommand") // public Result<?> sendWriteCommand(@RequestBody CommandMessageVo msgVo) throws Exception { // // miloService.writeToOpcUa(ReadWriteEntity.builder() // .identifier(msgVo.getCode()) // //Kep䏿¯Booleanç±»å // .value(Boolean.valueOf(msgVo.getMsg())) // .build()); // return Result.OK(); // } // // @ApiOperation(value="å鿧嶿令", notes="åæå¡ç«¯å鿧嶿令ï¼ç±æå¡ç«¯è½¬åç»æ§å¶æ¨¡å") // @PostMapping("/initDevice") // public Result<?> initDevice() throws Exception { // List<DryOpcDevice> list = opcDeviceService.list(); // // list.forEach(item -> { // // }); // // return Result.OK(); // } //} jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/listener/InitListener.java
@@ -1,21 +1,12 @@ package org.jeecg.modules.dry.listener; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.io.ByteStreams; import org.eclipse.milo.opcua.sdk.client.OpcUaClient; import org.jeecg.modules.dry.common.CacheConstants; import org.jeecg.modules.dry.common.CommonDict; import org.jeecg.modules.dry.vo.DryFault; import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; //@Component jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/runner/OpcCustomRunner.java
@@ -1,58 +1,58 @@ package org.jeecg.modules.dry.runner; import com.alibaba.fastjson.JSON; import com.kangaroohy.milo.service.MiloService; import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.dry.entity.DryOpcDevice; import org.jeecg.modules.dry.service.IDryOpcDeviceService; import org.jeecg.modules.dry.vo.DryOpcMsgVo; import org.jeecg.modules.dry.websocket.DrySocket; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Component @Slf4j public class OpcCustomRunner implements ApplicationRunner { @Autowired private MiloService miloService; @Autowired private IDryOpcDeviceService dryOpcDeviceService; @Autowired private DrySocket drySocket; @Override public void run(ApplicationArguments args) throws Exception { subscript(); } private void subscript() throws Exception { List<String> ids = new ArrayList<>(); List<DryOpcDevice> list = dryOpcDeviceService.list(); list.forEach(item -> { ids.add(item.getIdentifier()); }); // ids.add("éé 1.è®¾å¤ 1.æ è®° 1"); // ids.add("éé 1.è®¾å¤ 1.æ è®° 2"); // ids.add("channel1.device1.tag1"); // ids.add("channel1.device1.tag2"); // ids.add("channel1.device1.tag3"); // ids.add("channel1.device1.tag4"); // ids.add("channel1.device1.tag5"); // ids.add("channel1.device1.tag6"); miloService.subscriptionFromOpcUa(ids, (id,value)->{ log.info("subscription ç¹ä½ï¼{} 订é å°æ¶æ¯ï¼{}", id, value); DryOpcMsgVo dryOpcMsgVo = new DryOpcMsgVo(id, (Boolean) value); drySocket.pushMessage("1003", JSON.toJSONString(dryOpcMsgVo)); } ); } } //package org.jeecg.modules.dry.runner; // //import com.alibaba.fastjson.JSON; //import com.kangaroohy.milo.service.MiloService; //import lombok.extern.slf4j.Slf4j; //import org.jeecg.modules.dry.entity.DryOpcDevice; //import org.jeecg.modules.dry.service.IDryOpcDeviceService; //import org.jeecg.modules.dry.vo.DryOpcMsgVo; //import org.jeecg.modules.dry.websocket.DrySocket; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.boot.ApplicationArguments; //import org.springframework.boot.ApplicationRunner; //import org.springframework.stereotype.Component; // //import java.util.ArrayList; //import java.util.List; // //@Component //@Slf4j //public class OpcCustomRunner implements ApplicationRunner { // @Autowired // private MiloService miloService; // // // @Autowired // private IDryOpcDeviceService dryOpcDeviceService; // // @Autowired // private DrySocket drySocket; // @Override // public void run(ApplicationArguments args) throws Exception { // // subscript(); // // } // // private void subscript() throws Exception { // List<String> ids = new ArrayList<>(); // List<DryOpcDevice> list = dryOpcDeviceService.list(); // list.forEach(item -> { // ids.add(item.getIdentifier()); // }); //// ids.add("éé 1.è®¾å¤ 1.æ è®° 1"); //// ids.add("éé 1.è®¾å¤ 1.æ è®° 2"); //// ids.add("channel1.device1.tag1"); //// ids.add("channel1.device1.tag2"); //// ids.add("channel1.device1.tag3"); //// ids.add("channel1.device1.tag4"); //// ids.add("channel1.device1.tag5"); //// ids.add("channel1.device1.tag6"); // miloService.subscriptionFromOpcUa(ids, (id,value)->{ // log.info("subscription ç¹ä½ï¼{} 订é å°æ¶æ¯ï¼{}", id, value); // // DryOpcMsgVo dryOpcMsgVo = new DryOpcMsgVo(id, (Boolean) value); // drySocket.pushMessage("1003", JSON.toJSONString(dryOpcMsgVo)); // } ); // } //} jeecg-module-dry/jeecg-module-dry-biz/src/main/java/org/jeecg/modules/dry/websocket/DrySocket1.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,223 @@ //package org.jeecg.modules.dry.websocket; // //import cn.hutool.core.bean.BeanUtil; //import com.alibaba.fastjson.JSON; //import com.alibaba.fastjson.JSONObject; //import lombok.extern.slf4j.Slf4j; //import org.jeecg.common.constant.DrySocketConst; //import org.jeecg.common.util.SpringContextUtils; //import org.jeecg.modules.dry.service.IDryRealTimeDataService; //import org.jeecg.modules.dry.vo.RealTimeDataVo; //import org.springframework.beans.factory.annotation.Autowired; //import org.springframework.stereotype.Component; // //import javax.websocket.*; //import javax.websocket.server.PathParam; //import javax.websocket.server.ServerEndpoint; //import java.util.Collection; //import java.util.HashMap; //import java.util.Map; // //@Slf4j //@Component //@ServerEndpoint("/drySocket/{tenantId}/{machineId}") //public class DrySocket { // // /** // * å½å session // */ // private Session session; // /** // * å½åç§æ·id // */ // private String tenantId; // /** // * 设å¤idï¼ç¨äºæ è¯åä¸ç§æ·ï¼ä¸å设å¤çæ°æ® // */ // private String machineId; // /** // * å½åsocketå¯ä¸id // */ // private String socketId; // // /** // * ç§æ·è¿æ¥æ± ï¼å å«åä¸ªç§æ·çææsocketè¿æ¥ï¼ // * å 为ä¸ä¸ªç§æ·å¯è½æå¼å¤ä¸ªè®¾å¤ï¼å¤ä¸ªè®¾å¤å°±ä¼æå¤ä¸ªè¿æ¥ï¼ // * keyæ¯tenantIdï¼valueæ¯Map对象ï¼åMapçkeyæ¯machineIdï¼valueæ¯drySocket对象 // */ // private Map<String, Map<String, DrySocket>> tenantPool = new HashMap<>(); // /** // * è¿æ¥æ± ï¼å 嫿æWebSocketè¿æ¥ï¼ // * keyæ¯socketIdï¼valueæ¯drySocket对象 // */ // private Map<String, DrySocket> machinePool = new HashMap<>(); // // /** // * è·åæä¸ªç§æ·ææçè®¾å¤ // */ // public Map<String, DrySocket> getTenantPool(String tenantId) { // return tenantPool.computeIfAbsent(tenantId, k -> new HashMap<>(5)); // } // // /** // * åå½åç§æ·åéæ¶æ¯ // * // * @param message æ¶æ¯å 容 // */ // public void sendMessage(String message) { // try { // this.session.getAsyncRemote().sendText(message); // } catch (Exception e) { // log.error("ãdrySocketãæ¶æ¯åé失败ï¼" + e.getMessage()); // } // } // // /** // * å°è£ æ¶æ¯json // * // * @param data æ¶æ¯å 容 // */ // public static String packageMessage(String type, Object data) { // JSONObject message = new JSONObject(); // message.put(DrySocketConst.TYPE, type); // message.put(DrySocketConst.DATA, data); // return message.toJSONString(); // } // // /** // * åæå®ç§æ·çææè®¾å¤åéæ¶æ¯ // * // * @param tenantId æ¥æ¶æ¶æ¯çç§æ·ID // * @param message æ¶æ¯å 容 // */ // public void sendMessageTo(String tenantId, String message) { // Collection<DrySocket> values = getTenantPool(tenantId).values(); // if (values.size() > 0) { // for (DrySocket socketItem : values) { // socketItem.sendMessage(message); // } // } else { // log.warn("ãdrySocketãæ¶æ¯åé失败ï¼tenantId\"" + tenantId + "\"ä¸å卿æªå¨çº¿ï¼"); // } // } // // /** // * åæå®ç§æ·çæå®è®¾å¤åéæ¶æ¯ // * // * @param tenantId æ¥æ¶æ¶æ¯çç§æ·ID // * @param message æ¶æ¯å 容 // */ // public void sendMessageTo(String tenantId, String machineId, String message) { // DrySocket socketItem = getTenantPool(tenantId).get(machineId); // if (socketItem != null) { // socketItem.sendMessage(message); // } else { // log.warn("ãdrySocketãæ¶æ¯åé失败ï¼tenantId\"" + tenantId + "\"çmachineId\"" + machineId + "\"ä¸å卿æªå¨çº¿ï¼"); // } // } // // /** // * åå¤ä¸ªç§æ·çææè®¾å¤åéæ¶æ¯ // * // * @param tenantIds æ¥æ¶æ¶æ¯çç§æ·IDæ°ç» // * @param message æ¶æ¯å 容 // */ // public void sendMessageTo(String[] tenantIds, String message) { // for (String tenantId : tenantIds) { // this.sendMessageTo(tenantId, message); // } // } // // /** // * åææç§æ·çææè®¾å¤åéæ¶æ¯ // * // * @param message æ¶æ¯å 容 // */ // public void sendMessageToAll(String message) { // for (DrySocket socketItem : machinePool.values()) { // socketItem.sendMessage(message); // } // } // // /** // * websocket å¼å¯è¿æ¥ // */ // @OnOpen // public void onOpen(Session session, @PathParam("tenantId") String tenantId, @PathParam("machineId") String machineId) { // try { // this.tenantId = tenantId; // this.machineId = machineId; // this.socketId = tenantId + machineId; // this.session = session; // // machinePool.put(this.socketId, this); // getTenantPool(tenantId).put(this.machineId, this); // // log.info("ãdrySocketãææ°çè¿æ¥ï¼æ»æ°ä¸º:" + machinePool.size()); // log.info("ssss"+tenantPool.size()); // } catch (Exception ignored) { // } // } // // /** // * websocket æå¼è¿æ¥ // */ // @OnClose // public void onClose() { // try { // machinePool.remove(this.socketId); // getTenantPool(this.tenantId).remove(this.machineId); // // log.info("ãdrySocketãè¿æ¥æå¼ï¼æ»æ°ä¸º:" + machinePool.size()); // } catch (Exception ignored) { // } // } // // /** // * websocket æ¶å°æ¶æ¯ // */ // @OnMessage // public void onMessage(String message) { // log.info("ãdrySocketãonMessage:" + message); // IDryRealTimeDataService realTimeDataService = SpringContextUtils.getBean(IDryRealTimeDataService.class); // JSONObject json; // try { // json = JSON.parseObject(message); // } catch (Exception e) { // log.warn("ãdrySocketãæ¶å°ä¸åæ³çæ¶æ¯:" + message); // return; // } // String type = json.getString(DrySocketConst.TYPE); // switch (type) { // // å¿è·³æ£æµ // case DrySocketConst.TYPE_HB: // this.sendMessage(DrySocket.packageMessage(type, true)); // break; // // 宿¶æ°æ®å¤ç // case DrySocketConst.TYPE_RDT: // Object o = json.get(DrySocketConst.DATA); // RealTimeDataVo realTimeDataVo = BeanUtil.toBean(o, RealTimeDataVo.class); // realTimeDataService.realTimeDataHandle(realTimeDataVo); // break; // // default: // log.warn("ãdrySocketãæ¶å°ä¸è¯å«çæ¶æ¯ç±»å:" + type); // break; // } // // // } // // /** * é ç½®é误信æ¯å¤ç * @param session * @param t */ // @OnError // public void onError(Session session, Throwable t) { // ////ä»ä¹é½ä¸æ³æå°é½å»æå°±å¥½äº // log.info("ãwebsocketæ¶æ¯ãåºç°æªç¥é误 "); ////æå°é误信æ¯ï¼å¦æä½ 䏿³æå°é误信æ¯ï¼å»æå°±å¥½äº ////è¿éæå°ç乿¯ java.io.EOFException: null // t.printStackTrace(); // } // // //} jeecg-module-dry/jeecg-module-dry-start/src/main/test/java/com/lanbao/AiTest.java
@@ -1,27 +1,27 @@ package com.lanbao; import ai.djl.modality.Classifications; import org.jeecg.modules.dry.util.HerbUtil; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.util.List; public class AiTest { @Test public void test() { try { String img = "E:\\testImg\\szp1.jpg"; HerbUtil herbUtil = new HerbUtil(); File file = new File(img); InputStream is = new FileInputStream(file); List<Classifications.Classification> predict = herbUtil.predict(is); System.out.println(predict); } catch (FileNotFoundException e) { throw new RuntimeException(e); } } } //package com.lanbao; // //import ai.djl.modality.Classifications; //import org.jeecg.modules.dry.util.HerbUtil; //import org.junit.Test; // //import java.io.File; //import java.io.FileInputStream; //import java.io.FileNotFoundException; //import java.io.InputStream; //import java.util.List; // //public class AiTest { // @Test // public void test() { // try { // String img = "E:\\testImg\\szp1.jpg"; // HerbUtil herbUtil = new HerbUtil(); // File file = new File(img); // InputStream is = new FileInputStream(file); // List<Classifications.Classification> predict = herbUtil.predict(is); // System.out.println(predict); // } catch (FileNotFoundException e) { // throw new RuntimeException(e); // } // } //} jeecg-server-cloud/jeecg-cloud-gateway/src/main/resources/application.yml
@@ -27,8 +27,8 @@ allowedOriginPatterns: "*" allowedMethods: "*" allowedHeaders: "*" # inetutils: # preferred-networks: 192.168 inetutils: preferred-networks: 192.168 #Sentinelé ç½® sentinel: transport: jeecg-server-cloud/jeecg-cloud-nacos/src/main/resources/application.yml
@@ -14,7 +14,7 @@ password: '0': ${MYSQL-PWD:123456} url: '0': jdbc:mysql://${MYSQL-HOST:jeecg-boot-mysql}:${MYSQL-PORT:3306}/${MYSQL-DB:nacos}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true '0': jdbc:mysql://${MYSQL-HOST:localhost}:${MYSQL-PORT:3306}/${MYSQL-DB:nacos-herb}?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true user: '0': ${MYSQL-USER:root} management: