From 0b193b98347b5563e59492d8f57eba8f67af6d23 Mon Sep 17 00:00:00 2001
From: liusheng <337615773@qq.com>
Date: 星期二, 27 六月 2023 11:35:54 +0800
Subject: [PATCH] 新增题目

---
 smartor/src/main/java/com/smartor/domain/Icd10Association.java                        |   54 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java      |  144 +++
 smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java                 |    2 
 smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java                       |   20 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java |   38 
 smartor/src/main/java/com/smartor/domain/SvyTopicoption.java                          |  187 ++++
 smartor/src/main/resources/template/uestion_template.ftl                              |   22 
 smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java                    |    8 
 smartor/pom.xml                                                                       |   25 
 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java                             |   13 
 smartor/src/main/java/com/smartor/domain/SvyTopic.java                                |  102 ++
 smartor/src/main/java/com/smartor/mapper/SvyTopicoptionMapper.java                    |   64 +
 smartor/src/main/resources/mapper/smartor/SvyTopicoptionMapper.xml                    |  233 ++++++
 smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml                       |   24 
 smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java            |  209 -----
 smartor/src/main/java/com/smartor/service/ISvyTopicService.java                       |   78 ++
 smartor/src/main/resources/mapper/smartor/SvyTopicMapper.xml                          |  161 ++++
 smartor/src/main/java/com/smartor/mapper/SvyTopicMapper.java                          |   72 +
 smartor/src/main/resources/log4j.properties                                           |   15 
 smartor/src/main/java/com/smartor/mapper/Icd10AssociationMapper.java                  |   63 +
 smartor/src/main/java/com/smartor/domain/Question.java                                |   20 
 ruoyi-common/pom.xml                                                                  |    7 
 smartor/src/main/resources/mapper/smartor/Icd10AssociationMapper.xml                  |   69 +
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java |   33 
 smartor/src/main/resources/template/quiz.ftl                                          |   22 
 smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java            |   25 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java          |    2 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTopicController.java    |  131 +++
 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/UploadConfig.java                 |   14 
 smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java                       |    2 
 ruoyi-admin/src/main/resources/template/question.ftl                                  |   36 
 smartor/src/main/java/com/smartor/service/impl/SvyTopicServiceImpl.java               |  313 ++++++++
 smartor/src/main/java/com/smartor/domain/SvyLibTitle.java                             |   14 
 33 files changed, 1,911 insertions(+), 311 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 7f73136..3ca92b2 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -4,19 +4,18 @@
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.autoconfigure.web.servlet.MultipartAutoConfiguration;
 
 /**
  * 鍚姩绋嬪簭
- * 
+ *
  * @author ruoyi
  */
 //@SpringBootApplication(scanBasePackages="com.smartor",exclude = { DataSourceAutoConfiguration.class })
-@SpringBootApplication(scanBasePackages={"com.ruoyi","com.smartor"},exclude = { DataSourceAutoConfiguration.class })
-@MapperScan(value="com.smartor.mapper")
-public class RuoYiApplication
-{
-    public static void main(String[] args)
-    {
+@SpringBootApplication(scanBasePackages = {"com.ruoyi", "com.smartor"}, exclude = {DataSourceAutoConfiguration.class, MultipartAutoConfiguration.class})
+@MapperScan(value = "com.smartor.mapper")
+public class RuoYiApplication {
+    public static void main(String[] args) {
         // System.setProperty("spring.devtools.restart.enabled", "false");
         SpringApplication.run(RuoYiApplication.class, args);
         System.out.println("(鈾モ棤鈥库棤)锞夛緸  鑻ヤ緷鍚姩鎴愬姛   醿�(麓凇`醿�)锞�  \n" +
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
new file mode 100644
index 0000000..ff53755
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java
@@ -0,0 +1,144 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.WriterException;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.QRCodeWriter;
+import com.smartor.domain.Question;
+import freemarker.template.Configuration;
+import freemarker.template.Template;
+import freemarker.template.TemplateException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Api(description = "闂嵎浜岀淮鐮�")
+@RestController
+@RequestMapping("/qrcode")
+public class QRCodeController {
+
+    private final Configuration configuration;
+
+    public QRCodeController(Configuration configuration) {
+        this.configuration = configuration;
+    }
+
+    /**
+     * 闂嵎棰樼洰
+     *
+     * @param reqid 闂嵎ID
+     *              userid  鐢ㄦ埛ID
+     * @return
+     * @throws IOException
+     * @throws TemplateException
+     */
+    @ResponseBody
+    @GetMapping(value = "/generateStaticHtml/{reqid}/{userid}", produces = MediaType.TEXT_HTML_VALUE)
+    public String generateStaticHtml(@PathVariable("reqid") String reqid, @PathVariable("userid") String userid) throws IOException, TemplateException {
+        // 鍒涘缓Freemarker閰嶇疆
+        Configuration configuration = new Configuration(Configuration.VERSION_2_3_31);
+        configuration.setClassForTemplateLoading(SvyLibTitleController.class, "/template");
+        configuration.setDefaultEncoding("UTF-8");
+
+        try {
+            // 鍔犺浇妯℃澘
+            Template template = configuration.getTemplate("question.ftl");
+
+            // 鍑嗗棰樼洰鏁版嵁
+            List<Question> questions = new ArrayList<>();
+
+            // 鍗曢�夐
+            List<String> singleChoiceOptions = new ArrayList<>();
+            singleChoiceOptions.add("Option 1");
+            singleChoiceOptions.add("Option 2");
+            singleChoiceOptions.add("Option 3");
+            Question singleChoiceQuestion = new Question("singleChoice", "鍗曢�夐111", "鍗曢�夐棰樼洰1锛�", singleChoiceOptions);
+
+            List<String> singleChoiceOptions2 = new ArrayList<>();
+            singleChoiceOptions2.add("Option 4");
+            singleChoiceOptions2.add("Option 5");
+            singleChoiceOptions2.add("Option 6");
+            Question singleChoiceQuestion2 = new Question("singleChoice", "鍗曢�夐222", "鍗曢�夐棰樼洰2锛�", singleChoiceOptions2);
+
+            questions.add(singleChoiceQuestion);
+            questions.add(singleChoiceQuestion2);
+
+            // 澶氶�夐
+            List<String> multipleChoiceOptions = new ArrayList<>();
+            multipleChoiceOptions.add("Option A");
+            multipleChoiceOptions.add("Option B");
+            multipleChoiceOptions.add("Option C");
+            Question multipleChoiceQuestion = new Question("multipleChoice", "澶氶�夐1", "Question 2: Select multiple options", multipleChoiceOptions);
+            questions.add(multipleChoiceQuestion);
+
+            // 闂瓟棰�
+            Question openEndedQuestion = new Question("openEnded", "闂瓟棰橀", "闂瓟棰橀鐩�1", null);
+            questions.add(openEndedQuestion);
+
+            // 鍑嗗妯℃澘鏁版嵁
+            Map<String, Object> data = new HashMap<>();
+            data.put("questions", questions);
+
+            // 娓叉煋妯℃澘
+            StringWriter writer = new StringWriter();
+            template.process(data, writer);
+            String renderedTemplate = writer.toString();
+            return writer.toString();
+            // 杩斿洖妯℃澘鍐呭缁欏鎴风
+            //  System.out.println(renderedTemplate);  // 杩欓噷鍙槸绀轰緥锛屽疄闄呭簲鐢ㄤ腑搴斿皢鍐呭杩斿洖缁欏鎴风杩涜灞曠ず
+        } catch (IOException | TemplateException e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+
+    /**
+     * @param reqid  闂嵎ID
+     * @param userid 鐢ㄦ埛ID
+     */
+    @ApiOperation("鑾峰彇闂嵎浜岀淮鐮�")
+    @GetMapping(value = "/getQRcode/{reqid}/{userid}")
+    public void getQRcode(@PathVariable("reqid") String reqid, @PathVariable("userid") String userid) {
+        String url = "http://192.168.2.10:8080/smartor/svytitle/generateStaticHtml";
+        String filePath = "D:\\daima\\qrcode.png"; // 淇濆瓨浜岀淮鐮佸浘鍍忕殑鏂囦欢璺緞
+
+        generateQRCode(url, filePath);
+
+        System.out.println("QR Code generated successfully!");
+    }
+
+    private void generateQRCode(String url, String filePath) {
+        QRCodeWriter qrCodeWriter = new QRCodeWriter();
+        try {
+            BitMatrix bitMatrix = qrCodeWriter.encode(url, BarcodeFormat.QR_CODE, 500, 500);
+
+            File outputFile = new File(filePath);
+            MatrixToImageWriter.writeToPath(bitMatrix, "PNG", outputFile.toPath());
+        } catch (WriterException | IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 闂埜缁撴灉澶勭悊
+     *
+     * @param request
+     */
+    @PostMapping(value = "/getFormDate")
+    public void getFormDate(HttpServletRequest request) {
+        Map<String, String[]> formData = request.getParameterMap();
+        System.out.println(formData.toString());
+    }
+
+}
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 f66b29b..062f98d 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,29 +1,20 @@
-package com.smartor.controller;
+package com.ruoyi.web.controller.smartor;
 
-import java.util.List;
-import javax.servlet.http.HttpServletResponse;
-
-import com.smartor.domain.SvyLibTitleReq;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-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.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.smartor.domain.SvyLibTitle;
+import com.smartor.domain.SvyLibTitleReq;
 import com.smartor.service.ISvyLibTitleService;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 /**
  * 闂嵎Controller
@@ -75,10 +66,10 @@
     /**
      * 鏂板闂嵎
      */
+    @ApiOperation("鏂板闂嵎")
     @PreAuthorize("@ss.hasPermi('smartor:svytitle:add')")
-    @Log(title = "闂嵎", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody SvyLibTitle svyLibTitle) {
+    @PostMapping("/addSvyLibTitle")
+    public AjaxResult addSvyLibTitle(@RequestBody SvyLibTitle svyLibTitle) {
         return toAjax(svyLibTitleService.insertSvyLibTitle(svyLibTitle));
     }
 
@@ -101,4 +92,7 @@
     public AjaxResult remove(@PathVariable Long[] svyids) {
         return toAjax(svyLibTitleService.deleteSvyLibTitleBySvyids(svyids));
     }
+
+
 }
+
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java
index 7661d42..43d5360 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java
@@ -111,37 +111,4 @@
     }
 
 
-    /**
-     * 鎵归噺瀵煎叆闂鐩�
-     */
-    @ApiOperation("鎵归噺瀵煎叆闂棶棰樼洰")
-    @PostMapping("/importLitTopic")
-    public AjaxResult importLitTopic(MultipartFile multipartFile) {
-        LoginUser loginUser = getLoginUser();
-        SysUser user = loginUser.getUser();
-        return success(svyLibTopicService.importLitTopic(user, multipartFile));
-    }
-
-
-    /**
-     * 瀵煎叆棰樼洰妯℃澘
-     *
-     * @param response
-     */
-    @ApiOperation("瀵煎叆棰樼洰妯℃澘")
-    @PostMapping("/importLitTopicTemplate")
-    public void importLitTopicTemplate(HttpServletResponse response) {
-        ExcelUtil<SvyLibTopicRes> util = new ExcelUtil<SvyLibTopicRes>(SvyLibTopicRes.class);
-        util.importTemplateExcel(response, "瀵煎叆棰樼洰");
-    }
-
-    /**
-     * 鑾峰彇棰樼洰
-     */
-    @ApiOperation("鑾峰彇棰樼洰")
-    @PostMapping("/showTopic")
-    public AjaxResult showTopic(@RequestBody SvyTopicReq svyTopicReq) {
-        return success(svyLibTopicService.showTopic(svyTopicReq));
-    }
-
 }
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTopicController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTopicController.java
new file mode 100644
index 0000000..702336b
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTopicController.java
@@ -0,0 +1,131 @@
+package com.ruoyi.web.controller.smartor;
+
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.smartor.domain.SvyLibTopicRes;
+import com.smartor.domain.SvyTopic;
+import com.smartor.domain.SvyTopicReq;
+import com.smartor.service.ISvyTopicService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 棰樼洰Controller
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+@Api(description = "棰樼洰")
+@RestController
+@RequestMapping("/system/topic")
+public class SvyTopicController extends BaseController {
+    @Autowired
+    private ISvyTopicService svyTopicService;
+
+    /**
+     * 鏌ヨ棰樼洰鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SvyTopic svyTopic) {
+        startPage();
+        List<SvyTopic> list = svyTopicService.selectSvyTopicList(svyTopic);
+        return getDataTable(list);
+    }
+
+    /**
+     * 瀵煎嚭棰樼洰鍒楄〃
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:export')")
+    @Log(title = "棰樼洰", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SvyTopic svyTopic) {
+        List<SvyTopic> list = svyTopicService.selectSvyTopicList(svyTopic);
+        ExcelUtil<SvyTopic> util = new ExcelUtil<SvyTopic>(SvyTopic.class);
+        util.exportExcel(response, list, "棰樼洰鏁版嵁");
+    }
+
+    /**
+     * 鑾峰彇棰樼洰璇︾粏淇℃伅
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:query')")
+    @GetMapping(value = "/{topicid}")
+    public AjaxResult getInfo(@PathVariable("topicid") Long topicid) {
+        return success(svyTopicService.selectSvyTopicByTopicid(topicid));
+    }
+
+    /**
+     * 鏂板棰樼洰
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:add')")
+    @Log(title = "棰樼洰", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@RequestBody SvyTopic svyTopic) {
+        return toAjax(svyTopicService.insertSvyTopic(svyTopic));
+    }
+
+    /**
+     * 淇敼棰樼洰
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:edit')")
+    @Log(title = "棰樼洰", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@RequestBody SvyTopic svyTopic) {
+        return toAjax(svyTopicService.updateSvyTopic(svyTopic));
+    }
+
+    /**
+     * 鍒犻櫎棰樼洰
+     */
+    @PreAuthorize("@ss.hasPermi('system:topic:remove')")
+    @Log(title = "棰樼洰", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{topicids}")
+    public AjaxResult remove(@PathVariable Long[] topicids) {
+        return toAjax(svyTopicService.deleteSvyTopicByTopicids(topicids));
+    }
+
+    /**
+     * 鎵归噺瀵煎叆闂鐩�
+     */
+    @ApiOperation("鎵归噺瀵煎叆棰樼洰")
+    @PostMapping("/importTopic")
+    public AjaxResult importTopic(@RequestPart(value = "file") MultipartFile multipartFile) {
+        LoginUser loginUser = getLoginUser();
+        SysUser user = loginUser.getUser();
+        return success(svyTopicService.importLitTopic(user, multipartFile));
+    }
+
+    /**
+     * 瀵煎叆棰樼洰妯℃澘
+     *
+     * @param response
+     */
+    @ApiOperation("瀵煎叆棰樼洰妯℃澘")
+    @PostMapping("/importTopicTemplate")
+    public void importTopicTemplate(HttpServletResponse response) {
+        ExcelUtil<SvyLibTopicRes> util = new ExcelUtil<SvyLibTopicRes>(SvyLibTopicRes.class);
+        util.importTemplateExcel(response, "瀵煎叆棰樼洰");
+    }
+
+    /**
+     * 鑾峰彇棰樼洰
+     */
+    @ApiOperation("鑾峰彇棰樼洰")
+    @PostMapping("/showTopic")
+    public AjaxResult showTopic(@RequestBody SvyTopicReq svyTopicReq) {
+        return success(svyTopicService.showTopic(svyTopicReq));
+    }
+}
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/UploadConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/UploadConfig.java
new file mode 100644
index 0000000..dbd043d
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/UploadConfig.java
@@ -0,0 +1,14 @@
+package com.ruoyi.web.core.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.multipart.MultipartResolver;
+import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+
+@Configuration
+public class UploadConfig {
+    @Bean(name = "multipartResolver")
+    public MultipartResolver multipartResolver() {
+        return new CommonsMultipartResolver();
+    }
+}
diff --git a/ruoyi-admin/src/main/resources/template/question.ftl b/ruoyi-admin/src/main/resources/template/question.ftl
new file mode 100644
index 0000000..13a458a
--- /dev/null
+++ b/ruoyi-admin/src/main/resources/template/question.ftl
@@ -0,0 +1,36 @@
+<html>
+<head>
+    <title>Questionnaire</title>
+</head>
+<body>
+<h1>Questionnaire</h1>
+
+<form action="/smartor/svytitle/getFormDate" method="post">
+    <#list questions as question>
+        <h2>${question.title}</h2>
+
+        <#if question.type == "singleChoice">
+            <#list question.options as option>
+                <input type="radio" name="${question.name}" value="${option}" id="${option}">
+                <label for="${option}">${option}</label><br>
+            </#list>
+        </#if>
+
+        <#if question.type == "multipleChoice">
+            <#list question.options as option>
+                <input type="checkbox" name="${question.name}" value="${option}" id="${option}">
+                <label for="${option}">${option}</label><br>
+            </#list>
+        </#if>
+
+        <#if question.type == "openEnded">
+            <textarea name="${question.name}" rows="4" cols="50"></textarea>
+        </#if>
+
+        <br>
+    </#list>
+
+    <input type="submit" value="Submit">
+</form>
+</body>
+</html>
\ No newline at end of file
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index d5d43dd..bb034c6 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -28,7 +28,11 @@
             <groupId>org.springframework</groupId>
             <artifactId>spring-context-support</artifactId>
         </dependency>
-
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+            <version>2.3.31</version>
+        </dependency>
         <!-- SpringWeb妯″潡 -->
         <dependency>
             <groupId>org.springframework</groupId>
@@ -169,6 +173,7 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-websocket</artifactId>
         </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
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 2125853..ff1fe21 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").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage","/qrcode/generateStaticHtml","/qrcode/getQRcode","/qrcode/getFormDate").permitAll()
                 // 闈欐�佽祫婧愶紝鍙尶鍚嶈闂�
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
diff --git a/smartor/pom.xml b/smartor/pom.xml
index 3bdf790..91f3996 100644
--- a/smartor/pom.xml
+++ b/smartor/pom.xml
@@ -33,6 +33,31 @@
             <artifactId>easypoi-spring-boot-starter</artifactId>
             <version>4.4.0</version>
         </dependency>
+        <!-- https://mvnrepository.com/artifact/com.sparkjava/spark-core -->
+        <dependency>
+            <groupId>com.sparkjava</groupId>
+            <artifactId>spark-core</artifactId>
+            <version>2.9.4</version>
+        </dependency>
+        <!-- https://mvnrepository.com/artifact/com.sparkjava/spark-template-freemarker -->
+        <dependency>
+            <groupId>com.sparkjava</groupId>
+            <artifactId>spark-template-freemarker</artifactId>
+            <version>2.7.1</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.5.1</version>
+        </dependency>
+
+        <!-- ZXing JavaSE -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.5.1</version>
+        </dependency>
     </dependencies>
 
+
 </project>
\ No newline at end of file
diff --git a/smartor/src/main/java/com/smartor/domain/Icd10Association.java b/smartor/src/main/java/com/smartor/domain/Icd10Association.java
new file mode 100644
index 0000000..22e9ee1
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/Icd10Association.java
@@ -0,0 +1,54 @@
+package com.smartor.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+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 com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+import java.util.Date;
+
+/**
+ * 鐤剧梾鍏宠仈瀵硅薄 icd10_association
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+@Data
+@ApiModel(value = "Icd10Association", description = "鐤剧梾鍏宠仈瀵硅薄")
+public class Icd10Association {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鐤剧梾缂栫爜
+     */
+    @ApiModelProperty(value = "鐤剧梾缂栫爜")
+    @Excel(name = "鐤剧梾缂栫爜")
+    private String icd10code;
+
+    /**
+     * 鐤剧梾鍚嶇О
+     */
+    @ApiModelProperty(value = "鐤剧梾鍚嶇О")
+    @Excel(name = "鐤剧梾鍚嶇О")
+    private String icd10name;
+
+    /**
+     * 闂嵎ID
+     */
+    @ApiModelProperty(value = "闂嵎ID")
+    @Excel(name = "闂嵎ID")
+    private Long svyid;
+
+
+    /**
+     * 鏇存柊鏃堕棿
+     */
+    @ApiModelProperty(value = "鏇存柊鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updatetime;
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/Question.java b/smartor/src/main/java/com/smartor/domain/Question.java
new file mode 100644
index 0000000..c8ac646
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/Question.java
@@ -0,0 +1,20 @@
+package com.smartor.domain;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class Question {
+    private String type;
+    private String name;
+    private String title;
+    private List<String> options;
+
+    public Question(String type, String name, String title, List<String> options) {
+        this.type = type;
+        this.name = name;
+        this.title = title;
+        this.options = options;
+    }
+}
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java b/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
index c42f285..aa7f05d 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTitle.java
@@ -2,6 +2,7 @@
 
 import java.math.BigDecimal;
 import java.util.Date;
+import java.util.List;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
@@ -148,6 +149,19 @@
     @ApiModelProperty(value = "鐤剧梾鍚嶇О")
     private String icdname;
 
+    /**
+     * 鐤剧梾ID
+     */
+    @ApiModelProperty(value = "鐤剧梾ID")
+    private List<String> icdID;
+
+    /**
+     * 闂嵎棰樼洰闆嗗悎
+     */
+    @ApiModelProperty(value = "闂嵎棰樼洰闆嗗悎")
+    private List<SvyLibTopic> svyLibTopics;
+
+
 
     public SvyLibTitle(Long svyid, String icdname) {
         this.svyid = svyid;
diff --git a/smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java b/smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java
index daf1684..d5ce65f 100644
--- a/smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java
+++ b/smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java
@@ -12,7 +12,7 @@
  * @date 2023-03-03
  */
 @Data
-@ApiModel(value = "SvyLibTopicAndOptionRes", description = "闂嵎棰樼洰灞曠ず杩斿弬")
+@ApiModel(value = "SvyLibTopicAndOptionRes", description = "棰樼洰灞曠ず杩斿弬")
 public class SvyLibTopicAndOptionRes extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTopic.java b/smartor/src/main/java/com/smartor/domain/SvyTopic.java
new file mode 100644
index 0000000..f2ed734
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/SvyTopic.java
@@ -0,0 +1,102 @@
+package com.smartor.domain;
+
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 棰樼洰瀵硅薄 svy_topic
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+@Data
+public class SvyTopic extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 鑷ID
+     */
+    private Long topicid;
+
+    /**
+     * 棰樼洰绫诲瀷;鏋氫妇 1.鍗曢�� 2澶氶�� 3濉┖
+     */
+    @Excel(name = " 棰樼洰绫诲瀷;鏋氫妇 1.鍗曢�� 2澶氶�� 3濉┖ ")
+    private Long topictype;
+
+    /**
+     * 棰樼洰Code
+     */
+    @Excel(name = " 棰樼洰Code ")
+    private String topiccode;
+
+    /**
+     * 棰樼洰
+     */
+    @Excel(name = " 棰樼洰 ")
+    private String topic;
+
+    /**
+     * 棰樼洰鏍囩
+     */
+    @Excel(name = "棰樼洰鏍囩")
+    private String tag;
+
+    /**
+     * 鎺掑簭
+     */
+    @Excel(name = " 鎺掑簭 ")
+    private Long sort;
+
+    /**
+     * 鏄惁蹇呭~
+     */
+    @Excel(name = " 鏄惁蹇呭~ ")
+    private Long ismandatory;
+
+    /**
+     * 鏄惁闅愯棌
+     */
+    @Excel(name = " 鏄惁闅愯棌 ")
+    private Long ishide;
+
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    private String delFlag;
+
+    /**
+     * 鏈烘瀯ID
+     */
+    @Excel(name = " 鏈烘瀯ID ")
+    private String orgid;
+
+    /**
+     * 涓婁紶鏍囪
+     */
+    @Excel(name = " 涓婁紶鏍囪 ")
+    private Long isupload;
+
+    /**
+     * 涓婁紶鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = " 涓婁紶鏃堕棿 ", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date uploadTime;
+
+
+    /**
+     * 涓婁紶鏍囪
+     */
+    @ApiModelProperty(name = "绛旀")
+    private String answer;
+
+
+}
diff --git a/smartor/src/main/java/com/smartor/domain/SvyTopicoption.java b/smartor/src/main/java/com/smartor/domain/SvyTopicoption.java
new file mode 100644
index 0000000..c25e3f7
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/domain/SvyTopicoption.java
@@ -0,0 +1,187 @@
+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 java.util.Date;
+
+/**
+ * 闂閫夐」瀵硅薄 SvyTopicoption
+ *
+ * @author ruoyi
+ * @date 2023-03-02
+ */
+@Data
+@ApiModel(value = "SvyLibTopicoption", description = "闂閫夐」瀵硅薄")
+public class SvyTopicoption extends BaseEntity {
+
+    /**
+     * 鑷ID
+     */
+    @ApiModelProperty(name = "鑷ID")
+    private Long optionid;
+
+    /**
+     * 棰樼洰ID
+     */
+    @ApiModelProperty(name = "棰樼洰ID")
+    @Excel(name = " 棰樼洰ID ")
+    private Long topicid;
+
+    /**
+     * 闂嵎ID
+     */
+    @ApiModelProperty(name = "闂嵎ID")
+    private Long svyid;
+
+    /**
+     * 棰樼洰绫诲瀷
+     */
+    @ApiModelProperty(name = "棰樼洰绫诲瀷")
+    private Long topictype;
+
+    /**
+     * 閫夐」Code
+     */
+    @ApiModelProperty(name = "閫夐」Code")
+    private String optioncode;
+
+    /**
+     * 閫夐」鍐呭
+     */
+    @ApiModelProperty(name = "閫夐」鍐呭")
+    private String optioncontent;
+
+    /**
+     * 鏄惁瀛樺湪鏄庣粏
+     */
+    @ApiModelProperty(name = "鏄惁瀛樺湪鏄庣粏")
+    private Long isexistdetail;
+
+    /**
+     * 鏄庣粏鏄惁蹇呭~
+     */
+    @ApiModelProperty(name = "鏄庣粏鏄惁蹇呭~")
+    private Long detailismandatory;
+
+    /**
+     * 鏄惁寮傚父椤圭洰
+     */
+    @ApiModelProperty(name = "鏄惁寮傚父椤圭洰")
+    private Long isexceptionitem;
+
+    /**
+     * 鏄惁璺熻繘
+     */
+    @ApiModelProperty(name = "鏄惁璺熻繘")
+    private Long istrack;
+
+    /**
+     * 鍒嗘暟
+     */
+    @ApiModelProperty(name = "鍒嗘暟")
+    private Long score;
+
+    /**
+     * 鎻愮ず
+     */
+    @ApiModelProperty(name = "鎻愮ず")
+    private String prompt;
+
+    /**
+     * 璺宠浆
+     */
+    @ApiModelProperty(name = "璺宠浆")
+    private String jump;
+
+    /**
+     * 鐖堕�夐」ID
+     */
+    @ApiModelProperty(name = "鐖堕�夐」ID")
+    private Long parentoptionid;
+
+    /**
+     * 鏄惁浜掓枼
+     */
+    @ApiModelProperty(name = "鏄惁浜掓枼")
+    private Long ismutex;
+
+    /**
+     * 楠岃瘉瑙勫垯
+     */
+    @ApiModelProperty(name = "楠岃瘉瑙勫垯")
+    private String verifyrule;
+
+    /**
+     * 鎺掑簭
+     */
+    @ApiModelProperty(name = "鎺掑簭")
+    private Long sort;
+
+    /**
+     * 楠岃瘉绫诲瀷;0.涓嶉獙璇� 1.鏁存暟 2.灏忔暟 3.鎵嬫満鍙� 4.韬唤璇� 5.鏃ユ湡
+     */
+    @ApiModelProperty(name = "楠岃瘉绫诲瀷;0.涓嶉獙璇� 1.鏁存暟 2.灏忔暟 3.鎵嬫満鍙� 4.韬唤璇� 5.鏃ユ湡 ")
+    private Long verificationtype;
+
+    /**
+     * 鏄惁闄愬埗鑼冨洿
+     */
+    @ApiModelProperty(name = "鏄惁闄愬埗鑼冨洿")
+    private Long isrange;
+
+    /**
+     * 鏈�灏忚寖鍥�
+     */
+    @ApiModelProperty(name = "鏈�灏忚寖鍥�")
+    private String minrange;
+
+    /**
+     * 鏈�澶ц寖鍥�
+     */
+    @ApiModelProperty(name = "鏈�澶ц寖鍥�")
+    private String maxrange;
+
+    /**
+     * 鑼冨洿闀垮害;鐢ㄤ簬灏忔暟淇濈暀浣嶆暟
+     */
+    @ApiModelProperty(name = "鑼冨洿闀垮害;鐢ㄤ簬灏忔暟淇濈暀浣嶆暟")
+    private Long rangelength;
+
+    /**
+     * 鏈烘瀯ID
+     */
+    @ApiModelProperty(name = "鏈烘瀯ID")
+    private String orgid;
+
+    /**
+     * 涓婁竴鐗堟湰ID
+     */
+    @ApiModelProperty(name = "涓婁竴鐗堟湰ID")
+    private Long oldid;
+
+    /**
+     * 鍒犻櫎鏍囪
+     */
+    @ApiModelProperty(name = "鍒犻櫎鏍囪")
+    private String delFlag;
+
+    /**
+     * 涓婁紶鏍囪
+     */
+    @ApiModelProperty(name = "涓婁紶鏍囪")
+    private Long isupload;
+
+    /**
+     * 涓婁紶鏃堕棿
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @ApiModelProperty(name = "涓婁紶鏃堕棿")
+    private Date uploadTime;
+
+}
+
diff --git a/smartor/src/main/java/com/smartor/mapper/Icd10AssociationMapper.java b/smartor/src/main/java/com/smartor/mapper/Icd10AssociationMapper.java
new file mode 100644
index 0000000..c67bc6d
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/Icd10AssociationMapper.java
@@ -0,0 +1,63 @@
+package com.smartor.mapper;
+
+import com.smartor.domain.Icd10Association;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 鐤剧梾鍏宠仈Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+@Mapper
+public interface Icd10AssociationMapper {
+    /**
+     * 鏌ヨ鐤剧梾鍏宠仈
+     *
+     * @param icd10code 鐤剧梾鍏宠仈涓婚敭
+     * @return 鐤剧梾鍏宠仈
+     */
+    public Icd10Association selectIcd10AssociationByIcd10code(String icd10code);
+
+    /**
+     * 鏌ヨ鐤剧梾鍏宠仈鍒楄〃
+     *
+     * @param icd10Association 鐤剧梾鍏宠仈
+     * @return 鐤剧梾鍏宠仈闆嗗悎
+     */
+    public List<Icd10Association> selectIcd10AssociationList(Icd10Association icd10Association);
+
+    /**
+     * 鏂板鐤剧梾鍏宠仈
+     *
+     * @param icd10Association 鐤剧梾鍏宠仈
+     * @return 缁撴灉
+     */
+    public int insertIcd10Association(Icd10Association icd10Association);
+
+    /**
+     * 淇敼鐤剧梾鍏宠仈
+     *
+     * @param icd10Association 鐤剧梾鍏宠仈
+     * @return 缁撴灉
+     */
+    public int updateIcd10Association(Icd10Association icd10Association);
+
+    /**
+     * 鍒犻櫎鐤剧梾鍏宠仈
+     *
+     * @param icd10code 鐤剧梾鍏宠仈涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteIcd10AssociationByIcd10code(String icd10code);
+
+    /**
+     * 鎵归噺鍒犻櫎鐤剧梾鍏宠仈
+     *
+     * @param icd10codes 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteIcd10AssociationByIcd10codes(String[] icd10codes);
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
index a8f60d7..af1fd94 100644
--- a/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
@@ -1,20 +1,22 @@
 package com.smartor.mapper;
 
 import java.util.List;
+
 import com.smartor.domain.SvyLibTitle;
 import com.smartor.domain.SvyLibTitleReq;
+import org.apache.ibatis.annotations.Mapper;
 
 /**
  * 闂嵎Mapper鎺ュ彛
- * 
+ *
  * @author ruoyi
  * @date 2023-03-02
  */
-public interface SvyLibTitleMapper 
-{
+@Mapper
+public interface SvyLibTitleMapper {
     /**
      * 鏌ヨ闂嵎
-     * 
+     *
      * @param svyid 闂嵎涓婚敭
      * @return 闂嵎
      */
@@ -22,7 +24,7 @@
 
     /**
      * 鏌ヨ闂嵎鍒楄〃
-     * 
+     *
      * @param svyLibTitle 闂嵎
      * @return 闂嵎闆嗗悎
      */
@@ -30,7 +32,7 @@
 
     /**
      * 鏂板闂嵎
-     * 
+     *
      * @param svyLibTitle 闂嵎
      * @return 缁撴灉
      */
@@ -38,7 +40,7 @@
 
     /**
      * 淇敼闂嵎
-     * 
+     *
      * @param svyLibTitle 闂嵎
      * @return 缁撴灉
      */
@@ -46,7 +48,7 @@
 
     /**
      * 鍒犻櫎闂嵎
-     * 
+     *
      * @param svyid 闂嵎涓婚敭
      * @return 缁撴灉
      */
@@ -54,7 +56,7 @@
 
     /**
      * 鎵归噺鍒犻櫎闂嵎
-     * 
+     *
      * @param svyids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
      * @return 缁撴灉
      */
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java
index 37f2abc..4fb56d9 100644
--- a/smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java
+++ b/smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java
@@ -64,5 +64,5 @@
     public int deleteSvyLibTopicByTopicids(Long[] topicids);
 
 
-    public List<SvyLibTopicAndOptionRes> showTopic(SvyTopicReq svyTopicReq);
+
 }
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyTopicMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyTopicMapper.java
new file mode 100644
index 0000000..717bbd6
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/SvyTopicMapper.java
@@ -0,0 +1,72 @@
+package com.smartor.mapper;
+
+import com.smartor.domain.SvyLibTopic;
+import com.smartor.domain.SvyLibTopicAndOptionRes;
+import com.smartor.domain.SvyTopic;
+import com.smartor.domain.SvyTopicReq;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 闂嵎棰樼洰Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2023-03-03
+ */
+@Mapper
+public interface SvyTopicMapper {
+    /**
+     * 鏌ヨ闂嵎棰樼洰
+     *
+     * @param topicid 闂嵎棰樼洰涓婚敭
+     * @return 闂嵎棰樼洰
+     */
+    public SvyTopic selectSvyTopicByTopicid(Long topicid);
+
+    /**
+     * 鏌ヨ闂嵎棰樼洰鍒楄〃
+     *
+     * @param svyTopic 闂嵎棰樼洰
+     * @return 闂嵎棰樼洰闆嗗悎
+     */
+    public List<SvyTopic> selectSvyTopicList(SvyTopic svyTopic);
+
+    /**
+     * 鏂板棰樼洰
+     *
+     * @param svyTopic 闂嵎棰樼洰
+     * @return 缁撴灉
+     */
+    public int insertSvyTopic(SvyTopic svyTopic);
+
+    /**
+     * 淇敼闂嵎棰樼洰
+     *
+     * @param svyTopic 闂嵎棰樼洰
+     * @return 缁撴灉
+     */
+    public int updateSvyTopic(SvyTopic svyTopic);
+
+    /**
+     * 鍒犻櫎闂嵎棰樼洰
+     *
+     * @param topicid 闂嵎棰樼洰涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicByTopicid(Long topicid);
+
+    /**
+     * 鎵归噺鍒犻櫎闂嵎棰樼洰
+     *
+     * @param topicids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicByTopicids(Long[] topicids);
+
+    public List<SvyLibTopicAndOptionRes> showTopic(SvyTopicReq svyTopicReq);
+
+
+
+
+}
diff --git a/smartor/src/main/java/com/smartor/mapper/SvyTopicoptionMapper.java b/smartor/src/main/java/com/smartor/mapper/SvyTopicoptionMapper.java
new file mode 100644
index 0000000..7f6f16f
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/mapper/SvyTopicoptionMapper.java
@@ -0,0 +1,64 @@
+package com.smartor.mapper;
+
+import com.smartor.domain.SvyTopicoption;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ * 闂嵎闂閫夐」Mapper鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2023-03-02
+ */
+@Mapper
+public interface SvyTopicoptionMapper {
+    /**
+     * 鏌ヨ闂嵎闂閫夐」
+     *
+     * @param optionid 闂嵎闂閫夐」涓婚敭
+     * @return 闂嵎闂閫夐」
+     */
+    public SvyTopicoption selectSvyTopicoptionByOptionid(Long optionid);
+
+    /**
+     * 鏌ヨ闂嵎闂閫夐」鍒楄〃
+     *
+     * @param svyTopicoption 闂嵎闂閫夐」
+     * @return 闂嵎闂閫夐」闆嗗悎
+     */
+    public List<SvyTopicoption> selectSvyTopicoptionList(SvyTopicoption svyTopicoption);
+
+    /**
+     * 鏂板闂嵎闂閫夐」
+     *
+     * @param svyTopicoption 闂嵎闂閫夐」
+     * @return 缁撴灉
+     */
+    public int insertSvyTopicoption(SvyTopicoption svyTopicoption);
+
+    /**
+     * 淇敼闂嵎闂閫夐」
+     *
+     * @param svyTopicoption 闂嵎闂閫夐」
+     * @return 缁撴灉
+     */
+    public int updateSvyTopicoption(SvyTopicoption svyTopicoption);
+
+    /**
+     * 鍒犻櫎闂嵎闂閫夐」
+     *
+     * @param optionid 闂嵎闂閫夐」涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicoptionByOptionid(Long optionid);
+
+    /**
+     * 鎵归噺鍒犻櫎闂嵎闂閫夐」
+     *
+     * @param optionids 闇�瑕佸垹闄ょ殑鏁版嵁涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicoptionByOptionids(Long[] optionids);
+
+}
diff --git a/smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java b/smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java
index 4a93408..8cdd5ac 100644
--- a/smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java
+++ b/smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java
@@ -65,13 +65,5 @@
      */
     public int deleteSvyLibTopicByTopicid(Long topicid);
 
-    /**
-     * 鎵归噺瀵煎叆闂棶棰樼洰
-     *
-     * @param multipartFile
-     * @return
-     */
-    public List<SvyLibTopicRes> importLitTopic(SysUser user, MultipartFile multipartFile);
 
-    public SvyLibTopicRes showTopic(SvyTopicReq svyTopicReq);
 }
diff --git a/smartor/src/main/java/com/smartor/service/ISvyTopicService.java b/smartor/src/main/java/com/smartor/service/ISvyTopicService.java
new file mode 100644
index 0000000..8a58a32
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/ISvyTopicService.java
@@ -0,0 +1,78 @@
+package com.smartor.service;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.smartor.domain.SvyLibTopicAndOptionRes;
+import com.smartor.domain.SvyLibTopicRes;
+import com.smartor.domain.SvyTopic;
+import com.smartor.domain.SvyTopicReq;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 棰樼洰Service鎺ュ彛
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+public interface ISvyTopicService {
+    /**
+     * 鏌ヨ棰樼洰
+     *
+     * @param topicid 棰樼洰涓婚敭
+     * @return 棰樼洰
+     */
+    public SvyTopic selectSvyTopicByTopicid(Long topicid);
+
+    /**
+     * 鏌ヨ棰樼洰鍒楄〃
+     *
+     * @param svyTopic 棰樼洰
+     * @return 棰樼洰闆嗗悎
+     */
+    public List<SvyTopic> selectSvyTopicList(SvyTopic svyTopic);
+
+    /**
+     * 鏂板棰樼洰
+     *
+     * @param svyTopic 棰樼洰
+     * @return 缁撴灉
+     */
+    public int insertSvyTopic(SvyTopic svyTopic);
+
+    /**
+     * 淇敼棰樼洰
+     *
+     * @param svyTopic 棰樼洰
+     * @return 缁撴灉
+     */
+    public int updateSvyTopic(SvyTopic svyTopic);
+
+    /**
+     * 鎵归噺鍒犻櫎棰樼洰
+     *
+     * @param topicids 闇�瑕佸垹闄ょ殑棰樼洰涓婚敭闆嗗悎
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicByTopicids(Long[] topicids);
+
+    /**
+     * 鍒犻櫎棰樼洰淇℃伅
+     *
+     * @param topicid 棰樼洰涓婚敭
+     * @return 缁撴灉
+     */
+    public int deleteSvyTopicByTopicid(Long topicid);
+
+
+    /**
+     * 鎵归噺瀵煎叆闂棶棰樼洰
+     *
+     * @param multipartFile
+     * @return
+     */
+    public List<SvyLibTopicRes> importLitTopic(SysUser user, MultipartFile multipartFile);
+
+    public Map<String, List<SvyLibTopicAndOptionRes>> showTopic(SvyTopicReq svyTopicReq);
+}
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 9466aff..d871d26 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java
@@ -5,7 +5,11 @@
 
 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.mapper.Icd10AssociationMapper;
+import com.smartor.mapper.SvyLibTopicMapper;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +17,7 @@
 import com.smartor.mapper.SvyLibTitleMapper;
 import com.smartor.domain.SvyLibTitle;
 import com.smartor.service.ISvyLibTitleService;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 闂嵎Service涓氬姟灞傚鐞�
@@ -24,6 +29,10 @@
 public class SvyLibTitleServiceImpl implements ISvyLibTitleService {
     @Autowired
     private SvyLibTitleMapper svyLibTitleMapper;
+    @Autowired
+    private Icd10AssociationMapper icd10AssociationMapper;
+    @Autowired
+    private SvyLibTopicMapper svyLibTopicMapper;
 
     /**
      * 鏌ヨ闂嵎
@@ -69,10 +78,24 @@
      * @param svyLibTitle 闂嵎
      * @return 缁撴灉
      */
+    @Transactional
     @Override
     public int insertSvyLibTitle(SvyLibTitle svyLibTitle) {
         svyLibTitle.setCreateTime(DateUtils.getNowDate());
-        return svyLibTitleMapper.insertSvyLibTitle(svyLibTitle);
+        svyLibTitleMapper.insertSvyLibTitle(svyLibTitle);
+        //鍏宠仈闂嵎鐤剧梾
+        for (String icdId : svyLibTitle.getIcdID()) {
+            Icd10Association icd10Association = new Icd10Association();
+            icd10Association.setIcd10code(icdId);
+            icd10Association.setSvyid(svyLibTitle.getSvyid());
+            icd10AssociationMapper.insertIcd10Association(icd10Association);
+        }
+        //鏂板闂棰樼洰
+        for (int i = 0; i < svyLibTitle.getSvyLibTopics().size(); i++) {
+            SvyLibTopic svyLibTopic = svyLibTitle.getSvyLibTopics().get(i);
+            svyLibTopicMapper.insertSvyLibTopic(svyLibTopic);
+        }
+        return 1;
     }
 
     /**
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java
index f0e7adc..655070d 100644
--- a/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java
@@ -34,8 +34,8 @@
     @Autowired
     private SvyLibTopicMapper svyLibTopicMapper;
 
-    @Autowired
-    private SvyLibTopicoptionMapper svyLibTopicoptionMapper;
+//    @Autowired
+//    private SvyLibTopicoptionMapper svyLibTopicoptionMapper;
 
     /**
      * 鏌ヨ闂嵎棰樼洰
@@ -103,211 +103,6 @@
     @Override
     public int deleteSvyLibTopicByTopicid(Long topicid) {
         return svyLibTopicMapper.deleteSvyLibTopicByTopicid(topicid);
-    }
-
-    /**
-     * 鎵归噺瀵煎叆闂棶棰樼洰
-     *
-     * @param multipartFile
-     * @return
-     */
-    @Override
-    @Transactional
-    public List<SvyLibTopicRes> importLitTopic(SysUser user, MultipartFile multipartFile) {
-        List<SvyLibTopicRes> svyLibTopicErrors = new ArrayList<>();
-
-        try {
-            Workbook workbook = new XSSFWorkbook(multipartFile.getInputStream());
-            Sheet sheet = workbook.getSheetAt(0);
-
-            //闂嵎棰樼洰瀵硅薄
-            SvyLibTopic svyLibTopic = new SvyLibTopic();
-
-
-            for (int i = sheet.getFirstRowNum() + 1; i < sheet.getLastRowNum(); i++) {
-                SvyLibTopicRes svyLibTopicRes = new SvyLibTopicRes();
-
-                Row row = sheet.getRow(i);
-                //濡傛灉琛屼负绌猴紝杩涜涓嬩竴娆″惊鐜�
-                if (ObjectUtils.isEmpty(row.getCell(0)) && ObjectUtils.isEmpty(row.getCell(1)) && ObjectUtils.isEmpty(row.getCell(2))) {
-                    continue;
-                }
-                //鍒ゆ柇鏁版嵁鏄惁鏈夐棶棰�
-                svyLibTopicRes.setTopic(row.getCell(0).toString());
-                if (ObjectUtils.isEmpty(row.getCell(0)) || StringUtils.isEmpty(row.getCell(0).toString())) {
-                    svyLibTopicRes.setRemark("棰樼洰涓虹┖,");
-                } else {
-                    //鍒ゆ柇涓�涓嬭棰樻槸鍚﹀凡缁忓湪琛ㄩ噷鍑虹幇
-                    SvyLibTopic svyLibTopic1 = new SvyLibTopic();
-                    svyLibTopic1.setTopic(row.getCell(0).toString());
-                    List<SvyLibTopic> svyLibTopics = svyLibTopicMapper.selectSvyLibTopicList(svyLibTopic1);
-                    if (svyLibTopics.size() > 0) {
-                        //宸茬粡瀛樺湪浜嗭紝灏变笉瀛樹簡
-                        continue;
-                    }
-                }
-                svyLibTopicRes.setTag(row.getCell(1).toString());
-                if (ObjectUtils.isEmpty(row.getCell(1)) || StringUtils.isEmpty(row.getCell(1).toString())) {
-                    svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "绫诲埆涓虹┖,");
-                }
-                svyLibTopicRes.setTopictype(row.getCell(2).toString());
-                if (ObjectUtils.isEmpty(row.getCell(2)) || StringUtils.isEmpty(row.getCell(2).toString())) {
-                    svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "棰樼洰绫诲瀷涓虹┖,");
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(3))) {
-                    svyLibTopicRes.setAnswer(row.getCell(3).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(4))) {
-                    svyLibTopicRes.setOptionA(row.getCell(4).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(5))) {
-                    svyLibTopicRes.setOptionB(row.getCell(5).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(6))) {
-                    svyLibTopicRes.setOptionC(row.getCell(6).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(7))) {
-                    svyLibTopicRes.setOptionD(row.getCell(7).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(8))) {
-                    svyLibTopicRes.setScore(row.getCell(8).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(9))) {
-                    svyLibTopicRes.setScore(row.getCell(9).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(10))) {
-                    svyLibTopicRes.setScore(row.getCell(10).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(11))) {
-                    svyLibTopicRes.setScore(row.getCell(11).toString());
-                }
-                if (ObjectUtils.isNotEmpty(row.getCell(12))) {
-                    svyLibTopicRes.setScore(row.getCell(12).toString());
-                }
-                if (StringUtils.isNotEmpty(svyLibTopicRes.getRemark())) {
-                    //璇存槑璇ヨ鏁版嵁鏈夐棶棰�
-                    svyLibTopicErrors.add(svyLibTopicRes);
-                    continue;
-                }
-
-                //鏁版嵁娌℃湁闂锛屽紑濮嬫彃琛�
-                svyLibTopic.setTopic(row.getCell(0).toString());
-                if (row.getCell(2).toString().equals("鍗曢��")) {
-                    svyLibTopic.setTopictype(1L);
-                } else if (row.getCell(2).toString().equals("澶氶��")) {
-                    svyLibTopic.setTopictype(2L);
-                } else {
-                    svyLibTopic.setTopictype(3L);
-                }
-                svyLibTopic.setTopiccode(UUID.randomUUID().toString().replace("-", ""));
-                //棰樼洰绫诲埆
-                svyLibTopic.setTag(row.getCell(1).toString());
-                svyLibTopic.setCreateBy(user.getUserName());
-                svyLibTopic.setOrgid(user.getDeptId().toString());
-                svyLibTopic.setUpdateBy(user.getUserName());
-                svyLibTopic.setUpdateTime(new Date());
-                svyLibTopic.setCreateTime(new Date());
-                svyLibTopic.setDelFlag("0");
-                //鏂板棰樼洰琛�
-                svyLibTopicMapper.insertSvyLibTopic(svyLibTopic);
-
-                //鏂板棰樼洰閫夐」琛�
-                SvyLibTopicoption svyLibTopicoption = new SvyLibTopicoption();
-                svyLibTopicoption.setTopicid(svyLibTopic.getTopicid());
-                svyLibTopicoption.setTopictype(svyLibTopic.getTopictype());
-                svyLibTopicoption.setOptioncode(UUID.randomUUID().toString().replace("-", ""));
-                svyLibTopicoption.setCreateBy(user.getUserName());
-                svyLibTopicoption.setCreateTime(new Date());
-                svyLibTopicoption.setUpdateBy(user.getUserName());
-                svyLibTopicoption.setUpdateTime(new Date());
-                svyLibTopicoption.setDelFlag("0");
-                if (svyLibTopicoption.getTopictype() == 3) {
-                    //瑙g瓟棰橈紝涓嶉渶瑕佸啀璁剧疆閫夐」
-                    svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                } else {
-                    if (ObjectUtils.isNotEmpty(row.getCell(4))) {
-                        if (StringUtils.isNotEmpty(row.getCell(4).toString())) {
-                            svyLibTopicoption.setOptioncode("A");
-                            svyLibTopicoption.setOptioncontent(row.getCell(4).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(5))) {
-                        if (StringUtils.isNotEmpty(row.getCell(5).toString())) {
-                            svyLibTopicoption.setOptioncode("B");
-                            svyLibTopicoption.setOptioncontent(row.getCell(5).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(6))) {
-                        if (StringUtils.isNotEmpty(row.getCell(6).toString())) {
-                            svyLibTopicoption.setOptioncode("C");
-                            svyLibTopicoption.setOptioncontent(row.getCell(6).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(7))) {
-                        if (StringUtils.isNotEmpty(row.getCell(7).toString())) {
-                            svyLibTopicoption.setOptioncode("D");
-                            svyLibTopicoption.setOptioncontent(row.getCell(7).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(8))) {
-                        if (StringUtils.isNotEmpty(row.getCell(8).toString())) {
-                            svyLibTopicoption.setOptioncode("E");
-                            svyLibTopicoption.setOptioncontent(row.getCell(8).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(9))) {
-                        if (StringUtils.isNotEmpty(row.getCell(9).toString())) {
-                            svyLibTopicoption.setOptioncode("F");
-                            svyLibTopicoption.setOptioncontent(row.getCell(9).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(10))) {
-                        if (StringUtils.isNotEmpty(row.getCell(10).toString())) {
-                            svyLibTopicoption.setOptioncode("G");
-                            svyLibTopicoption.setOptioncontent(row.getCell(10).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                    if (ObjectUtils.isNotEmpty(row.getCell(11))) {
-                        if (StringUtils.isNotEmpty(row.getCell(11).toString())) {
-                            svyLibTopicoption.setOptioncode("H");
-                            svyLibTopicoption.setOptioncontent(row.getCell(11).toString());
-                            svyLibTopicoption.setOptionid(null);
-                            svyLibTopicoptionMapper.insertSvyLibTopicoption(svyLibTopicoption);
-                        }
-                    }
-                }
-            }
-            if (CollectionUtils.isNotEmpty(svyLibTopicErrors)) {
-                return svyLibTopicErrors;
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-        return null;
-    }
-
-    @Override
-    public SvyLibTopicRes showTopic(SvyTopicReq svyTopicReq) {
-        List<SvyLibTopicAndOptionRes> svyLibTopicAndOptionRes = svyLibTopicMapper.showTopic(svyTopicReq);
-        Map<Long, List<SvyLibTopicAndOptionRes>> groupByAge = svyLibTopicAndOptionRes.stream().collect(Collectors.groupingBy(SvyLibTopicAndOptionRes::getTopicid));
-
-        return null;
     }
 
 
diff --git a/smartor/src/main/java/com/smartor/service/impl/SvyTopicServiceImpl.java b/smartor/src/main/java/com/smartor/service/impl/SvyTopicServiceImpl.java
new file mode 100644
index 0000000..21c5cbc
--- /dev/null
+++ b/smartor/src/main/java/com/smartor/service/impl/SvyTopicServiceImpl.java
@@ -0,0 +1,313 @@
+package com.smartor.service.impl;
+
+import com.google.gson.JsonObject;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.smartor.domain.*;
+import com.smartor.mapper.SvyTopicMapper;
+import com.smartor.mapper.SvyTopicoptionMapper;
+import com.smartor.service.ISvyTopicService;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 棰樼洰Service涓氬姟灞傚鐞�
+ *
+ * @author ruoyi
+ * @date 2023-06-26
+ */
+@Service
+public class SvyTopicServiceImpl implements ISvyTopicService {
+    @Autowired
+    private SvyTopicMapper svyTopicMapper;
+    @Autowired
+    private SvyTopicoptionMapper svyTopicoptionMapper;
+
+    /**
+     * 鏌ヨ棰樼洰
+     *
+     * @param topicid 棰樼洰涓婚敭
+     * @return 棰樼洰
+     */
+    @Override
+    public SvyTopic selectSvyTopicByTopicid(Long topicid) {
+        return svyTopicMapper.selectSvyTopicByTopicid(topicid);
+    }
+
+    /**
+     * 鏌ヨ棰樼洰鍒楄〃
+     *
+     * @param svyTopic 棰樼洰
+     * @return 棰樼洰
+     */
+    @Override
+    public List<SvyTopic> selectSvyTopicList(SvyTopic svyTopic) {
+        return svyTopicMapper.selectSvyTopicList(svyTopic);
+    }
+
+    /**
+     * 鏂板棰樼洰
+     *
+     * @param svyTopic 棰樼洰
+     * @return 缁撴灉
+     */
+    @Override
+    public int insertSvyTopic(SvyTopic svyTopic) {
+        svyTopic.setCreateTime(DateUtils.getNowDate());
+        return svyTopicMapper.insertSvyTopic(svyTopic);
+    }
+
+    /**
+     * 淇敼棰樼洰
+     *
+     * @param svyTopic 棰樼洰
+     * @return 缁撴灉
+     */
+    @Override
+    public int updateSvyTopic(SvyTopic svyTopic) {
+        svyTopic.setUpdateTime(DateUtils.getNowDate());
+        return svyTopicMapper.updateSvyTopic(svyTopic);
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎棰樼洰
+     *
+     * @param topicids 闇�瑕佸垹闄ょ殑棰樼洰涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSvyTopicByTopicids(Long[] topicids) {
+        return svyTopicMapper.deleteSvyTopicByTopicids(topicids);
+    }
+
+    /**
+     * 鍒犻櫎棰樼洰淇℃伅
+     *
+     * @param topicid 棰樼洰涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public int deleteSvyTopicByTopicid(Long topicid) {
+        return svyTopicMapper.deleteSvyTopicByTopicid(topicid);
+    }
+
+
+    /**
+     * 鎵归噺瀵煎叆闂棶棰樼洰
+     *
+     * @param multipartFile
+     * @return
+     */
+    @Override
+    @Transactional
+    public List<SvyLibTopicRes> importLitTopic(SysUser user, MultipartFile multipartFile) {
+        List<SvyLibTopicRes> svyLibTopicErrors = new ArrayList<>();
+
+        try {
+            Workbook workbook = new XSSFWorkbook(multipartFile.getInputStream());
+            Sheet sheet = workbook.getSheetAt(0);
+
+            //闂嵎棰樼洰瀵硅薄
+            SvyTopic svyTopic = new SvyTopic();
+
+
+            for (int i = sheet.getFirstRowNum() + 1; i < sheet.getLastRowNum(); i++) {
+                SvyLibTopicRes svyLibTopicRes = new SvyLibTopicRes();
+
+                Row row = sheet.getRow(i);
+                //濡傛灉琛屼负绌猴紝杩涜涓嬩竴娆″惊鐜�
+                if (ObjectUtils.isEmpty(row.getCell(0)) && ObjectUtils.isEmpty(row.getCell(1)) && ObjectUtils.isEmpty(row.getCell(2))) {
+                    continue;
+                }
+                //鍒ゆ柇鏁版嵁鏄惁鏈夐棶棰�
+                svyLibTopicRes.setTopic(row.getCell(0).toString());
+                if (ObjectUtils.isEmpty(row.getCell(0)) || StringUtils.isEmpty(row.getCell(0).toString())) {
+                    svyLibTopicRes.setRemark("棰樼洰涓虹┖,");
+                } else {
+                    //鍒ゆ柇涓�涓嬭棰樻槸鍚﹀凡缁忓湪琛ㄩ噷鍑虹幇
+                    SvyTopic svyLibTopic1 = new SvyTopic();
+                    svyLibTopic1.setTopic(row.getCell(0).toString());
+                    List<SvyTopic> svyLibTopics = svyTopicMapper.selectSvyTopicList(svyLibTopic1);
+                    if (svyLibTopics.size() > 0) {
+                        //宸茬粡瀛樺湪浜嗭紝灏变笉瀛樹簡
+                        continue;
+                    }
+                }
+                svyLibTopicRes.setTag(row.getCell(1).toString());
+                if (ObjectUtils.isEmpty(row.getCell(1)) || StringUtils.isEmpty(row.getCell(1).toString())) {
+                    svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "绫诲埆涓虹┖,");
+                }
+                svyLibTopicRes.setTopictype(row.getCell(2).toString());
+                if (ObjectUtils.isEmpty(row.getCell(2)) || StringUtils.isEmpty(row.getCell(2).toString())) {
+                    svyLibTopicRes.setRemark(StringUtils.isNotEmpty(svyLibTopicRes.getRemark()) ? svyLibTopicRes.getRemark() : "" + "棰樼洰绫诲瀷涓虹┖,");
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(3))) {
+                    svyLibTopicRes.setAnswer(row.getCell(3).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(4))) {
+                    svyLibTopicRes.setOptionA(row.getCell(4).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(5))) {
+                    svyLibTopicRes.setOptionB(row.getCell(5).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(6))) {
+                    svyLibTopicRes.setOptionC(row.getCell(6).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(7))) {
+                    svyLibTopicRes.setOptionD(row.getCell(7).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(8))) {
+                    svyLibTopicRes.setScore(row.getCell(8).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(9))) {
+                    svyLibTopicRes.setScore(row.getCell(9).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(10))) {
+                    svyLibTopicRes.setScore(row.getCell(10).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(11))) {
+                    svyLibTopicRes.setScore(row.getCell(11).toString());
+                }
+                if (ObjectUtils.isNotEmpty(row.getCell(12))) {
+                    svyLibTopicRes.setScore(row.getCell(12).toString());
+                }
+                if (StringUtils.isNotEmpty(svyLibTopicRes.getRemark())) {
+                    //璇存槑璇ヨ鏁版嵁鏈夐棶棰�
+                    svyLibTopicErrors.add(svyLibTopicRes);
+                    continue;
+                }
+
+                //鏁版嵁娌℃湁闂锛屽紑濮嬫彃琛�
+                svyTopic.setTopic(row.getCell(0).toString());
+                if (row.getCell(2).toString().equals("鍗曢��") || row.getCell(2).toString().equals("1") || row.getCell(2).toString().equals("1.0")) {
+                    svyTopic.setTopictype(1L);
+                } else if (row.getCell(2).toString().equals("澶氶��") || row.getCell(2).toString().equals("2") || row.getCell(2).toString().equals("2.0")) {
+                    svyTopic.setTopictype(2L);
+                } else {
+                    svyTopic.setTopictype(3L);
+                }
+                svyTopic.setTopiccode(UUID.randomUUID().toString().replace("-", ""));
+                //棰樼洰绫诲埆
+                svyTopic.setTag(row.getCell(1).toString());
+                svyTopic.setCreateBy(user.getUserName());
+                svyTopic.setOrgid(user.getDeptId().toString());
+                svyTopic.setUpdateBy(user.getUserName());
+                svyTopic.setUpdateTime(new Date());
+                svyTopic.setCreateTime(new Date());
+                svyTopic.setDelFlag("0");
+                svyTopic.setAnswer(row.getCell(3).toString());
+                //鏂板棰樼洰琛�
+                svyTopicMapper.insertSvyTopic(svyTopic);
+
+                //鏂板棰樼洰閫夐」琛�
+                SvyTopicoption svyTopicoption = new SvyTopicoption();
+                svyTopicoption.setTopicid(svyTopic.getTopicid());
+                svyTopicoption.setTopictype(svyTopic.getTopictype());
+                svyTopicoption.setOptioncode(UUID.randomUUID().toString().replace("-", ""));
+                svyTopicoption.setCreateBy(user.getUserName());
+                svyTopicoption.setCreateTime(new Date());
+                svyTopicoption.setUpdateBy(user.getUserName());
+                svyTopicoption.setUpdateTime(new Date());
+                svyTopicoption.setDelFlag("0");
+                if (svyTopicoption.getTopictype() == 3) {
+                    //瑙g瓟棰橈紝涓嶉渶瑕佸啀璁剧疆閫夐」
+                    svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                } else {
+                    if (ObjectUtils.isNotEmpty(row.getCell(4))) {
+                        if (StringUtils.isNotEmpty(row.getCell(4).toString())) {
+                            svyTopicoption.setOptioncode("A");
+                            svyTopicoption.setOptioncontent(row.getCell(4).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(5))) {
+                        if (StringUtils.isNotEmpty(row.getCell(5).toString())) {
+                            svyTopicoption.setOptioncode("B");
+                            svyTopicoption.setOptioncontent(row.getCell(5).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(6))) {
+                        if (StringUtils.isNotEmpty(row.getCell(6).toString())) {
+                            svyTopicoption.setOptioncode("C");
+                            svyTopicoption.setOptioncontent(row.getCell(6).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(7))) {
+                        if (StringUtils.isNotEmpty(row.getCell(7).toString())) {
+                            svyTopicoption.setOptioncode("D");
+                            svyTopicoption.setOptioncontent(row.getCell(7).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(8))) {
+                        if (StringUtils.isNotEmpty(row.getCell(8).toString())) {
+                            svyTopicoption.setOptioncode("E");
+                            svyTopicoption.setOptioncontent(row.getCell(8).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(9))) {
+                        if (StringUtils.isNotEmpty(row.getCell(9).toString())) {
+                            svyTopicoption.setOptioncode("F");
+                            svyTopicoption.setOptioncontent(row.getCell(9).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(10))) {
+                        if (StringUtils.isNotEmpty(row.getCell(10).toString())) {
+                            svyTopicoption.setOptioncode("G");
+                            svyTopicoption.setOptioncontent(row.getCell(10).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                    if (ObjectUtils.isNotEmpty(row.getCell(11))) {
+                        if (StringUtils.isNotEmpty(row.getCell(11).toString())) {
+                            svyTopicoption.setOptioncode("H");
+                            svyTopicoption.setOptioncontent(row.getCell(11).toString());
+                            svyTopicoption.setOptionid(null);
+                            svyTopicoptionMapper.insertSvyTopicoption(svyTopicoption);
+                        }
+                    }
+                }
+            }
+            if (CollectionUtils.isNotEmpty(svyLibTopicErrors)) {
+                return svyLibTopicErrors;
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return null;
+    }
+
+    @Override
+    public Map<String, List<SvyLibTopicAndOptionRes>>  showTopic(SvyTopicReq svyTopicReq) {
+        List<SvyLibTopicAndOptionRes> svyLibTopicAndOptionRes = svyTopicMapper.showTopic(svyTopicReq);
+        Map<String, List<SvyLibTopicAndOptionRes>> groupByAge = svyLibTopicAndOptionRes.stream().collect(Collectors.groupingBy(SvyLibTopicAndOptionRes::getTopic));
+
+        return groupByAge;
+    }
+
+}
diff --git a/smartor/src/main/resources/log4j.properties b/smartor/src/main/resources/log4j.properties
new file mode 100644
index 0000000..a5e54e0
--- /dev/null
+++ b/smartor/src/main/resources/log4j.properties
@@ -0,0 +1,15 @@
+## Configure logging for testing: optionally with log file
+#log4j.rootLogger=WARI, stdout
+## log4j.rootLogger=WARN, stdout, logfile
+#
+#log4j.appender.stdout=org.apache.log1j.ConsoleAppender
+#log4j.appender.stdout.layout=org.apache.logj.PatternLayout
+#log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
+#
+#log1j.appender.logfile=org.apache.log4j.FileAppender
+#log4j.appender.logfile.File=target/spring.log
+#log4j.appender.logfile.layout=org.apache.log1j.PatternLayout
+#log1j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
+
+log4j.logger.freemarker.cache=ERROR
+log4j.logger.freemarker.beans=ERROR
\ No newline at end of file
diff --git a/smartor/src/main/resources/mapper/smartor/Icd10AssociationMapper.xml b/smartor/src/main/resources/mapper/smartor/Icd10AssociationMapper.xml
new file mode 100644
index 0000000..f4da9d9
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/Icd10AssociationMapper.xml
@@ -0,0 +1,69 @@
+<?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.Icd10AssociationMapper">
+    
+    <resultMap type="com.smartor.domain.Icd10Association" id="Icd10AssociationResult">
+        <result property="icd10code"    column="icd10code"    />
+        <result property="icd10name"    column="icd10name"    />
+        <result property="svyid"    column="svyid"    />
+        <result property="updatetime"    column="updatetime"    />
+    </resultMap>
+
+    <sql id="selectIcd10AssociationVo">
+        select icd10code, icd10name, svyid, updatetime from icd10_association
+    </sql>
+
+    <select id="selectIcd10AssociationList" parameterType="com.smartor.domain.Icd10Association" resultMap="Icd10AssociationResult">
+        <include refid="selectIcd10AssociationVo"/>
+        <where>  
+            <if test="icd10code != null  and icd10code != ''"> and icd10code = #{icd10code}</if>
+            <if test="icd10name != null  and icd10name != ''"> and icd10name like concat('%', #{icd10name}, '%')</if>
+            <if test="svyid != null "> and svyid = #{svyid}</if>
+            <if test="updatetime != null "> and updatetime = #{updatetime}</if>
+        </where>
+    </select>
+    
+    <select id="selectIcd10AssociationByIcd10code" parameterType="String" resultMap="Icd10AssociationResult">
+        <include refid="selectIcd10AssociationVo"/>
+        where icd10code = #{icd10code}
+    </select>
+        
+    <insert id="insertIcd10Association" parameterType="com.smartor.domain.Icd10Association">
+        insert into icd10_association
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="icd10code != null and icd10code != ''">icd10code,</if>
+            <if test="icd10name != null">icd10name,</if>
+            <if test="svyid != null">svyid,</if>
+            <if test="updatetime != null">updatetime,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="icd10code != null and icd10code != ''">#{icd10code},</if>
+            <if test="icd10name != null">#{icd10name},</if>
+            <if test="svyid != null">#{svyid},</if>
+            <if test="updatetime != null">#{updatetime},</if>
+         </trim>
+    </insert>
+
+    <update id="updateIcd10Association" parameterType="Icd10Association">
+        update icd10_association
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="icd10name != null">icd10name = #{icd10name},</if>
+            <if test="svyid != null">svyid = #{svyid},</if>
+            <if test="updatetime != null">updatetime = #{updatetime},</if>
+        </trim>
+        where icd10code = #{icd10code}
+    </update>
+
+    <delete id="deleteIcd10AssociationByIcd10code" parameterType="String">
+        delete from icd10_association where icd10code = #{icd10code}
+    </delete>
+
+    <delete id="deleteIcd10AssociationByIcd10codes" parameterType="String">
+        delete from icd10_association where icd10code in 
+        <foreach item="icd10code" collection="array" open="(" separator="," close=")">
+            #{icd10code}
+        </foreach>
+    </delete>
+</mapper>
\ No newline at end of file
diff --git a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
index d02d1fc..d72d610 100644
--- a/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
+++ b/smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml
@@ -29,7 +29,7 @@
         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
     </sql>
 
-    <select id="selectSvyLibTopicList" parameterType="SvyLibTopic" resultMap="SvyLibTopicResult">
+    <select id="selectSvyLibTopicList" parameterType="com.smartor.domain.SvyLibTopic" resultMap="SvyLibTopicResult">
         <include refid="selectSvyLibTopicVo"/>
         <where>  
             <if test="oldid != null "> and oldid = #{oldid}</if>
@@ -45,7 +45,7 @@
         where topicid = #{topicid}
     </select>
         
-    <insert id="insertSvyLibTopic" parameterType="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>
@@ -87,7 +87,7 @@
          </trim>
     </insert>
 
-    <update id="updateSvyLibTopic" parameterType="SvyLibTopic">
+    <update id="updateSvyLibTopic" parameterType="com.smartor.domain.SvyLibTopic">
         update svy_lib_topic
         <trim prefix="SET" suffixOverrides=",">
             <if test="oldid != null">oldid = #{oldid},</if>
@@ -121,21 +121,5 @@
         </foreach>
     </delete>
 
-    <select id="showTopic" resultType="com.smartor.domain.SvyLibTopicAndOptionRes"
-            parameterType="com.smartor.domain.SvyTopicReq">
-        SELECT a.topicid, a.topiccode, a.topic, a.topictype, a.tag, b.optioncode, b.optioncontent
-        FROM svy_lib_topic a,
-        svy_lib_topicoption b
-        WHERE a.topicid = b.topicid
-        <if test="topic != null and topic != ''">
-            and a.topic LIKE concat('%', #{topic}, '%')
-        </if>
-        <if test="topicType != null and topicType != ''">
-            and a.topictype = #{topicType}
-        </if>
-        <if test="tag != null and tag != ''">
-            and a.tag LIKE concat('%', #{tag}, '%')
-        </if>
-        GROUP BY a.topic, b.optioncode
-    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTopicMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTopicMapper.xml
new file mode 100644
index 0000000..5477226
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/SvyTopicMapper.xml
@@ -0,0 +1,161 @@
+<?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.SvyTopicMapper">
+
+    <resultMap type="com.smartor.domain.SvyTopic" id="SvyTopicResult">
+        <result property="topicid" column="topicid"/>
+        <result property="topictype" column="topictype"/>
+        <result property="topiccode" column="topiccode"/>
+        <result property="topic" column="topic"/>
+        <result property="tag" column="tag"/>
+        <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"/>
+    </resultMap>
+
+    <sql id="selectSvyTopicVo">
+        select topicid,
+               topictype,
+               topiccode,
+               topic,
+               tag,
+               sort,
+               ismandatory,
+               ishide,
+               del_flag,
+               orgid,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               isupload,
+               upload_time
+        from svy_topic
+    </sql>
+
+    <select id="selectSvyTopicList" parameterType="com.smartor.domain.SvyTopic" resultMap="SvyTopicResult">
+        <include refid="selectSvyTopicVo"/>
+        <where>
+            <if test="topictype != null ">and topictype = #{topictype}</if>
+            <if test="topiccode != null  and topiccode != ''">and topiccode = #{topiccode}</if>
+            <if test="topic != null  and topic != ''">and topic = #{topic}</if>
+            <if test="tag != null  and tag != ''">and tag = #{tag}</if>
+            <if test="sort != null ">and sort = #{sort}</if>
+            <if test="ismandatory != null ">and ismandatory = #{ismandatory}</if>
+            <if test="ishide != null ">and ishide = #{ishide}</if>
+            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+            <if test="isupload != null ">and isupload = #{isupload}</if>
+            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
+        </where>
+    </select>
+
+    <select id="selectSvyTopicByTopicid" parameterType="Long" resultMap="SvyTopicResult">
+        <include refid="selectSvyTopicVo"/>
+        where topicid = #{topicid}
+    </select>
+
+    <insert id="insertSvyTopic" parameterType="com.smartor.domain.SvyTopic" useGeneratedKeys="true"
+            keyProperty="topicid">
+        insert into svy_topic
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="topictype != null">topictype,</if>
+            <if test="topiccode != null and topiccode != ''">topiccode,</if>
+            <if test="topic != null">topic,</if>
+            <if test="tag != null">tag,</if>
+            <if test="sort != null">sort,</if>
+            <if test="ismandatory != null">ismandatory,</if>
+            <if test="ishide != null">ishide,</if>
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
+            <if test="orgid != null">orgid,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="isupload != null">isupload,</if>
+            <if test="uploadTime != null">upload_time,</if>
+            <if test="answer != null">answer,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="topictype != null">#{topictype},</if>
+            <if test="topiccode != null and topiccode != ''">#{topiccode},</if>
+            <if test="topic != null">#{topic},</if>
+            <if test="tag != null">#{tag},</if>
+            <if test="sort != null">#{sort},</if>
+            <if test="ismandatory != null">#{ismandatory},</if>
+            <if test="ishide != null">#{ishide},</if>
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
+            <if test="orgid != null">#{orgid},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="isupload != null">#{isupload},</if>
+            <if test="uploadTime != null">#{uploadTime},</if>
+            <if test="answer != null">#{answer},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSvyTopic" parameterType="com.smartor.domain.SvyTopic">
+        update svy_topic
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="topictype != null">topictype = #{topictype},</if>
+            <if test="topiccode != null and topiccode != ''">topiccode = #{topiccode},</if>
+            <if test="topic != null">topic = #{topic},</if>
+            <if test="tag != null">tag = #{tag},</if>
+            <if test="sort != null">sort = #{sort},</if>
+            <if test="ismandatory != null">ismandatory = #{ismandatory},</if>
+            <if test="ishide != null">ishide = #{ishide},</if>
+            <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
+            <if test="orgid != null">orgid = #{orgid},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="isupload != null">isupload = #{isupload},</if>
+            <if test="uploadTime != null">upload_time = #{uploadTime},</if>
+        </trim>
+        where topicid = #{topicid}
+    </update>
+
+    <delete id="deleteSvyTopicByTopicid" parameterType="Long">
+        delete
+        from svy_topic
+        where topicid = #{topicid}
+    </delete>
+
+    <delete id="deleteSvyTopicByTopicids" parameterType="String">
+        delete from svy_topic where topicid in
+        <foreach item="topicid" collection="array" open="(" separator="," close=")">
+            #{topicid}
+        </foreach>
+    </delete>
+
+    <select id="showTopic" resultType="com.smartor.domain.SvyLibTopicAndOptionRes"
+            parameterType="com.smartor.domain.SvyTopicReq">
+        SELECT a.topicid, a.topiccode, a.topic, a.topictype, a.tag, b.optioncode, b.optioncontent
+        FROM svy_topic a,
+        svy_topicoption b
+        WHERE a.topicid = b.topicid
+        <if test="topic != null and topic != ''">
+            and a.topic LIKE concat('%', #{topic}, '%')
+        </if>
+        <if test="topicType != null and topicType != ''">
+            and a.topictype = #{topicType}
+        </if>
+        <if test="tag != null and tag != ''">
+            and a.tag LIKE concat('%', #{tag}, '%')
+        </if>
+        GROUP BY a.topic, b.optioncode
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/smartor/src/main/resources/mapper/smartor/SvyTopicoptionMapper.xml b/smartor/src/main/resources/mapper/smartor/SvyTopicoptionMapper.xml
new file mode 100644
index 0000000..9168922
--- /dev/null
+++ b/smartor/src/main/resources/mapper/smartor/SvyTopicoptionMapper.xml
@@ -0,0 +1,233 @@
+<?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.SvyTopicoptionMapper">
+
+    <resultMap type="com.smartor.domain.SvyTopicoption" id="SvyTopicoptionResult">
+        <result property="optionid" column="optionid"/>
+        <result property="topicid" column="topicid"/>
+        <result property="svyid" column="svyid"/>
+        <result property="topictype" column="topictype"/>
+        <result property="optioncode" column="optioncode"/>
+        <result property="optioncontent" column="optioncontent"/>
+        <result property="isexistdetail" column="isexistdetail"/>
+        <result property="detailismandatory" column="detailismandatory"/>
+        <result property="isexceptionitem" column="isexceptionitem"/>
+        <result property="istrack" column="istrack"/>
+        <result property="score" column="score"/>
+        <result property="prompt" column="prompt"/>
+        <result property="jump" column="jump"/>
+        <result property="parentoptionid" column="parentoptionid"/>
+        <result property="ismutex" column="ismutex"/>
+        <result property="verifyrule" column="verifyrule"/>
+        <result property="sort" column="sort"/>
+        <result property="verificationtype" column="verificationtype"/>
+        <result property="isrange" column="isrange"/>
+        <result property="minrange" column="minrange"/>
+        <result property="maxrange" column="maxrange"/>
+        <result property="rangelength" column="rangelength"/>
+        <result property="orgid" column="orgid"/>
+        <result property="oldid" column="oldid"/>
+        <result property="delFlag" column="del_flag"/>
+        <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"/>
+    </resultMap>
+
+    <sql id="selectSvyTopicoptionVo">
+        select optionid,
+               topicid,
+               svyid,
+               topictype,
+               optioncode,
+               optioncontent,
+               isexistdetail,
+               detailismandatory,
+               isexceptionitem,
+               istrack,
+               score,
+               prompt,
+               jump,
+               parentoptionid,
+               ismutex,
+               verifyrule,
+               sort,
+               verificationtype,
+               isrange,
+               minrange,
+               maxrange,
+               rangelength,
+               orgid,
+               oldid,
+               del_flag,
+               create_by,
+               create_time,
+               update_by,
+               update_time,
+               isupload,
+               upload_time
+        from svy_topicoption
+    </sql>
+
+    <select id="selectSvyTopicoptionList" parameterType="com.smartor.domain.SvyTopicoption"
+            resultMap="SvyTopicoptionResult">
+        <include refid="selectSvyTopicoptionVo"/>
+        <where>
+            <if test="topicid != null ">and topicid = #{topicid}</if>
+            <if test="svyid != null ">and svyid = #{svyid}</if>
+            <if test="topictype != null ">and topictype = #{topictype}</if>
+            <if test="optioncode != null  and optioncode != ''">and optioncode = #{optioncode}</if>
+            <if test="optioncontent != null  and optioncontent != ''">and optioncontent = #{optioncontent}</if>
+            <if test="isexistdetail != null ">and isexistdetail = #{isexistdetail}</if>
+            <if test="detailismandatory != null ">and detailismandatory = #{detailismandatory}</if>
+            <if test="isexceptionitem != null ">and isexceptionitem = #{isexceptionitem}</if>
+            <if test="istrack != null ">and istrack = #{istrack}</if>
+            <if test="score != null ">and score = #{score}</if>
+            <if test="prompt != null  and prompt != ''">and prompt = #{prompt}</if>
+            <if test="jump != null  and jump != ''">and jump = #{jump}</if>
+            <if test="parentoptionid != null ">and parentoptionid = #{parentoptionid}</if>
+            <if test="ismutex != null ">and ismutex = #{ismutex}</if>
+            <if test="verifyrule != null  and verifyrule != ''">and verifyrule = #{verifyrule}</if>
+            <if test="sort != null ">and sort = #{sort}</if>
+            <if test="verificationtype != null ">and verificationtype = #{verificationtype}</if>
+            <if test="isrange != null ">and isrange = #{isrange}</if>
+            <if test="minrange != null  and minrange != ''">and minrange = #{minrange}</if>
+            <if test="maxrange != null  and maxrange != ''">and maxrange = #{maxrange}</if>
+            <if test="rangelength != null ">and rangelength = #{rangelength}</if>
+            <if test="orgid != null  and orgid != ''">and orgid = #{orgid}</if>
+            <if test="oldid != null ">and oldid = #{oldid}</if>
+            <if test="isupload != null ">and isupload = #{isupload}</if>
+            <if test="uploadTime != null ">and upload_time = #{uploadTime}</if>
+        </where>
+    </select>
+
+    <select id="selectSvyTopicoptionByOptionid" parameterType="Long" resultMap="SvyTopicoptionResult">
+        <include refid="selectSvyTopicoptionVo"/>
+        where optionid = #{optionid}
+    </select>
+
+    <insert id="insertSvyTopicoption" parameterType="com.smartor.domain.SvyTopicoption" useGeneratedKeys="true"
+            keyProperty="optionid">
+        insert into svy_topicoption
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="topicid != null">topicid,</if>
+            <if test="svyid != null">svyid,</if>
+            <if test="topictype != null">topictype,</if>
+            <if test="optioncode != null">optioncode,</if>
+            <if test="optioncontent != null">optioncontent,</if>
+            <if test="isexistdetail != null">isexistdetail,</if>
+            <if test="detailismandatory != null">detailismandatory,</if>
+            <if test="isexceptionitem != null">isexceptionitem,</if>
+            <if test="istrack != null">istrack,</if>
+            <if test="score != null">score,</if>
+            <if test="prompt != null">prompt,</if>
+            <if test="jump != null">jump,</if>
+            <if test="parentoptionid != null">parentoptionid,</if>
+            <if test="ismutex != null">ismutex,</if>
+            <if test="verifyrule != null">verifyrule,</if>
+            <if test="sort != null">sort,</if>
+            <if test="verificationtype != null">verificationtype,</if>
+            <if test="isrange != null">isrange,</if>
+            <if test="minrange != null">minrange,</if>
+            <if test="maxrange != null">maxrange,</if>
+            <if test="rangelength != null">rangelength,</if>
+            <if test="orgid != null">orgid,</if>
+            <if test="oldid != null">oldid,</if>
+            <if test="delFlag != null and delFlag != ''">del_flag,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="isupload != null">isupload,</if>
+            <if test="uploadTime != null">upload_time,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="topicid != null">#{topicid},</if>
+            <if test="svyid != null">#{svyid},</if>
+            <if test="topictype != null">#{topictype},</if>
+            <if test="optioncode != null">#{optioncode},</if>
+            <if test="optioncontent != null">#{optioncontent},</if>
+            <if test="isexistdetail != null">#{isexistdetail},</if>
+            <if test="detailismandatory != null">#{detailismandatory},</if>
+            <if test="isexceptionitem != null">#{isexceptionitem},</if>
+            <if test="istrack != null">#{istrack},</if>
+            <if test="score != null">#{score},</if>
+            <if test="prompt != null">#{prompt},</if>
+            <if test="jump != null">#{jump},</if>
+            <if test="parentoptionid != null">#{parentoptionid},</if>
+            <if test="ismutex != null">#{ismutex},</if>
+            <if test="verifyrule != null">#{verifyrule},</if>
+            <if test="sort != null">#{sort},</if>
+            <if test="verificationtype != null">#{verificationtype},</if>
+            <if test="isrange != null">#{isrange},</if>
+            <if test="minrange != null">#{minrange},</if>
+            <if test="maxrange != null">#{maxrange},</if>
+            <if test="rangelength != null">#{rangelength},</if>
+            <if test="orgid != null">#{orgid},</if>
+            <if test="oldid != null">#{oldid},</if>
+            <if test="delFlag != null and delFlag != ''">#{delFlag},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="isupload != null">#{isupload},</if>
+            <if test="uploadTime != null">#{uploadTime},</if>
+        </trim>
+    </insert>
+
+    <update id="updateSvyTopicoption" parameterType="com.smartor.domain.SvyTopicoption">
+        update svy_topicoption
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="topicid != null">topicid = #{topicid},</if>
+            <if test="svyid != null">svyid = #{svyid},</if>
+            <if test="topictype != null">topictype = #{topictype},</if>
+            <if test="optioncode != null">optioncode = #{optioncode},</if>
+            <if test="optioncontent != null">optioncontent = #{optioncontent},</if>
+            <if test="isexistdetail != null">isexistdetail = #{isexistdetail},</if>
+            <if test="detailismandatory != null">detailismandatory = #{detailismandatory},</if>
+            <if test="isexceptionitem != null">isexceptionitem = #{isexceptionitem},</if>
+            <if test="istrack != null">istrack = #{istrack},</if>
+            <if test="score != null">score = #{score},</if>
+            <if test="prompt != null">prompt = #{prompt},</if>
+            <if test="jump != null">jump = #{jump},</if>
+            <if test="parentoptionid != null">parentoptionid = #{parentoptionid},</if>
+            <if test="ismutex != null">ismutex = #{ismutex},</if>
+            <if test="verifyrule != null">verifyrule = #{verifyrule},</if>
+            <if test="sort != null">sort = #{sort},</if>
+            <if test="verificationtype != null">verificationtype = #{verificationtype},</if>
+            <if test="isrange != null">isrange = #{isrange},</if>
+            <if test="minrange != null">minrange = #{minrange},</if>
+            <if test="maxrange != null">maxrange = #{maxrange},</if>
+            <if test="rangelength != null">rangelength = #{rangelength},</if>
+            <if test="orgid != null">orgid = #{orgid},</if>
+            <if test="oldid != null">oldid = #{oldid},</if>
+            <if test="delFlag != null and delFlag != ''">del_flag = #{delFlag},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="isupload != null">isupload = #{isupload},</if>
+            <if test="uploadTime != null">upload_time = #{uploadTime},</if>
+        </trim>
+        where optionid = #{optionid}
+    </update>
+
+    <delete id="deleteSvyTopicoptionByOptionid" parameterType="Long">
+        delete
+        from svy_topicoption
+        where optionid = #{optionid}
+    </delete>
+
+    <delete id="deleteSvyTopicoptionByOptionids" parameterType="String">
+        delete from svy_topicoption where optionid in
+        <foreach item="optionid" collection="array" open="(" separator="," close=")">
+            #{optionid}
+        </foreach>
+    </delete>
+
+
+</mapper>
\ No newline at end of file
diff --git a/smartor/src/main/resources/template/quiz.ftl b/smartor/src/main/resources/template/quiz.ftl
new file mode 100644
index 0000000..7fbba32
--- /dev/null
+++ b/smartor/src/main/resources/template/quiz.ftl
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <title>棰樼洰杞崲鍜屼簩缁寸爜鐢熸垚</title>
+</head>
+<body>
+<h1>棰樼洰</h1>
+<form id="quiz-form">
+    <h2>鍗曢�夐</h2>
+    <#list singleChoiceOptions as option>
+        <input type="radio" name="question1" value="${option}"> ${option}<br>
+    </#list>
+
+    <h2>澶氶�夐</h2>
+    <#list multipleChoiceOptions as option>
+        <input type="checkbox" name="question2" value="${option}"> ${option}<br>
+    </#list>
+
+    <input type="submit" value="鎻愪氦">
+</form>
+</body>
+</html>
\ No newline at end of file
diff --git a/smartor/src/main/resources/template/uestion_template.ftl b/smartor/src/main/resources/template/uestion_template.ftl
new file mode 100644
index 0000000..3218b41
--- /dev/null
+++ b/smartor/src/main/resources/template/uestion_template.ftl
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="UTF-8">
+    <title>Form</title>
+</head>
+<body>
+<h1>${question}</h1>
+<form action="/submit" method="POST">
+    <ul>
+        <#list options as option>
+            <li>
+                <label>
+                    <input type="checkbox" name="answer" value="${option}" /> ${option}
+                </label>
+            </li>
+        </#list>
+    </ul>
+    <input type="submit" value="Submit" />
+</form>
+</body>
+</html>
\ No newline at end of file

--
Gitblit v1.9.3