Commit 2c45cb04 by tangyi

增加OAuth2.0终端管理、调整项目结构

parent 02ab8671
......@@ -58,6 +58,7 @@
- 部门管理:部门信息增删改查
- 角色管理:角色信息增删改查、分配权限
- 菜单管理:菜单信息增删改查、导入导出
- 终端管理:管理OAuth2.0的客户端,如client_id、client_secret、access_token有效时间等
系统监控:监控服务、日志等
- 日志监控:查看系统日志
......
......@@ -122,5 +122,10 @@ public class CommonConstant {
* 参数校验失败
*/
public static final String IllEGAL_ARGUMENT = "参数校验失败!";
/**
* 保存code的前缀
*/
public static final String DEFAULT_CODE_KEY = "DEFAULT_CODE_KEY";
}
package com.github.tangyi.common.core.constant;
package com.github.tangyi.common.security.constant;
/**
* @author tangyi
......@@ -17,12 +17,12 @@ public class SecurityConstant {
public static final String TOKEN_USER_DETAIL = "token-user-detail";
/**
* 保存code的前缀
* 默认生成图形验证码过期时间
*/
public static final String DEFAULT_CODE_KEY = "DEFAULT_CODE_KEY";
public static final int DEFAULT_IMAGE_EXPIRE = 60;
/**
* 默认生成图形验证码过期时间
* oauth 客户端信息
*/
public static final int DEFAULT_IMAGE_EXPIRE = 60;
public static final String CLIENT_DETAILS_KEY = "exam_oauth:client:details";
}
package com.github.tangyi.common.security.core;
import org.springframework.security.oauth2.common.exceptions.InvalidClientException;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
import javax.sql.DataSource;
/**
* jdbc客户端service
*
* @author tangyi
* @date 2019/3/30 23:30
*/
public class ClientDetailsServiceImpl extends JdbcClientDetailsService {
public ClientDetailsServiceImpl(DataSource dataSource) {
super(dataSource);
}
/**
* 重写方法
*
* @param clientId clientId
* @return ClientDetails
* @author tangyi
* @date 2019/03/30 23:31
*/
@Override
public ClientDetails loadClientByClientId(String clientId) throws InvalidClientException {
return super.loadClientByClientId(clientId);
}
}
package com.github.tangyi.common.security.properties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* security oauth2相关配置
*
* @author tangyi
* @date 2019-03-14 16:48
*/
@Configuration
@ConfigurationProperties(prefix = "security.properties")
public class SecurityConfigProperties {
private String clientId;
private String clientSecret;
private String grantTypePassword;
private String authorizationCode;
private String refreshToken;
private String implicit;
private String scopeRead;
private String scopeWrite;
private String trust;
private int accessTokenValiditySeconds;
private int refreshTokenValiditySeconds;
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getClientSecret() {
return clientSecret;
}
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getGrantTypePassword() {
return grantTypePassword;
}
public void setGrantTypePassword(String grantTypePassword) {
this.grantTypePassword = grantTypePassword;
}
public String getAuthorizationCode() {
return authorizationCode;
}
public void setAuthorizationCode(String authorizationCode) {
this.authorizationCode = authorizationCode;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public String getImplicit() {
return implicit;
}
public void setImplicit(String implicit) {
this.implicit = implicit;
}
public String getScopeRead() {
return scopeRead;
}
public void setScopeRead(String scopeRead) {
this.scopeRead = scopeRead;
}
public String getScopeWrite() {
return scopeWrite;
}
public void setScopeWrite(String scopeWrite) {
this.scopeWrite = scopeWrite;
}
public String getTrust() {
return trust;
}
public void setTrust(String trust) {
this.trust = trust;
}
public int getAccessTokenValiditySeconds() {
return accessTokenValiditySeconds;
}
public void setAccessTokenValiditySeconds(int accessTokenValiditySeconds) {
this.accessTokenValiditySeconds = accessTokenValiditySeconds;
}
public int getRefreshTokenValiditySeconds() {
return refreshTokenValiditySeconds;
}
public void setRefreshTokenValiditySeconds(int refreshTokenValiditySeconds) {
this.refreshTokenValiditySeconds = refreshTokenValiditySeconds;
}
}
server:
port: 8081
spring:
datasource:
url: jdbc:mysql://${MYSQL_HOST:192.168.0.144}:${MYSQL_PORT:3306}/microservice-auth?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
username: ${MYSQL_USERNAME:platform}
password: ${MYSQL_PASSWORD:11}
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
rabbitmq:
host: ${RABBIT_HOST:localhost}
port: ${RABBIT_PORT:5672}
username: guest
password: guest
boot:
admin:
client:
url: http://${ADMIN_HOST:localhost}:${ADMIN_PORT:8085}/admin
username: ${ADMIN_USERNAME:admin}
password: ${ADMIN_PASSWORD:11}
instance:
service-base-url: http://localhost:${server.port}
instance:
service-base-url: http://localhost:${server.port}
# sleuth 配置
sleuth:
web:
......@@ -23,21 +34,6 @@ spring:
zipkin:
base-url: http://localhost:9411 # 指定了Zipkin服务器的地址
security:
properties:
client-id: spring-microservice-exam-client
# spring-microservice-exam-secret
client-secret: $2a$10$etIT5xZXGY.g8/C.67lvX.N2PyvbEG1y0gGjATtp7LMsingWcd.1i
grant-type-password: password
authorization-code: authorization_code
refresh-token: refresh_token
implicit: implicit
scope-read: read
scope-write: write
trust: trust
access-token-validity-seconds: 3600 # access_token有效时间
refresh-token-validity-seconds: 21600 # refresh_token有效时间
feign:
hystrix:
enabled: true
......@@ -61,6 +57,15 @@ management:
health:
show-details: ALWAYS
mybatis:
mapperLocations: classpath:mapper/*.xml
configLocation: classpath:/mybatis-config.xml
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
ignore:
urls:
- /
......@@ -87,6 +92,8 @@ ignore:
- /loggers/**
- /mobile/token
mobile:
token: test
logging:
level:
root: info
......
......@@ -10,14 +10,19 @@ spring:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
rabbitmq:
host: ${RABBIT_HOST:localhost}
port: ${RABBIT_PORT:5672}
username: guest
password: guest
boot:
admin:
client:
url: http://${ADMIN_HOST:localhost}:${ADMIN_PORT:8085}/admin
username: ${ADMIN_USERNAME:admin}
password: ${ADMIN_PASSWORD:11}
instance:
service-base-url: http://localhost:${server.port}
instance:
service-base-url: http://localhost:${server.port}
# sleuth 配置
sleuth:
web:
......@@ -31,8 +36,8 @@ spring:
security:
oauth2:
client:
clientId: spring-microservice-exam-client
clientSecret: $2a$10$etIT5xZXGY.g8/C.67lvX.N2PyvbEG1y0gGjATtp7LMsingWcd.1i
clientId: web_app
clientSecret: $2a$10$S84wOzmAw4wqYBzAqNtmPOx1ZRWdDl9omm/W8T1hhW8S9EK2u57xG
accessTokenUri: http://${AUTH_SERVICE_HOST:localhost}:${AUTH_SERVICE_PORT:8000}/api/auth/oauth/token
grant-type: password
scope: read
......
......@@ -10,8 +10,8 @@ spring:
url: http://${ADMIN_HOST:localhost}:${ADMIN_PORT:8085}/admin
username: ${ADMIN_USERNAME:admin}
password: ${ADMIN_PASSWORD:11}
instance:
service-base-url: http://localhost:${server.port}
instance:
service-base-url: http://localhost:${server.port}
# sleuth 配置
sleuth:
web:
......@@ -80,6 +80,7 @@ swagger:
providers:
- user-service
- exam-service
- auth-service
logging:
level:
......
......@@ -17,8 +17,10 @@ spring:
client:
enabled: false
auto-registration: false
instance:
service-base-url: http://localhost:${server.port}
instance:
service-base-url: http://localhost:${server.port}
discovery:
ignored-services: consul # 或略consul服务
# sleuth 配置
sleuth:
web:
......
......@@ -10,14 +10,19 @@ spring:
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
rabbitmq:
host: ${RABBIT_HOST:localhost}
port: ${RABBIT_PORT:5672}
username: guest
password: guest
boot:
admin:
client:
url: http://${ADMIN_HOST:localhost}:${ADMIN_PORT:8085}/admin
username: ${ADMIN_USERNAME:admin}
password: ${ADMIN_PASSWORD:11}
instance:
service-base-url: http://localhost:${server.port}
instance:
service-base-url: http://localhost:${server.port}
# sleuth 配置
sleuth:
web:
......@@ -31,8 +36,8 @@ spring:
security:
oauth2:
client:
clientId: spring-microservice-exam-client
clientSecret: $2a$10$etIT5xZXGY.g8/C.67lvX.N2PyvbEG1y0gGjATtp7LMsingWcd.1i
clientId: web_app
clientSecret: $2a$10$S84wOzmAw4wqYBzAqNtmPOx1ZRWdDl9omm/W8T1hhW8S9EK2u57xG
accessTokenUri: http://${AUTH_SERVICE_HOST:localhost}:${AUTH_SERVICE_PORT:8000}/api/auth/oauth/token
grant-type: password
scope: read
......@@ -118,7 +123,7 @@ ignore:
- /metrics/**
- /loggers/**
- /mobile/token
- /bus/refresh
logging:
level:
......
/*
Navicat Premium Data Transfer
Source Server : 144
Source Server Type : MySQL
Source Server Version : 50710
Source Host : 192.168.0.144:3306
Source Schema : microservice-auth
Target Server Type : MySQL
Target Server Version : 50710
File Encoding : 65001
Date: 31/03/2019 15:16:50
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for oauth_client_details
-- ----------------------------
DROP TABLE IF EXISTS `oauth_client_details`;
CREATE TABLE `oauth_client_details` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
`client_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'client_id',
`resource_ids` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'resource_ids',
`client_secret_plain_text` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密钥明文',
`client_secret` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'client_secret',
`scope` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '授权范围',
`authorized_grant_types` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '授权类型',
`web_server_redirect_uri` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`authorities` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`access_token_validity` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'access_token有效时间',
`refresh_token_validity` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 'refresh_token有效时间',
`additional_information` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`autoapprove` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of oauth_client_details
-- ----------------------------
INSERT INTO `oauth_client_details` VALUES ('471037a0c1be4df99b40e3f84141cc56', 'web_app', NULL, 'spring-microservice-exam-secret', '$2a$10$S84wOzmAw4wqYBzAqNtmPOx1ZRWdDl9omm/W8T1hhW8S9EK2u57xG', 'read,write', 'password,authorization_code,refresh_token,implicit', NULL, NULL, '3600', '21600', NULL, NULL, 'admin', '2019-03-30 23:43:07', 'admin', '2019-03-31 15:06:55', '0', 'EXAM');
SET FOREIGN_KEY_CHECKS = 1;
/*
Navicat MySQL Data Transfer
Navicat Premium Data Transfer
Source Server : mysql_144
Source Server Version : 50710
Source Host : 192.168.0.144:3306
Source Database : microservice-exam
Source Server : 144
Source Server Type : MySQL
Source Server Version : 50710
Source Host : 192.168.0.144:3306
Source Schema : microservice-exam
Target Server Type : MYSQL
Target Server Version : 50710
File Encoding : 65001
Target Server Type : MySQL
Target Server Version : 50710
File Encoding : 65001
Date: 2019-03-22 17:07:16
Date: 31/03/2019 15:16:57
*/
SET FOREIGN_KEY_CHECKS=0;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for answer
-- ----------------------------
DROP TABLE IF EXISTS `answer`;
CREATE TABLE `answer` (
`id` varchar(64) NOT NULL COMMENT '主键',
`user_id` varchar(64) DEFAULT NULL COMMENT '用户ID',
`examination_id` varchar(64) DEFAULT NULL COMMENT '考试ID',
`exam_record_id` varchar(64) DEFAULT NULL COMMENT '考试记录id',
`course_id` varchar(64) DEFAULT NULL COMMENT '课程ID',
`subject_id` varchar(64) DEFAULT NULL COMMENT '题目ID',
`answer` varchar(255) DEFAULT NULL COMMENT '答案',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`),
KEY `index_answer` (`user_id`,`examination_id`,`subject_id`) COMMENT '答题索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `answer` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
`user_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户ID',
`examination_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试ID',
`exam_record_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试记录id',
`course_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程ID',
`subject_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目ID',
`answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '答案',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE,
INDEX `index_answer`(`user_id`, `examination_id`, `subject_id`) USING BTREE COMMENT '答题索引'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of answer
-- ----------------------------
INSERT INTO `answer` VALUES ('018021d041964d269d2b421a007d722f', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', null, '4d654c576f534f349278806b046608d6', 'C', 'student', '2019-02-28 15:33:35', 'student', '2019-02-28 15:34:24', '0', 'EXAM');
INSERT INTO `answer` VALUES ('1b4d8379aeaf449dac176d04298d2afd', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', null, '4d654c576f534f349278806b046608d6', 'C', 'student', '2019-03-21 10:58:15', 'student', '2019-03-21 10:58:54', '0', 'EXAM');
INSERT INTO `answer` VALUES ('1ecd8bb1fbc54952a68e9dea55db045b', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', null, '1a934e62942640459b3a66c05f6c09b2', 'D', 'student', '2019-03-11 20:51:28', 'student', '2019-03-11 20:51:28', '0', 'EXAM');
INSERT INTO `answer` VALUES ('3f0d4789b373404b98b78c60e83baaf2', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', null, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'tangyi7', '2019-01-22 17:27:27', 'tangyi7', '2019-01-22 17:37:18', '0', 'EXAM');
INSERT INTO `answer` VALUES ('44fdf520d4f44ab0ad75bee7e2a16c0f', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', null, '1a934e62942640459b3a66c05f6c09b2', 'C', 'tangyi7', '2019-01-22 17:29:17', 'tangyi7', '2019-01-22 17:29:17', '0', 'EXAM');
INSERT INTO `answer` VALUES ('4cdbae2561414ee08c2fcab2a956e285', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', null, '4d654c576f534f349278806b046608d6', 'B', 'student', '2019-03-21 11:00:49', 'student', '2019-03-21 11:10:42', '0', 'EXAM');
INSERT INTO `answer` VALUES ('5befebfb0d6848e98e5caf60f15a505e', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', null, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'student', '2019-02-28 15:33:33', 'student', '2019-02-28 15:34:22', '0', 'EXAM');
INSERT INTO `answer` VALUES ('5ebdf21e20e34b93b9b652d1f33d6cfb', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', null, '1a934e62942640459b3a66c05f6c09b2', 'D', 'student', '2019-03-21 10:58:18', 'student', '2019-03-21 10:58:18', '0', 'EXAM');
INSERT INTO `answer` VALUES ('66cc59a93acd4f80b30c5019569bc295', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', null, '1a934e62942640459b3a66c05f6c09b2', 'C', 'student', '2019-03-21 11:00:52', 'student', '2019-03-21 11:00:52', '0', 'EXAM');
INSERT INTO `answer` VALUES ('6d397fb7294b4ec2acaf52185ff082f9', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', null, '4d654c576f534f349278806b046608d6', 'B', 'student', '2019-03-11 20:51:26', 'student', '2019-03-11 20:51:26', '0', 'EXAM');
INSERT INTO `answer` VALUES ('87de193973324cfdbc44938a9e897234', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', null, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'student', '2019-03-11 20:50:34', 'student', '2019-03-11 20:51:23', '0', 'EXAM');
INSERT INTO `answer` VALUES ('a0b32648aa3e48b29d1ac31513f50369', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', null, 'e34926a94a4a4895817d7ea78aa63012', 'B', 'student', '2019-03-21 11:00:48', 'student', '2019-03-21 11:10:39', '0', 'EXAM');
INSERT INTO `answer` VALUES ('db0c4b3b81c445e2a31d957f95cfac4a', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', null, 'e34926a94a4a4895817d7ea78aa63012', 'B', 'student', '2019-03-21 10:58:13', 'student', '2019-03-21 10:58:52', '0', 'EXAM');
INSERT INTO `answer` VALUES ('ee2a02497a04429d956174f099a2ddd0', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', null, '1a934e62942640459b3a66c05f6c09b2', 'C', 'student', '2019-02-28 15:33:38', 'student', '2019-02-28 15:34:25', '0', 'EXAM');
INSERT INTO `answer` VALUES ('fe49216810e846c8aeb70d08cdd564b6', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', null, '4d654c576f534f349278806b046608d6', 'C', 'tangyi7', '2019-01-22 17:29:07', 'tangyi7', '2019-01-22 17:37:21', '0', 'EXAM');
INSERT INTO `answer` VALUES ('018021d041964d269d2b421a007d722f', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', NULL, '4d654c576f534f349278806b046608d6', 'C', 'student', '2019-02-28 15:33:35', 'student', '2019-02-28 15:34:24', '0', 'EXAM');
INSERT INTO `answer` VALUES ('1b4d8379aeaf449dac176d04298d2afd', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', NULL, '4d654c576f534f349278806b046608d6', 'C', 'student', '2019-03-21 10:58:15', 'student', '2019-03-21 10:58:54', '0', 'EXAM');
INSERT INTO `answer` VALUES ('1ecd8bb1fbc54952a68e9dea55db045b', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', NULL, '1a934e62942640459b3a66c05f6c09b2', 'D', 'student', '2019-03-11 20:51:28', 'student', '2019-03-11 20:51:28', '0', 'EXAM');
INSERT INTO `answer` VALUES ('3f0d4789b373404b98b78c60e83baaf2', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', NULL, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'tangyi7', '2019-01-22 17:27:27', 'tangyi7', '2019-01-22 17:37:18', '0', 'EXAM');
INSERT INTO `answer` VALUES ('44fdf520d4f44ab0ad75bee7e2a16c0f', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', NULL, '1a934e62942640459b3a66c05f6c09b2', 'C', 'tangyi7', '2019-01-22 17:29:17', 'tangyi7', '2019-01-22 17:29:17', '0', 'EXAM');
INSERT INTO `answer` VALUES ('4cdbae2561414ee08c2fcab2a956e285', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', NULL, '4d654c576f534f349278806b046608d6', 'B', 'student', '2019-03-21 11:00:49', 'student', '2019-03-21 11:10:42', '0', 'EXAM');
INSERT INTO `answer` VALUES ('5befebfb0d6848e98e5caf60f15a505e', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', NULL, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'student', '2019-02-28 15:33:33', 'student', '2019-02-28 15:34:22', '0', 'EXAM');
INSERT INTO `answer` VALUES ('5ebdf21e20e34b93b9b652d1f33d6cfb', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', NULL, '1a934e62942640459b3a66c05f6c09b2', 'D', 'student', '2019-03-21 10:58:18', 'student', '2019-03-21 10:58:18', '0', 'EXAM');
INSERT INTO `answer` VALUES ('66cc59a93acd4f80b30c5019569bc295', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', NULL, '1a934e62942640459b3a66c05f6c09b2', 'C', 'student', '2019-03-21 11:00:52', 'student', '2019-03-21 11:00:52', '0', 'EXAM');
INSERT INTO `answer` VALUES ('6d397fb7294b4ec2acaf52185ff082f9', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', NULL, '4d654c576f534f349278806b046608d6', 'B', 'student', '2019-03-11 20:51:26', 'student', '2019-03-11 20:51:26', '0', 'EXAM');
INSERT INTO `answer` VALUES ('87de193973324cfdbc44938a9e897234', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'ec280a56142f4ea8b5cdbac774f9609a', NULL, 'e34926a94a4a4895817d7ea78aa63012', 'C', 'student', '2019-03-11 20:50:34', 'student', '2019-03-11 20:51:23', '0', 'EXAM');
INSERT INTO `answer` VALUES ('a0b32648aa3e48b29d1ac31513f50369', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '4cd0985b7a0c4f23b405cdfaf89645f3', NULL, 'e34926a94a4a4895817d7ea78aa63012', 'B', 'student', '2019-03-21 11:00:48', 'student', '2019-03-21 11:10:39', '0', 'EXAM');
INSERT INTO `answer` VALUES ('db0c4b3b81c445e2a31d957f95cfac4a', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', 'dc74d4c766a04895a10bc541aff40625', NULL, 'e34926a94a4a4895817d7ea78aa63012', 'B', 'student', '2019-03-21 10:58:13', 'student', '2019-03-21 10:58:52', '0', 'EXAM');
INSERT INTO `answer` VALUES ('ee2a02497a04429d956174f099a2ddd0', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '220b2cece0834f359ab76ec42a888135', NULL, '1a934e62942640459b3a66c05f6c09b2', 'C', 'student', '2019-02-28 15:33:38', 'student', '2019-02-28 15:34:25', '0', 'EXAM');
INSERT INTO `answer` VALUES ('fe49216810e846c8aeb70d08cdd564b6', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', 'f3eb89b5c12941399466676a7341bf3a', NULL, '4d654c576f534f349278806b046608d6', 'C', 'tangyi7', '2019-01-22 17:29:07', 'tangyi7', '2019-01-22 17:37:21', '0', 'EXAM');
-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`id` varchar(64) NOT NULL,
`course_name` varchar(255) DEFAULT NULL COMMENT '课程名称',
`college` varchar(255) DEFAULT NULL COMMENT '学院',
`major` varchar(255) DEFAULT NULL COMMENT '专业',
`teacher` varchar(255) DEFAULT NULL COMMENT '老师',
`course_description` varchar(255) DEFAULT NULL COMMENT '课程描述',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(255) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(255) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(255) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `course` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`course_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程名称',
`college` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学院',
`major` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '专业',
`teacher` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '老师',
`course_description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程描述',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES ('6dcccd4639bc49b88810be1d30a77f92', '测试课程', '测试学院', '测试专业', '陈老师', '测试课程', 'admin', '2018-11-12 22:31:28', 'admin', '2019-03-20 22:22:15', '0', 'EXAM');
-- ----------------------------
-- Table structure for examination
-- ----------------------------
DROP TABLE IF EXISTS `examination`;
CREATE TABLE `examination` (
`id` varchar(64) NOT NULL,
`examination_name` varchar(255) DEFAULT NULL COMMENT '考试名称',
`type` varchar(64) DEFAULT NULL COMMENT '考试类型',
`attention` varchar(255) DEFAULT NULL COMMENT '考试注意事项',
`start_time` varchar(64) DEFAULT NULL COMMENT '考试开始时间',
`end_time` varchar(64) DEFAULT NULL COMMENT '考试结束时间',
`duration` varchar(64) DEFAULT NULL COMMENT '考试持续时间',
`total_score` varchar(64) DEFAULT NULL COMMENT '总分',
`total_subject` varchar(64) DEFAULT NULL COMMENT '题目数',
`status` varchar(64) DEFAULT NULL COMMENT '考试状态',
`avatar` varchar(255) DEFAULT NULL COMMENT '封面',
`avatar_id` varchar(255) DEFAULT NULL,
`college_id` varchar(64) DEFAULT NULL COMMENT '学院',
`major_id` varchar(64) DEFAULT NULL COMMENT '专业',
`course_id` varchar(64) DEFAULT NULL COMMENT '课程',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of examination
-- ----------------------------
INSERT INTO `examination` VALUES ('4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '2', '离散数学', '2019-01-03 00:00', '2019-01-11 00:00', '', '100', '0', '1', 'group1/M00/00/00/wKgAX1x3gGqABz6cAAZyO2yzEwA450.jpg', 'da4b5623e9754abbb07320d8def18fe7', '信息学院', '软件工程', '6dcccd4639bc49b88810be1d30a77f92', '离散数学练习', 'admin', '2019-01-13 20:16:36', null, '2019-03-20 22:09:23', '0', 'EXAM');
INSERT INTO `examination` VALUES ('b5990bc1c48d49fcb0023de51772c309', '数学期末考试', '0', '期末考试', '2019-01-22 17:00', '2019-01-22 23:00', '', '150', '2', '1', 'group1/M00/00/00/wKgAX1x3gHWAa82wAAArtzxOXJ4599.jpg', '60df2d550bd9453a943122033a27fe72', '应用数学', '应用数学', '6dcccd4639bc49b88810be1d30a77f92', '期末考试', 'admin', '2018-11-20 22:48:40', null, '2019-03-18 14:09:49', '0', 'EXAM');
INSERT INTO `examination` VALUES ('f051f54621fc4812b929a7777a701712', '语文考试', '0', '语文考试', '2019-01-22 17:00', '2019-01-22 23:00', '', '150', '2', '1', 'group1/M00/00/00/wKgAX1x3gIOAIVzXAABrb92CxLk678.jpg', '45d2ac58eb21436692e8cdbdd64291dd', '中文', '中文', '6dcccd4639bc49b88810be1d30a77f92', '语文考试', 'admin', '2018-11-20 22:50:55', 'admin', '2019-02-28 14:33:27', '0', 'EXAM');
INSERT INTO `examination` VALUES ('fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '0', '文综历史试题', '2019-03-21 10:30', '2019-03-21 12:30', '', '100', '3', '0', 'group1/M00/00/00/wKgAX1x3f52AIE4IAADGq28ys0g361.jpg', 'a178c7b221524a89b44e884d8e3172cf', '文综历史试题', '文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '文综历史试题', 'admin', '2018-11-12 20:25:38', 'admin', '2019-03-06 13:57:13', '0', 'EXAM');
INSERT INTO `course` VALUES ('6dcccd4639bc49b88810be1d30a77f92', '测试课程', '测试学院', '测试专业', '陈老师', '测试课程', 'admin', '2018-11-12 22:31:28', 'admin', '2019-03-29 11:53:28', '0', 'EXAM');
-- ----------------------------
-- Table structure for exam_recode
-- ----------------------------
DROP TABLE IF EXISTS `exam_recode`;
CREATE TABLE `exam_recode` (
`id` varchar(64) NOT NULL,
`user_id` varchar(64) DEFAULT NULL COMMENT '用户id',
`examination_id` varchar(64) DEFAULT NULL COMMENT '考试id',
`examination_name` varchar(255) DEFAULT NULL COMMENT '考试名称',
`course_id` varchar(64) DEFAULT NULL COMMENT '课程id',
`start_time` varchar(64) DEFAULT NULL COMMENT '开始时间',
`end_time` varchar(64) DEFAULT NULL COMMENT '结束时间',
`score` varchar(64) DEFAULT NULL COMMENT '成绩',
`correct_number` varchar(64) DEFAULT NULL COMMENT '正确题目数量',
`incorrect_number` varchar(64) DEFAULT NULL COMMENT '错误题目数量',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `exam_recode` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`user_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户id',
`examination_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试id',
`examination_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试名称',
`course_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程id',
`start_time` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '开始时间',
`end_time` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '结束时间',
`score` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '成绩',
`correct_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '正确题目数量',
`incorrect_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '错误题目数量',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of exam_recode
-- ----------------------------
INSERT INTO `exam_recode` VALUES ('220b2cece0834f359ab76ec42a888135', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-02-28 15:31:54', '2019-02-28 15:34:28', '0', '0', '3', 'student', '2019-02-28 15:31:54', 'student', '2019-02-28 15:34:28', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('4cd0985b7a0c4f23b405cdfaf89645f3', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-21 11:00:39', '2019-03-21 11:10:45', '8', '2', '1', 'student', '2019-03-21 11:00:39', 'student', '2019-03-21 11:10:45', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('5d66f9627eac48a9a04e875671e4506f', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-11 20:57:03', null, null, null, null, 'student', '2019-03-11 20:57:03', 'student', '2019-03-11 20:57:03', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('7623b8694042405e9bacb767ced1fd20', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-11 20:57:57', null, null, null, null, 'student', '2019-03-11 20:57:57', 'student', '2019-03-11 20:57:57', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('862b7fb039b24925b3ec6f90a5f2dd0e', '2', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-02-28 15:18:58', null, null, null, null, 'admin', '2019-02-28 15:18:58', 'admin', '2019-02-28 15:18:58', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('8fb83f4b3f844ff1a9022deaedec2f47', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-21 10:57:04', null, null, null, null, 'student', '2019-03-21 10:57:04', 'student', '2019-03-21 10:57:04', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('5d66f9627eac48a9a04e875671e4506f', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-11 20:57:03', NULL, NULL, NULL, NULL, 'student', '2019-03-11 20:57:03', 'student', '2019-03-11 20:57:03', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('7623b8694042405e9bacb767ced1fd20', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-11 20:57:57', NULL, NULL, NULL, NULL, 'student', '2019-03-11 20:57:57', 'student', '2019-03-11 20:57:57', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('862b7fb039b24925b3ec6f90a5f2dd0e', '2', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-02-28 15:18:58', NULL, NULL, NULL, NULL, 'admin', '2019-02-28 15:18:58', 'admin', '2019-02-28 15:18:58', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('8fb83f4b3f844ff1a9022deaedec2f47', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-21 10:57:04', NULL, NULL, NULL, NULL, 'student', '2019-03-21 10:57:04', 'student', '2019-03-21 10:57:04', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('dc74d4c766a04895a10bc541aff40625', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-21 10:58:10', '2019-03-21 10:58:58', '4', '1', '2', 'student', '2019-03-21 10:58:10', 'student', '2019-03-21 10:58:58', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('ec280a56142f4ea8b5cdbac774f9609a', 'abd4dbe19faf4f7f8ff239b63acc5d34', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-11 20:49:27', '2019-03-11 20:51:31', '4', '1', '2', 'student', '2019-03-11 20:49:27', 'student', '2019-03-11 20:51:31', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('ec925a93ac9b4502b72973c7c12a66fe', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-07 10:15:55', null, null, null, null, 'student', '2019-03-07 10:15:55', 'student', '2019-03-07 10:15:55', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('f3eb89b5c12941399466676a7341bf3a', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', null, '2019-01-22 17:23:57', '2019-01-22 17:37:24', '0', '0', '3', 'tangyi7', '2019-01-22 17:23:57', 'tangyi7', '2019-01-22 17:37:24', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('f586d49aaf2c4a82b8de43b659d6c908', '2', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-02-28 14:50:24', null, null, null, null, 'admin', '2019-02-28 14:50:24', 'admin', '2019-02-28 14:50:24', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('ec925a93ac9b4502b72973c7c12a66fe', 'abd4dbe19faf4f7f8ff239b63acc5d34', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-03-07 10:15:55', NULL, NULL, NULL, NULL, 'student', '2019-03-07 10:15:55', 'student', '2019-03-07 10:15:55', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('f3eb89b5c12941399466676a7341bf3a', '4f3ffc2924f740df93641063559842a6', 'fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', NULL, '2019-01-22 17:23:57', '2019-01-22 17:37:24', '0', '0', '3', 'tangyi7', '2019-01-22 17:23:57', 'tangyi7', '2019-01-22 17:37:24', '0', 'EXAM');
INSERT INTO `exam_recode` VALUES ('f586d49aaf2c4a82b8de43b659d6c908', '2', '4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '6dcccd4639bc49b88810be1d30a77f92', '2019-02-28 14:50:24', NULL, NULL, NULL, NULL, 'admin', '2019-02-28 14:50:24', 'admin', '2019-02-28 14:50:24', '0', 'EXAM');
-- ----------------------------
-- Table structure for examination
-- ----------------------------
DROP TABLE IF EXISTS `examination`;
CREATE TABLE `examination` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`examination_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试名称',
`type` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试类型',
`attention` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试注意事项',
`start_time` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试开始时间',
`end_time` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试结束时间',
`duration` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试持续时间',
`total_score` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '总分',
`total_subject` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目数',
`status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试状态',
`avatar` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '封面',
`avatar_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`college_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '学院',
`major_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '专业',
`course_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '课程',
`remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of examination
-- ----------------------------
INSERT INTO `examination` VALUES ('4f9ced28ffe64fcea57a7367e9fd4c0c', '离散数学', '2', '离散数学', '2019-01-03 00:00', '2019-01-11 00:00', '', '100', '0', '1', 'group1/M00/00/00/wKgAX1x3gGqABz6cAAZyO2yzEwA450.jpg', 'da4b5623e9754abbb07320d8def18fe7', '信息学院', '软件工程', '6dcccd4639bc49b88810be1d30a77f92', '离散数学练习', 'admin', '2019-01-13 20:16:36', NULL, '2019-03-20 22:09:23', '0', 'EXAM');
INSERT INTO `examination` VALUES ('b5990bc1c48d49fcb0023de51772c309', '数学期末考试', '0', '期末考试', '2019-01-22 17:00', '2019-01-22 23:00', '', '150', '2', '1', 'group1/M00/00/00/wKgAX1x3gHWAa82wAAArtzxOXJ4599.jpg', '60df2d550bd9453a943122033a27fe72', '应用数学', '应用数学', '6dcccd4639bc49b88810be1d30a77f92', '期末考试', 'admin', '2018-11-20 22:48:40', NULL, '2019-03-18 14:09:49', '0', 'EXAM');
INSERT INTO `examination` VALUES ('f051f54621fc4812b929a7777a701712', '语文考试', '0', '语文考试', '2019-01-22 17:00', '2019-01-22 23:00', '', '150', '2', '1', 'group1/M00/00/00/wKgAX1x3gIOAIVzXAABrb92CxLk678.jpg', '45d2ac58eb21436692e8cdbdd64291dd', '中文', '中文', '6dcccd4639bc49b88810be1d30a77f92', '语文考试', 'admin', '2018-11-20 22:50:55', 'admin', '2019-02-28 14:33:27', '0', 'EXAM');
INSERT INTO `examination` VALUES ('fad663ea371f4250a81332bd3a346739', '四川省2016年普通高考适应性测试文综历史试题', '0', '文综历史试题', '2019-03-21 10:30', '2019-03-21 12:30', '', '100', '3', '0', 'group1/M00/00/00/wKgAX1x3f52AIE4IAADGq28ys0g361.jpg', 'a178c7b221524a89b44e884d8e3172cf', '文综历史试题', '文综历史试题', '6dcccd4639bc49b88810be1d30a77f92', '文综历史试题', 'admin', '2018-11-12 20:25:38', 'admin', '2019-03-06 13:57:13', '0', 'EXAM');
-- ----------------------------
-- Table structure for incorrect_answer
-- ----------------------------
DROP TABLE IF EXISTS `incorrect_answer`;
CREATE TABLE `incorrect_answer` (
`id` varchar(64) NOT NULL,
`user_id` varchar(64) DEFAULT NULL COMMENT '考生ID',
`examination_id` varchar(64) DEFAULT NULL COMMENT '考试ID',
`exam_record_id` varchar(64) DEFAULT NULL COMMENT '考试记录ID',
`subject_id` varchar(64) DEFAULT NULL COMMENT '题目ID',
`serial_number` varchar(64) DEFAULT NULL COMMENT '题目序号',
`incorrect_answer` varchar(255) DEFAULT NULL COMMENT '错误答案',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `incorrect_answer` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`user_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考生ID',
`examination_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试ID',
`exam_record_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试记录ID',
`subject_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目ID',
`serial_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目序号',
`incorrect_answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '错误答案',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of incorrect_answer
......@@ -207,75 +209,75 @@ INSERT INTO `incorrect_answer` VALUES ('f6bdf67b920744f7bb13f2551bb7469c', 'abd4
-- Table structure for knowledge
-- ----------------------------
DROP TABLE IF EXISTS `knowledge`;
CREATE TABLE `knowledge` (
`id` varchar(64) NOT NULL,
`knowledge_name` varchar(255) DEFAULT NULL COMMENT '知识名称',
`knowledge_desc` varchar(255) DEFAULT NULL COMMENT '知识描述',
`attachment_id` varchar(255) DEFAULT NULL COMMENT '附件ID',
`status` varchar(20) DEFAULT NULL COMMENT '状态',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(255) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(255) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(255) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `knowledge` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`knowledge_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '知识名称',
`knowledge_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '知识描述',
`attachment_id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '附件ID',
`status` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '状态',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of knowledge
-- ----------------------------
INSERT INTO `knowledge` VALUES ('d81ef4c730b6460f98a7898cdba8902b', '历史学习资料', '历史学习资料', '52f17901c5504c608ebb76c8202ca2eb', '1', 'admin', '2019-01-01 21:02:00', null, '2019-03-20 22:09:44', '0', 'EXAM');
INSERT INTO `knowledge` VALUES ('d81ef4c730b6460f98a7898cdba8902b', '历史学习资料', '历史学习资料', '52f17901c5504c608ebb76c8202ca2eb', '1', 'admin', '2019-01-01 21:02:00', NULL, '2019-03-20 22:09:44', '0', 'EXAM');
-- ----------------------------
-- Table structure for subject
-- ----------------------------
DROP TABLE IF EXISTS `subject`;
CREATE TABLE `subject` (
`id` varchar(64) NOT NULL,
`examination_id` varchar(64) DEFAULT NULL COMMENT '考试ID',
`serial_number` varchar(64) DEFAULT NULL COMMENT '序号',
`subject_name` varchar(255) DEFAULT NULL COMMENT '题目名称',
`type` varchar(64) DEFAULT NULL COMMENT '题目类型',
`content` varchar(255) DEFAULT NULL COMMENT '题目内容',
`option_a` varchar(255) DEFAULT NULL COMMENT '选项a',
`option_b` varchar(255) DEFAULT NULL COMMENT '选项b',
`option_c` varchar(255) DEFAULT NULL COMMENT '选项c',
`option_d` varchar(255) DEFAULT NULL COMMENT '选项d',
`option_e` varchar(255) DEFAULT NULL COMMENT '选项e',
`option_f` varchar(255) DEFAULT NULL COMMENT '选项f',
`answer` varchar(255) DEFAULT NULL COMMENT '参考答案',
`score` varchar(64) DEFAULT NULL COMMENT '分值',
`analysis` varchar(255) DEFAULT NULL COMMENT '解析',
`level` varchar(64) DEFAULT NULL COMMENT '难度等级',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `subject` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`examination_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '考试ID',
`serial_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '序号',
`subject_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目名称',
`type` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目类型',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目内容',
`option_a` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项a',
`option_b` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项b',
`option_c` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项c',
`option_d` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项d',
`option_e` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项e',
`option_f` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项f',
`answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参考答案',
`score` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分值',
`analysis` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '解析',
`level` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '难度等级',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of subject
-- ----------------------------
INSERT INTO `subject` VALUES ('157a7262a4534c7ba1a3bca970a4a59b', 'b5990bc1c48d49fcb0023de51772c309', '2', '2', '0', '', '2', '2', '2', '2', '', '', 'B', '2', '2', '2', 'admin', '2019-01-23 20:11:12', 'admin', '2019-01-23 20:11:12', '0', 'EXAM');
INSERT INTO `subject` VALUES ('185b6875ef694febadba8797fbd0ad29', 'b5990bc1c48d49fcb0023de51772c309', null, '232222', '0', '', '323fffff', '32', '32', '323', '', '', 'D', '5', '323', '2', 'admin', '2018-12-09 20:55:31', 'admin', '2019-01-23 20:09:00', '0', 'EXAM');
INSERT INTO `subject` VALUES ('185b6875ef694febadba8797fbd0ad29', 'b5990bc1c48d49fcb0023de51772c309', NULL, '232222', '0', '', '323fffff', '32', '32', '323', '', '', 'D', '5', '323', '2', 'admin', '2018-12-09 20:55:31', 'admin', '2019-01-23 20:09:00', '0', 'EXAM');
INSERT INTO `subject` VALUES ('1a934e62942640459b3a66c05f6c09b2', 'fad663ea371f4250a81332bd3a346739', '3', '唐前期的政治人物多为北方人,北宋时政治人物多出生于江西、福建、苏南等地。这一变化主要反映了', '0', '', '官僚集团重视本地域人才', '南北方士人志向差异', '科举制改变人才地域分布', '政治中心转移到南方', '', '', 'B', '4', '政治中心转移到南方', '2', 'admin', '2018-12-09 21:07:20', 'admin', '2018-12-29 20:32:20', '0', 'EXAM');
INSERT INTO `subject` VALUES ('235a2d7a8e9b469cbfdf0b86a02c9ae6', '4f9ced28ffe64fcea57a7367e9fd4c0c', '2', '2', '0', '', '2', '2', '2', '2', '', '', 'B', '2', '2', '2', 'admin', '2019-01-23 20:23:01', 'admin', '2019-01-23 20:23:01', '1', 'EXAM');
INSERT INTO `subject` VALUES ('2954ff84207542b395d2471e166cb414', 'fad663ea371f4250a81332bd3a346739', null, '1', '0', '', '1', '1', '1', '1', '', '', 'D', '5', '1', '2', 'admin', '2018-12-09 20:27:59', 'admin', '2018-12-09 20:27:59', '1', 'EXAM');
INSERT INTO `subject` VALUES ('2954ff84207542b395d2471e166cb414', 'fad663ea371f4250a81332bd3a346739', NULL, '1', '0', '', '1', '1', '1', '1', '', '', 'D', '5', '1', '2', 'admin', '2018-12-09 20:27:59', 'admin', '2018-12-09 20:27:59', '1', 'EXAM');
INSERT INTO `subject` VALUES ('4b388583cfd84a2eaddff902a7c444bd', '4f9ced28ffe64fcea57a7367e9fd4c0c', '3', '3', '0', '', '3', '3', '3', '3', '', '', 'B', '3', '3', '2', 'admin', '2019-01-23 20:24:20', 'admin', '2019-01-23 20:24:20', '1', 'EXAM');
INSERT INTO `subject` VALUES ('4d654c576f534f349278806b046608d6', 'fad663ea371f4250a81332bd3a346739', '2', '公元前212年,秦始皇坑杀“术士”,长子扶苏劝谏说:“远方黔首未集,诸生皆诵 法孔子,今上皆重法绳之,臣恐天下不安,唯上察之”。这反映当时', '0', '', '统一进程曲折', '地方治理不畅', '始皇灭儒崇法', '儒学影响较大', '', '', 'B', '4', '公元前212年,秦始皇坑杀“术士”,长子扶苏劝谏说:“远方黔首未集,诸生皆诵 法孔子,今上皆重法绳之,臣恐天下不安,唯上察之”。这反映当时', '4', 'admin', '2018-12-09 21:07:07', 'admin', '2019-01-01 14:42:12', '0', 'EXAM');
INSERT INTO `subject` VALUES ('6a2d2c870e884ffc8130003accb22eb8', '4f9ced28ffe64fcea57a7367e9fd4c0c', '8', '8', '0', '', '8', '8', '8', '8', '', '', 'B', '8', '8', '2', 'admin', '2019-01-23 20:46:29', 'admin', '2019-01-23 20:46:29', '1', 'EXAM');
INSERT INTO `subject` VALUES ('88040b225de84522ad88e1c9196a1ea5', '4f9ced28ffe64fcea57a7367e9fd4c0c', null, '2', '0', '', '2', '2', '2', '2', '', '', 'B', '2', '2', '2', 'admin', '2019-01-23 20:48:33', 'admin', '2019-01-23 20:48:33', '1', 'EXAM');
INSERT INTO `subject` VALUES ('88040b225de84522ad88e1c9196a1ea5', '4f9ced28ffe64fcea57a7367e9fd4c0c', NULL, '2', '0', '', '2', '2', '2', '2', '', '', 'B', '2', '2', '2', 'admin', '2019-01-23 20:48:33', 'admin', '2019-01-23 20:48:33', '1', 'EXAM');
INSERT INTO `subject` VALUES ('a53b9ab6aa904d669be83daf17b33156', 'f051f54621fc4812b929a7777a701712', '44', '44', '0', '', '44', '44', '44', '44', '', '', 'B', '44', '44', '2', 'admin', '2019-01-23 20:35:13', 'admin', '2019-01-23 20:35:13', '0', 'EXAM');
INSERT INTO `subject` VALUES ('ac2787a9c86e4ca39d17e53348d6fccb', 'f051f54621fc4812b929a7777a701712', null, '33', '0', '', '33', '33', '33', '33', '', '', 'D', '5', '333', '2', 'admin', '2018-12-09 20:55:52', 'admin', '2019-01-07 22:11:19', '0', 'EXAM');
INSERT INTO `subject` VALUES ('ac2787a9c86e4ca39d17e53348d6fccb', 'f051f54621fc4812b929a7777a701712', NULL, '33', '0', '', '33', '33', '33', '33', '', '', 'D', '5', '333', '2', 'admin', '2018-12-09 20:55:52', 'admin', '2019-01-07 22:11:19', '0', 'EXAM');
INSERT INTO `subject` VALUES ('b5d4f37380994d49ba57c508de0b5454', '4f9ced28ffe64fcea57a7367e9fd4c0c', '6', '6', '0', '', '6', '6', '6', '6', '', '', 'B', '6', '6', '2', 'admin', '2019-01-23 20:31:56', 'admin', '2019-01-23 20:31:56', '1', 'EXAM');
INSERT INTO `subject` VALUES ('c48ef0b956604af0830d813908898b9b', '4f9ced28ffe64fcea57a7367e9fd4c0c', '5', '5', '0', '', '5', '5', '5', '5', '', '', 'B', '5', '5', '2', 'admin', '2019-01-23 20:27:35', 'admin', '2019-01-23 20:27:35', '1', 'EXAM');
INSERT INTO `subject` VALUES ('cf52d0ac4ca14e7695a92b7aaacbb0d7', '4f9ced28ffe64fcea57a7367e9fd4c0c', '7', '7', '0', '', '7', '7', '7', '7', '', '', 'C', '7', '7', '2', 'admin', '2019-01-23 20:34:47', 'admin', '2019-01-23 20:34:47', '1', 'EXAM');
INSERT INTO `subject` VALUES ('e34926a94a4a4895817d7ea78aa63012', 'fad663ea371f4250a81332bd3a346739', '1', '《小雅·鹿鸣》本是西周贵族宣扬宴飨之仪的乐歌,后扩散到民间,在乡人宴会上也可传唱。这表明西周时期', '0', '', '周人生活较为富足', '礼乐文明得到广泛认同', '乡人社会地位提高', '贵族奢靡之风波及民间', '', '', 'B', '4', '材料涉及西周贵族宣扬宴飨之仪的乐歌扩散到民间,并不能由此说明周人生活较为富足,故A项错误;据材料“西周贵族宣扬宴飨之仪的乐歌,后扩散到民间,在乡人宴会上也可传唱”可知礼乐文明得到广泛认同,故B项正确;仅凭材料宴飨之仪的乐歌的扩散不足以说明乡人社会地位提高,故C项错误;材料涉及贵族宴飨之仪的乐歌的扩散,并未涉及贵族奢靡之风,故D项错误。', '2', 'admin', '2018-12-09 20:30:07', 'admin', '2018-12-29 20:50:12', '0', 'EXAM');
INSERT INTO `subject` VALUES ('e73e1cf4feaf47449ce982376afcdb03', 'fad663ea371f4250a81332bd3a346739', null, '232222', '0', '', '323fffff', '32', '32', '323', '', '', 'D', '5', '323', '2', 'admin', '2018-12-09 20:28:15', 'admin', '2018-12-09 20:28:15', '1', 'EXAM');
INSERT INTO `subject` VALUES ('e73e1cf4feaf47449ce982376afcdb03', 'fad663ea371f4250a81332bd3a346739', NULL, '232222', '0', '', '323fffff', '32', '32', '323', '', '', 'D', '5', '323', '2', 'admin', '2018-12-09 20:28:15', 'admin', '2018-12-09 20:28:15', '1', 'EXAM');
INSERT INTO `subject` VALUES ('ea1a81331e0b4ecfa39cb59813d11fa5', '4f9ced28ffe64fcea57a7367e9fd4c0c', '1', '测试', '0', '', '测试', '测试', '测试', '测试', '', '', 'A', '2', '测试', '2', 'admin', '2019-01-14 20:32:54', 'admin', '2019-01-14 20:32:54', '1', 'EXAM');
INSERT INTO `subject` VALUES ('f1856276d261426782dfd7793a9efdd0', '4f9ced28ffe64fcea57a7367e9fd4c0c', '4', '4', '0', '', '4', '4', '4', '4', '', '', 'B', '4', '4', '2', 'admin', '2019-01-23 20:25:43', 'admin', '2019-01-23 20:25:43', '1', 'EXAM');
......@@ -283,74 +285,75 @@ INSERT INTO `subject` VALUES ('f1856276d261426782dfd7793a9efdd0', '4f9ced28ffe64
-- Table structure for subject_bank
-- ----------------------------
DROP TABLE IF EXISTS `subject_bank`;
CREATE TABLE `subject_bank` (
`id` varchar(64) NOT NULL,
`category_id` varchar(64) DEFAULT NULL COMMENT '分类ID',
`serial_number` varchar(62) DEFAULT NULL COMMENT '题目序号',
`subject_name` varchar(255) DEFAULT NULL COMMENT '题目名称',
`type` varchar(64) DEFAULT NULL COMMENT '题目类型',
`content` varchar(255) DEFAULT NULL COMMENT '题目内容',
`option_a` varchar(255) DEFAULT NULL COMMENT '选项a',
`option_b` varchar(255) DEFAULT NULL COMMENT '选项b',
`option_c` varchar(255) DEFAULT NULL COMMENT '选项c',
`option_d` varchar(255) DEFAULT NULL COMMENT '选项d',
`option_e` varchar(255) DEFAULT NULL COMMENT '选项e',
`option_f` varchar(255) DEFAULT NULL COMMENT '选项f',
`answer` varchar(255) DEFAULT NULL COMMENT '参考答案',
`score` varchar(64) DEFAULT NULL COMMENT '分值',
`analysis` varchar(255) DEFAULT NULL COMMENT '解析',
`level` varchar(64) DEFAULT NULL COMMENT '难度等级',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='题库表';
CREATE TABLE `subject_bank` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`category_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类ID',
`serial_number` varchar(62) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目序号',
`subject_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目名称',
`type` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目类型',
`content` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '题目内容',
`option_a` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项a',
`option_b` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项b',
`option_c` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项c',
`option_d` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项d',
`option_e` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项e',
`option_f` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '选项f',
`answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '参考答案',
`score` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分值',
`analysis` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '解析',
`level` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '难度等级',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '题库表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of subject_bank
-- ----------------------------
INSERT INTO `subject_bank` VALUES ('2612f127f8e74736a086e9ec18850852', '700556b5becd4091821644a5288d489c', null, '232222', '0', '', '323fffff', '32', '32', '323', '', '', '2', '323', '323', '2', 'admin', '2018-12-09 14:38:47', 'admin', '2018-12-09 14:49:43', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('2612f127f8e74736a086e9ec18850852', '700556b5becd4091821644a5288d489c', NULL, '232222', '0', '', '323fffff', '32', '32', '323', '', '', '2', '323', '323', '2', 'admin', '2018-12-09 14:38:47', 'admin', '2018-12-09 14:49:43', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('3600225f10114e40a07e4312d3f7f8ad', '700556b5becd4091821644a5288d489c', '1', '1', '0', '', '1', '1', '1', '1', '', '', 'B', '1444', '1', '2', 'admin', '2019-01-09 21:11:34', 'admin', '2019-03-20 22:21:07', '0', 'EXAM');
INSERT INTO `subject_bank` VALUES ('494fb828f270450690a82f23450f138f', '700556b5becd4091821644a5288d489c', '323', '23', '0', '', '323', '323', '323', '233', '', '', 'B', '323', '323', '2', 'admin', '2019-01-09 18:03:22', 'admin', '2019-01-09 18:03:22', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('aeff7c505e374cbdbcecf79e7a587ddd', '', '1', '33', '0', '', '33', '33', '33', '33', '', '', '3', '4', '333', '4', 'admin', '2018-12-09 14:47:02', 'admin', '2019-01-09 17:45:30', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('b1058acf24184bfd8c85c61d59dfdfd0', 'c664646337c345ac8a91e3b024ded8bb', null, '操作系统', '0', '', '操作系统', '操作系统', '操作系统', '操作系统', '', '', '1', '操作系统', '操作系统', '2', 'admin', '2018-12-09 20:26:59', 'admin', '2018-12-09 20:27:05', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('f8cf3298c59045929c4c108251c66eb7', 'c664646337c345ac8a91e3b024ded8bb', null, '434', '0', '', '434', '434', '343', '4434', '', '', '2', '434', '434', '2', 'admin', '2018-12-09 20:27:32', 'admin', '2018-12-09 20:27:32', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('b1058acf24184bfd8c85c61d59dfdfd0', 'c664646337c345ac8a91e3b024ded8bb', NULL, '操作系统', '0', '', '操作系统', '操作系统', '操作系统', '操作系统', '', '', '1', '操作系统', '操作系统', '2', 'admin', '2018-12-09 20:26:59', 'admin', '2018-12-09 20:27:05', '1', 'EXAM');
INSERT INTO `subject_bank` VALUES ('f8cf3298c59045929c4c108251c66eb7', 'c664646337c345ac8a91e3b024ded8bb', NULL, '434', '0', '', '434', '434', '343', '4434', '', '', '2', '434', '434', '2', 'admin', '2018-12-09 20:27:32', 'admin', '2018-12-09 20:27:32', '1', 'EXAM');
-- ----------------------------
-- Table structure for subject_category
-- ----------------------------
DROP TABLE IF EXISTS `subject_category`;
CREATE TABLE `subject_category` (
`id` varchar(64) NOT NULL COMMENT '主键',
`category_name` varchar(255) DEFAULT NULL COMMENT '分类名称',
`category_desc` varchar(255) DEFAULT NULL COMMENT '分类描述',
`parent_id` varchar(64) DEFAULT NULL COMMENT '父分类ID',
`sort` varchar(64) DEFAULT NULL COMMENT '排序号',
`creator` varchar(255) DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `subject_category` (
`id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '主键',
`category_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类名称',
`category_desc` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '分类描述',
`parent_id` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '父分类ID',
`sort` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '排序号',
`creator` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`create_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`modifier` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改人',
`modify_date` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '修改时间',
`del_flag` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '删除标记',
`application_code` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '系统编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of subject_category
-- ----------------------------
INSERT INTO `subject_category` VALUES ('047a8dd7d0614314a72750af9915ada0', '大学语文', null, '-1', '6', 'admin', '2018-12-06 20:37:38', 'admin', '2018-12-06 20:44:44', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('103cf01d23574c93b88a4aff2a350471', '四级', null, '412a93a6e1ac49a59e66da0721c183cd', '1', 'admin', '2018-12-09 20:32:08', 'admin', '2018-12-09 20:32:08', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('047a8dd7d0614314a72750af9915ada0', '大学语文', NULL, '-1', '6', 'admin', '2018-12-06 20:37:38', 'admin', '2018-12-06 20:44:44', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('103cf01d23574c93b88a4aff2a350471', '四级', NULL, '412a93a6e1ac49a59e66da0721c183cd', '1', 'admin', '2018-12-09 20:32:08', 'admin', '2018-12-09 20:32:08', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('412a93a6e1ac49a59e66da0721c183cd', '大学英语', '大学英语', '-1', '2', 'admin', '2018-12-06 20:37:29', 'admin', '2018-12-06 20:44:25', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('577ff5e3a9b345e18d40e505cc631110', '国际金融', null, '-1', '5', 'admin', '2018-12-06 20:38:30', 'admin', '2018-12-06 20:44:40', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('577ff5e3a9b345e18d40e505cc631110', '国际金融', NULL, '-1', '5', 'admin', '2018-12-06 20:38:30', 'admin', '2018-12-06 20:44:40', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('700556b5becd4091821644a5288d489c', '架构基础', '4343434', 'aceeeb30b57f4d6982cd37682b5b7522', '1', 'admin', '2018-12-06 20:45:06', 'admin', '2019-03-06 13:59:01', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('9fdbb0add5354249a8a2d530bdd48d08', '高等数学', null, '-1', '3', 'admin', '2018-12-06 20:37:45', 'admin', '2018-12-06 20:44:31', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('aceeeb30b57f4d6982cd37682b5b7522', '计算机', null, '-1', '1', 'admin', '2018-12-06 20:41:44', 'admin', '2018-12-06 20:44:09', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('c664646337c345ac8a91e3b024ded8bb', '操作系统', null, 'aceeeb30b57f4d6982cd37682b5b7522', '2', 'admin', '2018-12-06 20:45:21', 'admin', '2018-12-06 20:45:21', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('caf8805fc7dc481b98d08ab13e5c5234', '数据库', null, 'aceeeb30b57f4d6982cd37682b5b7522', '3', 'admin', '2018-12-06 20:45:34', 'admin', '2018-12-06 20:45:34', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('dbc710d2af704f8b88488ae2b7e63d9e', '5555', null, '-1', '30', 'admin', '2018-12-09 21:04:56', 'admin', '2018-12-09 21:04:56', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('e11504263fef456997b24d7db0a86c4c', '六级', null, '412a93a6e1ac49a59e66da0721c183cd', '2', 'admin', '2018-12-09 20:32:16', 'admin', '2018-12-09 20:32:16', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('ffe1d4053ae4475bb39aacd6699d37c4', '应用数学', null, '-1', '4', 'admin', '2018-12-06 20:38:20', 'admin', '2018-12-06 20:44:36', '0', 'EXAM');
SET FOREIGN_KEY_CHECKS=1;
INSERT INTO `subject_category` VALUES ('9fdbb0add5354249a8a2d530bdd48d08', '高等数学', NULL, '-1', '3', 'admin', '2018-12-06 20:37:45', 'admin', '2018-12-06 20:44:31', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('aceeeb30b57f4d6982cd37682b5b7522', '计算机', NULL, '-1', '1', 'admin', '2018-12-06 20:41:44', 'admin', '2018-12-06 20:44:09', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('c664646337c345ac8a91e3b024ded8bb', '操作系统', NULL, 'aceeeb30b57f4d6982cd37682b5b7522', '2', 'admin', '2018-12-06 20:45:21', 'admin', '2018-12-06 20:45:21', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('caf8805fc7dc481b98d08ab13e5c5234', '数据库', NULL, 'aceeeb30b57f4d6982cd37682b5b7522', '3', 'admin', '2018-12-06 20:45:34', 'admin', '2018-12-06 20:45:34', '0', 'EXAM');
INSERT INTO `subject_category` VALUES ('dbc710d2af704f8b88488ae2b7e63d9e', '5555', NULL, '-1', '30', 'admin', '2018-12-09 21:04:56', 'admin', '2018-12-09 21:04:56', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('e11504263fef456997b24d7db0a86c4c', '六级', NULL, '412a93a6e1ac49a59e66da0721c183cd', '2', 'admin', '2018-12-09 20:32:16', 'admin', '2018-12-09 20:32:16', '1', 'EXAM');
INSERT INTO `subject_category` VALUES ('ffe1d4053ae4475bb39aacd6699d37c4', '应用数学', NULL, '-1', '4', 'admin', '2018-12-06 20:38:20', 'admin', '2018-12-06 20:44:36', '0', 'EXAM');
SET FOREIGN_KEY_CHECKS = 1;
This source diff could not be displayed because it is too large. You can view the blob instead.
doc/images/deploy/config.png

99.7 KB | W: | H:

doc/images/deploy/config.png

88 KB | W: | H:

doc/images/deploy/config.png
doc/images/deploy/config.png
doc/images/deploy/config.png
doc/images/deploy/config.png
  • 2-up
  • Swipe
  • Onion skin
doc/images/deploy/config_fdfs.png

90.3 KB | W: | H:

doc/images/deploy/config_fdfs.png

127 KB | W: | H:

doc/images/deploy/config_fdfs.png
doc/images/deploy/config_fdfs.png
doc/images/deploy/config_fdfs.png
doc/images/deploy/config_fdfs.png
  • 2-up
  • Swipe
  • Onion skin
doc/images/deploy/config_redis.png

69.1 KB | W: | H:

doc/images/deploy/config_redis.png

88.2 KB | W: | H:

doc/images/deploy/config_redis.png
doc/images/deploy/config_redis.png
doc/images/deploy/config_redis.png
doc/images/deploy/config_redis.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -44,6 +44,8 @@ fastDfs的IP和端口号:
`/doc/deploy/mysql/microservice-user.sql`
`/doc/deploy/mysql/microservice-exam.sql`
`/doc/deploy/mysql/microservice-auth.sql`
#### 启动后端项目
......
......@@ -12,11 +12,12 @@ common -- 系统公共模块
service-api -- 服务api公共模块
├── user-api -- 用户服务api
└── exam-api -- 考试服务api
service-api-impl -- 服务api模块实现
├── auth-service -- 授权服务(OAuth2.0)
├── user-service -- 用户服务
└── exam-service -- 考试服务
config-service -- 配置中心(本地仓库)
gateway-service -- 网关(动态路由)
auth-service -- 授权服务(OAuth2.0)
user-service -- 用户服务
exam-service -- 考试服务
monitor-service -- spring boot amdin 监控服务
```
......
......@@ -5,6 +5,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.ComponentScan;
@EnableDiscoveryClient
......@@ -12,6 +13,8 @@ import org.springframework.context.annotation.ComponentScan;
// 配置包扫描,排查Swagger配置
@ComponentScan(basePackages = {"com.github.tangyi"})
@EnableCircuitBreaker
// 动态刷新
@RefreshScope
public class GatewayServiceApplication {
public static void main(String[] args) {
......
package com.github.tangyi.gateway.filters;
import cn.hutool.core.util.StrUtil;
import com.github.tangyi.common.core.constant.SecurityConstant;
import com.github.tangyi.common.core.constant.CommonConstant;
import com.github.tangyi.common.core.exceptions.InvalidValidateCodeException;
import com.github.tangyi.common.core.exceptions.ValidateCodeExpiredException;
import com.github.tangyi.gateway.constants.GatewayConstant;
......@@ -74,7 +74,7 @@ public class ValidateCodeFilter implements GlobalFilter, Ordered {
String randomStr = params.getFirst("randomStr");
if (StrUtil.isBlank(randomStr))
randomStr = params.getFirst("mobile");
String key = SecurityConstant.DEFAULT_CODE_KEY + randomStr;
String key = CommonConstant.DEFAULT_CODE_KEY + randomStr;
// 验证码过期
if (!redisTemplate.hasKey(key))
throw new ValidateCodeExpiredException(EXPIRED_ERROR);
......
......@@ -4,6 +4,7 @@ import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
......@@ -12,6 +13,8 @@ import org.springframework.cloud.netflix.turbine.EnableTurbine;
@EnableHystrixDashboard
@EnableTurbine
@EnableAdminServer
// 动态刷新
@RefreshScope
public class MonitorServiceApplication {
public static void main(String[] args) {
......
......@@ -27,6 +27,9 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
successHandler.setAlwaysUseDefaultTargetUrl(true);
successHandler.setDefaultTargetUrl(adminContextPath + "/");
// 解决spring boot不允许加载iframe问题
http.headers().frameOptions().disable();
http.authorizeRequests()
.antMatchers("/actuator/**", "/hystrix/**","/hystrix","*.stream").permitAll()
.antMatchers(adminContextPath + "/assets/**").permitAll()
......
......@@ -23,12 +23,10 @@
<modules>
<module>config-service</module>
<module>gateway-service</module>
<module>auth-service</module>
<module>user-service</module>
<module>exam-service</module>
<module>common</module>
<module>monitor-service</module>
<module>service-api</module>
<module>service-api-impl</module>
<module>zipkin-service</module>
</modules>
......@@ -58,7 +56,7 @@
<swagger.version>2.9.2</swagger.version>
<driud.version>1.1.4</driud.version>
<fastdfs-client.version>1.26.5</fastdfs-client.version>
<mysql.connector.version>8.0.13</mysql.connector.version>
<!-- common-->
<commons-io.version>2.6</commons-io.version>
<commons-lang3.version>3.7</commons-lang3.version>
......@@ -180,6 +178,13 @@
<version>${project.version}</version>
</dependency>
<!-- auth-api -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>auth-api</artifactId>
<version>${project.version}</version>
</dependency>
<!-- exam-api -->
<dependency>
<groupId>com.github.tangyi</groupId>
......@@ -213,6 +218,41 @@
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger.version}</version>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.connector.version}</version>
</dependency>
<!-- druid阿里巴巴数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${driud.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--fastDfs-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs-client.version}</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
......
......@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.tangyi</groupId>
<artifactId>spring-microservice-exam</artifactId>
<artifactId>service-api-impl</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>auth-service</artifactId>
......@@ -24,18 +24,36 @@
<artifactId>common-security</artifactId>
</dependency>
<!-- common-log -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>common-log</artifactId>
</dependency>
<!-- user-api -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>user-api</artifactId>
</dependency>
<!-- auth-api -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>auth-api</artifactId>
</dependency>
<!-- exam-api -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>exam-api</artifactId>
</dependency>
<!-- web 服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 配置客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
......@@ -47,17 +65,40 @@
<artifactId>spring-security-oauth2-autoconfigure</artifactId>
</dependency>
<!-- web 服务 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 管理中心插件 -->
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- druid阿里巴巴数据库连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
</dependencies>
<build>
......
......@@ -9,11 +9,11 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableAuthorizationServer;
@SpringBootApplication
@EnableDiscoveryClient
@EnableAuthorizationServer
// 扫描api包里的FeignClient
@EnableFeignClients(basePackages = {"com.github.tangyi"})
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = {"com.github.tangyi"})
@EnableCircuitBreaker
public class AuthServiceApplication {
......
package com.github.tangyi.auth.config;
import com.github.tangyi.common.security.core.ClientDetailsServiceImpl;
import com.github.tangyi.common.security.exceptions.CustomOauthException;
import com.github.tangyi.common.security.properties.SecurityConfigProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.http.ResponseEntity;
......@@ -12,11 +13,13 @@ import org.springframework.security.oauth2.common.exceptions.OAuth2Exception;
import org.springframework.security.oauth2.config.annotation.configurers.ClientDetailsServiceConfigurer;
import org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter;
import org.springframework.security.oauth2.config.annotation.web.configurers.AuthorizationServerEndpointsConfigurer;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.token.TokenStore;
import org.springframework.security.oauth2.provider.token.store.JwtAccessTokenConverter;
import org.springframework.security.oauth2.provider.token.store.KeyStoreKeyFactory;
import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
import org.springframework.stereotype.Component;
import javax.sql.DataSource;
/**
* 授权服务器配置
......@@ -24,18 +27,18 @@ import org.springframework.stereotype.Component;
* @author tangyi
* @date 2019-03-14 11:40
*/
@Component
@Configuration
public class CustomAuthorizationServerConfigurer extends AuthorizationServerConfigurerAdapter {
@Autowired
private SecurityConfigProperties properties;
@Autowired
private AuthenticationManager authenticationManager;
@Autowired
private RedisConnectionFactory redisConnectionFactory;
@Autowired
private DataSource dataSource;
@Bean
public TokenStore tokenStore() {
// 将token存储到redis
......@@ -50,20 +53,15 @@ public class CustomAuthorizationServerConfigurer extends AuthorizationServerConf
return converter;
}
@Bean
public ClientDetailsService clientDetails() {
return new ClientDetailsServiceImpl(dataSource);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients
.inMemory()
.withClient(properties.getClientId())
.secret(properties.getClientSecret())
.authorizedGrantTypes(
properties.getGrantTypePassword(),
properties.getAuthorizationCode(),
properties.getRefreshToken(),
properties.getImplicit())
.scopes(properties.getScopeRead(), properties.getScopeWrite())
.accessTokenValiditySeconds(properties.getAccessTokenValiditySeconds())
.refreshTokenValiditySeconds(properties.getRefreshTokenValiditySeconds());
// 从数据库加载客户端信息
clients.withClientDetails(clientDetails());
}
@Override
......
package com.github.tangyi.auth.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
import javax.sql.DataSource;
/**
* @author tangyi
* @date 2019/3/30 23:48
*/
@Configuration
@EnableTransactionManagement
public class MybatisConfig implements TransactionManagementConfigurer {
private final DataSource dataSource;
@Autowired
public MybatisConfig(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public PlatformTransactionManager annotationDrivenTransactionManager() {
return new DataSourceTransactionManager(dataSource);
}
}
package com.github.tangyi.auth.config;
import io.swagger.annotations.ApiOperation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
* Swagger配置
*
* @author tangyi
* @date 2019/3/26 16:26
*/
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
ParameterBuilder tokenBuilder = new ParameterBuilder();
List<Parameter> parameterList = new ArrayList<>();
tokenBuilder.name("Authorization")
.defaultValue("去其他请求中获取heard中token参数")
.description("令牌")
.modelRef(new ModelRef("string"))
.parameterType("header")
.required(true).build();
parameterList.add(tokenBuilder.build());
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build()
.globalOperationParameters(parameterList);
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Swagger API")
.description("https://gitee.com/wells2333/spring-microservice-exam")
.termsOfServiceUrl("https://gitee.com/wells2333/spring-microservice-exam")
.contact(new Contact("tangyi","https://gitee.com/wells2333/spring-microservice-exam","1633736729@qq.com"))
.version("2.0")
.build();
}
}
package com.github.tangyi.auth.controller;
import com.github.tangyi.common.core.constant.SecurityConstant;
import com.github.tangyi.common.security.constant.SecurityConstant;
import com.github.tangyi.common.core.model.ResponseBean;
import com.github.tangyi.common.core.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
......
package com.github.tangyi.auth.controller;
import com.github.pagehelper.PageInfo;
import com.github.tangyi.auth.api.module.OauthClientDetails;
import com.github.tangyi.auth.service.OauthClientDetailsService;
import com.github.tangyi.common.core.constant.CommonConstant;
import com.github.tangyi.common.core.model.ResponseBean;
import com.github.tangyi.common.core.utils.PageUtil;
import com.github.tangyi.common.core.utils.SysUtil;
import com.github.tangyi.common.core.web.BaseController;
import com.github.tangyi.common.log.annotation.Log;
import com.github.tangyi.common.security.utils.SecurityUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Oauth2客户端信息管理
*
* @author tangyi
* @date 2019/3/30 16:49
*/
@Api("Oauth2客户端信息管理")
@RestController
@RequestMapping("/v1/client")
public class OauthClientDetailsController extends BaseController {
@Autowired
private OauthClientDetailsService oauthClientDetailsService;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
/**
* 根据ID获取
*
* @param id id
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 16:53
*/
@ApiOperation(value = "获取客户端信息", notes = "根据客户端id获取客户端详细信息")
@ApiImplicitParam(name = "id", value = "客户端ID", required = true, dataType = "String", paramType = "path")
@GetMapping("/{id}")
public ResponseBean<OauthClientDetails> oauthClient(@PathVariable String id) {
OauthClientDetails oauthClientDetails = new OauthClientDetails();
if (StringUtils.isNotBlank(id)) {
oauthClientDetails.setId(id);
oauthClientDetails = oauthClientDetailsService.get(oauthClientDetails);
}
return new ResponseBean<>(oauthClientDetails);
}
/**
* 分页查询
*
* @param pageNum pageNum
* @param pageSize pageSize
* @param sort sort
* @param order order
* @param oauthClientDetails oauthClientDetails
* @return PageInfo
* @author tangyi
* @date 2019/03/30 16:54
*/
@RequestMapping("clientList")
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "获取客户端列表")
@ApiImplicitParams({
@ApiImplicitParam(name = "pageNum", value = "分页页码", defaultValue = CommonConstant.PAGE_NUM_DEFAULT, dataType = "String"),
@ApiImplicitParam(name = "pageSize", value = "分页大小", defaultValue = CommonConstant.PAGE_SIZE_DEFAULT, dataType = "String"),
@ApiImplicitParam(name = "sort", value = "排序字段", defaultValue = CommonConstant.PAGE_SORT_DEFAULT, dataType = "String"),
@ApiImplicitParam(name = "order", value = "排序方向", defaultValue = CommonConstant.PAGE_ORDER_DEFAULT, dataType = "String"),
@ApiImplicitParam(name = "attachment", value = "客户端信息", dataType = "OauthClient")
})
public PageInfo<OauthClientDetails> oauthClientList(@RequestParam(value = "pageNum", required = false, defaultValue = CommonConstant.PAGE_NUM_DEFAULT) String pageNum,
@RequestParam(value = "pageSize", required = false, defaultValue = CommonConstant.PAGE_SIZE_DEFAULT) String pageSize,
@RequestParam(value = "sort", required = false, defaultValue = CommonConstant.PAGE_SORT_DEFAULT) String sort,
@RequestParam(value = "order", required = false, defaultValue = CommonConstant.PAGE_ORDER_DEFAULT) String order,
OauthClientDetails oauthClientDetails) {
return oauthClientDetailsService.findPage(PageUtil.pageInfo(pageNum, pageSize, sort, order), oauthClientDetails);
}
/**
* 查询客户端列表
*
* @param oauthClientDetails oauthClientDetails
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 23:17
*/
@RequestMapping("clients")
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "查询客户端列表", notes = "查询客户端列表")
@ApiImplicitParam(name = "oauthClient", value = "客户端实体oauthClient", required = true, dataType = "OauthClientDetails")
public ResponseBean<List<OauthClientDetails>> findOauthClientList(@RequestBody OauthClientDetails oauthClientDetails) {
return new ResponseBean<>(oauthClientDetailsService.findList(oauthClientDetails));
}
/**
* 创建客户端
*
* @param oauthClientDetails oauthClientDetails
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 16:57
*/
@PostMapping
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "创建客户端", notes = "创建客户端")
@ApiImplicitParam(name = "oauthClientDetails", value = "客户端实体oauthClientDetails", required = true, dataType = "OauthClientDetails")
@Log("新增客户端")
public ResponseBean<Boolean> oauthClient(@RequestBody OauthClientDetails oauthClientDetails) {
oauthClientDetails.setCommonValue(SecurityUtil.getCurrentUsername(), SysUtil.getSysCode());
// 加密密钥
oauthClientDetails.setClientSecret(bCryptPasswordEncoder.encode(oauthClientDetails.getClientSecretPlainText()));
return new ResponseBean<>(oauthClientDetailsService.insert(oauthClientDetails) > 0);
}
/**
* 修改客户端
*
* @param oauthClientDetails oauthClientDetails
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 16:56
*/
@PutMapping
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "更新客户端信息", notes = "根据客户端id更新客户端的基本信息")
@ApiImplicitParam(name = "oauthClientDetails", value = "客户端实体oauthClientDetails", required = true, dataType = "OauthClientDetails")
@Log("修改客户端")
public ResponseBean<Boolean> updateOauthClient(@RequestBody OauthClientDetails oauthClientDetails) {
oauthClientDetails.setCommonValue(SecurityUtil.getCurrentUsername(), SysUtil.getSysCode());
// 加密密钥
oauthClientDetails.setClientSecret(bCryptPasswordEncoder.encode(oauthClientDetails.getClientSecretPlainText()));
return new ResponseBean<>(oauthClientDetailsService.update(oauthClientDetails) > 0);
}
/**
* 根据id删除客户端
*
* @param id id
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 16:59
*/
@DeleteMapping("/{id}")
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "删除客户端", notes = "根据ID删除客户端")
@ApiImplicitParam(name = "id", value = "客户端ID", required = true, paramType = "path")
@Log("删除客户端")
public ResponseBean<Boolean> deleteOauthClient(@PathVariable String id) {
OauthClientDetails oauthClientDetails = new OauthClientDetails();
oauthClientDetails.setId(id);
oauthClientDetails.setNewRecord(false);
oauthClientDetails.setCommonValue(SecurityUtil.getCurrentUsername(), SysUtil.getSysCode());
return new ResponseBean<>(oauthClientDetailsService.delete(oauthClientDetails) > 0);
}
/**
* 批量删除
*
* @param oauthClientDetails oauthClientDetails
* @return ResponseBean
* @author tangyi
* @date 2019/03/30 17:01
*/
@PostMapping("/deleteAll")
@PreAuthorize("hasAnyRole('ROLE_USER', 'ROLE_ADMIN')")
@ApiOperation(value = "批量删除客户端", notes = "根据客户端id批量删除客户端")
@ApiImplicitParam(name = "oauthClientDetails", value = "客户端信息", dataType = "OauthClientDetails")
@Log("批量删除客户端")
public ResponseBean<Boolean> deleteAllOauthClient(@RequestBody OauthClientDetails oauthClientDetails) {
boolean success = false;
try {
if (StringUtils.isNotEmpty(oauthClientDetails.getIdString()))
success = oauthClientDetailsService.deleteAll(oauthClientDetails.getIdString().split(",")) > 0;
} catch (Exception e) {
logger.error("删除客户端失败!", e);
}
return new ResponseBean<>(success);
}
}
package com.github.tangyi.auth.controller;
import com.github.tangyi.common.core.model.ResponseBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author tangyi
* @date 2019/3/30 14:40
*/
@RestController
// 动态刷新,修改配置后post请求/actuator/refresh
@RefreshScope
public class TestController {
@Value("${mobile.token}")
private String mobileToken;
@RequestMapping("/mobile/token")
public ResponseBean<String> mobileToken() {
return new ResponseBean<>(mobileToken);
}
}
package com.github.tangyi.auth.mapper;
import com.github.tangyi.auth.api.module.OauthClientDetails;
import com.github.tangyi.common.core.persistence.CrudMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* Oauth2客户端mapper
*
* @author tangyi
* @date 2019/3/30 16:39
*/
@Mapper
public interface OauthClientDetailsMapper extends CrudMapper<OauthClientDetails> {
}
package com.github.tangyi.auth.service;
import com.github.tangyi.auth.api.module.OauthClientDetails;
import com.github.tangyi.auth.mapper.OauthClientDetailsMapper;
import com.github.tangyi.common.core.service.CrudService;
import org.springframework.stereotype.Service;
/**
* Oauth2客户端Service
*
* @author tangyi
* @date 2019/3/30 16:48
*/
@Service
public class OauthClientDetailsService extends CrudService<OauthClientDetailsMapper, OauthClientDetails> {
}
<?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.github.tangyi.auth.mapper.OauthClientDetailsMapper">
<resultMap id="oauthClientResultMap" type="com.github.tangyi.auth.api.module.OauthClientDetails">
<id column="id" property="id"/>
<result column="client_id" property="clientId"/>
<result column="resource_ids" property="resourceIds"/>
<result column="client_secret" property="clientSecret"/>
<result column="scope" property="scope"/>
<result column="authorized_grant_types" property="authorizedGrantTypes"/>
<result column="web_server_redirect_uri" property="webServerRedirectUri"/>
<result column="authorities" property="authorities"/>
<result column="access_token_validity" property="accessTokenValidity"/>
<result column="refresh_token_validity" property="refreshTokenValidity"/>
<result column="additional_information" property="additionalInformation"/>
<result column="autoapprove" property="autoapprove"/>
<result column="creator" property="creator"/>
<result column="create_date" property="createDate"/>
<result column="modifier" property="modifier"/>
<result column="modify_date" property="modifyDate"/>
<result column="del_flag" property="delFlag"/>
<result column="application_code" property="applicationCode"/>
</resultMap>
<sql id="oauthClientColumns">
a.id as "id",
a.client_id,
a.resource_ids,
a.client_secret_plain_text,
a.client_secret,
a.scope,
a.authorized_grant_types,
a.web_server_redirect_uri,
a.authorities,
a.access_token_validity,
a.refresh_token_validity,
a.additional_information,
a.autoapprove,
a.creator,
a.create_date,
a.modifier,
a.modify_date,
a.del_flag,
a.application_code
</sql>
<!-- where 条件 -->
<sql id="whereColumnList">
<if test="clientId != null and clientId != ''">
and a.client_id like #{clientId}
</if>
</sql>
<select id="get" resultMap="oauthClientResultMap">
SELECT
<include refid="oauthClientColumns"/>
FROM oauth_client_details a
WHERE a.id = #{id} and a.del_flag = 0
</select>
<select id="findList" resultMap="oauthClientResultMap">
SELECT
<include refid="oauthClientColumns"/>
FROM oauth_client_details a
WHERE a.del_flag = 0
<include refid="whereColumnList"/>
ORDER BY CREATE_DATE DESC
</select>
<select id="findListById" resultMap="oauthClientResultMap">
SELECT
<include refid="oauthClientColumns"/>
FROM oauth_client_details a
WHERE a.id IN
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<insert id="insert">
INSERT INTO oauth_client_details (
id,
client_id,
resource_ids,
client_secret_plain_text,
client_secret,
scope,
authorized_grant_types,
web_server_redirect_uri,
authorities,
access_token_validity,
refresh_token_validity,
additional_information,
autoapprove,
creator,
create_date,
modifier,
modify_date,
del_flag,
application_code
) VALUES (
#{id},
#{clientId},
#{resourceIds},
#{clientSecretPlainText},
#{clientSecret},
#{scope},
#{authorizedGrantTypes},
#{webServerRedirectUri},
#{authorities},
#{accessTokenValidity},
#{refreshTokenValidity},
#{additionalInformation},
#{autoapprove},
#{creator},
#{createDate},
#{modifier},
#{modifyDate},
#{delFlag},
#{applicationCode}
)
</insert>
<update id="update">
UPDATE oauth_client_details SET
<if test="clientId != null">
client_id = #{clientId},
</if>
<if test="resourceIds != null">
resource_ids = #{resourceIds},
</if>
<if test="clientSecretPlainText != null">
client_secret_plain_text = #{clientSecretPlainText},
</if>
<if test="clientSecret != null">
client_secret = #{clientSecret},
</if>
<if test="scope != null">
scope = #{scope},
</if>
<if test="authorizedGrantTypes != null">
authorized_grant_types = #{authorizedGrantTypes},
</if>
<if test="webServerRedirectUri != null">
web_server_redirect_uri = #{webServerRedirectUri},
</if>
<if test="authorities != null">
authorities = #{authorities},
</if>
<if test="accessTokenValidity != null">
access_token_validity = #{accessTokenValidity},
</if>
<if test="refreshTokenValidity != null">
refresh_token_validity = #{refreshTokenValidity},
</if>
<if test="additionalInformation != null">
additional_information = #{additionalInformation},
</if>
<if test="autoapprove != null">
autoapprove = #{autoapprove},
</if>
<if test="delFlag != null">
del_flag = #{delFlag},
</if>
modifier = #{modifier},
modify_date = #{modifyDate}
WHERE id = #{id}
</update>
<delete id="delete">
UPDATE oauth_client_details SET
DEL_FLAG = 1
WHERE ID = #{id}
</delete>
<delete id="deleteAll">
UPDATE oauth_client_details SET
del_flag = 1
WHERE id in
<foreach item="item" index="index" collection="array" open="("
separator="," close=")"> #{item}
</foreach>
</delete>
</mapper>
......@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.tangyi</groupId>
<artifactId>spring-microservice-exam</artifactId>
<artifactId>service-api-impl</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>exam-service</artifactId>
......@@ -76,14 +76,12 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${driud.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- swagger -->
......
......@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
......@@ -15,6 +16,8 @@ import org.springframework.security.config.annotation.method.configuration.Enabl
@ComponentScan(basePackages = {"com.github.tangyi"})
@EnableGlobalMethodSecurity(prePostEnabled = true)
@EnableCircuitBreaker
// 动态刷新
@RefreshScope
public class ExamServiceApplication {
public static void main(String[] args) {
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.tangyi</groupId>
<artifactId>spring-microservice-exam</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>service-api-impl</artifactId>
<name>${project.artifactId}</name>
<description>api实现</description>
<modules>
<module>auth-service</module>
<module>user-service</module>
<module>exam-service</module>
</modules>
</project>
......@@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.tangyi</groupId>
<artifactId>spring-microservice-exam</artifactId>
<artifactId>service-api-impl</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>user-service</artifactId>
......@@ -64,28 +64,24 @@
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${driud.version}</version>
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--fastDfs-->
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
<version>${fastdfs-client.version}</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>com.github.axet</groupId>
<artifactId>kaptcha</artifactId>
<version>${kaptcha.version}</version>
</dependency>
<!-- swagger -->
......
......@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableAsync;
......
......@@ -47,8 +47,6 @@ import java.util.List;
@RequestMapping("/v1/attachment")
public class AttachmentController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(AttachmentController.class);
@Autowired
private AttachmentService attachmentService;
......
......@@ -31,8 +31,6 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("/v1/log")
public class LogController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(LogController.class);
@Autowired
private LogService logService;
......
......@@ -40,8 +40,6 @@ import java.util.*;
@RequestMapping("/v1/menu")
public class MenuController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(MenuController.class);
@Autowired
private MenuService menuService;
......
......@@ -42,8 +42,6 @@ import java.util.List;
@RequestMapping("/v1/role")
public class RoleController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(RoleController.class);
@Autowired
private RoleService roleService;
......
......@@ -49,8 +49,6 @@ import java.util.*;
@RequestMapping(value = "/v1/user")
public class UserController extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(UserController.class);
private static final PasswordEncoder encoder = new BCryptPasswordEncoder();
@Autowired
......
package com.github.tangyi.user.service;
import com.github.tangyi.common.core.constant.SecurityConstant;
import com.github.tangyi.common.core.constant.CommonConstant;
import com.github.tangyi.common.core.service.CrudService;
import com.github.tangyi.common.core.utils.IdGen;
import com.github.tangyi.common.core.utils.SysUtil;
import com.github.tangyi.common.core.vo.Role;
import com.github.tangyi.common.core.vo.UserVo;
import com.github.tangyi.common.security.constant.SecurityConstant;
import com.github.tangyi.common.security.utils.SecurityUtil;
import com.github.tangyi.user.api.dto.UserDto;
import com.github.tangyi.user.api.dto.UserInfoDto;
......@@ -189,7 +190,7 @@ public class UserService extends CrudService<UserMapper, User> {
* @date 2018/9/14 20:12
*/
public void saveImageCode(String random, String imageCode) {
redisTemplate.opsForValue().set(SecurityConstant.DEFAULT_CODE_KEY + random, imageCode, SecurityConstant.DEFAULT_IMAGE_EXPIRE, TimeUnit.SECONDS);
redisTemplate.opsForValue().set(CommonConstant.DEFAULT_CODE_KEY + random, imageCode, SecurityConstant.DEFAULT_IMAGE_EXPIRE, TimeUnit.SECONDS);
}
/**
......
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 驼峰转换 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
<!-- 延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
</settings>
<typeAliases>
<package name="com.tangyi.module"/>
</typeAliases>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.github.tangyi</groupId>
<artifactId>service-api</artifactId>
<version>2.0-SNAPSHOT</version>
</parent>
<artifactId>auth-api</artifactId>
<name>${project.artifactId}</name>
<description>授权服务api</description>
<dependencies>
<!-- common-core -->
<dependency>
<groupId>com.github.tangyi</groupId>
<artifactId>common-core</artifactId>
</dependency>
</dependencies>
</project>
package com.github.tangyi.auth.api.module;
import com.github.tangyi.common.core.persistence.BaseEntity;
/**
* OAuth2客户端信息
*
* @author tangyi
* @date 2019/3/30 16:35
*/
public class OauthClientDetails extends BaseEntity<OauthClientDetails> {
/**
* clientId
*/
private String clientId;
/**
* resource_ids
*/
private String resourceIds;
/**
* 密钥明文
*/
private String clientSecretPlainText;
/**
* 密钥密文
*/
private String clientSecret;
/**
* 授权范围
*/
private String scope;
/**
* 授权类型
*/
private String authorizedGrantTypes;
/**
* web_server_redirect_uri
*/
private String webServerRedirectUri;
/**
* authorities
*/
private String authorities;
/**
* access_token有效时间
*/
private String accessTokenValidity;
/**
* refresh_token有效时间
*/
private String refreshTokenValidity;
/**
* additional_information
*/
private String additionalInformation;
/**
* autoapprove
*/
private String autoapprove;
public String getClientId() {
return clientId;
}
public void setClientId(String clientId) {
this.clientId = clientId;
}
public String getResourceIds() {
return resourceIds;
}
public void setResourceIds(String resourceIds) {
this.resourceIds = resourceIds;
}
public String getClientSecret() {
return clientSecret;
}
public void setClientSecret(String clientSecret) {
this.clientSecret = clientSecret;
}
public String getScope() {
return scope;
}
public void setScope(String scope) {
this.scope = scope;
}
public String getAuthorizedGrantTypes() {
return authorizedGrantTypes;
}
public void setAuthorizedGrantTypes(String authorizedGrantTypes) {
this.authorizedGrantTypes = authorizedGrantTypes;
}
public String getWebServerRedirectUri() {
return webServerRedirectUri;
}
public void setWebServerRedirectUri(String webServerRedirectUri) {
this.webServerRedirectUri = webServerRedirectUri;
}
public String getAuthorities() {
return authorities;
}
public void setAuthorities(String authorities) {
this.authorities = authorities;
}
public String getAccessTokenValidity() {
return accessTokenValidity;
}
public void setAccessTokenValidity(String accessTokenValidity) {
this.accessTokenValidity = accessTokenValidity;
}
public String getRefreshTokenValidity() {
return refreshTokenValidity;
}
public void setRefreshTokenValidity(String refreshTokenValidity) {
this.refreshTokenValidity = refreshTokenValidity;
}
public String getAdditionalInformation() {
return additionalInformation;
}
public void setAdditionalInformation(String additionalInformation) {
this.additionalInformation = additionalInformation;
}
public String getAutoapprove() {
return autoapprove;
}
public void setAutoapprove(String autoapprove) {
this.autoapprove = autoapprove;
}
public String getClientSecretPlainText() {
return clientSecretPlainText;
}
public void setClientSecretPlainText(String clientSecretPlainText) {
this.clientSecretPlainText = clientSecretPlainText;
}
}
......@@ -15,5 +15,6 @@
<modules>
<module>user-api</module>
<module>exam-api</module>
<module>auth-api</module>
</modules>
</project>
......@@ -28,36 +28,71 @@ public class UserServiceClientFallbackImpl implements UserServiceClient {
private Throwable throwable;
/**
* 根据用户名查询用户信息
*
* @param username username
* @return UserVo
*/
@Override
public UserVo findUserByUsername(String username) {
logger.error("feign 查询用户信息失败:{},{}", username, throwable);
return null;
}
/**
* 查询当前登录的用户信息
*
* @return ResponseBean
*/
@Override
public ResponseBean<UserInfoDto> info() {
logger.error("feign 查询用户信息失败:{},{}", throwable);
return null;
}
/**
* 根据用户ID批量查询用户信息
*
* @param userVo userVo
* @return ResponseBean
*/
@Override
public ResponseBean<List<UserVo>> findUserById(@RequestBody UserVo userVo) {
logger.error("调用{}异常:{},{}", "findById", userVo, throwable);
return null;
}
/**
* 根据部门ID批量查询部门信息
*
* @param deptVo deptVo
* @return ResponseBean
*/
@Override
public ResponseBean<List<DeptVo>> findDeptById(@RequestBody DeptVo deptVo) {
logger.error("调用{}异常:{},{}", "findById", deptVo, throwable);
return null;
}
/**
* 根据附件ID删除附件
*
* @param id id
* @return ResponseBean
*/
@Override
public ResponseBean<Boolean> deleteAttachment(String id) {
logger.error("调用{}异常:{},{}", "delete", id, throwable);
return new ResponseBean<>(Boolean.FALSE);
}
/**
* 根据附件ID批量查询附件信息
*
* @param attachmentVo attachmentVo
* @return ResponseBean
*/
@Override
public ResponseBean<List<AttachmentVo>> findAttachmentById(AttachmentVo attachmentVo) {
logger.error("调用{}异常:{},{}", "findById", attachmentVo, throwable);
......@@ -67,7 +102,7 @@ public class UserServiceClientFallbackImpl implements UserServiceClient {
/**
* 保存日志
*
* @param log
* @param log log
* @return ResponseBean
*/
@Override
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment