├── .gitignore
├── .mvn
└── wrapper
│ ├── MavenWrapperDownloader.java
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── LICENSE
├── UI
└── coursearrange
│ ├── .babelrc
│ ├── .editorconfig
│ ├── .gitignore
│ ├── .postcssrc.js
│ ├── README.md
│ ├── build
│ ├── build.js
│ ├── check-versions.js
│ ├── logo.png
│ ├── utils.js
│ ├── vue-loader.conf.js
│ ├── webpack.base.conf.js
│ ├── webpack.dev.conf.js
│ └── webpack.prod.conf.js
│ ├── config
│ ├── dev.env.js
│ ├── index.js
│ └── prod.env.js
│ ├── index.html
│ ├── package-lock.json
│ ├── package.json
│ ├── src
│ ├── App.vue
│ ├── assets
│ │ ├── css
│ │ │ └── global.css
│ │ ├── iconfonts
│ │ │ └── fonts
│ │ │ │ ├── demo.css
│ │ │ │ ├── demo_index.html
│ │ │ │ ├── iconfont.css
│ │ │ │ ├── iconfont.eot
│ │ │ │ ├── iconfont.js
│ │ │ │ ├── iconfont.json
│ │ │ │ ├── iconfont.svg
│ │ │ │ ├── iconfont.ttf
│ │ │ │ ├── iconfont.woff
│ │ │ │ └── iconfont.woff2
│ │ ├── js
│ │ │ └── pop.js
│ │ └── logo.png
│ ├── home
│ │ ├── Index.vue
│ │ ├── StudentMain.vue
│ │ └── components
│ │ │ ├── Center.vue
│ │ │ ├── CourseTable.vue
│ │ │ ├── EmptyClassroom.vue
│ │ │ ├── HomeHeader.vue
│ │ │ ├── Password.vue
│ │ │ └── StudentCenter.vue
│ ├── images
│ │ ├── image1.jpg
│ │ ├── image2.jpg
│ │ └── image3.jpg
│ ├── main.js
│ ├── manager
│ │ ├── ManagerMain.vue
│ │ └── components
│ │ │ ├── HomeWork.vue
│ │ │ └── ModifyTeacher.vue
│ ├── pages
│ │ ├── Login.vue
│ │ ├── Register.vue
│ │ └── components
│ │ │ └── UpdatePass.vue
│ ├── router
│ │ └── index.js
│ └── views
│ │ ├── basicManagement
│ │ ├── ClassManager.vue
│ │ ├── CourseInfoList.vue
│ │ ├── StudentList.vue
│ │ └── TeacherList.vue
│ │ ├── courseSchedulingManagement
│ │ ├── ClassTaskList.vue
│ │ └── CourseTable.vue
│ │ ├── loginModular
│ │ └── Admin.vue
│ │ ├── systemdataModular
│ │ └── SystemData.vue
│ │ └── teachingFacilities
│ │ ├── ClassroomList.vue
│ │ ├── TeachAreaSetting.vue
│ │ └── TeachBuildingList.vue
│ └── static
│ └── .gitkeep
├── doc
└── db_course_arrangement.sql
├── logs
├── notify-subscription.log
├── notify-subscription.log‘.‘2020-05-16
├── notify-subscription.log‘.‘2020-05-21
└── notify-subscription.log‘.‘2020-05-27
├── mvnw
├── mvnw.cmd
├── package-lock.json
├── pom.xml
└── src
├── main
├── java
│ └── com
│ │ └── chq
│ │ └── coursearrange
│ │ ├── CoursearrangeApplication.java
│ │ ├── common
│ │ ├── AuthenticationInterceptor.java
│ │ ├── GlobalExceptionHandler.java
│ │ ├── PassToken.java
│ │ ├── ResponseCode.java
│ │ ├── ServerResponse.java
│ │ ├── TimerTask.java
│ │ └── UserLoginToken.java
│ │ ├── config
│ │ ├── CrosConfig.java
│ │ ├── InterceptorConfig.java
│ │ ├── MyMetaObjectHandler.java
│ │ ├── MybatisPlusConfig.java
│ │ └── Swagger2Config.java
│ │ ├── controller
│ │ ├── AdminController.java
│ │ ├── ClassInfoController.java
│ │ ├── ClassTaskController.java
│ │ ├── ClassroomController.java
│ │ ├── CourseInfoController.java
│ │ ├── CoursePlanController.java
│ │ ├── GradeInfoController.java
│ │ ├── LocationInfoController.java
│ │ ├── StudentController.java
│ │ ├── StudyLogsController.java
│ │ ├── SystemController.java
│ │ ├── TeachBuildInfoController.java
│ │ └── TeacherController.java
│ │ ├── dao
│ │ ├── AdminDao.java
│ │ ├── ClassInfoDao.java
│ │ ├── ClassTaskDao.java
│ │ ├── ClassroomDao.java
│ │ ├── CourseInfoDao.java
│ │ ├── CoursePlanDao.java
│ │ ├── GradeInfoDao.java
│ │ ├── LocationInfoDao.java
│ │ ├── StudentDao.java
│ │ ├── StudyLogsDao.java
│ │ ├── TeachBuildInfoDao.java
│ │ └── TeacherDao.java
│ │ ├── entity
│ │ ├── Admin.java
│ │ ├── ClassInfo.java
│ │ ├── ClassTask.java
│ │ ├── Classroom.java
│ │ ├── CourseInfo.java
│ │ ├── CoursePlan.java
│ │ ├── GradeInfo.java
│ │ ├── LocationInfo.java
│ │ ├── Student.java
│ │ ├── StudyLogs.java
│ │ ├── TeachbuildInfo.java
│ │ ├── Teacher.java
│ │ ├── request
│ │ │ ├── ClassAddVO.java
│ │ │ ├── ClassTaskDTO.java
│ │ │ ├── ClassroomAddRequest.java
│ │ │ ├── ConstantInfo.java
│ │ │ ├── CourseInfoAddRequest.java
│ │ │ ├── ExerciseVO.java
│ │ │ ├── LocationSetVO.java
│ │ │ ├── PasswordVO.java
│ │ │ ├── StudentLoginRequest.java
│ │ │ ├── StudentRegisterRequest.java
│ │ │ ├── TeachCoursePlan.java
│ │ │ ├── TeachbuildAddRequest.java
│ │ │ ├── TeacherAddRequest.java
│ │ │ ├── UserInfoVO.java
│ │ │ └── UserLoginRequest.java
│ │ └── response
│ │ │ ├── ClassInfoVO.java
│ │ │ ├── CoursePlanVo.java
│ │ │ └── LocationVO.java
│ │ ├── mapper
│ │ ├── AdminMapper.xml
│ │ ├── ClassInfoMapper.xml
│ │ ├── ClassTaskMapper.xml
│ │ ├── CourseInfoMapper.xml
│ │ ├── CoursePlanMapper.xml
│ │ ├── ExerciseCategoryMapper.xml
│ │ ├── ExerciseMapper.xml
│ │ ├── GradeInfoMapper.xml
│ │ ├── LocationInfoMapper.xml
│ │ ├── LoginService.xml
│ │ ├── StudentMapper.xml
│ │ ├── StudyLogsMapper.xml
│ │ ├── TeachBuildInfoDao.xml
│ │ └── TeacherMapper.xml
│ │ ├── service
│ │ ├── AdminService.java
│ │ ├── ClassInfoService.java
│ │ ├── ClassTaskService.java
│ │ ├── ClassroomService.java
│ │ ├── CourseInfoService.java
│ │ ├── CoursePlanService.java
│ │ ├── GradeInfoService.java
│ │ ├── LocationInfoService.java
│ │ ├── StudentService.java
│ │ ├── StudyLogsService.java
│ │ ├── TeachbuildInfoService.java
│ │ ├── TeacherService.java
│ │ └── impl
│ │ │ ├── AdminServiceImpl.java
│ │ │ ├── ClassInfoServiceImpl.java
│ │ │ ├── ClassTaskServiceImpl.java
│ │ │ ├── ClassroomServiceImpl.java
│ │ │ ├── CourseInfoServiceImpl.java
│ │ │ ├── CoursePlanServiceImpl.java
│ │ │ ├── GradeInfoServiceImpl.java
│ │ │ ├── LocationInfoServiceImpl.java
│ │ │ ├── StudentServiceImpl.java
│ │ │ ├── StudyLogsServiceImpl.java
│ │ │ ├── TeachbuildInfoServiceImpl.java
│ │ │ ├── TeacherServiceImpl.java
│ │ │ └── TokenService.java
│ │ └── util
│ │ ├── AliyunUtil.java
│ │ ├── ClassUtil.java
│ │ └── TokenUtil.java
└── resources
│ ├── application-dev.yml
│ ├── application.yml
│ └── log4j.properties
└── test
└── java
└── com
└── chq
└── coursearrange
├── CoursearrangeApplicationTests.java
├── MpGenerator.java
├── controller
├── AdminTest.java
├── CourseTest.java
└── TeacherTest.java
└── service
└── impl
└── ExcelTest.java
/.gitignore:
--------------------------------------------------------------------------------
1 | HELP.md
2 | target/
3 | !.mvn/wrapper/maven-wrapper.jar
4 | !**/src/main/**
5 | !**/src/test/**
6 |
7 | ### STS ###
8 | .apt_generated
9 | .classpath
10 | .factorypath
11 | .project
12 | .settings
13 | .springBeans
14 | .sts4-cache
15 |
16 | ### IntelliJ IDEA ###
17 | .idea
18 | *.iws
19 | *.iml
20 | *.ipr
21 |
22 | ### NetBeans ###
23 | /nbproject/private/
24 | /nbbuild/
25 | /dist/
26 | /nbdist/
27 | /.nb-gradle/
28 |
29 | ### VS Code ###
30 | .vscode/
31 | <<<<<<< HEAD
32 | node_modules/
33 | *node_modules/*
34 | =======
35 | *node_modules/*
36 |
37 | >>>>>>> 9812514a29e05149744190dd95f0a9cdd623efe9
38 |
--------------------------------------------------------------------------------
/.mvn/wrapper/MavenWrapperDownloader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2007-present the original author or authors.
3 | *
4 | * Licensed under the Apache License, Version 2.0 (the "License");
5 | * you may not use this file except in compliance with the License.
6 | * You may obtain a copy of the License at
7 | *
8 | * https://www.apache.org/licenses/LICENSE-2.0
9 | *
10 | * Unless required by applicable law or agreed to in writing, software
11 | * distributed under the License is distributed on an "AS IS" BASIS,
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | * See the License for the specific language governing permissions and
14 | * limitations under the License.
15 | */
16 |
17 | import java.net.*;
18 | import java.io.*;
19 | import java.nio.channels.*;
20 | import java.util.Properties;
21 |
22 | public class MavenWrapperDownloader {
23 |
24 | private static final String WRAPPER_VERSION = "0.5.6";
25 | /**
26 | * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
27 | */
28 | private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/"
29 | + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar";
30 |
31 | /**
32 | * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
33 | * use instead of the default one.
34 | */
35 | private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
36 | ".mvn/wrapper/maven-wrapper.properties";
37 |
38 | /**
39 | * Path where the maven-wrapper.jar will be saved to.
40 | */
41 | private static final String MAVEN_WRAPPER_JAR_PATH =
42 | ".mvn/wrapper/maven-wrapper.jar";
43 |
44 | /**
45 | * Name of the property which should be used to override the default download url for the wrapper.
46 | */
47 | private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
48 |
49 | public static void main(String args[]) {
50 | System.out.println("- Downloader started");
51 | File baseDirectory = new File(args[0]);
52 | System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
53 |
54 | // If the maven-wrapper.properties exists, read it and check if it contains a custom
55 | // wrapperUrl parameter.
56 | File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
57 | String url = DEFAULT_DOWNLOAD_URL;
58 | if (mavenWrapperPropertyFile.exists()) {
59 | FileInputStream mavenWrapperPropertyFileInputStream = null;
60 | try {
61 | mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
62 | Properties mavenWrapperProperties = new Properties();
63 | mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
64 | url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
65 | } catch (IOException e) {
66 | System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
67 | } finally {
68 | try {
69 | if (mavenWrapperPropertyFileInputStream != null) {
70 | mavenWrapperPropertyFileInputStream.close();
71 | }
72 | } catch (IOException e) {
73 | // Ignore ...
74 | }
75 | }
76 | }
77 | System.out.println("- Downloading from: " + url);
78 |
79 | File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
80 | if (!outputFile.getParentFile().exists()) {
81 | if (!outputFile.getParentFile().mkdirs()) {
82 | System.out.println(
83 | "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'");
84 | }
85 | }
86 | System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
87 | try {
88 | downloadFileFromURL(url, outputFile);
89 | System.out.println("Done");
90 | System.exit(0);
91 | } catch (Throwable e) {
92 | System.out.println("- Error downloading");
93 | e.printStackTrace();
94 | System.exit(1);
95 | }
96 | }
97 |
98 | private static void downloadFileFromURL(String urlString, File destination) throws Exception {
99 | if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) {
100 | String username = System.getenv("MVNW_USERNAME");
101 | char[] password = System.getenv("MVNW_PASSWORD").toCharArray();
102 | Authenticator.setDefault(new Authenticator() {
103 | @Override
104 | protected PasswordAuthentication getPasswordAuthentication() {
105 | return new PasswordAuthentication(username, password);
106 | }
107 | });
108 | }
109 | URL website = new URL(urlString);
110 | ReadableByteChannel rbc;
111 | rbc = Channels.newChannel(website.openStream());
112 | FileOutputStream fos = new FileOutputStream(destination);
113 | fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
114 | fos.close();
115 | rbc.close();
116 | }
117 |
118 | }
119 |
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/.mvn/wrapper/maven-wrapper.jar
--------------------------------------------------------------------------------
/.mvn/wrapper/maven-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip
2 | wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar
3 |
--------------------------------------------------------------------------------
/UI/coursearrange/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [["es2015", { "modules": false }]],
3 | "plugins": [
4 | [
5 | "component",
6 | {
7 | "libraryName": "element-ui",
8 | "styleLibraryName": "theme-chalk"
9 | }
10 | ]
11 | ]
12 | }
--------------------------------------------------------------------------------
/UI/coursearrange/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_style = space
6 | indent_size = 2
7 | end_of_line = lf
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
--------------------------------------------------------------------------------
/UI/coursearrange/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules/
3 | /dist/
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Editor directories and files
9 | .idea
10 | .vscode
11 | *.suo
12 | *.ntvs*
13 | *.njsproj
14 | *.sln
15 |
--------------------------------------------------------------------------------
/UI/coursearrange/.postcssrc.js:
--------------------------------------------------------------------------------
1 | // https://github.com/michael-ciniawsky/postcss-load-config
2 |
3 | module.exports = {
4 | "plugins": {
5 | "postcss-import": {},
6 | "postcss-url": {},
7 | // to edit target browsers: use "browserslist" field in package.json
8 | "autoprefixer": {}
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/UI/coursearrange/README.md:
--------------------------------------------------------------------------------
1 | # coursearrange
2 |
3 | > A Vue.js project
4 |
5 | ## Build Setup
6 |
7 | ``` bash
8 | # install dependencies
9 | npm install
10 |
11 | # serve with hot reload at localhost:8080
12 | npm run dev
13 |
14 | # build for production with minification
15 | npm run build
16 |
17 | # build for production and view the bundle analyzer report
18 | npm run build --report
19 | ```
20 |
21 | For a detailed explanation on how things work, check out the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader).
22 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/build.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | require('./check-versions')()
3 |
4 | process.env.NODE_ENV = 'production'
5 |
6 | const ora = require('ora')
7 | const rm = require('rimraf')
8 | const path = require('path')
9 | const chalk = require('chalk')
10 | const webpack = require('webpack')
11 | const config = require('../config')
12 | const webpackConfig = require('./webpack.prod.conf')
13 |
14 | const spinner = ora('building for production...')
15 | spinner.start()
16 |
17 | rm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err => {
18 | if (err) throw err
19 | webpack(webpackConfig, (err, stats) => {
20 | spinner.stop()
21 | if (err) throw err
22 | process.stdout.write(stats.toString({
23 | colors: true,
24 | modules: false,
25 | children: false, // If you are using ts-loader, setting this to true will make TypeScript errors show up during build.
26 | chunks: false,
27 | chunkModules: false
28 | }) + '\n\n')
29 |
30 | if (stats.hasErrors()) {
31 | console.log(chalk.red(' Build failed with errors.\n'))
32 | process.exit(1)
33 | }
34 |
35 | console.log(chalk.cyan(' Build complete.\n'))
36 | console.log(chalk.yellow(
37 | ' Tip: built files are meant to be served over an HTTP server.\n' +
38 | ' Opening index.html over file:// won\'t work.\n'
39 | ))
40 | })
41 | })
42 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/check-versions.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const chalk = require('chalk')
3 | const semver = require('semver')
4 | const packageConfig = require('../package.json')
5 | const shell = require('shelljs')
6 |
7 | function exec (cmd) {
8 | return require('child_process').execSync(cmd).toString().trim()
9 | }
10 |
11 | const versionRequirements = [
12 | {
13 | name: 'node',
14 | currentVersion: semver.clean(process.version),
15 | versionRequirement: packageConfig.engines.node
16 | }
17 | ]
18 |
19 | if (shell.which('npm')) {
20 | versionRequirements.push({
21 | name: 'npm',
22 | currentVersion: exec('npm --version'),
23 | versionRequirement: packageConfig.engines.npm
24 | })
25 | }
26 |
27 | module.exports = function () {
28 | const warnings = []
29 |
30 | for (let i = 0; i < versionRequirements.length; i++) {
31 | const mod = versionRequirements[i]
32 |
33 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {
34 | warnings.push(mod.name + ': ' +
35 | chalk.red(mod.currentVersion) + ' should be ' +
36 | chalk.green(mod.versionRequirement)
37 | )
38 | }
39 | }
40 |
41 | if (warnings.length) {
42 | console.log('')
43 | console.log(chalk.yellow('To use this template, you must update following to modules:'))
44 | console.log()
45 |
46 | for (let i = 0; i < warnings.length; i++) {
47 | const warning = warnings[i]
48 | console.log(' ' + warning)
49 | }
50 |
51 | console.log()
52 | process.exit(1)
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/build/logo.png
--------------------------------------------------------------------------------
/UI/coursearrange/build/utils.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const config = require('../config')
4 | const ExtractTextPlugin = require('extract-text-webpack-plugin')
5 | const packageConfig = require('../package.json')
6 |
7 | exports.assetsPath = function (_path) {
8 | const assetsSubDirectory = process.env.NODE_ENV === 'production'
9 | ? config.build.assetsSubDirectory
10 | : config.dev.assetsSubDirectory
11 |
12 | return path.posix.join(assetsSubDirectory, _path)
13 | }
14 |
15 | exports.cssLoaders = function (options) {
16 | options = options || {}
17 |
18 | const cssLoader = {
19 | loader: 'css-loader',
20 | options: {
21 | sourceMap: options.sourceMap
22 | }
23 | }
24 |
25 | const postcssLoader = {
26 | loader: 'postcss-loader',
27 | options: {
28 | sourceMap: options.sourceMap
29 | }
30 | }
31 |
32 | // generate loader string to be used with extract text plugin
33 | function generateLoaders (loader, loaderOptions) {
34 | const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]
35 |
36 | if (loader) {
37 | loaders.push({
38 | loader: loader + '-loader',
39 | options: Object.assign({}, loaderOptions, {
40 | sourceMap: options.sourceMap
41 | })
42 | })
43 | }
44 |
45 | // Extract CSS when that option is specified
46 | // (which is the case during production build)
47 | if (options.extract) {
48 | return ExtractTextPlugin.extract({
49 | use: loaders,
50 | fallback: 'vue-style-loader'
51 | })
52 | } else {
53 | return ['vue-style-loader'].concat(loaders)
54 | }
55 | }
56 |
57 | // https://vue-loader.vuejs.org/en/configurations/extract-css.html
58 | return {
59 | css: generateLoaders(),
60 | postcss: generateLoaders(),
61 | less: generateLoaders('less'),
62 | sass: generateLoaders('sass', { indentedSyntax: true }),
63 | scss: generateLoaders('sass'),
64 | stylus: generateLoaders('stylus'),
65 | styl: generateLoaders('stylus')
66 | }
67 | }
68 |
69 | // Generate loaders for standalone style files (outside of .vue)
70 | exports.styleLoaders = function (options) {
71 | const output = []
72 | const loaders = exports.cssLoaders(options)
73 |
74 | for (const extension in loaders) {
75 | const loader = loaders[extension]
76 | output.push({
77 | test: new RegExp('\\.' + extension + '$'),
78 | use: loader
79 | })
80 | }
81 |
82 | return output
83 | }
84 |
85 | exports.createNotifierCallback = () => {
86 | const notifier = require('node-notifier')
87 |
88 | return (severity, errors) => {
89 | if (severity !== 'error') return
90 |
91 | const error = errors[0]
92 | const filename = error.file && error.file.split('!').pop()
93 |
94 | notifier.notify({
95 | title: packageConfig.name,
96 | message: severity + ': ' + error.name,
97 | subtitle: filename || '',
98 | icon: path.join(__dirname, 'logo.png')
99 | })
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/vue-loader.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const config = require('../config')
4 | const isProduction = process.env.NODE_ENV === 'production'
5 | const sourceMapEnabled = isProduction
6 | ? config.build.productionSourceMap
7 | : config.dev.cssSourceMap
8 |
9 | module.exports = {
10 | loaders: utils.cssLoaders({
11 | sourceMap: sourceMapEnabled,
12 | extract: isProduction
13 | }),
14 | cssSourceMap: sourceMapEnabled,
15 | cacheBusting: config.dev.cacheBusting,
16 | transformToRequire: {
17 | video: ['src', 'poster'],
18 | source: 'src',
19 | img: 'src',
20 | image: 'xlink:href'
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/webpack.base.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const path = require('path')
3 | const utils = require('./utils')
4 | const config = require('../config')
5 | const vueLoaderConfig = require('./vue-loader.conf')
6 |
7 | function resolve (dir) {
8 | return path.join(__dirname, '..', dir)
9 | }
10 |
11 |
12 |
13 | module.exports = {
14 | context: path.resolve(__dirname, '../'),
15 | entry: {
16 | app: './src/main.js'
17 | },
18 | output: {
19 | path: config.build.assetsRoot,
20 | filename: '[name].js',
21 | publicPath: process.env.NODE_ENV === 'production'
22 | ? config.build.assetsPublicPath
23 | : config.dev.assetsPublicPath
24 | },
25 | resolve: {
26 | extensions: ['.js', '.vue', '.json'],
27 | alias: {
28 | 'vue$': 'vue/dist/vue.esm.js',
29 | '@': resolve('src'),
30 | }
31 | },
32 | module: {
33 | rules: [
34 | {
35 | test: /\.vue$/,
36 | loader: 'vue-loader',
37 | options: vueLoaderConfig
38 | },
39 | {
40 | test: /\.js$/,
41 | loader: 'babel-loader',
42 | include: [resolve('src'), resolve('test'), resolve('node_modules/webpack-dev-server/client')]
43 | },
44 | {
45 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
46 | loader: 'url-loader',
47 | options: {
48 | limit: 10000,
49 | name: utils.assetsPath('img/[name].[hash:7].[ext]')
50 | }
51 | },
52 | {
53 | test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
54 | loader: 'url-loader',
55 | options: {
56 | limit: 10000,
57 | name: utils.assetsPath('media/[name].[hash:7].[ext]')
58 | }
59 | },
60 | {
61 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
62 | loader: 'url-loader',
63 | options: {
64 | limit: 10000,
65 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
66 | }
67 | }
68 | ]
69 | },
70 | node: {
71 | // prevent webpack from injecting useless setImmediate polyfill because Vue
72 | // source contains it (although only uses it if it's native).
73 | setImmediate: false,
74 | // prevent webpack from injecting mocks to Node native modules
75 | // that does not make sense for the client
76 | dgram: 'empty',
77 | fs: 'empty',
78 | net: 'empty',
79 | tls: 'empty',
80 | child_process: 'empty'
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/UI/coursearrange/build/webpack.dev.conf.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const utils = require('./utils')
3 | const webpack = require('webpack')
4 | const config = require('../config')
5 | const merge = require('webpack-merge')
6 | const path = require('path')
7 | const baseWebpackConfig = require('./webpack.base.conf')
8 | const CopyWebpackPlugin = require('copy-webpack-plugin')
9 | const HtmlWebpackPlugin = require('html-webpack-plugin')
10 | const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
11 | const portfinder = require('portfinder')
12 |
13 | const HOST = process.env.HOST
14 | const PORT = process.env.PORT && Number(process.env.PORT)
15 |
16 | const devWebpackConfig = merge(baseWebpackConfig, {
17 | module: {
18 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })
19 | },
20 | // cheap-module-eval-source-map is faster for development
21 | devtool: config.dev.devtool,
22 |
23 | // these devServer options should be customized in /config/index.js
24 | devServer: {
25 | clientLogLevel: 'warning',
26 | historyApiFallback: {
27 | rewrites: [
28 | { from: /.*/, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },
29 | ],
30 | },
31 | hot: true,
32 | contentBase: false, // since we use CopyWebpackPlugin.
33 | compress: true,
34 | host: HOST || config.dev.host,
35 | port: PORT || config.dev.port,
36 | open: config.dev.autoOpenBrowser,
37 | overlay: config.dev.errorOverlay
38 | ? { warnings: false, errors: true }
39 | : false,
40 | publicPath: config.dev.assetsPublicPath,
41 | proxy: config.dev.proxyTable,
42 | quiet: true, // necessary for FriendlyErrorsPlugin
43 | watchOptions: {
44 | poll: config.dev.poll,
45 | }
46 | },
47 | plugins: [
48 | new webpack.DefinePlugin({
49 | 'process.env': require('../config/dev.env')
50 | }),
51 | new webpack.HotModuleReplacementPlugin(),
52 | new webpack.NamedModulesPlugin(), // HMR shows correct file names in console on update.
53 | new webpack.NoEmitOnErrorsPlugin(),
54 | // https://github.com/ampedandwired/html-webpack-plugin
55 | new HtmlWebpackPlugin({
56 | filename: 'index.html',
57 | template: 'index.html',
58 | inject: true
59 | }),
60 | // copy custom static assets
61 | new CopyWebpackPlugin([
62 | {
63 | from: path.resolve(__dirname, '../static'),
64 | to: config.dev.assetsSubDirectory,
65 | ignore: ['.*']
66 | }
67 | ])
68 | ]
69 | })
70 |
71 | module.exports = new Promise((resolve, reject) => {
72 | portfinder.basePort = process.env.PORT || config.dev.port
73 | portfinder.getPort((err, port) => {
74 | if (err) {
75 | reject(err)
76 | } else {
77 | // publish the new Port, necessary for e2e tests
78 | process.env.PORT = port
79 | // add port to devServer config
80 | devWebpackConfig.devServer.port = port
81 |
82 | // Add FriendlyErrorsPlugin
83 | devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({
84 | compilationSuccessInfo: {
85 | messages: [`Your application is running here: http://${devWebpackConfig.devServer.host}:${port}`],
86 | },
87 | onErrors: config.dev.notifyOnErrors
88 | ? utils.createNotifierCallback()
89 | : undefined
90 | }))
91 |
92 | resolve(devWebpackConfig)
93 | }
94 | })
95 | })
96 |
--------------------------------------------------------------------------------
/UI/coursearrange/config/dev.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | const merge = require('webpack-merge')
3 | const prodEnv = require('./prod.env')
4 |
5 | module.exports = merge(prodEnv, {
6 | NODE_ENV: '"development"'
7 | })
8 |
--------------------------------------------------------------------------------
/UI/coursearrange/config/index.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | // Template version: 1.3.1
3 | // see http://vuejs-templates.github.io/webpack for documentation.
4 |
5 | const path = require('path')
6 |
7 | module.exports = {
8 | dev: {
9 |
10 | // Paths
11 | assetsSubDirectory: 'static',
12 | assetsPublicPath: '/',
13 | proxyTable: {
14 |
15 | },
16 |
17 | // Various Dev Server settings
18 | host: 'localhost', // can be overwritten by process.env.HOST
19 | port: 8081, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
20 | autoOpenBrowser: true,
21 | errorOverlay: true,
22 | notifyOnErrors: true,
23 | poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-
24 |
25 |
26 | /**
27 | * Source Maps
28 | */
29 |
30 | // https://webpack.js.org/configuration/devtool/#development
31 | devtool: 'cheap-module-eval-source-map',
32 |
33 | // If you have problems debugging vue-files in devtools,
34 | // set this to false - it *may* help
35 | // https://vue-loader.vuejs.org/en/options.html#cachebusting
36 | cacheBusting: true,
37 |
38 | cssSourceMap: true
39 | },
40 |
41 | build: {
42 | // Template for index.html
43 | index: path.resolve(__dirname, '../dist/index.html'),
44 |
45 | // Paths
46 | assetsRoot: path.resolve(__dirname, '../dist'),
47 | assetsSubDirectory: 'static',
48 | assetsPublicPath: '/',
49 |
50 | /**
51 | * Source Maps
52 | */
53 |
54 | productionSourceMap: true,
55 | // https://webpack.js.org/configuration/devtool/#production
56 | devtool: '#source-map',
57 |
58 | // Gzip off by default as many popular static hosts such as
59 | // Surge or Netlify already gzip all static assets for you.
60 | // Before setting to `true`, make sure to:
61 | // npm install --save-dev compression-webpack-plugin
62 | productionGzip: false,
63 | productionGzipExtensions: ['js', 'css'],
64 |
65 | // Run the build command with an extra argument to
66 | // View the bundle analyzer report after build finishes:
67 | // `npm run build --report`
68 | // Set to `true` or `false` to always turn it on or off
69 | bundleAnalyzerReport: process.env.npm_config_report
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/UI/coursearrange/config/prod.env.js:
--------------------------------------------------------------------------------
1 | 'use strict'
2 | module.exports = {
3 | NODE_ENV: '"production"'
4 | }
5 |
--------------------------------------------------------------------------------
/UI/coursearrange/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | coursearrange
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/UI/coursearrange/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "coursearrange",
3 | "version": "1.0.0",
4 | "description": "A Vue.js project",
5 | "author": "lequal ",
6 | "private": true,
7 | "scripts": {
8 | "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
9 | "start": "npm run dev",
10 | "build": "node build/build.js"
11 | },
12 | "dependencies": {
13 | "axios": "^0.19.2",
14 | "echarts": "^4.7.0",
15 | "element-ui": "^2.13.0",
16 | "vue": "^2.5.2",
17 | "vue-router": "^3.0.1",
18 | "vuex": "^3.1.3"
19 | },
20 | "devDependencies": {
21 | "autoprefixer": "^7.1.2",
22 | "babel-core": "^6.22.1",
23 | "babel-helper-vue-jsx-merge-props": "^2.0.3",
24 | "babel-loader": "^7.1.1",
25 | "babel-plugin-component": "^1.1.1",
26 | "babel-plugin-syntax-jsx": "^6.18.0",
27 | "babel-plugin-transform-runtime": "^6.22.0",
28 | "babel-plugin-transform-vue-jsx": "^3.5.0",
29 | "babel-preset-env": "^1.3.2",
30 | "babel-preset-es2015": "^6.24.1",
31 | "babel-preset-stage-2": "^6.22.0",
32 | "chalk": "^2.0.1",
33 | "copy-webpack-plugin": "^4.0.1",
34 | "css-loader": "^0.28.0",
35 | "extract-text-webpack-plugin": "^3.0.0",
36 | "file-loader": "^1.1.4",
37 | "friendly-errors-webpack-plugin": "^1.6.1",
38 | "html-webpack-plugin": "^2.30.1",
39 | "less": "^3.11.1",
40 | "less-loader": "^5.0.0",
41 | "node-notifier": "^5.1.2",
42 | "optimize-css-assets-webpack-plugin": "^3.2.0",
43 | "ora": "^1.2.0",
44 | "portfinder": "^1.0.13",
45 | "postcss-import": "^11.0.0",
46 | "postcss-loader": "^2.0.8",
47 | "postcss-url": "^7.2.1",
48 | "rimraf": "^2.6.0",
49 | "semver": "^5.3.0",
50 | "shelljs": "^0.7.6",
51 | "stylus-loader": "^3.0.2",
52 | "uglifyjs-webpack-plugin": "^1.1.1",
53 | "url-loader": "^0.5.8",
54 | "vue-loader": "^13.3.0",
55 | "vue-style-loader": "^3.0.1",
56 | "vue-template-compiler": "^2.5.2",
57 | "webpack": "^3.6.0",
58 | "webpack-bundle-analyzer": "^2.9.0",
59 | "webpack-dev-server": "^2.9.1",
60 | "webpack-merge": "^4.1.0"
61 | },
62 | "engines": {
63 | "node": ">= 6.0.0",
64 | "npm": ">= 3.0.0"
65 | },
66 | "browserslist": [
67 | "> 1%",
68 | "last 2 versions",
69 | "not ie <= 8"
70 | ]
71 | }
72 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
13 |
14 |
23 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/css/global.css:
--------------------------------------------------------------------------------
1 | html,body,#app {
2 | height: 100%;
3 | margin: 0;
4 | padding: 0;
5 | }
6 |
7 | .links {
8 | text-decoration:none;
9 | }
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.css:
--------------------------------------------------------------------------------
1 | @font-face {font-family: "iconfont";
2 | src: url('iconfont.eot?t=1583675614373'); /* IE9 */
3 | src: url('iconfont.eot?t=1583675614373#iefix') format('embedded-opentype'), /* IE6-IE8 */
4 | url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAN8AAsAAAAAB3AAAAMuAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqCWII8ATYCJAMMCwgABCAFhG0HNRuBBsgekiSIQAEFFKiCUFimCL7Gfvvu7oshmtQiZK+WGBLNNCQyCVIjREKmMt1L+Ed1Vi3kzh68sntmJ8N0+uDJEX7RwevAn/BMAgM8/8/h0qYlMD9QLnMNjHoBxgEFtsYSvgM5Qb8HbAO8/VpOoGncRDa7JVVN4Kww2wXihmP7wTmjUBrSQ12oVgwt4hUc1NOz7WPgJfj9+JcQziSVzOx6eFY8BHlfyV9y7FSrqstDAHM6HfhRZKwChTipNByziwKr7DRVgX1zfFUR0lRua5eAofGq1j88kiCqzNQ2WKRg4ivZYSTCHGRddWoGVUy6AF6ZuCE7ZbnTiZkgP9ZiaTWbW4zGJpOpufWGcZk5J+H55GvazNx1M+XQyA2bgnZHGtcwG/NOGDWuF56HG5t3vkg2tV5+FWXo2xCwM1w9cunYrrDtu0Z7Vzh/fczBq2f3dN5dVrRsk81um/2W0jsmjRqhbrAmizbr19tKlm79OtGnEiOZbr1k83x4g3bsdG7sAT5NfQaGJzAQVb4mwPrHZjvsumhNXYPT+DC70lZtiW+h9+zEGU8dh5I0+5a4wpszrWV7/7O+uvcy5MxouNJxrIxO62PdHfKjlyamr63vx1v/D6NcFJ3qxrraTgeWltX1lZUEjrJ3OYU+gK4MvLwgdO6xy/hb/sbwVOqjXq+sv3W3Aj6Xh7xBe1eB7knqEjzzT2B2LCoa21TmojAchmHK9h5Il8C0JrqZlgFvhkuGHzQU6oYTSGrGIKubRRbsKlS0rEFV3QY0rSgd3TKIsBOlgWULAUKf05D0eIeszxNkwb6GihFfoaov7KDpKPymbJkPzrWQ4H6Kh9DAdMQNyhJjq6lrmN6A2clCP0mzA3wLJnrOjeJj4vLhUixhMkUP/RQ2gVIGMUQWUQmshgVBRgqRtXiQxgxTqmTExjJVD4oZlEVwtYPA+lHYEGTAdAhnkEzCeOUp18LPN8BYkwn6kYaCKmULjNDjqkfixYjrgCwVSJ0KbuUUvSlYCSiKgTAImQgpAR0mWAEZolQ30sIGUTGGB/gUGWKpFNNVELO8SHy/FdBk5udIkaMolx5vL3JiPwAAAA==') format('woff2'),
5 | url('iconfont.woff?t=1583675614373') format('woff'),
6 | url('iconfont.ttf?t=1583675614373') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
7 | url('iconfont.svg?t=1583675614373#iconfont') format('svg'); /* iOS 4.1- */
8 | }
9 |
10 | .iconfont {
11 | font-family: "iconfont" !important;
12 | font-size: 16px;
13 | font-style: normal;
14 | -webkit-font-smoothing: antialiased;
15 | -moz-osx-font-smoothing: grayscale;
16 | }
17 |
18 | .iconicon:before {
19 | content: "\e63e";
20 | }
21 |
22 | .iconmima:before {
23 | content: "\e635";
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.eot
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.js:
--------------------------------------------------------------------------------
1 | !function(a){var e,d='',t=(e=document.getElementsByTagName("script"))[e.length-1].getAttribute("data-injectcss");if(t&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(e){console&&console.log(e)}}!function(e){if(document.addEventListener)if(~["complete","loaded","interactive"].indexOf(document.readyState))setTimeout(e,0);else{var t=function(){document.removeEventListener("DOMContentLoaded",t,!1),e()};document.addEventListener("DOMContentLoaded",t,!1)}else document.attachEvent&&(o=e,i=a.document,c=!1,(d=function(){try{i.documentElement.doScroll("left")}catch(e){return void setTimeout(d,50)}n()})(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,n())});function n(){c||(c=!0,o())}var o,i,c,d}(function(){var e,t,n,o,i,c;(e=document.createElement("div")).innerHTML=d,d=null,(t=e.getElementsByTagName("svg")[0])&&(t.setAttribute("aria-hidden","true"),t.style.position="absolute",t.style.width=0,t.style.height=0,t.style.overflow="hidden",n=t,(o=document.body).firstChild?(i=n,(c=o.firstChild).parentNode.insertBefore(i,c)):o.appendChild(n))})}(window);
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.json:
--------------------------------------------------------------------------------
1 | {
2 | "id": "1645753",
3 | "name": "travel",
4 | "font_family": "iconfont",
5 | "css_prefix_text": "icon",
6 | "description": "去哪儿",
7 | "glyphs": [
8 | {
9 | "icon_id": "344459",
10 | "name": "用户名",
11 | "font_class": "icon",
12 | "unicode": "e63e",
13 | "unicode_decimal": 58942
14 | },
15 | {
16 | "icon_id": "8765228",
17 | "name": "密码",
18 | "font_class": "mima",
19 | "unicode": "e635",
20 | "unicode_decimal": 58933
21 | }
22 | ]
23 | }
24 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
33 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.ttf
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.woff
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/assets/iconfonts/fonts/iconfont.woff2
--------------------------------------------------------------------------------
/UI/coursearrange/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/assets/logo.png
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/Index.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
21 |
22 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/StudentMain.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 个人中心
16 | 退出
17 |
18 | 您好,
19 | {{name}}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | 课程表
31 |
32 |
33 |
34 |
35 |
36 | 个人中心
37 |
38 |
39 |
40 |
41 |
42 | 修改密码
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 | {{time}}
55 |
56 |
57 |
58 |
59 |
113 |
114 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/components/Center.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | 加入班级
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | 保存
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
39 |
40 |
41 |
42 | 提 交
43 |
44 |
45 |
46 |
47 |
48 |
49 |
122 |
123 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/components/EmptyClassroom.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 | 预约
32 |
33 |
34 |
35 |
36 |
46 |
47 |
48 |
49 |
128 |
129 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/components/HomeHeader.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
22 |
23 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/components/Password.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | 修改
15 |
16 |
17 |
18 |
19 |
20 |
21 |
72 |
73 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/home/components/StudentCenter.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
学生个人中心
4 | 加入班级
5 | 查看班级课表
6 | 我的学习
7 | 修改密码
8 | 更新资料
9 |
10 |
11 |
12 |
28 |
29 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/images/image1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/images/image1.jpg
--------------------------------------------------------------------------------
/UI/coursearrange/src/images/image2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/images/image2.jpg
--------------------------------------------------------------------------------
/UI/coursearrange/src/images/image3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/src/images/image3.jpg
--------------------------------------------------------------------------------
/UI/coursearrange/src/main.js:
--------------------------------------------------------------------------------
1 | // The Vue build version to load with the `import` command
2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias.
3 | import Vue from 'vue';
4 | import App from './App';
5 | import router from './router';
6 | // import ElementUI from 'element-ui';
7 | import axios from 'axios';
8 | import 'element-ui/lib/theme-chalk/index.css';
9 |
10 | // 引入图标
11 | import '@/assets/iconfonts/fonts/iconfont.css';
12 |
13 | // 引入echarts
14 | import echarts from 'echarts'
15 |
16 | // 引入全局样式
17 | import './assets/css/global.css';
18 | import {
19 | Button, Select, Form, Radio, Table, Container, Message, Pagination, Dialog, Autocomplete,
20 | Submenu, Menu, MenuItem, MenuItemGroup, Input, Option, FormItem, TableColumn, Row,
21 | Icon, Dropdown, DropdownMenu, DropdownItem, Header, Aside, Main, Footer, Popover, Upload,
22 | MessageBox, Col, Cascader, Image, Link
23 | } from 'element-ui';
24 |
25 | Vue.config.productionTip = false;
26 | Vue.prototype.$axios = axios;
27 | Vue.prototype.$message = Message;
28 | Vue.prototype.$echarts = echarts
29 | Vue.prototype.$confirm = MessageBox.confirm;
30 | Vue.prototype.$prompt = MessageBox.prompt;
31 |
32 | // Vue.use(ElementUI);
33 | Vue.use(Button);
34 | Vue.use(Col);
35 | Vue.use(Cascader);
36 | Vue.use(Popover);
37 | Vue.use(Footer);
38 | Vue.use(Main);
39 | Vue.use(Upload);
40 | Vue.use(Aside);
41 | Vue.use(Header);
42 | Vue.use(DropdownItem);
43 | Vue.use(DropdownMenu);
44 | Vue.use(Dropdown);
45 | Vue.use(Icon);
46 | Vue.use(Row);
47 | Vue.use(TableColumn);
48 | Vue.use(FormItem);
49 | Vue.use(Option);
50 | Vue.use(Select);
51 | Vue.use(Form);
52 | Vue.use(Radio);
53 | Vue.use(Table);
54 | Vue.use(Container);
55 | Vue.use(Pagination);
56 | Vue.use(Dialog);
57 | Vue.use(Autocomplete);
58 | Vue.use(Submenu);
59 | Vue.use(Menu);
60 | Vue.use(MenuItem);
61 | Vue.use(MenuItemGroup);
62 | Vue.use(Input);
63 | Vue.use(Image);
64 | Vue.use(Link);
65 |
66 |
67 | new Vue({
68 | el: '#app',
69 | render: h => h(App),
70 | router,
71 | components: { App },
72 | template: ''
73 | });
74 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/manager/components/HomeWork.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
作业管理
4 |
5 |
6 |
7 |
23 |
24 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/manager/components/ModifyTeacher.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/pages/Login.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |

8 |
9 |
10 |
11 |
12 | 学生登录
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | 登录
24 | 注册账号
25 |
26 |
27 |
28 |
29 |
30 |
31 |
88 |
89 |
--------------------------------------------------------------------------------
/UI/coursearrange/src/router/index.js:
--------------------------------------------------------------------------------
1 | import Vue from 'vue';
2 | import Router from 'vue-router';
3 | import Login from '@/pages/Login';
4 | import Register from '@/pages/Register';
5 |
6 | import Admin from '@/views/loginModular/Admin';
7 | import SystemData from '@/views/systemdataModular/SystemData/';
8 | import ClassTaskList from '@/views/courseSchedulingManagement/ClassTaskList';
9 | import CourseTable from '@/views/courseSchedulingManagement/CourseTable';
10 | import TeacherList from '@/views/basicManagement/TeacherList';
11 | import ClassManager from '@/views/basicManagement/ClassManager';
12 | import StudentList from '@/views/basicManagement/StudentList';
13 | import CourseInfoList from '@/views/basicManagement/CourseInfoList';
14 | import ClassroomList from '@/views/teachingFacilities/ClassroomList';
15 | import TeachBuildingList from '@/views/teachingFacilities/TeachBuildingList';
16 | import TeachAreaSetting from '@/views/teachingFacilities/TeachAreaSetting';
17 |
18 | import ManagerMain from '@/manager/ManagerMain';
19 | import HomeWork from '@/manager/components/HomeWork';
20 | import StudentCourseTable from '@/home/components/CourseTable';
21 | import EmptyClassroom from '@/home/components/EmptyClassroom';
22 | import StudentCenter from '@/home/components/Center';
23 | import StudentPassword from '@/home/components/Password';
24 | import UpdatePass from '@/pages/components/UpdatePass';
25 | import StudentMain from '@/home/StudentMain';
26 |
27 | Vue.use(Router)
28 |
29 | const router = new Router({
30 | routes: [
31 | {
32 | path: '/',
33 | name: 'AdminLogin',
34 | component: Admin,
35 | meta: {
36 | noRequireAuth: true
37 | },
38 | },
39 | {
40 | path: '/student/login',
41 | name: 'Login',
42 | component: Login,
43 | meta: {
44 | noRequireAuth: true
45 | },
46 | },
47 | {
48 | path: '/student/register',
49 | name: 'Register',
50 | component: Register,
51 | meta: {
52 | noRequireAuth: true
53 | },
54 | },
55 | {
56 | path: '/admin/login',
57 | name: 'AdminLogin',
58 | component: Admin,
59 | meta: {
60 | noRequireAuth: true
61 | },
62 | },
63 | {
64 | path: '/student',
65 | name: 'Student',
66 | component: StudentMain,
67 | meta: {
68 | noRequireAuth: true
69 | },
70 | children: [
71 |
72 | {
73 | path: '/emptyclassroom',
74 | name: 'EmptyClassroom',
75 | component: EmptyClassroom
76 | },
77 | {
78 | path: '',
79 | name: 'CourseList-default',
80 | component: StudentCourseTable
81 | },
82 | {
83 | path: '/courseList',
84 | name: 'CourseList',
85 | component: StudentCourseTable
86 | },
87 | {
88 | path: '/center',
89 | name: 'StudentCenter',
90 | component: StudentCenter
91 | },
92 | {
93 | path: '/password',
94 | name: 'Password',
95 | component: StudentPassword
96 | }
97 | ]
98 | },
99 | {
100 | path: '/admin',
101 | name: 'Admin',
102 | component: ManagerMain,
103 | children: [
104 | {
105 | path: '/updatepass',
106 | name: 'UpdatePass',
107 | component: UpdatePass
108 | },
109 | {
110 | path: '/systemdata',
111 | name: 'SystemData',
112 | component: SystemData
113 | },
114 | {
115 | path: '/teacherlist',
116 | name: 'TeacherList',
117 | component: TeacherList
118 | },
119 | {
120 | path: '/studentlist',
121 | name: 'StudentList',
122 | component: StudentList
123 | },
124 | {
125 | path: '/teachbuildinglist',
126 | name: 'TeachBuildingList',
127 | component: TeachBuildingList
128 | },
129 | {
130 | path: '/classroomlist',
131 | name: 'ClassroomList',
132 | component: ClassroomList
133 | },
134 | {
135 | path: '/coursetable',
136 | name: 'CourseTable',
137 | component: CourseTable
138 | },
139 | {
140 | path: '/courseinfolist',
141 | name: 'CourseInfoList',
142 | component: CourseInfoList
143 | },
144 | {
145 | path: '/classtasklist',
146 | name: 'ClassTaskList',
147 | component: ClassTaskList
148 | },
149 | {
150 | path: '/classmanager',
151 | name: 'ClasssManager',
152 | component: ClassManager
153 | },
154 | {
155 | path: '/setteacharea',
156 | name: 'TeachAreaSetting',
157 | component: TeachAreaSetting
158 | },
159 | {
160 | path: '/homework',
161 | name: 'HomeWork',
162 | component: HomeWork
163 | }
164 | ]
165 | }
166 | ]
167 | })
168 |
169 | router.beforeEach((to, from, next) => {
170 | if (!to.matched.some(res => res.meta.noRequireAuth)) {// 判断是否需要登录权限
171 | if (window.localStorage.getItem('teacher') || window.localStorage.getItem("admin") ) {// 判断是否登录
172 | next()
173 | } else {
174 | next({
175 | path: '/',
176 | query: { redirect: to.fullPath }
177 | })
178 | }
179 | } else {
180 | next()
181 | }
182 | next()
183 | })
184 |
185 |
186 | export default router
--------------------------------------------------------------------------------
/UI/coursearrange/src/views/systemdataModular/SystemData.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
98 |
99 |
--------------------------------------------------------------------------------
/UI/coursearrange/static/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/chq247/CourseArrange/4ec9e365f6c55a12c588583d5ada417ecc2c5c0a/UI/coursearrange/static/.gitkeep
--------------------------------------------------------------------------------
/logs/notify-subscription.log:
--------------------------------------------------------------------------------
1 | 2020-06-04 18:56:27,855 - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
2 | 2020-06-04 18:56:27,857 - configuration key 'file.resource.loader.path' has been deprecated in favor of 'resource.loader.file.path'
3 | 2020-06-04 18:56:27,857 - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
4 | 2020-06-04 18:56:27,857 - configuration key 'input.encoding' has been deprecated in favor of 'resource.default_encoding'
5 | 2020-06-04 18:59:33,947 - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
6 | 2020-06-04 18:59:33,948 - configuration key 'file.resource.loader.path' has been deprecated in favor of 'resource.loader.file.path'
7 | 2020-06-04 18:59:33,950 - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
8 | 2020-06-04 18:59:33,950 - configuration key 'input.encoding' has been deprecated in favor of 'resource.default_encoding'
9 |
--------------------------------------------------------------------------------
/logs/notify-subscription.log‘.‘2020-05-21:
--------------------------------------------------------------------------------
1 | 2020-05-21 14:46:38,116 - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
2 | 2020-05-21 14:46:38,117 - configuration key 'file.resource.loader.path' has been deprecated in favor of 'resource.loader.file.path'
3 | 2020-05-21 14:46:38,117 - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
4 | 2020-05-21 14:46:38,118 - configuration key 'input.encoding' has been deprecated in favor of 'resource.default_encoding'
5 | 2020-05-21 15:38:52,177 - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
6 | 2020-05-21 15:38:52,178 - configuration key 'file.resource.loader.path' has been deprecated in favor of 'resource.loader.file.path'
7 | 2020-05-21 15:38:52,178 - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
8 | 2020-05-21 15:38:52,179 - configuration key 'input.encoding' has been deprecated in favor of 'resource.default_encoding'
9 |
--------------------------------------------------------------------------------
/logs/notify-subscription.log‘.‘2020-05-27:
--------------------------------------------------------------------------------
1 | 2020-05-27 09:39:02,988 - configuration key 'file.resource.loader.unicode' has been deprecated in favor of 'resource.loader.file.unicode'
2 | 2020-05-27 09:39:02,990 - configuration key 'file.resource.loader.path' has been deprecated in favor of 'resource.loader.file.path'
3 | 2020-05-27 09:39:02,990 - configuration key 'file.resource.loader.class' has been deprecated in favor of 'resource.loader.file.class'
4 | 2020-05-27 09:39:02,990 - configuration key 'input.encoding' has been deprecated in favor of 'resource.default_encoding'
5 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "CourseArrange-master",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1
5 | }
6 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/CoursearrangeApplication.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange;
2 |
3 | import org.springframework.boot.SpringApplication;
4 | import org.springframework.boot.autoconfigure.SpringBootApplication;
5 | import org.springframework.scheduling.annotation.EnableScheduling;
6 |
7 | @SpringBootApplication
8 | @EnableScheduling
9 | public class CoursearrangeApplication {
10 |
11 | public static void main(String[] args) {
12 | SpringApplication.run(CoursearrangeApplication.class, args);
13 | }
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/AuthenticationInterceptor.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import com.auth0.jwt.JWT;
4 | import com.auth0.jwt.exceptions.JWTDecodeException;
5 | import com.chq.coursearrange.service.AdminService;
6 | import com.chq.coursearrange.service.StudentService;
7 | import com.chq.coursearrange.service.TeacherService;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.lang.Nullable;
10 | import org.springframework.web.method.HandlerMethod;
11 | import org.springframework.web.servlet.HandlerInterceptor;
12 | import org.springframework.web.servlet.ModelAndView;
13 |
14 | import javax.servlet.http.HttpServletRequest;
15 | import javax.servlet.http.HttpServletResponse;
16 | import java.lang.reflect.Method;
17 |
18 | /**
19 | * @author CHQ
20 | */
21 | public class AuthenticationInterceptor implements HandlerInterceptor {
22 |
23 | @Autowired
24 | private AdminService adminService;
25 |
26 | @Autowired
27 | private StudentService studentService;
28 |
29 | @Autowired
30 | private TeacherService teacherService;
31 |
32 | @Override
33 | public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
34 | // 从 http 请求头中取出 token
35 | String token = request.getHeader("token");
36 |
37 | // 如果不是映射到方法直接通过
38 | if(!(handler instanceof HandlerMethod)){
39 | return true;
40 | }
41 | HandlerMethod handlerMethod = (HandlerMethod)handler;
42 | Method method = handlerMethod.getMethod();
43 | //检查是否有passtoken注释,有则跳过认证
44 | if (method.isAnnotationPresent(PassToken.class)) {
45 | PassToken passToken = method.getAnnotation(PassToken.class);
46 | if (passToken.required()) {
47 | return true;
48 | }
49 | }
50 |
51 | //检查有没有需要用户权限的注解
52 | if (method.isAnnotationPresent(UserLoginToken.class)) {
53 | UserLoginToken userLoginToken = method.getAnnotation(UserLoginToken.class);
54 | if (userLoginToken.required()) {
55 | // 执行认证
56 | if (token == null) {
57 | throw new RuntimeException("无token,请重新登录");
58 | }
59 | // 获取 token 中的 user id
60 | String userId;
61 | try {
62 | userId = JWT.decode(token).getAudience().get(0);
63 | } catch (JWTDecodeException j) {
64 | throw new RuntimeException("401");
65 | }
66 | // User user = userService.findUserById(userId);
67 | // if (user == null) {
68 | // throw new RuntimeException("用户不存在,请重新登录");
69 | // }
70 | // // 验证 token
71 | // JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(user.getPassword())).build();
72 | // try {
73 | // jwtVerifier.verify(token);
74 | // } catch (JWTVerificationException e) {
75 | // throw new RuntimeException("401");
76 | // }
77 | return true;
78 | }
79 | }
80 | return true;
81 | }
82 |
83 | @Override
84 | public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
85 |
86 | }
87 |
88 | @Override
89 | public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
90 |
91 | }
92 |
93 | }
94 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/GlobalExceptionHandler.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import org.slf4j.Logger;
4 | import org.slf4j.LoggerFactory;
5 | import org.springframework.web.bind.annotation.ControllerAdvice;
6 | import org.springframework.web.bind.annotation.ExceptionHandler;
7 | import org.springframework.web.bind.annotation.ResponseBody;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 |
13 | @ControllerAdvice
14 | public class GlobalExceptionHandler {
15 |
16 | Logger LOG = LoggerFactory.getLogger(GlobalExceptionHandler.class);
17 |
18 | // 对所有的异常进行相同的处理
19 | @ExceptionHandler(Exception.class)
20 | @ResponseBody
21 | public ServerResponse error(Exception e) {
22 | e.printStackTrace();
23 | LOG.error("the error message is:" + " " + e.getMessage());
24 | return ServerResponse.ofError("服务器出现异常");
25 | }
26 |
27 | // 对特定异常进行处理,更改@ExceptionHandler()中异常的类型即可
28 | // 如@ExceptionHandler(IOException.class)
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/PassToken.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | @Target({ElementType.METHOD, ElementType.TYPE})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface PassToken {
14 | boolean required() default true;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/ResponseCode.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import lombok.AllArgsConstructor;
4 | import lombok.Getter;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 |
10 | @AllArgsConstructor
11 | @Getter
12 | public enum ResponseCode {
13 |
14 | SUCCESS(0, "success"),
15 | ERROR(1, "error"),
16 | VALIDATE_FAILED(404, "参数校验失败"),
17 | UNAUTHORIZED(401, "暂未登录或token已经过期"),
18 | FORBIDDEN(403, "没有相关权限");
19 |
20 | // 响应状态码
21 | private int code;
22 |
23 | // 提示信息
24 | private String desc;
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/ServerResponse.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import com.fasterxml.jackson.annotation.JsonIgnore;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 |
9 | /**
10 | * @author CHQ
11 | */
12 |
13 | @Data
14 | @AllArgsConstructor
15 | @NoArgsConstructor
16 | public class ServerResponse {
17 |
18 | // 响应码
19 | private int code;
20 |
21 | // 信息
22 | private String message;
23 |
24 | // 数据
25 | private Object data;
26 |
27 |
28 |
29 | private ServerResponse(int code, String message) {
30 | this.code = code;
31 | this.message = message;
32 | }
33 |
34 | @JsonIgnore
35 | public boolean isSuccess() {
36 | // 0成功,1失败
37 | return this.code == ResponseCode.SUCCESS.getCode();
38 | }
39 |
40 |
41 | public static ServerResponse ofSuccess() {
42 | return new ServerResponse(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getDesc());
43 | }
44 |
45 |
46 | public static ServerResponse ofSuccess(Object obj) {
47 | return new ServerResponse(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getDesc(), obj);
48 | }
49 |
50 |
51 | public static ServerResponse ofSuccess(int code, String msg, Object obj) {
52 | return new ServerResponse(code, msg, obj);
53 | }
54 |
55 |
56 | public static ServerResponse ofSuccess(String msg) {
57 | return new ServerResponse(ResponseCode.SUCCESS.getCode(), msg);
58 | }
59 |
60 |
61 | public static ServerResponse ofSuccess(String msg, Object obj) {
62 | return new ServerResponse(ResponseCode.SUCCESS.getCode(), msg, obj);
63 | }
64 |
65 |
66 | public static ServerResponse ofError(int code, String msg, Object obj) {
67 | return new ServerResponse(code, msg, obj);
68 | }
69 |
70 |
71 | public static ServerResponse ofError() {
72 | return new ServerResponse(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getDesc());
73 | }
74 |
75 |
76 | public static ServerResponse ofError(String msg) {
77 | return new ServerResponse(ResponseCode.ERROR.getCode(), msg);
78 | }
79 |
80 |
81 | public static ServerResponse ofError(Object obj) {
82 | return new ServerResponse(ResponseCode.ERROR.getCode(),ResponseCode.ERROR.getDesc(), obj);
83 | }
84 |
85 |
86 |
87 | public static ServerResponse ofError(String msg, Object obj) {
88 | return new ServerResponse(ResponseCode.ERROR.getCode(), msg, obj);
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/TimerTask.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import org.springframework.scheduling.annotation.Scheduled;
4 | import org.springframework.stereotype.Component;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | @Component
10 | public class TimerTask {
11 |
12 | /**
13 | * 每3小时执行一次
14 | */
15 | @Scheduled(cron = "0 0 0-3 * * ? ")
16 | public void task() {
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/common/UserLoginToken.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.common;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | @Target({ElementType.METHOD, ElementType.TYPE})
12 | @Retention(RetentionPolicy.RUNTIME)
13 | public @interface UserLoginToken {
14 | boolean required() default true;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/config/CrosConfig.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.config;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import org.springframework.web.servlet.config.annotation.CorsRegistry;
6 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | @Configuration
12 | public class CrosConfig {
13 | @Bean
14 | public WebMvcConfigurer crosConfigurer() {
15 | return new WebMvcConfigurer() {
16 | @Override
17 | // 重写父类提供的跨域请求处理的接口,解决跨域问题
18 | public void addCorsMappings(CorsRegistry registry) {
19 | // 添加映射路径
20 | registry.addMapping("/**")
21 | // 放行哪些原始域
22 | .allowedOrigins("*")
23 | // 是否发送Cookie信息
24 | .allowCredentials(true)
25 | // 放行哪些原始域(请求方式)
26 | .allowedMethods("GET", "POST", "PUT", "DELETE")
27 | // 放行哪些原始域(头部信息)
28 | .allowedHeaders("*")
29 | // 暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
30 | .exposedHeaders("Header1", "Header2");
31 | }
32 | };
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/config/InterceptorConfig.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.config;
2 |
3 | import com.chq.coursearrange.common.AuthenticationInterceptor;
4 | import org.springframework.context.annotation.Bean;
5 | import org.springframework.context.annotation.Configuration;
6 | import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
7 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Configuration
13 | public class InterceptorConfig implements WebMvcConfigurer {
14 |
15 | @Override
16 | public void addInterceptors(InterceptorRegistry registry) {
17 | registry.addInterceptor(authenticationInterceptor())
18 | .addPathPatterns("/**"); // 拦截所有请求,通过判断是否有 @LoginRequired 注解决定是否需要登录
19 | }
20 |
21 | @Bean
22 | public AuthenticationInterceptor authenticationInterceptor() {
23 | return new AuthenticationInterceptor();
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/config/MyMetaObjectHandler.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.config;
2 |
3 | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
4 | import org.apache.ibatis.reflection.MetaObject;
5 | import org.springframework.context.annotation.Configuration;
6 |
7 | import java.time.LocalDateTime;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 |
13 | @Configuration
14 | public class MyMetaObjectHandler implements MetaObjectHandler {
15 |
16 | // 自动插入公公字段
17 | @Override
18 | public void insertFill(MetaObject metaObject) {
19 | if (metaObject.hasSetter("createTime")&&getFieldValByName("createTime",metaObject)==null) {
20 | setInsertFieldValByName("createTime", LocalDateTime.now(), metaObject);
21 | //setInsertFieldValByName("updateTime", LocalDateTime.now(), metaObject);
22 | }
23 | }
24 |
25 | // 自动更新公共字段
26 | @Override
27 | public void updateFill(MetaObject metaObject) {
28 | if (metaObject.hasSetter("updateTime")&&getFieldValByName("updateTime",metaObject)==null) {
29 | setUpdateFieldValByName("updateTime", LocalDateTime.now(), metaObject);
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/config/MybatisPlusConfig.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.config;
2 |
3 | import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
4 | import org.mybatis.spring.annotation.MapperScan;
5 | import org.springframework.context.annotation.Bean;
6 | import org.springframework.context.annotation.Configuration;
7 |
8 |
9 | /**
10 | * @author CHQ
11 | */
12 |
13 | @Configuration
14 | @MapperScan("com.chq.coursearrange.dao")
15 | public class MybatisPlusConfig {
16 |
17 | // 分页插件
18 | @Bean
19 | public PaginationInterceptor paginationInterceptor() {
20 | return new PaginationInterceptor();
21 | }
22 |
23 | // 逻辑删除插件,MP3.1之后不需要配置
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/config/Swagger2Config.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.config;
2 |
3 | import org.springframework.context.annotation.Bean;
4 | import org.springframework.context.annotation.Configuration;
5 | import springfox.documentation.builders.ApiInfoBuilder;
6 | import springfox.documentation.builders.PathSelectors;
7 | import springfox.documentation.builders.RequestHandlerSelectors;
8 | import springfox.documentation.service.ApiInfo;
9 | import springfox.documentation.spi.DocumentationType;
10 | import springfox.documentation.spring.web.plugins.Docket;
11 | import springfox.documentation.swagger2.annotations.EnableSwagger2;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @Configuration
17 | @EnableSwagger2
18 | public class Swagger2Config {
19 |
20 | /**
21 | * 创建API应用
22 | * apiInfo() 增加API相关信息
23 | * 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
24 | * 本例采用指定扫描的包路径来定义指定要建立API的目录。
25 | *
26 | * @return
27 | */
28 | @Bean
29 | public Docket createRestApi() {
30 | return new Docket(DocumentationType.SWAGGER_2)
31 | .apiInfo(apiInfo())
32 | .select()
33 | .apis(RequestHandlerSelectors.basePackage("com.swaggerTest.controller"))
34 | .paths(PathSelectors.any())
35 | .build();
36 | }
37 |
38 | /**
39 | * 创建该API的基本信息(这些基本信息会展现在文档页面中)
40 | * 访问地址:http://项目实际地址/swagger-ui.html
41 | * @return
42 | */
43 | private ApiInfo apiInfo() {
44 | return new ApiInfoBuilder()
45 | .title("排课系统API")
46 | .description("系统正在完善中....")
47 | .version("1.0")
48 | .build();
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/AdminController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.common.ServerResponse;
5 | import com.chq.coursearrange.entity.Admin;
6 | import com.chq.coursearrange.entity.request.PasswordVO;
7 | import com.chq.coursearrange.entity.request.UserLoginRequest;
8 | import com.chq.coursearrange.service.AdminService;
9 | import com.chq.coursearrange.service.TeacherService;
10 | import com.chq.coursearrange.service.impl.TokenService;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.web.bind.annotation.*;
13 |
14 | import java.util.HashMap;
15 | import java.util.Map;
16 |
17 | /**
18 | * @author CHQ
19 | */
20 | @RestController
21 | @RequestMapping("/admin")
22 | public class AdminController {
23 |
24 | @Autowired
25 | private AdminService adminService;
26 | @Autowired
27 | private TokenService tokenService;
28 |
29 |
30 | /**
31 | * 管理员登录
32 | * @param adminLoginRequest
33 | * @return
34 | */
35 | @PostMapping("/login")
36 | public ServerResponse adminLogin(@RequestBody UserLoginRequest adminLoginRequest) {
37 | Map map = new HashMap();
38 | Admin admin = adminService.adminLogin(adminLoginRequest.getUsername(), adminLoginRequest.getPassword());
39 | if (admin != null){
40 | String token = tokenService.getToken(admin);
41 | map.put("admin", admin);
42 | map.put("token", token);
43 | return ServerResponse.ofSuccess(map);
44 | }
45 | return ServerResponse.ofError("用户名或密码错误!");
46 | }
47 |
48 | /**
49 | * 管理员更新个人资料
50 | * @return
51 | */
52 | @PostMapping("/modify")
53 | public ServerResponse modifyAdmin(@RequestBody Admin admin) {
54 | return adminService.updateById(admin) ? ServerResponse.ofSuccess("更新成功!") : ServerResponse.ofError("更新失败!");
55 | }
56 |
57 | /**
58 | * 根据ID查询管理员信息
59 | * @param id
60 | * @return
61 | */
62 | @GetMapping("/{id}")
63 | public ServerResponse queryAdmin(@PathVariable("id") Integer id) {
64 | return ServerResponse.ofSuccess(adminService.getById(id));
65 | }
66 |
67 | /**
68 | * 管理员修改密码
69 | * @param passwordVO
70 | * @return
71 | */
72 | @PostMapping("/password")
73 | public ServerResponse updatePass(@RequestBody PasswordVO passwordVO) {
74 | System.out.println(passwordVO + "======");
75 | QueryWrapper wrapper = new QueryWrapper();
76 | wrapper.eq("id", passwordVO.getId());
77 | wrapper.eq("password", passwordVO.getOldPass());
78 | Admin admin = adminService.getOne(wrapper);
79 | if (admin == null) {
80 | return ServerResponse.ofError("旧密码错误");
81 | }
82 | // 否则进入修改密码流程
83 | admin.setPassword(passwordVO.getNewPass());
84 | boolean b = adminService.updateById(admin);
85 | if (b) {
86 | return ServerResponse.ofSuccess("密码修改成功");
87 | }
88 | return ServerResponse.ofError("密码更新失败");
89 | }
90 |
91 |
92 | }
93 |
94 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/ClassInfoController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.core.metadata.IPage;
5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 | import com.chq.coursearrange.common.ServerResponse;
7 | import com.chq.coursearrange.entity.ClassInfo;
8 | import com.chq.coursearrange.entity.Student;
9 | import com.chq.coursearrange.entity.response.ClassInfoVO;
10 | import com.chq.coursearrange.service.ClassInfoService;
11 | import com.chq.coursearrange.service.StudentService;
12 | import org.apache.commons.lang3.StringUtils;
13 | import org.springframework.beans.factory.annotation.Autowired;
14 | import org.springframework.web.bind.annotation.*;
15 |
16 | import java.io.UnsupportedEncodingException;
17 | import java.net.URLDecoder;
18 | import java.util.List;
19 |
20 | /**
21 | * @author CHQ
22 | */
23 | @RestController
24 | public class ClassInfoController {
25 |
26 | @Autowired
27 | private ClassInfoService classInfoService;
28 | @Autowired
29 | private StudentService studentService;
30 |
31 |
32 | /**
33 | * 根据年级查询所有班级
34 | * @param grade
35 | * @return
36 | */
37 | @GetMapping("/class-grade/{grade}")
38 | public ServerResponse queryClass(@PathVariable("grade") String grade) {
39 | System.out.println("33333");
40 | System.out.println(grade);
41 | QueryWrapper wrapper = new QueryWrapper().eq("remark", grade);
42 | List classInfoList = classInfoService.list(wrapper);
43 |
44 | return ServerResponse.ofSuccess(classInfoList);
45 | }
46 |
47 | /**
48 | * 根据教师名称查询教师编号
49 | * @return
50 | */
51 | @PostMapping("/classInfo/selectByClassName")
52 | public ServerResponse selectClassNo(@RequestBody String className) throws UnsupportedEncodingException {
53 | String decode = URLDecoder.decode(className,"UTF-8");
54 | String substring = decode.substring(0, decode.length() - 1);
55 | ClassInfo classInfo = classInfoService.selectByClassNo(substring);
56 | if (classInfo!=null){
57 | return ServerResponse.ofSuccess(classInfo);
58 | }
59 | return ServerResponse.ofError("查询失败");
60 | }
61 |
62 | /**
63 | * 根据班级查询学生
64 | * @param page
65 | * @param classNo
66 | * @param limit
67 | * @return
68 | */
69 | @GetMapping("/student-class/{page}/{classNo}")
70 | public ServerResponse queryStudentByClass(@PathVariable("page") Integer page,
71 | @PathVariable("classNo") String classNo,
72 | @RequestParam(defaultValue = "10") Integer limit) {
73 | QueryWrapper wrapper = new QueryWrapper<>();
74 | wrapper.orderByDesc("student_no");
75 | wrapper.like(!StringUtils.isEmpty(classNo), "class_no", classNo);
76 | Page pages = new Page<>(page, limit);
77 | IPage iPage = studentService.page(pages, wrapper);
78 | return ServerResponse.ofSuccess(iPage);
79 | }
80 |
81 |
82 | @GetMapping("/queryclassinfo/{page}")
83 | public ServerResponse queryClassInfos(@PathVariable("page") Integer page,
84 | @RequestParam(defaultValue = "10") Integer limit,
85 | @RequestParam(defaultValue = "") String gradeNo) {
86 | Integer pageNo = page;
87 | Integer size = limit;
88 | Page pg = new Page<>(pageNo, size);
89 | IPage list = null;
90 | if (gradeNo.isEmpty()){
91 | list = classInfoService.selectClassAndTeacherAll(pg);
92 | return ServerResponse.ofSuccess(list);
93 | }
94 | list = classInfoService.selectClassAndTeacher(pg, gradeNo);
95 | return ServerResponse.ofSuccess(list);
96 | }
97 |
98 |
99 | @PostMapping("/addclassinfo")
100 | public ServerResponse addClass(@RequestBody ClassInfo classInfo) {
101 | System.out.println(classInfo);
102 | if (classInfo != null){
103 | boolean isSave = classInfoService.save(classInfo);
104 | if (isSave){
105 | return ServerResponse.ofSuccess("添加班级成功");
106 | }
107 | return ServerResponse.ofError("添加班级失败");
108 | }
109 | return ServerResponse.ofError("添加班级失败");
110 | }
111 |
112 | @PostMapping("/updateClassinfo")
113 | public ServerResponse updateClass(@RequestBody ClassInfo classInfo) {
114 | if (classInfo != null){
115 | boolean isSave = classInfoService.updateById(classInfo);
116 | if (isSave){
117 | return ServerResponse.ofSuccess("编辑班级成功");
118 | }
119 | return ServerResponse.ofError("编辑班级失败");
120 | }
121 | return ServerResponse.ofError("编辑班级失败");
122 | }
123 |
124 | @DeleteMapping("/classInfo/delete/{id}")
125 | public ServerResponse delete(@PathVariable("id") Integer id) {
126 | if (id != null){
127 | boolean isSave = classInfoService.removeById(id);
128 | if (isSave){
129 | return ServerResponse.ofSuccess("添加班级成功");
130 | }
131 | return ServerResponse.ofError("添加班级失败");
132 | }
133 | return ServerResponse.ofError("添加班级失败");
134 | }
135 |
136 | }
137 |
138 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/ClassTaskController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.core.metadata.IPage;
5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 | import com.chq.coursearrange.common.ServerResponse;
7 | import com.chq.coursearrange.entity.ClassTask;
8 | import com.chq.coursearrange.service.ClassTaskService;
9 | import org.slf4j.Logger;
10 | import org.slf4j.LoggerFactory;
11 | import org.springframework.beans.factory.annotation.Autowired;
12 | import org.springframework.web.bind.annotation.*;
13 | import java.util.*;
14 |
15 | /**
16 | * @author CHQ
17 | */
18 | @RestController
19 | public class ClassTaskController {
20 |
21 | @Autowired
22 | private ClassTaskService classTaskService;
23 |
24 | /**
25 | * 查询开课任务
26 | */
27 | @GetMapping("/classtask/{page}/{semester}")
28 | public ServerResponse queryClassTask(@PathVariable("page") Integer page,
29 | @PathVariable("semester") String semester,
30 | @RequestParam(defaultValue = "10") Integer limit) {
31 | Page pages = new Page<>(page, limit);
32 | IPage ipage;
33 | if (semester != null && !semester.equals("0")){
34 | QueryWrapper wrapper = new QueryWrapper().eq("semester", semester);
35 | ipage = classTaskService.page(pages, wrapper);
36 | }else {
37 | ipage = classTaskService.page(pages);
38 | }
39 | if (ipage != null) {
40 | return ServerResponse.ofSuccess(ipage);
41 | }
42 | return ServerResponse.ofError("查询开课任务失败!");
43 | }
44 |
45 | /**
46 | * 手动添加课程任务
47 | * @param classTask
48 | * @return
49 | */
50 | @PostMapping("/addclasstask")
51 | public ServerResponse addClassTask(@RequestBody ClassTask classTask) {
52 | classTask.setDeleted(false);
53 | boolean b = classTaskService.save(classTask);
54 | if (b) {
55 | return ServerResponse.ofSuccess("添加课程任务成功");
56 | }
57 | return ServerResponse.ofError("添加课程任务失败");
58 | }
59 |
60 | /**
61 | * 修改课程任务
62 | * @param classTask
63 | * @return
64 | */
65 | @PostMapping("/updateClasstask")
66 | public ServerResponse updateClassTask(@RequestBody ClassTask classTask) {
67 | boolean b = classTaskService.updateById(classTask);
68 | if (b) {
69 | return ServerResponse.ofSuccess("修改课程任务成功");
70 | }
71 | return ServerResponse.ofError("修改课程任务失败");
72 | }
73 |
74 | /**
75 | * 删除开课任务
76 | * @param id
77 | * @return
78 | */
79 | @DeleteMapping("/deleteclasstask/{id}")
80 | public ServerResponse deleteClassTask(@PathVariable("id") Integer id) {
81 |
82 | boolean b = classTaskService.removeById(id);
83 | if (b) {
84 | return ServerResponse.ofSuccess("删除成功");
85 | }
86 | return ServerResponse.ofError("删除失败");
87 | }
88 |
89 | /**
90 | * 获得学期集合
91 | * @return
92 | */
93 | @GetMapping("/semester")
94 | public ServerResponse queryAllSemester() {
95 | QueryWrapper wrapper = new QueryWrapper<>();
96 | wrapper.select("semester");
97 | wrapper.groupBy("semester");
98 | List list = classTaskService.list(wrapper);
99 | Set set = new HashSet();
100 |
101 | for (ClassTask c : list) {
102 | set.add(c.getSemester());
103 | }
104 |
105 | return ServerResponse.ofSuccess(set);
106 | }
107 |
108 | /**
109 | * 排课算法接口,传入学期开始去查对应学期的开课任务,进行排课,排完课程后添加到course_plan表
110 | * @param semester
111 | * @return
112 | */
113 | @PostMapping("/arrange/{semester}")
114 | public ServerResponse arrange(@PathVariable("semester") String semester) {
115 | return classTaskService.classScheduling(semester);
116 | }
117 | }
118 |
119 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/CourseInfoController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.core.metadata.IPage;
5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 | import com.chq.coursearrange.common.ServerResponse;
7 | import com.chq.coursearrange.entity.CourseInfo;
8 | import com.chq.coursearrange.service.CourseInfoService;
9 | import org.springframework.beans.factory.annotation.Autowired;
10 | import org.springframework.web.bind.annotation.*;
11 |
12 | import java.io.UnsupportedEncodingException;
13 | import java.net.URLDecoder;
14 | import java.util.List;
15 |
16 | /**
17 | * @author CHQ
18 | */
19 | @RestController
20 | @RequestMapping("/courseinfo")
21 | public class CourseInfoController {
22 |
23 | @Autowired
24 | private CourseInfoService cis;
25 |
26 | /**
27 | * 查询所有课程,带分页
28 | * @return
29 | */
30 | @GetMapping("/selectCourse/{page}")
31 | public ServerResponse selectCourse(@PathVariable("page")Integer page,
32 | @RequestParam(defaultValue = "10")Integer limit){
33 | Page pages = new Page<>(page, limit);
34 | QueryWrapper wrapper = new QueryWrapper();
35 | IPage ipage = cis.page(pages, wrapper);
36 | return ServerResponse.ofSuccess(ipage);
37 | }
38 |
39 | @GetMapping("/getCourse")
40 | public ServerResponse getCourse(){
41 | List courseInfoList = cis.selectCourse();
42 | return ServerResponse.ofSuccess(courseInfoList);
43 | }
44 |
45 | /**
46 | * 根据课程名查询课程编号
47 | * @return
48 | */
49 | @PostMapping("/selectByCourseName")
50 | public ServerResponse selectByCourseName(@RequestBody String courseName) throws UnsupportedEncodingException {
51 | String decode = URLDecoder.decode(courseName,"UTF-8");
52 | String substring = decode.substring(0, decode.length() - 1);
53 | CourseInfo courseInfo = cis.selectByName(substring);
54 | if (courseInfo!=null){
55 | return ServerResponse.ofSuccess(courseInfo);
56 | }
57 | return ServerResponse.ofError("查询失败");
58 | }
59 |
60 | /**
61 | * 获取添加课程的课程编号
62 | * @return
63 | */
64 | @GetMapping("/get-no")
65 | public ServerResponse getNo() {
66 | QueryWrapper wrapper = new QueryWrapper().select("course_no").orderByDesc("course_no");
67 | List list = cis.list(wrapper);
68 | String no = String.valueOf(Integer.parseInt(list.get(0).getCourseNo()) + 1);
69 | return ServerResponse.ofSuccess(no);
70 | }
71 | }
72 |
73 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/CoursePlanController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.alibaba.fastjson.JSON;
4 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
5 | import com.chq.coursearrange.service.CourseInfoService;
6 | import com.chq.coursearrange.common.ServerResponse;
7 | import com.chq.coursearrange.entity.CourseInfo;
8 | import com.chq.coursearrange.entity.CoursePlan;
9 | import com.chq.coursearrange.entity.Teacher;
10 | import com.chq.coursearrange.entity.response.CoursePlanVo;
11 | import com.chq.coursearrange.service.CoursePlanService;
12 | import com.chq.coursearrange.service.TeacherService;
13 | import org.springframework.beans.factory.annotation.Autowired;
14 | import org.springframework.web.bind.annotation.GetMapping;
15 | import org.springframework.web.bind.annotation.PathVariable;
16 | import org.springframework.web.bind.annotation.RestController;
17 |
18 | import java.util.LinkedList;
19 | import java.util.List;
20 |
21 | /**
22 | * @author CHQ
23 | */
24 | @RestController
25 | public class CoursePlanController {
26 |
27 | @Autowired
28 | private CourseInfoService courseInfoService;
29 | @Autowired
30 | private CoursePlanService coursePlanService;
31 | @Autowired
32 | private TeacherService teacherService;
33 |
34 | /**
35 | * 根据班级查询课程表
36 | * @param classNo
37 | * @return
38 | */
39 | @GetMapping("/courseplan/{classno}")
40 | public ServerResponse queryCoursePlanByClassNo(@PathVariable("classno") String classNo) {
41 | QueryWrapper wrapper = new QueryWrapper().eq("class_no", classNo).orderByAsc("class_time");
42 | List coursePlanList = coursePlanService.list(wrapper);
43 | List coursePlanVos = new LinkedList<>();
44 | coursePlanList.forEach(v->{
45 | CoursePlanVo coursePlanVo = JSON.parseObject(JSON.toJSONString(v), CoursePlanVo.class);
46 | coursePlanVo.setCourseInfo(courseInfoService.getOne(new QueryWrapper().eq("course_no",v.getCourseNo())));
47 | coursePlanVo.setTeacher(teacherService.getOne(new QueryWrapper().eq("teacher_no",v.getTeacherNo())));
48 | coursePlanVos.add(coursePlanVo);
49 | });
50 | return ServerResponse.ofSuccess(coursePlanVos);
51 | }
52 |
53 | }
54 |
55 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/GradeInfoController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import org.springframework.web.bind.annotation.RequestMapping;
4 | import org.springframework.web.bind.annotation.RestController;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | @RestController
10 | @RequestMapping("/grade")
11 | public class GradeInfoController {
12 |
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/LocationInfoController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.common.ServerResponse;
5 | import com.chq.coursearrange.dao.LocationInfoDao;
6 | import com.chq.coursearrange.entity.LocationInfo;
7 | import com.chq.coursearrange.entity.request.LocationSetVO;
8 | import com.chq.coursearrange.entity.response.LocationVO;
9 | import com.chq.coursearrange.service.LocationInfoService;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.web.bind.annotation.*;
12 | import java.util.HashMap;
13 | import java.util.List;
14 | import java.util.Map;
15 |
16 | /**
17 | * @author CHQ
18 | */
19 | @RestController
20 | public class LocationInfoController {
21 |
22 | @Autowired
23 | private LocationInfoService lis;
24 | @Autowired
25 | private LocationInfoDao lid;
26 |
27 | /**
28 | * 新增教学区域
29 | * @return
30 | */
31 | @PostMapping("/setteacharea")
32 | public ServerResponse setTeachArea(@RequestBody() LocationSetVO l) {
33 | QueryWrapper wrapper = new QueryWrapper();
34 | wrapper.eq("teachbuild_no", l.getTeachBuildNo());
35 | wrapper.eq("grade_no", l.getGradeNo());
36 | LocationInfo locationInfo = new LocationInfo();
37 | if (lis.getOne(wrapper) != null) {
38 | return ServerResponse.ofError("该教学区域已经设置过了!");
39 | }
40 | locationInfo.setTeachbuildNo(l.getTeachBuildNo());
41 | locationInfo.setGradeNo(l.getGradeNo());
42 | boolean b = lis.save(locationInfo);
43 | if (b) {
44 | return ServerResponse.ofSuccess("设置教学区域成功");
45 | }
46 | return ServerResponse.ofError("设置教学区域失败");
47 | }
48 |
49 | /**
50 | * 查询所有的教学区域安排信息
51 | * @return
52 | */
53 | @GetMapping("/locations/{page}")
54 | public ServerResponse queryLocationInfo(@PathVariable("page") Integer page, @RequestParam(defaultValue = "10") Integer limit) {
55 | Map map = new HashMap<>();
56 | List list = lid.locations((page - 1) * limit, limit);
57 | int total = lid.count();
58 | map.put("records", list);
59 | map.put("total", total);
60 | return ServerResponse.ofSuccess(map);
61 | }
62 |
63 | /**
64 | * 根据id删除教学区域信息
65 | * @param id
66 | * @return
67 | */
68 | @DeleteMapping("/location/delete/{id}")
69 | public ServerResponse delete(@PathVariable("id") Integer id) {
70 | boolean b = lis.removeById(id);
71 | if (b) {
72 | return ServerResponse.ofSuccess("删除成功");
73 | }
74 | return ServerResponse.ofError("删除失败");
75 | }
76 | }
77 |
78 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/StudyLogsController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.common.ServerResponse;
5 | import com.chq.coursearrange.entity.StudyLogs;
6 | import com.chq.coursearrange.service.StudyLogsService;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.web.bind.annotation.*;
9 |
10 | import java.util.List;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @RestController
16 | @RequestMapping("/studylogs")
17 | public class StudyLogsController {
18 |
19 | @Autowired
20 | private StudyLogsService sls;
21 |
22 | /**
23 | * 添加或更新学习进度
24 | * @param s
25 | * @return
26 | */
27 | @PostMapping("/add")
28 | public ServerResponse addLogs(@RequestBody StudyLogs s) {
29 | boolean b = sls.saveOrUpdate(s);
30 | if (b) {
31 | return ServerResponse.ofSuccess();
32 | }
33 | return ServerResponse.ofError();
34 | }
35 |
36 | /**
37 | * 根据学生id获取学习记录,上次看到哪个视频了
38 | */
39 | @GetMapping("/get/{id}")
40 | public ServerResponse getLog(@PathVariable("id") Integer id) {
41 | List list = sls.list(new QueryWrapper().eq("student_id", id));
42 | return ServerResponse.ofSuccess(list);
43 | }
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/SystemController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.chq.coursearrange.common.ServerResponse;
4 | import com.chq.coursearrange.service.*;
5 | import org.springframework.beans.factory.annotation.Autowired;
6 | import org.springframework.web.bind.annotation.GetMapping;
7 | import org.springframework.web.bind.annotation.RestController;
8 | import java.text.SimpleDateFormat;
9 | import java.util.Calendar;
10 | import java.util.Date;
11 | import java.util.HashMap;
12 | import java.util.Map;
13 |
14 | /**
15 | * @author CHQ
16 | */
17 | @RestController
18 | public class SystemController {
19 |
20 | @Autowired
21 | private TeacherService teacherService;
22 | @Autowired
23 | private StudentService studentService;
24 | @Autowired
25 | private CourseInfoService courseInfoService;
26 | @Autowired
27 | private ClassInfoService classInfoService;
28 | @Autowired
29 | private ClassTaskService classTaskService;
30 | @Autowired
31 | private TeachbuildInfoService teachbuildInfoService;
32 | @Autowired
33 | private ClassroomService classroomService;
34 |
35 |
36 | @GetMapping("/systemdata")
37 | public ServerResponse systemData() {
38 | Map map = new HashMap<>();
39 | int taacherSize = teacherService.getSize();
40 | int courseSize = courseInfoService.getSize();
41 | int classeSize = classInfoService.getSize();
42 | int teachbuilds = teachbuildInfoService.count();
43 | int classrooms = classroomService.count();
44 | int classtasks = classTaskService.count();
45 | int studentSize = studentService.getSize();
46 | Calendar cal = Calendar.getInstance();
47 | cal.add(Calendar.DATE,-1);
48 | Date d = cal.getTime();
49 | SimpleDateFormat sp = new SimpleDateFormat("yyyy-MM-dd");
50 | String yesday = sp.format(d);
51 | int teacherReg = teacherService.getTeacherReg(yesday);
52 | int studentReg = studentService.getStudentReg(yesday);
53 | map.put("teachers", taacherSize);
54 | map.put("students", studentSize);
55 | map.put("classes", classeSize);
56 | map.put("classrooms", classrooms);
57 | map.put("teachbuilds", teachbuilds);
58 | map.put("courses", courseSize);
59 | map.put("classtasks", classtasks);
60 | map.put("teacherReg", teacherReg);
61 | map.put("studentReg", studentReg);
62 | return ServerResponse.ofSuccess(map);
63 | }
64 |
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/controller/TeachBuildInfoController.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.core.metadata.IPage;
5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
6 | import com.chq.coursearrange.common.ServerResponse;
7 | import com.chq.coursearrange.entity.TeachbuildInfo;
8 | import com.chq.coursearrange.entity.request.TeachbuildAddRequest;
9 | import com.chq.coursearrange.service.TeachbuildInfoService;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.web.bind.annotation.*;
12 |
13 | import java.util.List;
14 |
15 | /**
16 | * @author CHQ
17 | */
18 | @RestController
19 | @RequestMapping("/teachbuildinfo")
20 | public class TeachBuildInfoController {
21 |
22 | @Autowired
23 | private TeachbuildInfoService teachBuildInfoService;
24 |
25 | /**
26 | * 分页查询所有教学楼
27 | * @return
28 | */
29 | @GetMapping("/list/{page}")
30 | public ServerResponse queryTeachbuilding(@PathVariable("page") Integer page,
31 | @RequestParam(defaultValue = "10") Integer limit) {
32 | Page pages = new Page<>(page, limit);
33 | QueryWrapper wrapper = new QueryWrapper().orderByAsc("teach_build_no");
34 | IPage ipage = teachBuildInfoService.page(pages, wrapper);
35 | if (ipage != null) {
36 | return ServerResponse.ofSuccess(ipage);
37 | }
38 | return ServerResponse.ofError("查询失败");
39 | }
40 |
41 | /**
42 | * 查询所有教学楼
43 | * @return
44 | */
45 | @GetMapping("/list")
46 | public ServerResponse queryallTeachbuilding() {
47 |
48 | List list = teachBuildInfoService.list();
49 | return ServerResponse.ofSuccess(list);
50 | }
51 |
52 | /**
53 | * 根据id删除教学楼
54 | * @param id
55 | * @return
56 | */
57 | @DeleteMapping("/delete/{id}")
58 | public ServerResponse deleteTeachbuilding(@PathVariable("id") Integer id) {
59 | boolean b = teachBuildInfoService.removeById(id);
60 | if (b) {
61 | return ServerResponse.ofSuccess("删除成功");
62 | }
63 | return ServerResponse.ofError("删除失败");
64 | }
65 |
66 | /**
67 | * 添加教学楼
68 | * @param t
69 | * @return
70 | */
71 | @PostMapping("/add")
72 | public ServerResponse addTeachbuilding(@RequestBody TeachbuildAddRequest t) {
73 | System.out.println(t);
74 | TeachbuildInfo t1 = new TeachbuildInfo();
75 | t1.setTeachBuildNo(t.getTeachBuildNo());
76 | t1.setTeachBuildName(t.getTeachBuildName());
77 | t1.setTeachBuildLocation(t.getTeachBuildLocation());
78 | boolean b = teachBuildInfoService.save(t1);
79 | if (b) {
80 | return ServerResponse.ofSuccess("添加成功");
81 | }
82 | return ServerResponse.ofError("添加失败");
83 | }
84 |
85 | /**
86 | * 根据id查询
87 | * @param id
88 | * @return
89 | */
90 | @GetMapping("/select/{id}")
91 | public ServerResponse queryTeachBuildingById(@PathVariable("id") Integer id) {
92 | return ServerResponse.ofSuccess(teachBuildInfoService.getById(id));
93 | }
94 |
95 | /**
96 | * 更新教学楼
97 | * @param t
98 | * @return
99 | */
100 | @PostMapping("/modify/{id}")
101 | public ServerResponse modifyTeacher(@PathVariable("id") Integer id, @RequestBody TeachbuildInfo t) {
102 | boolean b = teachBuildInfoService.update(t, new QueryWrapper().eq("id", id));
103 | if (b) {
104 | return ServerResponse.ofSuccess("更新成功");
105 | }
106 | return ServerResponse.ofError("更新失败");
107 | }
108 |
109 | }
110 |
111 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/AdminDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.Admin;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Select;
8 |
9 | /**
10 | *
11 | * Mapper 接口
12 | *
13 | *
14 | * @author CHQ
15 | */
16 | @Mapper
17 | public interface AdminDao extends BaseMapper {
18 |
19 | @Select("SELECT * FROM tb_admin WHERE admin_no=#{account} AND password=#{password}" +
20 | " UNION" +
21 | " SELECT * FROM tb_admin WHERE username=#{account} AND password=#{password}" +
22 | " UNION" +
23 | " SELECT * FROM tb_admin WHERE realname=#{account} AND password=#{password}")
24 | Admin adminLogin(@Param("account") String account, @Param("password") String password);
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/ClassInfoDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.baomidou.mybatisplus.core.metadata.IPage;
4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5 | import com.chq.coursearrange.entity.ClassInfo;
6 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
7 | import com.chq.coursearrange.entity.response.ClassInfoVO;
8 | import org.apache.ibatis.annotations.Mapper;
9 | import org.apache.ibatis.annotations.Param;
10 | import org.apache.ibatis.annotations.Select;
11 |
12 | import java.util.List;
13 |
14 | /**
15 | *
16 | * Mapper 接口
17 | *
18 | * @author CHQ
19 | */
20 | @Mapper
21 | public interface ClassInfoDao extends BaseMapper {
22 |
23 | // 获得班级的人数
24 | @Select("select num from tb_class_info where class_no = #{classNo}")
25 | int selectStuNum(@Param("classNo") String classNo);
26 |
27 | @Select("SELECT tci.id,tgi.grade_name,tci.class_no,tci.class_name,t.realname,tci.num FROM tb_class_info tci join tb_teacher t on tci.teacher = t.id join tb_grade_info tgi on tci.remark = tgi.grade_no where tgi.grade_no = ${gradeNo} limit ${page}, ${limit}")
28 | List queryClassInfo(Integer page, Integer limit, String gradeNo);
29 |
30 | @Select("SELECT tci.id,tgi.grade_name,tci.class_no,tci.class_name,t.realname,tci.num FROM tb_class_info tci join tb_teacher t on tci.teacher = t.id join tb_grade_info tgi on tci.remark = tgi.grade_no limit ${page}, ${limit}")
31 | List queryClassInfos(Integer page, Integer limit);
32 |
33 | @Select("SELECT count(tci.id) FROM tb_class_info tci join tb_teacher t on tci.teacher = t.id join tb_grade_info tgi on tci.remark = tgi.grade_no where tgi.grade_no = ${gradeNo}")
34 | int count1(String gradeNo);
35 |
36 | @Select("SELECT count(tci.id) FROM tb_class_info tci join tb_teacher t on tci.teacher = t.id join tb_grade_info tgi on tci.remark = tgi.grade_no")
37 | int count2();
38 |
39 | @Select("select tci.*, tgi.grade_name, tt.realname from tb_class_info tci left JOIN tb_grade_info tgi on tci.remark = tgi.grade_no LEFT JOIN tb_teacher tt on tt.id = tci.teacher where tci.remark = #{gradeNo} and tci.deleted = 0")
40 | IPage selectClassAndTeacher(Page pg, @Param("gradeNo") String gradeNo);
41 |
42 | @Select("select tci.*, tgi.grade_name, tt.realname from tb_class_info tci left JOIN tb_grade_info tgi on tci.remark = tgi.grade_no LEFT JOIN tb_teacher tt on tt.id = tci.teacher where tci.deleted = 0")
43 | IPage selectClassAndTeacherAll(Page pg);
44 |
45 | @Select("select count(*) from tb_class_info")
46 | int getSize();
47 |
48 | @Select("select * from tb_class_info where class_name = #{classNo}")
49 | ClassInfo selectByClassNo(@Param("classNo") String classNo);
50 | }
51 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/ClassTaskDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.ClassTask;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Select;
8 | import org.apache.ibatis.annotations.Update;
9 | import org.springframework.stereotype.Component;
10 |
11 | import java.util.List;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @Component
17 | @Mapper
18 | public interface ClassTaskDao extends BaseMapper {
19 |
20 | // 查询指定学期的开课任务
21 | // @Select("SELECT * FROM tb_class_task where semester = #{semester}")
22 | List selectBySemester(ClassTask classTask);
23 |
24 | @Select("SELECT distinct class_no FROM tb_class_task")
25 | List selectClassNo();
26 |
27 | // 可能这里是columnName没传进来
28 | @Select("select distinct ${columnName} from tb_class_task")
29 | List selectByColumnName(@Param("columnName") String columnName);
30 |
31 | @Select("select distinct grade_no from tb_class_task")
32 | List selectByGradeNo();
33 |
34 | @Update("truncate tb_class_task")
35 | void clearClassTaskOld();
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/ClassroomDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.Classroom;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Param;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | public interface ClassroomDao extends BaseMapper {
14 |
15 | // 查询某个教学楼下的教室列表
16 | @Select("select * from tb_classroom where teachbuild_no = #{teachbuildNo}")
17 | List selectByTeachbuildNo(@Param("teachbuildNo") String teachbuildNo);
18 |
19 | // @Select("select * from tb_classroom where teachbuild_no in #{teachBuildNoList}") // 这里肯定需要优化的
20 | // List selectByTeachbuildNoList(List teachBuildNoList);
21 | }
22 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/CourseInfoDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.CourseInfo;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | /**
9 | * Mapper 接口
10 | * @author CHQ
11 | */
12 | @Mapper
13 | public interface CourseInfoDao extends BaseMapper {
14 |
15 | @Select("select count(*) from tb_course_info")
16 | int getSize();
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/CoursePlanDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.CoursePlan;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Insert;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Update;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | public interface CoursePlanDao extends BaseMapper {
13 |
14 | // 将上课计划插入上课计划的表中
15 | // @Insert("insert into tb_course_plan ")
16 | // void insertCoursePlan(CoursePlan coursePlan);
17 |
18 | // 插入课程计划
19 |
20 | @Insert("insert into tb_course_plan(grade_no, class_no, course_no, teacher_no, classroom_no, class_time, semester) values(#{grade_no}, #{class_no}, #{course_no}, #{teacher_no}, #{classroom_no}, #{class_time}, #{semester})")
21 | void insertCoursePlan(@Param("grade_no") String grade_no, @Param("class_no") String class_no, @Param("course_no") String course_no,
22 | @Param("teacher_no") String teacher_no, @Param("classroom_no") String classroom_no, @Param("class_time") String class_time, @Param("semester") String semester);
23 |
24 | @Update("truncate tb_course_plan")
25 | void deleteAllPlan();
26 | }
27 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/GradeInfoDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.GradeInfo;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 |
6 | /**
7 | *
8 | * Mapper 接口
9 | *
10 | * @author CHQ
11 | */
12 | public interface GradeInfoDao extends BaseMapper {
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/LocationInfoDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.LocationInfo;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import com.chq.coursearrange.entity.response.LocationVO;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | public interface LocationInfoDao extends BaseMapper {
14 |
15 | // @Select("select ttbi.teach_build_no, ttbi.teach_build_name, tgi.grade_no,tgi.grade_name from tb_teach_build_info ttbi join tb_location_info tli on tli.teachbuild_no = ttbi.teach_build_no join tb_grade_info tgi on tli.grade_no = tgi.grade_no limit ${page}, ${limit}")
16 | // List locations(Integer page, Integer limit);
17 |
18 | @Select("select tli.id, ttbi.teach_build_no, ttbi.teach_build_name, tgi.grade_no,tgi.grade_name from tb_teach_build_info ttbi join tb_location_info tli on tli.teachbuild_no = ttbi.teach_build_no join tb_grade_info tgi on tli.grade_no = tgi.grade_no where tli.deleted = 0 limit ${page}, ${limit}")
19 | List locations(Integer page, Integer limit);
20 |
21 | @Select("select count(*) from tb_teach_build_info ttbi join tb_location_info tli on tli.teachbuild_no = ttbi.teach_build_no join tb_grade_info tgi on tli.grade_no = tgi.grade_no")
22 | int count();
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/StudentDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.Student;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Param;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | public interface StudentDao extends BaseMapper {
12 |
13 | @Select("SELECT * FROM tb_student WHERE student_no=#{account} AND password=#{password}" +
14 | " UNION" +
15 | " SELECT * FROM tb_student WHERE username=#{account} AND password=#{password}" +
16 | " UNION" +
17 | " SELECT * FROM tb_student WHERE realname=#{account} AND password=#{password}")
18 | Student studentLogin(@Param("account") String username, @Param("password") String password);
19 |
20 | @Select("select count(*) from tb_student where date(create_time) = #{yesday}")
21 | int studentReg(@Param("yesday") String yesday);
22 |
23 | @Select("select count(*) from tb_student")
24 | int getSize();
25 | }
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/StudyLogsDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.StudyLogs;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface StudyLogsDao extends BaseMapper {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/TeachBuildInfoDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.TeachbuildInfo;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Param;
6 | import org.apache.ibatis.annotations.Select;
7 |
8 | import java.util.List;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | public interface TeachBuildInfoDao extends BaseMapper {
14 |
15 | @Select("select teachbuild_no from tb_location_info where grade_no = #{gradeNo}")
16 | String selectBuildNo(@Param("gradeNo") String gradeNo);
17 |
18 | @Select("select teachbuild_no from tb_location_info where grade_no = #{gradeNo}")
19 | List selectTeachBuildList(@Param("gradeNo") String gradeNo);
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/dao/TeacherDao.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.dao;
2 |
3 | import com.chq.coursearrange.entity.Teacher;
4 | import com.baomidou.mybatisplus.core.mapper.BaseMapper;
5 | import org.apache.ibatis.annotations.Mapper;
6 | import org.apache.ibatis.annotations.Param;
7 | import org.apache.ibatis.annotations.Select;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Mapper
13 | public interface TeacherDao extends BaseMapper {
14 |
15 | @Select("SELECT * FROM tb_teacher WHERE teacher_no=#{account} AND password=#{password}" +
16 | " UNION" +
17 | " SELECT * FROM tb_teacher WHERE username=#{account} AND password=#{password}" +
18 | " UNION" +
19 | " SELECT * FROM tb_teacher WHERE realname=#{account} AND password=#{password}")
20 | Teacher teacherLogin(@Param("account") String account, @Param("password") String password);
21 |
22 | @Select("select count(*) from tb_teacher where date(create_time) = #{yesday}")
23 | int teacherReg(@Param("yesday") String yesday);
24 |
25 | @Select("select count(*) from tb_teacher")
26 | int getSize();
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/Admin.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.FieldFill;
4 | import com.baomidou.mybatisplus.annotation.TableField;
5 | import com.baomidou.mybatisplus.annotation.TableLogic;
6 | import com.baomidou.mybatisplus.annotation.TableName;
7 | import com.baomidou.mybatisplus.extension.activerecord.Model;
8 | import lombok.AllArgsConstructor;
9 | import lombok.Data;
10 | import lombok.NoArgsConstructor;
11 |
12 | import java.time.LocalDateTime;
13 | import java.io.Serializable;
14 |
15 | /**
16 | * @author CHQ
17 | */
18 |
19 | @TableName("tb_admin")
20 | @AllArgsConstructor
21 | @NoArgsConstructor
22 | @Data
23 | public class Admin extends Model {
24 |
25 | private static final long serialVersionUID=1L;
26 |
27 | /**
28 | * id
29 | */
30 | private Integer id;
31 |
32 | /**
33 | * 管理员编号
34 | */
35 | private String adminNo;
36 |
37 | /**
38 | * 用户名
39 | */
40 | private String username;
41 |
42 | /**
43 | * 密码
44 | */
45 | private String password;
46 |
47 | /**
48 | * 真实姓名
49 | */
50 | private String realname;
51 |
52 | /**
53 | * 用户类型1
54 | */
55 | private Integer userType;
56 |
57 | /**
58 | * 职称
59 | */
60 | private String jobtitle;
61 |
62 | /**
63 | * 教授科目
64 | */
65 | private String teach;
66 |
67 | /**
68 | * 联系电话
69 | */
70 | private String telephone;
71 |
72 | /**
73 | * 电子邮件
74 | */
75 | private String email;
76 |
77 | /**
78 | * 证件
79 | */
80 | private String license;
81 |
82 | /**
83 | * 年龄
84 | */
85 | private Integer age;
86 |
87 | /**
88 | * 头像
89 | */
90 | private String avatar;
91 |
92 | /**
93 | * 地址
94 | */
95 | private String address;
96 |
97 | /**
98 | * 签名
99 | */
100 | private String description;
101 |
102 | /**
103 | * 备注
104 | */
105 | private String remark;
106 |
107 | /**
108 | * 优先级
109 | */
110 | private Integer piority;
111 |
112 | /**
113 | * 权限,默认为1(普通管理员) 0为超级管理员,登录的时候需要进行验证
114 | */
115 | private Integer power;
116 |
117 | /**
118 | * 类型
119 | */
120 | private Integer type;
121 |
122 | /**
123 | * 账号状态
124 | */
125 | private Integer status;
126 |
127 | @TableLogic
128 | private Integer deleted;
129 |
130 | @TableField(fill = FieldFill.INSERT)
131 | private LocalDateTime createTime;
132 |
133 | @TableField(fill = FieldFill.INSERT_UPDATE)
134 | private LocalDateTime updateTime;
135 |
136 | @Override
137 | protected Serializable pkVal() {
138 | return this.id;
139 | }
140 |
141 |
142 | }
143 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/ClassInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_class_info")
16 | @AllArgsConstructor
17 | @NoArgsConstructor
18 | @Data
19 | public class ClassInfo extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id,班级表
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 班级编号
31 | */
32 | private String classNo;
33 |
34 | /**
35 | * 班级名称
36 | */
37 | private String className;
38 |
39 | /**
40 | * 班级人数
41 | */
42 | private Integer num;
43 |
44 | /**
45 | * 班主任id
46 | */
47 | private Integer teacher;
48 |
49 | /**
50 | * 备注
51 | */
52 | private String remark;
53 |
54 | @TableLogic
55 | private Integer deleted;
56 |
57 | @TableField(fill = FieldFill.INSERT)
58 | private LocalDateTime createTime;
59 |
60 | @TableField(fill = FieldFill.INSERT_UPDATE)
61 | private LocalDateTime updateTime;
62 |
63 | @Override
64 | protected Serializable pkVal() {
65 | return this.id;
66 | }
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/ClassTask.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import cn.afterturn.easypoi.excel.annotation.Excel;
4 | import cn.afterturn.easypoi.excel.annotation.ExcelIgnore;
5 | import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
6 | import com.baomidou.mybatisplus.annotation.*;
7 | import com.baomidou.mybatisplus.extension.activerecord.Model;
8 | import lombok.AllArgsConstructor;
9 | import lombok.Data;
10 | import lombok.NoArgsConstructor;
11 |
12 | import java.time.LocalDateTime;
13 | import java.io.Serializable;
14 |
15 | /**
16 | * @author CHQ
17 | */
18 | @TableName("tb_class_task")
19 | @Data
20 | @AllArgsConstructor
21 | @NoArgsConstructor
22 | @ExcelTarget("课程计划")
23 | public class ClassTask extends Model {
24 |
25 | private static final long serialVersionUID=1L;
26 |
27 | /**
28 | * id,即将要上课的,需要进行排课的
29 | */
30 | @ExcelIgnore
31 | @TableId(value = "id", type = IdType.AUTO)
32 | private Integer id;
33 |
34 | /**
35 | * 学期
36 | */
37 | @Excel(name = "学期")
38 | @TableField("semester")
39 | private String semester;
40 |
41 | /**
42 | * 年级编号
43 | */
44 | @Excel(name = "年级")
45 | @TableField("grade_no")
46 | private String gradeNo;
47 |
48 | /**
49 | * 班级编号
50 | */
51 | @TableField("class_no")
52 | @Excel(name = "班级")
53 | private String classNo;
54 |
55 | @TableField("class_name")
56 | @Excel(name = "班级")
57 | private String className;
58 |
59 | /**
60 | * 课程编号
61 | */
62 | @TableField("course_no")
63 | @Excel(name = "课程编号")
64 | private String courseNo;
65 |
66 | /**
67 | * 课程名称
68 | */
69 | @TableField("course_name")
70 | @Excel(name = "课程名")
71 | private String courseName;
72 |
73 | /**
74 | * 讲师编号
75 | */
76 | @TableField("teacher_no")
77 | @Excel(name = "讲师编号")
78 | private String teacherNo;
79 |
80 | /**
81 | * 讲师名字
82 | */
83 | @TableField("realname")
84 | @Excel(name = "讲师姓名")
85 | private String realname;
86 |
87 | /**
88 | * 课程属性
89 | */
90 | @TableField("courseAttr")
91 | @Excel(name = "课程属性")
92 | private String courseAttr;
93 |
94 | /**
95 | * 学生人数
96 | */
97 | @TableField("studentNum")
98 | @Excel(name = "学生人数")
99 | private Integer studentNum;
100 |
101 | /**
102 | * 周数
103 | */
104 | @TableField("weeks_sum")
105 | @Excel(name = "周数")
106 | private Integer weeksSum;
107 |
108 | /**
109 | * 周学时,偶数
110 | */
111 | @TableField("weeks_number")
112 | @Excel(name = "周学时")
113 | private Integer weeksNumber;
114 |
115 | /**
116 | * 是否固定上课时间
117 | */
118 | @TableField("isFix")
119 | @Excel(name = "是否固定上课时间")
120 | private String isFix;
121 |
122 | /**
123 | * 2位为一个时间编号
124 | */
125 | @TableField("class_time")
126 | @Excel(name = "上课时间")
127 | private String classTime;
128 |
129 | @ExcelIgnore
130 | @TableLogic
131 | private Boolean deleted;
132 |
133 | @ExcelIgnore
134 | @TableField(fill = FieldFill.INSERT)
135 | private LocalDateTime createTime;
136 |
137 | @ExcelIgnore
138 | @TableField(fill = FieldFill.INSERT_UPDATE)
139 | private LocalDateTime updateTime;
140 |
141 |
142 |
143 |
144 | @Override
145 | protected Serializable pkVal() {
146 | return this.id;
147 | }
148 |
149 |
150 | }
151 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/Classroom.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.Data;
6 |
7 | import java.time.LocalDateTime;
8 | import java.io.Serializable;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | @TableName("tb_classroom")
14 | @Data
15 | public class Classroom extends Model {
16 |
17 | private static final long serialVersionUID=1L;
18 |
19 | /**
20 | * 教室id
21 | */
22 | @TableId(value = "id", type = IdType.AUTO)
23 | private Integer id;
24 |
25 | /**
26 | * 教室编号
27 | */
28 | private String classroomNo;
29 |
30 | /**
31 | * 教室名称
32 | */
33 | private String classroomName;
34 |
35 | /**
36 | * 所在教学楼编号
37 | */
38 | private String teachbuildNo;
39 |
40 | /**
41 | * 教室人数容量
42 | */
43 | private Integer capacity;
44 |
45 | /**
46 | * 教室属性
47 | */
48 | private String attr;
49 |
50 | /**
51 | * 备注
52 | */
53 | private String remark;
54 |
55 | /**
56 | * 逻辑删除(默认0显示,1删除)
57 | */
58 | @TableLogic
59 | @TableField("deleted")
60 | private Integer deleted;
61 |
62 | @TableField(fill = FieldFill.INSERT)
63 | private LocalDateTime createTime;
64 |
65 | @TableField(fill = FieldFill.INSERT_UPDATE)
66 | private LocalDateTime updateTime;
67 |
68 |
69 |
70 | @Override
71 | protected Serializable pkVal() {
72 | return this.id;
73 | }
74 |
75 | }
76 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/CourseInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_course_info")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class CourseInfo extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 课程编号
31 | */
32 | private String courseNo;
33 |
34 | /**
35 | * 课程名
36 | */
37 | private String courseName;
38 |
39 | /**
40 | * 课程属性
41 | */
42 | private String courseAttr;
43 |
44 | /**
45 | * 出版社
46 | */
47 | private String publisher;
48 |
49 | /**
50 | * 课程状态
51 | */
52 | private Integer status;
53 |
54 | /**
55 | * 优先级
56 | */
57 | private Integer piority;
58 |
59 | /**
60 | * 备注
61 | */
62 | private String remark;
63 |
64 | /**
65 | * 逻辑删除
66 | */
67 | @TableLogic
68 | @TableField("deleted")
69 | private Integer deleted;
70 |
71 | @TableField(fill = FieldFill.INSERT)
72 | private LocalDateTime createTime;
73 |
74 | @TableField(fill = FieldFill.INSERT_UPDATE)
75 | private LocalDateTime updateTime;
76 |
77 | @Override
78 | protected Serializable pkVal() {
79 | return this.id;
80 | }
81 |
82 | }
83 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/CoursePlan.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 | import java.time.LocalDateTime;
9 | import java.io.Serializable;
10 |
11 | /**
12 | * @author CHQ
13 | */
14 |
15 | @Data
16 | @AllArgsConstructor
17 | @NoArgsConstructor
18 | @TableName("tb_course_plan")
19 | public class CoursePlan extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 年级编号
31 | */
32 | @TableField("grade_no")
33 | private String gradeNo;
34 |
35 | /**
36 | * 班级编号
37 | */
38 | @TableField("class_no")
39 | private String classNo;
40 |
41 | /**
42 | * 课程编号
43 | */
44 | @TableField("course_no")
45 | private String courseNo;
46 |
47 | /**
48 | * 讲师编号
49 | */
50 | @TableField("teacher_no")
51 | private String teacherNo;
52 |
53 | /**
54 | * 教室编号
55 | */
56 | @TableField("classroom_no")
57 | private String classroomNo;
58 |
59 | /**
60 | * 上课时间
61 | */
62 | @TableField("class_time")
63 | private String classTime;
64 |
65 | /**
66 | * 周数
67 | */
68 | @TableField("weeks_sum")
69 | private Integer weeksSum;
70 |
71 | /**
72 | * 学期
73 | */
74 | @TableField("semester")
75 | private String semester;
76 |
77 | @TableLogic
78 | private Integer deleted;
79 |
80 | @TableField(fill = FieldFill.INSERT)
81 | private LocalDateTime createTime;
82 |
83 | @TableField(fill = FieldFill.INSERT_UPDATE)
84 | private LocalDateTime updateTime;
85 |
86 |
87 |
88 |
89 | @Override
90 | protected Serializable pkVal() {
91 | return this.id;
92 | }
93 |
94 | }
95 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/GradeInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.TableName;
4 | import com.baomidou.mybatisplus.annotation.IdType;
5 | import com.baomidou.mybatisplus.extension.activerecord.Model;
6 | import com.baomidou.mybatisplus.annotation.TableId;
7 | import lombok.AllArgsConstructor;
8 | import lombok.Data;
9 | import lombok.NoArgsConstructor;
10 |
11 | import java.io.Serializable;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @TableName("tb_grade_info")
17 | @Data
18 | @AllArgsConstructor
19 | @NoArgsConstructor
20 | public class GradeInfo extends Model {
21 |
22 | private static final long serialVersionUID=1L;
23 |
24 | /**
25 | * id,年级表
26 | */
27 | @TableId(value = "id", type = IdType.AUTO)
28 | private Integer id;
29 |
30 | /**
31 | * 年级编号
32 | */
33 | private String gradeNo;
34 |
35 | /**
36 | * 年级名称
37 | */
38 | private String gradeName;
39 |
40 |
41 | @Override
42 | protected Serializable pkVal() {
43 | return this.id;
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/LocationInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_location_info")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class LocationInfo extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id,位置信息,高一在哪栋楼,高二在哪
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 教学楼编号,放教学楼表中编号
31 | */
32 | private String teachbuildNo;
33 |
34 | /**
35 | * 年级编号,放年级表中的id
36 | */
37 | private String gradeNo;
38 |
39 | /**
40 | * 逻辑删除
41 | */
42 | @TableLogic
43 | private Integer deleted;
44 |
45 | @TableField(fill = FieldFill.INSERT)
46 | private LocalDateTime createTime;
47 |
48 | @TableField(fill = FieldFill.INSERT_UPDATE)
49 | private LocalDateTime updateTime;
50 |
51 |
52 | @Override
53 | protected Serializable pkVal() {
54 | return this.id;
55 | }
56 |
57 | }
58 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/Student.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_student")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class Student extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * 学生id
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 学号,可以用于登录
31 | */
32 | private String studentNo;
33 |
34 | /**
35 | * 昵称,可以用于登录
36 | */
37 | private String username;
38 |
39 | /**
40 | * 密码
41 | */
42 | private String password;
43 |
44 | /**
45 | * 标识用户类型3
46 | */
47 | private Integer userType;
48 |
49 | /**
50 | * 真实姓名
51 | */
52 | private String realname;
53 |
54 | /**
55 | * 年级
56 | */
57 | private String grade;
58 |
59 | /**
60 | * 所在班级
61 | */
62 | private String classNo;
63 |
64 | /**
65 | * 年龄
66 | */
67 | private Integer age;
68 |
69 | /**
70 | * 当前住址
71 | */
72 | private String address;
73 |
74 | /**
75 | * 联系电话
76 | */
77 | private String telephone;
78 |
79 | /**
80 | * 邮件地址
81 | */
82 | private String email;
83 |
84 | /**
85 | * 头像
86 | */
87 | private String avatar;
88 |
89 | /**
90 | * 签名
91 | */
92 | private String description;
93 |
94 | /**
95 | * 逻辑删除
96 | */
97 | @TableLogic
98 | private Integer deleted;
99 |
100 | /**
101 | * 账号状态,0为正常,1为封禁
102 | */
103 | private Integer status;
104 |
105 | /**
106 | * 创建时间
107 | */
108 | @TableField(fill = FieldFill.INSERT)
109 | private LocalDateTime createTime;
110 |
111 | /**
112 | * 更新时间
113 | */
114 | @TableField(fill = FieldFill.INSERT_UPDATE)
115 | private LocalDateTime updateTime;
116 |
117 | @Override
118 | protected Serializable pkVal() {
119 | return this.id;
120 | }
121 |
122 |
123 | }
124 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/StudyLogs.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_study_logs")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class StudyLogs extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * 学生学习记录表
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 学生id
31 | */
32 | private Integer studentId;
33 |
34 | /**
35 | * 网课id
36 | */
37 | private Integer onlineCourseId;
38 |
39 | /**
40 | * 网课名称
41 | */
42 | private String onlineName;
43 |
44 | /**
45 | * 看到哪个视频了
46 | */
47 | private Integer videoId;
48 |
49 | @TableField(fill = FieldFill.INSERT)
50 | private LocalDateTime createTime;
51 |
52 | @TableField(fill = FieldFill.INSERT_UPDATE)
53 | private LocalDateTime updateTime;
54 |
55 |
56 | @Override
57 | protected Serializable pkVal() {
58 | return this.id;
59 | }
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/TeachbuildInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_teach_build_info")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class TeachbuildInfo extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id,教学楼信息表
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 教学楼编号
31 | */
32 | private String teachBuildNo;
33 |
34 | /**
35 | * 教学楼名称
36 | */
37 | private String teachBuildName;
38 |
39 | /**
40 | * 教学楼位置
41 | */
42 | private String teachBuildLocation;
43 |
44 | /**
45 | * 逻辑删除
46 | */
47 | @TableLogic
48 | private Integer deleted;
49 |
50 | /**
51 | * 创建时间
52 | */
53 | @TableField(fill = FieldFill.INSERT)
54 | private LocalDateTime createTime;
55 |
56 | /**
57 | * 更新时间
58 | */
59 | @TableField(fill = FieldFill.INSERT_UPDATE)
60 | private LocalDateTime updateTime;
61 |
62 |
63 | @Override
64 | protected Serializable pkVal() {
65 | return this.id;
66 | }
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/Teacher.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity;
2 |
3 | import com.baomidou.mybatisplus.annotation.*;
4 | import com.baomidou.mybatisplus.extension.activerecord.Model;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Data;
7 | import lombok.NoArgsConstructor;
8 |
9 | import java.time.LocalDateTime;
10 | import java.io.Serializable;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 | @TableName("tb_teacher")
16 | @Data
17 | @AllArgsConstructor
18 | @NoArgsConstructor
19 | public class Teacher extends Model {
20 |
21 | private static final long serialVersionUID=1L;
22 |
23 | /**
24 | * id,讲师表
25 | */
26 | @TableId(value = "id", type = IdType.AUTO)
27 | private Integer id;
28 |
29 | /**
30 | * 教师编号
31 | */
32 | private String teacherNo;
33 |
34 | /**
35 | * 昵称(用户名)
36 | */
37 | private String username;
38 |
39 | /**
40 | * 密码
41 | */
42 | private String password;
43 |
44 | /**
45 | * 真实姓名
46 | */
47 | private String realname;
48 |
49 | /**
50 | * 标识用户类型2
51 | */
52 | private Integer userType;
53 |
54 | /**
55 | * 职称
56 | */
57 | private String jobtitle;
58 |
59 | /**
60 | * 所属年级
61 | */
62 | private String gradeNo;
63 |
64 | /**
65 | * 证件照(地址)
66 | */
67 | private String license;
68 |
69 | /**
70 | * 教授科目
71 | */
72 | private String teach;
73 |
74 | /**
75 | * 年龄
76 | */
77 | private Integer age;
78 |
79 | /**
80 | * 联系电话
81 | */
82 | private String telephone;
83 |
84 | /**
85 | * 电子邮件
86 | */
87 | private String email;
88 |
89 | /**
90 | * 地址
91 | */
92 | private String address;
93 |
94 | /**
95 | * 头像
96 | */
97 | private String avatar;
98 |
99 | /**
100 | * 描述(签名)
101 | */
102 | private String description;
103 |
104 | /**
105 | * 操作权限
106 | */
107 | private Integer power;
108 |
109 | /**
110 | * 优先级
111 | */
112 | private Integer piority;
113 |
114 | /**
115 | * 账号状态
116 | */
117 | private Integer status;
118 |
119 | /**
120 | * 逻辑删除
121 | */
122 | @TableLogic
123 | private Integer deleted;
124 |
125 | /**
126 | * 创建时间
127 | */
128 | @TableField(fill = FieldFill.INSERT)
129 | private LocalDateTime createTime;
130 |
131 | /**
132 | * 更新时间
133 | */
134 | @TableField(fill = FieldFill.INSERT_UPDATE)
135 | private LocalDateTime updateTime;
136 |
137 | @Override
138 | protected Serializable pkVal() {
139 | return this.id;
140 | }
141 |
142 |
143 | }
144 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/ClassAddVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class ClassAddVO {
10 |
11 | // 讲师id
12 | private Integer id;
13 |
14 | private String gradeNo;
15 |
16 | private String classNo;
17 |
18 | private String className;
19 |
20 | private Integer num;
21 |
22 | private String realname;
23 | }
24 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/ClassTaskDTO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class ClassTaskDTO {
10 |
11 | /**
12 | * 学期
13 | */
14 | private String semester;
15 |
16 | /**
17 | * 年级
18 | */
19 | private String gradeNo;
20 |
21 | /**
22 | * 班级编号
23 | */
24 | private String classNo;
25 |
26 | /**
27 | * 课程编号
28 | */
29 | private String courseNo;
30 |
31 | /**
32 | * 课程名称
33 | */
34 | private String courseName;
35 |
36 | /**
37 | * 讲师编号
38 | */
39 | private String teacherNo;
40 |
41 | /**
42 | * 讲师名字
43 | */
44 | private String realname;
45 |
46 | /**
47 | * 课程属性
48 | */
49 | private String courseAttr;
50 |
51 | /**
52 | * 上课人数
53 | */
54 | private Integer studentNum;
55 |
56 | /**
57 | * 周学时
58 | */
59 | private Integer weeksNumber;
60 |
61 | /**
62 | * 周数
63 | */
64 | private Integer weeksSum;
65 |
66 | /**
67 | * 是否固定上课时间
68 | */
69 | private String isFix;
70 |
71 | /**
72 | * 固定时间的话时间是什么时候
73 | */
74 | private String classTime;
75 | }
76 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/ClassroomAddRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class ClassroomAddRequest {
10 |
11 | /**
12 | * 教室编号
13 | */
14 | private String classroomNo;
15 |
16 | /**
17 | * 教室名称
18 | */
19 | private String classroomName;
20 |
21 | /**
22 | * 所属教学楼
23 | */
24 | private String teachbuildNo;
25 |
26 | /**
27 | * 教室容量
28 | */
29 | private Integer capacity;
30 |
31 |
32 | private String remark;
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/ConstantInfo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | /**
4 | * @author CHQ
5 | */
6 | public class ConstantInfo {
7 |
8 | // 是否固定上课时间 1位
9 | public static final String IS_FIX = "isFix";
10 |
11 | // 年级编号 2位
12 | public static final String GRADE_NO = "grade_no";
13 |
14 | // 班级编号 位
15 | public static final String CLASS_NO = "class_no";
16 |
17 | // 教师编号 位
18 | public static final String TEACHER_NO = "teacher_no";
19 |
20 | // 课程编号 位
21 | public static final String COURSE_NO = "course_no";
22 |
23 | // 课程属性 1位
24 | public static final String COURSE_ATTR = "courseAttr";
25 |
26 | // 教室编号6位
27 | public static final String CLASSROOM_NO = "classroom_no";
28 |
29 | // 上课时间2位
30 | public static final String CLASS_TIME = "class_time";
31 |
32 | // 开课学期
33 | public static final String SEMESTER = "semester";
34 |
35 | // 默认课程的编码
36 | public static final String DEFAULT_CLASS_TIME = "00";
37 |
38 | // 设置各种类型的课程的适应度(码值)
39 | // 必修
40 | public static final String MAIN_COURSE = "01";
41 |
42 | // 选修
43 | public static final String SECONDARY_COURSE = "02";
44 |
45 | // 实验课
46 | public static final String EXPERIMENT_COURSE = "03";
47 |
48 | // 体育课
49 | public static final String PHYSICAL_COURSE = "04";
50 |
51 | // 音乐课
52 | public static final String MUSIC_COURSE = "05";
53 |
54 | // 舞蹈课
55 | public static final String DANCE_COURSE = "06";
56 |
57 | // 信息技术
58 | public static final String TECHNOLOGY_COURSE = "07";
59 |
60 | // 设置遗传代数
61 | public static final int GENERATION = 50;
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/CourseInfoAddRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | /**
4 | * @author CHQ
5 | */
6 | public class CourseInfoAddRequest {
7 | }
8 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/ExerciseVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class ExerciseVO {
10 |
11 | private Integer categoryId;
12 |
13 | private String classNo;
14 |
15 | private String exerciseTitle;
16 |
17 | private Integer multiselect;
18 |
19 | private String answer;
20 |
21 | private String optionA;
22 |
23 | private String optionB;
24 |
25 | private String optionC;
26 |
27 | private String optionD;
28 |
29 | private String optionE;
30 |
31 | private String optionF;
32 |
33 | private Integer fraction;
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/LocationSetVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class LocationSetVO {
10 |
11 | private String teachBuildNo;
12 |
13 | private String gradeNo;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/PasswordVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class PasswordVO {
10 |
11 | private Integer id;
12 |
13 | private String oldPass;
14 |
15 | private String newPass;
16 |
17 | private String rePass;
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/StudentLoginRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class StudentLoginRequest {
10 |
11 | private String username;
12 |
13 | private String password;
14 | }
15 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/StudentRegisterRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class StudentRegisterRequest {
10 |
11 | // 学号由系统给学生生成,学生通过完善个人信息进行填写其它字段
12 | private String studentNo;
13 |
14 | private String username;
15 |
16 | private String password;
17 |
18 | private String realname;
19 |
20 | /**
21 | * 年级
22 | */
23 | private String grade;
24 |
25 | private String address;
26 |
27 | private String telephone;
28 |
29 | private String email;
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/TeachCoursePlan.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class TeachCoursePlan {
10 |
11 | private Integer id;
12 |
13 | // 班级编号
14 | private String classNo;
15 |
16 | // 课程编号
17 | private String courseNo;
18 |
19 | // 课程名称
20 | private String courseName;
21 |
22 | // 上课的年级
23 | private String gradeNo;
24 |
25 | // 上课的学生人数,到时候需要判断教室容量够不够
26 | private Integer studentnumber;
27 |
28 | // 课程属性,用于设置上课的优先级
29 | private String courseAttr;
30 |
31 | // 课程的学时,为每周节数*持续周数,约定一节课为一个学时
32 | private Integer classHour;
33 |
34 | // 一周上课节数
35 | private Integer weeksTime;
36 |
37 | // 持续多少周
38 | private Integer weeksSum;
39 |
40 | // 上课的学期
41 | private String semester;
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/TeachbuildAddRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class TeachbuildAddRequest {
10 |
11 | private String teachBuildNo;
12 |
13 | private String teachBuildName;
14 |
15 | private String teachBuildLocation;
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/TeacherAddRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class TeacherAddRequest {
10 |
11 | private String teacherNo;
12 |
13 | private String username;
14 |
15 | private String password;
16 |
17 | private String realname;
18 |
19 | private String jobtitle;
20 |
21 | private String teach;
22 |
23 | private String telephone;
24 |
25 | private String email;
26 |
27 | private String address;
28 |
29 | private Integer age;
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/UserInfoVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class UserInfoVO {
10 |
11 | // 课程的id
12 | private Integer courseId;
13 |
14 | private Integer UserType;
15 |
16 | // 操作者的id
17 | private Integer id;
18 |
19 | private String realname;
20 |
21 | // 设置视频的编号,比如3-1
22 | private String videoNo;
23 |
24 | private String videoName;
25 |
26 | private String videoUrl;
27 |
28 | /**
29 | * 视频封面
30 | */
31 | private String cover;
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/request/UserLoginRequest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.request;
2 |
3 | import lombok.Data;
4 |
5 | /**
6 | * @author CHQ
7 | */
8 | @Data
9 | public class UserLoginRequest {
10 |
11 | private String username;
12 |
13 | private String password;
14 |
15 | /**
16 | * 1管理员,2讲师
17 | */
18 | private Integer type;
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/response/ClassInfoVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.response;
2 |
3 | import com.chq.coursearrange.entity.ClassInfo;
4 | import lombok.AllArgsConstructor;
5 | import lombok.Data;
6 | import lombok.NoArgsConstructor;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | @Data
12 | @NoArgsConstructor
13 | @AllArgsConstructor
14 | public class ClassInfoVO extends ClassInfo {
15 |
16 | // 班主任姓名
17 | private String realname;
18 |
19 | private String gradeName;
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/response/CoursePlanVo.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.response;
2 |
3 | import com.chq.coursearrange.entity.CourseInfo;
4 | import com.chq.coursearrange.entity.CoursePlan;
5 | import com.chq.coursearrange.entity.Teacher;
6 | import lombok.Data;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | @Data
12 | public class CoursePlanVo extends CoursePlan {
13 |
14 | private Teacher teacher;
15 |
16 | private CourseInfo courseInfo;
17 | }
18 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/entity/response/LocationVO.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.entity.response;
2 |
3 | import com.chq.coursearrange.entity.LocationInfo;
4 | import lombok.Data;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | @Data
10 | public class LocationVO extends LocationInfo {
11 |
12 | private String teachBuildName;
13 |
14 | private String gradeName;
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/AdminMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/ClassInfoMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/ClassTaskMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/CourseInfoMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/CoursePlanMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/ExerciseCategoryMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/ExerciseMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/GradeInfoMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/LocationInfoMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/LoginService.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/StudentMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/StudyLogsMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/TeachBuildInfoDao.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/mapper/TeacherMapper.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/AdminService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.Admin;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface AdminService extends IService {
10 |
11 | Admin adminLogin(String username, String password);
12 |
13 | }
14 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/ClassInfoService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.baomidou.mybatisplus.core.metadata.IPage;
4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5 | import com.chq.coursearrange.entity.ClassInfo;
6 | import com.baomidou.mybatisplus.extension.service.IService;
7 | import com.chq.coursearrange.entity.response.ClassInfoVO;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | public interface ClassInfoService extends IService {
13 |
14 |
15 | IPage selectClassAndTeacher(Page pg, String gradeNo);
16 |
17 | IPage selectClassAndTeacherAll(Page pg);
18 |
19 | int getSize();
20 |
21 | ClassInfo selectByClassNo(String substring);
22 | }
23 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/ClassTaskService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.baomidou.mybatisplus.core.metadata.IPage;
5 | import com.chq.coursearrange.common.ServerResponse;
6 | import com.chq.coursearrange.entity.ClassTask;
7 | import com.baomidou.mybatisplus.extension.service.IService;
8 | import org.apache.ibatis.annotations.Param;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | public interface ClassTaskService extends IService {
14 |
15 | // Boolean classScheduling(ClassTask classTask);
16 | ServerResponse classScheduling(@Param("semester") String semester);
17 |
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/ClassroomService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.Classroom;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface ClassroomService extends IService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/CourseInfoService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.CourseInfo;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | public interface CourseInfoService extends IService {
12 | List selectCourse ();
13 |
14 |
15 | CourseInfo selectByName(String courseName);
16 |
17 | int getSize();
18 | }
19 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/CoursePlanService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.CoursePlan;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface CoursePlanService extends IService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/GradeInfoService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.GradeInfo;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface GradeInfoService extends IService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/LocationInfoService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.LocationInfo;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface LocationInfoService extends IService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/StudentService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.Student;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface StudentService extends IService {
10 |
11 | Student studentLogin(String username, String password);
12 |
13 | int getSize();
14 |
15 | int getStudentReg(String yesday);
16 | }
17 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/StudyLogsService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.StudyLogs;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface StudyLogsService extends IService {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/TeachbuildInfoService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.TeachbuildInfo;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | /**
7 | * @author CHQ
8 | */
9 | public interface TeachbuildInfoService extends IService {
10 |
11 | int getSize();
12 | }
13 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/TeacherService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service;
2 |
3 | import com.chq.coursearrange.entity.Teacher;
4 | import com.baomidou.mybatisplus.extension.service.IService;
5 |
6 | import java.util.List;
7 |
8 | /**
9 | * @author CHQ
10 | */
11 | public interface TeacherService extends IService {
12 |
13 |
14 |
15 | Teacher teacherLogin(String username, String password);
16 |
17 | List selectTeacherAll();
18 |
19 | Teacher selectByRealName(String substring);
20 |
21 | int getSize();
22 |
23 | int getTeacherReg(String yesday);
24 | }
25 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/AdminServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.dao.AdminDao;
5 | import com.chq.coursearrange.entity.Admin;
6 | import com.chq.coursearrange.service.AdminService;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 |
11 | /**
12 | * @author CHQ
13 | */
14 | @Service
15 | public class AdminServiceImpl extends ServiceImpl implements AdminService {
16 |
17 | @Autowired
18 | private AdminDao adminDao;
19 |
20 | @Override
21 | public Admin adminLogin(String username, String password) {
22 | QueryWrapper wrapper = new QueryWrapper<>();
23 | wrapper.eq("admin_no", username);
24 | wrapper.eq("password", password);
25 | return adminDao.selectOne(wrapper);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/ClassInfoServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.metadata.IPage;
4 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
5 | import com.chq.coursearrange.dao.ClassInfoDao;
6 | import com.chq.coursearrange.entity.ClassInfo;
7 | import com.chq.coursearrange.entity.response.ClassInfoVO;
8 | import com.chq.coursearrange.service.ClassInfoService;
9 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
10 | import org.springframework.beans.factory.annotation.Autowired;
11 | import org.springframework.stereotype.Service;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @Service
17 | public class ClassInfoServiceImpl extends ServiceImpl implements ClassInfoService {
18 |
19 |
20 | @Autowired
21 | public ClassInfoDao classInfoDao;
22 |
23 |
24 | @Override
25 | public IPage selectClassAndTeacher(Page pg, String gradeNo) {
26 |
27 | IPage classInfoVOs = classInfoDao.selectClassAndTeacher(pg, gradeNo);
28 |
29 | return classInfoVOs;
30 | }
31 |
32 | @Override
33 | public IPage selectClassAndTeacherAll(Page pg) {
34 | IPage classInfoVOs = classInfoDao.selectClassAndTeacherAll(pg);
35 | return classInfoVOs;
36 | }
37 |
38 | @Override
39 | public int getSize() {
40 | int classSize = classInfoDao.getSize();
41 | return classSize;
42 | }
43 |
44 | @Override
45 | public ClassInfo selectByClassNo(String substring) {
46 | ClassInfo classInfo = classInfoDao.selectByClassNo(substring);
47 | return classInfo;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/ClassroomServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.dao.ClassroomDao;
4 | import com.chq.coursearrange.entity.Classroom;
5 | import com.chq.coursearrange.service.ClassroomService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class ClassroomServiceImpl extends ServiceImpl implements ClassroomService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/CourseInfoServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.dao.CourseInfoDao;
5 | import com.chq.coursearrange.service.CourseInfoService;
6 | import com.chq.coursearrange.entity.CourseInfo;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 |
11 | import java.util.List;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @Service
17 | public class CourseInfoServiceImpl extends ServiceImpl implements CourseInfoService {
18 |
19 | @Autowired
20 | CourseInfoDao courseInfoDao;
21 |
22 | @Override
23 | public List selectCourse() {
24 | List courseInfos = courseInfoDao.selectList(null);
25 | return courseInfos;
26 | }
27 |
28 | @Override
29 | public CourseInfo selectByName(String courseName) {
30 | QueryWrapper qw = new QueryWrapper<>();
31 | qw.eq("course_name",courseName);
32 | CourseInfo courseInfo = courseInfoDao.selectOne(qw);
33 | System.out.println(courseInfo);
34 | return courseInfo;
35 | }
36 |
37 | @Override
38 | public int getSize() {
39 | int courseSize = courseInfoDao.getSize();
40 | return courseSize;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/CoursePlanServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.dao.CoursePlanDao;
4 | import com.chq.coursearrange.entity.CoursePlan;
5 | import com.chq.coursearrange.service.CoursePlanService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class CoursePlanServiceImpl extends ServiceImpl implements CoursePlanService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/GradeInfoServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.entity.GradeInfo;
4 | import com.chq.coursearrange.service.GradeInfoService;
5 | import com.chq.coursearrange.dao.GradeInfoDao;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class GradeInfoServiceImpl extends ServiceImpl implements GradeInfoService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/LocationInfoServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.dao.LocationInfoDao;
4 | import com.chq.coursearrange.entity.LocationInfo;
5 | import com.chq.coursearrange.service.LocationInfoService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class LocationInfoServiceImpl extends ServiceImpl implements LocationInfoService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/StudentServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.dao.StudentDao;
5 | import com.chq.coursearrange.entity.Student;
6 | import com.chq.coursearrange.service.StudentService;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 |
11 | /**
12 | * @author CHQ
13 | */
14 | @Service
15 | public class StudentServiceImpl extends ServiceImpl implements StudentService {
16 |
17 | @Autowired
18 | private StudentDao studentDao;
19 |
20 | @Override
21 | public Student studentLogin(String username, String password) {
22 | QueryWrapper wrapper = new QueryWrapper<>();
23 | wrapper.eq("student_no", username).eq("password", password);
24 | // 查询数据库是否有该学生
25 | return studentDao.selectOne(wrapper);
26 | }
27 |
28 | @Override
29 | public int getSize() {
30 | int studentSize = studentDao.getSize();
31 | return studentSize;
32 | }
33 |
34 | @Override
35 | public int getStudentReg(String yesday) {
36 | int studentReg = studentDao.studentReg(yesday);
37 | return studentReg;
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/StudyLogsServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.dao.StudyLogsDao;
4 | import com.chq.coursearrange.entity.StudyLogs;
5 | import com.chq.coursearrange.service.StudyLogsService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class StudyLogsServiceImpl extends ServiceImpl implements StudyLogsService {
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/TeachbuildInfoServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.chq.coursearrange.dao.TeachBuildInfoDao;
4 | import com.chq.coursearrange.entity.TeachbuildInfo;
5 | import com.chq.coursearrange.service.TeachbuildInfoService;
6 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
7 | import org.springframework.stereotype.Service;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | @Service
13 | public class TeachbuildInfoServiceImpl extends ServiceImpl implements TeachbuildInfoService {
14 |
15 | @Override
16 | public int getSize() {
17 |
18 | return 0;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/TeacherServiceImpl.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.dao.TeacherDao;
5 | import com.chq.coursearrange.entity.Teacher;
6 | import com.chq.coursearrange.service.TeacherService;
7 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
8 | import org.springframework.beans.factory.annotation.Autowired;
9 | import org.springframework.stereotype.Service;
10 |
11 | import java.util.List;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @Service
17 | public class TeacherServiceImpl extends ServiceImpl implements TeacherService {
18 |
19 | @Autowired
20 | private TeacherDao teacherDao;
21 |
22 | @Override
23 | public Teacher teacherLogin(String username, String password) {
24 | QueryWrapper wrapper = new QueryWrapper();
25 | wrapper.eq("teacher_no", username);
26 | wrapper.eq("password", password);
27 | return teacherDao.selectOne(wrapper);
28 | }
29 |
30 | @Override
31 | public List selectTeacherAll() {
32 | List teacherList = teacherDao.selectList(null);
33 | return teacherList;
34 | }
35 |
36 | @Override
37 | public Teacher selectByRealName(String substring) {
38 | QueryWrapper qw = new QueryWrapper<>();
39 | qw.eq("realName", substring);
40 | Teacher teacher = teacherDao.selectOne(qw);
41 | return teacher;
42 | }
43 |
44 | @Override
45 | public int getSize() {
46 | int teacherSize = teacherDao.getSize();
47 | return teacherSize;
48 | }
49 |
50 | @Override
51 | public int getTeacherReg(String yesday) {
52 | int teacherReg = teacherDao.teacherReg(yesday);
53 | return teacherReg;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/service/impl/TokenService.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import com.auth0.jwt.JWT;
4 | import com.auth0.jwt.algorithms.Algorithm;
5 | import com.chq.coursearrange.entity.Admin;
6 | import com.chq.coursearrange.entity.Student;
7 | import com.chq.coursearrange.entity.Teacher;
8 | import org.springframework.stereotype.Service;
9 |
10 | import java.util.Date;
11 |
12 | /**
13 | * @author CHQ
14 | */
15 |
16 | @Service
17 | public class TokenService {
18 |
19 | /**
20 | * 验证学生
21 | * @param student
22 | * @return
23 | */
24 | public String getToken(Student student) {
25 | Date start = new Date();
26 | // 一小时有效时间
27 | long currentTime = System.currentTimeMillis() + 60* 60 * 500;
28 | Date end = new Date(currentTime);
29 | String token = "";
30 |
31 | token = JWT.create().withAudience(student.getId().toString()).withIssuedAt(start).withExpiresAt(end)
32 | .sign(Algorithm.HMAC256(student.getPassword()));
33 | return token;
34 | }
35 |
36 | /**
37 | * 验证管理员
38 | * @param admin
39 | * @return
40 | */
41 | public String getToken(Admin admin) {
42 | Date start = new Date();
43 | long currentTime = System.currentTimeMillis() + 60* 60 * 500;
44 | Date end = new Date(currentTime);
45 | String token = "";
46 |
47 | token = JWT.create().withAudience(admin.getId().toString()).withIssuedAt(start).withExpiresAt(end)
48 | .sign(Algorithm.HMAC256(admin.getPassword()));
49 | return token;
50 | }
51 |
52 | /**
53 | * 验证讲师
54 | * @param teacher
55 | * @return
56 | */
57 | public String getToken(Teacher teacher) {
58 | Date start = new Date();
59 | long currentTime = System.currentTimeMillis() + 60* 60 * 500;
60 | Date end = new Date(currentTime);
61 | String token = "";
62 |
63 | token = JWT.create().withAudience(teacher.getId().toString()).withIssuedAt(start).withExpiresAt(end)
64 | .sign(Algorithm.HMAC256(teacher.getPassword()));
65 | return token;
66 | }
67 |
68 | }
69 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/util/AliyunUtil.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.util;
2 |
3 | import com.aliyun.oss.OSS;
4 | import com.aliyun.oss.OSSClientBuilder;
5 | import com.aliyun.oss.model.GetObjectRequest;
6 | import org.springframework.beans.factory.annotation.Value;
7 | import org.springframework.web.multipart.MultipartFile;
8 |
9 | import javax.sound.midi.Soundbank;
10 | import java.io.File;
11 | import java.io.IOException;
12 | import java.io.InputStream;
13 | import java.util.HashMap;
14 | import java.util.Map;
15 | import java.util.UUID;
16 |
17 | /**
18 | * @author CHQ
19 | */
20 | public class AliyunUtil {
21 |
22 | // bucket域名:arrange.oss-cn-shenzhen.aliyuncs.com
23 | // @Value("${aliyun.oss.file.endpoint}")
24 | private static String endpoint = "oss-cn-shenzhen.aliyuncs.com";
25 |
26 | // @Value("${aliyun.oss.file.accessKeyId}")
27 | private static String accessKeyId = "这里改成你们自己的key";
28 |
29 | // @Value("${aliyun.oss.file.accessKeySecret}")
30 | private static String accessKeySecret = "这里改成你们自己的密钥";
31 |
32 | // @Value("${aliyun.oss.file.bucketName}")
33 | private static String bucketName = "arrange";
34 |
35 | /**
36 | * 文件上传成功返回路径
37 | * @param file
38 | * @param directory 选择需要上传到的目录下面,暂时不用,原本想将用户头像、其他文件上传到不同的目录下面的
39 | * @return
40 | */
41 | public static Map upload(MultipartFile file, String directory) {
42 |
43 | // 创建OSSClient实例。
44 | OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
45 |
46 | String url = "";
47 | try {
48 | // 获取输入流
49 | InputStream inputStream = file.getInputStream();
50 | String fileName = file.getOriginalFilename();
51 | //1 在文件名称里面添加随机唯一的值
52 | String uuid = UUID.randomUUID().toString().replaceAll("-", "");
53 | // 随机id
54 | String newFileName = uuid + fileName;
55 | // String datePath = new DateTime().toString("yyyy/MM/dd");
56 | //拼接
57 | // 2019/11/12/ewtqr313401.jpg
58 | // fileName = datePath+"/"+fileName;
59 | // 上传
60 | ossClient.putObject(bucketName, fileName, inputStream);
61 | // 关闭OSSClient。
62 | ossClient.shutdown();
63 |
64 | url = "https://" + bucketName + "." + endpoint + "/" + fileName;
65 | System.out.println("url========" + url);
66 | Map map = new HashMap<>();
67 | map.put("url", url);
68 | map.put("name", fileName);
69 | return map;
70 | } catch (IOException e) {
71 | e.printStackTrace();
72 | }
73 | return null;
74 | }
75 |
76 | /**
77 | * 文件下载到本地
78 | */
79 | public static String download(String fileName) {
80 | System.out.println("1" + fileName);
81 | System.out.println("阿里云开始下载文件到本地");
82 | String path = "D:\\arrange\\tempfile\\" + fileName;
83 | File file = new File(path);
84 | OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
85 |
86 | ossClient.getObject(new GetObjectRequest(bucketName, fileName), file);
87 |
88 | ossClient.shutdown();
89 | return path;
90 | }
91 |
92 | }
93 |
--------------------------------------------------------------------------------
/src/main/java/com/chq/coursearrange/util/TokenUtil.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.util;
2 |
3 | import com.auth0.jwt.JWT;
4 | import org.springframework.web.context.request.RequestContextHolder;
5 | import org.springframework.web.context.request.ServletRequestAttributes;
6 |
7 | import javax.servlet.http.HttpServletRequest;
8 |
9 | /**
10 | * @author CHQ
11 | */
12 | public class TokenUtil {
13 |
14 | public static String getTokenUserId() {
15 | String token = getRequest().getHeader("token");// 从 http 请求头中取出 token
16 | String userId = JWT.decode(token).getAudience().get(0);
17 | return userId;
18 | }
19 |
20 | /**
21 | * 获取request
22 | *
23 | * @return
24 | */
25 | public static HttpServletRequest getRequest() {
26 | ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder
27 | .getRequestAttributes();
28 | return requestAttributes == null ? null : requestAttributes.getRequest();
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/resources/application-dev.yml:
--------------------------------------------------------------------------------
1 | # 数据库连接
2 | spring:
3 | datasource:
4 | url: jdbc:mysql://localhost:3306/db_course_arrangement?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
5 | type: com.alibaba.druid.pool.DruidDataSource
6 | username: root
7 | password: Chq.5247L247
8 | driver-class-name: com.mysql.cj.jdbc.Driver
9 | # 返回json的全局时间格式
10 | jackson:
11 | date-format: yyyy-MM-dd HH:mm:ss
12 | time-zone: GMT+8
13 | # 热部署配置
14 | devtools:
15 | restart:
16 | enable: true
17 | additional-paths: src/main/java
18 | exclude: WEB-INF/**
19 |
20 | #设置文件传输大小限制
21 | servlet:
22 | multipart:
23 | max-file-size: 100MB
24 | max-request-size: 100MB
25 |
26 |
27 | mybatis-plus:
28 | mapper-locations: classpath:/mapper/xml/*Mapper.xml
29 | typeAliasesPackage: com.chq.coursearrange.entity
30 | configuration:
31 | log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
32 | global-config:
33 | db-config:
34 | logic-delete-value: 1 #删除
35 | logic-not-delete-value: 0 #不删除
36 |
37 | server:
38 | port: 8080
39 |
40 |
41 | # 阿里云OSS
42 | #aliyun:
43 | # oss:
44 | # file:
45 | # endpoint: oss-cn-shenzhen.aliyuncs.com
46 | # accessKeyId: 你们自己的key
47 | # accessKeySecret: 你们自己的密钥
48 | # bucketName: arrange
--------------------------------------------------------------------------------
/src/main/resources/application.yml:
--------------------------------------------------------------------------------
1 | spring:
2 | profiles:
3 | active: dev
--------------------------------------------------------------------------------
/src/main/resources/log4j.properties:
--------------------------------------------------------------------------------
1 | log4j.rootLogger=info, ServerDailyRollingFile, stdout
2 | log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender
3 | log4j.appender.ServerDailyRollingFile.DatePattern=\u2018.\u2018yyyy-MM-dd
4 | log4j.appender.ServerDailyRollingFile.File=logs/notify-subscription.log
5 | log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout
6 | log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n
7 | log4j.appender.ServerDailyRollingFile.Append=true
8 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender
9 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
10 | log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %p [%c] %m%n
--------------------------------------------------------------------------------
/src/test/java/com/chq/coursearrange/CoursearrangeApplicationTests.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange;
2 |
3 |
4 | import org.springframework.boot.test.context.SpringBootTest;
5 |
6 | import java.util.List;
7 |
8 |
9 | class CoursearrangeApplicationTests {
10 |
11 | // @Autowired
12 | // private StudentDao studentDao;
13 | //
14 | //
15 | // @Test
16 | // void contextLoads() {
17 | // }
18 | //
19 | // @Test
20 | // public void testQueryStudent() {
21 | // List list = studentDao.selectList(null);
22 | // for(Student stu : list) {
23 | // System.out.println(stu);
24 | // }
25 | // }
26 |
27 | }
28 |
--------------------------------------------------------------------------------
/src/test/java/com/chq/coursearrange/controller/AdminTest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.chq.coursearrange.dao.AdminDao;
4 | import com.chq.coursearrange.entity.Admin;
5 | import org.junit.Test;
6 | import org.springframework.beans.factory.annotation.Autowired;
7 |
8 | import java.time.LocalDateTime;
9 |
10 | /**
11 | * @author CHQ
12 | */
13 | public class AdminTest {
14 |
15 | @Autowired
16 | private AdminDao adminDao;
17 |
18 | @Test
19 | public void testAdd() {
20 | Admin admin = new Admin();
21 | admin.setId(1);
22 | admin.setAdminNo("10011");
23 | admin.setUsername("admin");
24 | admin.setPassword("123");
25 | admin.setRealname("梁主任");
26 | admin.setJobtitle("教务处主任");
27 | admin.setDescription("认真对待工作");
28 | admin.setRemark("务实");
29 | admin.setStatus(0);
30 | admin.setCreateTime(LocalDateTime.now());
31 | admin.setUpdateTime(LocalDateTime.now());
32 | adminDao.insert(admin);
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/test/java/com/chq/coursearrange/controller/CourseTest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.controller;
2 |
3 | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
4 | import com.chq.coursearrange.dao.ClassTaskDao;
5 | import com.chq.coursearrange.entity.ClassTask;
6 | import org.junit.jupiter.api.Test;
7 | import org.springframework.beans.factory.annotation.Autowired;
8 | import org.springframework.boot.test.context.SpringBootTest;
9 |
10 |
11 | import java.util.List;
12 |
13 | /**
14 | * @author: 15760
15 | * @Date: 2020/4/11
16 | * @Descripe:
17 | */
18 |
19 | @SpringBootTest
20 | public class CourseTest {
21 |
22 | @Autowired
23 | private ClassTaskDao classTaskDao;
24 |
25 | @Test
26 | public void test() {
27 | QueryWrapper wrapper = new QueryWrapper().eq("semester", "2019-2020-1");
28 | List classTaskList = classTaskDao.selectList(wrapper);
29 | // 测试输出
30 | for (ClassTask c : classTaskList) {
31 | System.out.println(c);
32 | }
33 | }
34 |
35 | @Test
36 | public void test2() {
37 |
38 | List list = classTaskDao.selectClassNo();
39 | // 测试输出
40 | for (String c : list) {
41 | System.out.println(c);
42 | }
43 | }
44 |
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/src/test/java/com/chq/coursearrange/controller/TeacherTest.java:
--------------------------------------------------------------------------------
1 | //package com.lyk.coursearrange.controller;
2 | //
3 | //import org.junit.Test;
4 | //import org.junit.runner.RunWith;
5 | //import org.springframework.beans.factory.annotation.Autowired;
6 | //import org.springframework.boot.test.context.SpringBootTest;
7 | //import org.springframework.test.context.junit4.SpringRunner;
8 | //
9 | //import javax.annotation.PostConstruct;
10 | //import java.time.LocalDateTime;
11 | //
12 | //@SpringBootTest
13 | //@RunWith(SpringRunner.class)
14 | //public class testTeacher {
15 | //
16 | // @Autowired
17 | // private TeacherDao teacherDao;
18 | //
19 | // @Test
20 | // @PostConstruct
21 | // public void testAdd() {
22 | // Teacher teacher = new Teacher();
23 | // teacher.setId(4);
24 | // teacher.setTeacherNo("10012");
25 | // teacher.setUsername("msLi");
26 | // teacher.setPassword("123");
27 | // teacher.setRealname("李雪雪");
28 | // teacher.setJobtitle("高级讲师");
29 | // teacher.setTeach("语文");
30 | // teacher.setAge(29);
31 | // teacher.setTelephone("18978899898");
32 | // teacher.setAddress("广西桂林市桂林电子科技大学");
33 | // teacher.setDescription("做人民的好教师");
34 | // teacher.setPower(1);
35 | // teacher.setPiority(2);
36 | // teacher.setStatus(0);
37 | // teacher.setCreateTime(LocalDateTime.now());
38 | // teacher.setUpdateTime(LocalDateTime.now());
39 | // teacherDao.insert(teacher);
40 | // }
41 | //}
42 |
--------------------------------------------------------------------------------
/src/test/java/com/chq/coursearrange/service/impl/ExcelTest.java:
--------------------------------------------------------------------------------
1 | package com.chq.coursearrange.service.impl;
2 |
3 | import cn.afterturn.easypoi.excel.ExcelExportUtil;
4 | import cn.afterturn.easypoi.excel.entity.ExportParams;
5 | import com.chq.coursearrange.entity.ClassTask;
6 | import org.apache.poi.ss.usermodel.Workbook;
7 | import org.junit.Test;
8 | import org.springframework.boot.test.context.SpringBootTest;
9 | import java.io.FileOutputStream;
10 | import java.util.ArrayList;
11 | import java.util.List;
12 |
13 | /**
14 | * @author CHQ
15 | */
16 | @SpringBootTest
17 | //@RunWith(SpringRunner.class)
18 | public class ExcelTest {
19 |
20 | @Test
21 | public void test1() {
22 | ExportParams params = new ExportParams();
23 | params.setTitle("课程任务导入模板(请严格对照数据库信息填写)");
24 | params.setSheetName("课程任务模板");
25 | List list = new ArrayList();
26 | // list.add(new ClassTask("2019-2020-1", "01", "20200103", "1000008", "高二数学", "10001", "梁老师", "01", 39, 4, 12, "2", ""));
27 | // File savefile = new File("D:/excel/");
28 | // if (!savefile.exists()) {
29 | // savefile.mkdirs();
30 | // }
31 | Workbook workbook = ExcelExportUtil.exportExcel(params, ClassTask.class, list);
32 | try {
33 | FileOutputStream fos = new FileOutputStream("D:/excel/课程任务导入模板.xls");
34 | workbook.write(fos);
35 | } catch (Exception e) {
36 | e.printStackTrace();
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------