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> 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); ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SendMessageIn.java
ÎļþÒÑɾ³ý ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/BaseSmsaccountController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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(); ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/DingTalkController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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; 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); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/tools/WeChatController.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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; 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"); ruoyi-admin/src/main/java/com/ruoyi/web/test/DingTalkService.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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; ruoyi-admin/src/main/java/com/ruoyi/web/test/WeChatService.java
ÎļþÃû´Ó ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/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; 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 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 # æ°æ®åºç´¢å¼ 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> 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; /** * è§£æ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(); } } 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) { ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -108,7 +108,7 @@ // è¿æ»¤è¯·æ± .authorizeRequests() // 对äºç»å½login 注åregister éªè¯ç captchaImage å 许å¿åè®¿é® .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() // é¤ä¸é¢å¤çææè¯·æ±å ¨é¨éè¦é´æè®¤è¯ 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> 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; /** é¢ç®è¡¨id */ @Excel(name = "é¢ç®è¡¨id") 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(); } } 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; /** * ã请填ååè½åç§°ãMapperæ¥å£ * * @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); } 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; /** * ã请填ååè½åç§°ãServiceæ¥å£ * * @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); } 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; /** * 宣æåç±»Serviceæ¥å£ * * @author smartor * @date 2023-03-04 */ public interface PersonVoiceService { /** * ä¸å¥è¯è¯å« */ public String speechtotext(String filePath); /** * ä¸å¥è¯è¯å« */ public String texttospeech(String textspeech); public Boolean explainHTML(); } 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) 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æ¯è·åç¶æç ï¼getRecognizedTextæ¯è¯é³è¯å«ææ¬ã System.out.println("name: " + response.getName() + ", status: " + response.getStatus() + ", result: " + response.getRecognizedText()); } //è¯å«å®æ¯ @Override public void onRecognitionCompleted(SpeechRecognizerResponse response) { //getNameæ¯è·åäºä»¶åç§°ï¼getStatusæ¯è·åç¶æç ï¼getRecognizedTextæ¯è¯é³è¯å«ææ¬ã 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() { //åºç¨å ¨å±å建ä¸ä¸ªNlsClientå®ä¾ï¼é»è®¤æå¡å°å为é¿éäºçº¿ä¸æå¡å°åã //è·åTokenï¼å®é ä½¿ç¨æ¶æ³¨æå¨accessToken.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æä»¶ï¼è¯·è®¾ç½®ä¸ºInputFormatEnum.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); //设置æ¯å¦æå¼è¯é³æ£æµï¼å³vadï¼ 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); //æ¬æ¡ä¾ç¨è¯»åæ¬å°æä»¶ç形弿¨¡æå®æ¶è·åè¯é³æµï¼å 为读åé度è¾å¿«ï¼è¿ééè¦è®¾ç½®sleepæ¶é¿ã // 妿宿¶è·åè¯é³åæ é设置sleepæ¶é¿ï¼å¦ææ¯8kéæ ·çè¯é³ç¬¬äºä¸ªåæ°è®¾ç½®ä¸º8000ã int deltaSleep = getSleepDelta(len, sampleRate); // Thread.sleep(deltaSleep); } //éç¥æå¡ç«¯è¯é³æ°æ®åé宿¯ï¼çå¾ æå¡ç«¯å¤ç宿ã now = System.currentTimeMillis(); //计ç®å®é å»¶è¿ï¼è°ç¨stopè¿åä¹åä¸è¬å³æ¯è¯å«ç»æè¿åæ¶é´ã 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æ¶è¡¨ç¤ºææTTSæ°æ®å·²æ¥æ¶å®æï¼å æ¤ä¸ºæ´ä¸ªåææ°æ®çå»¶è¿ã该延è¿å¯è½è¾å¤§ï¼ä¸ä¸å®æ»¡è¶³å®æ¶åºæ¯ã 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æ¯è°ç¨æ¹åæå¡ç«¯éä¿¡çå¯ä¸æ è¯ï¼å½éå°é®é¢æ¶éè¦æä¾task_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(); } } } } 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; /** * ã请填ååè½åç§°ãServiceä¸å¡å±å¤ç * * @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); } } 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>