From 429615c304035bf573297d69ce6a17e086e4f6fa Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期五, 07 七月 2023 17:26:56 +0800
Subject: [PATCH] 文件管理,在线聊天,短信代码提交,

---
 smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java                              |    6 
 smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java                          |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java      |   90 ++++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java    |   53 +
 ruoyi-common/src/main/java/com/ruoyi/common/utils/MinioClientUtils.java                  |    3 
 smartor/src/main/java/com/smartor/domain/SocketMessage.java                              |   25 +
 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/WebSocketConfig.java                 |   24 +
 smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java                             |   45 ++
 smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java            |  239 +++++++++++-
 smartor/pom.xml                                                                          |   22 +
 smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml                          |   95 +++-
 smartor/src/main/java/com/smartor/mapper/BaseSmsaccountMapper.java                       |   20 
 smartor/src/main/java/com/smartor/service/IBaseSmsaccountService.java                    |   83 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/BaseSmsaccountController.java |  157 ++++++-
 smartor/src/main/java/com/smartor/service/impl/MinioFileServiceImpl.java                 |    7 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/WeChatController.java         |    9 
 smartor/src/main/java/com/smartor/domain/BatchBaseSmsRequest.java                        |   41 ++
 ruoyi-admin/pom.xml                                                                      |   17 
 smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java                  |    8 
 smartor/src/main/java/com/smartor/service/IMinioFileService.java                         |    1 
 smartor/src/main/java/com/smartor/domain/WeChatSendVo.java                               |    9 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/DingTalkController.java       |   25 
 ruoyi-admin/src/main/resources/application-druid.yml                                     |   12 
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java                  |    2 
 smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java               |   33 +
 smartor/src/main/java/com/smartor/domain/SvyLibTopic.java                                |   14 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java             |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MinioFileController.java      |    2 
 smartor/src/main/java/com/smartor/domain/TemplateSmsRequest.java                         |   59 +++
 smartor/src/main/java/com/smartor/domain/SvyLibTitle.java                                |   11 
 30 files changed, 937 insertions(+), 179 deletions(-)

diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index dd37057..5308411 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -80,6 +80,11 @@
             <artifactId>core</artifactId>
             <version>2.0</version>
         </dependency>
+        <dependency>
+            <groupId>org.json</groupId>
+            <artifactId>json</artifactId>
+            <version>20210307</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -99,15 +104,15 @@
                     </execution>
                 </executions>
             </plugin>
-            <plugin>   
-                <groupId>org.apache.maven.plugins</groupId>   
-                <artifactId>maven-war-plugin</artifactId>   
-                <version>3.1.0</version>   
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>3.1.0</version>
                 <configuration>
                     <failOnMissingWebXml>false</failOnMissingWebXml>
                     <warName>${project.artifactId}</warName>
-                </configuration>   
-           </plugin>   
+                </configuration>
+           </plugin>
         </plugins>
         <finalName>${project.artifactId}</finalName>
     </build>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java
new file mode 100644
index 0000000..678eec7
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/hanler/ChatWebSocketHandler.java
@@ -0,0 +1,90 @@
+package com.ruoyi.web.controller.hanler;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.smartor.domain.SocketMessage;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.web.socket.BinaryMessage;
+import org.springframework.web.socket.CloseStatus;
+import org.springframework.web.socket.TextMessage;
+import org.springframework.web.socket.WebSocketSession;
+import org.springframework.web.socket.handler.AbstractWebSocketHandler;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Component
+public class ChatWebSocketHandler extends AbstractWebSocketHandler {
+
+    // 鐢ㄤ簬瀛樺偍鐢ㄦ埛ID鍜學ebSocketSession鐨勬槧灏勫叧绯�
+    private static Map<String, WebSocketSession> sessions = new ConcurrentHashMap<>();
+
+
+    @Override
+    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
+        // 鑾峰彇鐢ㄦ埛ID锛屽彲浠ヤ粠session涓幏鍙栨垨鑰呴�氳繃鍏朵粬鏂瑰紡鑾峰彇
+        String userId = extractUserId(session);
+
+        // 灏嗙敤鎴稩D鍜學ebSocketSession瀛樺偍鍒版槧灏勮〃涓�
+        sessions.put(userId, session);
+
+    }
+
+    @Override
+    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
+        // 澶勭悊鏀跺埌鐨勬秷鎭�
+        String userId = extractUserId(session);
+        String payload = message.getPayload().toString();
+        log.info("-----------------锛歿}", payload);
+        // 瑙f瀽娑堟伅绫诲瀷
+        ObjectMapper mapper = new ObjectMapper();
+        SocketMessage parsedMessage = mapper.readValue(payload, SocketMessage.class);
+        if (parsedMessage != null) {
+            sendMessageToUser(parsedMessage.getUserId(), parsedMessage.getContent());
+        }
+
+    }
+
+    @Override
+    protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) throws Exception {
+        log.info("鍙戦�佷簩杩涘埗");
+    }
+
+    @Override
+    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
+        // 鍏抽棴杩炴帴鏃讹紝浠庢槧灏勮〃涓Щ闄ゅ搴旂殑鐢ㄦ埛ID鍜學ebSocketSession
+        String userId = extractUserId(session);
+        sessions.remove(userId);
+    }
+
+    @Override
+    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
+        // 澶勭悊浼犺緭閿欒锛屼緥濡傝繛鎺ユ柇寮�鎴栧彂鐢熷紓甯�
+        String userId = extractUserId(session);
+        sessions.remove(userId);
+    }
+
+    @Override
+    public boolean supportsPartialMessages() {
+        // 鏀寔閮ㄥ垎娑堟伅澶勭悊
+        return false;
+    }
+
+    private String extractUserId(WebSocketSession session) {
+        // 鍦ㄥ疄闄呮儏鍐典笅锛屼綘鍙互鏍规嵁闇�瑕佷粠session涓彁鍙栫敤鎴稩D锛屽彲浠ョ洿鎺ユ嬁褰撳墠鐧婚檯浜虹殑userId
+        String userId = session.getUri().getQuery().split("=")[1];
+//        return session.getAttributes().get("userId").toString();
+        return userId;
+    }
+
+    private void sendMessageToUser(String userId, String message) throws IOException {
+        WebSocketSession session = sessions.get(userId);
+        if (session != null && session.isOpen()) {
+            session.sendMessage(new TextMessage(message));
+        }
+    }
+
+
+}
\ 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/BaseSmsaccountController.java
index cefbdfe..abc76de 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/BaseSmsaccountController.java
@@ -1,36 +1,36 @@
-package com.smartor.controller;
+package com.ruoyi.web.controller.smartor;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
-import org.springframework.web.bind.annotation.DeleteMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
-import com.ruoyi.common.enums.BusinessType;
-import com.smartor.domain.BaseSmsaccount;
-import com.smartor.service.IBaseSmsaccountService;
-import com.ruoyi.common.utils.poi.ExcelUtil;
 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.IBaseSmsaccountService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
 
 /**
  * 鐭俊璐﹀彿Controller
- * 
+ *
  * @author smartor
  * @date 2023-03-06
  */
+@Api(description = "鐭俊")
 @RestController
 @RequestMapping("/smartor/smsaccount")
-public class BaseSmsaccountController extends BaseController
-{
+public class BaseSmsaccountController extends BaseController {
     @Autowired
     private IBaseSmsaccountService baseSmsaccountService;
 
@@ -39,8 +39,7 @@
      */
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:list')")
     @GetMapping("/list")
-    public TableDataInfo list(BaseSmsaccount baseSmsaccount)
-    {
+    public TableDataInfo list(BaseSmsaccount baseSmsaccount) {
         startPage();
         List<BaseSmsaccount> list = baseSmsaccountService.selectBaseSmsaccountList(baseSmsaccount);
         return getDataTable(list);
@@ -52,8 +51,7 @@
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:export')")
     @Log(title = "鐭俊璐﹀彿", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
-    public void export(HttpServletResponse response, BaseSmsaccount baseSmsaccount)
-    {
+    public void export(HttpServletResponse response, BaseSmsaccount baseSmsaccount) {
         List<BaseSmsaccount> list = baseSmsaccountService.selectBaseSmsaccountList(baseSmsaccount);
         ExcelUtil<BaseSmsaccount> util = new ExcelUtil<BaseSmsaccount>(BaseSmsaccount.class);
         util.exportExcel(response, list, "鐭俊璐﹀彿鏁版嵁");
@@ -64,8 +62,7 @@
      */
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:query')")
     @GetMapping(value = "/{smsacountid}")
-    public AjaxResult getInfo(@PathVariable("smsacountid") Long smsacountid)
-    {
+    public AjaxResult getInfo(@PathVariable("smsacountid") Long smsacountid) {
         return success(baseSmsaccountService.selectBaseSmsaccountBySmsacountid(smsacountid));
     }
 
@@ -75,8 +72,7 @@
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:add')")
     @Log(title = "鐭俊璐﹀彿", businessType = BusinessType.INSERT)
     @PostMapping
-    public AjaxResult add(@RequestBody BaseSmsaccount baseSmsaccount)
-    {
+    public AjaxResult add(@RequestBody BaseSmsaccount baseSmsaccount) {
         return toAjax(baseSmsaccountService.insertBaseSmsaccount(baseSmsaccount));
     }
 
@@ -86,8 +82,7 @@
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:edit')")
     @Log(title = "鐭俊璐﹀彿", businessType = BusinessType.UPDATE)
     @PutMapping
-    public AjaxResult edit(@RequestBody BaseSmsaccount baseSmsaccount)
-    {
+    public AjaxResult edit(@RequestBody BaseSmsaccount baseSmsaccount) {
         return toAjax(baseSmsaccountService.updateBaseSmsaccount(baseSmsaccount));
     }
 
@@ -96,9 +91,105 @@
      */
     @PreAuthorize("@ss.hasPermi('smartor:smsaccount:remove')")
     @Log(title = "鐭俊璐﹀彿", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{smsacountids}")
-    public AjaxResult remove(@PathVariable Long[] smsacountids)
-    {
+    @DeleteMapping("/{smsacountids}")
+    public AjaxResult remove(@PathVariable Long[] smsacountids) {
         return toAjax(baseSmsaccountService.deleteBaseSmsaccountBySmsacountids(smsacountids));
     }
+
+
+    /**
+     * 鐭俊鍙戦��
+     */
+    @ApiOperation("鐭俊鍙戦��")
+    @PostMapping("/sendMsg")
+    public AjaxResult sendMsg(@RequestBody BaseSmsRequest baseSmsRequest) {
+        if (baseSmsaccountService.sendMsg(baseSmsRequest) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.sendMsg(baseSmsRequest));
+    }
+
+    /**
+     * 鎵归噺鐭俊鍙戦��
+     */
+    @ApiOperation("鎵归噺鐭俊鍙戦��")
+    @PostMapping("/batchSendMsg")
+    public AjaxResult batchSendMsg(@RequestBody BatchBaseSmsRequest batchBaseSmsRequest) {
+        if (baseSmsaccountService.batchSendMsg(batchBaseSmsRequest) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.batchSendMsg(batchBaseSmsRequest));
+    }
+
+    /**
+     * 鏂板鐭俊妯℃澘
+     *
+     * @param templateSmsRequest
+     * @return
+     */
+    @PostMapping("/addSmsTemplate")
+    public AjaxResult addSmsTemplate(@RequestBody TemplateSmsRequest templateSmsRequest) {
+        if (baseSmsaccountService.addSmsTemplate(templateSmsRequest) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.addSmsTemplate(templateSmsRequest));
+    }
+
+    /**
+     * 鍒犻櫎鐭俊妯℃澘
+     *
+     * @param templateCode
+     * @return
+     */
+    @GetMapping("/delSmsTemplate")
+    public AjaxResult delSmsTemplate(@ApiParam("templateCode") String templateCode) {
+        if (baseSmsaccountService.delSmsTemplate(templateCode) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.delSmsTemplate(templateCode));
+    }
+
+    /**
+     * 淇敼瀹℃牳鏈�氳繃鐨勬ā鏉�
+     *
+     * @param templateSmsRequest
+     * @return
+     */
+    @PostMapping("/updateSmsTemplate")
+    public AjaxResult updateSmsTemplate(@RequestBody TemplateSmsRequest templateSmsRequest) {
+        if (baseSmsaccountService.updateSmsTemplate(templateSmsRequest) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.updateSmsTemplate(templateSmsRequest));
+    }
+
+    /**
+     * 鏌ヨ鐭俊妯℃澘鍒楄〃
+     *
+     * @param pageIndex pageSize
+     * @return
+     */
+    @ApiOperation("鏌ヨ鐭俊妯℃澘")
+    @GetMapping("/querySmsTemplate")
+    public AjaxResult querySmsTemplateList(@ApiParam("pageIndex") Integer pageIndex, @ApiParam("pageSize") Integer pageSize) {
+        if (baseSmsaccountService.querySmsTemplate(pageIndex, pageSize) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.querySmsTemplate(pageIndex, pageSize));
+    }
+
+    /**
+     * 鏌ヨ鐭俊妯℃澘瀹℃牳鐘舵��
+     *
+     * @param templateCode
+     * @return
+     */
+    @GetMapping("/querySmsTemplateStatus")
+    public AjaxResult querySmsTemplateStatus(@ApiParam("templateCode") String templateCode) {
+        if (baseSmsaccountService.querySmsTemplateStatus(templateCode) == null) {
+            return error();
+        }
+        return success(baseSmsaccountService.querySmsTemplateStatus(templateCode));
+    }
+
 }
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/DingTalkController.java
index 118f53b..e2d943a 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/DingTalkController.java
@@ -1,34 +1,26 @@
 package com.ruoyi.web.controller.smartor;
 
-import com.alibaba.fastjson2.JSONArray;
-import com.alibaba.fastjson2.JSONObject;
-import com.dingtalk.api.DefaultDingTalkClient;
-import com.dingtalk.api.DingTalkClient;
-import com.dingtalk.api.request.OapiGettokenRequest;
-import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
-import com.dingtalk.api.request.OapiUserListidRequest;
-import com.dingtalk.api.response.OapiGettokenResponse;
-import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
-import com.dingtalk.api.response.OapiUserListidResponse;
 import com.ruoyi.common.core.controller.BaseController;
 import com.smartor.domain.DingTalkReqVo;
 import com.smartor.service.DingTalkService;
 import com.taobao.api.ApiException;
-import org.apache.commons.lang3.StringUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.PropertySource;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
- * 寰俊鎺ュ彛
+ * 閽夐拤鎺ュ彛
  *
  * @author liusheng
  * @date 2023-05-15
  */
+@Api(description = "閽夐拤鎺ュ彛")
 @RestController
 @RequestMapping("/smartor/dingtalk")
 @PropertySource(value = {"classpath:application-druid.yml"})
@@ -49,6 +41,7 @@
      * @param dingTalkReqVo 鍙戦�佸唴瀹�
      * @throws ApiException
      */
+    @ApiOperation("鍙戦�侀拤閽夋秷鎭�")
     @PostMapping("/sendNotification")
     public void sendNotification(@RequestBody DingTalkReqVo dingTalkReqVo) throws ApiException {
         dingTalkService.sendNotification(dingTalkReqVo);
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MinioFileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MinioFileController.java
index 87f8f92..4c902d2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MinioFileController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/MinioFileController.java
@@ -106,7 +106,7 @@
     @ResponseBody
     @ApiOperation(value = "涓婁紶鏂囦欢鍒版枃浠剁鐞�,鏀寔鎵归噺涓婁紶")
     @ApiImplicitParam(name = "files", value = "鏂囦欢瀵硅薄", dataType = "File")
-    public AjaxResult commonUploadFile(@RequestParam("path") String path, @RequestParam("files") List<MultipartFile> files) {
+    public AjaxResult commonUploadFile(@RequestParam(value = "path",required = false) String path, @RequestParam("files") List<MultipartFile> files) {
         if (CollectionUtils.isEmpty(files)) {
             return error("鏈�夋嫨鏂囦欢锛�");
         }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java
index 062f98d..a3640f1 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java
@@ -1,5 +1,8 @@
 package com.ruoyi.web.controller.smartor;
 
+import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
+import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
+import com.aliyun.teaopenapi.models.Config;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
@@ -33,26 +36,13 @@
      * 鏌ヨ闂嵎鍒楄〃
      */
     @ApiOperation("鏌ヨ闂嵎鍒楄〃")
-    @PreAuthorize("@ss.hasPermi('smartor:svytitle:list')")
-    @GetMapping("/selectSvyLibTitlelist")
-    public TableDataInfo selectSvyLibTitlelist(SvyLibTitleReq svyLibTitleReq) {
+    @PostMapping("/selectSvyLibTitlelist")
+    public TableDataInfo selectSvyLibTitlelist(@RequestBody SvyLibTitleReq svyLibTitleReq) {
         startPage();
         List<SvyLibTitle> list = svyLibTitleService.selectSvyLibTitleList(svyLibTitleReq);
         return getDataTable(list);
     }
 
-//    /**
-//     * 瀵煎嚭闂嵎鍒楄〃
-//     */
-//    @PreAuthorize("@ss.hasPermi('smartor:svytitle:export')")
-//    @Log(title = "闂嵎", businessType = BusinessType.EXPORT)
-//    @PostMapping("/export")
-//    public void export(HttpServletResponse response, SvyLibTitle svyLibTitle)
-//    {
-//        List<SvyLibTitle> list = svyLibTitleService.selectSvyLibTitleList(svyLibTitle);
-//        ExcelUtil<SvyLibTitle> util = new ExcelUtil<SvyLibTitle>(SvyLibTitle.class);
-//        util.exportExcel(response, list, "闂嵎鏁版嵁");
-//    }
 
     /**
      * 鑾峰彇闂嵎璇︾粏淇℃伅
@@ -67,7 +57,6 @@
      * 鏂板闂嵎
      */
     @ApiOperation("鏂板闂嵎")
-    @PreAuthorize("@ss.hasPermi('smartor:svytitle:add')")
     @PostMapping("/addSvyLibTitle")
     public AjaxResult addSvyLibTitle(@RequestBody SvyLibTitle svyLibTitle) {
         return toAjax(svyLibTitleService.insertSvyLibTitle(svyLibTitle));
@@ -93,6 +82,38 @@
         return toAjax(svyLibTitleService.deleteSvyLibTitleBySvyids(svyids));
     }
 
+    /**
+     * 鍙戦�佺煭淇�
+     */
+    @PreAuthorize("@ss.hasPermi('smartor:svytitle:remove')")
+    @Log(title = "闂嵎", businessType = BusinessType.DELETE)
+    @PostMapping("/sendMessage")
+    public AjaxResult sendMessage(@PathVariable Long[] svyids) {
+        String accessKeyId = "your_access_key_id";
+        String accessKeySecret = "your_access_key_secret";
+
+        // 鍒涘缓Config瀵硅薄锛岄厤缃樋閲屼簯SDK
+        Config config = new Config()
+                .setAccessKeyId(accessKeyId)
+                .setAccessKeySecret(accessKeySecret);
+
+        // 鍒涘缓SendSmsRequest瀵硅薄锛岃缃煭淇$浉鍏冲弬鏁�
+        SendSmsRequest request = new SendSmsRequest()
+                .setPhoneNumbers("鎵嬫満鍙风爜")
+                .setSignName("鐭俊绛惧悕")
+                .setTemplateCode("鐭俊妯℃澘Code")
+                .setTemplateParam("{\"code\":\"123456\"}"); // 璁剧疆鐭俊妯℃澘涓殑鍙傛暟鍊�
+
+//        try {
+//            // 璋冪敤闃块噷浜慡DK鍙戦�佺煭淇�
+//            SendSmsResponse response = SendSms.getResponse(config, request);
+//            System.out.println("鍙戦�佺煭淇℃垚鍔燂紝RequestId: " + response.getRequestId());
+//        } catch (Exception e) {
+//            System.err.println("鍙戦�佺煭淇″け璐ワ細" + e.getMessage());
+//        }
+        return toAjax(svyLibTitleService.deleteSvyLibTitleBySvyids(svyids));
+    }
+
 
 }
 
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/WeChatController.java
index 991a5ba..df021f2 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/WeChatController.java
@@ -4,6 +4,8 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.controller.BaseController;
 import com.smartor.domain.WeChatSendVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import me.chanjar.weixin.common.exception.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpInMemoryConfigStorage;
 import me.chanjar.weixin.mp.api.WxMpService;
@@ -28,9 +30,10 @@
  * @author liusheng
  * @date 2023-05-15
  */
+@Api(description = "寰俊鎺ュ彛")
 @RestController
 @RequestMapping("/smartor/wechat")
-@PropertySource(value = { "classpath:application-druid.yml" })
+@PropertySource(value = {"classpath:application-druid.yml"})
 public class WeChatController extends BaseController {
 
     @Value("${appid}")
@@ -45,6 +48,7 @@
      *
      * @return
      */
+    @ApiOperation("鑾峰彇妯℃澘淇℃伅")
     @GetMapping("/getTemplateList")
     public JSONArray getTemplateList() {
         String url = "https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=" + getAccessToken();
@@ -67,6 +71,7 @@
      * @param weChatSendVo
      * @return
      */
+    @ApiOperation("寰俊鍏紬鍙蜂俊鎭彂閫�")
     @PostMapping("/sendMessageToFollowers")
     public Boolean sendMessageToFollowers(@RequestBody WeChatSendVo weChatSendVo) {
         WxMpService wxMpService;
@@ -91,7 +96,6 @@
     }
 
 
-
     /**
      * 鑾峰彇 access_token
      */
@@ -108,7 +112,6 @@
             return null;
         }
     }
-    //  }
 
 
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/WebSocketConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/WebSocketConfig.java
new file mode 100644
index 0000000..e2f7bbe
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/WebSocketConfig.java
@@ -0,0 +1,24 @@
+package com.ruoyi.web.core.config;
+
+import com.ruoyi.web.controller.hanler.ChatWebSocketHandler;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.config.annotation.EnableWebSocket;
+import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
+import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
+
+@Configuration
+@EnableWebSocket
+public class WebSocketConfig implements WebSocketConfigurer {
+
+    private final ChatWebSocketHandler chatWebSocketHandler;
+
+    public WebSocketConfig(ChatWebSocketHandler chatWebSocketHandler) {
+        this.chatWebSocketHandler = chatWebSocketHandler;
+    }
+
+    @Override
+    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
+        registry.addHandler(new ChatWebSocketHandler(), "/chat").setAllowedOrigins("*");
+    }
+
+}
diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml
index d74ce0a..444a453 100644
--- a/ruoyi-admin/src/main/resources/application-druid.yml
+++ b/ruoyi-admin/src/main/resources/application-druid.yml
@@ -63,4 +63,14 @@
 
 #閽夐拤鐨勫瘑閽�
 dingAppid: dingn8iip5ubj7clrrsv
-dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
\ No newline at end of file
+dingAppSecret: qlEK8D3oOVwGPOTiBQIBYTqQVlAfy9S_qQizEQFjJdSScwemWFryg4gbneu-NqWD
+
+# websocket瓒呮椂鏃堕棿
+server:
+  websocket:
+    timeout=60000:
+
+
+accessKeyId: LTAI4G5zjJRkun2eRdzU8GhR
+accessKeySecret: 6EIRr9uZeRobvHBRqskyGwjTLKpHYv
+signName: 鏉窞鍒╂箹绉戞妧
\ No newline at end of file
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MinioClientUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MinioClientUtils.java
index a17e253..c8cabf4 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MinioClientUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MinioClientUtils.java
@@ -22,6 +22,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Component
 @Slf4j
@@ -319,7 +320,7 @@
                 throw new InvalidExpiresRangeException(expires, "expires must be in range of 1 to " + DEFAULT_EXPIRY_TIME);
             }
             try {
-                url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).expiry(expires)//鍔ㄦ�佸弬鏁�
+                url = minioClient.getPresignedObjectUrl(GetPresignedObjectUrlArgs.builder().method(Method.GET).bucket(bucketName).object(objectName).expiry(expires, TimeUnit.SECONDS)//鍔ㄦ�佸弬鏁�
                         //                       .expiry(24 * 60 * 60)//鐢ㄧ鏉ヨ绠椾竴澶╂椂闂存湁鏁堟湡
 //                        .expiry(1, TimeUnit.DAYS)//鎸夊ぉ浼犲弬
 //                        .expiry(1, TimeUnit.HOURS)//鎸夊皬鏃朵紶鍙傛暟
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 ff1fe21..07ac7c9 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
@@ -111,7 +111,7 @@
                 // 杩囨护璇锋眰
                 .authorizeRequests()
                 // 瀵逛簬鐧诲綍login 娉ㄥ唽register 楠岃瘉鐮乧aptchaImage 鍏佽鍖垮悕璁块棶
-                .antMatchers("/login", "/register", "/captchaImage","/qrcode/generateStaticHtml","/qrcode/getQRcode","/qrcode/getFormDate").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage","/qrcode/generateStaticHtml","/qrcode/getQRcode","/qrcode/getFormDate","/chat","/system/file/admin/uploadFile").permitAll()
                 // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
index 13d49d6..bbf5be4 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
@@ -2,12 +2,14 @@
 
 import java.util.List;
 import com.ruoyi.system.domain.SysConfig;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 鍙傛暟閰嶇疆 鏁版嵁灞�
  * 
  * @author ruoyi
  */
+@Mapper
 public interface SysConfigMapper
 {
     /**
diff --git a/smartor/pom.xml b/smartor/pom.xml
index 91f3996..7babc73 100644
--- a/smartor/pom.xml
+++ b/smartor/pom.xml
@@ -16,8 +16,28 @@
     </description>
 
     <dependencies>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>ecs20140526</artifactId>
+            <version>3.1.12</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>dysmsapi20170525</artifactId>
+            <version>2.0.24</version>
+        </dependency>
 
-
+        <!--  V1.0 SDK  -->
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-core</artifactId>
+            <version>4.6.3</version>
+        </dependency>
+        <dependency>
+            <groupId>com.aliyun</groupId>
+            <artifactId>aliyun-java-sdk-ecs</artifactId>
+            <version>4.24.59</version>
+        </dependency>
         <!-- 閫氱敤宸ュ叿-->
         <dependency>
             <groupId>com.ruoyi</groupId>
diff --git a/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java b/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java
new file mode 100644
index 0000000..2a659db
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/BaseSmsRequest.java
@@ -0,0 +1,45 @@
+package com.smartor.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.util.Date;
+
+/**
+ * 鐭俊璐﹀彿瀵硅薄 base_smsaccount
+ *
+ * @author smartor
+ * @date 2023-03-06
+ */
+@Data
+@ApiModel(value = "BaseSmsRequest", description = "鐭俊璇锋眰淇℃伅")
+public class BaseSmsRequest extends BaseEntity {
+
+    /**
+     * 鏍囩鍚嶇О
+     */
+    @ApiModelProperty(value = "鎵嬫満鍙�(鎺ユ敹鏂�)")
+    private String phoneNumber;
+
+    /**
+     * 鐭俊妯℃澘CODE
+     */
+    @ApiModelProperty(value = "妯℃澘ID")
+    private String templateCode;
+
+
+    /**
+     * 鐭俊妯℃澘鍙橀噺瀵瑰簲鐨勫疄闄呭��
+     * 鏀寔浼犲叆澶氫釜鍙傛暟锛岀ず渚嬶細{"name":"寮犱笁","number":"1390000****"}
+     * 濡傛灉JSON涓渶瑕佸甫鎹㈣绗︼紝璇峰弬鐓ф爣鍑嗙殑JSON鍗忚澶勭悊銆�
+     */
+    @ApiModelProperty(value = "鐭俊妯℃澘鍙橀噺瀵瑰簲鐨勫疄闄呭�硷紝绀轰緥锛歿\"name\":\"寮犱笁\",\"number\":\"1390000****\"}")
+    private String templateParam;
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/BatchBaseSmsRequest.java b/smartor/src/main/java/com/smartor/domain/BatchBaseSmsRequest.java
new file mode 100644
index 0000000..f654871
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/BatchBaseSmsRequest.java
@@ -0,0 +1,41 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 鐭俊鎵归噺璇锋眰淇℃伅 base_smsaccount
+ *
+ * @author smartor
+ * @date 2023-03-06
+ */
+@Data
+@ApiModel(value = "BatchBaseSmsRequest", description = "鐭俊鎵归噺璇锋眰淇℃伅")
+public class BatchBaseSmsRequest extends BaseEntity {
+
+    /**
+     * 鏍囩鍚嶇О
+     */
+    @ApiModelProperty(value = "鎵嬫満鍙烽泦鍚�(鎺ユ敹鏂�)")
+    private List<String> phoneNumber;
+
+    /**
+     * 鐭俊妯℃澘CODE
+     */
+    @ApiModelProperty(value = "妯℃澘ID")
+    private String templateCode;
+
+
+    /**
+     * 鐭俊妯℃澘鍙橀噺瀵瑰簲鐨勫疄闄呭��
+     * 鏀寔浼犲叆澶氫釜鍙傛暟锛岀ず渚嬶細{"name":"寮犱笁","number":"1390000****"}
+     * 濡傛灉JSON涓渶瑕佸甫鎹㈣绗︼紝璇峰弬鐓ф爣鍑嗙殑JSON鍗忚澶勭悊銆�
+     */
+    @ApiModelProperty(value = "鐭俊妯℃澘鍙橀噺瀵瑰簲鐨勫疄闄呭�硷紝绀轰緥锛歿\"name\":\"寮犱笁\",\"number\":\"1390000****\"}")
+    private String templateParam;
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java b/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
index 6a925cb..9d195b5 100644
--- a/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
+++ b/smartor/src/main/java/com/smartor/domain/DingTalkReqVo.java
@@ -3,6 +3,8 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.annotation.Excel;
 import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -17,20 +19,24 @@
  * @date 2023-05-25
  */
 @Data
+@ApiModel(value = "DingTalkReqVo", description = "閽夐拤娑堟伅鍙戦��")
 public class DingTalkReqVo extends BaseEntity {
 
     /**
      * 鍙戦�佸唴瀹�
      */
+    @ApiModelProperty(value = "鍙戦�佸唴瀹�")
     private List<String> contents;
 
     /**
      * 鐢ㄦ埛閽夐拤鍙�
      */
+    @ApiModelProperty(value = "鐢ㄦ埛閽夐拤鍙�")
     private String userId;
 
     /**
      * 閮ㄩ棬ID
      */
+    @ApiModelProperty(value = "閮ㄩ棬ID")
     private String deptId;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/SocketMessage.java b/smartor/src/main/java/com/smartor/domain/SocketMessage.java
new file mode 100644
index 0000000..c502cb1
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/SocketMessage.java
@@ -0,0 +1,25 @@
+package com.smartor.domain;
+
+import lombok.Data;
+
+@Data
+public class SocketMessage {
+    //鍙戦�佸唴绌虹殑绫诲瀷锛坱ext,image锛�
+    private String type;
+    //鍐呭锛堝彂閫佺殑鏂囨湰鍐呭锛�
+    private String content;
+    //鐢ㄦ埛ID锛堟帴鏀舵斁锛�
+    private String userId;
+    //鍥剧墖
+    private String image;
+    //鍥剧墖锛岄煶銆佽棰戠殑瀛楄妭澶у皬
+    private Integer fileSize;
+
+    public SocketMessage(String type, String content) {
+        this.type = type;
+        this.content = content;
+    }
+
+    public SocketMessage() {
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java b/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
index aa7f05d..2bc21b6 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
@@ -20,9 +20,8 @@
  * @date 2023-03-02
  */
 @Data
-@ApiModel(value = "MinioResponseDTO", description = "鏍囩鍒嗙被瀵硅薄")
+@ApiModel(value = "SvyLibTitle", description = "闂嵎瀵硅薄")
 public class SvyLibTitle extends BaseEntity {
-    private static final long serialVersionUID = 1L;
 
     /**
      * 鑷ID
@@ -33,7 +32,7 @@
     /**
      * 闂嵎鍒嗙被ID
      */
-    @ApiModelProperty(value = "闂嵎鍒嗙被ID")
+    @ApiModelProperty(value = "闂嵎鍒嗙被ID", required = true)
     @Excel(name = " 闂嵎鍒嗙被ID ")
     private Long categoryid;
 
@@ -47,14 +46,14 @@
     /**
      * 闂嵎鍚嶇О
      */
-    @ApiModelProperty(value = "闂嵎鍚嶇О")
+    @ApiModelProperty(value = "闂嵎鍚嶇О", required = true)
     @Excel(name = " 闂嵎鍚嶇О ")
     private String svyname;
 
     /**
      * 鎻忚堪
      */
-    @ApiModelProperty(value = "鎻忚堪")
+    @ApiModelProperty(value = "鎻忚堪", required = true)
     @Excel(name = " 鎻忚堪 ")
     private String description;
 
@@ -162,6 +161,8 @@
     private List<SvyLibTopic> svyLibTopics;
 
 
+    public SvyLibTitle() {
+    }
 
     public SvyLibTitle(Long svyid, String icdname) {
         this.svyid = svyid;
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTopic.java b/smartor/src/main/java/com/smartor/domain/SvyLibTopic.java
index 34e3da8..e808487 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibTopic.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTopic.java
@@ -1,6 +1,7 @@
 package com.smartor.domain;
 
 import java.util.Date;
+import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -113,8 +114,13 @@
     private Date uploadTime;
 
 
-    @Override
-    public String toString() {
-        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("topicid", getTopicid()).append("oldid", getOldid()).append("svyid", getSvyid()).append("topictype", getTopictype()).append("topiccode", getTopiccode()).append("topic", getTopic()).append("sort", getSort()).append("ismandatory", getIsmandatory()).append("ishide", getIshide()).append("delFlag", getDelFlag()).append("orgid", getOrgid()).append("createBy", getCreateBy()).append("createTime", getCreateTime()).append("updateBy", getUpdateBy()).append("updateTime", getUpdateTime()).append("isupload", getIsupload()).append("uploadTime", getUploadTime()).toString();
-    }
+    /**
+     * svy_topic棰樼洰琛ㄧ殑涓婚敭ID
+     */
+    @ApiModelProperty("棰樼洰琛ㄧ殑涓婚敭ID")
+    private Long svyTopicId;
+
+
+    @ApiModelProperty("闂閫夐」")
+    private List<SvyTopicoption> svyTopicoptions;
 }
diff --git a/smartor/src/main/java/com/smartor/domain/TemplateSmsRequest.java b/smartor/src/main/java/com/smartor/domain/TemplateSmsRequest.java
new file mode 100644
index 0000000..d4327ec
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/TemplateSmsRequest.java
@@ -0,0 +1,59 @@
+package com.smartor.domain;
+
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * TemplateSmsRequest base_smsaccount
+ *
+ * @author smartor
+ * @date 2023-03-06
+ */
+@Data
+@ApiModel(value = "TemplateSmsRequest", description = "鐭俊妯℃澘璇锋眰淇℃伅")
+public class TemplateSmsRequest extends BaseEntity {
+
+    /**
+     *
+     * 鎻忚堪锛� 鐭俊绫诲瀷銆傚彇鍊硷細
+     *
+     * 0锛氶獙璇佺爜銆�
+     * 1锛氱煭淇¢�氱煡銆�
+     * 2锛氭帹骞跨煭淇°��
+     * 3锛氬浗闄�/娓境鍙版秷鎭��
+     */
+    @ApiModelProperty(value = "妯℃澘绫诲瀷 0锛氶獙璇佺爜 1锛氱煭淇¢�氱煡 2锛氭帹骞跨煭淇� 3锛氬浗闄�/娓境鍙版秷鎭�")
+    private Integer templateType;
+
+    /**
+     *
+     * 鎻忚堪: 妯℃澘鍚嶇О锛岄暱搴︿笉瓒呰繃30涓瓧绗︺��
+     *
+     * 绀轰緥鍊�: 闃块噷浜戠煭淇℃祴璇曟ā鏉�
+     */
+    @ApiModelProperty(value = "妯℃澘鍚嶇О锛岄暱搴︿笉瓒呰繃30涓瓧绗�")
+    private String templateName;
+
+
+    /**
+     *
+     * 鎻忚堪: 妯℃澘鍐呭锛岄暱搴︿笉瓒呰繃500涓瓧绗︺�傛洿澶氳鑼冿紝璇峰弬瑙佹ā鏉垮唴瀹硅鑼冦��
+     *
+     * 绀轰緥鍊�:鎮ㄦ鍦ㄧ敵璇锋墜鏈烘敞鍐岋紝楠岃瘉鐮佷负锛�${code}锛�5鍒嗛挓鍐呮湁鏁�
+     */
+    @ApiModelProperty(value = "妯℃澘鍐呭锛岄暱搴︿笉瓒呰繃500涓瓧绗︺�傛洿澶氳鑼冿紝璇峰弬瑙佹ā鏉垮唴瀹硅鑼�")
+    private String templateContent;
+
+    /**
+     * 鎻忚堪: 鐭俊妯℃澘鐢宠璇存槑锛屾槸妯℃澘瀹℃牳鐨勫弬鑰冧俊鎭箣涓�銆傞暱搴︿笉瓒呰繃100涓瓧绗︺��
+     *
+     * 绀轰緥鍊�: 鎴夸骇閿�鍞�
+     */
+    @ApiModelProperty(value = "鐭俊妯℃澘鐢宠璇存槑锛屾槸妯℃澘瀹℃牳鐨勫弬鑰冧俊鎭箣涓�銆傞暱搴︿笉瓒呰繃100涓瓧绗�")
+    private String remark;
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java b/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java
index 8b35549..4d8af6c 100644
--- a/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java
+++ b/smartor/src/main/java/com/smartor/domain/WeChatSendVo.java
@@ -1,17 +1,20 @@
 package com.smartor.domain;
 
 import com.ruoyi.common.annotation.Excel;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.util.Map;
 
 @Data
+@ApiModel(value = "WeChatSendVo", description = "寰俊娑堟伅鍙戦��")
 public class WeChatSendVo {
 
     /**
      * 妯℃澘ID
      */
-    @Excel(name = " 妯℃澘ID ")
+    @ApiModelProperty(value = "妯℃澘ID")
     String templateId;
 
     /**
@@ -21,13 +24,13 @@
      * 鈥渒eyword1鈥濓細鈥�......鈥�
      * }]
      */
-    @Excel(name = " 鍙戦�佸唴瀹� ")
+    @ApiModelProperty(value = "鍙戦�佸唴瀹�")
     Map<String, Object> content;
 
     /**
      * 璺宠浆URL
      */
-    @Excel(name = " 璺宠浆URL ")
+    @ApiModelProperty(value = "璺宠浆URL")
     String url;
 
 }
diff --git a/smartor/src/main/java/com/smartor/mapper/BaseSmsaccountMapper.java b/smartor/src/main/java/com/smartor/mapper/BaseSmsaccountMapper.java
index 22d29a8..eb9f260 100644
--- a/smartor/src/main/java/com/smartor/mapper/BaseSmsaccountMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/BaseSmsaccountMapper.java
@@ -1,19 +1,21 @@
 package com.smartor.mapper;
 
 import java.util.List;
+
 import com.smartor.domain.BaseSmsaccount;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 鐭俊璐﹀彿Mapper鎺ュ彛
- * 
+ *
  * @author smartor
  * @date 2023-03-06
  */
-public interface BaseSmsaccountMapper 
-{
+@Mapper
+public interface BaseSmsaccountMapper {
     /**
      * 鏌ヨ鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 鐭俊璐﹀彿
      */
@@ -21,7 +23,7 @@
 
     /**
      * 鏌ヨ鐭俊璐﹀彿鍒楄〃
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 鐭俊璐﹀彿闆嗗悎
      */
@@ -29,7 +31,7 @@
 
     /**
      * 鏂板鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
@@ -37,7 +39,7 @@
 
     /**
      * 淇敼鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
@@ -45,7 +47,7 @@
 
     /**
      * 鍒犻櫎鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 缁撴灉
      */
@@ -53,7 +55,7 @@
 
     /**
      * 鎵归噺鍒犻櫎鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
      * @return 缁撴灉
      */
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
index af1fd94..77032a6 100644
--- a/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
@@ -25,7 +25,7 @@
     /**
      * 鏌ヨ闂嵎鍒楄〃
      *
-     * @param svyLibTitle 闂嵎
+     * @param svyLibTitleReq 闂嵎
      * @return 闂嵎闆嗗悎
      */
     public List<SvyLibTitle> selectSvyLibTitleList(SvyLibTitleReq svyLibTitleReq);
diff --git a/smartor/src/main/java/com/smartor/service/IBaseSmsaccountService.java b/smartor/src/main/java/com/smartor/service/IBaseSmsaccountService.java
index 8ca0692..13cff97 100644
--- a/smartor/src/main/java/com/smartor/service/IBaseSmsaccountService.java
+++ b/smartor/src/main/java/com/smartor/service/IBaseSmsaccountService.java
@@ -1,19 +1,26 @@
 package com.smartor.service;
 
 import java.util.List;
+import java.util.Map;
+
+import com.aliyun.dysmsapi20170525.models.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.smartor.domain.BaseSmsRequest;
 import com.smartor.domain.BaseSmsaccount;
+import com.smartor.domain.BatchBaseSmsRequest;
+import com.smartor.domain.TemplateSmsRequest;
+import org.springframework.web.bind.annotation.PathVariable;
 
 /**
  * 鐭俊璐﹀彿Service鎺ュ彛
- * 
+ *
  * @author smartor
  * @date 2023-03-06
  */
-public interface IBaseSmsaccountService 
-{
+public interface IBaseSmsaccountService {
     /**
      * 鏌ヨ鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 鐭俊璐﹀彿
      */
@@ -21,7 +28,7 @@
 
     /**
      * 鏌ヨ鐭俊璐﹀彿鍒楄〃
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 鐭俊璐﹀彿闆嗗悎
      */
@@ -29,7 +36,7 @@
 
     /**
      * 鏂板鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
@@ -37,7 +44,7 @@
 
     /**
      * 淇敼鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
@@ -45,7 +52,7 @@
 
     /**
      * 鎵归噺鍒犻櫎鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountids 闇�瑕佸垹闄ょ殑鐭俊璐﹀彿涓婚敭闆嗗悎
      * @return 缁撴灉
      */
@@ -53,9 +60,67 @@
 
     /**
      * 鍒犻櫎鐭俊璐﹀彿淇℃伅
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 缁撴灉
      */
     public int deleteBaseSmsaccountBySmsacountid(Long smsacountid);
+
+    /**
+     * 鐭俊鍙戦��
+     *
+     * @param baseSmsRequest
+     * @return
+     */
+    public SendSmsResponseBody sendMsg(BaseSmsRequest baseSmsRequest);
+
+
+    /**
+     * 鎵归噺鐭俊鍙戦��
+     *
+     * @param batchBaseSmsRequest
+     * @return
+     */
+    public SendBatchSmsResponseBody batchSendMsg(BatchBaseSmsRequest batchBaseSmsRequest);
+
+    /**
+     * 鏂板鐭俊妯℃澘
+     *
+     * @param templateSmsRequest
+     * @return
+     */
+    public AddSmsTemplateResponseBody addSmsTemplate(TemplateSmsRequest templateSmsRequest);
+
+    /**
+     * 鍒犻櫎鐭俊妯℃澘
+     *
+     * @param templateCode
+     * @return
+     */
+    public ModifySmsTemplateResponseBody delSmsTemplate(String templateCode);
+
+    /**
+     * 淇敼瀹℃牳鏈�氳繃鐨勬ā鏉�
+     *
+     * @param templateSmsRequest
+     * @return
+     */
+    public ModifySmsTemplateResponseBody updateSmsTemplate(TemplateSmsRequest templateSmsRequest);
+
+    /**
+     * 鏌ヨ妯℃澘鍒楄〃
+     *
+     * @param pageIndex , pageSize
+     * @return
+     */
+    public QuerySmsTemplateListResponseBody querySmsTemplate(Integer pageIndex, Integer pageSize);
+
+    /**
+     * 鏌ヨ鐭俊妯℃澘瀹℃牳鐘舵��
+     *
+     * @param templateCode
+     * @return
+     */
+    public QuerySmsTemplateResponseBody querySmsTemplateStatus(String templateCode);
+
 }
diff --git a/smartor/src/main/java/com/smartor/service/IMinioFileService.java b/smartor/src/main/java/com/smartor/service/IMinioFileService.java
index 4eb2a6f..4c3e023 100644
--- a/smartor/src/main/java/com/smartor/service/IMinioFileService.java
+++ b/smartor/src/main/java/com/smartor/service/IMinioFileService.java
@@ -6,7 +6,6 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
-import java.io.InputStream;
 import java.util.List;
 
 /**
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 ff65db8..12aae85 100644
--- a/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/BaseSmsaccountServiceImpl.java
@@ -1,96 +1,285 @@
 package com.smartor.service.impl;
 
-import java.util.List;
+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 org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import com.smartor.mapper.BaseSmsaccountMapper;
+import com.smartor.domain.BaseSmsRequest;
 import com.smartor.domain.BaseSmsaccount;
+import com.smartor.domain.BatchBaseSmsRequest;
+import com.smartor.domain.TemplateSmsRequest;
+import com.smartor.mapper.BaseSmsaccountMapper;
 import com.smartor.service.IBaseSmsaccountService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * 鐭俊璐﹀彿Service涓氬姟灞傚鐞�
- * 
+ *
  * @author smartor
  * @date 2023-03-06
  */
 @Service
-public class BaseSmsaccountServiceImpl implements IBaseSmsaccountService 
-{
+public class BaseSmsaccountServiceImpl implements IBaseSmsaccountService {
     @Autowired
     private BaseSmsaccountMapper baseSmsaccountMapper;
 
+    @Value("${accessKeyId}")
+    private String accessKeyId;
+
+    @Value("${accessKeySecret}")
+    private String accessKeySecret;
+
+    @Value("${signName}")
+    private String signName;
+
     /**
      * 鏌ヨ鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 鐭俊璐﹀彿
      */
     @Override
-    public BaseSmsaccount selectBaseSmsaccountBySmsacountid(Long smsacountid)
-    {
+    public BaseSmsaccount selectBaseSmsaccountBySmsacountid(Long smsacountid) {
         return baseSmsaccountMapper.selectBaseSmsaccountBySmsacountid(smsacountid);
     }
 
     /**
      * 鏌ヨ鐭俊璐﹀彿鍒楄〃
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 鐭俊璐﹀彿
      */
     @Override
-    public List<BaseSmsaccount> selectBaseSmsaccountList(BaseSmsaccount baseSmsaccount)
-    {
+    public List<BaseSmsaccount> selectBaseSmsaccountList(BaseSmsaccount baseSmsaccount) {
         return baseSmsaccountMapper.selectBaseSmsaccountList(baseSmsaccount);
     }
 
     /**
      * 鏂板鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
     @Override
-    public int insertBaseSmsaccount(BaseSmsaccount baseSmsaccount)
-    {
+    public int insertBaseSmsaccount(BaseSmsaccount baseSmsaccount) {
         baseSmsaccount.setCreateTime(DateUtils.getNowDate());
         return baseSmsaccountMapper.insertBaseSmsaccount(baseSmsaccount);
     }
 
     /**
      * 淇敼鐭俊璐﹀彿
-     * 
+     *
      * @param baseSmsaccount 鐭俊璐﹀彿
      * @return 缁撴灉
      */
     @Override
-    public int updateBaseSmsaccount(BaseSmsaccount baseSmsaccount)
-    {
+    public int updateBaseSmsaccount(BaseSmsaccount baseSmsaccount) {
         baseSmsaccount.setUpdateTime(DateUtils.getNowDate());
         return baseSmsaccountMapper.updateBaseSmsaccount(baseSmsaccount);
     }
 
     /**
      * 鎵归噺鍒犻櫎鐭俊璐﹀彿
-     * 
+     *
      * @param smsacountids 闇�瑕佸垹闄ょ殑鐭俊璐﹀彿涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteBaseSmsaccountBySmsacountids(Long[] smsacountids)
-    {
+    public int deleteBaseSmsaccountBySmsacountids(Long[] smsacountids) {
         return baseSmsaccountMapper.deleteBaseSmsaccountBySmsacountids(smsacountids);
     }
 
     /**
      * 鍒犻櫎鐭俊璐﹀彿淇℃伅
-     * 
+     *
      * @param smsacountid 鐭俊璐﹀彿涓婚敭
      * @return 缁撴灉
      */
     @Override
-    public int deleteBaseSmsaccountBySmsacountid(Long smsacountid)
-    {
+    public int deleteBaseSmsaccountBySmsacountid(Long smsacountid) {
         return baseSmsaccountMapper.deleteBaseSmsaccountBySmsacountid(smsacountid);
     }
+
+
+    /**
+     * 鐭俊鍙戦��
+     *
+     * @param baseSmsRequest
+     * @return
+     */
+    @Override
+    public SendSmsResponseBody sendMsg(BaseSmsRequest baseSmsRequest) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            SendSmsRequest sendSmsRequest = new SendSmsRequest().setPhoneNumbers(baseSmsRequest.getPhoneNumber()).setSignName(this.signName).setTemplateCode(baseSmsRequest.getTemplateCode()).setTemplateParam(baseSmsRequest.getTemplateParam());
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            SendSmsResponse sendSmsResponse = client.sendSmsWithOptions(sendSmsRequest, new RuntimeOptions());
+            return sendSmsResponse.getBody();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * 鎵归噺鍙戦�佺煭淇�
+     *
+     * @param batchBaseSmsRequest
+     * @return
+     */
+    public SendBatchSmsResponseBody batchSendMsg(BatchBaseSmsRequest batchBaseSmsRequest) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            List<String> signNameJson = new ArrayList<>();
+            for (int i = 0; i < batchBaseSmsRequest.getPhoneNumber().size(); i++) {
+                signNameJson.add("\"" + this.signName + "\"");
+            }
+            SendBatchSmsRequest sendBatchSmsRequest = new SendBatchSmsRequest().setSignNameJson(signNameJson.toString()).setPhoneNumberJson(batchBaseSmsRequest.getPhoneNumber().toString()).setTemplateCode(batchBaseSmsRequest.getTemplateCode());
+            RuntimeOptions runtime = new RuntimeOptions();
+            try {
+                // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+                SendBatchSmsResponse sendBatchSmsResponse = client.sendBatchSmsWithOptions(sendBatchSmsRequest, runtime);
+                return sendBatchSmsResponse.getBody();
+            } catch (TeaException error) {
+                // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+                com.aliyun.teautil.Common.assertAsString(error.message);
+            } catch (Exception _error) {
+                TeaException error = new TeaException(_error.getMessage(), _error);
+                // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+                Common.assertAsString(error.message);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    @Override
+    public AddSmsTemplateResponseBody addSmsTemplate(TemplateSmsRequest templateSmsRequest) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            AddSmsTemplateRequest addSmsTemplateRequest = new AddSmsTemplateRequest().setTemplateType(templateSmsRequest.getTemplateType()).setTemplateName(templateSmsRequest.getTemplateName()).setTemplateContent(templateSmsRequest.getTemplateContent()).setRemark(templateSmsRequest.getRemark());
+            RuntimeOptions runtime = new RuntimeOptions();
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            AddSmsTemplateResponse addSmsTemplateResponse = client.addSmsTemplateWithOptions(addSmsTemplateRequest, runtime);
+            return addSmsTemplateResponse.getBody();
+        } catch (TeaException error) {
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+    @Override
+    public ModifySmsTemplateResponseBody delSmsTemplate(String templateCode) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            ModifySmsTemplateRequest modifySmsTemplateRequest = new ModifySmsTemplateRequest();
+            modifySmsTemplateRequest.setTemplateCode(templateCode);
+            RuntimeOptions runtime = new RuntimeOptions();
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            ModifySmsTemplateResponse modifySmsTemplateResponse = client.modifySmsTemplateWithOptions(modifySmsTemplateRequest, runtime);
+            return modifySmsTemplateResponse.getBody();
+        } catch (TeaException error) {
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            com.aliyun.teautil.Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+    @Override
+    public ModifySmsTemplateResponseBody updateSmsTemplate(TemplateSmsRequest templateSmsRequest) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            ModifySmsTemplateRequest modifySmsTemplateRequest = new ModifySmsTemplateRequest().setTemplateType(1).setTemplateName("AAA").setTemplateCode("SMS_279456451").setTemplateContent("ASD").setRemark("ASFD");
+            RuntimeOptions runtime = new RuntimeOptions();
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            ModifySmsTemplateResponse modifySmsTemplateResponse = client.modifySmsTemplateWithOptions(modifySmsTemplateRequest, runtime);
+            return modifySmsTemplateResponse.getBody();
+        } catch (TeaException error) {
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+    @Override
+    public QuerySmsTemplateListResponseBody querySmsTemplate(Integer pageIndex, Integer pageSize) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            QuerySmsTemplateListRequest querySmsTemplateListRequest = new QuerySmsTemplateListRequest().setPageIndex(pageIndex).setPageSize(pageSize);
+            RuntimeOptions runtime = new RuntimeOptions();
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            QuerySmsTemplateListResponse querySmsTemplateListResponse = client.querySmsTemplateListWithOptions(querySmsTemplateListRequest, runtime);
+            return querySmsTemplateListResponse.getBody();
+        } catch (TeaException error) {
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+    @Override
+    public QuerySmsTemplateResponseBody querySmsTemplateStatus(String templateCode) {
+        Client client = null;
+        try {
+            client = this.createClient();
+            QuerySmsTemplateRequest querySmsTemplateRequest = new QuerySmsTemplateRequest().setTemplateCode(templateCode);
+            RuntimeOptions runtime = new RuntimeOptions();
+            // 澶嶅埗浠g爜杩愯璇疯嚜琛屾墦鍗� API 鐨勮繑鍥炲��
+            QuerySmsTemplateResponse querySmsTemplateResponse = client.querySmsTemplateWithOptions(querySmsTemplateRequest, runtime);
+            return querySmsTemplateResponse.getBody();
+        } catch (TeaException error) {
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        } catch (Exception _error) {
+            TeaException error = new TeaException(_error.getMessage(), _error);
+            // 濡傛湁闇�瑕侊紝璇锋墦鍗� error
+            Common.assertAsString(error.message);
+        }
+        return null;
+    }
+
+
+    public Client createClient() throws Exception {
+        Config config = new Config()
+                // 蹇呭~锛屾偍鐨� AccessKey ID
+                .setAccessKeyId(this.accessKeyId)
+                // 蹇呭~锛屾偍鐨� AccessKey Secret
+                .setAccessKeySecret(this.accessKeySecret);
+        // 璁块棶鐨勫煙鍚�
+        config.endpoint = "dysmsapi.aliyuncs.com";
+        return new Client(config);
+    }
 }
diff --git a/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
index 5d7c820..423b906 100644
--- a/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/DingTalkServiceImpl.java
@@ -14,6 +14,7 @@
 import com.smartor.service.DingTalkService;
 import com.smartor.service.IntelligenceCenterService;
 import com.taobao.api.ApiException;
+import lombok.extern.log4j.Log4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
@@ -27,6 +28,7 @@
  * @date 2023-05-23
  */
 @Service
+@Log4j
 public class DingTalkServiceImpl implements DingTalkService {
 
 
@@ -39,7 +41,7 @@
     @Override
     public Boolean sendNotification(DingTalkReqVo dingTalkReqVo) {
         Boolean result = false;
-        // Log.info("鍙戦�侀拤閽夐�氱煡");
+        log.info("鍙戦�侀拤閽夐�氱煡");
         String accessToken = null;
         try {
             accessToken = getAccessToken();
@@ -85,8 +87,8 @@
 
             OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
             msg.setOa(new OapiMessageCorpconversationAsyncsendV2Request.OA());
-            msg.getOa().setMessageUrl("www.baidu.com");
-            msg.getOa().setPcMessageUrl("www.baidu.com");
+            msg.getOa().setMessageUrl("https://www.baidu.com");
+            msg.getOa().setPcMessageUrl("https://www.baidu.com");
             msg.getOa().setHead(new OapiMessageCorpconversationAsyncsendV2Request.Head());
             msg.getOa().getHead().setText("寰呭姙浜嬪疁");
             msg.getOa().getHead().setBgcolor("00409eff");
diff --git a/smartor/src/main/java/com/smartor/service/impl/MinioFileServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/MinioFileServiceImpl.java
index 18b54f1..32f580a 100644
--- a/smartor/src/main/java/com/smartor/service/impl/MinioFileServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/MinioFileServiceImpl.java
@@ -23,6 +23,7 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.time.Instant;
+import java.time.Year;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -116,6 +117,8 @@
         log.info(files.toString());
         if (StringUtils.isNotEmpty(path) && !path.endsWith("/")) {
             path = path + "/";
+        } else {
+            path = Year.now().getValue() + "鍏跺畠/";
         }
 
         List<MinioResponseDTO> MinioResponseDTOList = new ArrayList<>();
@@ -136,7 +139,9 @@
                 String bucketName = minioConfig.getBucketName();
                 minioClientUtils.putObject(bucketName, file, path + originalFilename);
 //                String fileUrl = minioClientUtils.getObjectUrl(bucketName, path + originalFilename);
-                String fileUrl = path + originalFilename;
+                // String fileUrl = path + originalFilename;
+                //url鍙互浣跨敤涓�鍛�
+                String fileUrl = getFileUrl(path + originalFilename, 6);
                 MinioFile minioFile = new MinioFile();
                 minioFile.setOriginalFileName(originalFilename);
                 minioFile.setFileExtName(extName);
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java
index d871d26..03b1226 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java
@@ -5,17 +5,15 @@
 
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DtoConversionUtils;
-import com.smartor.domain.Icd10Association;
-import com.smartor.domain.SvyLibTitleReq;
-import com.smartor.domain.SvyLibTopic;
+import com.smartor.domain.*;
 import com.smartor.mapper.Icd10AssociationMapper;
 import com.smartor.mapper.SvyLibTopicMapper;
+import com.smartor.mapper.SvyTopicoptionMapper;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.smartor.mapper.SvyLibTitleMapper;
-import com.smartor.domain.SvyLibTitle;
 import com.smartor.service.ISvyLibTitleService;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -33,6 +31,8 @@
     private Icd10AssociationMapper icd10AssociationMapper;
     @Autowired
     private SvyLibTopicMapper svyLibTopicMapper;
+    @Autowired
+    private SvyTopicoptionMapper svyTopicoptionMapper;
 
     /**
      * 鏌ヨ闂嵎
@@ -54,6 +54,29 @@
     @Override
     public List<SvyLibTitle> selectSvyLibTitleList(SvyLibTitleReq svyLibTitleReq) {
         List<SvyLibTitle> svyLibTitles = svyLibTitleMapper.selectSvyLibTitleList(svyLibTitleReq);
+        //娣诲姞棰樼洰
+        for (int i = 0; i < svyLibTitles.size(); i++) {
+            SvyLibTopic svyLibTopic = new SvyLibTopic();
+            svyLibTopic.setSvyid(svyLibTitles.get(i).getSvyid());
+            List<SvyLibTopic> svyLibTopics = svyLibTopicMapper.selectSvyLibTopicList(svyLibTopic);
+            //鑾峰彇棰樼洰閫夐」
+            a:
+            for (int j = 0; j < svyLibTopics.size(); j++) {
+                if (svyLibTopics.get(j).getTopictype() == 3) {
+                    //浣滅瓟棰橈紝涓嶉渶瑕侀�夐」
+                    continue a;
+                } else {
+                    SvyTopicoption svyTopicoption = new SvyTopicoption();
+                    svyTopicoption.setTopicid(svyLibTopics.get(j).getSvyTopicId());
+                    List<SvyTopicoption> svyTopicoptions = svyTopicoptionMapper.selectSvyTopicoptionList(svyTopicoption);
+                    //灏嗘煡璇㈠嚭鐨勯�夐」鐩斁鍒伴鐩腑
+                    svyLibTopics.get(j).setSvyTopicoptions(svyTopicoptions);
+                }
+            }
+            //灏嗛鐩斁鍒伴棶鍗峰垪琛ㄤ腑
+            svyLibTitles.get(i).setSvyLibTopics(svyLibTopics);
+        }
+
         //鍏堝皢鐩稿悓鐨刬d鐨刬cdname,鏁寸悊鍒颁竴鍧�
         List<SvyLibTitle> libTitles = svyLibTitles.stream().collect(Collectors.groupingBy(SvyLibTitle::getSvyid, Collectors.mapping(SvyLibTitle::getIcdname, Collectors.joining(", ")))).entrySet().stream().map(entry -> new SvyLibTitle(entry.getKey(), entry.getValue())).collect(Collectors.toList());
         //涓存椂鍙橀噺锛岀敤鏉ヤ繚瀛樼柧鐥呭悕绉�
@@ -93,6 +116,8 @@
         //鏂板闂棰樼洰
         for (int i = 0; i < svyLibTitle.getSvyLibTopics().size(); i++) {
             SvyLibTopic svyLibTopic = svyLibTitle.getSvyLibTopics().get(i);
+            svyLibTopic.setSvyid(svyLibTitle.getSvyid());
+            //棰樼洰鐨勯�夐」鐩紝鐩存帴鐢╯vy_topicoption琛紝鐢╯vyTopicidf鍘诲叧鑱�
             svyLibTopicMapper.insertSvyLibTopic(svyLibTopic);
         }
         return 1;
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
index d72d610..cb2012a 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
@@ -1,51 +1,72 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.smartor.mapper.SvyLibTopicMapper">
-    
+
     <resultMap type="com.smartor.domain.SvyLibTopic" id="SvyLibTopicResult">
-        <result property="topicid"    column="topicid"    />
-        <result property="oldid"    column="oldid"    />
-        <result property="svyid"    column="svyid"    />
-        <result property="topictype"    column="topictype"    />
-        <result property="topiccode"    column="topiccode"    />
-        <result property="topic"    column="topic"    />
-        <result property="sort"    column="sort"    />
-        <result property="ismandatory"    column="ismandatory"    />
-        <result property="ishide"    column="ishide"    />
-        <result property="delFlag"    column="del_flag"    />
-        <result property="orgid"    column="orgid"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <result property="isupload"    column="isupload"    />
-        <result property="uploadTime"    column="upload_time"    />
-        <result property="tag"    column="tag"    />
+        <result property="topicid" column="topicid"/>
+        <result property="oldid" column="oldid"/>
+        <result property="svyid" column="svyid"/>
+        <result property="topictype" column="topictype"/>
+        <result property="topiccode" column="topiccode"/>
+        <result property="topic" column="topic"/>
+        <result property="sort" column="sort"/>
+        <result property="ismandatory" column="ismandatory"/>
+        <result property="ishide" column="ishide"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="orgid" column="orgid"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="isupload" column="isupload"/>
+        <result property="uploadTime" column="upload_time"/>
+        <result property="tag" column="tag"/>
     </resultMap>
 
     <sql id="selectSvyLibTopicVo">
-        select topicid, oldid, svyid, topictype, topiccode, topic, sort, ismandatory, ishide, del_flag, orgid, create_by, create_time, update_by, update_time, isupload, upload_time,tag from svy_lib_topic
+        select topicid,
+               oldid,
+               svyid,
+               topictype,
+               topiccode,
+               topic,
+               sort,
+               ismandatory,
+               ishide,
+               del_flag,
+               orgid,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               isupload,
+               upload_time,
+               tag,
+               svy_topicid as svyTopicId
+        from svy_lib_topic
     </sql>
 
     <select id="selectSvyLibTopicList" parameterType="com.smartor.domain.SvyLibTopic" resultMap="SvyLibTopicResult">
         <include refid="selectSvyLibTopicVo"/>
-        <where>  
-            <if test="oldid != null "> and oldid = #{oldid}</if>
-            <if test="topictype != null "> and topictype = #{topictype}</if>
-            <if test="topic != null  and topic != ''"> and topic = #{topic}</if>
-            <if test="ishide != null "> and ishide = #{ishide}</if>
-            <if test="orgid != null  and orgid != ''"> and orgid = #{orgid}</if>
+        <where>
+            <if test="oldid != null ">and oldid = #{oldid}</if>
+            <if test="topictype != null ">and topictype = #{topictype}</if>
+            <if test="topic != null  and topic != ''">and topic = #{topic}</if>
+            <if test="ishide != null ">and ishide = #{ishide}</if>
+            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+            <if test="svyid != null  and svyid != ''">and svyid = #{svyid}</if>
         </where>
     </select>
-    
+
     <select id="selectSvyLibTopicByTopicid" parameterType="Long" resultMap="SvyLibTopicResult">
         <include refid="selectSvyLibTopicVo"/>
         where topicid = #{topicid}
     </select>
-        
-    <insert id="insertSvyLibTopic" parameterType="com.smartor.domain.SvyLibTopic" useGeneratedKeys="true" keyProperty="topicid">
+
+    <insert id="insertSvyLibTopic" parameterType="com.smartor.domain.SvyLibTopic" useGeneratedKeys="true"
+            keyProperty="topicid">
         insert into svy_lib_topic
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="oldid != null">oldid,</if>
@@ -65,7 +86,8 @@
             <if test="isupload != null">isupload,</if>
             <if test="uploadTime != null">upload_time,</if>
             <if test="tag != null">tag,</if>
-         </trim>
+            <if test="svyTopicId != null">svy_topicid,</if>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="oldid != null">#{oldid},</if>
             <if test="svyid != null">#{svyid},</if>
@@ -84,7 +106,8 @@
             <if test="isupload != null">#{isupload},</if>
             <if test="uploadTime != null">#{uploadTime},</if>
             <if test="tag != null">#{tag},</if>
-         </trim>
+            <if test="svyTopicId != null">#{svyTopicId},</if>
+        </trim>
     </insert>
 
     <update id="updateSvyLibTopic" parameterType="com.smartor.domain.SvyLibTopic">
@@ -111,11 +134,13 @@
     </update>
 
     <delete id="deleteSvyLibTopicByTopicid" parameterType="Long">
-        delete from svy_lib_topic where topicid = #{topicid}
+        delete
+        from svy_lib_topic
+        where topicid = #{topicid}
     </delete>
 
     <delete id="deleteSvyLibTopicByTopicids" parameterType="String">
-        delete from svy_lib_topic where topicid in 
+        delete from svy_lib_topic where topicid in
         <foreach item="topicid" collection="array" open="(" separator="," close=")">
             #{topicid}
         </foreach>

--
Gitblit v1.9.3