Make a better open source survey system.

Overview

卷王

简体中文 | English

一文了解开源考试系统天花板-卷王

一文了解开源调查问卷天花板-卷王

一文了解开源公开查询系统天花板-卷王

需要您的 star ⭐️ ⭐️ ⭐️ 支持鼓励 🙏 🙏 🙏 点 star 加群(338461197)获取最新的数据库脚本

考试预览

  • 考试系统预览
  • 调查问卷预览

问卷产品对比

问卷网 腾讯问卷 问卷星 金数据 填鸭企业版 调问企业版 卷王 演示
问卷调查 ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ Go
在线考试 ✔️ ✔️ ✔️ ✔️ Go
投票 ✔️ ✔️ ✔️ ✔️ ✔️ Go
支持题型 🥇 🥉 🥇 🥈 🥈 🥉 🥈 Go
题型设置 🥇 🥉 🥇 🥇 🥉 🥉 🥇
工作流 ✔️ ✔️
自动计算 🥉 🥈 🥇 Go
逻辑设置 🥈 🥈 🥈 🥈 🥉 🥉 🥇 Go
自定义校验 ✔️ Go
自定义导出 🥈 🥉 🥇
手机端编辑 ✔️ ✔️ ✔️ ✔️ ✔️
私有部署 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 💰 🆓

注: 上表与卷王对比的全部是商业问卷产品,他们有很多地方值得卷王学习,仅列出部分主要功能供大家参考,如果对结果有疑问,可以点击对应产品的链接自行对比体验。

🥇 🥈 🥉

预览

问卷编辑

考试编辑

预览

preview-surveyking

🚀 1 分钟快速体验调查问卷系统(无需安装数据库)

  1. 安装 Java 运行环境(如果本机已有 Java 环境可以忽略)
  2. 下载 卷王安装包
  3. 解压,双击运行 surveyking-v0.3.0-beta.10.jar
  4. 打开浏览器访问 http://localhost:1991,输入账号密码: admin/123456

特性

  • 🥇 支持多种题型,如填空、选择、下拉、级联、矩阵、分页、签名、题组等
  • 🎉 可计算,分为逻辑计算值计算文本替换计算必填计算点击体验
  • 🦋 问题、选项支持快速富文本编辑
  • 🥊 响应式布局,所有页面在 PC 和手机端都有良好的操作体验
  • 🥂 多种问卷设置,如支持问卷默认值暂存问卷修改设置密码、背景图、页眉图、提交后图文展示
  • 🎇 数据,支持问卷数据新增、编辑、标记、导出、预览和打包下载附件
  • 🎨 报表,支持对问题实时统计分析并以图形(条形图、柱形图、扇形图)、表格的形式展示输出
  • 🚀 安装部署简单(最快 1 分钟部署),支持 nginx 部署和一键启动的方式
  • 👬 支持多人协作管理问卷
  • 🎁 后端支持多种数据库,可支持所有带有 jdbc 驱动的关系型数据库,未来计划支持 elasticsearch
  • 🐯 安全、可靠、稳定、高性能的后端 API 服务
  • 🙆 支持完善的 RBAC 权限控制
  • 😊 支持工作流,工作流代码已全部开源
  • ...

安装

通过发行版安装

目前已适配 mysql 数据库

点击下载 surveyking-mysql 版本到本地

使用源码编译安装

默认构建的是 h2 版本的安装包。

使用 gradle 构建:

# 下载源码
git clone https://gitee.com/surveyking/surveyking.git

# 设置 profile,修改 api/src/main/resources/application.yml
# 打开 active: ${activeProfile} # gradle 配置

# 开始构建
gradle clean :api:build -P pro -x test
# 生成的 jar 包位于 ./api/build/libs/surveyking-v0.x.x.jar

使用 maven 构建:

# 下载源码
git clone https://gitee.com/surveyking/surveyking.git

# 开始构建
mvn clean package -DskipTests -Ppro
# 生成的 jar 包位于 ./api/target/surveyking-v0.x.x.jar

使用 docker 快速启动

启动 SurveyKing 镜像时,你可以指定 SurveyKing 挂载参数,将日志文件和内置数据库保存到你本地。(docker 版本目前还有点问题,待解决)

docker run -p 1991:1991 registry.cn-hangzhou.aliyuncs.com/surveyking/surveyking
# 挂载数据文件
docker run -p 1991:1991 -v /surveyking:/surveyking registry.cn-hangzhou.aliyuncs.com/surveyking/surveyking

使用

  • 预安装 JRE 环境,由于本系统是 Java 构建的,需要依赖 Java 运行环境,可以通过 适用于所有操作系统的 Java 下载 来预装 java 环境。
  • 配置数据库,按照下面的说明来配置不同的数据库,如果前端需要使用 nginx 部署,参考使用 nginx 部署前端。
  • 运行,支持所有平台部署,windows 和 mac 支持双击运行,或者打开命令行窗口执行如下命令
java -jar surveyking-v0.x.x.jar

打开浏览器,访问 http://localhost:1991 即可,系统首次启动之后会自动创建 admin 用户,账号/密码(admin/123456),登录系统之后可以通过用户管理界面来修改密码。

mysql 启动方式

使用参数启动

  1. 首先创建 mysql 数据库,然后执行初始化脚本,下载脚本
  2. 执行 java -jar surveyking-v0.x.x.jar --server.port=1991 --spring.datasource.url=jdbc:mysql://localhost:3306/surveyking --spring.datasource.username=root --spring.datasource.password=123456(只有首次启动系统需要添加后面的参数)

参数说明(按照实际需要自行修改):

  • --server.port=1991 系统端口
  • --spring.datasource.url=jdbc:mysql://localhost:3306/surveyking 数据库连接的 url
  • --spring.datasource.username=root 数据库账号
  • --spring.datasource.password=123456 数据库密码

也可以尝试使用命令行的方式初始化数据库(会自动执行数据库初始脚本)

# 按照提示初始化数据库
java -jar surveyking-v0.x.x.jar i
# 初始化完成之后运行即可
java -jar surveyking-v0.x.x.jar 

使用 nginx 部署前端

下载 该目录下面的静态资源文件,直接部署到 nginx 即可。

然后配置 proxy 代理到后端 api 服务。

在线体验

演示地址: https://surveyking.cn

点击 试一试,无需注册登录

联系作者

本项目后端代码完全开源,前端代码开源版本正在开发,即将发布。如果觉得对您有帮助,可以点击右上角的 star。

如果遇到任何问题或者建议,欢迎加群讨论。

QQ群:338461197

致谢

formily

开源协议

SurveyKing is open source software licensed as MIT.

Comments
  • docker部署镜像建议

    docker部署镜像建议

    【问题】现docker镜像部署时,由于数据库文件surveyking.mv.db在根目录,无法挂载至宿主机 【方法】建议镜像内文件部署在surveyking子文件夹下,例如/surveyking/config,/surveyking/db,/surveyking/file,/surveyking/logs等,统一规范方便目录挂载

    opened by xsbai93 2
  • Expression Language Injection

    Expression Language Injection

    there is a Expression Language Injection risk.Expression Language (EL) Injection happens when attacker controlled data enters an EL interpreter. the code is: if (request.getSettingKey() != null) { // 实现单个设置的更新 ProjectSetting setting = getById(request.getId()).getSetting(); spelParser.parseExpression(request.getSettingKey()).setValue(setting, request.getSettingValue()); project.setSetting(setting); // 同步更新项目状态 if ("status".equals(request.getSettingKey())) { project.setStatus((Integer) request.getSettingValue()); }

    opened by lcxing 1
  • [BUG] 问卷中“允许修改答案”不生效的问题

    [BUG] 问卷中“允许修改答案”不生效的问题

    以master更新到May 22, 2022的代码为准,在问卷配置为"需要登录"、“允许修改答案”时,修改答案不生效,排查代码发现两个问题 SurveyServiceImpl.java中

    • 问题一
    private String validateAndGetLatestAnswer(ProjectView project) {
    		ProjectSetting setting = project.getSetting();
    		boolean needGetLatest = false;
    		...
    		if (needGetLatest) {
    			AnswerQuery answerQuery = new AnswerQuery();
    			answerQuery.setProjectId(project.getId());
    			answerQuery.setLatest(true);
    			AnswerView latestAnswer = answerService.getAnswer(answerQuery);
    			if (latestAnswer != null) {
    				// @here 此处返回一直为null,是否应该调整为return latestAnswer.getId();
    				return answerQuery.getId();
    			}
    		}
    		return null;
    	}
    
    • 问题二
    public PublicAnswerView saveAnswer(AnswerRequest answer, HttpServletRequest request) {
    		...
    
    		String answerId;
    		if (isBlank(answer.getId())) {
    			// @here 新增公开查询文档功能后,此处没有处理好,允许修改答案时answer.getId()有值,无法进入这里
    			// 问卷允许修改答案开关修改答案
    			answerId = validateAndGetLatestAnswer(project);
    		}
    		else {
    			// 公开查询修改答案
    			answerId = answer.getId();
    			validateAndMergeAnswer(project, answer);
    		}
    		...
    	}
    
    opened by chaos-cn 1
  • There is a logout logic vulnerability in the background

    There is a logout logic vulnerability in the background

    Version:v0.2.0 First, log in to the background normally and send query requests. Pay attention to cookies

    image Then click the exit login button. At this time, the back-end code does not delete the user's session, but just jumps to the login page. You can see that the requested data can still be obtained normally with the previous cookie. Then the attacker can log in to the system again with the help of the browser cache when the user exits.

    image Repair suggestion: when exiting the login, delete the user's session first, and then jump to the login page.

    opened by kpa1on 1
  • Blind SQL Injection

    Blind SQL Injection

    there is a blind sql injection in api /api/repo/pick. Use sqlmap can find it.

    sqlmap identified the following injection point(s) with a total of 21258 HTTP(s) requests:

    Parameter: JSON #4* ((custom) POST) Type: boolean-based blind Title: AND boolean-based blind - WHERE or HAVING clause Payload: [{"id":"Axd_JDOJc_","repoId":"1585481117291630593","types":["Radio"],"tags":["简单') AND 7642=7642 AND ('TlAO'='TlAO"],"questionsNum":2,"examScore":1}]

    Type: time-based blind
    Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
    Payload: [{"id":"Axd_JDOJc_","repoId":"1585481117291630593","types":["Radio"],"tags":["简单') AND (SELECT 8522 FROM (SELECT(SLEEP(5)))cRCX) AND ('AezM'='AezM"],"questionsNum":2,"examScore":1}]
    

    the code is cn.surveyking.server.impl.ProjectServiceImpl#listProject

    cPage<Project> page = pageByQuery(query, Wrappers.<Project>lambdaQuery() .like(isNotBlank(query.getName()), Project::getName, query.getName()) .eq(isNotBlank(query.getParentId()), Project::getParentId, query.getParentId()) // 父id为空或者为 0 表示一级目录 .and(isBlank(query.getParentId()), c -> c.isNull(Project::getParentId).or().eq(Project::getParentId, "0")) .eq(query.getMode() != null, Project::getMode, query.getMode()) .exists(String.format( "SELECT 1 FROM t_project_partner t WHERE t.type in (1, 2) AND t.user_id = '%s' AND t.project_id = t_project.id", SecurityContextUtils.getUserId())) .orderByAsc(Project::getPriority, Project::getCreateAt)); PaginationResponse<ProjectView> result = new PaginationResponse<>(page.getTotal(),

    opened by lcxing 0
Releases(v0.3.0-beta.3)
Owner
小黄黄
Just for fun
小黄黄
The Java implementation of "A Survey of Trajectory Distance Measures and Performance Evaluation". VLDBJ 2020

A Survey of Trajectory Distance Measures and Performance Evaluation The Java implementation of the following paper: Han Su, Shuncheng Liu, Bolong Zhen

Shuncheng Liu 99 Oct 19, 2022
A password strength test app with strength, estimated crack times, warnings and suggestions to help make better passwords.

Is Your Password Secure? A password strength test app which displays strength, estimated crack time and provides warnings and suggestions to help make

the-weird-aquarian 24 Dec 15, 2022
Hcode Online Judge(HOJ):An open source online judge system base on SpringBoot, Springcloud Alibaba and Vue.js !

Hcode Online Judge(HOJ) 前言 基于前后端分离,分布式架构的在线测评平台(hoj),前端使用vue,后端主要使用springboot,redis,mysql,nacos等技术。 在线Demo:https://hdoi.cn 在线文档:https://www.hcode.top/

Himit_ZH 179 Dec 31, 2022
The open source CyborgFlow project is an out-of-the-box (OOTB) solution to perform load test on your online system.

CyborgFlow CyborgFlow provides an out-of-the-box (OOTB) solution to perform load test on your online system, powered by Apache APISIX, Apache SkyWalki

SphereEx 70 Nov 30, 2022
Drifty is an open-source interactive File Downloader system built with java. It is currently available in CLI mode and has the GUI version under active development.

Drifty Drifty is an open-source interactive File Downloader system built using Java. It takes the link to the file, the directory where it needs to be

Saptarshi Sarkar 60 Dec 24, 2022
Spring Data Redis extensions for better search, documents models, and more

Object Mapping (and more) for Redis! Redis OM Spring extends Spring Data Redis to take full advantage of the power of Redis. Project Stage Snapshot Is

Redis 303 Dec 29, 2022
This app corrects your sitting posture and provides feedback in real time in conjunction with the app. A sensor of 31 cells detects your posture to get better life-wellness

Notichair 실시간 자세분석 및 교정 스마트체어 ?? 상명대학교 PRIME 경진대회 수상 ?? 요구사항 31-cell sensor (mdxs-16-5610) 목차 1. 소개 프로젝트 내용 소개 2. 개발 환경 사전 설정 및 환경 구축 3. 기능 Sensors Ap

Minuk_LEE 3 Jan 15, 2022
corrects your sitting posture and provides feedback in real time in conjunction with the app. A sensor of 31 cells detects your posture to get better life-wellness

Notichair 실시간 자세분석 및 교정 스마트체어 ?? 상명대학교 PRIME 경진대회 수상 ?? 요구사항 31-cell sensor (mdxs-16-5610) 목차 1. 소개 프로젝트 내용 소개 2. 개발 환경 사전 설정 및 환경 구축 3. 기능 Sensors Ap

Minuk_LEE 3 Jan 15, 2022
A mod based off of Gnembon's AutoCrafting Mod, but better

FabricAutoCrafter A Fabric mod that adds a new Auto Crafter block This mod adds a new block, the Auto Crafter. It allows you to put items in the craft

null 8 Aug 19, 2022
A better version of NotEnoughCoins for hypixel skyblock.

NotEnoughCoins A SkyBlock Flipping Mod. /nec - Shows the config GUI /nec help - Shows the help message containing all the subcommands and their usage

null 3 Aug 19, 2022
PluginHooker is a Bukkit plugin that aims to provide an ultimately simple and better method to hook Bukkit events.

PluginHooker PluginHooker is a Bukkit plugin that aims to provide an ultimately simple and better method to hook Bukkit events. Localization 简体中文 Feat

null 12 Nov 23, 2022
Better performance with lottie animations using RLottie in react-native

?? react-native-rlottie Features ▶️ Uses rlottie to run lottie animations ?? rlottie creates rasterized bitmaps for each frame of the animation (inste

Skill Nation 23 Dec 7, 2022
Nrich is a Java library developed at CROZ whose purpose is to make development of applications on JVM a little easier.

nrich Nrich is a Java library developed at CROZ whose purpose is to make development of applications on JVM a little easier. It contains modules that

CROZ 44 Nov 12, 2022
CoreLib - Necessary Libraries required to make the Cores work (API 1.0.13)

CoreLib Necessary Libraries required to make the Cores work (API 1.0.13) CoreLib is a collection of necessary libraries required to make the SurvivalC

OP Heroes Development Team 1 Jan 4, 2022
This app based on Java to make the life of firefighters easier by implementing features which they need in their day-to-day life

Fire Rescue App This app based on Java to make the life of firefighters easier by implementing features which they need in their day-to-day life. Scre

Senith Umesha 2 Jul 24, 2022
QNotified phoenix - To make OICQ great again

QAuxiliary QAuxiliary 是一个基于 QNotified 的开源 Xposed 模块 使用方法 激活本模块后,在 QQ 或者 TIM 自带设置中点击 QAuxiliary 即可进入设置页面 Android >= 7.0 QQ >= 8.0.0, TIM >= 2.2.0 一切开发旨

Acetylcholine 1.1k Jan 9, 2023
A Minecraft Fabric mod to make crafting with the recipe book faster

OneClickCrafting This mod is clientside only. After selecting a recipe in the recipe book, the client with shift-click the crafted item from the resul

BreadMoirai 4 Jun 2, 2022
Make the Velocity proxy run commands based on backend input.

Command Sync Server This plugin allows the Velocity proxy to run commands based on backend input. Purpose The purpose of this is to allow easy access

Wind Development 3 May 23, 2022
Caches datapack- and server resources to make world creation faster.

antiresourcereload Caches datapack- and server resources to make world creation faster. Legalisation Status Legal (1.0.2) Description I found out abou

Wurgo 13 Nov 18, 2022