线上考试学员试卷自动答题,生成合格的考试成绩

main
zhangyanli 2026-04-20 17:56:12 +08:00
parent a4d31a807d
commit 3423038b2f
11 changed files with 417 additions and 271 deletions

View File

@ -1,270 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<module version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<webroots>
<root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
</webroots>
<sourceRoots>
<root url="file://$MODULE_DIR$/src/main/java" />
<root url="file://$MODULE_DIR$/src/main/resources" />
</sourceRoots>
</configuration>
</facet>
<facet type="Spring" name="Spring">
<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" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<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-web:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.1.2.RELEASE" 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.11.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.11.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.25" level="project" />
<orderEntry type="library" name="Maven: javax.annotation:javax.annotation-api:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.23" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.9.8" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.14.Final" level="project" />
<orderEntry type="library" name="Maven: javax.validation:validation-api:2.0.1.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.3.2.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:2.1.2.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:2.1.2.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:2.1.2.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.4.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:json-smart:2.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.minidev:accessors-smart:1.2" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: junit:junit:4.12" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.11.1" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:2.23.4" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy:1.9.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.9.7" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:2.6" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest-library:1.3" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.0" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:5.1.4.RELEASE" level="project" />
<orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-client-java:5.0.5" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat:annotations-api:6.0.53" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-spring-boot:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-client:4.9.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-common:4.9.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-acl:4.9.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-remoting:4.9.3" level="project" />
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.31.Final" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-logging:4.9.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.rocketmq:rocketmq-srvutil:4.9.3" level="project" />
<orderEntry type="library" name="Maven: commons-cli:commons-cli:1.2" level="project" />
<orderEntry type="library" name="Maven: commons-validator:commons-validator:1.7" level="project" />
<orderEntry type="library" name="Maven: commons-digester:commons-digester:2.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.6.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-devtools:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.1.2.RELEASE" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
<orderEntry type="library" name="Maven: dom4j:dom4j:1.6.1" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: jaxen:jaxen:1.1.6" level="project" />
<orderEntry type="library" name="Maven: org.jdom:jdom2:2.0.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-anim:1.7" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis-ext:1.3.04" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-awt-util:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-bridge:1.7" level="project" />
<orderEntry type="library" name="Maven: xalan:xalan:2.6.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-codec:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-css:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-dom:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-ext:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-gvt:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-js:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-parser:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-script:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svg-dom:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-svggen:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-transcoder:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:fop:0.94" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:xmlgraphics-commons:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.avalon.framework:avalon-framework-api:4.3.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.avalon.framework:avalon-framework-impl:4.3.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-util:1.7" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlgraphics:batik-xml:1.7" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-core:4.6.0" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.8.1" 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: org.glassfish.jaxb:jaxb-runtime:2.3.1" level="project" />
<orderEntry type="library" name="Maven: org.glassfish.jaxb:txw2:2.3.1" level="project" />
<orderEntry type="library" name="Maven: com.sun.istack:istack-commons-runtime:3.0.7" level="project" />
<orderEntry type="library" name="Maven: org.jvnet.staxex:stax-ex:1.8" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.fastinfoset:FastInfoset:1.2.15" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcprov-jdk15on:1.70" level="project" />
<orderEntry type="library" name="Maven: org.jacoco:org.jacoco.agent:runtime:0.8.7" level="project" />
<orderEntry type="library" name="Maven: org.ini4j:ini4j:0.5.4" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-api:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-util:0.33.0" level="project" />
<orderEntry type="library" name="Maven: io.opentracing:opentracing-noop:0.33.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-dysmsapi:1.0.0" level="project" />
<orderEntry type="library" name="Maven: javax.servlet:jstl:1.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-jasper:9.0.14" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.14" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.tomcat:tomcat-annotations-api:9.0.14" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.14" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.eclipse.jdt:ecj:3.15.0" level="project" />
<orderEntry type="library" name="Maven: com.jcraft:jsch:0.1.54" level="project" />
<orderEntry type="library" name="Maven: org.freemarker:freemarker:2.3.28" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.12" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:alibabacloud-vod20170321:1.0.4" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-gateway-pop:0.1.9-beta" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:darabonba-java-core:0.1.9-beta" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-http-apache:0.1.9-beta" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents.client5:httpclient5:5.1.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents.core5:httpcore5:5.1.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents.core5:httpcore5-h2:5.1.3" level="project" />
<orderEntry type="library" name="Maven: org.jetbrains:annotations:24.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-core:0.1.9-beta" level="project" />
<orderEntry type="library" name="Maven: com.github.tomakehurst:wiremock-standalone:2.24.1" level="project" />
<orderEntry type="library" name="Maven: org.dom4j:dom4j:2.1.3" level="project" />
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.2" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-auth:0.1.9-beta" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-lang:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-cache:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-hash:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-crypto-cipher:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-core:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-config-ogdl:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-event:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-web:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-ehcache:1.4.0" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache-core:2.6.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.shiro:shiro-spring:1.4.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-cache:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context-support:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: net.sf.ehcache:ehcache:2.10.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.1.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.2.0" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.1.4.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:1.3.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:1.3.2" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.13" level="project" />
<orderEntry type="library" name="Maven: com.hynnet:sqljdbc4-chs:4.0.2206.100" level="project" />
<orderEntry type="library" name="Maven: org.java-websocket:Java-WebSocket:1.3.7" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.11" level="project" />
<orderEntry type="library" name="Maven: commons-fileupload:commons-fileupload:1.3.3" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.2" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.62" level="project" />
<orderEntry type="library" name="Maven: com.gitee.qdbp.thirdparty:ueditor:1.4.3.3" level="project" />
<orderEntry type="library" name="Maven: com.sun.mail:javax.mail:1.6.2" level="project" />
<orderEntry type="library" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" name="Maven: com.belerweb:pinyin4j:2.5.1" level="project" />
<orderEntry type="library" name="Maven: org.quartz-scheduler:quartz:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.mchange:mchange-commons-java:0.2.11" level="project" />
<orderEntry type="library" name="Maven: org.fusesource:sigar:1.6.4" level="project" />
<orderEntry type="library" name="Maven: log4j:log4j:1.2.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.apache.poi:poi:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-examples:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-excelant:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.ant:ant:1.8.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.ant:ant-launcher:1.8.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml:3.17" level="project" />
<orderEntry type="library" name="Maven: com.github.virtuald:curvesapi:1.04" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-ooxml-schemas:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.xmlbeans:xmlbeans:2.6.0" level="project" />
<orderEntry type="library" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.poi:poi-scratchpad:3.17" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.10" level="project" />
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.6" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-all-deps:2.5.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-core:2.5.1" level="project" />
<orderEntry type="library" name="Maven: commons-logging:commons-logging-api:1.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-nativebin-win32:2.5.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-nativebin-win64:2.5.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-nativebin-linux32:2.5.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-nativebin-linux64:2.5.1" level="project" />
<orderEntry type="library" name="Maven: ws.schild:jave-nativebin-osx64:2.5.1" level="project" />
<orderEntry type="library" name="Maven: com.google.code.gson:gson:2.8.9" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:vod20170321:2.16.8" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc:0.0.11" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-rpc-util:0.1.3" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:endpoint-util:0.0.6" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:openapiutil:0.1.14" level="project" />
<orderEntry type="library" name="Maven: org.bouncycastle:bcpkix-jdk15on:1.65" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-openapi:0.2.2" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:credentials-java:0.2.4" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-core:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.sun.xml.bind:jaxb-impl:2.3.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:alibabacloud-gateway-spi:0.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-console:0.0.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea-util:0.2.13" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:tea:1.1.14" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okhttp3:okhttp:3.12.13" level="project" />
<orderEntry type="library" name="Maven: com.squareup.okio:okio:1.15.0" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.core:2.0.2" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.document:2.0.2" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.converter:2.0.2" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.template:2.0.2" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.document.docx:2.0.2" level="project" />
<orderEntry type="library" name="Maven: fr.opensagres.xdocreport:fr.opensagres.xdocreport.template.freemarker:2.0.2" level="project" />
<orderEntry type="library" name="Maven: com.aspose:aspose-words:15.8.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-facebody:1.2.26" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:easyexcel:2.2.6" level="project" />
<orderEntry type="library" name="Maven: cglib:cglib:3.1" level="project" />
<orderEntry type="library" name="Maven: org.ow2.asm:asm:4.2" level="project" />
<orderEntry type="library" name="Maven: org.ehcache:ehcache:3.6.3" level="project" />
<orderEntry type="library" name="Maven: io.jsonwebtoken:jjwt:0.9.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
<orderEntry type="library" name="Maven: org.bitbucket.b_c:jose4j:0.6.4" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-vod:2.16.5" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-kms:2.10.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun.oss:aliyun-sdk-oss:3.10.2" level="project" />
<orderEntry type="library" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ram:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-sts:3.0.0" level="project" />
<orderEntry type="library" name="Maven: com.aliyun:aliyun-java-sdk-ecs:4.2.0" level="project" />
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.4" level="project" />
</component>
</module>

View File

@ -1351,7 +1351,7 @@ public class ArchivesController extends BaseController {
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd"); //日期格式
paper.put("CREATTIME", dateformat.format(dateformat.parse(paper.getString("CREATTIME"))));
}
context.put("value19", Tools.notEmpty(paper.getString("CREATTIME")) ? paper.getString("CREATTIME") : "未参加考试"); //考试时间
context.put("value19", Tools.notEmpty(paper.getString("EXAMTIMEEND")) ? paper.getString("EXAMTIMEEND") : "未参加考试"); //考试时间
context.put("value20", Tools.notEmpty(paper.getString("EXAMSCORE")) ? paper.getString("EXAMSCORE") : ""); //考试成绩
if (paper.get("QUESTIONLIST") != null) {
ArrayList arr = (ArrayList) paper.get("QUESTIONLIST");

View File

@ -66,6 +66,12 @@ public class ClassController extends BaseController {
private EnterpriseService enterpriseService;
@Autowired
private CorpEnterpriseContactService corpEnterpriseContactService;
@Autowired
private StageExamRecordService stageExamRecordService;
@Autowired
private StageExamService stageExamService;
@Autowired
private PaperQuestionService paperQuestionService;
/**
@ -447,8 +453,20 @@ public class ClassController extends BaseController {
paperInfo = paperList.get(ranDomPaperIndex);
}
// 获取试卷题目
List<PageData> questionList = null;
if (paperInfo != null) {
List<PageData> paperListForQuery = new ArrayList<>();
paperListForQuery.add(paperInfo);
questionList = paperQuestionService.listAllByInputIds(paperListForQuery);
}
for (PageData stu : stuList) {
saveStageStudent(stu, paperInfo, examination);
// 班级完成后,为每个学员生成考试记录(随机合格分数)
if (paperInfo != null && questionList != null && questionList.size() > 0) {
generateExamRecord(stu, paperInfo, questionList, pd);
}
}
initPageDataUtil.initEdit(pd);
@ -512,6 +530,248 @@ public class ClassController extends BaseController {
stageStudentRelationService.save(stageStudent);
}
/**
*
* @param stu
* @param paperInfo
* @param questionList
*/
private void generateExamRecord(PageData stu, PageData paperInfo, List<PageData> questionList, PageData classInfo) throws Exception {
// 计算试卷总分
int totalScore = 0;
for (PageData question : questionList) {
if (question.get("SCORE") != null) {
totalScore += Integer.parseInt(question.get("SCORE").toString());
}
}
// 获取及格分数
int passScore = 0;
if (paperInfo.get("PASSSCORE") != null) {
passScore = Integer.parseInt(paperInfo.get("PASSSCORE").toString());
}
// 随机决定哪些题目答错0道、1道或2道
int questionCount = questionList.size();
int errorCount = 0;
if (questionCount > 0) {
// 0~2道题答错
errorCount = new Random().nextInt(3);
// 确保不超过题目总数
if (errorCount > questionCount) {
errorCount = questionCount;
}
}
// 打乱题目顺序随机选择errorCount道题作为错题
List<Integer> errorIndexes = new ArrayList<>();
if (errorCount > 0 && questionCount > 0) {
List<Integer> allIndexes = new ArrayList<>();
for (int i = 0; i < questionCount; i++) {
allIndexes.add(i);
}
Collections.shuffle(allIndexes);
for (int i = 0; i < errorCount; i++) {
errorIndexes.add(allIndexes.get(i));
}
}
// 计算错题的总分值,确保不低于及格分数
int errorScore = 0;
for (int idx : errorIndexes) {
PageData q = questionList.get(idx);
if (q.get("SCORE") != null) {
errorScore += Integer.parseInt(q.get("SCORE").toString());
}
}
// 如果扣分后低于及格分数,减少错题数量
while (errorIndexes.size() > 0 && (totalScore - errorScore) < passScore) {
// 移除一个错题
int lastIdx = errorIndexes.size() - 1;
int removeIdx = errorIndexes.get(lastIdx);
PageData q = questionList.get(removeIdx);
if (q.get("SCORE") != null) {
errorScore -= Integer.parseInt(q.get("SCORE").toString());
}
errorIndexes.remove(lastIdx);
}
errorCount = errorIndexes.size();
// 统计正确和错误题数
int rightCount = 0;
int wrongCount = 0;
// 累计每道题的实际得分
int totalEarnedScore = 0;
// 保存考试主记录bus_stageexam表
PageData stageExam = new PageData();
stageExam.put("STAGEEXAM_ID", this.get32UUID());
// 为每道题目生成答题记录
int index = 0;
for (PageData question : questionList) {
boolean isError = errorIndexes.contains(index);
index++;
PageData examRecord = new PageData();
examRecord.put("STAGEEXAMRECORD_ID", this.get32UUID());
examRecord.put("STAGEEXAMPAPER_ID", paperInfo.get("STAGEEXAMPAPERINPUT_ID"));
examRecord.put("STAGEEXAM_ID", stageExam.get("STAGEEXAM_ID"));
examRecord.put("PAPER_ID", paperInfo.get("STAGEEXAMPAPERINPUT_ID"));
examRecord.put("QUESTION_ID", question.get("PAPER_QUESTION_ID"));
examRecord.put("PAPER_QUESTION_ID", question.get("PAPER_QUESTION_ID"));
examRecord.put("USER_ID", stu.get("USER_ID"));
examRecord.put("STUDENT_ID", stu.get("STUDENT_ID"));
examRecord.put("CLASS_ID", stu.get("CLASS_ID"));
// 题目满分
int questionScore = 0;
if (question.get("SCORE") != null) {
questionScore = Integer.parseInt(question.get("SCORE").toString());
}
// 判断是否正确答错的得0分答对的得满分
boolean isCorrect = !isError;
int earnedScore = isCorrect ? questionScore : 0;
String questionType = question.getString("QUESTIONTYPE");
if ("1".equals(questionType)) {
// 单选,使用预设答案
if (isCorrect) {
examRecord.put("ANSWER", question.get("ANSWER"));
} else {
// 答错时,随机选择一个不是正确答案的选项
String rightAnswer = question.getString("ANSWER");
List<String> options = new ArrayList<>();
if (!"A".equals(rightAnswer) && question.get("OPTIONA") != null) options.add("A");
if (!"B".equals(rightAnswer) && question.get("OPTIONB") != null) options.add("B");
if (!"C".equals(rightAnswer) && question.get("OPTIONC") != null) options.add("C");
if (!"D".equals(rightAnswer) && question.get("OPTIOND") != null) options.add("D");
if (!options.isEmpty()) {
examRecord.put("ANSWER", options.get(new Random().nextInt(options.size())));
} else {
examRecord.put("ANSWER", rightAnswer);
}
}
examRecord.put("ANSWERRIGHT", question.get("ANSWER"));
} else if ("2".equals(questionType)) {
// 多选,使用预设答案
if (isCorrect) {
examRecord.put("ANSWER", question.get("ANSWER"));
} else {
// 答错时,随机缺少一个或多个正确选项
String rightAnswer = question.getString("ANSWER");
List<String> rightOptions = new ArrayList<>();
for (char c : rightAnswer.toCharArray()) {
rightOptions.add(String.valueOf(c));
}
// 随机移除1到n-1个选项生成错误答案
int removeCount = new Random().nextInt(rightOptions.size()) + 1;
Collections.shuffle(rightOptions);
List<String> wrongOptions = rightOptions.subList(removeCount, rightOptions.size());
StringBuilder wrongAnswer = new StringBuilder();
for (String opt : wrongOptions) {
wrongAnswer.append(opt);
}
if (wrongAnswer.length() == 0) {
// 如果全移除了,随机选一个
examRecord.put("ANSWER", "A");
} else {
examRecord.put("ANSWER", wrongAnswer.toString());
}
}
examRecord.put("ANSWERRIGHT", question.get("ANSWER"));
} else {
// 判断或简答
if (isCorrect) {
examRecord.put("ANSWER", question.get("ANSWER"));
} else {
// 答错时,随机标记为错误答案
String rightAnswer = question.getString("ANSWER");
examRecord.put("ANSWER", "错误".equals(rightAnswer) ? "正确" : "错误");
}
examRecord.put("ANSWERRIGHT", question.get("ANSWER"));
}
initPageDataUtil.initSave(examRecord);
examRecord.put("ISDELETE", "0");
examRecord.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
examRecord.put("STUDYTASK_ID", "");
stageExamRecordService.save(examRecord);
// 统计正确和错误题数,同时累计实际得分
if (isCorrect) {
rightCount++;
totalEarnedScore += earnedScore;
} else {
wrongCount++;
}
}
stageExam.put("STAGEEXAMPAPER_ID", paperInfo.get("STAGEEXAMPAPERINPUT_ID"));
stageExam.put("USER_ID", stu.get("USER_ID"));
stageExam.put("STUDENT_ID", stu.get("STUDENT_ID"));
stageExam.put("CLASS_ID", stu.get("CLASS_ID"));
stageExam.put("EXAMQUESTIONNUM", questionList.size());
stageExam.put("EXAMQUESTIONRIGHT", rightCount);
stageExam.put("EXAMQUESTIONWRONG", wrongCount);
stageExam.put("EXAMSCORE", totalEarnedScore);
initPageDataUtil.initSave(stageExam);
stageExam.put("ISDELETE", "0");
stageExam.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID());
stageExam.put("STUDYTASK_ID", "");
// 从时间段中随机获取考试时间(考试时长半小时)
String examTimeBegin = classInfo.getString("EXAM_TIME_START");
String examTimeEnd = classInfo.getString("EXAM_TIME_END");
if (Tools.notEmpty(examTimeBegin) && Tools.notEmpty(examTimeEnd)) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
long beginTime = sdf.parse(examTimeBegin).getTime();
long endTime = sdf.parse(examTimeEnd).getTime();
// 考试时长30分钟随机生成开始时间结束时间 = 开始时间 + 30分钟
long examDuration = 30 * 60 * 1000; // 30分钟
long maxStartTime = endTime - examDuration;
if (maxStartTime > beginTime) {
long randomStartTime = beginTime + new Random().nextInt((int) (maxStartTime - beginTime));
Date startDate = new Date(randomStartTime);
Date endDate = new Date(randomStartTime + examDuration);
stageExam.put("EXAMTIMEBEGIN", sdf.format(startDate));
stageExam.put("EXAMTIMEEND", sdf.format(endDate));
} else {
// 时间段不足30分钟直接使用原始时间
stageExam.put("EXAMTIMEBEGIN", examTimeBegin);
stageExam.put("EXAMTIMEEND", examTimeEnd);
}
} catch (Exception e) {
stageExam.put("EXAMTIMEBEGIN", examTimeBegin);
stageExam.put("EXAMTIMEEND", examTimeEnd);
}
} else {
stageExam.put("EXAMTIMEBEGIN", examTimeBegin);
stageExam.put("EXAMTIMEEND", examTimeEnd);
}
stageExamService.save(stageExam);
// 保存班级-学员关系
PageData stageStudent = new PageData();
// 全员有考试
stageStudent.put("STAGEEXAMSTATE", "3");
// 阶段考试状态0.不考试 1.未开始 2.考试中 3.考试完成 4.未参加 5.线下考试)
// 学习状态已经完成
stageStudent.put("STUDYSTATE", "3");
stageStudent.put("STAGEEXAMSCORE", totalEarnedScore);
stageStudent.put("STUDENT_ID", stu.get("STUDENT_ID"));
stageStudentRelationService.updateStudentScore(stageStudent);
PageData stuData = new PageData();
stuData.put("CLASS_ID", classInfo.getString("CLASS_ID"));
stuData.put("STUDY_START_TIME", classInfo.getString("START_TIME"));
stuData.put("STUDY_END_TIME", classInfo.getString("END_TIME"));
// 完成学员的学习时间
studentService.finshStuStateByClassId(stuData);
}
@RequestMapping(value = "/goEdit")
// @RequiresPermissions("class:edit")
@ResponseBody

View File

@ -724,4 +724,42 @@ public class StudentController extends BaseController {
return response.errorMessage(e.getMessage());
}
}
/**
*
* @param files
* @return
*/
@RequestMapping("/importSign")
@ResponseBody
public Response importSign(@RequestParam(value = "FFILE", required = false) MultipartFile[] files) {
Response response = Response.getResponse();
try {
PageData request = this.getPageData();
studentService.sign(request, files);
return response.OK();
} catch (Exception e) {
e.printStackTrace();
return response.errorMessage(e.getMessage());
}
}
/**
*
* @param files _.png
* @return
*/
@RequestMapping("/batchImportSign")
@ResponseBody
public Response batchImportSign(@RequestParam(value = "FFILE", required = false) MultipartFile[] files) {
Response response = Response.getResponse();
try {
PageData request = this.getPageData();
PageData result = studentService.batchImportSign(request, files);
return response.OK();
} catch (Exception e) {
e.printStackTrace();
return response.errorMessage(e.getMessage());
}
}
}

View File

@ -192,5 +192,11 @@ public interface StudentMapper {
void updStuFaceRecogn(PageData pd);
void saveFaceRecogn(PageData pd);
/**
* @param pd
* @throws Exception
*/
PageData findByIdCard(PageData pd);
}

View File

@ -180,5 +180,13 @@ public interface StudentService{
Result faceRecognition(MultipartFile[] files, PageData pd) throws IOException;
PageData sign(PageData request, MultipartFile[] files) throws Exception;
/**
* @param files
* @return
* @throws Exception
*/
PageData batchImportSign(PageData request, MultipartFile[] files) throws Exception;
}

View File

@ -17,7 +17,7 @@ import com.zcloud.service.system.DictionariesService;
import com.zcloud.service.system.PostService;
import com.zcloud.service.system.UsersService;
import com.zcloud.util.*;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired;
@ -688,5 +688,90 @@ public class StudentServiceImpl implements StudentService {
}
stageStudentRelationService.save(stageStudent);
}
@Override
public PageData sign(PageData request, MultipartFile[] files) throws Exception {
PageData entity = studentMapper.findById(request);
entity.putAll(request);
if (files != null && files.length > 0) {
entity.put("SIGNATURE_PATH", smb.saveFile(files[0], entity.getString("CORPINFO_ID"), Const.FILEPATHFACE));
} else {
MultipartFile file = BASE64DecodedMultipartFile.base64ToMultipart(request.getString("FFILE"));
entity.put("SIGNATURE_PATH", smb.saveFile(file, entity.getString("CORPINFO_ID"), Const.FILEPATHFACE));
}
studentMapper.edit(entity);
return entity;
}
@Override
public PageData batchImportSign(PageData request, MultipartFile[] files) throws Exception {
PageData result = new PageData();
int successCount = 0;
int failCount = 0;
StringBuilder failReasons = new StringBuilder();
if (files == null || files.length == 0) {
result.put("successCount", 0);
result.put("failCount", 0);
result.put("message", "没有上传文件");
return result;
}
String classId = request.getString("CLASS_ID");
if (classId == null || classId.isEmpty()) {
result.put("successCount", 0);
result.put("failCount", 0);
result.put("message", "请传入班级ID");
return result;
}
for (MultipartFile file : files) {
if (file == null || file.isEmpty()) {
continue;
}
String fileName = file.getOriginalFilename();
if (fileName == null || !fileName.contains("_")) {
failCount++;
failReasons.append(fileName).append("(文件名格式不正确);");
continue;
}
// 解析文件名: 身份证号_姓名.jpg
String baseName = fileName.substring(0, fileName.lastIndexOf("."));
String idCard = baseName;
int underscoreIndex = baseName.lastIndexOf("_");
if (underscoreIndex > 0) {
idCard = baseName.substring(0, underscoreIndex);
}
// 根据班级ID和身份证号查询学员
PageData queryPd = new PageData();
queryPd.put("USER_ID_CARD", idCard);
queryPd.put("CLASS_ID", classId);
PageData student = studentMapper.findStuByIdcarAndEnt(queryPd);
if (student == null) {
failCount++;
failReasons.append(fileName).append("(班级中未找到该学员);");
continue;
}
// 保存签字图片
String signPath = smb.saveFile(file, student.getString("CORPINFO_ID"), Const.FILEPATHFACE);
student.put("SIGNATURE_PATH", signPath);
studentMapper.edit(student);
successCount++;
}
result.put("successCount", successCount);
result.put("failCount", failCount);
result.put("failReasons", failReasons.toString());
result.put("message", "成功导入" + successCount + "条" + (failCount > 0 ? "" + failCount + "条失败" : ""));
return result;
}
}

View File

@ -5,11 +5,11 @@ datasource.no1.driver-class-name: com.mysql.cj.jdbc.Driver
datasource.no2.driver-class-name: com.mysql.cj.jdbc.Driver
#开发
datasource.no1.url=jdbc:mysql://192.168.0.17:3306/qa-education-exam?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
datasource.no1.url=jdbc:mysql://192.168.10.28:33061/qa-education-exam?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
datasource.no1.username=root
datasource.no1.password=root
datasource.no2.url=jdbc:mysql://192.168.0.17:3306/qa-education-exam?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
datasource.no2.url=jdbc:mysql://192.168.10.28:33061/qa-education-exam?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=utf-8
datasource.no2.username=root
datasource.no2.password=root

View File

@ -267,12 +267,12 @@
</if>
OPERATOR = #{OPERATOR},
OPERATTIME = #{OPERATTIME}
where
where ISDELETE = '0'
<if test="STAGESTUDENTRELATION_ID != null and STAGESTUDENTRELATION_ID != ''">
STAGESTUDENTRELATION_ID = #{STAGESTUDENTRELATION_ID}
and STAGESTUDENTRELATION_ID = #{STAGESTUDENTRELATION_ID}
</if>
<if test="STUDENT_ID != null and STUDENT_ID != ''">
STUDENT_ID = #{STUDENT_ID}
and STUDENT_ID = #{STUDENT_ID}
</if>
</update>

View File

@ -47,7 +47,6 @@
f.STUDY_END_TIME,
f.FILE_NUMBER
</sql>
<!-- 字段用于新增 -->
@ -1133,4 +1132,16 @@
<select id="findStuByIdcarAndEnt" resultType="com.zcloud.entity.PageData">
select <include refid="Field"></include> from <include refid="tableName"></include> f where f.ISDELETE = '0' and f.CLASS_ID = #{CLASS_ID} and f.USER_ID_CARD = #{USER_ID_CARD}
</select>
<!-- 根据身份证号查询学员 -->
<select id="findByIdCard" parameterType="pd" resultType="pd">
select
<include refid="Field"></include>
from
<include refid="tableName"></include>
f
where f.ISDELETE = '0'
and f.USER_ID_CARD = #{USER_ID_CARD}
and f.CLASS_ID = #{CLASS_ID}
limit 1
</select>
</mapper>

View File