From cde16e4d86afb08896a8eeaea8f22cf6f5a94aa5 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期一, 04 十二月 2023 10:25:33 +0800
Subject: [PATCH] 代码提交

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/WeChatController.java         |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java |    4 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java       |    2 
 smartor/src/main/java/com/smartor/service/impl/PersonVoiceServiceImpl.java                     |  489 ++++++++++++++++++++++++
 smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java                  |    2 
 smartor/pom.xml                                                                                |   18 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseTagController.java              |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java             |   15 
 smartor/src/main/resources/mapper/smartor/SvyLibTopicdirectionMapper.xml                       |   66 +++
 smartor/src/main/java/com/smartor/mapper/SvyLibTopicdirectionMapper.java                       |   63 +++
 smartor/src/main/java/com/smartor/service/impl/SvyLibTopicdirectionServiceImpl.java            |   94 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/test/WeChatService.java                                |    3 
 ruoyi-admin/pom.xml                                                                            |   13 
 ruoyi-admin/src/main/java/com/ruoyi/web/test/DingTalkService.java                              |    2 
 smartor/src/main/java/com/smartor/service/ISvyLibTopicdirectionService.java                    |   62 +++
 ruoyi-admin/src/main/resources/application.yml                                                 |    6 
 smartor/src/main/java/com/smartor/service/PersonVoiceService.java                              |   24 +
 ruoyi-common/pom.xml                                                                           |    7 
 /dev/null                                                                                      |   22 -
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/PersonVoiceController.java    |   81 ++++
 ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java                          |    4 
 ruoyi-admin/src/main/resources/application-druid.yml                                           |   26 +
 ruoyi-common/src/main/java/com/ruoyi/common/html/AnalysisHTML.java                             |   90 ++++
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                   |    2 
 smartor/src/main/java/com/smartor/domain/SvyLibTopicdirection.java                             |   79 +++
 25 files changed, 1,130 insertions(+), 48 deletions(-)

diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 2c904b4..1d17e3d 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -8,7 +8,7 @@
         <version>3.8.5</version>
     </parent>
     <modelVersion>4.0.0</modelVersion>
-<!--    <packaging>war</packaging>-->
+    <!--    <packaging>war</packaging>-->
     <packaging>jar</packaging>
     <artifactId>smartor-admin</artifactId>
 
@@ -120,6 +120,17 @@
             <version>2.3</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.ssssssss</groupId>
+            <artifactId>magic-api-spring-boot-starter</artifactId>
+            <version>1.3.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.nls</groupId>
+            <artifactId>nls-sdk-common</artifactId>
+            <version>2.1.6</version>
+        </dependency>
 
     </dependencies>
 
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseTagController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseTagController.java
index f8d2ac2..0ec41b1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseTagController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseTagController.java
@@ -45,7 +45,7 @@
     @ApiOperation("鏌ヨ鏍囩鍒楄〃")
     @PreAuthorize("@ss.hasPermi('system:tag:list')")
     @PostMapping("/list")
-    public TableDataInfo list(@RequestBody BaseTag baseTag) {
+    public TableDataInfo list(BaseTag baseTag) {
         startPage();
         List<BaseTag> list = baseTagService.selectBaseTagList(baseTag);
         return getDataTable(list);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java
deleted file mode 100644
index e64c668..0000000
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.ruoyi.web.controller.smartor;
-
-import lombok.Data;
-
-import java.util.List;
-
-@Data
-public class SendMessageIn {
-
-    //娑堟伅绫诲瀷
-    private String msgType;
-    //webhook
-    private String webhook;
-    //瀵嗛挜
-    private String secret;
-    //鏂囨湰
-    private String text;
-    //鎸囧畾瀵硅薄
-    private List<String> mobileList;
-    //鏄惁鎺ㄩ�佹墍鏈変汉
-    private boolean isAtAll;
-}
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseSmsaccountController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
similarity index 98%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseSmsaccountController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
index abc76de..679d6e2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseSmsaccountController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
@@ -1,6 +1,7 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.web.controller.smartor.tools;
 
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.page.TableDataInfo;
@@ -102,6 +103,7 @@
      */
     @ApiOperation("鐭俊鍙戦��")
     @PostMapping("/sendMsg")
+    @RepeatSubmit
     public AjaxResult sendMsg(@RequestBody BaseSmsRequest baseSmsRequest) {
         if (baseSmsaccountService.sendMsg(baseSmsRequest) == null) {
             return error();
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
similarity index 96%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
index e2d943a..d060ea4 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.web.controller.smartor.tools;
 
 import com.ruoyi.common.core.controller.BaseController;
 import com.smartor.domain.DingTalkReqVo;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/PersonVoiceController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/PersonVoiceController.java
new file mode 100644
index 0000000..b1b312f
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/PersonVoiceController.java
@@ -0,0 +1,81 @@
+package com.ruoyi.web.controller.smartor.tools;
+
+import afu.org.checkerframework.checker.oigj.qual.O;
+import com.alibaba.nls.client.AccessToken;
+import com.alibaba.nls.client.protocol.NlsClient;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.annotation.RepeatSubmit;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.BaseSmsRequest;
+import com.smartor.domain.BaseSmsaccount;
+import com.smartor.domain.BatchBaseSmsRequest;
+import com.smartor.domain.TemplateSmsRequest;
+import com.smartor.service.DingTalkService;
+import com.smartor.service.IBaseSmsaccountService;
+import com.smartor.service.PersonVoiceService;
+import com.taobao.api.ApiException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 浜哄伐璇煶Controller
+ *
+ * @author ls
+ * @date 2023-11-17
+ */
+@Api(description = "浜哄伐璇煶")
+@RestController
+@RequestMapping("/smartor/voice")
+public class PersonVoiceController extends BaseController {
+    @Autowired
+    private PersonVoiceService personVoiceService;
+
+
+    @ApiOperation("璇煶杞枃瀛�")
+    @GetMapping("/speechtotext")
+    public Map<String, Object> speechtotext(@RequestParam("filePath") String filePath) {
+        String recognizerListener = personVoiceService.speechtotext(filePath);
+        return success(recognizerListener);
+    }
+
+    @ApiOperation("鏂囧瓧杞闊�")
+    @GetMapping("/texttospeech")
+    public Map<String, Object> texttospeech(@RequestParam("textspeech") String textspeech) {
+        String recognizerListener = personVoiceService.texttospeech(textspeech);
+        return success(recognizerListener);
+    }
+
+    @ApiOperation("html鏂囦欢澶勭悊")
+    @GetMapping("/explainHTML")
+    public Map<String, Object> explainHTML() {
+        Boolean aBoolean = personVoiceService.explainHTML();
+        return success(aBoolean);
+    }
+
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/WeChatController.java
similarity index 98%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/WeChatController.java
index df021f2..ecbc125 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/WeChatController.java
@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.web.controller.smartor.tools;
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java
index 2fbb8ec..65d84fc 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/socket/SocketCommunication.java
@@ -85,8 +85,8 @@
             //鑾峰彇杩斿洖鏁版嵁
             String messageControlID = list.get(9);
             String timeOfAnEvent = list.get(6);
-            String senderApp = list.get(2);
-            String senderFac = list.get(3);
+//            String senderApp = list.get(2);
+//            String senderFac = list.get(3);
 
             String dataType = list.get(8);
             if (StringUtils.isNotEmpty(dataType)) {
@@ -104,10 +104,13 @@
             ACK ack = new ACK();
             ack.initQuickstart("ACK", "2.4", "P");
             // 璁剧疆MSH娈电殑瀛楁
-            ack.getMSH().getSendingApplication().getNamespaceID().setValue("HIS");
-            ack.getMSH().getSendingFacility().getNamespaceID().setValue(senderFac);
-            ack.getMSH().getReceivingApplication().getNamespaceID().setValue(senderApp);
-            ack.getMSH().getReceivingFacility().getNamespaceID().setValue(senderFac);
+            ack.getMSH().getSendingApplication().getNamespaceID().setValue("SF");
+//            ack.getMSH().getSendingFacility().getNamespaceID().setValue(senderFac);
+            ack.getMSH().getSendingFacility().getNamespaceID().setValue("SF");
+//            ack.getMSH().getReceivingApplication().getNamespaceID().setValue(senderApp);
+            ack.getMSH().getReceivingApplication().getNamespaceID().setValue("QN");
+//            ack.getMSH().getReceivingFacility().getNamespaceID().setValue(senderFac);
+            ack.getMSH().getReceivingFacility().getNamespaceID().setValue("QN");
             ack.getMSH().getDateTimeOfMessage().getTimeOfAnEvent().setValue(timeOfAnEvent);
             ack.getMSH().getMessageType().getMessageType().setValue("ACK");
             ack.getMSH().getMessageType().getTriggerEvent().setValue("ACK");
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/DingTalkService.java
similarity index 99%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/test/DingTalkService.java
index d4a9326..945cc11 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/DingTalkService.java
@@ -1,4 +1,4 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.web.test;
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java b/ruoyi-admin/src/main/java/com/ruoyi/web/test/WeChatService.java
similarity index 97%
rename from ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java
rename to ruoyi-admin/src/main/java/com/ruoyi/web/test/WeChatService.java
index 076057d..5b05d38 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatService.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/test/WeChatService.java
@@ -1,7 +1,8 @@
-package com.ruoyi.web.controller.smartor;
+package com.ruoyi.web.test;
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.web.controller.smartor.tools.WeChatController;
 import com.smartor.domain.WeChatSendVo;
 import me.chanjar.weixin.common.exception.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index 0f46331..5f45c63 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -6,12 +6,12 @@
     druid:
       # 涓诲簱鏁版嵁婧�
       master:
-        url: jdbc:mysql://127.0.0.1:3306/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-#        url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
-        username: root
-        password: 123456
-#        username: hxsoft
-#        password: Hxerp2000
+#        url: jdbc:mysql://127.0.0.1:3306/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        #        username: root
+        #        password: 123456
+        url: jdbc:mysql://116.62.18.175:6002/smartor?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+        username: hxsoft
+        password: Hxerp2000
       # 浠庡簱鏁版嵁婧�
       slave:
         # 浠庢暟鎹簮寮�鍏�/榛樿鍏抽棴
@@ -59,6 +59,20 @@
           config:
             multi-statement-allow: true
 
+magic-api:
+  web: /magic/web
+  resource:
+    type: database   # 閰嶇疆瀛樺偍鍦ㄦ暟鎹簱涓�
+    tableName: magic_config  # 鏁版嵁搴撲腑鐨勮〃鍚�
+    prefix: /api
+    readonly: false
+  sql-column-case: camel
+  show-sql: true #閰嶇疆鎵撳嵃SQL
+  page-config:
+    size: size
+    page: page
+    default-page: 1
+    default-size: 10
 
   #寰俊鍏紬鍙风殑瀵嗛挜
 appid: wx1c5243d2337753f4
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index eee2def..22c8630 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -18,7 +18,7 @@
 # 寮�鍙戠幆澧冮厤缃�
 server:
   # 鏈嶅姟鍣ㄧ殑HTTP绔彛锛岄粯璁や负8080
-  port: 8181
+  port: 8080
   servlet:
     # 搴旂敤鐨勮闂矾寰�
     context-path: /
@@ -70,11 +70,11 @@
   # redis 閰嶇疆
   redis:
     # 鍦板潃
-    host: 127.0.0.1
+#    host: 127.0.0.1
     # 绔彛锛岄粯璁や负6379
 #    port: 6379
 #    # 鍦板潃
-#    host: 116.62.18.175
+    host: 116.62.18.175
 #    # 绔彛锛岄粯璁や负6379
     port: 6020
     # 鏁版嵁搴撶储寮�
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index bb034c6..3bd1426 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -17,6 +17,13 @@
 
     <dependencies>
 
+        <!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
+        <dependency>
+            <groupId>org.jsoup</groupId>
+            <artifactId>jsoup</artifactId>
+            <version>1.15.3</version>
+        </dependency>
+
         <dependency>
             <groupId>io.minio</groupId>
             <artifactId>minio</artifactId>
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/html/AnalysisHTML.java b/ruoyi-common/src/main/java/com/ruoyi/common/html/AnalysisHTML.java
new file mode 100644
index 0000000..99a7be3
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/html/AnalysisHTML.java
@@ -0,0 +1,90 @@
+package com.ruoyi.common.html;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.stream.Collectors;
+
+/**
+ * 瑙f瀽html
+ */
+public class AnalysisHTML {
+
+    public static String explainHTML() throws IOException {
+        String folderPath = "E:\\pc2";
+        // 鑾峰彇鏂囦欢澶逛笅鐨勬墍鏈夋枃浠�
+        File[] files = new File(folderPath).listFiles();
+        // 閬嶅巻鏂囦欢澶逛笅鐨勬墍鏈夋枃浠�
+        int i = 0;
+        int b = 0;
+        a:
+        for (File file : files) {
+            // 鑾峰彇鏂囦欢鍚�
+            String fileName = file.getName();
+            System.out.println(fileName);
+            // 鑾峰彇鏂囦欢鍐呭
+            String fileContent = new String(Files.readAllBytes(file.toPath()));
+
+            Document parse = Jsoup.parse(fileContent);
+
+            String title = parse.title();
+            Element body = parse.body();
+            Elements elementsByClass = body.getElementsByClass("topic__type-body");
+            Elements children = elementsByClass.get(0).children();
+            for (Element element : children) {
+                int legend = element.select("legend").size();
+                File file1 = null;
+                if (legend == 0) {
+                    //璺宠繃璇ユ枃浠�
+                    file1 = new File("E:\\noexplain");
+                    b++;
+                    continue a;
+                }
+                if (!element.getElementsByTag("legend").attr("class").equals("topic__type-title")) {
+                    //璺宠繃璇ユ枃浠�
+                    file1 = new File("E:\\noexplain");
+                    b++;
+                    continue a;
+                }
+            }
+
+            for (Element element : children) {
+                i++;
+                //鑾峰彇棰樼洰
+                String legend = element.getElementsByTag("legend").text();
+                System.out.println("棰樼洰锛� " + legend);
+                //灏嗛鐩繚瀛樺埌琛ㄤ腑
+
+                //鍒ゆ柇璇ラ鐩笅鏄惁鏈夐�夐」
+                Elements elementsByClass1 = element.getElementsByClass("topic__type-dry");
+                if (elementsByClass1.size() != 0) {
+                    Elements spans = elementsByClass1.get(0).getElementsByTag("span");
+                    String item = "";
+                    for (Element span : spans) {
+                        Elements labels = span.getElementsByTag("label");
+                        for (Element label : labels) {
+                            String text = label.text();
+                            //灏嗛鐩瓨搴�
+                            item = item + "------" + text;
+                        }
+                    }
+                    System.out.println("閫夐」锛� " + item);
+                }
+
+            }
+
+        }
+        System.out.println(i + "    " + b);
+
+        return null;
+    }
+
+    public static void main(String[] args) throws IOException {
+        explainHTML();
+    }
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
index f85c82c..e939194 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java
@@ -69,7 +69,7 @@
         try
         {
             String urlNameString = StringUtils.isNotBlank(param) ? url + "?" + param : url;
-            log.info("sendGet - {}", urlNameString);
+//            log.info("sendGet - {}", urlNameString);
             URL realUrl = new URL(urlNameString);
             URLConnection connection = realUrl.openConnection();
             connection.setRequestProperty("accept", "*/*");
@@ -82,7 +82,7 @@
             {
                 result.append(line);
             }
-            log.info("recv - {}", result);
+        //    log.info("recv - {}", result);
         }
         catch (ConnectException e)
         {
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index 7b4d3bb..6a0d547 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -108,7 +108,7 @@
                 // 杩囨护璇锋眰
                 .authorizeRequests()
                 // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶
-                .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo","/socket","/API_ESB_Service","/API_ESB_Service/Run").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage", "/qrcode/generateStaticHtml", "/qrcode/getQRcode", "/qrcode/getFormDate", "/chat", "/system/file/admin/uploadFile", "/smartor/dingtalk/sendNotification", "/patient/read/patientInfo","/socket","/API_ESB_Service","/API_ESB_Service/Run","/magic/web/**").permitAll()
                 // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
                 // 闄や笂闈㈠鐨勬墍鏈夎姹傚叏閮ㄩ渶瑕侀壌鏉冭璇�
diff --git a/smartor/pom.xml b/smartor/pom.xml
index 7babc73..081a1c8 100644
--- a/smartor/pom.xml
+++ b/smartor/pom.xml
@@ -77,6 +77,24 @@
             <artifactId>javase</artifactId>
             <version>3.5.1</version>
         </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.nls</groupId>
+            <artifactId>nls-sdk-recognizer</artifactId>
+            <version>2.2.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.alibaba.nls</groupId>
+            <artifactId>nls-sdk-recognizer</artifactId>
+            <version>2.2.1</version>
+            <scope>compile</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.nls</groupId>
+            <artifactId>nls-sdk-tts</artifactId>
+            <version>2.2.1</version>
+        </dependency>
     </dependencies>
 
 
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTopicdirection.java b/smartor/src/main/java/com/smartor/domain/SvyLibTopicdirection.java
new file mode 100644
index 0000000..4054891
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTopicdirection.java
@@ -0,0 +1,79 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆戝璞� svy_lib_topicdirection
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+public class SvyLibTopicdirection extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** $column.columnComment */
+    private Long id;
+
+    /** 棰樼洰琛╥d */
+    @Excel(name = "棰樼洰琛╥d")
+    private Long topicid;
+
+    /** 妯悜鐨� */
+    @Excel(name = "妯悜鐨�")
+    private String transverse;
+
+    /** 绾靛彿鐨� */
+    @Excel(name = "绾靛彿鐨�")
+    private String direction;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setTopicid(Long topicid) 
+    {
+        this.topicid = topicid;
+    }
+
+    public Long getTopicid() 
+    {
+        return topicid;
+    }
+    public void setTransverse(String transverse) 
+    {
+        this.transverse = transverse;
+    }
+
+    public String getTransverse() 
+    {
+        return transverse;
+    }
+    public void setDirection(String direction) 
+    {
+        this.direction = direction;
+    }
+
+    public String getDirection() 
+    {
+        return direction;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("topicid", getTopicid())
+            .append("transverse", getTransverse())
+            .append("direction", getDirection())
+            .toString();
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyLibTopicdirectionMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyLibTopicdirectionMapper.java
new file mode 100644
index 0000000..bd9dc95
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/SvyLibTopicdirectionMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import com.smartor.domain.SvyLibTopicdirection;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慚apper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+@Mapper
+public interface SvyLibTopicdirectionMapper {
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆�
+     */
+    public SvyLibTopicdirection selectSvyLibTopicdirectionById(Long id);
+
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
+     *
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆戦泦鍚�
+     */
+    public List<SvyLibTopicdirection> selectSvyLibTopicdirectionList(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int insertSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int updateSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 缁撴灉
+     */
+    public int deleteSvyLibTopicdirectionById(Long id);
+
+    /**
+     * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     *
+     * @param ids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSvyLibTopicdirectionByIds(Long[] ids);
+}
diff --git a/smartor/src/main/java/com/smartor/service/ISvyLibTopicdirectionService.java b/smartor/src/main/java/com/smartor/service/ISvyLibTopicdirectionService.java
new file mode 100644
index 0000000..3b8fb98
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/ISvyLibTopicdirectionService.java
@@ -0,0 +1,62 @@
+package com.smartor.service;
+
+import com.smartor.domain.SvyLibTopicdirection;
+
+import java.util.List;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice鎺ュ彛
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+public interface ISvyLibTopicdirectionService 
+{
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆�
+     */
+    public SvyLibTopicdirection selectSvyLibTopicdirectionById(Long id);
+
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆戦泦鍚�
+     */
+    public List<SvyLibTopicdirection> selectSvyLibTopicdirectionList(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int insertSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    public int updateSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection);
+
+    /**
+     * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑銆愯濉啓鍔熻兘鍚嶇О銆戜富閿泦鍚�
+     * @return 缁撴灉
+     */
+    public int deleteSvyLibTopicdirectionByIds(Long[] ids);
+
+    /**
+     * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆戜俊鎭�
+     * 
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 缁撴灉
+     */
+    public int deleteSvyLibTopicdirectionById(Long id);
+}
diff --git a/smartor/src/main/java/com/smartor/service/PersonVoiceService.java b/smartor/src/main/java/com/smartor/service/PersonVoiceService.java
new file mode 100644
index 0000000..59b7785
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/PersonVoiceService.java
@@ -0,0 +1,24 @@
+package com.smartor.service;
+
+import com.alibaba.nls.client.protocol.asr.SpeechRecognizerListener;
+
+/**
+ * 瀹f暀鍒嗙被Service鎺ュ彛
+ *
+ * @author smartor
+ * @date 2023-03-04
+ */
+public interface PersonVoiceService {
+    /**
+     * 涓�鍙ヨ瘽璇嗗埆
+     */
+    public String speechtotext(String filePath);
+
+
+    /**
+     * 涓�鍙ヨ瘽璇嗗埆
+     */
+    public String texttospeech(String textspeech);
+
+    public Boolean explainHTML();
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java
index 12aae85..b11049d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java
@@ -272,7 +272,7 @@
     }
 
 
-    public Client createClient() throws Exception {
+    private Client createClient() throws Exception {
         Config config = new Config()
                 // 蹇呭~锛屾偍鐨� AccessKey ID
                 .setAccessKeyId(this.accessKeyId)
diff --git a/smartor/src/main/java/com/smartor/service/impl/PersonVoiceServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/PersonVoiceServiceImpl.java
new file mode 100644
index 0000000..95fab99
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/PersonVoiceServiceImpl.java
@@ -0,0 +1,489 @@
+package com.smartor.service.impl;
+
+import com.alibaba.nls.client.AccessToken;
+import com.alibaba.nls.client.protocol.InputFormatEnum;
+import com.alibaba.nls.client.protocol.NlsClient;
+import com.alibaba.nls.client.protocol.OutputFormatEnum;
+import com.alibaba.nls.client.protocol.SampleRateEnum;
+import com.alibaba.nls.client.protocol.asr.SpeechRecognizer;
+import com.alibaba.nls.client.protocol.asr.SpeechRecognizerListener;
+import com.alibaba.nls.client.protocol.asr.SpeechRecognizerResponse;
+import com.alibaba.nls.client.protocol.tts.SpeechSynthesizer;
+import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerListener;
+import com.alibaba.nls.client.protocol.tts.SpeechSynthesizerResponse;
+import com.aliyun.dysmsapi20170525.Client;
+import com.aliyun.dysmsapi20170525.models.*;
+import com.aliyun.tea.TeaException;
+import com.aliyun.teaopenapi.models.Config;
+import com.aliyun.teautil.Common;
+import com.aliyun.teautil.models.RuntimeOptions;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.uuid.IdUtils;
+import com.smartor.domain.*;
+import com.smartor.mapper.*;
+import com.smartor.service.IBaseSmsaccountService;
+import com.smartor.service.ISvyLibTitleService;
+import com.smartor.service.PersonVoiceService;
+import lombok.extern.slf4j.Slf4j;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.*;
+import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.time.Instant;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * 鐭俊璐﹀彿Service涓氬姟灞傚鐞�
+ *
+ * @author smartor
+ * @date 2023-03-06
+ */
+@Slf4j
+@Service
+public class PersonVoiceServiceImpl implements PersonVoiceService {
+    @Value("${accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${accessKeySecret}")
+    private String accessKeySecret;
+
+    @Autowired
+    private SvyLibTitleMapper svyLibTitleMapper;
+
+    @Autowired
+    private SvyLibTopicMapper svyLibTopicMapper;
+
+    @Autowired
+    private SvyLibTopicdirectionMapper svyLibTopicdirectionMapper;
+
+    @Autowired
+    private SvyLibTopicoptionMapper svyLibTopicoptionMapper;
+//
+//    @Autowired
+//    private ISvyLibTitleService svyLibTitleService;
+
+    private NlsClient client;
+
+    private String appKey = "ZurNHpaQLq6P55YS";
+
+    private String returnResult = null;
+
+    String url = System.getenv().getOrDefault("NLS_GATEWAY_URL", "wss://nls-gateway-cn-shanghai.aliyuncs.com/ws/v1");
+
+
+    @Override
+    public String speechtotext(String filePath) {
+        this.accessToken();
+        this.process(filePath, 16000);
+        client.shutdown();
+        return returnResult;
+    }
+
+    @Override
+    public String texttospeech(String textspeech) {
+        this.accessToken();
+        this.process2(textspeech);
+        client.shutdown();
+        return returnResult;
+    }
+
+    @Override
+    public Boolean explainHTML() {
+        try {
+            explainHTML2();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return true;
+    }
+
+    public String explainHTML2() throws IOException {
+        String folderPath = "E:\\pc2";
+        // 鑾峰彇鏂囦欢澶逛笅鐨勬墍鏈夋枃浠�
+        File[] files = new File(folderPath).listFiles();
+        // 閬嶅巻鏂囦欢澶逛笅鐨勬墍鏈夋枃浠�
+        a:
+        for (File file : files) {
+            // 鑾峰彇鏂囦欢鍚�
+            String fileName = file.getName();
+            System.out.println(fileName);
+            // 鑾峰彇鏂囦欢鍐呭
+            String fileContent = new String(Files.readAllBytes(file.toPath()));
+
+            Document parse = Jsoup.parse(fileContent);
+
+            //淇濆瓨title
+            String title = parse.title();
+            SvyLibTitle svyLibTitle = new SvyLibTitle();
+//            svyLibTitle.setCategoryid(System.currentTimeMillis());
+            svyLibTitle.setSvyname(title);
+            svyLibTitle.setDelFlag("0");
+            svyLibTitle.setIsupload(0L);
+            svyLibTitleMapper.insertSvyLibTitle(svyLibTitle);
+
+            Element body = parse.body();
+            Elements elementsByClass = body.getElementsByClass("topic__type-body");
+            Elements children = elementsByClass.get(0).children();
+            for (Element element : children) {
+                int legend = element.select("legend").size();
+                if (legend == 0) {
+                    //璺宠繃璇ユ枃浠�
+                    noExpiain(fileName.substring(0, fileName.length() - 5), fileContent);
+                    continue a;
+                }
+                if (!element.getElementsByTag("legend").attr("class").equals("topic__type-title")) {
+                    //璺宠繃璇ユ枃浠�
+                    noExpiain(fileName.substring(0, fileName.length() - 5), fileContent);
+                    continue a;
+                }
+            }
+
+            for (Element element : children) {
+                //鑾峰彇棰樼洰
+                String legend = element.getElementsByTag("legend").text();
+                System.out.println("棰樼洰锛� " + legend);
+                //灏嗛鐩繚瀛樺埌琛ㄤ腑
+                SvyLibTopic svyLibTopic = new SvyLibTopic();
+                svyLibTopic.setSvyid(svyLibTitle.getSvyid());
+
+                //鍒ゆ柇璇ラ鐩笅鏄惁鏈夐�夐」
+                Elements elementsByClass1 = element.getElementsByClass("topic__type-dry");
+                if (elementsByClass1.size() != 0) {
+                    Elements spans = elementsByClass1.get(0).getElementsByTag("span");
+                    if (spans.size() != 0) {
+                        Elements radio__type = spans.get(0).getElementsByClass("radio__type");
+                        if (radio__type.size() != 0) {
+                            svyLibTopic.setTopictype(1L);
+                        } else {
+                            Elements checkbox__type = spans.get(0).getElementsByClass("checkbox__type");
+                            if (checkbox__type.size() != 0) {
+                                svyLibTopic.setTopictype(2L);
+                            }
+                        }
+
+                    }
+                    svyLibTopic.setTopiccode(IdUtils.simpleUUID());
+                    svyLibTopic.setTopic(legend);
+                    svyLibTopic.setDelFlag("0");
+                    svyLibTopic.setIsupload(0L);
+                    svyLibTopic.setOrgid(fileName);
+                    try {
+                        svyLibTopicMapper.insertSvyLibTopic(svyLibTopic);
+                    } catch (Exception e) {
+                        noExpiain(fileName.substring(0, fileName.length() - 5) + "鍑哄紓甯镐簡1", fileContent);
+                        continue a;
+                    }
+
+
+                    String item = "";
+                    Long i = 1L;
+                    for (Element span : spans) {
+                        Elements labels = span.getElementsByTag("label");
+                        for (Element label : labels) {
+                            String text = label.text();
+                            //灏嗛鐩瓨搴�
+//                            item = item + "------" + text;
+                            SvyLibTopicoption svyLibTopicoption = new SvyLibTopicoption();
+                            svyLibTopicoption.setTopicid(svyLibTopic.getTopicid());
+                            svyLibTopicoption.setSvyid(svyLibTitle.getSvyid());
+                            svyLibTopicoption.setSort(i);
+                            svyLibTopicoption.setOptioncode(IdUtils.simpleUUID());
+                            svyLibTopicoption.setOptioncontent(text);
+                            svyLibTopicoption.setDelFlag("0");
+                            svyLibTopicoption.setIsupload(0L);
+                            try {
+                                svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
+                            } catch (Exception e) {
+                                noExpiain(fileName.substring(0, fileName.length() - 5) + "鍑哄紓甯镐簡2", fileContent);
+                                continue a;
+                            }
+                            i++;
+                        }
+                    }
+                    System.out.println("閫夐」锛� " + item);
+                } else {
+
+                    //灏嗛鐩繚瀛樺埌琛ㄤ腑
+
+
+                    Elements elementsByClass2 = element.getElementsByClass("ui-control-group ui-matrix");
+                    if (elementsByClass2.size() > 0) {
+                        SvyLibTopic svyLibTopic2 = new SvyLibTopic();
+                        svyLibTopic2.setSvyid(svyLibTitle.getSvyid());
+                        svyLibTopic2.setTopiccode(IdUtils.simpleUUID());
+                        svyLibTopic2.setTopic(legend);
+                        svyLibTopic2.setDelFlag("0");
+                        svyLibTopic.setIsupload(0L);
+                        svyLibTopic2.setTopictype(4L);
+                        svyLibTopic2.setOrgid(fileName);
+                        try {
+                            svyLibTopicMapper.insertSvyLibTopic(svyLibTopic2);
+                        } catch (Exception e) {
+                            noExpiain(fileName.substring(0, fileName.length() - 5) + "鍑哄紓甯镐簡22", fileContent);
+                            continue a;
+                        }
+
+
+                        Elements lis = elementsByClass2.get(0).getElementsByTag("li");
+                        String transverse = "";
+                        for (Element element1 : lis) {
+                            transverse = transverse + element1.text() + "鈽�";
+                        }
+                        Elements title1 = elementsByClass2.get(0).getElementsByClass("title");
+                        String direction = "";
+                        for (Element ele : title1) {
+                            direction = direction + ele.text() + "鈽�";
+                        }
+                        SvyLibTopicdirection svyLibTopicdirection = new SvyLibTopicdirection();
+                        svyLibTopicdirection.setTopicid(svyLibTopic2.getTopicid());
+                        svyLibTopicdirection.setDirection(direction);
+                        svyLibTopicdirection.setTransverse(transverse);
+                        svyLibTopicdirectionMapper.insertSvyLibTopicdirection(svyLibTopicdirection);
+                    } else {
+
+
+                        //灏嗛鐩繚瀛樺埌琛ㄤ腑
+                        SvyLibTopic svyLibTopic3 = new SvyLibTopic();
+                        svyLibTopic3.setSvyid(svyLibTitle.getSvyid());
+                        svyLibTopic3.setTopiccode(IdUtils.simpleUUID());
+                        svyLibTopic3.setTopic(legend);
+                        svyLibTopic3.setDelFlag("0");
+                        svyLibTopic3.setIsupload(0L);
+                        svyLibTopic3.setTopictype(3L);
+                        svyLibTopic3.setOrgid(fileName);
+                        try {
+                            svyLibTopicMapper.insertSvyLibTopic(svyLibTopic3);
+                        } catch (Exception e) {
+                            noExpiain(fileName.substring(0, fileName.length() - 5) + "鍑哄紓甯镐簡33", fileContent);
+                            continue a;
+                        }
+                    }
+                }
+
+            }
+
+        }
+
+        return null;
+    }
+
+    private void noExpiain(String filename, String content) throws IOException {
+        File file = new File("E:\\noexplain\\" + filename + ".html");
+        FileWriter fileWriter = new FileWriter(file);
+        fileWriter.write(content);
+    }
+
+
+    public SpeechRecognizerListener getRecognizerListener(int myOrder, String userParam) {
+        SpeechRecognizerListener speechRecognizerListener = new SpeechRecognizerListener() {
+            @Override
+            public void onRecognitionResultChanged(SpeechRecognizerResponse response) {
+                //getName鏄幏鍙栦簨浠跺悕绉帮紝getStatus鏄幏鍙栫姸鎬佺爜锛実etRecognizedText鏄闊宠瘑鍒枃鏈��
+                System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", result: " + response.getRecognizedText());
+            }
+
+            //璇嗗埆瀹屾瘯
+            @Override
+            public void onRecognitionCompleted(SpeechRecognizerResponse response) {
+                //getName鏄幏鍙栦簨浠跺悕绉帮紝getStatus鏄幏鍙栫姸鎬佺爜锛実etRecognizedText鏄闊宠瘑鍒枃鏈��
+                returnResult = response.getRecognizedText();
+                System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", result: " + response.getRecognizedText());
+            }
+
+            @Override
+            public void onStarted(SpeechRecognizerResponse response) {
+                System.out.println("myOrder: " + myOrder + "; myParam: " + userParam + "; task_id: " + response.getTaskId());
+            }
+
+            @Override
+            public void onFail(SpeechRecognizerResponse response) {
+                //task_id鏄皟鐢ㄦ柟鍜屾湇鍔$閫氫俊鐨勫敮涓�鏍囪瘑锛屽綋閬囧埌闂鏃讹紝闇�瑕佹彁渚涙task_id銆�
+                System.out.println("task_id: " + response.getTaskId() + ", status: " + response.getStatus() + ", status_text: " + response.getStatusText());
+            }
+        };
+
+        return speechRecognizerListener;
+    }
+
+
+    public void accessToken() {
+        //搴旂敤鍏ㄥ眬鍒涘缓涓�涓狽lsClient瀹炰緥锛岄粯璁ゆ湇鍔″湴鍧�涓洪樋閲屼簯绾夸笂鏈嶅姟鍦板潃銆�
+        //鑾峰彇Token锛屽疄闄呬娇鐢ㄦ椂娉ㄦ剰鍦╝ccessToken.getExpireTime()杩囨湡鍓嶅啀娆¤幏鍙栥��
+        AccessToken accessToken = new AccessToken(accessKeyId, accessKeySecret);
+        try {
+            accessToken.apply();
+            System.out.println("get token: " + accessToken.getToken() + ", expire time: " + accessToken.getExpireTime());
+            if (url.isEmpty()) {
+                client = new NlsClient(accessToken.getToken());
+            } else {
+                client = new NlsClient(url, accessToken.getToken());
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    public void process(String filepath, int sampleRate) {
+        SpeechRecognizer recognizer = null;
+        try {
+            //浼犻�掔敤鎴疯嚜瀹氫箟鍙傛暟
+            String myParam = "user-param";
+            int myOrder = 1234;
+            SpeechRecognizerListener listener = getRecognizerListener(myOrder, myParam);
+            recognizer = new SpeechRecognizer(client, listener);
+            recognizer.setAppKey(appKey);
+            //璁剧疆闊抽缂栫爜鏍煎紡銆傚鏋滄槸OPUS鏂囦欢锛岃璁剧疆涓篒nputFormatEnum.OPUS銆�
+            recognizer.setFormat(InputFormatEnum.PCM);
+            //璁剧疆闊抽閲囨牱鐜�
+            if (sampleRate == 16000) {
+                recognizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
+            } else if (sampleRate == 8000) {
+                recognizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_8K);
+            }
+            //璁剧疆鏄惁杩斿洖涓棿璇嗗埆缁撴灉
+            recognizer.setEnableIntermediateResult(true);
+            //璁剧疆鏄惁鎵撳紑璇煶妫�娴嬶紙鍗硋ad锛�
+            recognizer.addCustomedParam("enable_voice_detection", true);
+            //姝ゆ柟娉曞皢浠ヤ笂鍙傛暟璁剧疆搴忓垪鍖栦负JSON鍙戦�佺粰鏈嶅姟绔紝骞剁瓑寰呮湇鍔$纭銆�
+            long now = System.currentTimeMillis();
+            recognizer.start();
+            log.info("ASR start latency : " + (System.currentTimeMillis() - now) + " ms");
+            File file = new File(filepath);
+            FileInputStream fis = new FileInputStream(file);
+            byte[] b = new byte[3200];
+            int len;
+            while ((len = fis.read(b)) > 0) {
+                log.info("send data pack length: " + len);
+                recognizer.send(b, len);
+                //鏈渚嬬敤璇诲彇鏈湴鏂囦欢鐨勫舰寮忔ā鎷熷疄鏃惰幏鍙栬闊虫祦锛屽洜涓鸿鍙栭�熷害杈冨揩锛岃繖閲岄渶瑕佽缃畇leep鏃堕暱銆�
+                // 濡傛灉瀹炴椂鑾峰彇璇煶鍒欐棤闇�璁剧疆sleep鏃堕暱锛屽鏋滄槸8k閲囨牱鐜囪闊崇浜屼釜鍙傛暟璁剧疆涓�8000銆�
+                int deltaSleep = getSleepDelta(len, sampleRate);
+//                Thread.sleep(deltaSleep);
+            }
+            //閫氱煡鏈嶅姟绔闊虫暟鎹彂閫佸畬姣曪紝绛夊緟鏈嶅姟绔鐞嗗畬鎴愩��
+            now = System.currentTimeMillis();
+            //璁$畻瀹為檯寤惰繜锛岃皟鐢╯top杩斿洖涔嬪悗涓�鑸嵆鏄瘑鍒粨鏋滆繑鍥炴椂闂淬��
+            log.info("ASR wait for complete");
+            recognizer.stop();
+            log.info("ASR stop latency : " + (System.currentTimeMillis() - now) + " ms");
+            fis.close();
+        } catch (Exception e) {
+            System.err.println(e.getMessage());
+        } finally {
+            //鍏抽棴杩炴帴
+            if (null != recognizer) {
+                recognizer.close();
+            }
+        }
+    }
+
+
+    public int getSleepDelta(int dataSize, int sampleRate) {
+        // 浠呮敮鎸�16浣嶉噰鏍枫��
+        int sampleBytes = 16;
+        // 浠呮敮鎸佸崟閫氶亾銆�
+        int soundChannel = 1;
+        return (dataSize * 10 * 8000) / (160 * sampleRate);
+    }
+
+
+    private SpeechSynthesizerListener getSynthesizerListener() {
+        SpeechSynthesizerListener listener = null;
+        try {
+            listener = new SpeechSynthesizerListener() {
+                File f = new File("tts_test.wav");
+                FileOutputStream fout = new FileOutputStream(f);
+                private boolean firstRecvBinary = true;
+
+                //璇煶鍚堟垚缁撴潫
+                @Override
+                public void onComplete(SpeechSynthesizerResponse response) {
+                    //璋冪敤onComplete鏃惰〃绀烘墍鏈塗TS鏁版嵁宸叉帴鏀跺畬鎴愶紝鍥犳涓烘暣涓悎鎴愭暟鎹殑寤惰繜銆傝寤惰繜鍙兘杈冨ぇ锛屼笉涓�瀹氭弧瓒冲疄鏃跺満鏅��
+                    System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", output file :" + f.getAbsolutePath());
+                }
+
+                //璇煶鍚堟垚鐨勮闊充簩杩涘埗鏁版嵁
+                @Override
+                public void onMessage(ByteBuffer message) {
+                    try {
+                        if (firstRecvBinary) {
+                            //璁$畻棣栧寘璇煶娴佺殑寤惰繜锛屾敹鍒扮涓�鍖呰闊虫祦鏃讹紝鍗冲彲浠ヨ繘琛岃闊虫挱鏀撅紝浠ユ彁鍗囧搷搴旈�熷害锛堢壒鍒槸瀹炴椂浜や簰鍦烘櫙涓嬶級銆�
+                            firstRecvBinary = false;
+                            long now = System.currentTimeMillis();
+//                            logger.info("tts first latency : " + (now - SpeechSynthesizerDemo.startTime) + " ms");
+                        }
+                        byte[] bytesArray = new byte[message.remaining()];
+                        message.get(bytesArray, 0, bytesArray.length);
+                        fout.write(bytesArray);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                    }
+                }
+
+                @Override
+                public void onFail(SpeechSynthesizerResponse response) {
+                    //task_id鏄皟鐢ㄦ柟鍜屾湇鍔$閫氫俊鐨勫敮涓�鏍囪瘑锛屽綋閬囧埌闂鏃堕渶瑕佹彁渚泃ask_id浠ヤ究鎺掓煡銆�
+                    System.out.println("task_id: " + response.getTaskId() +
+                            //鐘舵�佺爜 20000000 琛ㄧず璇嗗埆鎴愬姛
+                            ", status: " + response.getStatus() +
+                            //閿欒淇℃伅
+                            ", status_text: " + response.getStatusText());
+                }
+            };
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return listener;
+    }
+
+
+    public void process2(String text) {
+        SpeechSynthesizer synthesizer = null;
+        try {
+            //鍒涘缓瀹炰緥锛屽缓绔嬭繛鎺ャ��
+            synthesizer = new SpeechSynthesizer(client, getSynthesizerListener());
+            synthesizer.setAppKey(appKey);
+            //璁剧疆杩斿洖闊抽鐨勭紪鐮佹牸寮�
+            synthesizer.setFormat(OutputFormatEnum.WAV);
+            //璁剧疆杩斿洖闊抽鐨勯噰鏍风巼
+            synthesizer.setSampleRate(SampleRateEnum.SAMPLE_RATE_16K);
+            //鍙戦煶浜�
+            synthesizer.setVoice("siyue");
+            //璇皟锛岃寖鍥存槸-500~500锛屽彲閫夛紝榛樿鏄�0銆�
+            synthesizer.setPitchRate(100);
+            //璇�燂紝鑼冨洿鏄�-500~500锛岄粯璁ゆ槸0銆�
+            synthesizer.setSpeechRate(100);
+            //璁剧疆鐢ㄤ簬璇煶鍚堟垚鐨勬枃鏈�
+            synthesizer.setText(text);
+            // 鏄惁寮�鍚瓧骞曞姛鑳斤紙杩斿洖鐩稿簲鏂囨湰鐨勬椂闂存埑锛夛紝榛樿涓嶅紑鍚紝闇�瑕佹敞鎰忓苟闈炴墍鏈夊彂闊充汉閮芥敮鎸佽鍙傛暟銆�
+            synthesizer.addCustomedParam("enable_subtitle", false);
+            //姝ゆ柟娉曞皢浠ヤ笂鍙傛暟璁剧疆搴忓垪鍖栦负JSON鏍煎紡鍙戦�佺粰鏈嶅姟绔紝骞剁瓑寰呮湇鍔$纭銆�
+            long start = System.currentTimeMillis();
+            synthesizer.start();
+//            logger.info("tts start latency " + (System.currentTimeMillis() - start) + " ms");
+//            SpeechSynthesizerDemo.startTime = System.currentTimeMillis();
+            //绛夊緟璇煶鍚堟垚缁撴潫
+            synthesizer.waitForComplete();
+            log.info("tts stop latency " + (System.currentTimeMillis() - start) + " ms");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            //鍏抽棴杩炴帴
+            if (null != synthesizer) {
+                synthesizer.close();
+            }
+        }
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicdirectionServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicdirectionServiceImpl.java
new file mode 100644
index 0000000..867f5a3
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicdirectionServiceImpl.java
@@ -0,0 +1,94 @@
+package com.smartor.service.impl;
+
+import com.smartor.domain.SvyLibTopicdirection;
+import com.smartor.mapper.SvyLibTopicdirectionMapper;
+import com.smartor.service.ISvyLibTopicdirectionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 銆愯濉啓鍔熻兘鍚嶇О銆慡ervice涓氬姟灞傚鐞�
+ * 
+ * @author ruoyi
+ * @date 2023-11-28
+ */
+@Service
+public class SvyLibTopicdirectionServiceImpl implements ISvyLibTopicdirectionService
+{
+    @Autowired
+    private SvyLibTopicdirectionMapper svyLibTopicdirectionMapper;
+
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆�
+     */
+    @Override
+    public SvyLibTopicdirection selectSvyLibTopicdirectionById(Long id)
+    {
+        return svyLibTopicdirectionMapper.selectSvyLibTopicdirectionById(id);
+    }
+
+    /**
+     * 鏌ヨ銆愯濉啓鍔熻兘鍚嶇О銆戝垪琛�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 銆愯濉啓鍔熻兘鍚嶇О銆�
+     */
+    @Override
+    public List<SvyLibTopicdirection> selectSvyLibTopicdirectionList(SvyLibTopicdirection svyLibTopicdirection)
+    {
+        return svyLibTopicdirectionMapper.selectSvyLibTopicdirectionList(svyLibTopicdirection);
+    }
+
+    /**
+     * 鏂板銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection)
+    {
+        return svyLibTopicdirectionMapper.insertSvyLibTopicdirection(svyLibTopicdirection);
+    }
+
+    /**
+     * 淇敼銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param svyLibTopicdirection 銆愯濉啓鍔熻兘鍚嶇О銆�
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateSvyLibTopicdirection(SvyLibTopicdirection svyLibTopicdirection)
+    {
+        return svyLibTopicdirectionMapper.updateSvyLibTopicdirection(svyLibTopicdirection);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆�
+     * 
+     * @param ids 闇�瑕佸垹闄ょ殑銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSvyLibTopicdirectionByIds(Long[] ids)
+    {
+        return svyLibTopicdirectionMapper.deleteSvyLibTopicdirectionByIds(ids);
+    }
+
+    /**
+     * 鍒犻櫎銆愯濉啓鍔熻兘鍚嶇О銆戜俊鎭�
+     * 
+     * @param id 銆愯濉啓鍔熻兘鍚嶇О銆戜富閿�
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSvyLibTopicdirectionById(Long id)
+    {
+        return svyLibTopicdirectionMapper.deleteSvyLibTopicdirectionById(id);
+    }
+}
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibTopicdirectionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibTopicdirectionMapper.xml
new file mode 100644
index 0000000..43bf085
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibTopicdirectionMapper.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.smartor.mapper.SvyLibTopicdirectionMapper">
+    
+    <resultMap type="com.smartor.domain.SvyLibTopicdirection" id="SvyLibTopicdirectionResult">
+        <result property="id"    column="id"    />
+        <result property="topicid"    column="topicid"    />
+        <result property="transverse"    column="transverse"    />
+        <result property="direction"    column="direction"    />
+    </resultMap>
+
+    <sql id="selectSvyLibTopicdirectionVo">
+        select id, topicid, transverse, direction from svy_lib_topicdirection
+    </sql>
+
+    <select id="selectSvyLibTopicdirectionList" parameterType="com.smartor.domain.SvyLibTopicdirection" resultMap="SvyLibTopicdirectionResult">
+        <include refid="selectSvyLibTopicdirectionVo"/>
+        <where>  
+            <if test="topicid != null "> and topicid = #{topicid}</if>
+            <if test="transverse != null  and transverse != ''"> and transverse = #{transverse}</if>
+            <if test="direction != null  and direction != ''"> and direction = #{direction}</if>
+        </where>
+    </select>
+    
+    <select id="selectSvyLibTopicdirectionById" parameterType="Long" resultMap="SvyLibTopicdirectionResult">
+        <include refid="selectSvyLibTopicdirectionVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertSvyLibTopicdirection" parameterType="com.smartor.domain.SvyLibTopicdirection" useGeneratedKeys="true" keyProperty="id">
+        insert into svy_lib_topicdirection
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="topicid != null">topicid,</if>
+            <if test="transverse != null">transverse,</if>
+            <if test="direction != null">direction,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="topicid != null">#{topicid},</if>
+            <if test="transverse != null">#{transverse},</if>
+            <if test="direction != null">#{direction},</if>
+         </trim>
+    </insert>
+
+    <update id="updateSvyLibTopicdirection" parameterType="com.smartor.domain.SvyLibTopicdirection">
+        update svy_lib_topicdirection
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="topicid != null">topicid = #{topicid},</if>
+            <if test="transverse != null">transverse = #{transverse},</if>
+            <if test="direction != null">direction = #{direction},</if>
+        </trim>
+        where id = #{id}
+    </update>
+
+    <delete id="deleteSvyLibTopicdirectionById" parameterType="Long">
+        delete from svy_lib_topicdirection where id = #{id}
+    </delete>
+
+    <delete id="deleteSvyLibTopicdirectionByIds" parameterType="String">
+        delete from svy_lib_topicdirection where id in 
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3