package com.tinyspot.question.controller;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.github.pagehelper.PageHelper;
import com.tinyspot.question.entity.*;
import com.tinyspot.question.service.AnswerService;
import com.tinyspot.question.service.PaperService;
import com.tinyspot.question.service.QuestionService;
import com.tinyspot.question.service.RecordService;
import com.tinyspot.question.util.ResultGeneratorUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author tinyspot
* @Time 2019/11/26-17:19
* 和问卷相关的请求
*/
@RestController
@RequestMapping("/paper")
public class PaperController {
private static Logger LOG = LoggerFactory.getLogger(PaperController.class);
@Autowired
PaperService paperService;
@Autowired
QuestionService questionService;
@Autowired
RecordService recordService;
@Autowired
AnswerService answerService;
/**
* 发布问卷接口,paper_new.html
* @param jsonString 问卷信息与试题信息
* @param session 为了获取userId
* @return
*/
@PostMapping("")
public Result newPaper(@RequestBody String jsonString, HttpSession session){
LOG.debug(jsonString);
//将问卷信息与问题分开
String[] strs = jsonString.split("&");
//得到问卷对象
Paper paper = JSONUtil.toBean(strs[0], Paper.class);
//得到所有的问题对象
List<Question> questions = JSONUtil.toList(JSONUtil.parseArray(strs[1]), Question.class);
LOG.debug(paper.toString());
LOG.debug(questions.toString());
//先将问卷作者id赋值
paper.setAuthorId((Integer) session.getAttribute("userId")); //设置作者id
//设置问卷创建日期
paper.setAddDate(new Date());
//创建新问卷
int code = paperService.createNewPaper(paper, questions);
Result res = ResultGeneratorUtil.genFailResult();
//问卷创建成功
if (code == 1) {
res.setCode(ResultGeneratorUtil.RESULT_CODE_SUCCESS);
res.setMsg(ResultGeneratorUtil.DEFAULT_SUCCESS_MESSAGE);
}
return res;
}
/**
* 获取所有的问卷,且是分页查询 paper_list.html
* @param pageSize 每一页大小
* @param offset 偏移
* @return
*/
@GetMapping("/list")
public Map<String, Object> getAllPaper(@RequestParam(value = "limit", defaultValue = "10") Integer pageSize
, @RequestParam(value = "offset", defaultValue = "0") Integer offset){
LOG.debug("/paper/list...GET");
int pageNum = offset/pageSize + 1; //第几页
LOG.debug("第" + pageNum + "页, 每页"+pageSize);
//开启分页,从pn也开始,一页10个数据
PageHelper.startPage(pageNum, pageSize);
//pagehelper后面紧跟的就是一个分页查询
List<PaperListItem> allPapers = paperService.getPaperList();
LOG.debug(allPapers.toString());
//生成结果集
Map<String, Object> res = new HashMap<>();
res.put("rows", allPapers);
res.put("total", allPapers.size());
return res;
}
/**
* 前提是已经登录
* 获取该登录用户的所有发布的问卷,分页查询,member_publish.html
* @param pageSize
* @param offset
* @param session
* @return
*/
@GetMapping("/user/list")
public Map<String, Object> getUsersPaper(@RequestParam(value = "limit", defaultValue = "10") Integer pageSize
, @RequestParam(value = "offset", defaultValue = "0") Integer offset
, HttpSession session){
LOG.debug("/paper/user/list...GET");
int pageNum = offset/pageSize + 1; //第几页
LOG.debug("第" + pageNum + "页, 每页"+pageSize);
//开启分页,从pn也开始,一页10个数据
PageHelper.startPage(pageNum, pageSize);
//pagehelper后面紧跟的就是一个分页查询
List<PaperListItem> allPapers = paperService.getUsersPaperList((Integer) session.getAttribute("userId"));
//LOG.debug(allPapers.toString());
//生成结果集
Map<String, Object> res = new HashMap<>();
res.put("rows", allPapers);
res.put("total", allPapers.size());
return res;
}
/**
* 获取用户发布的问卷的答卷信息
* @param pageSize
* @param offset
* @param paperId 问卷id唯一映射到一个用户,所以不需要用户id
* @return
*/
@GetMapping("/user/publishDolist/{paperId}")
public Map<String, Object> getUsersPublishDolist(@RequestParam(value = "limit", defaultValue = "10") Integer pageSize
, @RequestParam(value = "offset", defaultValue = "0") Integer offset
, @PathVariable("paperId") Integer paperId){
LOG.debug("/paper/user/publishDolist/paperid...GET");
int pageNum = offset/pageSize + 1; //第几页
LOG.debug("第" + pageNum + "页, 每页"+pageSize);
//先查询问卷信息
PaperListItem paperInfo = paperService.getPaper(paperId);
//开启分页,从pn也开始,一页10个数据
PageHelper.startPage(pageNum, pageSize);
//pagehelper后面紧跟的就是一个分页查询
List<PublishListItem> publishListItems = recordService.getUsersPublishDolist(paperId);
//List<PaperListItem> allPapers = paperService.getUsersPaperList((Integer) session.getAttribute("userId"));
//LOG.debug(allPapers.toString());
//将问卷信息赋值给每个答题信息
for (PublishListItem item : publishListItems) {
item.setType(paperInfo.getType());
item.setTitle(paperInfo.getTitle());
item.setSubTitle(paperInfo.getSubTitle());
item.setDescription(paperInfo.getDescription());
item.setAddDate(paperInfo.getAddDate());
item.setStartDate(paperInfo.getStartDate());
item.setEndDate(paperInfo.getEndDate());
item.setTimeLimit(paperInfo.getTimeLimit());
}
//生成结果集
Map<String, Object> res = new HashMap<>();
res.put("rows", publishListItems);
res.put("total", publishListItems.size());
return res;
}
/**
* 返回问卷信息与问卷中的题目 paper_do.html
* @param paperId 问卷id
* @return
*/
@GetMapping("/do/{paperId}")
public Map<String, Object> getPaperAndQuestions(@PathVariable(value = "paperId") Integer paperId){
LOG.debug("/do/paperId...GET");
LOG.debug(paperId.toString());
//获取问卷信息
PaperListItem paper = paperService.getPaper(paperId);
//获取该问卷中所有的问题
List<Question> questions = questionService.getQuestions(paperId);
LOG.debug(paper.toString());
LOG.debug(questions.toString());
//生成结果集
Map<String, Object> res = new HashMap<>();
res.put("paperInfo", paper);
res.put("questions", questions);
return res;
}
/**
* 答题接口 paper_do.html
* @param jsonStr 答题信息及答案信息
* @param session 为了获取userId
* @return
*/
@PostMapping("/do")
public Result anwserQuestions(@RequestBody String jsonStr, HttpSession session){
LOG.debug("/paper/do...POST");
LOG.debug(jsonStr);
//将答卷信息与具体答案分开
String[] strs = jsonStr.split("&");
//得到问卷对象
Records records = JSONUtil.toBean(strs[0], Records.class);
//得到所有的问题对象
List<Answers> answers = JSONUt
一个基于SpringBoot的简易问卷调查系统.zip
需积分: 0 173 浏览量
更新于2023-10-09
收藏 2.2MB ZIP 举报
中的“一个基于SpringBoot的简易问卷调查系统”表明了这个项目是利用SpringBoot框架构建的一个简单易用的在线问卷调查应用。SpringBoot是Java领域中广泛使用的微服务开发框架,它简化了初始化和配置Spring应用的过程,使得开发者可以更快速地搭建应用程序。
在中,“一个基于SpringBoot的简易问卷调查系统”暗示了这是一个轻量级的系统,可能包含了创建、发布、收集和分析问卷的基本功能。SpringBoot的特点包括自动配置、内嵌的HTTP服务器(如Tomcat)、健康检查和Actuator等监控工具,以及对Spring生态系统的全面支持,这些都将为问卷调查系统提供稳定且高效的运行环境。
为空,但我们可以根据标题推测这个项目可能涉及的知识点包括:
1. **Spring Boot基础**:包括SpringBoot的起步依赖、自动配置、启动器、配置文件等核心概念。
2. **MVC模式**:SpringBoot默认集成了Spring MVC,用于处理HTTP请求,实现视图与控制器的分离。
3. **数据库集成**:可能使用了Spring Data JPA或MyBatis进行数据库操作,如MySQL、PostgreSQL等。
4. **RESTful API设计**:问卷调查系统可能会通过HTTP的CRUD操作对外提供RESTful接口。
5. **模板引擎**:如Thymeleaf或Freemarker,用于生成问卷页面和结果展示页面。
6. **安全控制**:Spring Security或OAuth2可能用于实现用户认证和授权。
7. **WebSocket**:如果系统包含实时反馈功能,可能会用到WebSocket进行双向通信。
8. **响应式编程**:Spring WebFlux可提供非阻塞式的处理能力,提高系统性能。
9. **单元测试与集成测试**:JUnit和Mockito等工具进行代码测试。
10. **持续集成/持续部署(CI/CD)**:如Jenkins或GitHub Actions用于自动化构建和部署。
【压缩包子文件的文件名称列表】中的"source"可能包含了项目的源代码,其中包括以下组成部分:
1. **主配置文件**(application.properties或application.yml):定义SpringBoot应用的配置。
2. **启动类**(通常命名为Application.java):包含@SpringBootApplication注解,启动SpringBoot应用。
3. **实体类**(Survey、Question、Answer等):表示问卷、问题、答案等业务对象。
4. **数据访问层**(Repository接口):与数据库交互,如实现JPA的Repository接口。
5. **服务层**(Service接口及实现类):封装业务逻辑,调用数据访问层完成具体操作。
6. **控制器层**(Controller类):处理HTTP请求,调用服务层并返回响应。
7. **视图层**(HTML模板文件):展示问卷和结果。
8. **配置文件**(如WebConfig、SecurityConfig等):自定义Spring的配置。
9. **测试文件**(Test类):用于编写单元测试和集成测试。
10. **资源文件**(如静态文件、国际化消息文件等):提供前端所需资源。
这个基于SpringBoot的问卷调查系统涵盖了后端开发的多个重要方面,从框架基础到数据库交互,再到前端页面展示,都体现了完整的软件开发流程。对于学习和实践SpringBoot开发的人员来说,这是一个很好的实战项目。