314 Commits

Author SHA1 Message Date
mindskip
13ddda300e 数据库设计 2021-03-15 12:53:22 +08:00
mindskip
ece6e571f3 数据库设计 2021-03-12 12:32:54 +08:00
mindskip
9403199719 数据库设计 2021-03-11 13:04:04 +08:00
mindskip
583beb6448 数据库设计 2021-03-10 12:47:22 +08:00
mindskip
10d177d61d 文档更新 2021-03-05 13:21:11 +08:00
mindskip
2853357b8f 数据库设计 2021-03-04 12:39:47 +08:00
mindskip
5ef8bb1d9a 数据库设计 2021-03-03 12:52:29 +08:00
mindskip
01899d7e14 数据库设计 2021-03-02 13:11:27 +08:00
mindskip
9ebef8ec92 修复IE浏览器bug 2021-03-01 20:43:36 +08:00
mindskip
5217896e3d 数据库设计 2021-02-26 10:35:52 +08:00
mindskip
ec50d66c65 数据库设计 2021-02-25 10:01:56 +08:00
mindskip
ddf742e4d9 QQ交流群八:902855996 2021-02-24 09:19:04 +08:00
mindskip
2d1860f052 数据库设计 2021-02-22 09:55:07 +08:00
mindskip
0c4fd32a77 数据库设计 2021-02-20 13:38:39 +08:00
mindskip
038c6e4637 数据库设计 2021-02-19 09:53:55 +08:00
mindskip
70ecf0aed8 数据库设计 2021-02-18 09:26:06 +08:00
mindskip
7b549f3079 文档更新 2021-02-02 09:16:11 +08:00
mindskip
45ef20468b 1.docker镜像更新
2.教程地址更新
2021-02-01 10:01:11 +08:00
mindskip
bb85feb549 update docs/README.md 2021-01-29 09:14:39 +08:00
mindskip
81adf94725 v3.2.0 2021-01-22 10:36:32 +08:00
mindskip
24d82e4772 v3.1.0 2021-01-22 10:34:11 +08:00
alvis
64a49ad0ee Merge pull request #50 from mindskip/alvis
移除lombok
2021-01-22 09:37:39 +08:00
alvis
4ee3c69a4a 移除lombok 2021-01-22 09:35:34 +08:00
alvis
af0c1b82b1 Merge pull request #49 from mindskip/alvis
优化
2021-01-21 09:33:17 +08:00
alvis
6fbf2cc6c0 优化 2021-01-21 09:31:34 +08:00
alvis
861d5d849b Merge pull request #48 from mindskip/alvis
优化
2021-01-20 08:57:17 +08:00
alvis
b650bae481 优化 2021-01-20 08:56:22 +08:00
alvis
ca12f4a83e Merge pull request #47 from mindskip/alvis
bug fix
2021-01-19 09:35:21 +08:00
alvis
b8bfbbe71d bug fix 2021-01-19 09:34:05 +08:00
alvis
33372e5c1e Merge pull request #46 from mindskip/alvis
优化
2021-01-18 10:07:22 +08:00
alvis
03192bf0fd 优化 2021-01-18 10:06:15 +08:00
思维跳跃科技
193ccc9712 Merge pull request #45 from mindskip/mindskip
文档更新
2021-01-15 12:59:44 +08:00
mindskip
85860fb80a update 2021-01-15 12:58:15 +08:00
mindskip
1c2ee04d8c Merge branch 'master' of github.com:mindskip/xzs-mysql 2021-01-15 11:47:24 +08:00
思维跳跃科技
7c4ee0a1e8 !51 sync
Merge pull request !51 from 思维跳跃科技/other
2021-01-15 11:43:50 +08:00
思维跳跃科技
13f2f54e2a sync 2021-01-15 11:43:37 +08:00
mindskip
ba63ef6d15 sync 2021-01-15 11:39:44 +08:00
alvis
79fe372f80 !49 优化
Merge pull request !49 from alvis/alvis
2021-01-15 09:18:54 +08:00
alvis
5e0b942d3f Merge pull request #44 from mindskip/alvis
优化
2021-01-15 09:17:44 +08:00
alvis
80cba65fc3 优化 2021-01-15 09:16:14 +08:00
alvis
fc066ade71 优化 2021-01-15 09:16:12 +08:00
alvis
c29e36ca1f 优化 2021-01-15 09:13:40 +08:00
alvis
71359d813c 优化 2021-01-15 09:13:33 +08:00
alvis
4153660620 Merge pull request #43 from mindskip/alvis
bug fix
2021-01-14 08:55:15 +08:00
alvis
e484e2142a !48 bug fix
Merge pull request !48 from alvis/alvis
2021-01-14 08:53:20 +08:00
alvis
3b38399d32 bug fix 2021-01-14 08:43:41 +08:00
alvis
10b01a2e23 bug fix 2021-01-14 08:43:28 +08:00
czm
01eafa8efc admin update 2021-01-13 20:51:59 +08:00
czm
eddbccaf23 admin update 2021-01-13 11:38:14 +08:00
alvis
4290a53654 Merge pull request #42 from mindskip/alvis
优化
2021-01-13 09:17:20 +08:00
alvis
eb00e2b31e !47 优化
Merge pull request !47 from alvis/alvis
2021-01-13 09:17:12 +08:00
alvis
4830dad754 优化 2021-01-13 09:16:31 +08:00
alvis
ecbe67e666 优化 2021-01-13 09:16:29 +08:00
czm
4916845156 vue admin update 2021-01-12 11:11:16 +08:00
思维跳跃科技
826351981c Merge pull request #41 from mindskip/mindskip
文档更新
2021-01-12 09:27:35 +08:00
思维跳跃科技
e2382b3cec !46 文档更新
Merge pull request !46 from 思维跳跃科技/mindskip
2021-01-12 09:27:04 +08:00
mindskip
8b608641b0 更新 2021-01-12 09:25:11 +08:00
mindskip
fa1810ebd7 更新 2021-01-12 09:25:05 +08:00
alvis
9d46e6eb2b Merge pull request #40 from mindskip/alvis
优化
2021-01-11 09:19:31 +08:00
alvis
761eb1853f !45 优化
Merge pull request !45 from alvis/alvis
2021-01-11 09:19:12 +08:00
alvis
61adcc0b32 优化 2021-01-11 09:18:12 +08:00
alvis
cf0b0dc077 优化 2021-01-11 09:18:05 +08:00
jimmy
d856c7c821 Merge branch 'master' of https://gitee.com/buddytu/xzs-mysql 2021-01-10 18:02:11 +08:00
jimmy
85b275c143 Update error msg :by jimmy 2021-01-10 18:01:54 +08:00
czm
a0eec79b25 vue admin update 2021-01-10 17:35:11 +08:00
jimmy
0d038bd0fe Add en-locale :by jimmy 2021-01-10 17:10:51 +08:00
jimmy
7010aa5658 Update wording :by jimmy 2021-01-09 23:22:46 +08:00
思维跳跃科技
4b9ea7a1de Merge pull request #39 from mindskip/mindskip
Mindskip
2021-01-08 08:25:21 +08:00
思维跳跃科技
568367d2e7 !44 QQ交流群七:873533715
Merge pull request !44 from 思维跳跃科技/mindskip
2021-01-08 08:25:05 +08:00
mindskip
34f7f2bd62 QQ交流群七:873533715 2021-01-08 08:23:48 +08:00
mindskip
9e337a6692 QQ交流群七:873533715 2021-01-08 08:23:45 +08:00
alvis
2170658930 Merge pull request #38 from mindskip/alvis
优化
2021-01-08 08:22:07 +08:00
alvis
da2451257f !43 优化
Merge pull request !43 from alvis/alvis
2021-01-08 08:21:46 +08:00
alvis
7ca9c45855 优化 2021-01-08 08:21:14 +08:00
alvis
a1cac655ce 优化 2021-01-08 08:20:22 +08:00
alvis
e4af04df97 Merge pull request #37 from mindskip/alvis
优化
2021-01-07 11:04:39 +08:00
alvis
7ff9a9fe50 !42 优化
Merge pull request !42 from alvis/alvis
2021-01-07 11:04:28 +08:00
alvis
01f9ff0f80 优化 2021-01-07 11:03:11 +08:00
alvis
576c47a90d 优化 2021-01-07 11:02:55 +08:00
czm
a5ba2d2ad9 vue admin update 2021-01-06 23:00:13 +08:00
KukuKeng
bb2f60d22b update static file 2021-01-06 22:48:35 +08:00
KukuKeng
7e62b47795 update the static file 2021-01-06 22:29:10 +08:00
jimmy
9821987e2d Merge branch 'master' of https://gitee.com/buddytu/xzs-mysql 2021-01-06 22:24:06 +08:00
jimmy
c6f6ed0cd6 Translate into English :by jimmy 2021-01-06 22:23:32 +08:00
czm
6252f2154c Merge remote-tracking branch 'origin/master' 2021-01-06 22:06:14 +08:00
czm
487e184a9c question random update 2021-01-06 22:05:51 +08:00
KukuKeng
636963cfd1 update the static file 2021-01-06 21:58:54 +08:00
alvis
ea53348511 Merge pull request #36 from mindskip/alvis
优化
2021-01-06 10:40:08 +08:00
alvis
3399a4ff11 !41 优化
Merge pull request !41 from alvis/alvis
2021-01-06 10:39:47 +08:00
alvis
9241c4cae5 优化 2021-01-06 10:39:13 +08:00
alvis
4de5327e87 优化 2021-01-06 10:39:11 +08:00
czm
1a3ecaf9e0 question random update 2021-01-06 00:39:18 +08:00
alvis
9dd5329ef0 Merge pull request #35 from mindskip/alvis
优化
2021-01-05 10:21:42 +08:00
alvis
e3b5a4463f !40 优化
Merge pull request !40 from alvis/alvis
2021-01-05 10:21:35 +08:00
alvis
75ffa05d65 优化 2021-01-05 10:20:25 +08:00
alvis
47488d6bf5 优化 2021-01-05 10:20:19 +08:00
alvis
44ac257c3b Merge pull request #34 from mindskip/alvis
移除lombok
2021-01-04 15:50:15 +08:00
alvis
2543014ae2 !39 移除lombok
Merge pull request !39 from alvis/alvis
2021-01-04 15:49:25 +08:00
alvis
cd8f97aab3 移除lombok 2021-01-04 15:47:33 +08:00
alvis
ac7702ad20 移除lombok 2021-01-04 15:47:08 +08:00
KukuKeng
a5a6b40b5e update student static 2020-12-31 13:14:18 +08:00
alvis
24e59e302a Merge pull request #33 from mindskip/alvis
bug fix
2020-12-31 09:54:16 +08:00
alvis
1220f02793 !38 bug fix
Merge pull request !38 from alvis/alvis
2020-12-31 09:53:15 +08:00
alvis
d635029b00 bug fix 2020-12-31 09:52:35 +08:00
alvis
a4633b809c bug fix 2020-12-31 09:52:23 +08:00
KukuKeng
f9f2d5b956 update student static 2020-12-30 22:34:46 +08:00
KukuKeng
0195b0259c update student static 2020-12-30 18:04:59 +08:00
wushaofeng
09bd9583c2 Finish all-By Ternece 2020-12-30 17:35:13 +08:00
wushaofeng
7f96ccca8b Merge remote-tracking branch 'origin/master' 2020-12-30 17:18:16 +08:00
wushaofeng
cf41c0e75f 完成筛选页面--By Ternece 2020-12-30 17:17:52 +08:00
czm
4200a7c5de admin page update 2020-12-30 17:09:04 +08:00
czm
307523b3be Merge remote-tracking branch 'origin/master' 2020-12-30 16:49:52 +08:00
czm
e3fd87ce21 admin page update 2020-12-30 16:49:37 +08:00
wushaofeng
6ab33b7c64 Merge remote-tracking branch 'origin/master' 2020-12-30 16:39:53 +08:00
wushaofeng
25371bad43 完成试卷生成的方法 final--By Ternece 2020-12-30 16:39:28 +08:00
czm
8be8ca7cb4 admin page and log update 2020-12-30 15:06:48 +08:00
czm
20f6db1dc6 Merge remote-tracking branch 'origin/master' 2020-12-30 14:42:34 +08:00
czm
fa0eb26d9a admin page and log update 2020-12-30 14:41:49 +08:00
alvis
299cdd1770 Merge pull request #32 from mindskip/alvis
bug fix
2020-12-30 09:46:50 +08:00
alvis
9326ca716b !37 bug fix
Merge pull request !37 from alvis/alvis
2020-12-30 09:45:53 +08:00
alvis
6d2ab99fa3 Merge branch 'alvis' of github.com:mindskip/xzs-mysql into alvis 2020-12-30 09:44:06 +08:00
alvis
898159ab3a Merge branch 'alvis' of gitee.com:mindskip/xzs-mysql into alvis 2020-12-30 09:43:24 +08:00
alvis
2ecbee9561 bug fix 2020-12-30 09:41:59 +08:00
alvis
8ad34b997e bug fix 2020-12-30 09:41:50 +08:00
思维跳跃科技
004a3f5668 !36 sync
Merge pull request !36 from 思维跳跃科技/master
2020-12-29 19:04:58 +08:00
思维跳跃科技
095ba9f694 !35 sync
Merge pull request !35 from 思维跳跃科技/master
2020-12-29 19:04:36 +08:00
思维跳跃科技
8f227774ea Merge pull request #31 from mindskip/master
sync
2020-12-29 19:03:05 +08:00
思维跳跃科技
b9efae5595 Merge pull request #30 from mindskip/master
update
2020-12-29 19:00:29 +08:00
mindskip
951f44a105 Merge branch 'master' of github.com:mindskip/xzs-mysql
# Conflicts:
#	README.md
2020-12-29 18:58:06 +08:00
思维跳跃科技
ce22c048de !34 文档更新
Merge pull request !34 from 思维跳跃科技/skill
2020-12-29 18:51:11 +08:00
mindskip
4b87315419 revert 2020-12-29 18:47:33 +08:00
思维跳跃科技
f78f7bf5f4 !33 分支同步
Merge pull request !33 from 思维跳跃科技/master
2020-12-29 18:41:50 +08:00
wushaofeng
21ee444e3f 完成试卷生成的方法 test3--By Ternece 2020-12-29 17:34:50 +08:00
wushaofeng
57c275e242 完成试卷生成的方法 test2--By Ternece 2020-12-29 17:17:23 +08:00
wushaofeng
e4b01330ae 完成试卷生成的方法--By Ternece 2020-12-29 16:42:57 +08:00
mindskip
65d0169aa7 revert 2020-12-29 16:16:39 +08:00
mindskip
60882a1d47 skill 2020-12-29 16:09:36 +08:00
czm
78435af514 admin question and static update 2020-12-29 14:27:24 +08:00
czm
9b30d479fd admin and student static update 2020-12-29 11:36:06 +08:00
czm
5b1e48e301 admin update 2020-12-29 10:05:18 +08:00
czm
27fe05a636 Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 18:01:07 +08:00
jimmy
689da6d2ac Change industry api: by jimmy 2020-12-28 15:37:05 +08:00
czm
d3e39b3d6c Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 15:12:36 +08:00
jimmy
8d5c1a616f Update url :by jimmy 2020-12-28 15:11:57 +08:00
czm
6b4fc9ed42 Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 15:09:22 +08:00
jimmy
1f03b484d1 Update api url: by jimmy 2020-12-28 15:05:04 +08:00
czm
5b54371cfc Merge remote-tracking branch 'remotes/origin/feature/tek-system-ui' into skill 2020-12-28 14:36:08 +08:00
joycewsx
aae5223ad2 add industry page 2020-12-28 10:49:34 +08:00
思维跳跃科技
233061fae4 Merge pull request #29 from mindskip/mindskip
文档更新
2020-12-28 09:42:23 +08:00
思维跳跃科技
121b0b4dac !30 文档更新
Merge pull request !30 from 思维跳跃科技/mindskip
2020-12-28 09:42:11 +08:00
mindskip
aad4a4ac13 文档更新 2020-12-28 09:40:29 +08:00
mindskip
fc3fc344a4 文档更新 2020-12-28 09:40:21 +08:00
思维跳跃科技
5195975a37 Merge pull request #28 from mindskip/mindskip
文档更新
2020-12-26 14:10:25 +08:00
思维跳跃科技
87824ad22f !29 文档更新
Merge pull request !29 from 思维跳跃科技/mindskip
2020-12-26 14:08:04 +08:00
mindskip
250974ca58 文档更新 2020-12-26 14:05:51 +08:00
mindskip
6b22ad9eee 文档更新 2020-12-26 14:05:45 +08:00
mindskip
a4977f80b3 文档更新 2020-12-26 13:59:51 +08:00
mindskip
868ec844d1 文档更新 2020-12-26 13:59:42 +08:00
Kevin Cui
cc72c55751 Merge remote-tracking branch 'origin/master' 2020-12-25 14:46:53 +08:00
Kevin Cui
f0c861c796 拆表及行业,技能添加 by kevin.cui 2020-12-25 14:46:28 +08:00
buddytu
0108fdb36b !2 change file
Merge pull request !2 from JoyceWei/feature/tek-system-ui
2020-12-25 14:37:15 +08:00
joycewsx
d9c8047cf8 change file 2020-12-25 14:34:47 +08:00
buddytu
7e7f313aed !1 change wording
Merge pull request !1 from JoyceWei/feature/tek-system-ui
2020-12-25 14:11:29 +08:00
Joyce-wei
4ead559ae2 edit wording & change copyright 2020-12-25 13:50:56 +08:00
alvis
97fec2b58b Merge pull request #27 from mindskip/alvis
bug fix
2020-12-25 09:31:29 +08:00
alvis
da10e9d1a8 !28 bug fix
Merge pull request !28 from alvis/alvis
2020-12-25 09:30:49 +08:00
alvis
6577201387 bug fix 2020-12-25 09:29:38 +08:00
alvis
4f4ee30cff bug fix 2020-12-25 09:29:31 +08:00
Kevin Cui
513bf28f67 拆表及行业,技能添加 by kevin.cui 2020-12-24 17:09:38 +08:00
Kevin Cui
a28e6dcd25 拆表及行业,技能添加 by kevin.cui 2020-12-24 17:06:42 +08:00
buddytu
fc58997116 upload sql file 2020-12-23 17:42:49 +08:00
思维跳跃科技
eb470320fa Merge pull request #26 from mindskip/mindskip
文档更新
2020-12-23 09:24:09 +08:00
思维跳跃科技
4b4350b1b9 !27 文档更新
Merge pull request !27 from 思维跳跃科技/mindskip
2020-12-23 09:23:33 +08:00
mindskip
2cfa14bc51 文档更新 2020-12-23 09:20:25 +08:00
mindskip
4f4cb35490 文档更新 2020-12-23 09:20:07 +08:00
思维跳跃科技
6db2b55225 Merge pull request #25 from mindskip/mindskip
文档更新
2020-12-22 10:13:03 +08:00
思维跳跃科技
c0e918ab0e !26 文档更新
Merge pull request !26 from 思维跳跃科技/mindskip
2020-12-22 10:12:06 +08:00
mindskip
e9903beecc 文档更新 2020-12-22 10:10:38 +08:00
mindskip
52c1832f99 文档更新 2020-12-22 10:10:30 +08:00
思维跳跃科技
f8723cc8ff Merge pull request #24 from mindskip/mindskip
文档更新
2020-12-21 11:54:34 +08:00
思维跳跃科技
6cdf1403e8 !25 文档更新
Merge pull request !25 from 思维跳跃科技/mindskip
2020-12-21 11:53:09 +08:00
mindskip
2a6c057ec1 文档更新 2020-12-21 11:52:18 +08:00
mindskip
335ab745ca 文档更新 2020-12-21 11:47:06 +08:00
思维跳跃科技
cebd237b98 Merge pull request #23 from mindskip/mindskip
文档更新
2020-12-21 11:43:24 +08:00
思维跳跃科技
dcbdfdbbce !24 文档更新
Merge pull request !24 from 思维跳跃科技/mindskip
2020-12-21 11:41:52 +08:00
mindskip
714e59b605 文档更新 2020-12-21 11:32:13 +08:00
mindskip
d096dc656f 文档更新 2020-12-21 11:31:39 +08:00
alvis
1a17d36cce Merge pull request #22 from mindskip/alvis
bug fix
2020-12-21 09:53:24 +08:00
alvis
c739f2fbed !23 bug fix
Merge pull request !23 from alvis/alvis
2020-12-21 09:51:50 +08:00
alvis
9bb4a3dae7 bug fix 2020-12-21 09:49:33 +08:00
alvis
96dac789eb bug fix 2020-12-21 09:49:23 +08:00
alvis
6a0c620f6e Merge pull request #21 from mindskip/alvis
v3.1.0
2020-12-18 09:51:00 +08:00
alvis
947c15f404 !22 v3.1.0
Merge pull request !22 from alvis/alvis
2020-12-18 09:50:49 +08:00
alvis
071919defd v3.1.0 2020-12-18 09:49:32 +08:00
alvis
cd575ebc3f v3.1.0 2020-12-18 09:48:37 +08:00
思维跳跃科技
beafc51393 Merge pull request #20 from mindskip/mindskip
文档更新
2020-12-17 13:34:57 +08:00
思维跳跃科技
6da3ef4c5b !21 文档更新
Merge pull request !21 from 思维跳跃科技/mindskip
2020-12-17 13:34:29 +08:00
mindskip
95f40b903f 文档更新 2020-12-17 13:33:28 +08:00
mindskip
3e706b361a 文档更新 2020-12-17 13:33:20 +08:00
思维跳跃科技
c8c47607f4 Merge pull request #19 from mindskip/mindskip
教程修订
2020-12-16 10:10:46 +08:00
思维跳跃科技
cbe91187e6 !20 教程修订
Merge pull request !20 from 思维跳跃科技/mindskip
2020-12-16 10:10:09 +08:00
mindskip
8e79a71b1f 教程修订 2020-12-16 10:08:50 +08:00
mindskip
75eea70d6f 教程修订 2020-12-16 10:08:33 +08:00
alvis
9cb23a94a7 Merge pull request #18 from mindskip/alvis
bug fix
2020-12-15 09:23:42 +08:00
alvis
ed8ada2ecc !19 bug fix
Merge pull request !19 from alvis/alvis
2020-12-15 09:21:59 +08:00
alvis
6794b1135c bug fix 2020-12-15 09:21:29 +08:00
alvis
05922d6484 bug fix 2020-12-15 09:21:14 +08:00
alvis
09f6a81797 !18 bug修复
Merge pull request !18 from alvis/alvis
2020-12-14 09:14:50 +08:00
alvis
30cf0c06fc Merge pull request #17 from mindskip/alvis
bug fix
2020-12-14 09:14:42 +08:00
alvis
c68fc57e55 bug fix 2020-12-14 09:13:38 +08:00
alvis
b6bcff27c0 bug fix 2020-12-14 09:13:18 +08:00
alvis
01d27afdde Merge pull request #16 from mindskip/alvis
bug修复
2020-12-11 11:03:48 +08:00
alvis
072a27c5b3 !17 bug修复
Merge pull request !17 from alvis/alvis
2020-12-11 11:03:25 +08:00
alvis
c885a0e60b bug修复 2020-12-11 11:02:27 +08:00
alvis
a29aaed59c bug修复 2020-12-11 11:02:10 +08:00
alvis
dd9590ea84 Merge pull request #15 from mindskip/alvis
日期bug修复
2020-12-10 10:15:23 +08:00
alvis
efccda92ea !16 日期bug修复
Merge pull request !16 from alvis/alvis
2020-12-10 10:14:56 +08:00
alvis
3d25cba611 日期bug修复 2020-12-10 10:13:42 +08:00
alvis
ffd4f03f04 日期bug修复 2020-12-10 10:13:12 +08:00
alvis
b27f525152 !15 修复日期选择bug
Merge pull request !15 from alvis/alvis
2020-12-09 10:04:34 +08:00
alvis
d8c583b5a6 Merge pull request #14 from mindskip/alvis
修复日期选择bug
2020-12-09 10:04:30 +08:00
alvis
895f6c81c8 修复日期选择bug 2020-12-09 10:03:09 +08:00
alvis
4661a5aa5c 修复日期选择bug 2020-12-09 10:02:43 +08:00
alvis
53512232be Merge pull request #13 from mindskip/alvis
bug修复
2020-12-08 09:43:26 +08:00
alvis
04a5cba4f1 !14 bug修复
Merge pull request !14 from alvis/alvis
2020-12-08 09:40:36 +08:00
alvis
16f476e84f bug修复 2020-12-08 09:39:44 +08:00
alvis
7de7784428 bug修复 2020-12-08 09:38:23 +08:00
思维跳跃科技
05fb737bf4 Merge pull request #12 from mindskip/mindskip
教程更新
2020-12-04 10:02:26 +08:00
思维跳跃科技
d812d2a928 !13 教程更新
Merge pull request !13 from 思维跳跃科技/mindskip
2020-12-04 10:01:34 +08:00
mindskip
edeeeb06c1 教程更新 2020-12-04 10:00:16 +08:00
mindskip
89e408ce90 教程更新 2020-12-04 10:00:11 +08:00
思维跳跃科技
1d9d9d057d Merge pull request #11 from mindskip/mindskip
文档更新
2020-12-04 09:37:37 +08:00
思维跳跃科技
489faeda9a !12 教程更新
Merge pull request !12 from 思维跳跃科技/mindskip
2020-12-04 09:36:24 +08:00
mindskip
039a824302 文档更新 2020-12-03 10:30:33 +08:00
mindskip
fed4d3aa84 文档更新 2020-12-03 10:30:09 +08:00
思维跳跃科技
c1a915d8c5 Merge pull request #10 from mindskip/mindskip
教程更新
2020-12-03 10:26:35 +08:00
思维跳跃科技
475c822992 Merge pull request #9 from mindskip/alvis
bug修复
2020-12-03 10:26:25 +08:00
思维跳跃科技
4d1d45f85f !11 教程更新
Merge pull request !11 from 思维跳跃科技/mindskip
2020-12-03 10:24:59 +08:00
思维跳跃科技
129b5bea16 !10 bug修复
Merge pull request !10 from alvis/alvis
2020-12-03 10:24:53 +08:00
mindskip
9f32af9dfe 教程更新 2020-12-03 10:22:17 +08:00
mindskip
799f12bbf1 教程更新 2020-12-03 10:21:04 +08:00
alvis
b587430e3b bug修复 2020-12-03 10:09:24 +08:00
alvis
e81dc80a57 bug修复 2020-12-03 10:09:01 +08:00
alvis
945af9de76 Merge pull request #8 from mindskip/alvis
bug修复
2020-12-02 09:54:31 +08:00
alvis
c15c981254 !9 bug修复
Merge pull request !9 from alvis/alvis
2020-12-02 09:54:12 +08:00
alvis
879f0ab05e bug修复 2020-12-02 09:53:23 +08:00
alvis
ec2b7d1a0a bug修复 2020-12-02 09:53:01 +08:00
alvis
40ecab5a08 Merge pull request #7 from mindskip/alvis
主题切换
2020-12-01 09:17:59 +08:00
alvis
5f726d9dc6 !8 主题切换
Merge pull request !8 from alvis/alvis
2020-12-01 09:17:54 +08:00
alvis
945fe04b15 主题切换 2020-12-01 09:16:55 +08:00
alvis
db79588ca5 主题切换 2020-12-01 09:16:27 +08:00
alvis
c181e74ae5 !7 bug修复 缓存优化
Merge pull request !7 from alvis/alvis
2020-11-30 09:01:05 +08:00
alvis
50a41fb154 Merge pull request #6 from mindskip/alvis
bug修复、缓存优化
2020-11-30 08:58:59 +08:00
alvis
30a85560ab bug修复、缓存优化 2020-11-30 08:58:46 +08:00
alvis
18b5b2ccf7 bug修复、缓存优化 2020-11-30 08:58:07 +08:00
alvis
5b79ff5cd3 Merge pull request #5 from mindskip/alvis
bug修复
2020-11-27 10:56:05 +08:00
alvis
e714443e8d !6 bug修复
Merge pull request !6 from alvis/alvis
2020-11-27 10:55:38 +08:00
alvis
0cb5f1c107 bug修复 2020-11-27 10:54:51 +08:00
alvis
36e885ffde bug修复 2020-11-27 10:54:13 +08:00
mindskip
e9ceca7f2d Merge branch 'master' of gitee.com:mindskip/xzs-mysql 2020-11-26 11:59:32 +08:00
mindskip
6fb0f49cb0 update README.md 2020-11-26 11:58:20 +08:00
alvis
96dd9d77f9 Merge pull request #4 from mindskip/alvis
bug fix
2020-11-26 10:00:39 +08:00
alvis
ddf41b5307 !5 bug fix
Merge pull request !5 from alvis/alvis
2020-11-26 09:50:52 +08:00
alvis
9fb56f7b08 bug fix 2020-11-26 09:49:24 +08:00
alvis
6cc0613668 bug fix 2020-11-26 09:48:39 +08:00
alvis
6fab2ea2cd Merge pull request #2 from mindskip/alvis
组件升级:
2020-11-25 11:30:52 +08:00
alvis
dd1a47344a !3 组件升级 bug修复
Merge pull request !3 from alvis/alvis
2020-11-25 11:27:56 +08:00
alvis
5a99fe23d8 组件升级:
+ @vue/cli-service@4.5.9
+ @vue/cli-plugin-router@4.5.9
+ @vue/cli-plugin-eslint@4.5.9
+ @vue/cli-plugin-babel@4.5.9
+ @vue/cli-plugin-vuex@4.5.9

bug 修复:
重置
2020-11-25 11:24:23 +08:00
alvis
2a6b3bd909 组件升级:
+ @vue/cli-service@4.5.9
+ @vue/cli-plugin-router@4.5.9
+ @vue/cli-plugin-eslint@4.5.9
+ @vue/cli-plugin-babel@4.5.9
+ @vue/cli-plugin-vuex@4.5.9

bug 修复:
重置
2020-11-25 11:23:30 +08:00
alvis
e8272a723e Merge pull request #1 from mindskip/alvis
bug 修复
2020-11-24 11:33:22 +08:00
alvis
2fc25ad943 bug 修复 2020-11-24 11:31:23 +08:00
思维跳跃科技
25bf2959f0 !2 bug修复
Merge pull request !2 from alvis/alvis
2020-11-24 10:58:25 +08:00
alvis
f1dc6e77af bug修复 2020-11-24 10:52:18 +08:00
mindskip
e53c08839f v3.0.8 2020-11-23 10:52:40 +08:00
mindskip
adb674d5ed Merge branch 'master' of gitee.com:mindskip/xzs-mysql 2020-11-23 10:26:14 +08:00
mindskip
1bcd1e25d0 学之思交流群⑥:593529956 2020-11-23 10:24:54 +08:00
alvis
4ee37785c2 remove useless code 2020-11-22 13:32:37 +08:00
mindskip
15ce5c73cd v3.0.8 2020-11-21 14:22:39 +08:00
mindskip
423ca88806 文档更新 2020-11-20 08:45:05 +08:00
mindskip
a8df81aad4 docker 2020-11-19 09:22:12 +08:00
mindskip
29154803b0 docker部署 2020-11-18 09:51:55 +08:00
mindskip
7101bad7fe docker部署 2020-11-18 09:41:57 +08:00
mindskip
7fb56a99ae 支持docker部署 2020-11-18 09:37:25 +08:00
mindskip
c6fc18483d 部署文档更新 2020-11-17 09:05:27 +08:00
mindskip
d0c8525cbf update 2020-11-16 11:20:56 +08:00
mindskip
e0109cc05e update README.md 2020-11-16 09:37:54 +08:00
mindskip
1bfea8deb8 开发部署教程 2020-11-13 09:22:47 +08:00
mindskip
92bc3e8d6a 组件升级 2020-11-12 09:30:30 +08:00
mindskip
10fe1918d2 开发部署文档 2020-11-11 13:09:20 +08:00
mindskip
db304e38b3 开发部署文档 2020-11-10 09:56:03 +08:00
mindskip
3ade19fcdc 开发、部署教程 2020-11-09 08:27:36 +08:00
mindskip
d3f95c4d46 组件升级 2020-11-06 09:25:58 +08:00
mindskip
ad30c8bf3c 部署教程 2020-11-05 09:35:20 +08:00
mindskip
0260e6c3cb 教程更新 2020-11-04 09:24:30 +08:00
mindskip
fdc3ad80b0 维多多培训考试系统:https://www.mindskip.net/wdd.html 2020-11-03 09:40:02 +08:00
mindskip
0f37f31c43 update README.md 2020-11-02 09:03:52 +08:00
mindskip
e7785d992d update README.md 2020-10-30 09:32:12 +08:00
mindskip
4d2b89e112 update README.md 2020-10-29 09:35:51 +08:00
mindskip
7a296b6a08 update README.md 2020-10-28 10:51:25 +08:00
mindskip
fd74fa76a9 update README.md 2020-10-27 09:13:58 +08:00
mindskip
a78927471d update README.md 2020-10-26 09:05:50 +08:00
mindskip
79a4c4df05 中国开源项目评选地址: https://www.oschina.net/p/alvis-yu-exam 2020-10-23 10:30:31 +08:00
mindskip
83297d9cfc update README.md 2020-10-22 10:05:55 +08:00
mindskip
de874519d3 update README.md 2020-10-21 09:07:57 +08:00
mindskip
b6eddc1dbe 组件更新 2020-10-19 09:08:58 +08:00
mindskip
3e5fada769 update README.md 2020-10-14 10:05:50 +08:00
mindskip
94f625f47b update 2020-10-12 20:00:36 +08:00
mindskip
8f4f2c78e8 update 2020-10-12 08:58:44 +08:00
mindskip
6b62071d05 update docs/README.md 2020-10-09 09:46:08 +08:00
mindskip
caa5f773d8 update doc 2020-09-27 21:08:40 +08:00
mindskip
667db6bac8 docs 2020-09-24 09:55:31 +08:00
mindskip
6f79d3b2e8 组件升级 2020-09-20 21:00:44 +08:00
mindskip
6462e586c8 update 2020-09-13 21:34:07 +08:00
mindskip
3b069128c6 bug fix 2020-09-07 10:32:30 +08:00
324 changed files with 8369 additions and 3270 deletions

6
.gitattributes vendored
View File

@@ -1,2 +1,4 @@
*.js linguist-language=java
*.css linguist-language=java
*.js linguist-language=javascript
*.css linguist-language=css
*.java linguist-language=java
*.vue linguist-language=vue

4
.gitignore vendored
View File

@@ -11,7 +11,7 @@ target/
.project
.classpath
# idea ignore
# idea ignore
.idea/
*.ipr
*.iml
@@ -26,7 +26,7 @@ logs/
*.patch
*.tmp
# system ignore
# system ignore
.DS_Store
Thumbs.db

View File

@@ -1,5 +1,5 @@
GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies

114
README.md
View File

@@ -1,43 +1,62 @@
# 学之思在线考试系统
<p></p>
<p></p>
### 项目介绍
学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。目前支持web端和微信小程序能覆盖到pc机和手机等设备。
<p align="center">
<a href="https://www.mindskip.net" target="_blank">
<img src="doc/image/logo/1.png" height="80"/>
<a/>
</p>
<div align="center">
[![Gitee star](https://gitee.com/mindskip/xzs-mysql/badge/star.svg?theme=gitee)](https://gitee.com/mindskip/xzs-mysql)
[![Gitee fork](https://gitee.com/mindskip/xzs-mysql/badge/fork.svg?theme=gitee)](https://gitee.com/mindskip/xzs-mysql)
[![Github stars](https://img.shields.io/github/stars/mindskip/xzs-mysql?logo=github)](https://github.com/mindskip/xzs-mysql)
[![Github forks](https://img.shields.io/github/forks/mindskip/xzs-mysql?logo=github)](https://github.com/mindskip/xzs-mysql)
[![Github license](https://img.shields.io/badge/license-AGPL-yellow)](https://gitee.com/mindskip/xzs-mysql/blob/master/LICENSE)
</div>
# 学之思在线考试系统 - Mysql版
## 项目介绍
学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序能覆盖到pc机和手机等设备。
支持多种部署方式集成部署、前后端分离部署、docker部署。
### 开源版使用须知
* 仅用个人学习,商用请购买授权 [http://www.mindskip.net/buy.html](http://www.mindskip.net/buy.html)
* 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负
* 仅用个人学习
* 禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负
### 演示地址
* 官网:[http://www.mindskip.net](http://www.mindskip.net)
* 学之思[http://www.mindskip.net/xzs.html](http://www.mindskip.net/xzs.html)
*多多[http://www.mindskip.net/xdd.html](http://www.mindskip.net/xdd.html)
* 思多多:[http://www.mindskip.net/sdd.html](http://www.mindskip.net/sdd.html)
* 官网[https://www.mindskip.net](https://www.mindskip.net)
*之思考试系统[https://www.mindskip.net/xzs.html](https://www.mindskip.net/xzs.html)
* 思多多智能考试平台[https://www.mindskip.net/sdd.html](https://www.mindskip.net/sdd.html)
* 维多多培训考试系统:[https://www.mindskip.net/wdd.html](https://www.mindskip.net/wdd.html)
* 学多多考试系统:[https://www.mindskip.net/xdd.html](https://www.mindskip.net/xdd.html)
### 学之思仓库版本地址
* gitee - postgresql [https://gitee.com/mindskip/uexam](https://gitee.com/mindskip/uexam)
* github - postgresql [https://github.com/mindskip/xzs](https://github.com/mindskip/xzs)
* gitee - mysql [https://gitee.com/mindskip/xzs-mysql](https://gitee.com/mindskip/xzs-mysql)
* github - postgresql [https://github.com/mindskip/xzs](https://github.com/mindskip/xzs)
* github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/mindskip/xzs-mysql)
### 学之思交流群(加群获取数据库脚本)
* 交流五群:`1074095891`
* QQ交流群八`902855996`
* QQ`2693073475`
* 微信:`alvis-u`
### 开发部署教程
### 大事件
* 2020/5 思多多智能考试平台新版发布 地址:[http://www.mindskip.net/sdd.html](http://www.mindskip.net/sdd.html)
* 2020/2 项目累计突破2000 star
* 2020/1 累计超过150万用户使用
* 2019/12 项目累计突破1000 star
* 2019/11 入围开源中国最受欢迎开源项目
* 2019/10 累计超过100万学生使用
* 2019/10 荣获码云最有价值开源项目
* [https://www.mindskip.net:999](https://www.mindskip.net:999)
### 学生系统功能
* 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为student/123456
* 登录、注册: 注册时要选年级,过滤不同年级的试卷, 账号为student/123456
* 首页: 任务中心、固定试卷、时段试卷、可以能做的一部分试卷
* 试卷中心: 包含了所有能做的试卷,按学科来过滤和分页
* 考试记录: 所有的试卷考试记录在此处分页,可以查看试卷结果、用时、得分、自行批改等
@@ -47,56 +66,28 @@
* 试卷答题和试卷查看: 展示出题目的基本信息和需要填写的内容
### 管理系统功能
* 登录: 账号为 admin/123456
* 登录: 账号为: admin/123456
* 主页: 包含了试卷、题目、做卷数、做题数、用户活跃度的统计功能,活跃度和做题数是按月统计
* 用户管理: 对不同角色 学生、教师、管理员 的增删改查管理功能
* 用户管理: 对不同角色 学生、管理员 的增删改查管理功能
* 卷题管理:
1. 试卷列表:试卷的增删改查,新增包含选择学科、试卷类型、试卷名称、考试时间,试卷内容包含添加大标题,然后添加题目到此试卷中,组成一套完整的试卷
2. 题目列表:题目的增删改查,目前题型包含单选题、多选题、判断题、填空题、简单题,支持图片、公式等。
* 任务管理:对任务进行修改
* 教育管理:对不同年级的学科进行增删改查
* 消息中心:可以对多个用户进行消息发送,预留:加入班级,推送试卷等消息
* 消息中心:可以对多个用户进行消息发送
* 日志中心:用户的基本操作进行日志记录,了解用户使用过情况
### 小程序学生系统功能
### 小程序功能
* 用户登录登出功能,登录会自动绑定微信账号,登出会解绑
* 首页包含任务中心、固定试卷、时段试卷、推送试卷模块和web端保持一致
* 试卷模块固定试卷和时段试卷的分页查询,下拉加载更多上拉刷新当前数据
* 记录模块考试结果的分页,包含了试卷基本信息
* 我的模块包含个人资料的修改个人动态消息中心模块
### 技术栈列表
后台系统:
* spring-boot 2.1.6.RELEASE
* spring-boot-security 用户登录验证
* undertow web容器
* postgresql/mysql 优秀的开源数据库
* redis 缓存,提升系统性能
* mybatis 数据库中间件
* hikari 速度最快的数据库连接池
* 七牛云存储 目前10G内免费
前台系统:
* Vue.js 采用新版使用了vue-cli3搭建的系统减少大量配置文件
* element-ui 最流行的vue组件采用的最新版
* vue-element-admin 最新版,对该系统做了大量精简,只保留了部分样式和控件
* echarts 图表统计
* ueditor 填空题扩展插件
微信小程序:
* iView 主题样式
### 使用教程
1. redis 安装
2. 进群获取到数据库脚本,创建表初始化数据
3. /uexam/source/xzs为后台代码建议使用IntelliJ IDEA打开在application-dev.yml文件中配置好postgesql/mysql、redis的服务地址打开XzsApplication文件编译运行,默认端口为8000。
4. 学生系统地址http://localhost:8000/student
5. 管理端地址http://localhost:8000/admin
### 软件架构图
![](doc/image/frame/2.png)
* 首页包含任务中心、固定试卷、时段试卷和web端保持一致
* 试卷模块固定试卷和时段试卷的分页查询,下拉加载更多上拉刷新当前数据
* 记录模块考试结果的分页,包含了试卷基本信息
* 我的模块包含个人资料的修改个人动态消息中心模块
### 系统展示
* 学生考试系统
<table>
<tr>
@@ -129,4 +120,3 @@
<td><img src="doc/image/admin/13.png"/></td>
</tr>
</table>

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 551 KiB

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

BIN
doc/image/logo/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

0
docs/.nojekyll Normal file
View File

BIN
docs/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

356
docs/README.md Normal file
View File

@@ -0,0 +1,356 @@
# 目录
## 项目介绍
学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序能覆盖到pc机和手机等设备。 支持多种部署方式集成部署、前后端分离部署、docker部署。
## 开源版使用须知
仅用个人学习
禁止将本项目的代码和资源进行任何形式的出售,产生的一切任何后果责任由侵权者自负
## 学之思仓库地址
gitee - mysql [https://gitee.com/mindskip/xzs-mysql](https://gitee.com/mindskip/xzs-mysql)
github - mysql [https://github.com/mindskip/xzs-mysql](https://github.com/mindskip/xzs-mysql)
## 运行环境
| 环境 | 版本 |
| ---- | ---- |
| 操作系统 | Windows / Linux |
| Jdk | 1.8 |
| Redis | 6.0 |
| Mysql | 8.0 |
## 技术栈列表
### 后台系统
* spring-boot 2.1.6.RELEASE
* spring-boot-security 用户登录验证
* undertow web容器
* mysql 最流行的开源数据库
* redis 缓存,提升系统性能
* mybatis 数据库中间件
* hikari 速度最快的数据库连接池
* 七牛云存储 分布式文件存储中心
### 前台系统
* vue 采用新版使用了vue-cli4搭建的系统减少大量配置文件
* element-ui 最流行的vue UI框架
* vue-element-admin 深度定制版
* echarts 图表统计
* ueditor 深度定制版
### 微信小程序
* iView 主题样式
## 架构图
![架构图](1.png)
## 数据库设计
### 试卷表 t_exam_paper
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| name | varchar | 试卷名称 |
| subject_id | int | 学科 |
| paper_type | int | 试卷类型( 1固定试卷 4.时段试卷 6.任务试卷) |
| grade_level | int | 年级 |
| score | int | 试卷总分(千分制) |
| question_count | int | 题目数量 |
| suggest_time | int | 建议时长(分钟) |
| limit_start_time | datetime | 时段试卷 开始时间 |
| limit_end_time | datetime | 时段试卷 结束时间 |
| frame_text_content_id | int | 试卷框架 内容为JSON |
| create_user | int | |
| create_time | datetime | |
| deleted | bit | |
| task_exam_id | int | |
### 试卷答案表 t_exam_paper_answer
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| exam_paper_id | int | |
| paper_name | varchar | 试卷名称 |
| paper_type | int | 试卷类型( 1固定试卷 2临时试卷 3班级试卷 4.时段试卷 ) |
| subject_id | int | 学科 |
| system_score | int | 系统判定得分 |
| user_score | int | 最终得分(千分制) |
| paper_score | int | 试卷总分 |
| question_correct | int | 做对题目数量 |
| question_count | int | 题目总数量 |
| do_time | int | 做题时间(秒) |
| status | int | 试卷状态(1待判分 2完成) |
| create_user | int | 学生 |
| create_time | datetime | 提交时间 |
| task_exam_id | int | |
### 试卷题目答案表 t_exam_paper_question_customer_answer
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| question_id | int | 题目Id |
| exam_paper_id | int | 答案Id |
| exam_paper_answer_id | int | |
| question_type | int | 题型 |
| subject_id | int | 学科 |
| customer_score | int | 得分 |
| question_score | int | 题目原始分数 |
| question_text_content_id | int | 问题内容 |
| answer | varchar | 做题答案 |
| text_content_id | int | 做题内容 |
| do_right | bit | 是否正确 |
| create_user | int | 做题人 |
| create_time | datetime | |
| item_order | int | |
### 消息表 t_message
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| title | varchar | 标题 |
| content | varchar | 内容 |
| create_time | datetime | |
| send_user_id | int | 发送者用户ID |
| send_user_name | varchar | 发送者用户名 |
| send_real_name | varchar | 发送者真实姓名 |
| receive_user_count | int | 接收人数 |
| read_count | int | 已读人数 |
### 用户消息表 t_message_user
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| message_id | int | 消息内容ID |
| receive_user_id | int | 接收人ID |
| receive_user_name | varchar | 接收人用户名 |
| receive_real_name | varchar | 接收人真实姓名 |
| readed | bit | 是否已读 |
| create_time | datetime | |
| read_time | datetime | 阅读时间 |
### 题目表 t_question
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| question_type | int | 1.单选题 2.多选题 3.判断题 4.填空题 5.简答题 |
| subject_id | int | 学科 |
| score | int | 题目总分(千分制) |
| grade_level | int | 级别 |
| difficult | int | 题目难度 |
| correct | text | 正确答案 |
| info_text_content_id | int | 题目 填空、 题干、解析、答案等信息 |
| create_user | int | 创建人 |
| status | int | 1.正常 |
| create_time | datetime | 创建时间 |
| deleted | bit | |
### 学科表 t_subject
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| name | varchar | 语文 数学 英语 等 |
| level | int | 年级 (1-12) 小学 初中 高中 大学 |
| level_name | varchar | 一年级、二年级等 |
| item_order | int | 排序 |
| deleted | bit | |
### 任务表 t_task_exam
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| title | varchar | |
| grade_level | int | 级别 |
| frame_text_content_id | int | 任务框架 内容为JSON |
| create_user | int | |
| create_time | datetime | |
| deleted | bit | |
| create_user_name | varchar | |
### 用户任务表 t_task_exam_customer_answer
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| task_exam_id | int | |
| create_user | int | |
| create_time | datetime | |
| text_content_id | int | 任务完成情况(Json) |
### 文本表 t_text_content
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| content | text | |
| create_time | datetime | |
### 用户表 t_user
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| user_uuid | varchar | |
| user_name | varchar | 用户名 |
| password | varchar | |
| real_name | varchar | 真实姓名 |
| age | int | |
| sex | int | 1.男 2女 |
| birth_day | datetime | |
| user_level | int | 学生年级(1-12) |
| phone | varchar | |
| role | int | 1.学生 2.老师 3.管理员 |
| status | int | 1.启用 2禁用 |
| image_path | varchar | 头像地址 |
| create_time | datetime | |
| modify_time | datetime | |
| last_active_time | datetime | |
| deleted | bit | 是否删除 |
| wx_open_id | varchar | 微信openId |
### 用户日志表 t_user_event_log
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| user_id | int | 用户id |
| user_name | varchar | 用户名 |
| real_name | varchar | 真实姓名 |
| content | text | 内容 |
| create_time | datetime | 时间 |
### 用户Token表 t_user_token
| 字段名 | 类型 | 注释 |
| ---- | ---- | ---- |
| id | int | |
| token | varchar | |
| user_id | int | 用户Id |
| wx_open_id | varchar | 微信openId |
| create_time | datetime | |
| end_time | datetime | |
| user_name | varchar | 用户名 |
## 项目开发
### 开发说明
* redis 安装
* 进群获取到数据库脚本创建表初始化数据数据库名称为xzs
* 代码分为 mysql版本配合相应的数据库使用
* 安装mysql 导入xzs-mysql.sql脚本。
* 学生端默认账号student / 123456
* 管理端默认账号admin / 123456
### 后端开发
* /uexam/source/xzs为后台代码建议使用IntelliJ IDEA打开
* 打开application-dev.yml文件中配置好postgesql/mysql、redis的服务地址
* 去七牛云官网申请好云存储账号修改application.yml中的qn相关的配置
* 启动后台程序,默认端口为8000。
* 学生系统地址:<http://ip:8000/student>
* 管理端地址:<http://ip:8000/admin>
### 前端开发
* 前端使用webstorm或者vscode分别打开文件夹打开源代码\source\vue\xzs-student和source\vue\xzs-admin
* 执行下面2个命令安装node_module
```npm
npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
npm install --registry https://registry.npm.taobao.org
```
* 执行下面命令,启动前端代码
```npm
npm run serve
```
* 打包命名
```npm
npm run build
```
### 微信小程序开发
* 去腾讯小程序官网注册账号拿到appid和secret信息
* 下载好微信小程序开发工具
* 打开工具,导入代码 \source\wx\xzs-student
* 修改application.yml文件里的wx配置下面的appid和secret
* 启动小程序开发工具
## 项目部署
### 集成部署
* 分别在\source\vue\xzs-student目录和source\vue\xzs-admin目录执行前端打包命令
```npm
npm run build
```
* 打包后的目录为student和admin
* 将文件放到\source\xzs\src\main\resources\static下然后将java程序打包成jar包
* 修改application-prod.yml中的datasource和redis地址
* 学生端访问地址为:<http://ip:8000/student>
* 管理员端访问地址为:<http://ip:8000/admin>
* 执行下列命令,运行程序
```java
nohup java -Duser.timezone=Asia/Shanghai -jar -Dspring.profiles.active=prod xzs-3.2.0.jar > start1.log 2>&1 &
```
### 前后端分离部署
* 采用前后端分离方式部署后端启动和部署方式1一样
* 前端采用nginx来装载静态页面,先创建/usr/local/xzs/web/目录然后将打包后的student、admin放到此目录下
* 页面访问端口为8001注意检查防火墙端口是否打开
* 学生端访问地址为:<http://ip:8001/student>
* 管理员端访问地址为:<http://ip:8001/admin>
* nginx配置如下
```nginx
server {
listen 8001;
server_name xzs;
location / {
root /usr/local/xzs/web/;
index index.html;
}
location /api/ {
proxy_pass http://localhost:8000;
}
}
```
### docker部署
* 先检查服务器端口、ip转发的是否配置正确否则无法访问到docker内部
* docker内部镜像已经安装了java、mysql、redis、nginx,均已配置好,无需其他操作
* 执行下列docker命令拉取镜像启动容器
* 学生端访问地址为:<http://ip:8001/student>
* 管理员端访问地址为:<http://ip:8001/admin>
```docker
docker pull registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.2.0
docker run -d --name xzs --privileged -it -d -p 8001:8001 -v /etc/localtime:/etc/localtime:ro registry.cn-hangzhou.aliyuncs.com/mindskip/xzs:v3.2.0 /usr/sbin/init
```

7
docs/_coverpage.md Normal file
View File

@@ -0,0 +1,7 @@
# 学之思考试系统
> 学之思在线考试系统是一款 java + vue 的前后端分离的考试系统。主要优点是开发、部署简单快捷、界面设计友好、代码结构清晰。支持web端和微信小程序能覆盖到pc机和手机等设备。 支持多种部署方式集成部署、前后端分离部署、docker部署。
[Gitee](https://gitee.com/mindskip/uexam)
[Get Started](#目录)

1
docs/docsify@4.js Normal file

File diff suppressed because one or more lines are too long

BIN
docs/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

42
docs/index.html Normal file
View File

@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>学之思开发部署教程</title>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="description" content="Description">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<link rel="stylesheet" href="vue.css">
<link rel="stylesheet" href="xzs.css">
<link rel="shortcut icon" href="favicon.png">
</head>
<body style="min-width: 1024px;">
<nav class="head">
<div class="head-logo">
<a href="https://www.mindskip.net" target="_blank">
<img src="logo.png" />
</a>
</div>
<div class="head-link">
<a href="https://www.mindskip.net/" target="_blank">官网</a>
<a href="https://www.mindskip.net/sdd.html" target="_blank">思多多</a>
<a href="https://www.mindskip.net/wdd.html" target="_blank">维多多</a>
<a href="https://www.mindskip.net/xdd.html" target="_blank">学多多</a>
<a href="https://www.mindskip.net/xzs.html" target="_blank">学之思</a>
<a href="https://www.mindskip.net/buy.html" target="_blank">商业购买</a>
</div>
</nav>
<div id="app"></div>
<script>
window.$docsify = {
name: '学之思开发部署教程',
coverpage: false
}
</script>
<!-- Docsify v4 -->
<script src="docsify@4.js"></script>
</body>
</html>

BIN
docs/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

1005
docs/vue.css Normal file

File diff suppressed because it is too large Load Diff

39
docs/xzs.css Normal file
View File

@@ -0,0 +1,39 @@
table th {
min-width: 200px;
}
table td {
text-align: center;
}
.head {
display: flex;
flex-direction: row;
justify-content: space-between;
width: 100%;
margin: 0px !important;
line-height: 58px;
padding: 10px 20px;
background-color: #f8f8f8;
flex-wrap: wrap;
}
.head-logo {
height: 58px;
width: 182px;
line-height: 78px;
}
.head-link {
display: flex;
justify-content: flex-start;
flex-wrap: wrap;
}
.head-link a {
margin-left: 25px;
}
.content {
padding-top: 80px !important;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "xzs-admin",
"version": "3.0.7",
"author": "武汉思维跳跃科技",
"version": "3.2.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思管理系统",
"license": "AGPL-3.0",
"private": true,
@@ -16,22 +16,22 @@
},
"dependencies": {
"axios": "^0.19.0",
"core-js": "^3.6.5",
"element-ui": "^2.13.2",
"core-js": "^3.8.3",
"element-ui": "^2.15.0",
"js-cookie": "2.2.0",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-count-to": "^1.0.13",
"vue-router": "^3.3.4",
"vuex": "^3.5.1"
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.4.6",
"@vue/cli-plugin-eslint": "^4.4.6",
"@vue/cli-plugin-router": "^4.4.6",
"@vue/cli-plugin-vuex": "^4.4.6",
"@vue/cli-service": "^4.4.6",
"@vue/cli-plugin-babel": "^4.5.10",
"@vue/cli-plugin-eslint": "^4.5.10",
"@vue/cli-plugin-router": "^4.5.10",
"@vue/cli-plugin-vuex": "^4.5.10",
"@vue/cli-service": "^4.5.10",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.1.0",
"eslint": "^5.16.0",

File diff suppressed because one or more lines are too long

View File

@@ -9,7 +9,7 @@
</div>
<app-main />
<div class="foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
<back-to-top :visibility-height="100" :back-position="0" transition-name="fade" ref="backTop"/>
</div>

View File

@@ -4,7 +4,7 @@
**/
/* theme color */
$--color-primary: #1890ff;
$--color-primary: #13C2C2;
$--color-success: #13ce66;
$--color-warning: #FFBA00;
$--color-danger: #ff4949;

View File

@@ -66,6 +66,12 @@ export default {
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
name: '',
level: 1,
levelName: ''
}
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -239,6 +239,16 @@ export default {
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
level: null,
subjectId: null,
paperType: 1,
limitDateTime: [],
name: '',
suggestTime: null,
titleItems: []
}
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -208,7 +208,22 @@ export default {
this.questionShow.question = this.form
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 4,
gradeLevel: null,
subjectId: null,
title: '',
items: [
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -195,7 +195,27 @@ export default {
this.questionShow.question = this.form
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 2,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ id: null, prefix: 'A', content: '' },
{ id: null, prefix: 'B', content: '' },
{ id: null, prefix: 'C', content: '' },
{ id: null, prefix: 'D', content: '' }
],
analyze: '',
correct: '',
correctArray: [],
score: '',
difficult: 0
}
this.form.id = lastId
},
...mapActions('exam', { initSubject: 'initSubject' }),
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })

View File

@@ -161,7 +161,21 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 5,
gradeLevel: null,
subjectId: null,
title: '',
items: [],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@@ -185,7 +185,26 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 1,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ prefix: 'A', content: '' },
{ prefix: 'B', content: '' },
{ prefix: 'C', content: '' },
{ prefix: 'D', content: '' }
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
this.form.id = lastId
},
levelChange () {
this.form.subjectId = null

View File

@@ -173,6 +173,21 @@ export default {
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
questionType: 3,
gradeLevel: null,
subjectId: null,
title: '',
items: [
{ id: null, prefix: 'A', content: '是' },
{ id: null, prefix: 'B', content: '否' }
],
analyze: '',
correct: '',
score: '',
difficult: 0
}
},
levelChange () {
this.form.subjectId = null

View File

@@ -52,7 +52,7 @@
</el-form>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -90,8 +90,11 @@ export default {
},
resetForm () {
this.$refs['form'].resetFields()
this.options = []
this.form.receiveUserIds = []
this.form = {
title: '',
content: '',
receiveUserIds: []
}
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
}

View File

@@ -175,7 +175,15 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
gradeLevel: null,
title: '',
paperItems: []
}
this.form.id = lastId
},
subjectFormatter (row, column, cellValue, index) {
return this.subjectEnumFormat(cellValue)

View File

@@ -20,7 +20,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期"/>
<el-date-picker v-model="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"/>
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
@@ -104,7 +104,21 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
userName: '',
password: '',
realName: '',
role: 3,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -20,7 +20,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期" />
<el-date-picker v-model="form.birthDay" type="date" value-format="yyyy-MM-dd" placeholder="选择日期" />
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
@@ -113,7 +113,22 @@ export default {
})
},
resetForm () {
let lastId = this.form.id
this.$refs['form'].resetFields()
this.form = {
id: null,
userName: '',
password: '',
realName: '',
role: 1,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null,
userLevel: null
}
this.form.id = lastId
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

View File

@@ -20,7 +20,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期" />
<el-date-picker v-model="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期" />
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>
@@ -105,6 +105,18 @@ export default {
},
resetForm () {
this.$refs['form'].resetFields()
this.form = {
id: null,
userName: '',
password: '',
realName: '',
role: 2,
status: 1,
age: '',
sex: '',
birthDay: null,
phone: null
}
},
...mapActions('tagsView', { delCurrentView: 'delCurrentView' })
},

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
{
"name": "xzs-student",
"version": "3.0.7",
"author": "武汉思维跳跃科技",
"version": "3.2.0",
"author": "武汉思维跳跃科技有限公司",
"description": "学之思考试系统",
"license": "AGPL-3.0",
"private": true,
@@ -16,21 +16,21 @@
},
"dependencies": {
"axios": "^0.19.0",
"core-js": "^3.4.4",
"element-ui": "^2.13.2",
"core-js": "^3.8.3",
"element-ui": "^2.15.0",
"js-cookie": "2.2.0",
"normalize.css": "8.0.1",
"nprogress": "0.2.0",
"vue": "^2.6.10",
"vue-router": "^3.3.4",
"vuex": "^3.5.1"
"vue-router": "^3.4.9",
"vuex": "^3.6.0"
},
"devDependencies": {
"@vue/cli-plugin-babel": "^4.4.6",
"@vue/cli-plugin-eslint": "^4.4.6",
"@vue/cli-plugin-router": "^4.4.6",
"@vue/cli-plugin-vuex": "^4.4.6",
"@vue/cli-service": "^4.4.6",
"@vue/cli-plugin-babel": "^4.5.10",
"@vue/cli-plugin-eslint": "^4.5.10",
"@vue/cli-plugin-router": "^4.5.10",
"@vue/cli-plugin-vuex": "^4.5.10",
"@vue/cli-service": "^4.5.10",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.3",
"eslint": "^5.16.0",

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

View File

@@ -35,11 +35,25 @@
<div class="container">
<div class="footer-main">
<h4>产品介绍</h4>
<a href="http://www.mindskip.net" target="_blank" class="footer-main-link">思维跳跃科技</a>
<a href="http://www.mindskip.net/sdd.html" target="_blank" class="footer-main-link">思多多智能考试平台</a>
<a href="http://www.mindskip.net/wdd.html" target="_blank" class="footer-main-link">维多多培训考试系统</a>
<a href="http://www.mindskip.net/xdd.html" target="_blank" class="footer-main-link">学多多考试系统</a>
<a href="http://www.mindskip.net/xzs.html" target="_blank" class="footer-main-link">学之思考试系统</a>
</div>
<div class="footer-main">
<h4>学多多小程序</h4>
<img src="@/assets/code/1.jpg" style="width: 100px;height: 100px;"/>
</div>
<div class="footer-main">
<h4>跃考 H5小程序</h4>
<img src="@/assets/code/2.png" style="width: 100px;height: 100px;"/>
<img src="@/assets/code/3.jpg" style="width: 100px;height: 100px;margin-left: 10px"/>
</div>
<div class="footer-main">
<h4>维考 H5小程序</h4>
<img src="@/assets/code/6.png" style="width: 100px;height: 100px;"/>
<img src="@/assets/code/7.jpg" style="width: 100px;height: 100px;margin-left: 10px"/>
</div>
<div class="footer-main">
<h4>关于我们</h4>
<img src="@/assets/4.jpg" style="width: 100px;height: 100px;"/>
@@ -52,7 +66,7 @@
</div>
</el-footer>
<div class="foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</el-container>
</template>

View File

@@ -89,7 +89,7 @@ html {
.footer-main {
display: inline-block;
vertical-align: top;
margin-right: 110px;
margin-right: 70px;
.footer-main-link {
display: block;

View File

@@ -31,7 +31,7 @@
</div>
</div>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -37,7 +37,7 @@
</div>
</div>
<div class="account-foot-copyright">
<span>Copyright © 2020 武汉思维跳跃科技有限公司 版权所有</span>
<span>Copyright © 2021 武汉思维跳跃科技有限公司 版权所有</span>
</div>
</div>
</template>

View File

@@ -51,7 +51,7 @@
</el-select>
</el-form-item>
<el-form-item label="出生日期:">
<el-date-picker v-model="form.birthDay" type="date" placeholder="选择日期"/>
<el-date-picker v-model="form.birthDay" value-format="yyyy-MM-dd" type="date" placeholder="选择日期"/>
</el-form-item>
<el-form-item label="手机:">
<el-input v-model="form.phone"></el-input>

View File

@@ -5,11 +5,11 @@
<groupId>com.mindskip</groupId>
<artifactId>xzs</artifactId>
<version>3.0.7</version>
<version>3.2.0</version>
<packaging>jar</packaging>
<name>xzs</name>
<description>武汉思维跳跃科技-学之思考试系统</description>
<description>学之思考试系统 - 武汉思维跳跃科技有限公司</description>
<properties>
@@ -118,13 +118,6 @@
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>

View File

@@ -8,7 +8,7 @@ import org.springframework.cache.annotation.EnableCaching;
import org.springframework.transaction.annotation.EnableTransactionManagement;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@SpringBootApplication
@EnableTransactionManagement

View File

@@ -8,7 +8,7 @@ import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public class BaseApiController {
protected final static String DEFAULT_PAGE_SIZE = "10";

View File

@@ -2,7 +2,7 @@ package com.mindskip.xzs.base;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public abstract class BaseEntity {

View File

@@ -1,15 +1,29 @@
package com.mindskip.xzs.base;
import lombok.Data;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Data
public class BasePage {
private Integer pageIndex;
private Integer pageSize;
public Integer getPageIndex() {
return pageIndex;
}
public void setPageIndex(Integer pageIndex) {
this.pageIndex = pageIndex;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
}

View File

@@ -1,7 +1,7 @@
package com.mindskip.xzs.base;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public class RestResponse<T> {
private int code;

View File

@@ -1,7 +1,7 @@
package com.mindskip.xzs.base;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public enum SystemCode {
/**

View File

@@ -6,7 +6,7 @@ import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Component
public class ApplicationContextProvider implements ApplicationContextAware {

View File

@@ -3,7 +3,7 @@ package com.mindskip.xzs.configuration.property;
public class CookieConfig {
public static String getName() {
return "exam";
return "xzs";
}
public static Integer getInterval() {

View File

@@ -1,9 +1,25 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
@Data
public class PasswordKeyConfig {
private String publicKey;
private String privateKey;
public String getPublicKey() {
return publicKey;
}
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public String getPrivateKey() {
return privateKey;
}
public void setPrivateKey(String privateKey) {
this.privateKey = privateKey;
}
}

View File

@@ -1,14 +1,46 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import java.time.Duration;
import java.util.List;
@Data
public class QnConfig {
private String url;
private String bucket;
private String accessKey;
private String secretKey;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getBucket() {
return bucket;
}
public void setBucket(String bucket) {
this.bucket = bucket;
}
public String getAccessKey() {
return accessKey;
}
public void setAccessKey(String accessKey) {
this.accessKey = accessKey;
}
public String getSecretKey() {
return secretKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
}

View File

@@ -1,19 +1,51 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import java.util.List;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@ConfigurationProperties(prefix = "system")
@Data
public class SystemConfig {
private PasswordKeyConfig pwdKey;
private List<String> securityIgnoreUrls;
private WxConfig wx;
private QnConfig qn;
public PasswordKeyConfig getPwdKey() {
return pwdKey;
}
public void setPwdKey(PasswordKeyConfig pwdKey) {
this.pwdKey = pwdKey;
}
public List<String> getSecurityIgnoreUrls() {
return securityIgnoreUrls;
}
public void setSecurityIgnoreUrls(List<String> securityIgnoreUrls) {
this.securityIgnoreUrls = securityIgnoreUrls;
}
public WxConfig getWx() {
return wx;
}
public void setWx(WxConfig wx) {
this.wx = wx;
}
public QnConfig getQn() {
return qn;
}
public void setQn(QnConfig qn) {
this.qn = qn;
}
}

View File

@@ -1,14 +1,47 @@
package com.mindskip.xzs.configuration.property;
import lombok.Data;
import java.time.Duration;
import java.util.List;
@Data
public class WxConfig {
private String appid;
private String secret;
private Duration tokenToLive;
private List<String> securityIgnoreUrls;
public String getAppid() {
return appid;
}
public void setAppid(String appid) {
this.appid = appid;
}
public String getSecret() {
return secret;
}
public void setSecret(String secret) {
this.secret = secret;
}
public Duration getTokenToLive() {
return tokenToLive;
}
public void setTokenToLive(Duration tokenToLive) {
this.tokenToLive = tokenToLive;
}
public List<String> getSecurityIgnoreUrls() {
return securityIgnoreUrls;
}
public void setSecurityIgnoreUrls(List<String> securityIgnoreUrls) {
this.securityIgnoreUrls = securityIgnoreUrls;
}
}

View File

@@ -29,26 +29,6 @@ import java.time.Duration;
@EnableCaching
public class CacheConfig extends CachingConfigurerSupport {
/* @Autowired
private CacheProperties cacheProperties;*/
/**
* redis序列化修改为ObjectMapper
*
* @return RedisCacheConfiguration
*/
/* @Bean
public RedisCacheConfiguration redisCacheConfiguration() {
Jackson2JsonRedisSerializer<Object> serializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(objectMapper);
return RedisCacheConfiguration.defaultCacheConfig().entryTtl(cacheProperties.getRedis().getTimeToLive())
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer));
}*/
/**
* spring boot redis默认序列化方式
*

View File

@@ -2,7 +2,7 @@ package com.mindskip.xzs.configuration.spring.mvc;
import com.mindskip.xzs.configuration.property.SystemConfig;
import com.mindskip.xzs.configuration.spring.wx.TokenHandlerInterceptor;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
@@ -10,16 +10,21 @@ import java.util.List;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Configuration
@AllArgsConstructor
public class WebMvcConfiguration extends WebMvcConfigurationSupport {
private final TokenHandlerInterceptor tokenHandlerInterceptor;
private final SystemConfig systemConfig;
@Autowired
public WebMvcConfiguration(TokenHandlerInterceptor tokenHandlerInterceptor, SystemConfig systemConfig) {
this.tokenHandlerInterceptor = tokenHandlerInterceptor;
this.systemConfig = systemConfig;
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addRedirectViewController("/", "/student/index.html");

View File

@@ -1,14 +1,37 @@
package com.mindskip.xzs.configuration.spring.security;
import lombok.Data;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Data
public class AuthenticationBean {
private String userName;
private String password;
private boolean remember;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isRemember() {
return remember;
}
public void setRemember(boolean remember) {
this.remember = remember;
}
}

View File

@@ -12,7 +12,7 @@ import java.io.IOException;
/**
* 未登录
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Component
public final class LoginAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {

View File

@@ -12,7 +12,7 @@ import java.io.IOException;
/**
* 账号验证异常
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Component
public class RestAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler {

View File

@@ -24,9 +24,8 @@ import java.util.ArrayList;
/**
* 登录用户名密码验证
*
* @author : Alvis
* @author : 武汉思维跳跃科技有限公司
* Description : 身份验证
* Creation Date: 2018-05-02 5:00 PM
*/
@Component

View File

@@ -4,7 +4,7 @@ import com.mindskip.xzs.base.SystemCode;
import com.mindskip.xzs.domain.UserEventLog;
import com.mindskip.xzs.event.UserEvent;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.User;
@@ -20,15 +20,20 @@ import java.util.Date;
/**
* 登录成功返回
*
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Component
@AllArgsConstructor
public class RestAuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
private final ApplicationEventPublisher eventPublisher;
private final UserService userService;
@Autowired
public RestAuthenticationSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService) {
this.eventPublisher = eventPublisher;
this.userService = userService;
}
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
User springUser = (User) authentication.getPrincipal();

View File

@@ -14,9 +14,8 @@ import org.springframework.stereotype.Component;
import java.util.ArrayList;
/**
* @author : Alvis
* @author : 武汉思维跳跃科技有限公司
* Description : 验证通过之后,第二、三...请求,会调用此类
* Creation Date: 2018-05-02 4:32 PM
*/
@Component

View File

@@ -19,7 +19,7 @@ import java.io.InputStream;
/**
* 登录参数序列化
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public class RestLoginAuthenticationFilter extends AbstractAuthenticationProcessingFilter {

View File

@@ -5,7 +5,7 @@ import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.domain.UserEventLog;
import com.mindskip.xzs.event.UserEvent;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.logout.SimpleUrlLogoutSuccessHandler;
@@ -18,15 +18,20 @@ import java.util.Date;
/**
* 用户登出
*
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Component
@AllArgsConstructor
public class RestLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler {
private final ApplicationEventPublisher eventPublisher;
private final UserService userService;
@Autowired
public RestLogoutSuccessHandler(ApplicationEventPublisher eventPublisher, UserService userService) {
this.eventPublisher = eventPublisher;
this.userService = userService;
}
@Override
public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
org.springframework.security.core.userdetails.User springUser = (org.springframework.security.core.userdetails.User) authentication.getPrincipal();

View File

@@ -7,7 +7,7 @@ import javax.servlet.http.HttpServletRequest;
/**
* 记住我Cookie
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public class RestTokenBasedRememberMeServices extends TokenBasedRememberMeServices {
public RestTokenBasedRememberMeServices(String key, UserDetailsService userDetailsService) {

View File

@@ -10,7 +10,7 @@ import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
public class RestUtil {
private static final Logger logger = LoggerFactory.getLogger(RestUtil.class);

View File

@@ -3,7 +3,7 @@ package com.mindskip.xzs.configuration.spring.security;
import com.mindskip.xzs.configuration.property.CookieConfig;
import com.mindskip.xzs.configuration.property.SystemConfig;
import com.mindskip.xzs.domain.enums.RoleEnum;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
@@ -19,7 +19,7 @@ import java.util.List;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Configuration
@@ -27,7 +27,6 @@ import java.util.List;
public class SecurityConfigurer {
@Configuration
@AllArgsConstructor
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
private final SystemConfig systemConfig;
@@ -39,6 +38,18 @@ public class SecurityConfigurer {
private final RestLogoutSuccessHandler restLogoutSuccessHandler;
private final RestAccessDeniedHandler restAccessDeniedHandler;
@Autowired
public FormLoginWebSecurityConfigurerAdapter(SystemConfig systemConfig, LoginAuthenticationEntryPoint restAuthenticationEntryPoint, RestAuthenticationProvider restAuthenticationProvider, RestDetailsServiceImpl formDetailsService, RestAuthenticationSuccessHandler restAuthenticationSuccessHandler, RestAuthenticationFailureHandler restAuthenticationFailureHandler, RestLogoutSuccessHandler restLogoutSuccessHandler, RestAccessDeniedHandler restAccessDeniedHandler) {
this.systemConfig = systemConfig;
this.restAuthenticationEntryPoint = restAuthenticationEntryPoint;
this.restAuthenticationProvider = restAuthenticationProvider;
this.formDetailsService = formDetailsService;
this.restAuthenticationSuccessHandler = restAuthenticationSuccessHandler;
this.restAuthenticationFailureHandler = restAuthenticationFailureHandler;
this.restLogoutSuccessHandler = restLogoutSuccessHandler;
this.restAccessDeniedHandler = restAccessDeniedHandler;
}
/**
* @param http http
* @throws Exception exception

View File

@@ -2,18 +2,22 @@ package com.mindskip.xzs.context;
import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
@Component
@AllArgsConstructor
public class WebContext {
private static final String USER_ATTRIBUTES = "USER_ATTRIBUTES";
private final UserService userService;
@Autowired
public WebContext(UserService userService) {
this.userService = userService;
}
public void setCurrentUser(User user) {
RequestContextHolder.currentRequestAttributes().setAttribute(USER_ATTRIBUTES, user, RequestAttributes.SCOPE_REQUEST);

View File

@@ -5,8 +5,7 @@ import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.viewmodel.admin.dashboard.IndexVM;
import com.mindskip.xzs.service.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@@ -15,16 +14,23 @@ import java.util.List;
@RestController("AdminDashboardController")
@RequestMapping(value = "/api/admin/dashboard")
@AllArgsConstructor
public class DashboardController extends BaseApiController {
private final ExamPaperService examPaperService;
private final QuestionService questionService;
private final ExamPaperAnswerService examPaperAnswerService;
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
private final UserEventLogService userEventLogService;
@Autowired
public DashboardController(ExamPaperService examPaperService, QuestionService questionService, ExamPaperAnswerService examPaperAnswerService, ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, UserEventLogService userEventLogService) {
this.examPaperService = examPaperService;
this.questionService = questionService;
this.examPaperAnswerService = examPaperAnswerService;
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.userEventLogService = userEventLogService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> Index() {
IndexVM vm = new IndexVM();

View File

@@ -10,7 +10,7 @@ import com.mindskip.xzs.viewmodel.admin.education.SubjectEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.education.SubjectResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -18,11 +18,15 @@ import java.util.List;
@RestController("AdminEducationController")
@RequestMapping(value = "/api/admin/education")
@AllArgsConstructor
public class EducationController extends BaseApiController {
private final SubjectService subjectService;
@Autowired
public EducationController(SubjectService subjectService) {
this.subjectService = subjectService;
}
@RequestMapping(value = "/subject/list", method = RequestMethod.POST)
public RestResponse<List<Subject>> list() {
List<Subject> subjects = subjectService.allSubject();

View File

@@ -10,18 +10,22 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.exam.ExamResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminExamPaperController")
@RequestMapping(value = "/api/admin/exam/paper")
@AllArgsConstructor
public class ExamPaperController extends BaseApiController {
private final ExamPaperService examPaperService;
@Autowired
public ExamPaperController(ExamPaperService examPaperService) {
this.examPaperService = examPaperService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamResponseVM>> pageList(@RequestBody ExamPaperPageRequestVM model) {
PageInfo<ExamPaper> pageInfo = examPaperService.page(model);

View File

@@ -14,7 +14,7 @@ import com.mindskip.xzs.viewmodel.admin.message.MessagePageRequestVM;
import com.mindskip.xzs.viewmodel.admin.message.MessageResponseVM;
import com.mindskip.xzs.viewmodel.admin.message.MessageSendVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -27,12 +27,17 @@ import java.util.stream.Collectors;
@RestController("AdminMessageController")
@RequestMapping(value = "/api/admin/message")
@AllArgsConstructor
public class MessageController extends BaseApiController {
private final MessageService messageService;
private final UserService userService;
@Autowired
public MessageController(MessageService messageService, UserService userService) {
this.messageService = messageService;
this.userService = userService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<MessageResponseVM>> pageList(@RequestBody MessagePageRequestVM model) {
PageInfo<Message> pageInfo = messageService.page(model);

View File

@@ -14,21 +14,25 @@ import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM;
import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.question.QuestionResponseVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.utility.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminQuestionController")
@RequestMapping(value = "/api/admin/question")
@AllArgsConstructor
public class QuestionController extends BaseApiController {
private final QuestionService questionService;
private final TextContentService textContentService;
@Autowired
public QuestionController(QuestionService questionService, TextContentService textContentService) {
this.questionService = questionService;
this.textContentService = textContentService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<QuestionResponseVM>> pageList(@RequestBody QuestionPageRequestVM model) {
PageInfo<Question> pageInfo = questionService.page(model);

View File

@@ -11,18 +11,22 @@ import com.mindskip.xzs.viewmodel.admin.task.TaskPageRequestVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskPageResponseVM;
import com.mindskip.xzs.viewmodel.admin.task.TaskRequestVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@RestController("AdminTaskController")
@RequestMapping(value = "/api/admin/task")
@AllArgsConstructor
public class TaskController extends BaseApiController {
private final TaskExamService taskExamService;
@Autowired
public TaskController(TaskExamService taskExamService) {
this.taskExamService = taskExamService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<TaskPageResponseVM>> pageList(@RequestBody TaskPageRequestVM model) {
PageInfo<TaskExam> pageInfo = taskExamService.page(model);

View File

@@ -8,10 +8,9 @@ import com.mindskip.xzs.service.FileUpload;
import com.mindskip.xzs.service.UserService;
import com.mindskip.xzs.viewmodel.admin.file.UeditorConfigVM;
import com.mindskip.xzs.viewmodel.admin.file.UploadResultVM;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@@ -23,8 +22,6 @@ import java.io.InputStream;
import java.util.Arrays;
@Slf4j
@AllArgsConstructor
@RequestMapping("/api/admin/upload")
@RestController("AdminUploadController")
public class UploadController extends BaseApiController {
@@ -36,6 +33,13 @@ public class UploadController extends BaseApiController {
private static final String IMAGE_UPLOAD_FILE = "upFile";
private final UserService userService;
@Autowired
public UploadController(FileUpload fileUpload, SystemConfig systemConfig, UserService userService) {
this.fileUpload = fileUpload;
this.systemConfig = systemConfig;
this.userService = userService;
}
@ResponseBody
@RequestMapping("/configAndUpload")
public Object upload(HttpServletRequest request, HttpServletResponse response) {

View File

@@ -13,10 +13,9 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.viewmodel.admin.user.*;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.admin.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -26,17 +25,23 @@ import java.util.UUID;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@RestController("AdminUserController")
@RequestMapping(value = "/api/admin/user")
@AllArgsConstructor
public class UserController extends BaseApiController {
private final UserService userService;
private final UserEventLogService userEventLogService;
private final AuthenticationService authenticationService;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, AuthenticationService authenticationService) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.authenticationService = authenticationService;
}
@RequestMapping(value = "/page/list", method = RequestMethod.POST)
public RestResponse<PageInfo<UserResponseVM>> pageList(@RequestBody UserPageRequestVM model) {

View File

@@ -13,9 +13,7 @@ import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@@ -27,7 +25,6 @@ import java.util.stream.Collectors;
@RestController("StudentDashboardController")
@RequestMapping(value = "/api/student/dashboard")
@AllArgsConstructor
public class DashboardController extends BaseApiController {
private final UserService userService;
@@ -37,6 +34,16 @@ public class DashboardController extends BaseApiController {
private final TaskExamCustomerAnswerService taskExamCustomerAnswerService;
private final TextContentService textContentService;
@Autowired
public DashboardController(UserService userService, ExamPaperService examPaperService, QuestionService questionService, TaskExamService taskExamService, TaskExamCustomerAnswerService taskExamCustomerAnswerService, TextContentService textContentService) {
this.userService = userService;
this.examPaperService = examPaperService;
this.questionService = questionService;
this.taskExamService = taskExamService;
this.taskExamCustomerAnswerService = taskExamCustomerAnswerService;
this.textContentService = textContentService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> index() {
IndexVM indexVM = new IndexVM();

View File

@@ -8,7 +8,7 @@ import com.mindskip.xzs.domain.User;
import com.mindskip.xzs.service.SubjectService;
import com.mindskip.xzs.viewmodel.student.education.SubjectEditRequestVM;
import com.mindskip.xzs.viewmodel.student.education.SubjectVM;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@@ -16,11 +16,15 @@ import java.util.stream.Collectors;
@RestController("StudentEducationController")
@RequestMapping(value = "/api/student/education")
@AllArgsConstructor
public class EducationController extends BaseApiController {
private final SubjectService subjectService;
@Autowired
public EducationController(SubjectService subjectService) {
this.subjectService = subjectService;
}
@RequestMapping(value = "/subject/list", method = RequestMethod.POST)
public RestResponse<List<SubjectVM>> list() {
User user = getCurrentUser();

View File

@@ -18,8 +18,7 @@ import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -28,7 +27,6 @@ import java.util.Date;
@RestController("StudentExamPaperAnswerController")
@RequestMapping(value = "/api/student/exampaper/answer")
@AllArgsConstructor
public class ExamPaperAnswerController extends BaseApiController {
private final ExamPaperAnswerService examPaperAnswerService;
@@ -36,6 +34,14 @@ public class ExamPaperAnswerController extends BaseApiController {
private final SubjectService subjectService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, ExamPaperService examPaperService, SubjectService subjectService, ApplicationEventPublisher eventPublisher) {
this.examPaperAnswerService = examPaperAnswerService;
this.examPaperService = examPaperService;
this.subjectService = subjectService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageList(@RequestBody @Valid ExamPaperAnswerPageVM model) {

View File

@@ -11,7 +11,7 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -19,13 +19,19 @@ import javax.validation.Valid;
@RestController("StudentExamPaperController")
@RequestMapping(value = "/api/student/exam/paper")
@AllArgsConstructor
public class ExamPaperController extends BaseApiController {
private final ExamPaperService examPaperService;
private final ExamPaperAnswerService examPaperAnswerService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public ExamPaperController(ExamPaperService examPaperService, ExamPaperAnswerService examPaperAnswerService, ApplicationEventPublisher eventPublisher) {
this.examPaperService = examPaperService;
this.examPaperAnswerService = examPaperAnswerService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
public RestResponse<ExamPaperEditRequestVM> select(@PathVariable Integer id) {

View File

@@ -20,12 +20,11 @@ import com.mindskip.xzs.viewmodel.student.question.answer.QuestionAnswerVM;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentRequestVM;
import com.mindskip.xzs.viewmodel.student.question.answer.QuestionPageStudentResponseVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("StudentQuestionAnswerController")
@RequestMapping(value = "/api/student/question/answer")
@AllArgsConstructor
public class QuestionAnswerController extends BaseApiController {
private final ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService;
@@ -33,6 +32,14 @@ public class QuestionAnswerController extends BaseApiController {
private final TextContentService textContentService;
private final SubjectService subjectService;
@Autowired
public QuestionAnswerController(ExamPaperQuestionCustomerAnswerService examPaperQuestionCustomerAnswerService, QuestionService questionService, TextContentService textContentService, SubjectService subjectService) {
this.examPaperQuestionCustomerAnswerService = examPaperQuestionCustomerAnswerService;
this.questionService = questionService;
this.textContentService = textContentService;
this.subjectService = subjectService;
}
@RequestMapping(value = "/page", method = RequestMethod.POST)
public RestResponse<PageInfo<QuestionPageStudentResponseVM>> pageList(@RequestBody QuestionPageStudentRequestVM model) {
model.setCreateUser(getCurrentUser().getId());

View File

@@ -2,15 +2,17 @@ package com.mindskip.xzs.controller.student;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.service.QuestionService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController("StudentQuestionController")
@RequestMapping(value = "/api/student/question")
@AllArgsConstructor
public class QuestionController extends BaseApiController {
private final QuestionService questionService;
@Autowired
public QuestionController(QuestionService questionService) {
this.questionService = questionService;
}
}

View File

@@ -5,8 +5,7 @@ import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.service.FileUpload;
import com.mindskip.xzs.service.UserService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@@ -18,8 +17,6 @@ import java.io.IOException;
import java.io.InputStream;
@Slf4j
@AllArgsConstructor
@RequestMapping("/api/student/upload")
@RestController("StudentUploadController")
public class UploadController extends BaseApiController {
@@ -27,6 +24,12 @@ public class UploadController extends BaseApiController {
private final FileUpload fileUpload;
private final UserService userService;
@Autowired
public UploadController(FileUpload fileUpload, UserService userService) {
this.fileUpload = fileUpload;
this.userService = userService;
}
@RequestMapping("/image")
@ResponseBody

View File

@@ -17,9 +17,8 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.user.*;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.student.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.*;
@@ -31,11 +30,10 @@ import java.util.stream.Collectors;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@RestController("StudentUserController")
@RequestMapping(value = "/api/student/user")
@AllArgsConstructor
public class UserController extends BaseApiController {
private final UserService userService;
@@ -44,6 +42,15 @@ public class UserController extends BaseApiController {
private final AuthenticationService authenticationService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, MessageService messageService, AuthenticationService authenticationService, ApplicationEventPublisher eventPublisher) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.messageService = messageService;
this.authenticationService = authenticationService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/current", method = RequestMethod.POST)
public RestResponse<UserResponseVM> current() {
User user = getCurrentUser();

View File

@@ -11,7 +11,7 @@ import com.mindskip.xzs.service.UserTokenService;
import com.mindskip.xzs.utility.WxUtil;
import com.mindskip.xzs.viewmodel.wx.student.user.BindInfo;
import com.mindskip.xzs.domain.User;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -21,7 +21,6 @@ import javax.validation.constraints.NotBlank;
@Controller("WXStudentAuthController")
@RequestMapping(value = "/api/wx/student/auth")
@AllArgsConstructor
@ResponseBody
public class AuthController extends BaseWXApiController {
@@ -30,6 +29,14 @@ public class AuthController extends BaseWXApiController {
private final UserService userService;
private final UserTokenService userTokenService;
@Autowired
public AuthController(SystemConfig systemConfig, AuthenticationService authenticationService, UserService userService, UserTokenService userTokenService) {
this.systemConfig = systemConfig;
this.authenticationService = authenticationService;
this.userService = userService;
this.userTokenService = userTokenService;
}
@RequestMapping(value = "/bind", method = RequestMethod.POST)
public RestResponse bind(@Valid BindInfo model) {
User user = userService.getUserByUserName(model.getUserName());

View File

@@ -16,8 +16,7 @@ import com.mindskip.xzs.service.TextContentService;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.JsonUtil;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import com.mindskip.xzs.viewmodel.student.dashboard.*;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@@ -31,7 +30,6 @@ import java.util.stream.Collectors;
@Controller("WXStudentDashboardController")
@RequestMapping(value = "/api/wx/student/dashboard")
@AllArgsConstructor
@ResponseBody
public class DashboardController extends BaseWXApiController {
@@ -40,6 +38,14 @@ public class DashboardController extends BaseWXApiController {
private final TaskExamService taskExamService;
private final TaskExamCustomerAnswerService taskExamCustomerAnswerService;
@Autowired
public DashboardController(ExamPaperService examPaperService, TextContentService textContentService, TaskExamService taskExamService, TaskExamCustomerAnswerService taskExamCustomerAnswerService) {
this.examPaperService = examPaperService;
this.textContentService = textContentService;
this.taskExamService = taskExamService;
this.taskExamCustomerAnswerService = taskExamCustomerAnswerService;
}
@RequestMapping(value = "/index", method = RequestMethod.POST)
public RestResponse<IndexVM> index() {
IndexVM indexVM = new IndexVM();

View File

@@ -13,15 +13,13 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.*;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.domain.*;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperReadVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitItemVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperSubmitVM;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -34,7 +32,6 @@ import java.util.stream.Collectors;
@Controller("WXStudentExamPaperAnswerController")
@RequestMapping(value = "/api/wx/student/exampaper/answer")
@AllArgsConstructor
@ResponseBody
public class ExamPaperAnswerController extends BaseWXApiController {
@@ -43,6 +40,14 @@ public class ExamPaperAnswerController extends BaseWXApiController {
private final ApplicationEventPublisher eventPublisher;
private final ExamPaperService examPaperService;
@Autowired
public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, ApplicationEventPublisher eventPublisher, ExamPaperService examPaperService) {
this.examPaperAnswerService = examPaperAnswerService;
this.subjectService = subjectService;
this.eventPublisher = eventPublisher;
this.examPaperService = examPaperService;
}
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageList(@Valid ExamPaperAnswerPageVM model) {
model.setCreateUser(getCurrentUser().getId());

View File

@@ -12,7 +12,7 @@ import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageResponseVM;
import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageVM;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -21,13 +21,18 @@ import javax.validation.Valid;
@Controller("WXStudentExamController")
@RequestMapping(value = "/api/wx/student/exampaper")
@AllArgsConstructor
@ResponseBody
public class ExamPaperController extends BaseWXApiController {
private final ExamPaperService examPaperService;
private final SubjectService subjectService;
@Autowired
public ExamPaperController(ExamPaperService examPaperService, SubjectService subjectService) {
this.examPaperService = examPaperService;
this.subjectService = subjectService;
}
@RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
public RestResponse<ExamPaperEditRequestVM> select(@PathVariable Integer id) {

View File

@@ -17,9 +17,8 @@ import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.viewmodel.student.user.*;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.viewmodel.student.user.*;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
@@ -32,11 +31,10 @@ import java.util.stream.Collectors;
/**
* @author alvis
* @author 武汉思维跳跃科技有限公司
*/
@Controller("WXStudentUserController")
@RequestMapping(value = "/api/wx/student/user")
@AllArgsConstructor
@ResponseBody
public class UserController extends BaseWXApiController {
@@ -46,6 +44,15 @@ public class UserController extends BaseWXApiController {
private final AuthenticationService authenticationService;
private final ApplicationEventPublisher eventPublisher;
@Autowired
public UserController(UserService userService, UserEventLogService userEventLogService, MessageService messageService, AuthenticationService authenticationService, ApplicationEventPublisher eventPublisher) {
this.userService = userService;
this.userEventLogService = userEventLogService;
this.messageService = messageService;
this.authenticationService = authenticationService;
this.eventPublisher = eventPublisher;
}
@RequestMapping(value = "/current", method = RequestMethod.POST)
public RestResponse<UserResponseVM> current() {
User user = getCurrentUser();

Some files were not shown because too many files have changed in this diff Show More