├── .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 | 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 | 7 | 8 | Created by iconfont 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 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 | 4 | 5 | 21 | 22 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/StudentMain.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 113 | 114 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/components/Center.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 122 | 123 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/components/EmptyClassroom.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 128 | 129 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/components/HomeHeader.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 22 | 23 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/components/Password.vue: -------------------------------------------------------------------------------- 1 | 20 | 21 | 72 | 73 | -------------------------------------------------------------------------------- /UI/coursearrange/src/home/components/StudentCenter.vue: -------------------------------------------------------------------------------- 1 | 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 | 6 | 7 | 23 | 24 | -------------------------------------------------------------------------------- /UI/coursearrange/src/manager/components/ModifyTeacher.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 18 | 19 | -------------------------------------------------------------------------------- /UI/coursearrange/src/pages/Login.vue: -------------------------------------------------------------------------------- 1 | 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 | 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 | --------------------------------------------------------------------------------