liusheng
2023-06-27 0b193b98347b5563e59492d8f57eba8f67af6d23
新增题目
已添加19个文件
已修改14个文件
2204 ■■■■ 文件已修改
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/QRCodeController.java 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTitleController.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyLibTopicController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/controller/smartor/SvyTopicController.java 131 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/UploadConfig.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/template/question.ftl 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/pom.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/Icd10Association.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/Question.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibTitle.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyLibTopicAndOptionRes.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTopic.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/domain/SvyTopicoption.java 187 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/Icd10AssociationMapper.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyTopicMapper.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/mapper/SvyTopicoptionMapper.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/ISvyLibTopicService.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/ISvyTopicService.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SvyLibTitleServiceImpl.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SvyLibTopicServiceImpl.java 209 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/java/com/smartor/service/impl/SvyTopicServiceImpl.java 313 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/log4j.properties 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/Icd10AssociationMapper.xml 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SvyLibTopicMapper.xml 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SvyTopicMapper.xml 161 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/mapper/smartor/SvyTopicoptionMapper.xml 233 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/template/quiz.ftl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
smartor/src/main/resources/template/uestion_template.ftl 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -4,6 +4,7 @@
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;
/**
 * å¯åŠ¨ç¨‹åº
@@ -11,12 +12,10 @@
 * @author ruoyi
 */
//@SpringBootApplication(scanBasePackages="com.smartor",exclude = { DataSourceAutoConfiguration.class })
@SpringBootApplication(scanBasePackages={"com.ruoyi","com.smartor"},exclude = { DataSourceAutoConfiguration.class })
@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)
    {
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" +
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());
    }
}
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));
    }
}
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));
    }
}
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));
    }
}
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();
    }
}
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>
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>
ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@
                // è¿‡æ»¤è¯·æ±‚
                .authorizeRequests()
                // å¯¹äºŽç™»å½•login æ³¨å†Œregister éªŒè¯ç captchaImage å…è®¸åŒ¿åè®¿é—®
                .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()
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>
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;
}
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;
    }
}
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;
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;
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;
}
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;
}
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);
}
smartor/src/main/java/com/smartor/mapper/SvyLibTitleMapper.java
@@ -1,8 +1,10 @@
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接口
@@ -10,8 +12,8 @@
 * @author ruoyi
 * @date 2023-03-02
 */
public interface SvyLibTitleMapper
{
@Mapper
public interface SvyLibTitleMapper {
    /**
     * æŸ¥è¯¢é—®å·
     * 
smartor/src/main/java/com/smartor/mapper/SvyLibTopicMapper.java
@@ -64,5 +64,5 @@
    public int deleteSvyLibTopicByTopicids(Long[] topicids);
    public List<SvyLibTopicAndOptionRes> showTopic(SvyTopicReq svyTopicReq);
}
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);
}
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);
}
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);
}
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);
}
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;
    }
    /**
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) {
                    //解答题,不需要再设置选项
                    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;
    }
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) {
                    //解答题,不需要再设置选项
                    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;
    }
}
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
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>
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>
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>
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>
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>
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>