Commit e19a91b8 by 涂亚平

start

0 parents
Showing with 11087 additions and 0 deletions
# Created by .ignore support plugin (hsz.mobi)
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="teachaicms" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="teachaicms" target="1.8" />
</bytecodeTargetLevel>
</component>
<component name="JavacSettings">
<option name="ADDITIONAL_OPTIONS_OVERRIDE">
<module name="teachaicms" options="-parameters" />
</option>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="AliMissingOverrideAnnotation" enabled="false" level="BLOCKER" enabled_by_default="false" />
<inspection_tool class="JavaDoc" enabled="true" level="WARNING" enabled_by_default="true">
<option name="TOP_LEVEL_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="INNER_CLASS_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="METHOD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="@return@param@throws or @exception" />
</value>
</option>
<option name="FIELD_OPTIONS">
<value>
<option name="ACCESS_JAVADOC_REQUIRED_FOR" value="none" />
<option name="REQUIRED_TAGS" value="" />
</value>
</option>
<option name="IGNORE_DEPRECATED" value="false" />
<option name="IGNORE_JAVADOC_PERIOD" value="true" />
<option name="IGNORE_DUPLICATED_THROWS" value="false" />
<option name="IGNORE_POINT_TO_ITSELF" value="false" />
<option name="myAdditionalJavadocTags" value="date" />
</inspection_tool>
<inspection_tool class="MissingOverrideAnnotation" enabled="false" level="INFORMATION" enabled_by_default="false">
<option name="ignoreObjectMethods" value="true" />
<option name="ignoreAnonymousClassMethods" value="false" />
</inspection_tool>
</profile>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-classic:1.2.3">
<CLASSES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: ch.qos.logback:logback-core:1.2.3">
<CLASSES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:druid:1.1.22">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/druid/1.1.22/druid-1.1.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/druid-spring-boot-starter/1.1.22/druid-spring-boot-starter-1.1.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.alibaba:fastjson:1.2.58">
<CLASSES>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/alibaba/fastjson/1.2.58/fastjson-1.2.58-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-core/4.4.6/aliyun-java-sdk-core-4.4.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.1.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-dysmsapi/1.1.0/aliyun-java-sdk-dysmsapi-1.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-kms/2.11.0/aliyun-java-sdk-kms-2.11.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/aliyun-java-sdk-ram/3.1.0/aliyun-java-sdk-ram-3.1.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.0">
<CLASSES>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/aliyun/oss/aliyun-sdk-oss/3.15.0/aliyun-sdk-oss-3.15.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.amdelamar:jhash:2.0.0">
<CLASSES>
<root url="jar://D:/install/jars/com/amdelamar/jhash/2.0.0/jhash-2.0.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/amdelamar/jhash/2.0.0/jhash-2.0.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/amdelamar/jhash/2.0.0/jhash-2.0.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.auth0:java-jwt:3.10.3">
<CLASSES>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/auth0/java-jwt/3.10.3/java-jwt-3.10.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus:3.3.0">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus/3.3.0/mybatis-plus-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-annotation:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-annotation/3.3.2/mybatis-plus-annotation-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-boot-starter:3.3.0">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-boot-starter/3.3.0/mybatis-plus-boot-starter-3.3.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-core:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-core/3.3.2/mybatis-plus-core-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-extension:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-extension/3.3.2/mybatis-plus-extension-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.baomidou:mybatis-plus-generator:3.3.2">
<CLASSES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/baomidou/mybatis-plus-generator/3.3.2/mybatis-plus-generator-3.3.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml:classmate:1.5.1">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.5.1/classmate-1.5.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.5.1/classmate-1.5.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/classmate/1.5.1/classmate-1.5.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.11.4/jackson-annotations-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.11.4/jackson-annotations-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-annotations/2.11.4/jackson-annotations-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.11.4/jackson-core-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.11.4/jackson-core-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-core/2.11.4/jackson-core-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.11.4/jackson-databind-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.11.4/jackson-databind-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/core/jackson-databind/2.11.4/jackson-databind-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.4/jackson-datatype-jdk8-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.4/jackson-datatype-jdk8-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jdk8/2.11.4/jackson-datatype-jdk8-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.4/jackson-datatype-jsr310-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.4/jackson-datatype-jsr310-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/datatype/jackson-datatype-jsr310/2.11.4/jackson-datatype-jsr310-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4">
<CLASSES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/fasterxml/jackson/module/jackson-module-parameter-names/2.11.4/jackson-module-parameter-names-2.11.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.github.jsqlparser:jsqlparser:3.1">
<CLASSES>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/github/jsqlparser/jsqlparser/3.1/jsqlparser-3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.code.gson:gson:2.8.6">
<CLASSES>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.google.guava:guava:20.0">
<CLASSES>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/google/guava/guava/20.0/guava-20.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf:itext-asian:5.2.0">
<CLASSES>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/itextpdf/itext-asian/5.2.0/itext-asian-5.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.itextpdf:itextpdf:5.4.1">
<CLASSES>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/itextpdf/itextpdf/5.4.1/itextpdf-5.4.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.qcloud:cos_api:5.6.8">
<CLASSES>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/qcloud/cos_api/5.6.8/cos_api-5.6.8-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.qcloud:vod_api:2.1.2">
<CLASSES>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/qcloud/vod_api/2.1.2/vod_api-2.1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okhttp:okhttp:2.5.0">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.5.0/okhttp-2.5.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.5.0/okhttp-2.5.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okhttp/okhttp/2.5.0/okhttp-2.5.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.squareup.okio:okio:1.12.0">
<CLASSES>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.12.0/okio-1.12.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.12.0/okio-1.12.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/squareup/okio/okio/1.12.0/okio-1.12.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.64">
<CLASSES>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.64/tencentcloud-sdk-java-3.1.64.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.64/tencentcloud-sdk-java-3.1.64-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/tencentcloudapi/tencentcloud-sdk-java/3.1.64/tencentcloud-sdk-java-3.1.64-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: com.zaxxer:HikariCP:3.4.5">
<CLASSES>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/com/zaxxer/HikariCP/3.4.5/HikariCP-3.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-beanutils:commons-beanutils:1.8.0">
<CLASSES>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-beanutils/commons-beanutils/1.8.0/commons-beanutils-1.8.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-codec:commons-codec:1.15">
<CLASSES>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.15/commons-codec-1.15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.15/commons-codec-1.15-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-codec/commons-codec/1.15/commons-codec-1.15-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-collections:commons-collections:3.2.1">
<CLASSES>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-lang:commons-lang:2.5">
<CLASSES>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-lang/commons-lang/2.5/commons-lang-2.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: commons-logging:commons-logging:1.2">
<CLASSES>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/commons-logging/commons-logging/1.2/commons-logging-1.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-core:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-core/2.9.2/springfox-core-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-schema:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-schema/2.9.2/springfox-schema-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spi:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-spi/2.9.2/springfox-spi-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-spring-web:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-spring-web/2.9.2/springfox-spring-web-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger2:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger2/2.9.2/springfox-swagger2-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-common:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-common/2.9.2/springfox-swagger-common-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.springfox:springfox-swagger-ui:2.9.2">
<CLASSES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-annotations:1.5.20">
<CLASSES>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/swagger/swagger-annotations/1.5.20/swagger-annotations-1.5.20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: io.swagger:swagger-models:1.5.20">
<CLASSES>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/io/swagger/swagger-models/1.5.20/swagger-models-1.5.20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
<CLASSES>
<root url="jar://D:/install/jars/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.activation:javax.activation-api:1.2.0">
<CLASSES>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: javax.xml.bind:jaxb-api:2.3.1">
<CLASSES>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/javax/xml/bind/jaxb-api/2.3.1/jaxb-api-2.3.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: joda-time:joda-time:2.9.9">
<CLASSES>
<root url="jar://D:/install/jars/joda-time/joda-time/2.9.9/joda-time-2.9.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/joda-time/joda-time/2.9.9/joda-time-2.9.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/joda-time/joda-time/2.9.9/joda-time-2.9.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: log4j:log4j:1.2.17">
<CLASSES>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/log4j/log4j/1.2.17/log4j-1.2.17-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: mysql:mysql-connector-java:8.0.23">
<CLASSES>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/mysql/mysql-connector-java/8.0.23/mysql-connector-java-8.0.23-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.bytebuddy:byte-buddy:1.10.22">
<CLASSES>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.10.22/byte-buddy-1.10.22.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.10.22/byte-buddy-1.10.22-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/bytebuddy/byte-buddy/1.10.22/byte-buddy-1.10.22-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.ezmorph:ezmorph:1.0.6">
<CLASSES>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: net.sf.json-lib:json-lib:jdk15:2.4">
<CLASSES>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-jdk15.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/net/sf/json-lib/json-lib/2.4/json-lib-2.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.commons:commons-lang3:3.9">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpclient:4.5.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpclient/4.5.13/httpclient-4.5.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.httpcomponents:httpcore:4.4.14">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-api:2.13.3">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-api/2.13.3/log4j-api-2.13.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/logging/log4j/log4j-to-slf4j/2.13.3/log4j-to-slf4j-2.13.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi/3.13/poi-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-ooxml:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml/3.13/poi-ooxml-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.poi:poi-ooxml-schemas:3.13">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/poi/poi-ooxml-schemas/3.13/poi-ooxml-schemas-3.13-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.45">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.45/tomcat-embed-core-9.0.45.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.45/tomcat-embed-core-9.0.45-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-core/9.0.45/tomcat-embed-core-9.0.45-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.45">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.45/tomcat-embed-websocket-9.0.45.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.45/tomcat-embed-websocket-9.0.45-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/tomcat/embed/tomcat-embed-websocket/9.0.45/tomcat-embed-websocket-9.0.45-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0">
<CLASSES>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/apache/xmlbeans/xmlbeans/2.6.0/xmlbeans-2.6.0-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.aspectj:aspectjweaver:1.9.6">
<CLASSES>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/aspectj/aspectjweaver/1.9.6/aspectjweaver-1.9.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.bouncycastle:bcprov-jdk15on:1.59">
<CLASSES>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/bouncycastle/bcprov-jdk15on/1.59/bcprov-jdk15on-1.59-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.codehaus.jettison:jettison:1.1">
<CLASSES>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/codehaus/jettison/jettison/1.1/jettison-1.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.freemarker:freemarker:2.3.31">
<CLASSES>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.31/freemarker-2.3.31.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.31/freemarker-2.3.31-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/freemarker/freemarker/2.3.31/freemarker-2.3.31-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.glassfish:jakarta.el:3.0.3">
<CLASSES>
<root url="jar://D:/install/jars/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/glassfish/jakarta.el/3.0.3/jakarta.el-3.0.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.ini4j:ini4j:0.5.4">
<CLASSES>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/ini4j/ini4j/0.5.4/ini4j-0.5.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3">
<CLASSES>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-runtime.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/jacoco/org.jacoco.agent/0.8.3/org.jacoco.agent-0.8.3-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.jdom:jdom2:2.0.6">
<CLASSES>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/jdom/jdom2/2.0.6/jdom2-2.0.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mapstruct:mapstruct:1.2.0.Final">
<CLASSES>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mapstruct/mapstruct/1.2.0.Final/mapstruct-1.2.0.Final-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mybatis:mybatis:3.5.4">
<CLASSES>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mybatis/mybatis/3.5.4/mybatis-3.5.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.mybatis:mybatis-spring:2.0.4">
<CLASSES>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/mybatis/mybatis-spring/2.0.4/mybatis-spring-2.0.4-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.projectlombok:lombok:1.18.20">
<CLASSES>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.20/lombok-1.18.20-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/projectlombok/lombok/1.18.20/lombok-1.18.20-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath/1.0.7/jlatexmath-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-cyrillic/1.0.7/jlatexmath-font-cyrillic-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7">
<CLASSES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/scilab/forge/jlatexmath-font-greek/1.0.7/jlatexmath-font-greek-1.0.7-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:jul-to-slf4j:1.7.30">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/jul-to-slf4j/1.7.30/jul-to-slf4j-1.7.30-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-api:1.7.30">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-api/1.7.30/slf4j-api-1.7.30-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.slf4j:slf4j-log4j12:1.7.30">
<CLASSES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.4.5/spring-boot-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.4.5/spring-boot-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot/2.4.5/spring-boot-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.4.5/spring-boot-autoconfigure-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.4.5/spring-boot-autoconfigure-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-autoconfigure/2.4.5/spring-boot-autoconfigure-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.4.5/spring-boot-configuration-processor-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.4.5/spring-boot-configuration-processor-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-configuration-processor/2.4.5/spring-boot-configuration-processor-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.4.5/spring-boot-starter-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.4.5/spring-boot-starter-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter/2.4.5/spring-boot-starter-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-aop:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-aop/2.4.5/spring-boot-starter-aop-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-jdbc/2.4.5/spring-boot-starter-jdbc-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.4.5/spring-boot-starter-json-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.4.5/spring-boot-starter-json-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-json/2.4.5/spring-boot-starter-json-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.4.5/spring-boot-starter-logging-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.4.5/spring-boot-starter-logging-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-logging/2.4.5/spring-boot-starter-logging-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.4.5/spring-boot-starter-tomcat-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.4.5/spring-boot-starter-tomcat-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-tomcat/2.4.5/spring-boot-starter-tomcat-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.5">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.4.5/spring-boot-starter-web-2.4.5.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.4.5/spring-boot-starter-web-2.4.5-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/boot/spring-boot-starter-web/2.4.5/spring-boot-starter-web-2.4.5-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-core/1.2.0.RELEASE/spring-plugin-core-1.2.0.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/plugin/spring-plugin-metadata/1.2.0.RELEASE/spring-plugin-metadata-1.2.0.RELEASE-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-aop:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.3.6/spring-aop-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.3.6/spring-aop-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-aop/5.3.6/spring-aop-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-beans:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.3.6/spring-beans-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.3.6/spring-beans-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-beans/5.3.6/spring-beans-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-context:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.3.6/spring-context-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.3.6/spring-context-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-context/5.3.6/spring-context-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-core:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.3.6/spring-core-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.3.6/spring-core-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-core/5.3.6/spring-core-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-expression:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.3.6/spring-expression-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.3.6/spring-expression-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-expression/5.3.6/spring-expression-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-jcl:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.3.6/spring-jcl-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.3.6/spring-jcl-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-jcl/5.3.6/spring-jcl-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-jdbc:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-jdbc/5.3.6/spring-jdbc-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-tx:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-tx/5.3.6/spring-tx-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-web:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.3.6/spring-web-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.3.6/spring-web-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-web/5.3.6/spring-web-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.springframework:spring-webmvc:5.3.6">
<CLASSES>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.3.6/spring-webmvc-5.3.6.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.3.6/spring-webmvc-5.3.6-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/springframework/spring-webmvc/5.3.6/spring-webmvc-5.3.6-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: org.yaml:snakeyaml:1.27">
<CLASSES>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.27/snakeyaml-1.27.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.27/snakeyaml-1.27-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/org/yaml/snakeyaml/1.27/snakeyaml-1.27-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<component name="libraryTable">
<library name="Maven: stax:stax-api:1.0.1">
<CLASSES>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1.jar!/" />
</CLASSES>
<JAVADOC>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1-javadoc.jar!/" />
</JAVADOC>
<SOURCES>
<root url="jar://D:/install/jars/stax/stax-api/1.0.1/stax-api-1.0.1-sources.jar!/" />
</SOURCES>
</library>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/teachaicms.iml" filepath="$PROJECT_DIR$/teachaicms.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="BeansEndpointTabSettings">
<option name="showLiveBeansGraph" value="false" />
</component>
<component name="ChangeListManager">
<list default="true" id="84c8f1a0-3c11-409e-85b7-3686a36341f1" name="Default Changelist" comment="">
<change afterPath="$PROJECT_DIR$/logs/springboot-logback/info/2023-08-01-0.log.gz" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/1.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/10.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/11.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/12.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/13.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/14.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/15.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/16.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/17.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/18.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/19.gif" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/2.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/20.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/21.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/22.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/23.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/24.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/25.gif" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/26.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/27.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/28.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/29.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/3.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/30.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/31.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/33.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/34.png" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/4.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/5.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/6.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/7.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/8.jpg" afterDir="false" />
<change afterPath="$PROJECT_DIR$/src/main/resources/static/9.jpg" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback-error.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/springboot-logback-error.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback-info.log" beforeDir="false" afterPath="$PROJECT_DIR$/logs/springboot-logback-info.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-03-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-04-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-10-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-11-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-12-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-13-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-14-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-17-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-18-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-19-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-20-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/logs/springboot-logback/info/2023-07-21-0.log.gz" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/controller/PaperDictController.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/controller/PaperDictController.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/dto/paper/PaperStudentExerciseDTO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/dto/paper/PaperStudentExerciseDTO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/service/PaperDictService.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/service/PaperDictService.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/BatchExamServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/BatchExamServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/PaperDictServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/PaperDictServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/StudentServiceImpl.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/service/impl/StudentServiceImpl.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/vo/exercise/ExercisesWithAnswerVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/vo/exercise/ExercisesWithAnswerVO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/java/com/meishu/vo/exercise/ScoreDetailsVO.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/java/com/meishu/vo/exercise/ScoreDetailsVO.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/application-dev.properties" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/application-local.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application-local.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/application.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/application.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/code.properties" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/code.properties" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/mapper/ExerciseDoneHistoryMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mapper/ExerciseDoneHistoryMapper.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/mapper/PaperDictMapper.xml" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/mapper/PaperDictMapper.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689832431592tmp_1761f81855791993a84c6631ae7a434f482a4606a40d0636.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16899235894131689923481019.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689923766029图片1.png" beforeDir="false" afterPath="$PROJECT_DIR$/src/main/resources/static/32.png" afterDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16899239386521689923481019.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689923994992图片1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16899244667821689923481019.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689924520974图片1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689924569182图片1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689924636414图片1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689926245085图片1.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/1689926381453图片2.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904466882761690446647678.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904470430491690446647678.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904471055331690446647678.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904486323771690448607180.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904487261871690448695674.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/src/main/resources/static/img/16904488843531690448695674.png" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Interface" />
<option value="Class" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY">
<map>
<entry key="$PROJECT_DIR$" value="oss上传版本" />
</map>
</option>
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
<option name="RESET_MODE" value="HARD" />
<option name="UPDATE_TYPE" value="REBASE" />
</component>
<component name="MavenImportPreferences">
<option name="generalSettings">
<MavenGeneralSettings>
<option name="localRepository" value="D:\install\jars" />
<option name="mavenHome" value="D:/install/maven" />
<option name="userSettingsFile" value="D:\install\maven\conf\settings.xml" />
</MavenGeneralSettings>
</option>
<option name="importingSettings">
<MavenImportingSettings>
<option name="importAutomatically" value="true" />
</MavenImportingSettings>
</option>
</component>
<component name="ProjectId" id="26EGAXgBEcSQhOpZ95eY5zuB1kp" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true">
<OptionsSetting value="false" id="Update" />
<ConfirmationsSetting value="2" id="Add" />
</component>
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="ASKED_ADD_EXTERNAL_FILES" value="true" />
<property name="RequestMappingsPanelOrder0" value="0" />
<property name="RequestMappingsPanelOrder1" value="1" />
<property name="RequestMappingsPanelWidth0" value="75" />
<property name="RequestMappingsPanelWidth1" value="75" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="restartRequiresConfirmation" value="false" />
<property name="run.code.analysis.last.selected.profile" value="pProject Default" />
<property name="settings.editor.selected.configurable" value="preferences.editor" />
</component>
<component name="RecentsManager">
<key name="CopyFile.RECENT_KEYS">
<recent name="D:\code\kaopingxitong\src\main\resources" />
<recent name="D:\code\teachaicms\src\main\java\com\meishu\vo" />
</key>
<key name="CopyClassDialog.RECENTS_KEY">
<recent name="com.meishu.util" />
<recent name="com.meishu.controller" />
</key>
<key name="MoveFile.RECENT_KEYS">
<recent name="D:\code\kaopingxitong\src\main\resources\static\img" />
<recent name="D:\code\kaopingxitong\src\main\resources\statics" />
</key>
</component>
<component name="RunManager" selected="Spring Boot.MeishuApplication">
<configuration name="CodeGenerator" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.meishu.util.CodeGenerator" />
<module name="teachaicms" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.meishu.util.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="MathUtil" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.meishu.util.MathUtil" />
<module name="teachaicms" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.meishu.util.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="UnitTreeStudentServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.meishu.service.impl.UnitTreeStudentServiceImpl" />
<module name="teachaicms" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.meishu.service.impl.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="UpgradeClassJob" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.meishu.job.UpgradeClassJob" />
<module name="teachaicms" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.meishu.job.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="XueshujieStuServiceImpl" type="Application" factoryName="Application" temporary="true" nameIsGenerated="true">
<option name="MAIN_CLASS_NAME" value="com.meishu.service.impl.XueshujieStuServiceImpl" />
<module name="teachaicms" />
<extension name="coverage">
<pattern>
<option name="PATTERN" value="com.meishu.service.impl.*" />
<option name="ENABLED" value="true" />
</pattern>
</extension>
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="MeishuApplication" type="SpringBootApplicationConfigurationType" factoryName="Spring Boot">
<module name="teachaicms" />
<option name="SPRING_BOOT_MAIN_CLASS" value="com.meishu.MeishuApplication" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<recent_temporary>
<list>
<item itemvalue="Application.XueshujieStuServiceImpl" />
<item itemvalue="Application.UpgradeClassJob" />
<item itemvalue="Application.UnitTreeStudentServiceImpl" />
<item itemvalue="Application.MathUtil" />
<item itemvalue="Application.CodeGenerator" />
</list>
</recent_temporary>
</component>
<component name="SshConsoleOptionsProvider">
<option name="myEncoding" value="UTF-8" />
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="84c8f1a0-3c11-409e-85b7-3686a36341f1" name="Default Changelist" comment="" />
<created>1646981188713</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1646981188713</updated>
<workItem from="1646981190346" duration="825000" />
<workItem from="1646983670436" duration="599000" />
<workItem from="1647235052903" duration="5032000" />
<workItem from="1647243550384" duration="11000" />
<workItem from="1647243575164" duration="4000" />
<workItem from="1647243587639" duration="13000" />
<workItem from="1647244903024" duration="5460000" />
<workItem from="1647306638738" duration="7112000" />
<workItem from="1647824646352" duration="1143000" />
<workItem from="1648539216208" duration="14000" />
<workItem from="1648540441902" duration="325000" />
<workItem from="1654484538921" duration="11000" />
<workItem from="1657243844726" duration="594000" />
<workItem from="1657766741642" duration="456000" />
<workItem from="1658734735453" duration="81000" />
<workItem from="1658781697628" duration="19000" />
<workItem from="1658977004542" duration="88000" />
<workItem from="1659593863483" duration="9026000" />
<workItem from="1659661001749" duration="899000" />
<workItem from="1659665481154" duration="8559000" />
<workItem from="1659918274435" duration="17989000" />
<workItem from="1660004908761" duration="14881000" />
<workItem from="1660035755542" duration="284000" />
<workItem from="1660096381221" duration="20696000" />
<workItem from="1660179437772" duration="2723000" />
<workItem from="1660528510008" duration="15594000" />
<workItem from="1660612357236" duration="2458000" />
<workItem from="1660698993837" duration="2099000" />
<workItem from="1660785709043" duration="4694000" />
<workItem from="1660871932328" duration="5502000" />
<workItem from="1661132929995" duration="3532000" />
<workItem from="1661137718287" duration="4152000" />
<workItem from="1661308474119" duration="1040000" />
<workItem from="1661325949290" duration="3195000" />
<workItem from="1661392455799" duration="11369000" />
<workItem from="1661476942079" duration="1765000" />
<workItem from="1661739726122" duration="8622000" />
<workItem from="1661767704943" duration="647000" />
<workItem from="1661822532050" duration="15000" />
<workItem from="1661837712780" duration="3654000" />
<workItem from="1661841425095" duration="1178000" />
<workItem from="1661913115170" duration="2721000" />
<workItem from="1661997533399" duration="3389000" />
<workItem from="1662372677299" duration="712000" />
<workItem from="1662536006859" duration="11000" />
<workItem from="1662626248160" duration="596000" />
<workItem from="1662690699649" duration="777000" />
<workItem from="1663039451605" duration="14736000" />
<workItem from="1663118464322" duration="599000" />
<workItem from="1663208140940" duration="1828000" />
<workItem from="1663235240007" duration="606000" />
<workItem from="1663636814631" duration="736000" />
<workItem from="1663664043388" duration="2565000" />
<workItem from="1663666859521" duration="919000" />
<workItem from="1663725390247" duration="13655000" />
<workItem from="1663811743262" duration="2652000" />
<workItem from="1663896382418" duration="3897000" />
<workItem from="1663924860798" duration="1226000" />
<workItem from="1664155765097" duration="1000" />
<workItem from="1664155779848" duration="1789000" />
<workItem from="1664242424014" duration="2455000" />
<workItem from="1664328613467" duration="3297000" />
<workItem from="1664414140290" duration="12918000" />
<workItem from="1664501053460" duration="10734000" />
<workItem from="1664547404544" duration="981000" />
<workItem from="1665192461622" duration="2838000" />
<workItem from="1665201222958" duration="5222000" />
<workItem from="1665987239977" duration="604000" />
<workItem from="1668499540640" duration="330000" />
<workItem from="1670235082667" duration="714000" />
<workItem from="1670381913774" duration="605000" />
<workItem from="1670383292758" duration="94000" />
<workItem from="1670383508177" duration="2091000" />
<workItem from="1670492116926" duration="32000" />
<workItem from="1673924287548" duration="117000" />
<workItem from="1675230778563" duration="515000" />
<workItem from="1676430144040" duration="189000" />
<workItem from="1676447209862" duration="53000" />
<workItem from="1676970752564" duration="79000" />
<workItem from="1679476774124" duration="219000" />
<workItem from="1681698654704" duration="568000" />
<workItem from="1681811741932" duration="280000" />
<workItem from="1682239744177" duration="10000" />
<workItem from="1682302358236" duration="162000" />
<workItem from="1682326534161" duration="1000" />
<workItem from="1682326797421" duration="2838000" />
<workItem from="1682404165490" duration="2526000" />
<workItem from="1682476843344" duration="99000" />
<workItem from="1682480908098" duration="727000" />
<workItem from="1684979962962" duration="23710000" />
<workItem from="1685063373662" duration="24231000" />
<workItem from="1685322969216" duration="25012000" />
<workItem from="1685411955225" duration="22453000" />
<workItem from="1685498668943" duration="9908000" />
<workItem from="1685582430423" duration="6900000" />
<workItem from="1685617197038" duration="50000" />
<workItem from="1685670775395" duration="4907000" />
<workItem from="1685702564890" duration="1000" />
<workItem from="1685930281328" duration="1842000" />
<workItem from="1685940709688" duration="21361000" />
<workItem from="1686015172676" duration="18601000" />
<workItem from="1686102805427" duration="10836000" />
<workItem from="1686134540176" duration="6000" />
<workItem from="1686136172415" duration="13000" />
<workItem from="1686141703488" duration="18000" />
<workItem from="1686188936027" duration="601000" />
<workItem from="1686282127592" duration="14803000" />
<workItem from="1686533045680" duration="13780000" />
<workItem from="1686640225892" duration="4260000" />
<workItem from="1686706221576" duration="6295000" />
<workItem from="1686732065338" duration="1193000" />
<workItem from="1687333159634" duration="15000" />
<workItem from="1687485822106" duration="991000" />
<workItem from="1687516224278" duration="177000" />
<workItem from="1687759140082" duration="13846000" />
<workItem from="1687829395394" duration="18718000" />
<workItem from="1687917115251" duration="16741000" />
<workItem from="1688003973341" duration="19855000" />
<workItem from="1688090976085" duration="18599000" />
<workItem from="1688347191056" duration="1101000" />
<workItem from="1688454292681" duration="1915000" />
<workItem from="1688519971648" duration="6000" />
<workItem from="1688957699109" duration="2292000" />
<workItem from="1688960613607" duration="5053000" />
<workItem from="1689039660633" duration="20806000" />
<workItem from="1689124839274" duration="13274000" />
<workItem from="1689150119701" duration="6548000" />
<workItem from="1689211784225" duration="3157000" />
<workItem from="1689241502437" duration="2000" />
<workItem from="1689300194995" duration="1100000" />
<workItem from="1689301323703" duration="148000" />
<workItem from="1689301493886" duration="13274000" />
<workItem from="1689415767162" duration="566000" />
<workItem from="1689555098176" duration="3404000" />
<workItem from="1689644230019" duration="6944000" />
<workItem from="1689731459129" duration="13009000" />
<workItem from="1689816542945" duration="1843000" />
<workItem from="1689841582890" duration="1304000" />
<workItem from="1689842922957" duration="3767000" />
<workItem from="1689902354848" duration="10994000" />
<workItem from="1690162293622" duration="1175000" />
<workItem from="1690366884379" duration="52000" />
<workItem from="1690439853030" duration="656000" />
<workItem from="1690441546881" duration="7000" />
<workItem from="1690507791241" duration="3225000" />
<workItem from="1690781579027" duration="1167000" />
<workItem from="1690786565317" duration="847000" />
<workItem from="1690790012654" duration="6960000" />
<workItem from="1690853449364" duration="929000" />
<workItem from="1691576262153" duration="703000" />
<workItem from="1691632117512" duration="596000" />
<workItem from="1692686325795" duration="1656000" />
<workItem from="1692843189428" duration="1994000" />
<workItem from="1692871419475" duration="285000" />
<workItem from="1692874433071" duration="887000" />
<workItem from="1692943313570" duration="4535000" />
<workItem from="1693094449148" duration="13084000" />
<workItem from="1694275764540" duration="228000" />
<workItem from="1698121443665" duration="87000" />
</task>
<task id="LOCAL-00001" summary="20220314 疫情备份">
<created>1647252315378</created>
<option name="number" value="00001" />
<option name="presentableId" value="LOCAL-00001" />
<option name="project" value="LOCAL" />
<updated>1647252315378</updated>
</task>
<task id="LOCAL-00002" summary="20220315 疫情备份">
<created>1647340300694</created>
<option name="number" value="00002" />
<option name="presentableId" value="LOCAL-00002" />
<option name="project" value="LOCAL" />
<updated>1647340300694</updated>
</task>
<task id="LOCAL-00003" summary="新建单元">
<created>1659691523317</created>
<option name="number" value="00003" />
<option name="presentableId" value="LOCAL-00003" />
<option name="project" value="LOCAL" />
<updated>1659691523317</updated>
</task>
<task id="LOCAL-00004" summary="大版本更新">
<created>1661767777086</created>
<option name="number" value="00004" />
<option name="presentableId" value="LOCAL-00004" />
<option name="project" value="LOCAL" />
<updated>1661767777087</updated>
</task>
<task id="LOCAL-00005" summary="免修考">
<created>1664536865797</created>
<option name="number" value="00005" />
<option name="presentableId" value="LOCAL-00005" />
<option name="project" value="LOCAL" />
<updated>1664536865797</updated>
</task>
<task id="LOCAL-00006" summary="2023年前备份">
<created>1673924361408</created>
<option name="number" value="00006" />
<option name="presentableId" value="LOCAL-00006" />
<option name="project" value="LOCAL" />
<updated>1673924361408</updated>
</task>
<task id="LOCAL-00007" summary="oss">
<created>1681811762016</created>
<option name="number" value="00007" />
<option name="presentableId" value="LOCAL-00007" />
<option name="project" value="LOCAL" />
<updated>1681811762016</updated>
</task>
<task id="LOCAL-00008" summary="学术节一期">
<created>1687486384774</created>
<option name="number" value="00008" />
<option name="presentableId" value="LOCAL-00008" />
<option name="project" value="LOCAL" />
<updated>1687486384774</updated>
</task>
<task id="LOCAL-00009" summary="学术节一期">
<created>1690366906814</created>
<option name="number" value="00009" />
<option name="presentableId" value="LOCAL-00009" />
<option name="project" value="LOCAL" />
<updated>1690366906814</updated>
</task>
<option name="localTasksCounter" value="10" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="version" value="1" />
</component>
<component name="Vcs.Log.Tabs.Properties">
<option name="TAB_STATES">
<map>
<entry key="MAIN">
<value>
<State>
<option name="COLUMN_ORDER" />
</State>
</value>
</entry>
</map>
</option>
</component>
<component name="VcsManagerConfiguration">
<option name="ADD_EXTERNAL_FILES_SILENTLY" value="true" />
<MESSAGE value="20220314 疫情备份" />
<MESSAGE value="20220315 疫情备份" />
<MESSAGE value="新建单元" />
<MESSAGE value="大版本更新" />
<MESSAGE value="免修考" />
<MESSAGE value="2023年前备份" />
<MESSAGE value="oss" />
<MESSAGE value="学术节一期" />
<MESSAGE value="快递考试 题目随机版本" />
<option name="LAST_COMMIT_MESSAGE" value="快递考试 题目随机版本" />
</component>
<component name="WindowStateProjectService">
<state x="458" y="112" key="CommitChangelistDialog2" timestamp="1752758704214">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="458" y="112" key="CommitChangelistDialog2/0.0.1920.1040/1920.0.1920.1040@0.0.1920.1040" timestamp="1752758704214" />
<state x="552" y="253" key="Vcs.Push.Dialog.v2" timestamp="1752758714414">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="552" y="253" key="Vcs.Push.Dialog.v2/0.0.1920.1040/1920.0.1920.1040@0.0.1920.1040" timestamp="1752758714414" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<breakpoints>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/meishu/service/impl/AdministerServiceImpl.java</url>
<line>53</line>
<option name="timeStamp" value="2" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/meishu/service/impl/PaperDictServiceImpl.java</url>
<line>128</line>
<option name="timeStamp" value="8" />
</line-breakpoint>
<line-breakpoint enabled="true" type="java-line">
<url>file://$PROJECT_DIR$/src/main/java/com/meishu/service/impl/PaperDictServiceImpl.java</url>
<line>141</line>
<option name="timeStamp" value="9" />
</line-breakpoint>
</breakpoints>
</breakpoint-manager>
<watches-manager>
<configuration name="SpringBootApplicationConfigurationType">
<watch expression="downpdfVO.getMembers().get(i)" />
<watch expression="startDate.after(new Date())" />
<watch expression="new Date(new Date().getTime() + 24 * 60 * 60 * 1000)" />
<watch expression="endDate.before(new Date(new Date().getTime() + 24 * 60 * 60 * 1000))" />
<watch expression="usersVOS.get(i).getPhone()" />
</configuration>
</watches-manager>
</component>
</project>
\ No newline at end of file
This diff could not be displayed because it is too large.
2023-08-25 14:54:16,405 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108 - Tomcat initialized with port(s): 23458 (http)
2023-08-25 14:54:16,426 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23458"]
2023-08-25 14:54:16,427 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
2023-08-25 14:54:16,428 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.45]
2023-08-25 14:54:16,559 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
2023-08-25 14:54:16,560 [main] INFO org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:289 - Root WebApplicationContext: initialization completed in 2039 ms
2023-08-25 14:54:16,814 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
2023-08-25 14:54:19,228 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
2023-08-25 14:54:30,306 [main] INFO springfox.documentation.spring.web.PropertySourcedRequestMappingHandlerMapping:69 - Mapped URL path [/v2/api-docs] onto method [springfox.documentation.swagger2.web.Swagger2Controller#getDocumentation(String, HttpServletRequest)]
2023-08-25 14:54:30,481 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:181 - Initializing ExecutorService 'applicationTaskExecutor'
2023-08-25 14:54:30,875 [main] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:181 - Initializing ExecutorService 'taskScheduler'
2023-08-25 14:54:30,944 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Starting ProtocolHandler ["http-nio-23458"]
2023-08-25 14:54:30,972 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:220 - Tomcat started on port(s): 23458 (http) with context path ''
2023-08-25 14:54:30,974 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:160 - Context refreshed
2023-08-25 14:54:31,004 [main] INFO springfox.documentation.spring.web.plugins.DocumentationPluginsBootstrapper:163 - Found 1 custom documentation plugin(s)
2023-08-25 14:54:31,072 [main] INFO springfox.documentation.spring.web.scanners.ApiListingReferenceScanner:41 - Scanning for api listing references
2023-08-25 14:54:31,301 [main] INFO springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator:40 - Generating unique operation named: examsUsingPOST_1
2023-08-25 14:54:31,357 [main] INFO springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator:40 - Generating unique operation named: exercisesUsingPOST_1
2023-08-25 14:54:31,365 [main] INFO springfox.documentation.spring.web.readers.operation.CachingOperationNameGenerator:40 - Generating unique operation named: loginUsingPOST_1
2023-08-25 14:55:40,320 [http-nio-23458-exec-1] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring DispatcherServlet 'dispatcherServlet'
2023-08-25 14:55:40,320 [http-nio-23458-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:525 - Initializing Servlet 'dispatcherServlet'
2023-08-25 14:55:40,323 [http-nio-23458-exec-1] INFO org.springframework.web.servlet.DispatcherServlet:547 - Completed initialization in 2 ms
2023-08-25 14:57:21,960 [SpringContextShutdownHook] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler:218 - Shutting down ExecutorService 'taskScheduler'
2023-08-25 14:57:21,963 [SpringContextShutdownHook] INFO org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor:218 - Shutting down ExecutorService 'applicationTaskExecutor'
2023-08-25 14:57:21,970 [SpringContextShutdownHook] INFO com.alibaba.druid.pool.DruidDataSource:2029 - {dataSource-1} closing ...
2023-08-25 14:57:21,981 [SpringContextShutdownHook] INFO com.alibaba.druid.pool.DruidDataSource:2101 - {dataSource-1} closed
2023-08-25 14:59:02,619 [main] INFO org.springframework.boot.web.embedded.tomcat.TomcatWebServer:108 - Tomcat initialized with port(s): 23458 (http)
2023-08-25 14:59:02,631 [main] INFO org.apache.coyote.http11.Http11NioProtocol:173 - Initializing ProtocolHandler ["http-nio-23458"]
2023-08-25 14:59:02,632 [main] INFO org.apache.catalina.core.StandardService:173 - Starting service [Tomcat]
2023-08-25 14:59:02,632 [main] INFO org.apache.catalina.core.StandardEngine:173 - Starting Servlet engine: [Apache Tomcat/9.0.45]
2023-08-25 14:59:02,731 [main] INFO org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/]:173 - Initializing Spring embedded WebApplicationContext
2023-08-25 14:59:02,731 [main] INFO org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext:289 - Root WebApplicationContext: initialization completed in 1914 ms
2023-08-25 14:59:02,914 [main] INFO com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure:56 - Init DruidDataSource
2023-08-25 14:59:05,744 [main] INFO com.alibaba.druid.pool.DruidDataSource:994 - {dataSource-1} inited
#!/bin/sh
# ----------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ----------------------------------------------------------------------------
# ----------------------------------------------------------------------------
# Maven Start Up Batch script
#
# Required ENV vars:
# ------------------
# JAVA_HOME - location of a JDK home dir
#
# Optional ENV vars
# -----------------
# M2_HOME - location of maven2's installed home dir
# MAVEN_OPTS - parameters passed to the Java VM when running Maven
# e.g. to debug Maven itself, use
# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
# ----------------------------------------------------------------------------
if [ -z "$MAVEN_SKIP_RC" ] ; then
if [ -f /etc/mavenrc ] ; then
. /etc/mavenrc
fi
if [ -f "$HOME/.mavenrc" ] ; then
. "$HOME/.mavenrc"
fi
fi
# OS specific support. $var _must_ be set to either true or false.
cygwin=false;
darwin=false;
mingw=false
case "`uname`" in
CYGWIN*) cygwin=true ;;
MINGW*) mingw=true;;
Darwin*) darwin=true
# Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
# See https://developer.apple.com/library/mac/qa/qa1170/_index.html
if [ -z "$JAVA_HOME" ]; then
if [ -x "/usr/libexec/java_home" ]; then
export JAVA_HOME="`/usr/libexec/java_home`"
else
export JAVA_HOME="/Library/Java/Home"
fi
fi
;;
esac
if [ -z "$JAVA_HOME" ] ; then
if [ -r /etc/gentoo-release ] ; then
JAVA_HOME=`java-config --jre-home`
fi
fi
if [ -z "$M2_HOME" ] ; then
## resolve links - $0 may be a link to maven's home
PRG="$0"
# need this for relative symlinks
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG="`dirname "$PRG"`/$link"
fi
done
saveddir=`pwd`
M2_HOME=`dirname "$PRG"`/..
# make it fully qualified
M2_HOME=`cd "$M2_HOME" && pwd`
cd "$saveddir"
# echo Using m2 at $M2_HOME
fi
# For Cygwin, ensure paths are in UNIX format before anything is touched
if $cygwin ; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --unix "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
fi
# For Mingw, ensure paths are in UNIX format before anything is touched
if $mingw ; then
[ -n "$M2_HOME" ] &&
M2_HOME="`(cd "$M2_HOME"; pwd)`"
[ -n "$JAVA_HOME" ] &&
JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
fi
if [ -z "$JAVA_HOME" ]; then
javaExecutable="`which javac`"
if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
# readlink(1) is not available as standard on Solaris 10.
readLink=`which readlink`
if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
if $darwin ; then
javaHome="`dirname \"$javaExecutable\"`"
javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
else
javaExecutable="`readlink -f \"$javaExecutable\"`"
fi
javaHome="`dirname \"$javaExecutable\"`"
javaHome=`expr "$javaHome" : '\(.*\)/bin'`
JAVA_HOME="$javaHome"
export JAVA_HOME
fi
fi
fi
if [ -z "$JAVACMD" ] ; then
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
else
JAVACMD="`which java`"
fi
fi
if [ ! -x "$JAVACMD" ] ; then
echo "Error: JAVA_HOME is not defined correctly." >&2
echo " We cannot execute $JAVACMD" >&2
exit 1
fi
if [ -z "$JAVA_HOME" ] ; then
echo "Warning: JAVA_HOME environment variable is not set."
fi
CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
# traverses directory structure from process work directory to filesystem root
# first directory with .mvn subdirectory is considered project base directory
find_maven_basedir() {
if [ -z "$1" ]
then
echo "Path not specified to find_maven_basedir"
return 1
fi
basedir="$1"
wdir="$1"
while [ "$wdir" != '/' ] ; do
if [ -d "$wdir"/.mvn ] ; then
basedir=$wdir
break
fi
# workaround for JBEAP-8937 (on Solaris 10/Sparc)
if [ -d "${wdir}" ]; then
wdir=`cd "$wdir/.."; pwd`
fi
# end of workaround
done
echo "${basedir}"
}
# concatenates all lines of a file
concat_lines() {
if [ -f "$1" ]; then
echo "$(tr -s '\n' ' ' < "$1")"
fi
}
BASE_DIR=`find_maven_basedir "$(pwd)"`
if [ -z "$BASE_DIR" ]; then
exit 1;
fi
##########################################################################################
# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
# This allows using the maven wrapper in projects that prohibit checking in binary data.
##########################################################################################
if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found .mvn/wrapper/maven-wrapper.jar"
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
fi
if [ -n "$MVNW_REPOURL" ]; then
jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
else
jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
fi
while IFS="=" read key value; do
case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
esac
done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
if [ "$MVNW_VERBOSE" = true ]; then
echo "Downloading from: $jarUrl"
fi
wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
if $cygwin; then
wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"`
fi
if command -v wget > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found wget ... using wget"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
wget "$jarUrl" -O "$wrapperJarPath"
else
wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath"
fi
elif command -v curl > /dev/null; then
if [ "$MVNW_VERBOSE" = true ]; then
echo "Found curl ... using curl"
fi
if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
curl -o "$wrapperJarPath" "$jarUrl" -f
else
curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f
fi
else
if [ "$MVNW_VERBOSE" = true ]; then
echo "Falling back to using Java to download"
fi
javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
# For Cygwin, switch paths to Windows format before running javac
if $cygwin; then
javaClass=`cygpath --path --windows "$javaClass"`
fi
if [ -e "$javaClass" ]; then
if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Compiling MavenWrapperDownloader.java ..."
fi
# Compiling the Java class
("$JAVA_HOME/bin/javac" "$javaClass")
fi
if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
# Running the downloader
if [ "$MVNW_VERBOSE" = true ]; then
echo " - Running MavenWrapperDownloader.java ..."
fi
("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
fi
fi
fi
fi
##########################################################################################
# End of extension
##########################################################################################
export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
if [ "$MVNW_VERBOSE" = true ]; then
echo $MAVEN_PROJECTBASEDIR
fi
MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
# For Cygwin, switch paths to Windows format before running java
if $cygwin; then
[ -n "$M2_HOME" ] &&
M2_HOME=`cygpath --path --windows "$M2_HOME"`
[ -n "$JAVA_HOME" ] &&
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
[ -n "$CLASSPATH" ] &&
CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
[ -n "$MAVEN_PROJECTBASEDIR" ] &&
MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
fi
# Provide a "standardized" way to retrieve the CLI args that will
# work with both Windows and non-Windows executions.
MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@"
export MAVEN_CMD_LINE_ARGS
WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
exec "$JAVACMD" \
$MAVEN_OPTS \
-classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
"-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
@REM ----------------------------------------------------------------------------
@REM Licensed to the Apache Software Foundation (ASF) under one
@REM or more contributor license agreements. See the NOTICE file
@REM distributed with this work for additional information
@REM regarding copyright ownership. The ASF licenses this file
@REM to you under the Apache License, Version 2.0 (the
@REM "License"); you may not use this file except in compliance
@REM with the License. You may obtain a copy of the License at
@REM
@REM https://www.apache.org/licenses/LICENSE-2.0
@REM
@REM Unless required by applicable law or agreed to in writing,
@REM software distributed under the License is distributed on an
@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
@REM KIND, either express or implied. See the License for the
@REM specific language governing permissions and limitations
@REM under the License.
@REM ----------------------------------------------------------------------------
@REM ----------------------------------------------------------------------------
@REM Maven Start Up Batch script
@REM
@REM Required ENV vars:
@REM JAVA_HOME - location of a JDK home dir
@REM
@REM Optional ENV vars
@REM M2_HOME - location of maven2's installed home dir
@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
@REM e.g. to debug Maven itself, use
@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
@REM ----------------------------------------------------------------------------
@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
@echo off
@REM set title of command window
title %0
@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
@REM set %HOME% to equivalent of $HOME
if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
@REM Execute a user defined script before this one
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
@REM check for pre script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
:skipRcPre
@setlocal
set ERROR_CODE=0
@REM To isolate internal variables from possible post scripts, we use another setlocal
@setlocal
@REM ==== START VALIDATION ====
if not "%JAVA_HOME%" == "" goto OkJHome
echo.
echo Error: JAVA_HOME not found in your environment. >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
:OkJHome
if exist "%JAVA_HOME%\bin\java.exe" goto init
echo.
echo Error: JAVA_HOME is set to an invalid directory. >&2
echo JAVA_HOME = "%JAVA_HOME%" >&2
echo Please set the JAVA_HOME variable in your environment to match the >&2
echo location of your Java installation. >&2
echo.
goto error
@REM ==== END VALIDATION ====
:init
@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
@REM Fallback to current working directory if not found.
set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
set EXEC_DIR=%CD%
set WDIR=%EXEC_DIR%
:findBaseDir
IF EXIST "%WDIR%"\.mvn goto baseDirFound
cd ..
IF "%WDIR%"=="%CD%" goto baseDirNotFound
set WDIR=%CD%
goto findBaseDir
:baseDirFound
set MAVEN_PROJECTBASEDIR=%WDIR%
cd "%EXEC_DIR%"
goto endDetectBaseDir
:baseDirNotFound
set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
cd "%EXEC_DIR%"
:endDetectBaseDir
IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
@setlocal EnableExtensions EnableDelayedExpansion
for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
:endReadAdditionalConfig
SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B
)
@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
if exist %WRAPPER_JAR% (
if "%MVNW_VERBOSE%" == "true" (
echo Found %WRAPPER_JAR%
)
) else (
if not "%MVNW_REPOURL%" == "" (
SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar"
)
if "%MVNW_VERBOSE%" == "true" (
echo Couldn't find %WRAPPER_JAR%, downloading it ...
echo Downloading from: %DOWNLOAD_URL%
)
powershell -Command "&{"^
"$webclient = new-object System.Net.WebClient;"^
"if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
"$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
"}"^
"[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^
"}"
if "%MVNW_VERBOSE%" == "true" (
echo Finished downloading %WRAPPER_JAR%
)
)
@REM End of extension
@REM Provide a "standardized" way to retrieve the CLI args that will
@REM work with both Windows and non-Windows executions.
set MAVEN_CMD_LINE_ARGS=%*
%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
if ERRORLEVEL 1 goto error
goto end
:error
set ERROR_CODE=1
:end
@endlocal & set ERROR_CODE=%ERROR_CODE%
if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
@REM check for post script, once with legacy .bat ending and once with .cmd ending
if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
:skipRcPost
@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
if "%MAVEN_BATCH_PAUSE%" == "on" pause
if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
exit /B %ERROR_CODE%
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.meishu</groupId>
<artifactId>teachaicms</artifactId>
<version>0.0.1</version>
<name>teachaicms</name>
<description>Demo project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<java.version>1.8</java.version>
<mybatis-plus.version>3.3.0</mybatis-plus.version>
<generator.version>3.3.2</generator.version>
<swagger2.version>2.9.2</swagger2.version>
<fastjson.version>1.2.58</fastjson.version>
<jhash.version>2.0.0</jhash.version>
<poi-ooxml.version>3.13</poi-ooxml.version>
<dysmsapi.version>1.1.0</dysmsapi.version>
<sdk-core.version>4.4.6</sdk-core.version>
<lang3.version>3.9</lang3.version>
<druid.version>1.1.22</druid.version>
<itext-asian.version>5.2.0</itext-asian.version>
<itextpdf.version>5.4.1</itextpdf.version>
<java-jwt.version>3.10.3</java-jwt.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.64</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>vod_api</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<!-- <optional>true</optional>-->
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>${generator.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>${swagger2.version}</version>
</dependency>
<dependency>
<groupId>com.amdelamar</groupId>
<artifactId>jhash</artifactId>
<version>${jhash.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi-ooxml.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>${dysmsapi.version}</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>${sdk-core.version}</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>${lang3.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>${itext-asian.version}</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>${itextpdf.version}</version>
</dependency>
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>${java-jwt.version}</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
<dependency>
<groupId>org.scilab.forge</groupId>
<artifactId>jlatexmath</artifactId>
<version>1.0.7</version>
</dependency>
<!-- 阿里云 对象存储oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.15.0</version>
</dependency>
</dependencies>
<build>
<finalName>kpk</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
package com.meishu;
import com.alibaba.druid.support.http.StatViewServlet;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.web.bind.annotation.RestController;
@RestController
@SpringBootApplication
@MapperScan(basePackages = {"com.meishu.mapper"})
@EnableScheduling
public class MeishuApplication {
public static void main(String[] args) {
SpringApplication.run(MeishuApplication.class, args);
}
// @Bean
// public ServletRegistrationBean druidStatViewServlet() {
// //先配置管理后台的servLet,访问的入口为/druid/
// ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(
// new StatViewServlet(), "/druid/*");
// // IP白名单 (没有配置或者为空,则允许所有访问)
// servletRegistrationBean.addInitParameter("allow", "127.0.0.1");
// // IP黑名单 (存在共同时,deny优先于allow)
// servletRegistrationBean.addInitParameter("deny", "");
// servletRegistrationBean.addInitParameter("loginUsername", "admin");
// servletRegistrationBean.addInitParameter("loginPassword", "yhkl1234");
// servletRegistrationBean.addInitParameter("resetEnable", "false");
// return servletRegistrationBean;
// }
}
package com.meishu.common;
import com.meishu.common.configure.RemoteProperties;
import lombok.Data;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
/**
* 返回数据
*
* @author DengMin
* @date 2019/08/27 13:57
**/
@Data
@EnableConfigurationProperties(RemoteProperties.class)
public class ResponseData {
public static <T> ResponseVO<T> generateCreatedResponse(int code) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(RemoteProperties.getMessage(code))
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, T data) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(RemoteProperties.getMessage(code))
.data(data)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message, T data) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.data(data)
.build();
}
public static <T> ResponseVO<T> generateCreatedResponse(int code, String message, String path) {
return (ResponseVO<T>) ResponseVO.builder()
.code(code)
.message(message)
.path(path)
.build();
}
}
\ No newline at end of file
package com.meishu.common;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResponseVO<T> {
private Integer code;
private String message;
private T data;
private String path;
}
\ No newline at end of file
package com.meishu.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Data
@Component
@ConfigurationProperties(prefix = "sms")
public class AliyunSmsProperties {
private String product;
private String domain;
private String accessKeyId;
private String accessKeySecret;
}
package com.meishu.common.configure;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.meishu.common.handler.MetaHandler;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author: tuyp
* @create: 2020-08-12 12:01
*/
@Configuration
@ConditionalOnClass(value = {PaginationInterceptor.class})
public class MybatisPlusConfig {
/**
* 分页
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor(){
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
paginationInterceptor.setDialectType(DbType.MYSQL.getDb());
return paginationInterceptor;
}
//
// /**
// * 打印 sql
// */
// @Bean
// public PerformanceInterceptor performanceInterceptor() {
// PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
// //格式化sql语句
// Properties properties = new Properties();
// properties.setProperty("format", "false");
// performanceInterceptor.setProperties(properties);
// return performanceInterceptor;
// }
/**
* 自动填充功能
* @return
*/
@Bean
public GlobalConfig globalConfig() {
GlobalConfig globalConfig = new GlobalConfig();
globalConfig.setMetaObjectHandler(new MetaHandler());
return globalConfig;
}
}
package com.meishu.common.configure;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* <p>
* 读取状态码
* </p>
*
* @author DengMin
* @date Created in 2020/08/24
*/
@Component
@ConfigurationProperties(prefix = "meishu")
@PropertySource(value = "classpath:code.properties", encoding = "UTF-8")
public class RemoteProperties {
private static Map<Integer, String> codeMessage = new HashMap<>();
public static String getMessage(Integer code) {
return codeMessage.get(code);
}
public Map<Integer, String> getCodeMessage() {
return codeMessage;
}
public void setCodeMessage(Map<Integer, String> codeMessage) {
RemoteProperties.codeMessage = codeMessage;
}
}
\ No newline at end of file
package com.meishu.common.configure;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
@Component
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getMessageConverters().add(new WxMappingJackson2HttpMessageConverter());
return restTemplate;
}
public class WxMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
public WxMappingJackson2HttpMessageConverter(){
List<MediaType> mediaTypes = new ArrayList<>();
mediaTypes.add(MediaType.TEXT_PLAIN);
mediaTypes.add(MediaType.TEXT_HTML);
setSupportedMediaTypes(mediaTypes);
}
}
}
package com.meishu.common.configure;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.pathMapping("/")
.select()
.apis(RequestHandlerSelectors.basePackage("com.meishu"))
.paths(PathSelectors.any())
.build().apiInfo(new ApiInfoBuilder()
.title("考评库")
.description("接口文档规范")
.version("1.0")
// .contact(new Contact("啊啊啊啊","www.youkehulian.com","tcp@meishu.com"))
// .license("The Apache License")
// .licenseUrl("http://www.baidu.com")
.build());
}
}
package com.meishu.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* @author: tuyp
* @create: 2020-06-01 16:46
*/
@Component
@Data
@ConfigurationProperties(prefix = "vod")
public class VODConfig {
private String appId;
private String secretId;
private String secretKey;
private String api;
private String region;
private Integer classId;
}
package com.meishu.common.configure;
import com.meishu.common.interceptor.AuthenticationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author DengMin
* @date 2020/07/06
**/
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Autowired
private AuthenticationInterceptor authenticationInterceptor;
/**
* 跨域支持
*
* @param registry
*/
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
// .allowCredentials(true)
.allowedOrigins("*")
.allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
/**
* Swagger
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
/**
* 鉴权
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.excludePathPatterns("/static/*")
.addPathPatterns("/**");
}
}
\ No newline at end of file
package com.meishu.common.configure;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
@Aspect
@Component
public class WebLogAspect {
private final Logger logger = LoggerFactory.getLogger(WebLogAspect.class);
@Pointcut("execution(public * com.meishu.controller.*.*(..))")//切入点描述 这个是controller包的切入点
public void controllerLog(){}//签名,可以理解成这个切入点的一个名称
@Pointcut("execution(public * com.meishu.controller.*.*(..))")
public void serviceImplLog(){}
@Before("controllerLog()") //在切入点的方法run之前要干的
public void logBeforeController(JoinPoint joinPoint) {
RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
//这个RequestContextHolder是Springmvc提供来获得请求的东西
HttpServletRequest request = ((ServletRequestAttributes)requestAttributes).getRequest();
// 记录下请求内容
logger.info("####requestUrl : " + request.getRequestURL().toString());
logger.info("####requestParam : " + Arrays.toString(joinPoint.getArgs()));
}
// @Around("serviceImplLog()")
// public Object afterController(ProceedingJoinPoint proceedingJoinPoint) {
//
// Object result = null;
//
// try{
// result = proceedingJoinPoint.proceed();
// logger.info("====reulst"+result);
// }catch (Throwable e){
// MyException myException =(MyException)e;
// throw myException;
// }
// return result;
// }
}
\ No newline at end of file
package com.meishu.common.configure;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "wechat")
public class WechatConfig {
private String appId;
private String appSecret;
private String msgUrl;
private String templateId;
private String agentId;
}
package com.meishu.common.constant;
import lombok.Getter;
@Getter
public enum Code {
USERNAMENOTFOUND(1001, "用户不存在"),
BADCREDENTIALS(1002,"账户或者密码错误"),
ACCOUNTEXPIRED(1003,"账户过期"),
LOCKEDEXCEPTION(1004, "账户已锁定"),
DISABLEDEXCEPTION(1005,"账户已禁用"),
ACCESSDENIED(1006,"无权限访问"),
AUTHENTICATION(1007,"身份验证异常"),
NOHANDLERFOUND(1008,"找不到相应的视图处理器"),
PARAM_INVALID(1009, "参数不合法"),
TOKEN_EXCEPTION(1010, "无效的令牌"),
TOKEN_EXPIRED(1011, "令牌已过期"),
TOKEN_VERIFICATION_FAILED(1013, "令牌验证失败"),
OSS_ERROR(1012, "OSS文件上传异常"),
Network_ERROR(9000, "网络请求失败"),
SERVER_INTERNAL_ERROR(99999, "服务器内部错误"),
;
private Integer code;
private String message;
Code(Integer code, String message) {
this.code = code;
this.message = message;
}
}
package com.meishu.common.constant;
public class WxConstant {
/**
* app id
*/
public static final String APPID = "wx75ec06e9ce50ef73";
/**
* 秘钥
*/
public static final String SECRENT = "c039d32804278503474dfcf7cb3944b9";
/**
* 获取访问用户身份
*/
public static final String GETUSERINFO = "https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo?access_token={access_token}&code={code}";
/**
* 读取成员
*/
public static final String GET = "https://qyapi.weixin.qq.com/cgi-bin/user/get?access_token={access_token}&userid={userid}";
/**
* 获取access_token
*/
public static final String GET_SUITE_TOKEN = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}";
/**
* 扫码登陆回调地址
*/
public static final String QR_REDIRECT_URL = "http://massadmin.youkehulian.com";
}
package com.meishu.common.exception;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.common.configure.RemoteProperties;
import com.meishu.common.constant.Code;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.NoHandlerFoundException;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
/**
* 异常处理
* @author DengMin
* @date 2020/07/14
**/
@Slf4j
@RestControllerAdvice
public class GlobalExceptionHandler {
/**
* 自定义异常
* @param e
* @return
*/
@ExceptionHandler(value = HttpException.class)
public ResponseVO<T> handlerException(HttpServletRequest request, HttpException e) {
String message = RemoteProperties.getMessage(e.getCode());
if(StringUtils.isBlank(message)) {
message = e.getMessage();
}
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(e.getCode(), message, url);
}
/**
* 404
* @param request
* @return
*/
@ExceptionHandler(value = NoHandlerFoundException.class)
public ResponseVO<T> NoHandlerFoundException(HttpServletRequest request) {
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url);
}
/**
* 请求方式错误
* @param request
* @return
*/
@ExceptionHandler(value = HttpRequestMethodNotSupportedException.class)
public ResponseVO<T> HttpRequestMethodNotSupportedException(HttpServletRequest request) {
String url = request.getRequestURI();
return ResponseData.generateCreatedResponse(Code.NOHANDLERFOUND.getCode(), Code.NOHANDLERFOUND.getMessage(), url);
}
/**
* 参数不合法
* @param e
* @return
*/
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseVO<T> validateException(MethodArgumentNotValidException e){
final List<String> errList = new ArrayList<>();
e.getBindingResult().getAllErrors().stream().forEach(x -> {
errList.add(x.getDefaultMessage());
});
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString());
}
/**
* JSON 序列化异常
* @param e
* @return
*/
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseVO<T> exceptionHandler(HttpMessageNotReadableException e) {
log.error(e.getMessage());
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage()+":{"+e.getMessage()+"}");
}
/**
* 校验异常
* @param e
* @return
*/
@ExceptionHandler(BindException.class)
public ResponseVO<T> BindException(BindException e){
final List<String> errList = new ArrayList<>();
e.getBindingResult().getAllErrors().stream().forEach(x -> {
errList.add(x.getDefaultMessage());
});
return ResponseData.generateCreatedResponse(Code.PARAM_INVALID.getCode(), Code.PARAM_INVALID.getMessage(), errList.toString());
}
/**
* 服务器内部错误
* @return
*/
@ExceptionHandler(value = Exception.class)
public ResponseVO<T> serverInternalError(Exception e, HttpServletRequest request) {
String url = request.getRequestURI();
log.error("path:"+url);
log.error("---- error message: ---"+e.toString());
return ResponseData.generateCreatedResponse(Code.SERVER_INTERNAL_ERROR.getCode(), Code.SERVER_INTERNAL_ERROR.getMessage(), url);
}
}
\ No newline at end of file
package com.meishu.common.exception;
import com.meishu.common.configure.RemoteProperties;
/**
* 异常处理
* @author DengMin
* @date 2020/08/12
**/
public class HttpException extends RuntimeException{
private Integer code;
private String message;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public HttpException(Integer code) {
super(RemoteProperties.getMessage(code));
String message = RemoteProperties.getMessage(code);
this.message = message;
this.code = code;
}
public HttpException(Integer code, String message) {
this.message = message;
this.code = code;
}
}
package com.meishu.common.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
/**
* 填充配置
* @author DengMin
* @date 2020/07/21
**/
@Component
public class MetaHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createDate", LocalDateTime.now(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateDate", LocalDateTime.now(), metaObject);
}
}
package com.meishu.common.interceptor;
import com.auth0.jwt.interfaces.Claim;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.meishu.common.exception.HttpException;
import com.meishu.mapper.AdministerMapper;
import com.meishu.model.AdministerDO;
import com.meishu.util.JwtUtil;
import com.meishu.util.Localstorage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method;
import java.util.Map;
/**
* <p>
* 鉴权拦截器
* </p>
*
* @author DengMin
* @since 2021/4/14
*/
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
@Autowired
private AdministerMapper administerMapper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// 不需要进行拦截
if (!(handler instanceof HandlerMethod)) {
return true;
}
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
LoginRequired methodAnnotation = method.getAnnotation(LoginRequired.class);
if (methodAnnotation != null) {
String authorization = request.getHeader("Authorization");
if (!StringUtils.isBlank(authorization)) {
String token = authorization;
if (authorization.startsWith("Bearer")) {
token = authorization.replace("Bearer ", "");
}
/*Token不存在*/
if (token == null || JwtUtil.isExpired(token) || !JwtUtil.verifyToken(token)) {
throw new HttpException(1010);
}
Map<String, Claim> claimMap = JwtUtil.getClaims(token);
if (claimMap != null) {
String[] role = methodAnnotation.value();
String type = claimMap.get("type").asString();
if (role.length > 0) {
if ("administer".equals(type)) {
AdministerDO administerDO = administerMapper.selectById(claimMap.get("id").asLong());
if (administerDO != null) {
Localstorage.setUser(administerDO);
return true;
}
} else {
throw new HttpException(1010);
}
} else {
AdministerDO administerDO = administerMapper.selectById(claimMap.get("id").asLong());
if (administerDO != null) {
Localstorage.setUser(administerDO);
return true;
}
}
}
// return true;
}
throw new HttpException(1010);
}
return true;
}
}
package com.meishu.common.interceptor;
import java.lang.annotation.*;
/**
* <p>
* 自定义验证登陆注解
* </p>
*
* @author DengMin
* @since 2020/12/18
*/
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface LoginRequired {
String[] value();
}
\ No newline at end of file
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.model.AdministerDO;
import com.meishu.service.AdministerService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 中心管理账户表 前端控制器
* </p>
*
* @author Tuyp
* @since 2021-04-25
*/
@RestController
@Api(tags= "管理平台用户")
@RequestMapping("/administer")
public class AdministerController {
@Autowired
private AdministerService administerService;
@PostMapping("addAdminister")
@ApiOperation("添加管理员 accountName userName ")
public ResponseVO addAdminister(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,administerService.addAdminister(administerDO));
}
@PostMapping("administers")
@ApiOperation("查询管理员 userName")
public ResponseVO administers(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,administerService.administers(administerDO));
}
@PostMapping("updateAdminister")
@ApiOperation("编辑管理员id userName password")
public ResponseVO updateAdminister(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,administerService.updateAdminister(administerDO));
}
@PostMapping("deleteAdminister")
@ApiOperation("删除管理员 id")
public ResponseVO deleteAdminister(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,administerService.deleteAdminister(administerDO));
}
@PostMapping("login")
@ApiOperation("登录 accountName password")
public ResponseVO login(@RequestBody AdministerDO administerDO){
return ResponseData.generateCreatedResponse(0,administerService.login(administerDO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.batch.AddBatchDTO;
import com.meishu.model.BatchDictDO;
import com.meishu.service.BatchDictService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 批次字典表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@RestController
@Api(tags = "批次字典表")
@RequestMapping("/batchDict")
public class BatchDictController {
@Autowired
private BatchDictService batchDictService;
@PostMapping("addBatch")
@ApiOperation("添加批次 batchName startDate endDate studentIds[studentId examCode]")
public ResponseVO addBatch(@RequestBody AddBatchDTO addBatchDTO){
return ResponseData.generateCreatedResponse(0,batchDictService.addBatch(addBatchDTO));
}
@PostMapping("updateBatch")
@ApiOperation("修改批次 id batchName startDate endDate studentIds[studentId examCode]")
public ResponseVO updateBatch(@RequestBody AddBatchDTO addBatchDTO){
return ResponseData.generateCreatedResponse(0,batchDictService.updateBatch(addBatchDTO));
}
@PostMapping("deleteBatch")
@ApiOperation("删除批次 id ")
public ResponseVO deleteBatch(@RequestBody BatchDictDO batchDictDO){
return ResponseData.generateCreatedResponse(0,batchDictService.deleteBatch(batchDictDO));
}
@PostMapping("batches")
@ApiOperation("查询批次")
public ResponseVO batches(){
return ResponseData.generateCreatedResponse(0,batchDictService.batches());
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.exam.ExamPaperDTO;
import com.meishu.model.BatchExamDO;
import com.meishu.service.BatchExamService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@RestController
@Api(tags = "批次考试表")
@RequestMapping("/batchExam")
public class BatchExamController {
@Autowired
private BatchExamService batchExamService;
@PostMapping("exams")
@ApiOperation("查看批次下的考试 batchId 批次id")
public ResponseVO exams(@RequestBody BatchExamDO batchExamDO){
return ResponseData.generateCreatedResponse(0,batchExamService.exams(batchExamDO));
}
@PostMapping("addExam")
@ApiOperation("添加考试 batchId examName paperId startDate endDate")
public ResponseVO addExam(@RequestBody BatchExamDO batchExamDO){
return ResponseData.generateCreatedResponse(0,batchExamService.addExam(batchExamDO));
}
@PostMapping("deleteExam")
@ApiOperation("删除考试 id ")
public ResponseVO deleteExam(@RequestBody BatchExamDO batchExamDO){
return ResponseData.generateCreatedResponse(0,batchExamService.deleteExam(batchExamDO));
}
@PostMapping("updateExam")
@ApiOperation("修改考试 id batchId examName paperId startDate endDate")
public ResponseVO updateExam(@RequestBody BatchExamDO batchExamDO){
return ResponseData.generateCreatedResponse(0,batchExamService.updateExam(batchExamDO));
}
@PostMapping("examPaper")
@ApiOperation("查看考试的时间和试卷 userId paperId ExamId")
public ResponseVO examPaper(@RequestBody ExamPaperDTO examPaperDTO){
return ResponseData.generateCreatedResponse(0,batchExamService.examPaper(examPaperDTO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.service.BatchExamStudentsService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 学生考试映射表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "学生考试映射表")
@RequestMapping("/studentExams")
public class BatchExamStudentController {
@Autowired
private BatchExamStudentsService studentExamsService;
@PostMapping("exams")
@ApiOperation("学生可以参加的考试 studentId 学生id batchId")
public ResponseVO exams(@RequestBody BatchExamStudentsDO studentExamsDO)throws Exception {
return ResponseData.generateCreatedResponse(0,studentExamsService.exams(studentExamsDO));
}
@PostMapping("studentExams")
@ApiOperation("学生考试记录 studentId")
public ResponseVO studentExams(@RequestBody BatchExamStudentsDO studentExamsDO){
return ResponseData.generateCreatedResponse(0,studentExamsService.studentExams(studentExamsDO));
}
@PostMapping("batchExamStudentScore")
@ApiOperation("某个批次考试情况 batchExamId ")
public ResponseVO batchExamStudentScore(@RequestBody BatchExamStudentsDO batchExamStudentsDO ){
return ResponseData.generateCreatedResponse(0,studentExamsService.batchExamStudentScore(batchExamStudentsDO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.model.BatchStudentMappingDO;
import com.meishu.service.BatchStudentMappingService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-14
*/
@RestController
@Api(tags = "批次-学生映射表")
@RequestMapping("/batchStudentMapping")
public class BatchStudentMappingController {
@Autowired
private BatchStudentMappingService batchStudentMappingService;
@PostMapping("batchStudents")
@ApiOperation("查看某一批次的学生 batchId")
public ResponseVO batchStudents(@RequestBody BatchStudentMappingDO batchStudentMappingDO){
return ResponseData.generateCreatedResponse(0,batchStudentMappingService.batchStudents(batchStudentMappingDO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.exercise.LabelExercisesDTO;
import com.meishu.model.ExerciseDictDO;
import com.meishu.service.ExerciseDictService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
/**
* <p>
* 习题库 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "习题库")
@RequestMapping("/exerciseDict")
public class ExerciseDictController {
@Autowired
private ExerciseDictService exerciseDictService;
@PostMapping("labelExercises")
@ApiOperation("查看题目 labelId pageSize pageNum")
public ResponseVO labelExercises(@RequestBody LabelExercisesDTO labelExercisesDTO){
return ResponseData.generateCreatedResponse(0,exerciseDictService.labelExercises(labelExercisesDTO));
}
@PostMapping("deleteExercises")
@ApiOperation("删除考试题 id")
public ResponseVO deleteExercises(@RequestBody ExerciseDictDO exerciseDictDO){
return ResponseData.generateCreatedResponse(0,exerciseDictService.deleteExercises(exerciseDictDO));
}
@PostMapping("addExercises")
@ApiOperation("新增考试题 exerciseType labelId title items rightAnswer detail")
public ResponseVO addExercises(@RequestBody ExerciseDictDO exerciseDictDO){
return ResponseData.generateCreatedResponse(0,exerciseDictService.addExercises(exerciseDictDO));
}
@PostMapping("updateExercises")
@ApiOperation("修改考试题 id exerciseType labelId title items rightAnswer detail")
public ResponseVO updateExercises(@RequestBody ExerciseDictDO exerciseDictDO){
return ResponseData.generateCreatedResponse(0,exerciseDictService.updateExercises(exerciseDictDO));
}
@PostMapping("uploadFile")
@ApiOperation("上传文件 file ")
public ResponseVO uploadFile(@RequestParam("file") MultipartFile multipartFile){
return ResponseData.generateCreatedResponse(0,exerciseDictService.uploadFile(multipartFile));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.model.ExerciseDoneHistoryDO;
import com.meishu.service.ExerciseDoneHistoryService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 学生做题历史记录表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "学生做题历史记录表")
@RequestMapping("/exerciseDoneHistory")
public class ExerciseDoneHistoryController {
@Autowired
private ExerciseDoneHistoryService exerciseDoneHistoryService;
@PostMapping("scoreDetails")
@ApiOperation("某个批次具体考试情况 batchExamId studentId")
public ResponseVO scoreDetails(@RequestBody BatchExamStudentsDO batchExamStudentsDO){
return ResponseData.generateCreatedResponse(0,exerciseDoneHistoryService.scoreDetails(batchExamStudentsDO));
}
@PostMapping("updateScore")
@ApiOperation("修改分数 id score")
public ResponseVO updateScore(@RequestBody ExerciseDoneHistoryDO exerciseDoneHistoryDO){
return ResponseData.generateCreatedResponse(0,exerciseDoneHistoryService.updateScore(exerciseDoneHistoryDO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.service.LabelDictService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 标签表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "标签表")
@RequestMapping("/labelDict")
public class LabelDictController {
@Autowired
private LabelDictService labelDictService;
@PostMapping("labels")
@ApiOperation("查询所有标签")
public ResponseVO labels(){
return ResponseData.generateCreatedResponse(0,labelDictService.labels());
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.paper.SubmitDTO;
import com.meishu.model.PaperDictDO;
import com.meishu.model.PaperExercisesDO;
import com.meishu.service.PaperDictService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
/**
* <p>
* 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "考试字典表")
@RequestMapping("/paperDict")
public class PaperDictController {
@Autowired
private PaperDictService paperDictService;
@PostMapping("/exercises")
@ApiOperation("查看试卷题目(没有答案版) paperId 考试id")
public ResponseVO exercises(@RequestBody PaperExercisesDO paperExercisesDO){
return ResponseData.generateCreatedResponse(0,paperDictService.exercises(paperExercisesDO));
}
@PostMapping("submit")
@ApiOperation("提交答案 studentId 学生id batchExamId paperId 考试id paperStudentExerciseDTOS[exerciseId 题目id selectAnswer 答案] ")
public ResponseVO submit(@RequestBody SubmitDTO submitDTO){
return ResponseData.generateCreatedResponse(0,paperDictService.submit(submitDTO));
}
@PostMapping("allPapers")
@ApiOperation("查看所有试卷")
public ResponseVO allPapers(){
return ResponseData.generateCreatedResponse(0,paperDictService.allPapers());
}
@PostMapping("deletePaper")
@ApiOperation("删除试卷 id 试卷id")
public ResponseVO deletePaper(@RequestBody PaperDictDO paperDictDO){
return ResponseData.generateCreatedResponse(0,paperDictService.deletePaper(paperDictDO));
}
@PostMapping("addPaper")
@ApiOperation("添加试卷 paperName paperType ")
public ResponseVO addPaper(@RequestBody PaperDictDO paperDictDO){
return ResponseData.generateCreatedResponse(0,paperDictService.addPaper(paperDictDO));
}
@PostMapping("updatePaper")
@ApiOperation("添加试卷 id 试卷id paperName paperType")
public ResponseVO updatePaper(@RequestBody PaperDictDO paperDictDO){
return ResponseData.generateCreatedResponse(0,paperDictService.updatePaper(paperDictDO));
}
@PostMapping("aa")
public void aa(){
paperDictService.aa();
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.paper.AddPaperExerciseDTO;
import com.meishu.model.PaperExercisesDO;
import com.meishu.service.PaperExercisesService;
import com.meishu.vo.exercise.LabelExercisesVO;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 考试-题目映射表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "考试-题目映射表")
@RequestMapping("/paperExercises")
public class PaperExercisesController {
@Autowired
private PaperExercisesService paperExercisesService;
@PostMapping("exercises")
@ApiOperation("查看试卷里的题目(有答案版) paperId")
public ResponseVO exercises(@RequestBody PaperExercisesDO paperExercisesDO){
return ResponseData.generateCreatedResponse(0,paperExercisesService.exercises(paperExercisesDO));
}
@PostMapping("deletePaperExercise")
@ApiOperation("删除考试卷里的题目 paperExerciseId 返回的映射id ")
public ResponseVO deletePaperExercise(@RequestBody LabelExercisesVO labelExercisesVO){
return ResponseData.generateCreatedResponse(0,paperExercisesService.deletePaperExercise(labelExercisesVO));
}
@PostMapping("addPaperExercise")
@ApiOperation("新增考试题目 paperId exerciseIds[]")
public ResponseVO addPaperExercise(@RequestBody AddPaperExerciseDTO addPaperExerciseDTO){
return ResponseData.generateCreatedResponse(0,paperExercisesService.addPaperExercise(addPaperExerciseDTO));
}
}
package com.meishu.controller;
import com.meishu.common.ResponseData;
import com.meishu.common.ResponseVO;
import com.meishu.dto.student.LoginDTO;
import com.meishu.model.StudentDO;
import com.meishu.service.StudentService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
/**
* <p>
* 学生表 前端控制器
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@RestController
@Api(tags = "学生表")
@RequestMapping("/student")
public class StudentController {
@Autowired
private StudentService studentService;
@PostMapping("login")
@ApiOperation("登录 idCard examCode ")
public ResponseVO login(@RequestBody LoginDTO loginDTO)throws Exception{
return ResponseData.generateCreatedResponse(0,studentService.login(loginDTO));
}
@PostMapping("students")
@ApiOperation("查看学生 userName")
public ResponseVO students(@RequestBody StudentDO studentDO){
return ResponseData.generateCreatedResponse(0,studentService.students(studentDO));
}
@PostMapping("deleteStudent")
@ApiOperation("删除学生 id ")
public ResponseVO deleteStudent(@RequestBody StudentDO studentDO){
return ResponseData.generateCreatedResponse(0,studentService.deleteStudent(studentDO));
}
@PostMapping("updateStudent")
@ApiOperation("编辑学生 id userName idCard companyName")
public ResponseVO updateStudent(@RequestBody StudentDO studentDO){
return ResponseData.generateCreatedResponse(0,studentService.updateStudent(studentDO));
}
@PostMapping("addStudent")
@ApiOperation("添加学生 userName idCard companyName")
public ResponseVO addStudent(@RequestBody StudentDO studentDO){
return ResponseData.generateCreatedResponse(0,studentService.addStudent(studentDO));
}
}
package com.meishu.dto.batch;
import com.meishu.model.BatchDictDO;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.model.BatchStudentMappingDO;
import lombok.Data;
import java.util.List;
@Data
public class AddBatchDTO extends BatchDictDO {
private List<BatchStudentMappingDO> studentIds;
}
package com.meishu.dto.exam;
import lombok.Data;
@Data
public class ExamPaperDTO {
private Long userId;
private Long examId;
private Long paperId;
}
package com.meishu.dto.exercise;
import lombok.Data;
@Data
public class LabelExercisesDTO {
private Integer pageSize;
private Integer pageNum;
private Long labelId;
}
package com.meishu.dto.paper;
import lombok.Data;
import java.util.List;
@Data
public class AddPaperExerciseDTO {
private Long paperId;
private List<Long> exerciseIds;
}
package com.meishu.dto.paper;
import lombok.Data;
@Data
public class PaperStudentExerciseDTO {
/**
* 实际上是exerciseDoneHistory的id
*/
private Long exerciseId;
private String selectAnswer;
}
package com.meishu.dto.paper;
import lombok.Data;
import java.util.List;
@Data
public class SubmitDTO {
private Long studentId;
private Long paperId;
private Long batchExamId;
private List<PaperStudentExerciseDTO> paperStudentExerciseDTOS;
}
package com.meishu.dto.student;
import lombok.Data;
@Data
public class LoginDTO {
private String examCode;
private String idCard;
}
package com.meishu.dto.userrole;
import lombok.Data;
@Data
public class AccountLoginDTO {
private String idCard;
private String password;
}
package com.meishu.dto.userrole;
import lombok.Data;
@Data
public class QueryStudentsDTO {
private Integer pageSize;
private Integer pageNum;
private String userName;
private String session;
private String grade;
private String userStatus;
}
package com.meishu.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.model.AdministerDO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 中心管理账户表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2021-04-25
*/
@Repository
public interface AdministerMapper extends BaseMapper<AdministerDO> {
List<AdministerDO> administers(String userName);
}
package com.meishu.mapper;
import com.meishu.model.BatchDictDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* 批次字典表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Repository
public interface BatchDictMapper extends BaseMapper<BatchDictDO> {
}
package com.meishu.mapper;
import com.meishu.model.BatchExamDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.exam.ExamsVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Repository
public interface BatchExamMapper extends BaseMapper<BatchExamDO> {
List<ExamsVO> exams(Long batchId);
}
package com.meishu.mapper;
import com.meishu.model.BatchExamStudentsDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.exam.BatchExamStudentScoreVO;
import com.meishu.vo.paper.PapersVO;
import com.meishu.vo.student.StudentExamsVO;
import com.meishu.vo.student.StudentVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 学生考试映射表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface BatchExamsStudentsMapper extends BaseMapper<BatchExamStudentsDO> {
/**
* 学生可以参加的考试
*/
List<PapersVO> exams(Long studentId);
/**
* 考试 成绩
*/
List<StudentExamsVO> studentScore(Long studentId);
/**
* 查看某个批次考试下的考生
*/
List<StudentVO> batchExamStudents(Long batchExamId);
/**
* 查看某个批次考试下的考生
*/
List<Long> batchExamStudentIds(Long batchExamId);
/**
* 某个批次下的考试情况
*/
List<BatchExamStudentScoreVO> batchExamStudentScore(Long batchExamId);
}
package com.meishu.mapper;
import com.meishu.model.BatchStudentMappingDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.student.BatchStudentsVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-14
*/
@Repository
public interface BatchStudentMappingMapper extends BaseMapper<BatchStudentMappingDO> {
List<BatchStudentsVO> batchStudents(Long batchId);
List<Long> batchStudentIds(Long batchId);
}
package com.meishu.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.meishu.model.ExerciseDictDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.exercise.LabelExercisesVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 习题库 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface ExerciseDictMapper extends BaseMapper<ExerciseDictDO> {
/**
* 通过标签去找题目
*/
IPage<LabelExercisesVO> labelExercises(IPage iPage,Long labelId);
}
package com.meishu.mapper;
import com.meishu.model.ExerciseDoneHistoryDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.exercise.ScoreDetailsVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 学生做题历史记录表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface ExerciseDoneHistoryMapper extends BaseMapper<ExerciseDoneHistoryDO> {
List<ScoreDetailsVO> scoreDetails(Long batchExamId, Long studentId);
}
package com.meishu.mapper;
import com.meishu.model.LabelDictDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
/**
* <p>
* 标签表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface LabelDictMapper extends BaseMapper<LabelDictDO> {
}
package com.meishu.mapper;
import com.meishu.model.PaperDictDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.vo.exercise.ExercisesWithAnswerVO;
import com.meishu.vo.paper.ExercisesVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface PaperDictMapper extends BaseMapper<PaperDictDO> {
List<ExercisesVO> exercises(Long paperId);
/**
* 查看某个卷子某个题型的题目
*/
List<ExercisesWithAnswerVO> exercisesWithAnswer(Long paperId,String exerciseType);
/**
查看卷子有哪几种题型
*/
List<String> exerciseTypes(Long paperId);
/**
* 查看学生做的题目
*/
List<ExercisesWithAnswerVO> examExercises(Long examId,Long studentId,Long paperId);
}
package com.meishu.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.meishu.model.PaperExercisesDO;
import com.meishu.vo.exercise.LabelExercisesVO;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 考试-题目映射表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface PaperExercisesMapper extends BaseMapper<PaperExercisesDO> {
/**
* 通过考试id取查卷子
*/
List<LabelExercisesVO> getPaperExercises(Long paperId);
}
package com.meishu.mapper;
import com.meishu.model.StudentDO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* <p>
* 学生表 Mapper 接口
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Repository
public interface StudentMapper extends BaseMapper<StudentDO> {
List<StudentDO> students(String userName);
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 中心管理账户表
* </p>
*
* @author Tuyp
* @since 2021-04-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("administer")
public class AdministerDO extends BaseModel {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 成员名称
*/
private String userName;
/**
* 账号
*/
private String accountName;
/**
* 密码
*/
private String password;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 批次字典表
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("batch_dict")
public class BatchDictDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 批次名称
*/
private String batchName;
private String startDate;
private String endDate;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("batch_exam")
public class BatchExamDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long batchId;
private String examName;
private String startDate;
private String endDate;
private Long paperId;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 学生考试映射表
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("batch_exam_students")
public class BatchExamStudentsDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long studentId;
private Long batchExamId;
private String examCode;
private Integer score;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.util.Date;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2023-07-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("batch_student_mapping")
public class BatchStudentMappingDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long batchId;
private Long studentId;
/**
* 准考证号
*/
private String examCode;
/**
* 签到时间
*/
private Date signDate;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 习题库
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("exercise_dict")
public class ExerciseDictDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 题目类型 选择/填空
*/
private String exerciseType;
/**
* 标签id
*/
private Long labelId;
/**
* 题目
*/
private String title;
/**
* 选项
*/
private String items;
/**
* 正确答案
*/
private String rightAnswer;
/**
* 解析
*/
private String detail;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 学生做题历史记录表
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("exercise_done_history")
public class ExerciseDoneHistoryDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 学生id
*/
private Long studentId;
/**
* 习题id
*/
private Long exerciseId;
/**
*
*/
private Long batchExamId;
/**
* 考试id
*/
private Long paperId;
/**
* 做题答案 /已读
*/
private String answer;
/**
* 结果 0:错误 1:正确
*/
private Integer result;
/**
* 分数
*/
private Integer score;
/**
* 顺序
*/
private Integer orderNo;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 标签表
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("label_dict")
public class LabelDictDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 标签
*/
private String label;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
*
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("paper_dict")
public class PaperDictDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String paperName;
private String paperType;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 考试-题目映射表
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("paper_exercises")
public class PaperExercisesDO extends BaseModel {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long paperId;
private Long exerciseId;
}
package com.meishu.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.meishu.util.BaseModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 学生表
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("student")
public class StudentDO extends BaseModel {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 用户名
*/
private String userName;
/**
* 身份证号
*/
private String idCard;
/**
* 单位名称
*/
private String companyName;
}
package com.meishu.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.model.AdministerDO;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
/**
* <p>
* 中心管理账户表 服务类
* </p>
*
* @author Tuyp
* @since 2021-04-25
*/
public interface AdministerService extends IService<AdministerDO> {
String addAdminister(AdministerDO administerDO);
List<AdministerDO> administers(AdministerDO administerDO);
String updateAdminister(AdministerDO administerDO);
String deleteAdminister(AdministerDO administerDO);
AdministerDO login(AdministerDO administerDO);
}
package com.meishu.service;
import com.meishu.dto.batch.AddBatchDTO;
import com.meishu.model.BatchDictDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.batch.BatchesVO;
import java.util.List;
/**
* <p>
* 批次字典表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
public interface BatchDictService extends IService<BatchDictDO> {
String addBatch(AddBatchDTO addBatchDTO);
String updateBatch(AddBatchDTO addBatchDTO);
String deleteBatch(BatchDictDO batchDictDO);
List<BatchesVO> batches();
}
package com.meishu.service;
import com.meishu.dto.exam.ExamPaperDTO;
import com.meishu.model.BatchDictDO;
import com.meishu.model.BatchExamDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.exam.ExamPaperVO;
import com.meishu.vo.exam.ExamsVO;
import io.swagger.annotations.Example;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
public interface BatchExamService extends IService<BatchExamDO> {
List<ExamsVO> exams(BatchExamDO batchExamDO);
String addExam(BatchExamDO batchExamDO);
String deleteExam(BatchExamDO batchExamDO);
String updateExam(BatchExamDO batchExamDO);
ExamPaperVO examPaper(ExamPaperDTO examPaperDTO);
}
package com.meishu.service;
import com.meishu.model.BatchExamStudentsDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.exam.BatchExamStudentScoreVO;
import com.meishu.vo.paper.PapersVO;
import com.meishu.vo.student.StudentExamsVO;
import java.util.List;
/**
* <p>
* 学生考试映射表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface BatchExamStudentsService extends IService<BatchExamStudentsDO> {
List<PapersVO> exams(BatchExamStudentsDO studentExamsDO)throws Exception;
List<StudentExamsVO> studentExams(BatchExamStudentsDO studentExamsDO);
List<BatchExamStudentScoreVO> batchExamStudentScore(BatchExamStudentsDO batchExamStudentsDO);
}
package com.meishu.service;
import com.meishu.model.BatchStudentMappingDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.student.BatchStudentsVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-14
*/
public interface BatchStudentMappingService extends IService<BatchStudentMappingDO> {
List<BatchStudentsVO> batchStudents(BatchStudentMappingDO batchStudentMappingDO);
}
package com.meishu.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.meishu.dto.exercise.LabelExercisesDTO;
import com.meishu.model.ExerciseDictDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.exercise.LabelExercisesVO;
import com.meishu.vo.exercise.UploadFileVO;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
* <p>
* 习题库 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface ExerciseDictService extends IService<ExerciseDictDO> {
UploadFileVO uploadFile(MultipartFile multipartFile);
IPage<LabelExercisesVO> labelExercises(LabelExercisesDTO labelExercisesDTO);
String deleteExercises(ExerciseDictDO exerciseDictDO);
String addExercises(ExerciseDictDO exerciseDictDO);
String updateExercises(ExerciseDictDO exerciseDictDO);
}
package com.meishu.service;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.model.ExerciseDoneHistoryDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.exercise.ScoreDetailsVO;
import java.util.List;
/**
* <p>
* 学生做题历史记录表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface ExerciseDoneHistoryService extends IService<ExerciseDoneHistoryDO> {
List<ScoreDetailsVO> scoreDetails(BatchExamStudentsDO batchExamStudentsDO);
String updateScore(ExerciseDoneHistoryDO exerciseDoneHistoryDO);
}
package com.meishu.service;
import com.meishu.model.LabelDictDO;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 标签表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface LabelDictService extends IService<LabelDictDO> {
List<LabelDictDO> labels();
}
package com.meishu.service;
import com.meishu.dto.paper.SubmitDTO;
import com.meishu.model.PaperDictDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.model.PaperExercisesDO;
import com.meishu.model.PaperExercisesDO;
import com.meishu.vo.paper.ExercisesVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface PaperDictService extends IService<PaperDictDO> {
List<ExercisesVO> exercises(PaperExercisesDO paperExercisesDO);
String submit(SubmitDTO submitDTO);
List<PaperDictDO> allPapers();
String deletePaper(PaperDictDO paperDictDO);
String addPaper(PaperDictDO paperDictDO);
String updatePaper(PaperDictDO paperDictDO);
void aa();
}
package com.meishu.service;
import com.meishu.dto.paper.AddPaperExerciseDTO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.model.PaperExercisesDO;
import com.meishu.vo.exercise.LabelExercisesVO;
import java.util.List;
/**
* <p>
* 考试-题目映射表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface PaperExercisesService extends IService<PaperExercisesDO> {
List<LabelExercisesVO> exercises(PaperExercisesDO paperExercisesDO);
String deletePaperExercise(LabelExercisesVO labelExercisesVO);
String addPaperExercise(AddPaperExerciseDTO addPaperExerciseDTO);
}
package com.meishu.service;
import com.meishu.dto.student.LoginDTO;
import com.meishu.model.StudentDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.meishu.vo.student.LoginVO;
import org.apache.commons.lang3.StringUtils;
import java.util.List;
/**
* <p>
* 学生表 服务类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
public interface StudentService extends IService<StudentDO> {
LoginVO login(LoginDTO loginDTO)throws Exception;
List<StudentDO> students(StudentDO studentDO);
String deleteStudent(StudentDO studentDO);
String updateStudent(StudentDO studentDO);
String addStudent(StudentDO studentDO);
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.common.exception.HttpException;
import com.meishu.mapper.AdministerMapper;
import com.meishu.model.AdministerDO;
import com.meishu.service.AdministerService;
import com.meishu.util.ConstantUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 中心管理账户表 服务实现类
* </p>
*
* @author Tuyp
* @since 2021-04-25
*/
@Service
public class AdministerServiceImpl extends ServiceImpl<AdministerMapper, AdministerDO> implements AdministerService {
public String addAdminister(AdministerDO administerDO) {
int count = this.baseMapper.selectCount(new QueryWrapper<AdministerDO>()
.lambda()
.eq(AdministerDO::getAccountName, administerDO.getAccountName()));
if (count > 0) {
throw new HttpException(10002);
}
administerDO.setPassword("123456");
this.baseMapper.insert(administerDO);
return ConstantUtils.ADD_SUCCESS;
}
public List<AdministerDO> administers(AdministerDO administerDO) {
return this.baseMapper.administers(administerDO.getUserName());
}
public String updateAdminister(AdministerDO administerDO) {
AdministerDO administerDO1 = this.baseMapper.selectById(administerDO.getId());
if (StringUtils.isNotEmpty(administerDO1.getPassword())) {
administerDO1.setPassword(administerDO1.getPassword());
}
return ConstantUtils.SET_SUCCESS;
}
public String deleteAdminister(AdministerDO administerDO) {
this.baseMapper.deleteById(administerDO.getId());
return ConstantUtils.DELETE_SUCCESS;
}
public AdministerDO login(AdministerDO administerDO) {
AdministerDO administerDO1 = this.baseMapper.selectOne(new QueryWrapper<AdministerDO>()
.lambda()
.eq(AdministerDO::getAccountName, administerDO.getAccountName())
.eq(AdministerDO::getPassword, administerDO.getPassword()));
if (null == administerDO1) {
throw new HttpException(10003);
}
return administerDO1;
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.common.exception.HttpException;
import com.meishu.dto.batch.AddBatchDTO;
import com.meishu.mapper.BatchExamMapper;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.mapper.BatchStudentMappingMapper;
import com.meishu.model.BatchDictDO;
import com.meishu.mapper.BatchDictMapper;
import com.meishu.model.BatchExamDO;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.model.BatchStudentMappingDO;
import com.meishu.service.BatchDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.batch.BatchesVO;
import com.meishu.vo.student.BatchStudentsVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 批次字典表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Service
public class BatchDictServiceImpl extends ServiceImpl<BatchDictMapper, BatchDictDO> implements BatchDictService {
@Autowired
private BatchExamMapper batchExamMapper;
@Autowired
private BatchStudentMappingMapper batchStudentMappingMapper;
@Autowired
private BatchExamsStudentsMapper batchExamsStudentsMapper;
public String addBatch(AddBatchDTO addBatchDTO) {
int count = this.baseMapper.selectCount(new QueryWrapper<BatchDictDO>()
.lambda()
.eq(BatchDictDO::getBatchName, addBatchDTO.getBatchName()));
if (count > 0) {
throw new HttpException(40001);
}
BatchDictDO batchDictDO = new BatchDictDO();
BeanUtils.copyProperties(addBatchDTO,batchDictDO);
this.baseMapper.insert(batchDictDO);
List<BatchStudentMappingDO> batchExamStudentsDOS = addBatchDTO.getStudentIds();
for (BatchStudentMappingDO besd : batchExamStudentsDOS) {
besd.setBatchId(batchDictDO.getId());
batchStudentMappingMapper.insert(besd);
//批次下的考试
List<BatchExamDO> batchExamDOS = batchExamMapper.selectList(new QueryWrapper<BatchExamDO>()
.lambda()
.eq(BatchExamDO::getBatchId,batchDictDO.getId()));
for (BatchExamDO batchExamDO : batchExamDOS){
BatchExamStudentsDO batchExamStudentsDO = new BatchExamStudentsDO();
batchExamStudentsDO.setBatchExamId(batchExamDO.getId());
batchExamStudentsDO.setStudentId(besd.getStudentId());
batchExamStudentsDO.setExamCode(besd.getExamCode());
batchExamMapper.insert(batchExamDO);
}
}
return ConstantUtils.ADD_SUCCESS;
}
public String updateBatch(AddBatchDTO addBatchDTO) {
int count = this.baseMapper.selectCount(new QueryWrapper<BatchDictDO>()
.lambda()
.eq(BatchDictDO::getBatchName, addBatchDTO.getBatchName())
.ne(BatchDictDO::getId, addBatchDTO.getId()));
if (count > 0) {
throw new HttpException(40001);
}
BatchDictDO batchDictDO = new BatchDictDO();
BeanUtils.copyProperties(addBatchDTO,batchDictDO);
this.baseMapper.updateById(batchDictDO);
//先删
batchStudentMappingMapper.delete(new QueryWrapper<BatchStudentMappingDO>()
.lambda()
.eq(BatchStudentMappingDO::getBatchId,batchDictDO.getId()));
//批次下的考试
List<BatchExamDO> batchExamDOS = batchExamMapper.selectList(new QueryWrapper<BatchExamDO>()
.lambda()
.eq(BatchExamDO::getBatchId,batchDictDO.getId()));
for (BatchExamDO batchExamDO : batchExamDOS){
batchExamsStudentsMapper.delete(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getBatchExamId,batchExamDO.getId()));
}
//后增
List<BatchStudentMappingDO> batchStudentMappingDOS = addBatchDTO.getStudentIds();
for (BatchStudentMappingDO batchStudentMappingDO : batchStudentMappingDOS){
batchStudentMappingDO.setBatchId(batchDictDO.getId());
batchStudentMappingMapper.insert(batchStudentMappingDO);
for (BatchExamDO batchExamDO : batchExamDOS){
BatchExamStudentsDO batchExamStudentsDO = new BatchExamStudentsDO();
batchExamStudentsDO.setBatchExamId(batchExamDO.getId());
batchExamStudentsDO.setStudentId(batchStudentMappingDO.getStudentId());
batchExamStudentsDO.setExamCode(batchExamStudentsDO.getExamCode());
batchExamsStudentsMapper.insert(batchExamStudentsDO);
}
}
return ConstantUtils.SET_SUCCESS;
}
public String deleteBatch(BatchDictDO batchDictDO){
//当前批次下有考试 的话删不掉
Integer count = batchExamMapper.selectCount(new QueryWrapper<BatchExamDO>()
.lambda()
.eq(BatchExamDO::getBatchId, batchDictDO.getId()));
if (count>0){
throw new HttpException(50001);
}
this.baseMapper.deleteById(batchDictDO.getId());
return ConstantUtils.DELETE_SUCCESS;
}
public List<BatchesVO> batches(){
List<BatchesVO> batchesVOS = new ArrayList<>();
List<BatchDictDO> batchDictDOS = this.baseMapper.selectList(null);
for (BatchDictDO batchDictDO : batchDictDOS){
BatchesVO batchesVO = new BatchesVO();
BeanUtils.copyProperties(batchDictDO,batchesVO);
//查看 该批次下的学生
List<BatchStudentsVO> batchStudentsVOS = batchStudentMappingMapper.batchStudents(batchDictDO.getId());
batchesVO.setBatchStudentsVOS(batchStudentsVOS);
batchesVOS.add(batchesVO);
}
return batchesVOS;
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.dto.exam.ExamPaperDTO;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.mapper.ExerciseDoneHistoryMapper;
import com.meishu.mapper.PaperDictMapper;
import com.meishu.model.*;
import com.meishu.mapper.BatchExamMapper;
import com.meishu.service.BatchExamService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.exam.ExamPaperVO;
import com.meishu.vo.exam.ExamsVO;
import com.meishu.vo.exercise.ExercisesWithAnswerVO;
import com.meishu.vo.paper.ExercisesVO;
import com.meishu.vo.student.StudentVO;
import net.sf.json.JSONArray;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-12
*/
@Service
public class BatchExamServiceImpl extends ServiceImpl<BatchExamMapper, BatchExamDO> implements BatchExamService {
@Autowired
private BatchExamsStudentsMapper batchExamsStudentsMapper;
@Autowired
private PaperDictMapper paperDictMapper;
@Autowired
private ExerciseDoneHistoryMapper exerciseDoneHistoryMapper;
public List<ExamsVO> exams(BatchExamDO batchExamDO) {
List<ExamsVO> exams = this.baseMapper.exams(batchExamDO.getBatchId());
for (ExamsVO examsVO : exams) {
//考生名单
List<StudentVO> studentVOS = batchExamsStudentsMapper.batchExamStudents(examsVO.getId());
examsVO.setStudentVOS(studentVOS);
}
return exams;
}
@Transactional(rollbackFor = Exception.class)
public String addExam(BatchExamDO batchExamDO) {
this.baseMapper.insert(batchExamDO);
return ConstantUtils.ADD_SUCCESS;
}
@Transactional(rollbackFor = Exception.class)
public String deleteExam(BatchExamDO batchExamDO) {
this.baseMapper.deleteById(batchExamDO.getId());
batchExamsStudentsMapper.delete(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getBatchExamId, batchExamDO.getId()));
return ConstantUtils.DELETE_SUCCESS;
}
public String updateExam(BatchExamDO batchExamDO) {
this.baseMapper.updateById(batchExamDO);
return ConstantUtils.SET_SUCCESS;
}
public ExamPaperVO examPaper(ExamPaperDTO examPaperDTO) {
ExamPaperVO examPaperVO = new ExamPaperVO();
BatchExamDO batchExamDO = this.baseMapper.selectById(examPaperDTO.getExamId());
examPaperVO.setStartDate(batchExamDO.getStartDate());
examPaperVO.setEndDate(batchExamDO.getEndDate());
examPaperVO.setExamName(batchExamDO.getExamName());
//查看是否已经查看过卷子,没有的话重新生成一次,有的话就用以前的
int count = exerciseDoneHistoryMapper.selectCount(new QueryWrapper<ExerciseDoneHistoryDO>()
.lambda()
.eq(ExerciseDoneHistoryDO::getStudentId, examPaperDTO.getUserId())
.eq(ExerciseDoneHistoryDO::getBatchExamId, examPaperDTO.getExamId()));
//试卷 不返回答案
List<ExercisesVO> exercisesVOS = new ArrayList<>();
if (count == 0) {
List<ExercisesWithAnswerVO> exercisesWithAnswerVOS = new ArrayList<>();
//查卷子题型
List<String> types = paperDictMapper.exerciseTypes(examPaperDTO.getPaperId());
//每个 题型的题目随机 然后组卷
for (String type : types) {
List<ExercisesWithAnswerVO> exerciseTmp = paperDictMapper.exercisesWithAnswer(examPaperDTO.getPaperId(), type);
Collections.shuffle(exerciseTmp);
exercisesWithAnswerVOS.addAll(exerciseTmp);
}
//返回
int i = 1;
for (ExercisesWithAnswerVO exercise : exercisesWithAnswerVOS) {
ExercisesVO exercisesVO = new ExercisesVO();
BeanUtils.copyProperties(exercise, exercisesVO);
ExerciseDoneHistoryDO exerciseDoneHistoryDO = new ExerciseDoneHistoryDO();
exerciseDoneHistoryDO.setStudentId(examPaperDTO.getUserId());
exerciseDoneHistoryDO.setBatchExamId(examPaperDTO.getExamId());
exerciseDoneHistoryDO.setPaperId(examPaperDTO.getPaperId());
exerciseDoneHistoryDO.setExerciseId(exercise.getId());
exerciseDoneHistoryDO.setOrderNo(i);
exerciseDoneHistoryMapper.insert(exerciseDoneHistoryDO);
if ("填空题".equals(exercise.getExerciseType()) || "主观题".equals(exercise.getExerciseType())) {
JSONArray jsonArray = JSONArray.fromObject(exercise.getRightAnswer());
exercisesVO.setCnt(jsonArray.size());
}
exercisesVO.setId(exerciseDoneHistoryDO.getId());
exercisesVOS.add(exercisesVO);
i++;
}
} else {
List<ExercisesWithAnswerVO> exercisesWithAnswerVOS = paperDictMapper.examExercises(examPaperDTO.getExamId(), examPaperDTO.getUserId(), examPaperDTO.getPaperId());
for (ExercisesWithAnswerVO exercise : exercisesWithAnswerVOS) {
ExercisesVO exercisesVO = new ExercisesVO();
BeanUtils.copyProperties(exercise, exercisesVO);
if ("填空题".equals(exercise.getExerciseType()) || "主观题".equals(exercise.getExerciseType())) {
JSONArray jsonArray = JSONArray.fromObject(exercise.getRightAnswer());
exercisesVO.setCnt(jsonArray.size());
}
exercisesVOS.add(exercisesVO);
}
}
examPaperVO.setExercises(exercisesVOS);
return examPaperVO;
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.service.BatchExamStudentsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.vo.exam.BatchExamStudentScoreVO;
import com.meishu.vo.paper.PapersVO;
import com.meishu.vo.student.StudentExamsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* <p>
* 学生考试映射表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class BatchExamStudentsServiceImpl extends ServiceImpl<BatchExamsStudentsMapper, BatchExamStudentsDO> implements BatchExamStudentsService {
public List<PapersVO> exams(BatchExamStudentsDO studentExamsDO) throws Exception{
List<PapersVO> exams = this.baseMapper.exams(studentExamsDO.getStudentId());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (PapersVO vo : exams) {
//未开始 进行中 已结束
if (simpleDateFormat.parse(vo.getStartDate()).after(new Date())) {
vo.setStatus("未开始");
} else if (simpleDateFormat.parse(vo.getEndDate()).before(new Date())) {
vo.setStatus("已结束");
} else {
vo.setStatus("进行中");
}
//是否已经参加过考试了
BatchExamStudentsDO batchExamStudentsDO = this.baseMapper.selectOne(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getBatchExamId,vo.getId())
.eq(BatchExamStudentsDO::getStudentId,studentExamsDO.getStudentId()));
if (null == batchExamStudentsDO.getScore()){
vo.setSubmitStatus(false);
}else {
vo.setSubmitStatus(true);
}
}
return exams;
}
public List<StudentExamsVO> studentExams(BatchExamStudentsDO studentExamsDO) {
return this.baseMapper.studentScore(studentExamsDO.getStudentId());
}
public List<BatchExamStudentScoreVO> batchExamStudentScore(BatchExamStudentsDO batchExamStudentsDO) {
return this.baseMapper.batchExamStudentScore(batchExamStudentsDO.getBatchExamId());
}
}
package com.meishu.service.impl;
import com.meishu.common.ResponseData;
import com.meishu.model.BatchStudentMappingDO;
import com.meishu.mapper.BatchStudentMappingMapper;
import com.meishu.service.BatchStudentMappingService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.vo.student.BatchStudentsVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-14
*/
@Service
public class BatchStudentMappingServiceImpl extends ServiceImpl<BatchStudentMappingMapper, BatchStudentMappingDO> implements BatchStudentMappingService {
public List<BatchStudentsVO> batchStudents(BatchStudentMappingDO batchStudentMappingDO){
return this.baseMapper.batchStudents(batchStudentMappingDO.getBatchId());
}
}
package com.meishu.service.impl;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.*;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.meishu.common.exception.HttpException;
import com.meishu.dto.exercise.LabelExercisesDTO;
import com.meishu.mapper.PaperExercisesMapper;
import com.meishu.model.ExerciseDictDO;
import com.meishu.mapper.ExerciseDictMapper;
import com.meishu.model.PaperExercisesDO;
import com.meishu.service.ExerciseDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.exercise.LabelExercisesVO;
import com.meishu.vo.exercise.UploadFileVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 习题库 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class ExerciseDictServiceImpl extends ServiceImpl<ExerciseDictMapper, ExerciseDictDO> implements ExerciseDictService {
@Autowired
private PaperExercisesMapper paperExercisesMapper;
@Value("${spring.profiles.active}")
private String env;
public static final String keyId = "LTAI5tPAH7P7WQVeowo517BE";
public static final String secret = "0ueqhIfdAZyw5lWlBVSLpAxTtx37RY";
public IPage<LabelExercisesVO> labelExercises(LabelExercisesDTO labelExercisesDTO) {
Page pager = new Page(labelExercisesDTO.getPageNum(), labelExercisesDTO.getPageSize());
return this.baseMapper.labelExercises(pager, labelExercisesDTO.getLabelId());
}
public String deleteExercises(ExerciseDictDO exerciseDictDO) {
int count = paperExercisesMapper.selectCount(new QueryWrapper<PaperExercisesDO>()
.lambda()
.eq(PaperExercisesDO::getExerciseId, exerciseDictDO.getId()));
if (count > 0) {
throw new HttpException(30001);
}
this.baseMapper.deleteById(exerciseDictDO.getId());
return ConstantUtils.DELETE_SUCCESS;
}
public String addExercises(ExerciseDictDO exerciseDictDO) {
this.baseMapper.insert(exerciseDictDO);
return ConstantUtils.ADD_SUCCESS;
}
public String updateExercises(ExerciseDictDO exerciseDictDO) {
this.baseMapper.updateById(exerciseDictDO);
return ConstantUtils.ADD_SUCCESS;
}
public UploadFileVO uploadFile(MultipartFile multipartFile) {
UploadFileVO uploadFileVO = new UploadFileVO();
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "http://oss-cn-shanghai.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = keyId;
String accessKeySecret = secret;
// 填写Bucket名称,例如examplebucket。
// String bucketName = "zhongzhi-cms";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
String objectName = System.currentTimeMillis() + "_" + multipartFile.getOriginalFilename();
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// if (env.equals("dev")) {
// env = "teachaicms-test";
// }
// if (env.equals("prod")) {
env = "teachaicms";
// }
try {
// 创建InitiateMultipartUploadRequest对象。
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(env, objectName);
// 如果需要在初始化分片时设置请求头,请参考以下示例代码。
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType(multipartFile.getContentType());
metadata.setContentDisposition("inline");
metadata.setHeader("x-oss-force-download", false);
request.setObjectMetadata(metadata);
// 如果需要在初始化分片时设置请求头,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// 指定该Object的网页缓存行为。
// metadata.setCacheControl("no-cache");
// 指定该Object被下载时的名称。
// metadata.setContentDisposition("attachment;filename=oss_MultipartUpload.txt");
// 指定该Object的内容编码格式。
// metadata.setContentEncoding(OSSConstants.DEFAULT_CHARSET_NAME);
// 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// 指定上传该Object的每个part时使用的服务器端加密方式。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// 指定Object的加密算法。如果未指定此选项,表明Object使用AES256加密算法。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_DATA_ENCRYPTION, ObjectMetadata.KMS_SERVER_SIDE_ENCRYPTION);
// 指定KMS托管的用户主密钥。
// metadata.setHeader(OSSHeaders.OSS_SERVER_SIDE_ENCRYPTION_KEY_ID, "9468da86-3509-4f8d-a61e-6eab1eac****");
// 指定Object的存储类型。
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard);
// 指定Object的对象标签,可同时设置多个标签。
// metadata.setHeader(OSSHeaders.OSS_TAGGING, "a:1");
// request.setObjectMetadata(metadata);
// 初始化分片。
InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
// 返回uploadId,它是分片上传事件的唯一标识。您可以根据该uploadId发起相关的操作,例如取消分片上传、查询分片上传等。
String uploadId = upresult.getUploadId();
// partETags是PartETag的集合。PartETag由分片的ETag和分片号组成。
List<PartETag> partETags = new ArrayList<PartETag>();
// 每个分片的大小,用于计算文件有多少个分片。单位为字节。
final long partSize = 1 * 1024 * 1024L; //1 MB。
// 根据上传的数据大小计算分片数。以本地文件为例,说明如何通过File.length()获取上传数据的大小。
// final File sampleFile = new File("D:\\localpath\\examplefile.txt");
// long fileLength = sampleFile.length();
// int partCount = (int) (fileLength / partSize);
// if (fileLength % partSize != 0) {
// partCount++;
// }
long fileLength = multipartFile.getSize();
int partCount = (int) (fileLength / partSize);
if (fileLength % partSize != 0) {
partCount++;
}
// 遍历分片上传。
for (int i = 0; i < partCount; i++) {
long startPos = i * partSize;
long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
UploadPartRequest uploadPartRequest = new UploadPartRequest();
uploadPartRequest.setBucketName(env);
uploadPartRequest.setKey(objectName);
uploadPartRequest.setUploadId(uploadId);
// 设置上传的分片流。
// 以本地文件为例说明如何创建FIleInputstream,并通过InputStream.skip()方法跳过指定数据。
InputStream instream = multipartFile.getInputStream();
instream.skip(startPos);
uploadPartRequest.setInputStream(instream);
// 设置分片大小。除了最后一个分片没有大小限制,其他的分片最小为100 KB。
uploadPartRequest.setPartSize(curPartSize);
// 设置分片号。每一个上传的分片都有一个分片号,取值范围是1~10000,如果超出此范围,OSS将返回InvalidArgument错误码。
uploadPartRequest.setPartNumber(i + 1);
// 每个分片不需要按顺序上传,甚至可以在不同客户端上传,OSS会按照分片号排序组成完整的文件。
UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
// 每次上传分片之后,OSS的返回结果包含PartETag。PartETag将被保存在partETags中。
partETags.add(uploadPartResult.getPartETag());
}
// 创建CompleteMultipartUploadRequest对象。
// 在执行完成分片上传操作时,需要提供所有有效的partETags。OSS收到提交的partETags后,会逐一验证每个分片的有效性。当所有的数据分片验证通过后,OSS将把这些分片组合成一个完整的文件。
CompleteMultipartUploadRequest completeMultipartUploadRequest =
new CompleteMultipartUploadRequest(env, objectName, uploadId, partETags);
// 如果需要在完成分片上传的同时设置文件访问权限,请参考以下示例代码。
// completeMultipartUploadRequest.setObjectACL(CannedAccessControlList.Private);
// 指定是否列举当前UploadId已上传的所有Part。仅在Java SDK为3.14.0及以上版本时,支持通过服务端List分片数据来合并完整文件时,将CompleteMultipartUploadRequest中的partETags设置为null。
// Map<String, String> headers = new HashMap<String, String>();
// 如果指定了x-oss-complete-all:yes,则OSS会列举当前UploadId已上传的所有Part,然后按照PartNumber的序号排序并执行CompleteMultipartUpload操作。
// 如果指定了x-oss-complete-all:yes,则不允许继续指定body,否则报错。
// headers.put("x-oss-complete-all","yes");
// completeMultipartUploadRequest.setHeaders(headers);
// 完成分片上传。
CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
uploadFileVO.setImageUrl(completeMultipartUploadResult.getLocation());
System.out.println(completeMultipartUploadResult.getLocation());
} catch (OSSException oe) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "but was rejected with an error response for some reason.");
System.out.println("Error Message:" + oe.getErrorMessage());
System.out.println("Error Code:" + oe.getErrorCode());
System.out.println("Request ID:" + oe.getRequestId());
System.out.println("Host ID:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ "such as not being able to access the network.");
System.out.println("Error Message:" + ce.getMessage());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return uploadFileVO;
}
/**
* 创建文件目录
*
* @param path
*/
public void createDir(String path) {
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.model.ExerciseDoneHistoryDO;
import com.meishu.mapper.ExerciseDoneHistoryMapper;
import com.meishu.service.ExerciseDoneHistoryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.exercise.ScoreDetailsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 学生做题历史记录表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class ExerciseDoneHistoryServiceImpl extends ServiceImpl<ExerciseDoneHistoryMapper, ExerciseDoneHistoryDO> implements ExerciseDoneHistoryService {
@Autowired
private ExerciseDoneHistoryMapper exerciseDoneHistoryMapper;
@Autowired
private BatchExamsStudentsMapper batchExamsStudentsMapper;
public List<ScoreDetailsVO> scoreDetails(BatchExamStudentsDO batchExamStudentsDO) {
return this.baseMapper.scoreDetails(batchExamStudentsDO.getBatchExamId(), batchExamStudentsDO.getStudentId());
}
public String updateScore(ExerciseDoneHistoryDO exerciseDoneHistoryDO) {
ExerciseDoneHistoryDO exerciseDoneHistoryDO1 = exerciseDoneHistoryMapper.selectById(exerciseDoneHistoryDO.getId());
exerciseDoneHistoryDO1.setScore(exerciseDoneHistoryDO.getScore());
exerciseDoneHistoryMapper.updateById(exerciseDoneHistoryDO1);
BatchExamStudentsDO batchExamStudentsDO = batchExamsStudentsMapper.selectOne(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getBatchExamId,exerciseDoneHistoryDO1.getBatchExamId())
.eq(BatchExamStudentsDO::getStudentId,exerciseDoneHistoryDO1.getStudentId()));
batchExamStudentsDO.setScore(exerciseDoneHistoryDO.getScore());
batchExamsStudentsMapper.updateById(batchExamStudentsDO);
return ConstantUtils.SET_SUCCESS;
}
}
package com.meishu.service.impl;
import com.meishu.model.LabelDictDO;
import com.meishu.mapper.LabelDictMapper;
import com.meishu.service.LabelDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 标签表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class LabelDictServiceImpl extends ServiceImpl<LabelDictMapper, LabelDictDO> implements LabelDictService {
public List<LabelDictDO> labels() {
return this.baseMapper.selectList(null);
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.common.exception.HttpException;
import com.meishu.dto.paper.PaperStudentExerciseDTO;
import com.meishu.dto.paper.SubmitDTO;
import com.meishu.mapper.ExerciseDictMapper;
import com.meishu.mapper.ExerciseDoneHistoryMapper;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.model.*;
import com.meishu.mapper.PaperDictMapper;
import com.meishu.service.PaperDictService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.paper.ExercisesVO;
import net.sf.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class PaperDictServiceImpl extends ServiceImpl<PaperDictMapper, PaperDictDO> implements PaperDictService {
@Autowired
private ExerciseDictMapper exerciseDictMapper;
@Autowired
private BatchExamsStudentsMapper studentExamsMapper;
@Autowired
private ExerciseDoneHistoryMapper exerciseDoneHistoryMapper;
public List<ExercisesVO> exercises(PaperExercisesDO paperExercisesDO) {
return this.baseMapper.exercises(paperExercisesDO.getPaperId());
}
@Transactional(rollbackFor = Exception.class)
public String submit(SubmitDTO submitDTO) {
int rightCount = 0;
BatchExamStudentsDO studentExamsDO = studentExamsMapper.selectOne(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getStudentId, submitDTO.getStudentId())
.eq(BatchExamStudentsDO::getBatchExamId, submitDTO.getBatchExamId()));
List<PaperStudentExerciseDTO> examStudentExerciseDTOS = submitDTO.getPaperStudentExerciseDTOS();
for (PaperStudentExerciseDTO examStudentExerciseDTO : examStudentExerciseDTOS) {
ExerciseDoneHistoryDO exerciseDoneHistoryDO = exerciseDoneHistoryMapper.selectById(examStudentExerciseDTO.getExerciseId());
exerciseDoneHistoryDO.setAnswer(examStudentExerciseDTO.getSelectAnswer());
ExerciseDictDO exerciseDict = exerciseDictMapper.selectById(exerciseDoneHistoryDO.getExerciseId());
if ("填空题".equals(exerciseDict.getExerciseType())){
JSONArray jsonArray = JSONArray.fromObject(exerciseDict.getRightAnswer());
String[] studentAnswers = examStudentExerciseDTO.getSelectAnswer().split(",");
for (int i = 0; i < jsonArray.size(); i++) {
if (i<studentAnswers.length){
if (jsonArray.get(i).equals(studentAnswers[i])){
rightCount++;
}
}
}
exerciseDoneHistoryDO.setScore(rightCount);
}if ("快件安检".equals(exerciseDict.getExerciseType())){
//选过了
//
}else {
if (exerciseDict.getRightAnswer().equals(examStudentExerciseDTO.getSelectAnswer())) {
exerciseDoneHistoryDO.setResult(1);
exerciseDoneHistoryDO.setScore(1);
rightCount++;
} else {
exerciseDoneHistoryDO.setResult(0);
exerciseDoneHistoryDO.setScore(0);
}
}
exerciseDoneHistoryDO.setBatchExamId(submitDTO.getBatchExamId());
exerciseDoneHistoryMapper.updateById(exerciseDoneHistoryDO);
}
if (null != studentExamsDO.getScore()){
throw new HttpException(60001);
}
studentExamsDO.setScore(rightCount);
studentExamsMapper.updateById(studentExamsDO);
return ConstantUtils.ADD_SUCCESS;
}
public List<PaperDictDO> allPapers() {
return this.baseMapper.selectList(null);
}
public String deletePaper(PaperDictDO examDictDO) {
this.baseMapper.deleteById(examDictDO.getId());
return ConstantUtils.DELETE_SUCCESS;
}
public String addPaper(PaperDictDO examDictDO) {
this.baseMapper.insert(examDictDO);
return ConstantUtils.ADD_SUCCESS;
}
public String updatePaper(PaperDictDO examDictDO) {
this.baseMapper.updateById(examDictDO);
return ConstantUtils.ADD_SUCCESS;
}
public void aa(){
List<ExerciseDoneHistoryDO> exerciseDoneHistoryDOS = exerciseDoneHistoryMapper.selectList(new QueryWrapper<ExerciseDoneHistoryDO>()
.lambda()
.ge(ExerciseDoneHistoryDO::getId,4951));
for (ExerciseDoneHistoryDO exerciseDoneHistoryDO : exerciseDoneHistoryDOS){
int rightCount = 0;
ExerciseDictDO exerciseDictDO = exerciseDictMapper.selectById(exerciseDoneHistoryDO.getExerciseId());
JSONArray jsonArray = JSONArray.fromObject(exerciseDictDO.getRightAnswer());
String[] studentAnswers = exerciseDoneHistoryDO.getAnswer().split(",");
for (int i = 0; i < jsonArray.size(); i++) {
if (i<studentAnswers.length){
if (jsonArray.get(i).equals(studentAnswers[i])){
rightCount++;
}
}
}
exerciseDoneHistoryDO.setScore(rightCount);
exerciseDoneHistoryMapper.updateById(exerciseDoneHistoryDO);
}
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.common.exception.HttpException;
import com.meishu.dto.paper.AddPaperExerciseDTO;
import com.meishu.mapper.PaperExercisesMapper;
import com.meishu.model.PaperExercisesDO;
import com.meishu.service.PaperExercisesService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.exercise.LabelExercisesVO;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 考试-题目映射表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class PaperExercisesServiceImpl extends ServiceImpl<PaperExercisesMapper, PaperExercisesDO> implements PaperExercisesService {
public List<LabelExercisesVO> exercises(PaperExercisesDO paperExercisesDO) {
return this.baseMapper.getPaperExercises(paperExercisesDO.getPaperId());
}
public String deletePaperExercise(LabelExercisesVO labelExercisesVO) {
this.baseMapper.deleteById(labelExercisesVO.getPaperExerciseId());
return ConstantUtils.DELETE_SUCCESS;
}
public String addPaperExercise(AddPaperExerciseDTO addPaperExerciseDTO) {
List<Long> exerciseIds = addPaperExerciseDTO.getExerciseIds();
for (Long exerciseId : exerciseIds){
int count = this.baseMapper.selectCount(new QueryWrapper<PaperExercisesDO>()
.lambda()
.eq(PaperExercisesDO::getPaperId,addPaperExerciseDTO.getPaperId())
.eq(PaperExercisesDO::getExerciseId,exerciseId));
PaperExercisesDO paperExercisesDO = new PaperExercisesDO();
paperExercisesDO.setPaperId(addPaperExerciseDTO.getPaperId());
paperExercisesDO.setExerciseId(exerciseId);
if (count > 0){
throw new HttpException(30002);
}
this.baseMapper.insert(paperExercisesDO);
}
return ConstantUtils.ADD_SUCCESS;
}
}
package com.meishu.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.meishu.common.exception.HttpException;
import com.meishu.dto.student.LoginDTO;
import com.meishu.mapper.BatchDictMapper;
import com.meishu.mapper.BatchExamsStudentsMapper;
import com.meishu.mapper.BatchStudentMappingMapper;
import com.meishu.model.BatchDictDO;
import com.meishu.model.BatchStudentMappingDO;
import com.meishu.model.StudentDO;
import com.meishu.mapper.StudentMapper;
import com.meishu.model.BatchExamStudentsDO;
import com.meishu.service.StudentService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meishu.util.ConstantUtils;
import com.meishu.vo.student.LoginVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
/**
* <p>
* 学生表 服务实现类
* </p>
*
* @author Tuyp
* @since 2023-07-11
*/
@Service
public class StudentServiceImpl extends ServiceImpl<StudentMapper, StudentDO> implements StudentService {
@Autowired
private BatchExamsStudentsMapper batchExamsStudentsMapper;
@Autowired
private BatchStudentMappingMapper batchStudentMappingMapper;
@Autowired
private BatchDictMapper batchDictMapper;
public LoginVO login(LoginDTO loginDTO) throws Exception{
StudentDO studentDO1 = this.baseMapper.selectOne(new QueryWrapper<StudentDO>()
.lambda()
.eq(StudentDO::getIdCard, loginDTO.getIdCard()));
if (null == studentDO1){
throw new HttpException(10001);
}
BatchStudentMappingDO batchStudentMappingDO = batchStudentMappingMapper.selectOne(new QueryWrapper<BatchStudentMappingDO>()
.lambda()
.eq(BatchStudentMappingDO::getStudentId, studentDO1.getId())
.eq(BatchStudentMappingDO::getExamCode, loginDTO.getExamCode()));
if (null == batchStudentMappingDO) {
throw new HttpException(10001);
}
BatchDictDO batchDictDO = batchDictMapper.selectById(batchStudentMappingDO.getBatchId());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
if (simpleDateFormat.parse(batchDictDO.getStartDate()).after(new Date())||simpleDateFormat.parse(batchDictDO.getEndDate()).before(new Date())){
throw new HttpException(10004);
}
//签到 取第一次
if (null == batchStudentMappingDO.getSignDate()){
batchStudentMappingDO.setSignDate(new Date());
batchStudentMappingMapper.updateById(batchStudentMappingDO);
}
LoginVO loginVO = new LoginVO();
loginVO.setId(studentDO1.getId());
loginVO.setUserName(studentDO1.getUserName());
loginVO.setExamCode(batchStudentMappingDO.getExamCode());
loginVO.setCompanyName(studentDO1.getCompanyName());
loginVO.setBatchId(batchStudentMappingDO.getBatchId());
return loginVO;
}
public List<StudentDO> students(StudentDO studentDO) {
return this.baseMapper.students(studentDO.getUserName());
}
public String deleteStudent(StudentDO studentDO) {
Integer count = batchExamsStudentsMapper.selectCount(new QueryWrapper<BatchExamStudentsDO>()
.lambda()
.eq(BatchExamStudentsDO::getStudentId, studentDO.getId()));
if (count > 0) {
throw new HttpException(20001);
}
this.baseMapper.deleteById(studentDO.getId());
return ConstantUtils.DELETE_SUCCESS;
}
public String updateStudent(StudentDO studentDO) {
StudentDO studentDO1 = this.baseMapper.selectById(studentDO.getId());
if (StringUtils.isNotEmpty(studentDO.getIdCard())) {
studentDO1.setIdCard(studentDO.getIdCard());
}
if (StringUtils.isNotEmpty(studentDO.getCompanyName())) {
studentDO1.setCompanyName(studentDO.getCompanyName());
}
if (StringUtils.isNotEmpty(studentDO.getUserName())) {
studentDO1.setUserName(studentDO.getUserName());
}
this.baseMapper.updateById(studentDO1);
return ConstantUtils.SET_SUCCESS;
}
public String addStudent(StudentDO studentDO) {
int coount = this.baseMapper.selectCount(new QueryWrapper<StudentDO>()
.lambda()
.eq(StudentDO::getIdCard, studentDO.getIdCard()));
if (coount > 0) {
throw new HttpException(10002);
}
this.baseMapper.insert(studentDO);
return ConstantUtils.ADD_SUCCESS;
}
}
package com.meishu.util;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public abstract class BaseModel {
/**
* 创建时间
*/
@JsonIgnore
@TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "create_date", fill = FieldFill.INSERT)
private LocalDateTime createDate;
/**
* 更新时间
*/
@JsonIgnore
@TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER, value = "update_date", fill = FieldFill.UPDATE)
private LocalDateTime updateDate;
/**
* 删除时间
*/
@JsonIgnore
@TableLogic
private LocalDateTime deleteDate;
}
package com.meishu.util;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.Scanner;
/**
* Mybatis-Plus CodeGenerator
*
* @author DengMin
* @date 2020/07/02
**/
public class CodeGenerator {
public static String scanner(String tip) {
StringBuilder help = new StringBuilder();
help.append("1.生成全部表 2.输入需要生成表名");
System.out.println(help.toString());
Scanner scanner = new Scanner(System.in);
Integer ipt = Integer.valueOf(scanner.next());
if(ipt == 1) {
return "";
} else if(ipt == 2) {
StringBuilder help1 = new StringBuilder();
help1.append("请输入" + tip + ":");
System.out.println(help1.toString());
Scanner scanner1 = new Scanner(System.in);
if (scanner1.hasNext()) {
String name = scanner1.next();
if (StringUtils.isNotEmpty(name)) {
return name;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
return scanner(tip);
}
public static void main(String[] args) {
final ResourceBundle rb = ResourceBundle.getBundle("mybatis-plus");
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir(System.getProperty("user.dir") + rb.getString("outputDir"));
gc.setOpen(false);
gc.setBaseResultMap(true);
gc.setBaseColumnList(true);
gc.setAuthor(rb.getString("author"));
gc.setMapperName("%sMapper");
gc.setEntityName("%sDO");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setUrl(rb.getString("url"));
dsc.setDriverName(rb.getString("driverName"));
dsc.setUsername(rb.getString("userName"));
dsc.setPassword(rb.getString("password"));
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent(rb.getString("setParent"));
pc.setController("controller");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setEntity("model");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输入文件名称
return System.getProperty("user.dir")+ rb.getString("mapperPath") + tableInfo.getMapperName() + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
mpg.setTemplate(new TemplateConfig().setXml(null));
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setSuperEntityClass(BaseModel.class);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
String [] tables = scanner("表名,多个英文逗号分割").split(",");
if(StringUtils.isNotBlank(tables[0])) {
strategy.setInclude(tables);
}
strategy.setControllerMappingHyphenStyle(true);
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
\ No newline at end of file
package com.meishu.util;
/**
* 枚举类
*/
public class ConstantUtils {
public static final String DELETE_SUCCESS = "删除成功";
public static final String ADD_SUCCESS = "新增成功";
public static final String SUCCESS_SEND_OUT = "发送成功";
public static final String FAIL_SEND_OUT = "发送失败";
public static final String SUCCESS_UPDATE = "更新成功";
public static final String SET_SUCCESS = "设置成功";
public static final String ALREADY_DONE = "已完成";
public static final String VERIFY_NAME = "有课互联";
public static final String NOTICE_NAME = "有课进度通知";
public static final String KEJI_NAME = "有课互联科技";
public static final String COMPRESS_SUCCESS = "压缩成功";
public static final String SCHOOL = "上海市市西中学";
public static final String CHECK_STATUS = "审核通过";
public static final String ADMINISTER_TERMINATE = "administer";
}
package com.meishu.util;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
import java.util.Locale;
/**
* 处理时间工具
*
* @author DengMin
* @date 2019/08/27 13:56
**/
public class DateFormatUtil {
public final static String YEAR = "yyyy";
public final static String FMT_sdf14_L = "yyyy-MM-dd HH:mm:ss";
public final static String FMT_sdf_yMd = "yyyy-MM-dd";
public final static String FMT_sdf_yM = "yyyy-M";
public final static String FMT_sdf_yMM = "yyyy-MM";
public final static String FMT_sdf_Hm = "H:mm";
public final static String FMT_sdf_HHmm = "HH:mm";
public final static String cron = "s m H d M ? yyyy";
/**
* Date转String,自定义格式
* @param date
* @param pattern
* @return
*/
public static String format(Date date, String pattern) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* String转Date,自定义格式
* @param date
* @param pattern
* @return
*/
public static Date parse(String date, String pattern) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(date);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 比较两个时间
* .after 大于
* .before 小于
* @param d1
* @param d2
* @return
*/
public static boolean compare(Date d1, Date d2 ) {
return !d1.after(d2);
}
/**
* Data转Cron
* @param date
* @return
*/
public static String getCron(Date date) {
SimpleDateFormat sdf = new SimpleDateFormat("s m H d M ? yyyy");
return sdf.format(date);
}
}
package com.meishu.util;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
public class FileUtil {
public static String uploadFile(MultipartFile multipartFile) {
final String originalFilename = multipartFile.getOriginalFilename();
String savePath = "E:\\pics\\" + originalFilename;
try {
createDir("E:\\zzj\\xrk\\");
multipartFile.transferTo(new File(savePath));
return "上传完成,文件上传至:" + savePath;
} catch (Exception ex) {
ex.printStackTrace();
return "文件上传异常";
}
}
/**
* 创建文件目录
*
* @param path
*/
public static void createDir(String path) {
File dir = new File(path);
if (!dir.exists()) {
dir.mkdir();
}
}
}
package com.meishu.util;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import java.util.Date;
import java.util.Map;
/**
* <p>
* Token工具
* </p>
*
* @author DengMin
* @since 2021/4/14
*/
public class JwtUtil {
private static Long EXPIRE_TIME = 24 * 60 * 60 * 1000L;
private static String SECRET = "PBKDF2SHA256:64000:18:24:N:GFHZ6Y0PTEUDYCJI3K6SOOXWYEKPOZED:WBWFJMX5DF252E0HR3BF3P/D";
/**
* 生成Token
* @param id
* @return
*/
public static String generateToken(Long id, String type) {
Date expireDate = new Date(System.currentTimeMillis() + EXPIRE_TIME);
return JWT.create()
.withClaim("id", id)
.withClaim("type", type)
.withAudience()
.withExpiresAt(expireDate)
.withIssuedAt(new Date())
.sign(Algorithm.HMAC256(SECRET));
}
/**
* 检验token是否正确
* @param token
* @return
*/
public static boolean verifyToken(String token) {
try {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
verifier.verify(token);
return true;
} catch (Exception e) {
return false;
}
}
/**
* 获取用户自定义Claim集合
* @param token
* @return
*/
public static Map<String, Claim> getClaims(String token) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
JWTVerifier verifier = JWT.require(algorithm).build();
Map<String, Claim> claims = verifier.verify(token).getClaims();
return claims;
}
/**
* 获取过期时间
* @param token
* @return
*/
public static Date getExpiresAt(String token) {
Algorithm algorithm = Algorithm.HMAC256(SECRET);
return JWT
.require(algorithm)
.build()
.verify(token)
.getExpiresAt();
}
/**
* 验证token是否失效
* @param token
* @return true: 过期, false: 没过期
*/
public static boolean isExpired(String token) {
try {
final Date expiration = getExpiresAt(token);
return expiration.before(new Date());
} catch (Exception e) {
return true;
}
}
}
package com.meishu.util;
import org.scilab.forge.jlatexmath.TeXConstants;
import org.scilab.forge.jlatexmath.TeXFormula;
import org.scilab.forge.jlatexmath.TeXIcon;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
/**
* @author: tuyp
* @create: 2020-08-08 21:19
*/
public class LatexUtils {
/**
* @Description: 将base64编码字符串转换为图片
* @Author:
* @CreateTime:
* @param imgStr
* base64编码字符串
* @param path
* 图片路径-具体到文件
* @return
*/
public static boolean generateImage(String imgStr, String path) {
if (imgStr == null) {
return false;
}
// BASE64Decoder decoder = new BASE64Decoder();
try {
// byte[] b = decoder.decodeBuffer(imgStr);
// for (int i = 0; i < b.length; i++) {
// if (b[i] < 0) {
// b[i] += 256;
// }
// }
// OutputStream out = new FileOutputStream(path);
// out.write(b);
// out.flush();
// out.close();
return true;
} catch (Exception e) {
// TODO: handle exception
return false;
}
}
/**
* @Description: 根据图片地址转换为base64编码字符串
* @Author:
* @CreateTime:
* @return
*/
// public static String getImageStr(String imgFile) {
// InputStream inputStream = null;
// byte[] data = null;
// try {
// inputStream = new FileInputStream(imgFile);
// data = new byte[inputStream.available()];
// inputStream.read(data);
// inputStream.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// // 加密
// BASE64Encoder encoder = new BASE64Encoder();
// return encoder.encode(data);
// }
// latex 转 imgbase64
public static String latex2Png(String latex) {
try {
TeXFormula formula = new TeXFormula(latex);
// render the formla to an icon of the same size as the formula.
TeXIcon icon = formula.createTeXIcon(TeXConstants.STYLE_DISPLAY, 20);
// insert a border
icon.setInsets(new Insets(1, 1, 1, 1));
// now create an actual image of the rendered equation
BufferedImage image = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics2D g2 = image.createGraphics();
g2.setColor(Color.white);
g2.fillRect(0, 0, icon.getIconWidth(), icon.getIconHeight());
JLabel jl = new JLabel();
jl.setForeground(new Color(0, 0, 0));
icon.paintIcon(jl, g2, 0, 0);
// at this point the image is created, you could also save it with ImageIO
// saveImage(image, "png", "F:\\b.png");
// ImageIO.write(image, "png", new File("F:\\c.png"));
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
ImageIO.write(image, "png", outputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
byte[] buffer = outputStream.toByteArray();
// BASE64Encoder encoder = new BASE64Encoder();
return ("data:image/png;base64,");
} catch (Exception e) {
// e.printStackTrace();
// ExceptionUtil.log(log, e);
System.err.println("公式解析有误:\n" + latex);
// e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
String str = latex2Png("\\(\\sqrt[3]{2+x}\\)");
System.out.println(str);
// String omml =Latex_Word.latexToWord(str);
// System.out.println(omml);
}
}
package com.meishu.util;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Localstorage {
private static final ThreadLocal<Object> local = ThreadLocal.withInitial(() -> null);
public static void setUser(Object admin) {
Localstorage.local.set(admin);
}
public static Object getUser() {
return Localstorage.local.get();
}
public static void remove() {
Localstorage.local.remove();
}
}
package com.meishu.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;
public class MathUtil {
public static String getRandomCode(int randomLength) {
StringBuilder str = new StringBuilder();
Random random = new Random();
for (int i = 0; i < randomLength; i++) {
str.append(random.nextInt(10));
}
return str.toString();
}
public static String getRandomString(int length) {
StringBuilder val = new StringBuilder();
Random random = new Random();
for (int i = 0; i < length; ++i) {
String charOrNum = random.nextInt(3) % 3 == 0 ? "num" : "char";
if ("char".equalsIgnoreCase(charOrNum)) {
int temp = random.nextInt(2) % 2 == 0 ? 65 : 97;
val.append((char) (random.nextInt(26) + temp));
} else {
val.append(random.nextInt(10));
}
}
return val.toString();
}
//习题/视频 ==> 秒钟向上取整
public static String ceilSecond(int length) {
return String.valueOf((int) Math.ceil((double) length / 60));
}
//视频秒数处理
public static String vodLength(int i) {
if (i > 60) {
if (i % 60 >= 10) {
return i / 60 + ":" + i % 60;
} else {
return i / 60 + ":0" + i % 60;
}
} else {
if (i % 60 >= 10) {
return "00:" + i;
} else {
return "00:0" + i;
}
}
}
//文件大小处理
public static String fileUnit(int i) {
if (i / 1024 > 1024) {
return String.format("%.2f", (double) i / 1024 / 1024) + "M";
} else {
return String.format("%.2f", (double) i / 1024) + "K";
}
}
//单个题目秒数处理
public static String exerciseLength(int i) {
if (i >= 60 * 60) {
return i / 60 / 60 + "时" + (i - 60 * 60) / 60 + "分" + i % 60 + "秒";
} else if (i >= 60) {
return i / 60 + "分" + i % 60 + "秒";
} else {
return i % 60 + "秒";
}
}
// 除法取整
public static String getAvgIndex(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total)) {
return "0";
} else {
return counts.divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString();
}
}
//百分比 取整 返回字符串
public static String getPercentAvgIndex(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) {
return "0%";
} else {
return counts.multiply(new BigDecimal(100)).divide(total, RoundingMode.CEILING).stripTrailingZeros().toPlainString() + "%";
}
}
//百分比 不带%输出
public static String getPercentAvgIndexWithPercent(BigDecimal counts, BigDecimal total) {
if (BigDecimal.ZERO.equals(total) || BigDecimal.ZERO.equals(counts)) {
return "0";
} else {
return counts.multiply(new BigDecimal(100)).divide(total,2,BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
}
}
//习题序号生成规则 sid 从数据取出某科目某知识点的最大的序号
public static String getExeCode(String sid) {
Integer integer = Integer.valueOf(sid.substring(9));
return sid.substring(0, 9) + (++integer);
}
// 整型a 整型b a/b 向上取整
public static Integer intDivCeil(long a, int b) {
return (int) Math.ceil((double) a / b);
}
// 整型a 整型b a/b 向下取整
public static Integer intDivFloorPercent(long a, int b) {
return (int) Math.floor((double) a * 100 / b);
}
public static Integer getRandomNum(Integer i){
Random random = new Random();
return random.nextInt(i);
}
// public static void main(String[] args) {
// for (int i= 1;i<100;i++){
// System.out.println(getRandomNum(2));
// }
// }
}
package com.meishu.util;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPTable;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
@Slf4j
@Component
public class PDFUtil {
static BaseFont baseFont;
{
try {
baseFont = BaseFont.createFont("https://zhongzhi-cms.oss-cn-shanghai.aliyuncs.com/STSONG.TTF", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void tableStyle(PdfPTable table, int[] cellsWidth) throws DocumentException {
table.setWidths(cellsWidth);
table.setWidthPercentage(100);
table.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
table.getDefaultCell().setVerticalAlignment(Element.ALIGN_MIDDLE);
table.getDefaultCell().setFixedHeight(30);
table.getDefaultCell().setBackgroundColor(BaseColor.BLUE);
table.getDefaultCell().setPadding(0);
table.getDefaultCell().setBorderWidth(0);
}
/**
* 流化下载
*
* @param bytes
* @param filename
*/
public static void renderPdf(final byte[] bytes, final String filename, String type) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
initResponseHeader(response, "application/" + type);
setFileDownloadHeader(response, filename, "." + type);
if (null != bytes) {
try {
response.getOutputStream().write(bytes);
response.getOutputStream().flush();
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
}
/**
* 分析并设置contentType与headers.
*/
private static HttpServletResponse initResponseHeader(HttpServletResponse response, final String contentType, final String... headers) {
// 分析headers参数
String encoding = "utf-8";
boolean noCache = true;
for (String header : headers) {
String headerName = StringUtils.substringBefore(header, ":");
String headerValue = StringUtils.substringAfter(header, ":");
if (StringUtils.equalsIgnoreCase(headerName, "utf-8")) {
encoding = headerValue;
} else if (StringUtils.equalsIgnoreCase(headerName, "no-cache")) {
noCache = Boolean.parseBoolean(headerValue);
} else {
throw new IllegalArgumentException(headerName + "不是一个合法的header类型");
}
}
// 设置headers参数
String fullContentType = contentType + ";charset=" + encoding;
response.setContentType(fullContentType);
if (noCache) {
// Http 1.0 header
response.setDateHeader("Expires", 0);
response.addHeader("Pragma", "no-cache");
// Http 1.1 header
response.setHeader("Cache-Control", "no-cache");
}
return response;
}
/**
* 设置让浏览器弹出下载对话框的Header.
*
* @param
*/
public static void setFileDownloadHeader(HttpServletResponse response, String fileName, String fileType) {
try {
// 中文文件名支持
String encodedfileName = new String(fileName.getBytes(StandardCharsets.UTF_8), "ISO8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + fileType + "\"");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
package com.meishu.util;
import java.util.Random;
public class RandomUtil {
public static int getCode() {
return (int)((Math.random() * 9 + 1) * 100000);
}
public static String getRandomCode(int randomLength) {
StringBuilder str = new StringBuilder();
Random random = new Random();
for (int i = 0; i < randomLength; i++) {
str.append(random.nextInt(10));
}
return str.toString();
}
}
package com.meishu.util;
import org.apache.commons.codec.binary.Hex;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.util.Random;
import java.util.UUID;
public class SecretUtils {
/**
* 对用户登录密码进行MD5加密
*
* @param str
* @return
*/
public static String getMD5String(String str) {
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes());
// digest()最后确定返回md5 hash值,返回值为8位字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
//一个byte是八位二进制,也就是2位十六进制字符(2的8次方等于16的2次方)
return new BigInteger(1, md.digest()).toString(16);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 对字符串进行SHA加密
*
* @param
*/
public static String getSHAString(String str) {
try {
MessageDigest sha = MessageDigest.getInstance("SHA-1");
byte[] byteArray = str.getBytes(StandardCharsets.UTF_8);
byte[] md5Bytes = sha.digest(byteArray);
StringBuffer hexValue = new StringBuffer();
for (int i = 0; i < md5Bytes.length; i++) {
int val = ((int) md5Bytes[i]) & 0xff;
if (val < 16) {
hexValue.append("0");
}
hexValue.append(Integer.toHexString(val));
}
return hexValue.toString();
} catch (Exception e) {
return null;
}
}
private static byte[] md5(String s)
{
MessageDigest algorithm;
try
{
algorithm = MessageDigest.getInstance("MD5");
algorithm.reset();
algorithm.update(s.getBytes(StandardCharsets.UTF_8));
byte[] messageDigest = algorithm.digest();
return messageDigest;
}
catch (Exception e)
{
e.getMessage();
}
return null;
}
private static final String toHex(byte[] hash)
{
if (hash == null)
{
return null;
}
StringBuffer buf = new StringBuffer(hash.length * 2);
int i;
for (i = 0; i < hash.length; i++)
{
if ((hash[i] & 0xff) < 0x10)
{
buf.append("0");
}
buf.append(Long.toString(hash[i] & 0xff, 16));
}
return buf.toString();
}
public static String hash(String s)
{
try
{
return new String(toHex(md5(s)).getBytes(StandardCharsets.UTF_8), StandardCharsets.UTF_8);
}
catch (Exception e)
{
return s;
}
}
public static void main(String[] args) {
String uuid = UUID.randomUUID().toString();
System.out.println(uuid);
System.out.println(hash(uuid+"ixihs"));
}
}
\ No newline at end of file
package com.meishu.util.excel;
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelColumn {
String value() default "";
int col() default 1;
}
package com.meishu.util.excel;
import java.lang.annotation.*;
/**
* <p>
* excel 字段
* </p>
*
* @author DengMin
* @date Created in 2020/08/28
*/
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ExcelColumnUtil {
String value() default "";
int col() default 0;
}
package com.meishu.util.excel;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.http.MediaType;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Excel工具
*
* @author DengMin
* @date 2019/08/27 13:57
**/
@Slf4j
public class ExcelUtil {
private final static String EXCEL2003 = "xls";
private final static String EXCEL2007 = "xlsx";
/**
* 导入excel文件
* @param path
* @param cls
* @param file
* @param <T>
* @return
*/
public static <T> List<T> readExcel(String path, Class<T> cls, MultipartFile file) {
String fileName = file.getOriginalFilename();
if(!fileName.matches("^.+\\.(?i)(xls)$") && !fileName.matches("^.+\\.(?i)(xlsx)$")) {
log.info("上传文件格式不正确");
// throw new HTTPException(10022);
}
List<T> dataList = new ArrayList<>();
Workbook workbook = null;
try {
InputStream is = file.getInputStream();
if (fileName.endsWith(EXCEL2007)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new XSSFWorkbook(is);
}
if(fileName.endsWith(EXCEL2003)) {
// FileInputStream is = new FileInputStream(new File(path));
workbook = new HSSFWorkbook(is);
}
if (workbook != null) {
Map<String, List<Field>> classMap = new HashMap<>();
List<Field> fields = Stream.of(cls.getDeclaredFields()).collect(Collectors.toList());
fields.forEach(field -> {
ExcelColumnUtil annotation = field.getAnnotation(ExcelColumnUtil.class);
if (annotation != null) {
String value = annotation.value();
if(StringUtils.isBlank(value)) {
return;
}
if(!classMap.containsKey(value)) {
classMap.put(value, new ArrayList<>());
}
field.setAccessible(true);
classMap.get(value).add(field);
}
});
//索引-->columns
Map<Integer, List<Field>> reflectionMap = new HashMap<>();
//默认读取第一个sheet
Sheet sheet = workbook.getSheetAt(0);
boolean firstRow = true;
for (int i = 0; i <= sheet.getLastRowNum(); i++) {
Row row = sheet.getRow(i);
//提取标题
if (firstRow) {
for (int j = 0; j <= row.getLastCellNum(); j++) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (classMap.containsKey(cellValue)) {
reflectionMap.put(j, classMap.get(cellValue));
}
}
firstRow = false;
} else {
//忽略空白行
if (row == null) {
continue;
}
try {
T t = cls.newInstance();
//判断是否为空白行
boolean allBlank = true;
for (int j = 0; j <= row.getLastCellNum(); j++) {
if (reflectionMap.containsKey(j)) {
Cell cell = row.getCell(j);
String cellValue = getCellValue(cell);
if (StringUtils.isNotBlank(cellValue)) {
allBlank = false;
}
List<Field> fieldList = reflectionMap.get(j);
fieldList.forEach(x -> {
try {
handleField(t, cellValue, x);
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("reflect field:%s value:%s exception!", x.getName(), cellValue), e);
}
});
}
}
if(!allBlank) {
dataList.add(t);
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse row:%s exception!", i), e);
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (Exception e) {
e.printStackTrace();
log.error(String.format("parse excel exception!"), e);
}
}
}
return dataList;
}
/**
* 导出excel文件
* @param list
* @param cls
* @param <T>
*/
public static <T> void writeExcel(List<T> list, Class cls) {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletResponse response = servletRequestAttributes.getResponse();
Field[] fields = cls.getDeclaredFields();
List<Field> fieldList = Arrays.stream(fields).filter(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if(annotation != null) {
field.setAccessible(true);
return true;
}
return false;
}).sorted(Comparator.comparing(field -> {
int col = 0;
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
if(annotation != null) {
col = annotation.col();
}
return col;
})).collect(Collectors.toList());
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet();
AtomicInteger ai = new AtomicInteger();
{
Row row = sheet.createRow(ai.getAndIncrement());
AtomicInteger at = new AtomicInteger();
fieldList.forEach(field -> {
ExcelColumn annotation = field.getAnnotation(ExcelColumn.class);
String columnName = "";
if (annotation != null) {
columnName = annotation.value();
}
Cell cell = row.createCell(at.getAndIncrement());
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillForegroundColor(IndexedColors.PALE_BLUE.getIndex());
Font font = wb.createFont();
font.setBoldweight(Font.BOLDWEIGHT_BOLD);
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
cell.setCellValue(columnName);
});
if (list != null) {
list.forEach(data -> {
Row r = sheet.createRow(ai.getAndIncrement());
AtomicInteger a = new AtomicInteger();
fieldList.forEach(field -> {
try {
Class<?> type = field.getType();
Object value = field.get(data);
Cell cell = r.createCell(a.getAndIncrement());
if (value != null) {
cell.setCellValue(value.toString());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
});
for (int i = 0; i < list.size(); i++) {
sheet.autoSizeColumn(i);
}
}
String fileName = String.valueOf(new Date().getTime());
buildExcelDocument(fileName + "." + EXCEL2007, wb, response);
}
}
private static void setStyle(CellStyle cellStyle) {
// 水平居中
cellStyle.setAlignment(CellStyle.ALIGN_CENTER);
// 垂直居中
cellStyle.setVerticalAlignment(CellStyle.ALIGN_CENTER);
// 边框
cellStyle.setBorderTop(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderRight(CellStyle.BORDER_THIN);
// 边框
cellStyle.setBorderBottom(CellStyle.BORDER_THIN);
}
private static <T> void handleField(T t, String value, Field field) throws Exception {
Class<?> type = field.getType();
if (type == null || type == void.class || StringUtils.isBlank(value)) {
return;
}
if (type == Object.class) {
field.set(t, value);
//数字类型
} else if (type.getSuperclass() == null || type.getSuperclass() == Number.class) {
if (type == int.class || type == Integer.class) {
field.set(t, NumberUtils.toInt(value));
} else if (type == long.class || type == Long.class) {
field.set(t, NumberUtils.toLong(value));
} else if (type == byte.class || type == Byte.class) {
field.set(t, NumberUtils.toByte(value));
} else if (type == short.class || type == Short.class) {
field.set(t, NumberUtils.toShort(value));
} else if (type == double.class || type == Double.class) {
field.set(t, NumberUtils.toDouble(value));
} else if (type == float.class || type == Float.class) {
field.set(t, NumberUtils.toFloat(value));
} else if (type == char.class || type == Character.class) {
field.set(t, CharUtils.toChar(value));
} else if (type == boolean.class) {
field.set(t, BooleanUtils.toBoolean(value));
} else if (type == BigDecimal.class) {
field.set(t, new BigDecimal(value));
}
} else if (type == Boolean.class) {
field.set(t, BooleanUtils.toBoolean(value));
} else if (type == Date.class) {
//
field.set(t, value);
} else if (type == String.class) {
field.set(t, value);
} else {
Constructor<?> constructor = type.getConstructor(String.class);
field.set(t, constructor.newInstance(value));
}
}
private static String getCellValue(Cell cell) {
if (cell == null) {
return "";
}
if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {
if (DateUtil.isCellDateFormatted(cell)) {
return HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else {
return new BigDecimal(cell.getNumericCellValue()).toString();
}
} else if (cell.getCellType() == Cell.CELL_TYPE_STRING) {
return StringUtils.trimToEmpty(cell.getStringCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
return StringUtils.trimToEmpty(cell.getCellFormula());
} else if (cell.getCellType() == Cell.CELL_TYPE_BLANK) {
return "";
} else if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {
return String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == Cell.CELL_TYPE_ERROR) {
return "ERROR";
} else {
return cell.toString().trim();
}
}
private static void buildExcelDocument(String fileName, Workbook wb, HttpServletResponse response){
try {
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "utf-8"));
response.flushBuffer();
wb.write(response.getOutputStream());
} catch (IOException e) {
log.error(String.format("downLoad excel exception"), e);
}
}
private static void buildExcelFile(String path, Workbook wb){
File file = new File(path);
if (file.exists()) {
file.delete();
}
try {
wb.write(new FileOutputStream(file));
} catch (Exception e) {
log.error(String.format("downLoad excel exception"), e);
}
}
}
package com.meishu.util.tree;
import lombok.Data;
@Data
public class Node implements Comparable<Node> {
//主键
private String id;
//同级节点第几个元素
private String number;
//1.1
private String text;
//父节点
private String parentId;
private int level;
public Node(String id, String number, String parentId, int level) {
this.id = id;
this.number = number;
this.parentId = parentId;
this.level = level;
}
@Override
public int compareTo(Node o) {
if (this.level != o.level) {
return o.level - this.level;
} else {
if(this.number==null){
return -1;
}
return this.number.compareTo(o.number);
}
}
}
package com.meishu.util.tree;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class NumberTree {
private String id;
private List<Node> nodeList;
private String separator;
private int idSeq;
private SerialNumber number;
public NumberTree(String separator, SerialNumber number) {
init();
this.separator = separator;
this.number = number;
}
public void init() {
idSeq = 1;
this.separator = ".";
if (this.nodeList == null) {
nodeList = new ArrayList<Node>();
}
}
/**
* <p>功能描述:根据父节点获取所有子节点。</p>
*/
public List<Node> getChildNodes(Node pNode) {
String pId = pNode.getId();
return getChildNodes(pId);
}
/**
* <p>功能描述:根据父节点获取所有子节点。</p>
*/
public List<Node> getChildNodes(String pId) {
List<Node> childNodes = new ArrayList<Node>();
for (Node n : nodeList) {
if (pId.equals(n.getParentId())) {
childNodes.add(n);
}
}
return childNodes;
}
/**
* <p>功能描述:获取本级值最大的节点。</p>
*/
public Node getMaxNodeForThisLevel(Node pNode) {
List<Node> childList = getChildNodes(pNode);
Node root = getRoot(nodeList);
if (childList.size() <= 0) {
return null;
}
Node maxNode = root;
for (Node node : childList) {
if (maxNode.getNumber().compareTo(node.getNumber()) < 0) {
maxNode = node;
}
}
return maxNode;
}
/**
* <p>功能描述:生成下一个子节点。</p>
*/
public Node generateNextChildNode(Node node) {
Node newNode = null;
Node maxNode = getMaxNodeForThisLevel(node);
String nextNumber = number.firstNumber();
int level = node.getLevel();
if (maxNode != null && !"0".equals(maxNode.getId())) {//本级存在子节点,且非根节点
nextNumber = number.produceNext(maxNode.getNumber());
level = maxNode.getLevel();
}
newNode = new Node(String.valueOf(++idSeq), nextNumber, node.getId(), level);
generateNodeText(newNode, nextNumber);
return newNode;
}
/**
*
* <p>功能描述:获取父节点。</p>
*/
public Node getParentNode(Node node) {
for (Node n : nodeList) {
if (node.getParentId() == n.getId()) {
return n;
}
}
return node;
}
/**
* <p>功能描述:生成节点路径。</p>
*/
public void generateNodeText(Node node, String text) {
if (node == null || "0".equals(node.getId())) {
return;
}
Node pNode = getParentNode(node);
if (!"0".equals(pNode.getId())) {
text = pNode.getText() + separator + text;
}
node.setText(text);
}
/**
* <p>功能描述:遍历所有树节点。</p>
*/
public void traverseNodeList(Node node) {
if(node==null){
node = getRoot(nodeList);
}
List<Node> childNodes = getChildNodes(node);
System.out.println(node.getText());
if (childNodes.size() > 0) {
for (Node n : childNodes) {
traverseNodeList(n);
}
}
}
public static void main(String[] args) {
SerialNumber number = new SerialNumber();
NumberTree treeNode = new NumberTree(".", number);
addSomeNodes(treeNode);
treeNode.traverseNodeList(null);
}
/**
* <p>功能描述:获取根节点。</p>
*/
public Node getRoot(List<Node> nodeList) {
Node root = null;
if (nodeList.size() <= 0 || (root = getNodeById(nodeList, "0")) == null) {
root = createRoot();
nodeList.add(root);
}
return root;
}
private Node getNodeById(List<Node> nodeList, String id) {
Node node = null;
if(id!=null){
for (Node n : nodeList) {
if (id.equals(n.getId())) {
node = n;
break;
}
}
}
return node;
}
private Node createRoot() {
Node root = new Node("0", number.rootNumber(), "-1", 0);
root.setText("0");
return root;
}
/**
* <p>功能描述:测试添加节点。</p>
*/
private static Node addSomeNodes(NumberTree tree) {
Node root = tree.getRoot(tree.nodeList);
Node node1 = getNextNode(tree, root);//1
Node node2 = getNextNode(tree, root);//2
Node node3 = getNextNode(tree, root);//3
Node node11 = getNextNode(tree, node1);//1.1
Node node12 = getNextNode(tree, node1);//1.2
Node node21 = getNextNode(tree, node2);//2.1
Node node211 = getNextNode(tree, node21);//2.1.1
Node node212 = getNextNode(tree, node21);//2.1.2
Node node22 = getNextNode(tree, node2);//2.2
Node node221 = getNextNode(tree, node22);//2.2.1
Node node31 = getNextNode(tree, node3);
Node node32 = getNextNode(tree, node3);
Node node311 = getNextNode(tree, node31);
Node node3111 = getNextNode(tree, node311);
return root;
}
public static Node getNextNode(NumberTree tree, Node pNode) {
Node node = tree.generateNextChildNode(pNode);
if (node != null) {
tree.nodeList.add(node);
}
return node;
}
}
package com.meishu.util.tree;
public class SerialNumber{
public String produceNext(String crrnt) {
String next = "0";
if (crrnt != null) {
try {
int crrntNum = Integer.parseInt(crrnt);
next = String.valueOf(crrntNum + 1);
} catch (Exception e) {
System.err.println("非数字类型的字符串!");
}
}
return next;
}
public String rootNumber() {
return "0";
}
public String firstNumber() {
return "1";
}
}
package com.meishu.vo.batch;
import com.meishu.model.BatchDictDO;
import com.meishu.vo.student.BatchStudentsVO;
import lombok.Data;
import java.util.List;
@Data
public class BatchesVO extends BatchDictDO {
private List<BatchStudentsVO> batchStudentsVOS;
}
package com.meishu.vo.exam;
import lombok.Data;
@Data
public class BatchExamStudentScoreVO {
private Long id;
private String userName;
private String score;
}
package com.meishu.vo.exam;
import com.meishu.vo.paper.ExercisesVO;
import lombok.Data;
import java.util.List;
@Data
public class ExamPaperVO {
private String examName;
private String startDate;
private String endDate;
private List<ExercisesVO> exercises;
}
package com.meishu.vo.exam;
import com.meishu.vo.student.StudentVO;
import lombok.Data;
import java.util.List;
@Data
public class ExamsVO {
private Long id;
private String examName;
private String startDate;
private String endDate;
private Long paperId;
private String paperName;
private List<StudentVO> studentVOS;
}
package com.meishu.vo.exercise;
import lombok.Data;
@Data
public class ExercisesWithAnswerVO {
/**
* 题目历史id
*/
private Long id;
private String title;
private String items;
private String exerciseType;
private String rightAnswer;
}
package com.meishu.vo.exercise;
import com.meishu.model.ExerciseDictDO;
import lombok.Data;
@Data
public class LabelExercisesVO extends ExerciseDictDO {
private String label;
private Long paperExerciseId;
}
package com.meishu.vo.exercise;
import lombok.Data;
@Data
public class ScoreDetailsVO {
private Long id;
private Long exerciseId;
private String title;
private String rightAnswer;
private String answer;
private String result;
private String exerciseType;
private Integer score;
}
package com.meishu.vo.exercise;
import lombok.Data;
@Data
public class UploadFileVO {
private String imageUrl;
}
package com.meishu.vo.paper;
import lombok.Data;
@Data
public class ExercisesVO {
private Long id;
private String title;
private String items;
private String exerciseType;
private Integer cnt;
}
package com.meishu.vo.paper;
import lombok.Data;
import java.util.Date;
@Data
public class PapersVO {
private Long id;
private Long batchId;
private String examName;
private String startDate;
private String endDate;
private String status;
private Long paperId;
private Boolean submitStatus;
}
package com.meishu.vo.student;
import lombok.Data;
@Data
public class BatchStudentsVO {
private Integer id;
private String userName;
private String examCode;
private String signDate;
}
package com.meishu.vo.student;
import com.meishu.model.StudentDO;
import lombok.Data;
@Data
public class LoginVO extends StudentDO {
private String examCode;
private Long batchId;
}
package com.meishu.vo.student;
import lombok.Data;
@Data
public class StudentExamsVO {
private Long id;
private String examName;
private String score;
}
package com.meishu.vo.student;
import lombok.Data;
@Data
public class StudentVO {
private Long id;
private Long studentId;
private String userName;
}
# 本地环境配置
# 端口号
server.port=23458
#server.tomcat.basedir=/static/img
## 数据源配置
#spring.datasource.url=jdbc:mysql://192.168.31.169:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.username=root
#spring.datasource.password=123456
## 数据源配置
spring.datasource.url=jdbc:mysql://116.62.57.92:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=devloper
spring.datasource.password=dev@1553$
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 本地环境配置
# 端口号
server.port=23458
server.tomcat.basedir=/static/img
## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
#spring.datasource.password=dev@1553$
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 生产环境配置
# 端口号
server.port=23458
# 数据源配置
spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=ykadmin_new
spring.datasource.password=youkedb608@good
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
wechat.appId= wx7785293ff5e31f14
wechat.appSecret= 25d57cad61fc1b45b3afa46d4c35e8f6
wechat.msgUrl= https://teachai.youkehulian.com/login
wechat.templateId= Z1HNPLOrKiHEjfR1KMP-cC-uH3BWqDJIHv365Ev20yQ
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
# 环境配置
spring.profiles.active=local
# 文件编码 UTF8
spring.mandatory-file-encoding=UTF-8
spring.jackson.time-zone=GMT+8
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=50MB
# 404 交给异常处理器处理
spring.mvc.throw-exception-if-no-handler-found=true
# 关闭静态资源的映射
spring.resources.add-mappings=false
# 关闭banner打印
mybatis-plus.global-config.banner=false
# mybatis-plus相关配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 是否开启自动驼峰命名规则映射
mybatis-plus.configuration.map-underscore-to-camel-case=true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
mybatis-plus.configuration.call-setters-on-nulls=true
# 逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=NOW()
mybatis-plus.global-config.db-config.logic-not-delete-value=NULL
#日志配置
logging.config=classpath:logback-spring.xml
# 阿里云短信
sms.product=Dysmsapi
sms.domain=dysmsapi.aliyuncs.com
sms.accessKeyId=LTAI5tPAH7P7WQVeowo517BE
sms.accessKeySecret=0ueqhIfdAZyw5lWlBVSLpAxTtx37RY
#wechat.app-id=wx7785293ff5e31f14
#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6
#wechat.agentId=1000008
vod.appId= 1302252447
vod.secretId= AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2
vod.secretKey= vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E
vod.api= vod.tencentcloudapi.com
vod.region= ap-shanghai
vod.classId= 860744
# quartz
# 数据持久化方式
spring.quartz.job-store-type=jdbc
# 初始化后是否自动启动计划程序
spring.quartz.auto-startup=true
# 初始化完成后启动计划程序的延迟时间
spring.quartz.startup-delay=10s
# 配置的作业是否应覆盖现有的作业定义
spring.quartz.overwrite-existing-jobs=false
# 自动建表,如果已经存在表请勿使用,会覆盖数据表
#spring.quartz.jdbc.initialize-schema=always
#spring.datasource.initialization-mode=embedded
meishu.code-message[0]=成功
meishu.code-message[1010]=无效的令牌
meishu.code-message[10001]=信息不存在
meishu.code-message[10002]=账户已存在
meishu.code-message[10003]=账户或密码错误
meishu.code-message[10004]=请在规定时间内登陆
meishu.code-message[20001]=该账户有考试,无法删除
meishu.code-message[30001]=有试卷出现该题目,无法删除
meishu.code-message[30002]=有题目已添加
meishu.code-message[40001]=有题目已添加
meishu.code-message[50001]=该批次下有考试,无法删除
meishu.code-message[60001]=你已提交过,不能重新提交!
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="logs/" />
<property name="APP_NAME" value="springboot-logback" />
<contextName>${APP_NAME}</contextName>
<jmxConfigurator />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-info.log</File>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-error.log</File>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>256MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<springProfile name="dev">
<logger name="com.meishu" level="error" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<springProfile name="prod">
<logger name="com.meishu" level="error" />
<root level="INFO">
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.AdministerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.AdministerDO">
<id column="id" property="id" />
<result column="user_name" property="userName" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
create_date,
id, telephone, user_name, img, role
</sql>
<select id="administers" parameterType="string" resultType="com.meishu.model.AdministerDO">
SELECT
*
FROM
administer t
WHERE
t.delete_date is null
<if test="userName != null and userName != ''">
and t.user_name LIKE concat('%',#{userName} ,'%')
OR t.account_name LIKE concat('%',#{userName} ,'%')
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.BatchDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="batch_name" property="batchName" />
<result column="start_date" property="startDate" />
<result column="end_date" property="endDate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, batch_name, start_date, end_date
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchExamMapper">
<select id="exams" parameterType="long" resultType="com.meishu.vo.exam.ExamsVO">
SELECT
t.id,
t.exam_name,
t.start_date,
t.end_date,
t.paper_id,
t2.paper_name
FROM
batch_exam t
LEFT JOIN paper_dict t2 ON t.paper_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchExamsStudentsMapper">
<select id="exams" parameterType="long" resultType="com.meishu.vo.paper.PapersVO">
SELECT
t2.id,
t2.batch_id,
t2.exam_name,
t2.start_date,
t2.end_date,
t2.paper_id
FROM
batch_student_mapping t
LEFT JOIN batch_exam t2 ON t.batch_id = t2.batch_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.student_id = #{studentId}
</select>
<select id="studentScore" parameterType="long" resultType="com.meishu.vo.student.StudentExamsVO">
SELECT
t2.id,
t2.paper_name,
t.score
FROM
batch_exam_students t
left join batch_exam t3 on t.batch_exam_id = t3.id
LEFT JOIN paper_dict t2 ON t3.paper_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
and t3.delete_date is null
AND t.student_id = #{studentId}
ORDER BY
t3.end_date DESC
</select>
<select id="batchExamStudents" parameterType="long" resultType="com.meishu.vo.student.StudentVO">
SELECT
t.id,
t2.id AS studentId,
t2.user_name
FROM
batch_exam_students t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
<select id="batchExamStudentIds" parameterType="long" resultType="long">
SELECT
t.id
FROM
batch_exam_students t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
<select id="batchExamStudentScore" parameterType="long" resultType="com.meishu.vo.exam.BatchExamStudentScoreVO">
SELECT
t3.id,
t3.user_name,
t.score
FROM
batch_exam_students t
LEFT JOIN student t3 ON t.student_id = t3.id
WHERE
t.delete_date IS NULL
AND t3.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchStudentMappingMapper">
<select id="batchStudents" parameterType="long" resultType="com.meishu.vo.student.BatchStudentsVO">
SELECT
t2.id,
t2.user_name,
t.exam_code,
t.sign_date
FROM
batch_student_mapping t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
<select id="batchStudentIds" parameterType="long" resultType="long">
SELECT
t2.id
FROM
batch_student_mapping t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.ExerciseDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.ExerciseDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="exercise_type" property="exerciseType" />
<result column="title" property="title" />
<result column="items" property="items" />
<result column="right_answer" property="rightAnswer" />
<result column="detail" property="detail" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, exercise_type, title, items, right_answer, detail
</sql>
<select id="labelExercises" parameterType="long" resultType="com.meishu.vo.exercise.LabelExercisesVO">
SELECT
t.*,
t2.label
FROM
exercise_dict t
LEFT JOIN label_dict t2 ON t.label_id = t2.id
WHERE
t.delete_date IS NULL
<if test="labelId != null and labelId != ''">
AND t.label_id = #{labelId}
</if>
order by t.id
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.ExerciseDoneHistoryMapper">
<select id="scoreDetails" resultType="com.meishu.vo.exercise.ScoreDetailsVO">
SELECT
t.id,
t2.id as exerciseId,
t2.title,
t2.right_answer,
t.answer,
t.result,
t2.exercise_type,
t.score
FROM
exercise_done_history t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
AND t.student_id = #{studentId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.LabelDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.LabelDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="label" property="label" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, label
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.PaperDictMapper">
<select id="exercises" parameterType="long" resultType="com.meishu.vo.paper.ExercisesVO">
SELECT
t2.id,
t2.title,
t2.items,
t2.exercise_type
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
</select>
<select id="exercisesWithAnswer" parameterType="long" resultType="com.meishu.vo.exercise.ExercisesWithAnswerVO">
SELECT
t2.id,
t2.title,
t2.items,
t2.exercise_type,
t2.right_answer
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
<if test="exerciseType != null and exerciseType != ''">
and t2.exercise_type = #{exerciseType}
</if>
</select>
<select id="exerciseTypes" parameterType="long" resultType="string">
SELECT
distinct t2.exercise_type
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
</select>
<select id="examExercises" resultType="com.meishu.vo.exercise.ExercisesWithAnswerVO">
SELECT
t.id,
t2.title,
t2.items,
t2.exercise_type,
t2.right_answer
FROM
exercise_done_history t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.student_id = #{studentId}
AND t.batch_exam_id = #{examId}
AND t.paper_id = #{paperId}
order by t.order_no
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.PaperExercisesMapper">
<select id="getPaperExercises" parameterType="long" resultType="com.meishu.vo.exercise.LabelExercisesVO">
SELECT
t2.*,
t3.label,
t.id as paperExerciseId
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
LEFT JOIN label_dict t3 ON t2.label_id = t3.id
where t.delete_date is null
and t2.delete_date is null
and t3.delete_date is null
and t.paper_id = #{paperId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.StudentMapper">
<select id="students" parameterType="string" resultType="com.meishu.model.StudentDO">
SELECT
t.id,
t.user_name,
t.id_card,
t.company_name
FROM
student t
WHERE
t.delete_date IS NULL
<if test="userName != null and userName != ''">
and t.user_name like concat('%',#{userName} ,'%')
</if>
</select>
</mapper>
# 此处为本项目src所在路径(代码生成器输出路径)
outputDir=/src/main/java
author=Tuyp
# 父的包名
setParent=com.meishu
# mapper.xml文件生成路径
mapperPath=/src/main/resources/mapper/
# 数据库地址
url=jdbc:mysql://116.62.57.92:3306/kpk?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
driverName=com.mysql.cj.jdbc.Driver
userName=devloper
password=dev@1553$
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="SLF4J"/>
<!-- 开启驼峰命名转换 Table(create_date) -> Entity(createTime) -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
package ${package.Controller};
import org.springframework.web.bind.annotation.RequestMapping;
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>
import io.swagger.annotations.Api;
/**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
@RestController
@Api(tags = "${table.comment!}")
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>
}
</#if>
package ${package.Entity};
<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if swagger2>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Data;
import lombok.EqualsAndHashCode;
<#if chainModel>
import lombok.experimental.Accessors;
</#if>
</#if>
/**
* <p>
* ${table.comment!}
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
@Data
<#if superEntityClass??>
@EqualsAndHashCode(callSuper = true)
<#else>
@EqualsAndHashCode(callSuper = false)
</#if>
<#if chainModel>
@Accessors(chain = true)
</#if>
</#if>
<#if table.convert>
@TableName("${table.name}")
</#if>
<#if swagger2>
@ApiModel(value="${entity}对象", description="${table.comment!}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#else>
public class ${entity} implements Serializable {
</#if>
<#if entitySerialVersionUID>
private static final long serialVersionUID = 1L;
</#if>
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
<#if field.keyFlag>
<#assign keyPropertyName="${field.propertyName}"/>
</#if>
<#if field.comment!?length gt 0>
<#if swagger2>
@ApiModelProperty(value = "${field.comment}")
<#else>
/**
* ${field.comment}
*/
</#if>
</#if>
<#if field.keyFlag>
<#-- 主键 -->
<#if field.keyIdentityFlag>
@TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
<#elseif idType??>
@TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
<#elseif field.convert>
@TableId("${field.annotationColumnName}")
</#if>
<#-- 普通字段 -->
<#elseif field.fill??>
<#-- ----- 存在字段填充设置 ----->
<#if field.convert>
@TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
<#else>
@TableField(fill = FieldFill.${field.fill})
</#if>
<#elseif field.convert>
@TableField("${field.annotationColumnName}")
</#if>
<#-- 乐观锁注解 -->
<#if (versionFieldName!"") == field.name>
@Version
</#if>
<#-- 逻辑删除注解 -->
<#if (logicDeleteFieldName!"") == field.name>
@TableLogic
</#if>
private ${field.propertyType} ${field.propertyName};
</#list>
<#------------ END 字段循环遍历 ---------->
<#if !entityLombokModel>
<#list table.fields as field>
<#if field.propertyType == "boolean">
<#assign getprefix="is"/>
<#else>
<#assign getprefix="get"/>
</#if>
public ${field.propertyType} ${getprefix}${field.capitalName}() {
return ${field.propertyName};
}
<#if chainModel>
public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
<#else>
public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
</#if>
this.${field.propertyName} = ${field.propertyName};
<#if chainModel>
return this;
</#if>
}
</#list>
</#if>
<#if entityColumnConstant>
<#list table.fields as field>
public static final String ${field.name?upper_case} = "${field.name}";
</#list>
</#if>
<#if activeRecord>
@Override
protected Serializable pkVal() {
<#if keyPropertyName??>
return this.${keyPropertyName};
<#else>
return null;
</#if>
}
</#if>
<#if !entityLombokModel>
@Override
public String toString() {
return "${entity}{" +
<#list table.fields as field>
<#if field_index==0>
"${field.propertyName}=" + ${field.propertyName} +
<#else>
", ${field.propertyName}=" + ${field.propertyName} +
</#if>
</#list>
"}";
}
</#if>
}
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
import org.springframework.stereotype.Repository;
/**
* <p>
* ${table.comment!} Mapper 接口
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
@Repository
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
</#if>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
<#if enableCache>
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
</#if>
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag><#--生成主键排在第一位-->
<id column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
<#list table.commonFields as field><#--生成公共字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
</resultMap>
</#if>
<#if baseColumnList>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
<#list table.commonFields as field>
${field.columnName},
</#list>
${table.fieldNames}
</sql>
</#if>
</mapper>
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* <p>
* ${table.comment!} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}
</#if>
package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* ${table.comment!} 服务实现类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
<#if kotlin>
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
}
<#else>
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {
}
</#if>
{
"groups": [
{
"name": "meishu",
"type": "com.meishu.common.configure.RemoteProperties",
"sourceType": "com.meishu.common.configure.RemoteProperties"
},
{
"name": "sms",
"type": "com.meishu.common.configure.AliyunSmsProperties",
"sourceType": "com.meishu.common.configure.AliyunSmsProperties"
},
{
"name": "vod",
"type": "com.meishu.common.configure.VODConfig",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "wechat",
"type": "com.meishu.common.configure.WechatConfig",
"sourceType": "com.meishu.common.configure.WechatConfig"
}
],
"properties": [
{
"name": "meishu.code-message",
"type": "java.util.Map<java.lang.Integer,java.lang.String>",
"sourceType": "com.meishu.common.configure.RemoteProperties"
},
{
"name": "sms.access-key-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.AliyunSmsProperties"
},
{
"name": "sms.access-key-secret",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.AliyunSmsProperties"
},
{
"name": "sms.domain",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.AliyunSmsProperties"
},
{
"name": "sms.product",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.AliyunSmsProperties"
},
{
"name": "vod.api",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "vod.app-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "vod.class-id",
"type": "java.lang.Integer",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "vod.region",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "vod.secret-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "vod.secret-key",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.VODConfig"
},
{
"name": "wechat.agent-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.WechatConfig"
},
{
"name": "wechat.app-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.WechatConfig"
},
{
"name": "wechat.app-secret",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.WechatConfig"
},
{
"name": "wechat.msg-url",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.WechatConfig"
},
{
"name": "wechat.template-id",
"type": "java.lang.String",
"sourceType": "com.meishu.common.configure.WechatConfig"
}
],
"hints": []
}
\ No newline at end of file
# 本地环境配置
# 端口号
server.port=23458
#server.tomcat.basedir=/static/img
## 数据源配置
#spring.datasource.url=jdbc:mysql://192.168.31.169:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.username=root
#spring.datasource.password=123456
## 数据源配置
spring.datasource.url=jdbc:mysql://116.62.57.92:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
#spring.datasource.url=jdbc:mysql://rm-uf6rab73w0qg843opxo.mysql.rds.aliyuncs.com:3306/subsidy_test?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=devloper
spring.datasource.password=dev@1553$
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 本地环境配置
# 端口号
server.port=23458
server.tomcat.basedir=/static/img
## 数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
#spring.datasource.password=dev@1553$
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
# 生产环境配置
# 端口号
server.port=23458
# 数据源配置
spring.datasource.url=jdbc:mysql://rm-uf69w46mo6agw0ahao.mysql.rds.aliyuncs.com:3306/kpk?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=ykadmin_new
spring.datasource.password=youkedb608@good
spring.datasource.druid.initialSize=5
spring.datasource.druid.minIdle=5
spring.datasource.druid.maxActive=20
spring.datasource.druid.maxWait=60000
spring.datasource.druid.timeBetweenEvictionRunsMillis=60000
spring.datasource.druid.minEvictableIdleTimeMillis=300000
spring.datasource.druid.validationQuery=SELECT 1 FROM DUAL
spring.datasource.druid.testWhileIdle=true
spring.datasource.druid.testOnBorrow=false
spring.datasource.druid.testOnReturn=false
spring.datasource.druid.poolPreparedStatements=true
spring.datasource.druid.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.druid.useGlobalDataSourceStat=true
wechat.appId= wx7785293ff5e31f14
wechat.appSecret= 25d57cad61fc1b45b3afa46d4c35e8f6
wechat.msgUrl= https://teachai.youkehulian.com/login
wechat.templateId= Z1HNPLOrKiHEjfR1KMP-cC-uH3BWqDJIHv365Ev20yQ
# 控制台日志打印
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
# 环境配置
spring.profiles.active=local
# 文件编码 UTF8
spring.mandatory-file-encoding=UTF-8
spring.jackson.time-zone=GMT+8
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=50MB
# 404 交给异常处理器处理
spring.mvc.throw-exception-if-no-handler-found=true
# 关闭静态资源的映射
spring.resources.add-mappings=false
# 关闭banner打印
mybatis-plus.global-config.banner=false
# mybatis-plus相关配置
mybatis-plus.mapper-locations=classpath:mapper/*.xml
# 是否开启自动驼峰命名规则映射
mybatis-plus.configuration.map-underscore-to-camel-case=true
# 如果查询结果中包含空值的列,则 MyBatis 在映射的时候,不会映射这个字段
mybatis-plus.configuration.call-setters-on-nulls=true
# 逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=NOW()
mybatis-plus.global-config.db-config.logic-not-delete-value=NULL
#日志配置
logging.config=classpath:logback-spring.xml
# 阿里云短信
sms.product=Dysmsapi
sms.domain=dysmsapi.aliyuncs.com
sms.accessKeyId=LTAI5tPAH7P7WQVeowo517BE
sms.accessKeySecret=0ueqhIfdAZyw5lWlBVSLpAxTtx37RY
#wechat.app-id=wx7785293ff5e31f14
#wechat.app-secret=25d57cad61fc1b45b3afa46d4c35e8f6
#wechat.agentId=1000008
vod.appId= 1302252447
vod.secretId= AKIDOcePHvZ2C5VeYHQGSO5aqtlNxJQLqfz2
vod.secretKey= vjHYRmrfDbw0rWxA7oFcj7F8lDPKCm8E
vod.api= vod.tencentcloudapi.com
vod.region= ap-shanghai
vod.classId= 860744
# quartz
# 数据持久化方式
spring.quartz.job-store-type=jdbc
# 初始化后是否自动启动计划程序
spring.quartz.auto-startup=true
# 初始化完成后启动计划程序的延迟时间
spring.quartz.startup-delay=10s
# 配置的作业是否应覆盖现有的作业定义
spring.quartz.overwrite-existing-jobs=false
# 自动建表,如果已经存在表请勿使用,会覆盖数据表
#spring.quartz.jdbc.initialize-schema=always
#spring.datasource.initialization-mode=embedded
meishu.code-message[0]=成功
meishu.code-message[1010]=无效的令牌
meishu.code-message[10001]=信息不存在
meishu.code-message[10002]=账户已存在
meishu.code-message[10003]=账户或密码错误
meishu.code-message[10004]=请在规定时间内登陆
meishu.code-message[20001]=该账户有考试,无法删除
meishu.code-message[30001]=有试卷出现该题目,无法删除
meishu.code-message[30002]=有题目已添加
meishu.code-message[40001]=有题目已添加
meishu.code-message[50001]=该批次下有考试,无法删除
meishu.code-message[60001]=你已提交过,不能重新提交!
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<property name="LOG_PATH" value="logs/" />
<property name="APP_NAME" value="springboot-logback" />
<contextName>${APP_NAME}</contextName>
<jmxConfigurator />
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>debug</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-info.log</File>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/info/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${LOG_PATH}${APP_NAME}-error.log</File>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<pattern>%d [%t] %5p %c:%L - %m%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>256MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<FileNamePattern>${LOG_PATH}${APP_NAME}/error/%d{yyyy-MM-dd}-%i.log.gz
</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
</appender>
<springProfile name="dev">
<logger name="com.meishu" level="error" />
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<springProfile name="prod">
<logger name="com.meishu" level="error" />
<root level="INFO">
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.AdministerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.AdministerDO">
<id column="id" property="id" />
<result column="user_name" property="userName" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
create_date,
id, telephone, user_name, img, role
</sql>
<select id="administers" parameterType="string" resultType="com.meishu.model.AdministerDO">
SELECT
*
FROM
administer t
WHERE
t.delete_date is null
<if test="userName != null and userName != ''">
and t.user_name LIKE concat('%',#{userName} ,'%')
OR t.account_name LIKE concat('%',#{userName} ,'%')
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.BatchDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="batch_name" property="batchName" />
<result column="start_date" property="startDate" />
<result column="end_date" property="endDate" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, batch_name, start_date, end_date
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchExamMapper">
<select id="exams" parameterType="long" resultType="com.meishu.vo.exam.ExamsVO">
SELECT
t.id,
t.exam_name,
t.start_date,
t.end_date,
t.paper_id,
t2.paper_name
FROM
batch_exam t
LEFT JOIN paper_dict t2 ON t.paper_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchExamsStudentsMapper">
<select id="exams" parameterType="long" resultType="com.meishu.vo.paper.PapersVO">
SELECT
t2.id,
t2.batch_id,
t2.exam_name,
t2.start_date,
t2.end_date,
t2.paper_id
FROM
batch_student_mapping t
LEFT JOIN batch_exam t2 ON t.batch_id = t2.batch_id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.student_id = #{studentId}
</select>
<select id="studentScore" parameterType="long" resultType="com.meishu.vo.student.StudentExamsVO">
SELECT
t2.id,
t2.paper_name,
t.score
FROM
batch_exam_students t
left join batch_exam t3 on t.batch_exam_id = t3.id
LEFT JOIN paper_dict t2 ON t3.paper_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
and t3.delete_date is null
AND t.student_id = #{studentId}
ORDER BY
t3.end_date DESC
</select>
<select id="batchExamStudents" parameterType="long" resultType="com.meishu.vo.student.StudentVO">
SELECT
t.id,
t2.id AS studentId,
t2.user_name
FROM
batch_exam_students t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
<select id="batchExamStudentIds" parameterType="long" resultType="long">
SELECT
t.id
FROM
batch_exam_students t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
<select id="batchExamStudentScore" parameterType="long" resultType="com.meishu.vo.exam.BatchExamStudentScoreVO">
SELECT
t3.id,
t3.user_name,
t.score
FROM
batch_exam_students t
LEFT JOIN student t3 ON t.student_id = t3.id
WHERE
t.delete_date IS NULL
AND t3.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.BatchStudentMappingMapper">
<select id="batchStudents" parameterType="long" resultType="com.meishu.vo.student.BatchStudentsVO">
SELECT
t2.id,
t2.user_name,
t.exam_code,
t.sign_date
FROM
batch_student_mapping t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
<select id="batchStudentIds" parameterType="long" resultType="long">
SELECT
t2.id
FROM
batch_student_mapping t
LEFT JOIN student t2 ON t.student_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_id = #{batchId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.ExerciseDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.ExerciseDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="exercise_type" property="exerciseType" />
<result column="title" property="title" />
<result column="items" property="items" />
<result column="right_answer" property="rightAnswer" />
<result column="detail" property="detail" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, exercise_type, title, items, right_answer, detail
</sql>
<select id="labelExercises" parameterType="long" resultType="com.meishu.vo.exercise.LabelExercisesVO">
SELECT
t.*,
t2.label
FROM
exercise_dict t
LEFT JOIN label_dict t2 ON t.label_id = t2.id
WHERE
t.delete_date IS NULL
<if test="labelId != null and labelId != ''">
AND t.label_id = #{labelId}
</if>
order by t.id
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.ExerciseDoneHistoryMapper">
<select id="scoreDetails" resultType="com.meishu.vo.exercise.ScoreDetailsVO">
SELECT
t.id,
t2.id as exerciseId,
t2.title,
t2.right_answer,
t.answer,
t.result,
t2.exercise_type,
t.score
FROM
exercise_done_history t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.batch_exam_id = #{batchExamId}
AND t.student_id = #{studentId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.LabelDictMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.meishu.model.LabelDictDO">
<id column="id" property="id" />
<result column="create_date" property="createDate" />
<result column="update_date" property="updateDate" />
<result column="delete_date" property="deleteDate" />
<result column="label" property="label" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
create_date,
update_date,
delete_date,
id, label
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.PaperDictMapper">
<select id="exercises" parameterType="long" resultType="com.meishu.vo.paper.ExercisesVO">
SELECT
t2.id,
t2.title,
t2.items,
t2.exercise_type
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
</select>
<select id="exercisesWithAnswer" parameterType="long" resultType="com.meishu.vo.exercise.ExercisesWithAnswerVO">
SELECT
t2.id,
t2.title,
t2.items,
t2.exercise_type,
t2.right_answer
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
<if test="exerciseType != null and exerciseType != ''">
and t2.exercise_type = #{exerciseType}
</if>
</select>
<select id="exerciseTypes" parameterType="long" resultType="string">
SELECT
distinct t2.exercise_type
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.paper_id = #{paperId}
</select>
<select id="examExercises" resultType="com.meishu.vo.exercise.ExercisesWithAnswerVO">
SELECT
t.id,
t2.title,
t2.items,
t2.exercise_type,
t2.right_answer
FROM
exercise_done_history t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
WHERE
t.delete_date IS NULL
AND t2.delete_date IS NULL
AND t.student_id = #{studentId}
AND t.batch_exam_id = #{examId}
AND t.paper_id = #{paperId}
order by t.order_no
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.PaperExercisesMapper">
<select id="getPaperExercises" parameterType="long" resultType="com.meishu.vo.exercise.LabelExercisesVO">
SELECT
t2.*,
t3.label,
t.id as paperExerciseId
FROM
paper_exercises t
LEFT JOIN exercise_dict t2 ON t.exercise_id = t2.id
LEFT JOIN label_dict t3 ON t2.label_id = t3.id
where t.delete_date is null
and t2.delete_date is null
and t3.delete_date is null
and t.paper_id = #{paperId}
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.meishu.mapper.StudentMapper">
<select id="students" parameterType="string" resultType="com.meishu.model.StudentDO">
SELECT
t.id,
t.user_name,
t.id_card,
t.company_name
FROM
student t
WHERE
t.delete_date IS NULL
<if test="userName != null and userName != ''">
and t.user_name like concat('%',#{userName} ,'%')
</if>
</select>
</mapper>
# 此处为本项目src所在路径(代码生成器输出路径)
outputDir=/src/main/java
author=Tuyp
# 父的包名
setParent=com.meishu
# mapper.xml文件生成路径
mapperPath=/src/main/resources/mapper/
# 数据库地址
url=jdbc:mysql://116.62.57.92:3306/kpk?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowMultiQueries=true&useAffectedRows=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
driverName=com.mysql.cj.jdbc.Driver
userName=devloper
password=dev@1553$
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="SLF4J"/>
<!-- 开启驼峰命名转换 Table(create_date) -> Entity(createTime) -->
<setting name="mapUnderscoreToCamelCase" value="true" />
</settings>
</configuration>
package ${package.Controller};
import org.springframework.web.bind.annotation.RequestMapping;
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>
import io.swagger.annotations.Api;
/**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
@RestController
@Api(tags = "${table.comment!}")
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName?? && package.ModuleName != "">/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>
}
</#if>
package ${package.Entity};
<#list table.importPackages as pkg>
import ${pkg};
</#list>
<#if swagger2>
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
</#if>
<#if entityLombokModel>
import lombok.Data;
import lombok.EqualsAndHashCode;
<#if chainModel>
import lombok.experimental.Accessors;
</#if>
</#if>
/**
* <p>
* ${table.comment!}
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if entityLombokModel>
@Data
<#if superEntityClass??>
@EqualsAndHashCode(callSuper = true)
<#else>
@EqualsAndHashCode(callSuper = false)
</#if>
<#if chainModel>
@Accessors(chain = true)
</#if>
</#if>
<#if table.convert>
@TableName("${table.name}")
</#if>
<#if swagger2>
@ApiModel(value="${entity}对象", description="${table.comment!}")
</#if>
<#if superEntityClass??>
public class ${entity} extends ${superEntityClass}<#if activeRecord><${entity}></#if> {
<#elseif activeRecord>
public class ${entity} extends Model<${entity}> {
<#else>
public class ${entity} implements Serializable {
</#if>
<#if entitySerialVersionUID>
private static final long serialVersionUID = 1L;
</#if>
<#-- ---------- BEGIN 字段循环遍历 ---------->
<#list table.fields as field>
<#if field.keyFlag>
<#assign keyPropertyName="${field.propertyName}"/>
</#if>
<#if field.comment!?length gt 0>
<#if swagger2>
@ApiModelProperty(value = "${field.comment}")
<#else>
/**
* ${field.comment}
*/
</#if>
</#if>
<#if field.keyFlag>
<#-- 主键 -->
<#if field.keyIdentityFlag>
@TableId(value = "${field.annotationColumnName}", type = IdType.AUTO)
<#elseif idType??>
@TableId(value = "${field.annotationColumnName}", type = IdType.${idType})
<#elseif field.convert>
@TableId("${field.annotationColumnName}")
</#if>
<#-- 普通字段 -->
<#elseif field.fill??>
<#-- ----- 存在字段填充设置 ----->
<#if field.convert>
@TableField(value = "${field.annotationColumnName}", fill = FieldFill.${field.fill})
<#else>
@TableField(fill = FieldFill.${field.fill})
</#if>
<#elseif field.convert>
@TableField("${field.annotationColumnName}")
</#if>
<#-- 乐观锁注解 -->
<#if (versionFieldName!"") == field.name>
@Version
</#if>
<#-- 逻辑删除注解 -->
<#if (logicDeleteFieldName!"") == field.name>
@TableLogic
</#if>
private ${field.propertyType} ${field.propertyName};
</#list>
<#------------ END 字段循环遍历 ---------->
<#if !entityLombokModel>
<#list table.fields as field>
<#if field.propertyType == "boolean">
<#assign getprefix="is"/>
<#else>
<#assign getprefix="get"/>
</#if>
public ${field.propertyType} ${getprefix}${field.capitalName}() {
return ${field.propertyName};
}
<#if chainModel>
public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
<#else>
public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
</#if>
this.${field.propertyName} = ${field.propertyName};
<#if chainModel>
return this;
</#if>
}
</#list>
</#if>
<#if entityColumnConstant>
<#list table.fields as field>
public static final String ${field.name?upper_case} = "${field.name}";
</#list>
</#if>
<#if activeRecord>
@Override
protected Serializable pkVal() {
<#if keyPropertyName??>
return this.${keyPropertyName};
<#else>
return null;
</#if>
}
</#if>
<#if !entityLombokModel>
@Override
public String toString() {
return "${entity}{" +
<#list table.fields as field>
<#if field_index==0>
"${field.propertyName}=" + ${field.propertyName} +
<#else>
", ${field.propertyName}=" + ${field.propertyName} +
</#if>
</#list>
"}";
}
</#if>
}
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
import org.springframework.stereotype.Repository;
/**
* <p>
* ${table.comment!} Mapper 接口
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.mapperName} : ${superMapperClass}<${entity}>
<#else>
@Repository
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
</#if>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
<#if enableCache>
<!-- 开启二级缓存 -->
<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
</#if>
<#if baseResultMap>
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
<#list table.fields as field>
<#if field.keyFlag><#--生成主键排在第一位-->
<id column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
<#list table.commonFields as field><#--生成公共字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#list>
<#list table.fields as field>
<#if !field.keyFlag><#--生成普通字段 -->
<result column="${field.name}" property="${field.propertyName}" />
</#if>
</#list>
</resultMap>
</#if>
<#if baseColumnList>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
<#list table.commonFields as field>
${field.columnName},
</#list>
${table.fieldNames}
</sql>
</#if>
</mapper>
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* <p>
* ${table.comment!} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}
</#if>
package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* ${table.comment!} 服务实现类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
<#if kotlin>
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
}
<#else>
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}> implements ${table.serviceName} {
}
</#if>
This file is too large to display.
No preview for this file type
artifactId=teachaicms
groupId=com.meishu
version=0.0.1
com\meishu\util\LatexUtils.class
com\meishu\common\interceptor\AuthenticationInterceptor.class
com\meishu\util\CodeGenerator.class
com\meishu\service\ExerciseDictService.class
com\meishu\dto\userrole\AccountLoginDTO.class
META-INF\spring-configuration-metadata.json
com\meishu\util\excel\ExcelUtil.class
com\meishu\MeishuApplication.class
com\meishu\controller\ExerciseDictController.class
com\meishu\util\tree\NumberTree.class
com\meishu\common\configure\WebConfig.class
com\meishu\util\CodeGenerator$2.class
com\meishu\util\tree\Node.class
com\meishu\util\excel\ExcelColumnUtil.class
com\meishu\common\ResponseVO.class
com\meishu\util\ConstantUtils.class
com\meishu\common\configure\RestTemplateConfig$WxMappingJackson2HttpMessageConverter.class
com\meishu\common\configure\RestTemplateConfig.class
com\meishu\util\DateFormatUtil.class
com\meishu\common\handler\MetaHandler.class
com\meishu\dto\userrole\QueryStudentsDTO.class
com\meishu\common\configure\WebLogAspect.class
com\meishu\controller\AdministerController.class
com\meishu\util\Localstorage.class
com\meishu\util\MathUtil.class
com\meishu\util\BaseModel.class
com\meishu\service\impl\AdministerServiceImpl.class
com\meishu\common\configure\SwaggerConfig.class
com\meishu\mapper\ExerciseDoneHistoryMapper.class
com\meishu\util\RandomUtil.class
com\meishu\model\ExerciseDoneHistoryDO.class
com\meishu\model\PaperDictDO.class
com\meishu\common\ResponseData.class
com\meishu\service\impl\ExerciseDoneHistoryServiceImpl.class
com\meishu\service\impl\ExerciseDictServiceImpl.class
com\meishu\mapper\PaperDictMapper.class
com\meishu\common\configure\RemoteProperties.class
com\meishu\mapper\ExerciseDictMapper.class
com\meishu\common\constant\Code.class
com\meishu\common\constant\WxConstant.class
com\meishu\model\AdministerDO.class
com\meishu\common\configure\MybatisPlusConfig.class
com\meishu\util\JwtUtil.class
com\meishu\common\interceptor\LoginRequired.class
com\meishu\util\SecretUtils.class
com\meishu\mapper\AdministerMapper.class
com\meishu\common\exception\HttpException.class
com\meishu\service\AdministerService.class
com\meishu\service\impl\PaperDictServiceImpl.class
com\meishu\common\ResponseVO$ResponseVOBuilder.class
com\meishu\service\PaperDictService.class
com\meishu\common\configure\VODConfig.class
com\meishu\common\exception\GlobalExceptionHandler.class
com\meishu\model\ExerciseDictDO.class
com\meishu\common\configure\AliyunSmsProperties.class
com\meishu\util\CodeGenerator$1.class
com\meishu\util\excel\ExcelColumn.class
com\meishu\service\ExerciseDoneHistoryService.class
com\meishu\util\tree\SerialNumber.class
com\meishu\common\configure\WechatConfig.class
D:\code\kaopingxitong\src\main\java\com\meishu\common\exception\GlobalExceptionHandler.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\student\LoginDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\RandomUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exercise\ScoreDetailsVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\PaperExercisesDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\student\StudentExamsVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\BatchExamStudentController.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\userrole\AccountLoginDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\BatchExamMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\JwtUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\PaperExercisesController.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\BatchDictMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exercise\LabelExercisesVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\LabelDictServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\WebConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\PaperExercisesService.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\BatchStudentMappingService.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\MathUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\interceptor\LoginRequired.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\PDFUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\handler\MetaHandler.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\excel\ExcelColumnUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\CodeGenerator.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\ExerciseDictService.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\exam\ExamPaperDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\ResponseVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\ExerciseDictController.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\AdministerService.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\constant\WxConstant.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\paper\AddPaperExerciseDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\ExerciseDoneHistoryController.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\PaperDictMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\BatchDictServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\StudentMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\BatchExamStudentsService.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\BatchExamsStudentsMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\FileUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\DateFormatUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\MybatisPlusConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\userrole\QueryStudentsDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\BatchStudentMappingServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\BatchExamStudentsServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\ResponseData.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\LabelDictController.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\ExerciseDictServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exam\ExamPaperVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\RemoteProperties.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\tree\Node.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\StudentController.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\ExerciseDoneHistoryService.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\BatchExamController.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\ExerciseDoneHistoryServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\Localstorage.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\LatexUtils.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\BatchExamService.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exam\ExamsVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\StudentServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\BaseModel.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\VODConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\BatchStudentMappingDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\constant\Code.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\student\StudentVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\excel\ExcelUtil.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\paper\PaperStudentExerciseDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\ExerciseDictMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\PaperDictServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\paper\SubmitDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\student\LoginVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\LabelDictDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\WebLogAspect.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\batch\AddBatchDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\tree\NumberTree.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\ExerciseDoneHistoryMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\AdministerServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\exception\HttpException.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\PaperExercisesServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\LabelDictService.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\batch\BatchesVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exam\BatchExamStudentScoreVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\SecretUtils.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\excel\ExcelColumn.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\ConstantUtils.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\SwaggerConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\BatchDictDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\BatchDictController.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\impl\BatchExamServiceImpl.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\ExerciseDictDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\PaperDictDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\BatchDictService.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\interceptor\AuthenticationInterceptor.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\PaperDictController.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\LabelDictMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exercise\UploadFileVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\paper\ExercisesVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\dto\exercise\LabelExercisesDTO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\ExerciseDoneHistoryDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\BatchExamDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\AdministerController.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\AdministerMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\BatchExamStudentsDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\controller\BatchStudentMappingController.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\exercise\ExercisesWithAnswerVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\RestTemplateConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\AliyunSmsProperties.java
D:\code\kaopingxitong\src\main\java\com\meishu\common\configure\WechatConfig.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\BatchStudentMappingMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\paper\PapersVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\util\tree\SerialNumber.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\StudentService.java
D:\code\kaopingxitong\src\main\java\com\meishu\mapper\PaperExercisesMapper.java
D:\code\kaopingxitong\src\main\java\com\meishu\vo\student\BatchStudentsVO.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\StudentDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\MeishuApplication.java
D:\code\kaopingxitong\src\main\java\com\meishu\model\AdministerDO.java
D:\code\kaopingxitong\src\main\java\com\meishu\service\PaperDictService.java
This file is too large to display.
No preview for this file type
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="Spring" name="Spring">
<configuration />
</facet>
<facet type="web" name="Web">
<configuration>
<webroots />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.4.5" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.31" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.45" level="project" />
<orderEntry type="library" name="Maven: org.glassfish:jakarta.el:3.0.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.45" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:2.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.6" level="project" />
<orderEntry type="library" name="Maven: com.tencentcloudapi:tencentcloud-sdk-java:3.1.64" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.12.0" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp:okhttp:2.5.0" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.6" level="project" />
<orderEntry type="library" name="Maven: javax.xml.bind:jaxb-api:2.3.1" level="project" />
<orderEntry type="library" name="Maven: javax.activation:javax.activation-api:1.2.0" level="project" />
<orderEntry type="library" name="Maven: com.qcloud:vod_api:2.1.2" level="project" />
<orderEntry type="library" name="Maven: com.qcloud:cos_api:5.6.8" level="project" />
<orderEntry type="library" name="Maven: joda-time:joda-time:2.9.9" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.59" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-log4j12:1.7.30" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.17" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-configuration-processor:2.4.5" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.23" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.22" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.22" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.4.5" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.6" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.20" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.3.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.3.0" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-generator:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.3.2" level="project" />
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:3.1" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.4" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.4" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.58" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-annotations:1.5.20" level="project" />
<orderEntry type="library" name="Maven: io.swagger:swagger-models:1.5.20" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.4" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.22" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-ui:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.amdelamar:jhash:2.0.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.4.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.13" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.14" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.3" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.9" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itext-asian:5.2.0" level="project" />
<orderEntry type="library" name="Maven: com.itextpdf:itextpdf:5.4.1" level="project" />
<orderEntry type="library" name="Maven: com.auth0:java-jwt:3.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.4" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.4" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.15" level="project" />
<orderEntry type="library" name="Maven: net.sf.json-lib:json-lib:jdk15:2.4" level="project" />
<orderEntry type="library" name="Maven: commons-beanutils:commons-beanutils:1.8.0" level="project" />
<orderEntry type="library" name="Maven: commons-collections:commons-collections:3.2.1" level="project" />
<orderEntry type="library" name="Maven: commons-lang:commons-lang:2.5" level="project" />
<orderEntry type="library" name="Maven: net.sf.ezmorph:ezmorph:1.0.6" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-greek:1.0.7" level="project" />
<orderEntry type="library" name="Maven: org.scilab.forge:jlatexmath-font-cyrillic:1.0.7" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.15.0" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.1.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.11.0" level="project" />
</component>
</module>
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!