1
0
Pārlūkot izejas kodu

考生、评卷任务、仲裁记录增加密号字段;密号通过准考证号自动生成;评卷任务考生编号由studentId改为密号

luoshi 4 gadi atpakaļ
vecāks
revīzija
51885e5b3b

+ 331 - 331
pom.xml

@@ -1,340 +1,340 @@
 <?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
 
-	<groupId>cn.com.qmth.stmms</groupId>
-	<artifactId>stmms-parent</artifactId>
-	<packaging>pom</packaging>
-	<version>1.0-SNAPSHOT</version>
+    <groupId>cn.com.qmth.stmms</groupId>
+    <artifactId>stmms-parent</artifactId>
+    <packaging>pom</packaging>
+    <version>1.0-SNAPSHOT</version>
 
-	<name>stmms-parent</name>
-	<url>http://maven.apache.org</url>
+    <name>stmms-parent</name>
+    <url>http://maven.apache.org</url>
 
-	<modules>
-		<module>stmms-common</module>
-		<module>stmms-biz</module>
-		<module>stmms-web</module>
-	</modules>
+    <modules>
+        <module>stmms-common</module>
+        <module>stmms-biz</module>
+        <module>stmms-web</module>
+    </modules>
 
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<spring.version>3.2.14.RELEASE</spring.version>
-		<hibernate.version>4.2.1.Final</hibernate.version>
-		<log4j.version>1.2.17</log4j.version>
-		<aspectj.version>1.6.5</aspectj.version>
-		<junit.version>4.11</junit.version>
-		<java.version>1.8</java.version>
-		<spring-data-redis.version>1.2.1.RELEASE</spring-data-redis.version>
-		<poi.version>3.9</poi.version>
-		<guava.version>14.0.1</guava.version>
-		<commons-lang3.version>3.1</commons-lang3.version>
-	</properties>
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <spring.version>3.2.14.RELEASE</spring.version>
+        <hibernate.version>4.2.1.Final</hibernate.version>
+        <log4j.version>1.2.17</log4j.version>
+        <aspectj.version>1.6.5</aspectj.version>
+        <junit.version>4.11</junit.version>
+        <java.version>1.8</java.version>
+        <spring-data-redis.version>1.2.1.RELEASE</spring-data-redis.version>
+        <poi.version>3.9</poi.version>
+        <guava.version>29.0-jre</guava.version>
+        <commons-lang3.version>3.1</commons-lang3.version>
+    </properties>
 
-	<dependencyManagement>
-		<dependencies>
-			<!-- ======================================== -->
-			<!-- 子项目依赖 -->
-			<!-- ======================================== -->
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>stmms-common</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>stmms-orm</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>stmms-biz</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>stmms-web</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>remote-interface</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>cn.com.qmth.stmms</groupId>
-				<artifactId>remote-service</artifactId>
-				<version>${project.version}</version>
-			</dependency>
-			<!-- ================================================= -->
-			<!-- 日志及相关依赖(用slf4j+logback代替jcl+log4j) -->
-			<!-- ================================================= -->
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>slf4j-api</artifactId>
-				<version>1.6.1</version>
-			</dependency>
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>jcl-over-slf4j</artifactId>
-				<version>1.6.1</version>
-			</dependency>
-			<dependency>
-				<groupId>ch.qos.logback</groupId>
-				<artifactId>logback-classic</artifactId>
-				<version>0.9.29</version>
-				<scope>runtime</scope>
-			</dependency>
-			<dependency>
-				<groupId>com.caucho</groupId>
-				<artifactId>hessian</artifactId>
-				<version>4.0.7</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-logging</groupId>
-				<artifactId>commons-logging</artifactId>
-				<version>1.1.1</version>
-				<scope>provided</scope>
-			</dependency>
-			<!-- ================================================= -->
-			<!-- Spring框架 -->
-			<!-- ================================================= -->
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-core</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-beans</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-aop</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-aspects</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-context</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-context-support</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-tx</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-jdbc</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-orm</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-web</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-webmvc</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-test</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework</groupId>
-				<artifactId>spring-instrument</artifactId>
-				<version>${spring.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework.data</groupId>
-				<artifactId>spring-data-jpa</artifactId>
-				<version>1.6.6.RELEASE</version>
-			</dependency>
-			<dependency>
-				<groupId>org.springframework.data</groupId>
-				<artifactId>spring-data-redis</artifactId>
-				<version>${spring-data-redis.version}</version>
-			</dependency>
-			<!-- ======================================== -->
-			<!-- 其它第三方依赖 -->
-			<!-- ======================================== -->
-			<dependency>
-				<groupId>javax.servlet</groupId>
-				<artifactId>javax.servlet-api</artifactId>
-				<version>3.0.1</version>
-				<scope>provided</scope>
-			</dependency>
-			<dependency>
-				<groupId>org.mortbay.jetty</groupId>
-				<artifactId>jetty</artifactId>
-				<version>6.1.26</version>
-			</dependency>
-			<dependency>
-				<groupId>jstl</groupId>
-				<artifactId>jstl</artifactId>
-				<version>1.2</version>
-			</dependency>
-			<dependency>
-				<groupId>junit</groupId>
-				<artifactId>junit</artifactId>
-				<version>${junit.version}</version>
-				<scope>test</scope>
-			</dependency>
-			<dependency>
-				<groupId>commons-fileupload</groupId>
-				<artifactId>commons-fileupload</artifactId>
-				<version>1.2.2</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-io</groupId>
-				<artifactId>commons-io</artifactId>
-				<version>2.1</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-net</groupId>
-				<artifactId>commons-net</artifactId>
-				<version>2.0</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-collections</groupId>
-				<artifactId>commons-collections</artifactId>
-				<version>20040616</version>
-			</dependency>
-			<dependency>
-				<groupId>org.hibernate</groupId>
-				<artifactId>hibernate-entitymanager</artifactId>
-				<version>${hibernate.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.hibernate</groupId>
-				<artifactId>hibernate-ehcache</artifactId>
-				<version>${hibernate.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>org.hibernate.javax.persistence</groupId>
-				<artifactId>hibernate-jpa-2.0-api</artifactId>
-				<version>1.0.1.Final</version>
-			</dependency>
-			<dependency>
-				<groupId>org.eclipse.persistence</groupId>
-				<artifactId>javax.persistence</artifactId>
-				<version>2.1.0</version>
-			</dependency>
-			<dependency>
-				<groupId>org.slf4j</groupId>
-				<artifactId>slf4j-api</artifactId>
-				<version>1.7.5</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-dbcp</groupId>
-				<artifactId>commons-dbcp</artifactId>
-				<version>1.4</version>
-			</dependency>
-			<dependency>
-				<groupId>commons-pool</groupId>
-				<artifactId>commons-pool</artifactId>
-				<version>20030825.183949</version>
-			</dependency>
-			<dependency>
-				<groupId>mysql</groupId>
-				<artifactId>mysql-connector-java</artifactId>
-				<version>5.1.21</version>
-			</dependency>
-			<dependency>
-				<groupId>org.codehaus.jackson</groupId>
-				<artifactId>jackson-mapper-asl</artifactId>
-				<version>1.9.12</version>
-			</dependency>
-			<dependency>
-				<groupId>org.codehaus.jackson</groupId>
-				<artifactId>jackson-core-asl</artifactId>
-				<version>1.9.12</version>
-			</dependency>
-			<dependency>
-				<groupId>com.fasterxml.jackson.core</groupId>
-				<artifactId>jackson-databind</artifactId>
-				<version>2.8.8</version>
-			</dependency>
-			<dependency>
-				<groupId>log4j</groupId>
-				<artifactId>log4j</artifactId>
-				<version>${log4j.version}</version>
-			</dependency>
-			<dependency>
-				<groupId>net.sourceforge.jexcelapi</groupId>
-				<artifactId>jxl</artifactId>
-				<version>2.6.12</version>
-			</dependency>
-			<dependency>
-				<groupId>net.sf.json-lib</groupId>
-				<artifactId>json-lib-ext-spring</artifactId>
-				<version>1.0.2</version>
-			</dependency>
-			<dependency>
-				<groupId>redis.clients</groupId>
-				<artifactId>jedis</artifactId>
-				<version>2.4.1</version>
-			</dependency>
-			<dependency>
-				<groupId>org.aspectj</groupId>
-				<artifactId>aspectjweaver</artifactId>
-				<version>1.8.0</version>
-			</dependency>
-			<dependency>
-				<groupId>com.google.guava</groupId>
-				<artifactId>guava</artifactId>
-				<version>18.0</version>
-			</dependency>
-			<dependency>
-				<groupId>junit</groupId>
-				<artifactId>junit</artifactId>
-				<version>4.12</version>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
+    <dependencyManagement>
+        <dependencies>
+            <!-- ======================================== -->
+            <!-- 子项目依赖 -->
+            <!-- ======================================== -->
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>stmms-common</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>stmms-orm</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>stmms-biz</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>stmms-web</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>remote-interface</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>cn.com.qmth.stmms</groupId>
+                <artifactId>remote-service</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <!-- ================================================= -->
+            <!-- 日志及相关依赖(用slf4j+logback代替jcl+log4j) -->
+            <!-- ================================================= -->
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>1.6.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>jcl-over-slf4j</artifactId>
+                <version>1.6.1</version>
+            </dependency>
+            <dependency>
+                <groupId>ch.qos.logback</groupId>
+                <artifactId>logback-classic</artifactId>
+                <version>0.9.29</version>
+                <scope>runtime</scope>
+            </dependency>
+            <dependency>
+                <groupId>com.caucho</groupId>
+                <artifactId>hessian</artifactId>
+                <version>4.0.7</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-logging</groupId>
+                <artifactId>commons-logging</artifactId>
+                <version>1.1.1</version>
+                <scope>provided</scope>
+            </dependency>
+            <!-- ================================================= -->
+            <!-- Spring框架 -->
+            <!-- ================================================= -->
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-core</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-beans</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-aop</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-aspects</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-context-support</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-tx</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-jdbc</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-orm</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-web</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-webmvc</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-test</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-instrument</artifactId>
+                <version>${spring.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.data</groupId>
+                <artifactId>spring-data-jpa</artifactId>
+                <version>1.6.6.RELEASE</version>
+            </dependency>
+            <dependency>
+                <groupId>org.springframework.data</groupId>
+                <artifactId>spring-data-redis</artifactId>
+                <version>${spring-data-redis.version}</version>
+            </dependency>
+            <!-- ======================================== -->
+            <!-- 其它第三方依赖 -->
+            <!-- ======================================== -->
+            <dependency>
+                <groupId>javax.servlet</groupId>
+                <artifactId>javax.servlet-api</artifactId>
+                <version>3.0.1</version>
+                <scope>provided</scope>
+            </dependency>
+            <dependency>
+                <groupId>org.mortbay.jetty</groupId>
+                <artifactId>jetty</artifactId>
+                <version>6.1.26</version>
+            </dependency>
+            <dependency>
+                <groupId>jstl</groupId>
+                <artifactId>jstl</artifactId>
+                <version>1.2</version>
+            </dependency>
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>${junit.version}</version>
+                <scope>test</scope>
+            </dependency>
+            <dependency>
+                <groupId>commons-fileupload</groupId>
+                <artifactId>commons-fileupload</artifactId>
+                <version>1.2.2</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>2.1</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-net</groupId>
+                <artifactId>commons-net</artifactId>
+                <version>2.0</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>20040616</version>
+            </dependency>
+            <dependency>
+                <groupId>org.hibernate</groupId>
+                <artifactId>hibernate-entitymanager</artifactId>
+                <version>${hibernate.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.hibernate</groupId>
+                <artifactId>hibernate-ehcache</artifactId>
+                <version>${hibernate.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.hibernate.javax.persistence</groupId>
+                <artifactId>hibernate-jpa-2.0-api</artifactId>
+                <version>1.0.1.Final</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.persistence</groupId>
+                <artifactId>javax.persistence</artifactId>
+                <version>2.1.0</version>
+            </dependency>
+            <dependency>
+                <groupId>org.slf4j</groupId>
+                <artifactId>slf4j-api</artifactId>
+                <version>1.7.5</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-dbcp</groupId>
+                <artifactId>commons-dbcp</artifactId>
+                <version>1.4</version>
+            </dependency>
+            <dependency>
+                <groupId>commons-pool</groupId>
+                <artifactId>commons-pool</artifactId>
+                <version>20030825.183949</version>
+            </dependency>
+            <dependency>
+                <groupId>mysql</groupId>
+                <artifactId>mysql-connector-java</artifactId>
+                <version>5.1.21</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-mapper-asl</artifactId>
+                <version>1.9.12</version>
+            </dependency>
+            <dependency>
+                <groupId>org.codehaus.jackson</groupId>
+                <artifactId>jackson-core-asl</artifactId>
+                <version>1.9.12</version>
+            </dependency>
+            <dependency>
+                <groupId>com.fasterxml.jackson.core</groupId>
+                <artifactId>jackson-databind</artifactId>
+                <version>2.8.8</version>
+            </dependency>
+            <dependency>
+                <groupId>log4j</groupId>
+                <artifactId>log4j</artifactId>
+                <version>${log4j.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>net.sourceforge.jexcelapi</groupId>
+                <artifactId>jxl</artifactId>
+                <version>2.6.12</version>
+            </dependency>
+            <dependency>
+                <groupId>net.sf.json-lib</groupId>
+                <artifactId>json-lib-ext-spring</artifactId>
+                <version>1.0.2</version>
+            </dependency>
+            <dependency>
+                <groupId>redis.clients</groupId>
+                <artifactId>jedis</artifactId>
+                <version>2.4.1</version>
+            </dependency>
+            <dependency>
+                <groupId>org.aspectj</groupId>
+                <artifactId>aspectjweaver</artifactId>
+                <version>1.8.0</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.guava</groupId>
+                <artifactId>guava</artifactId>
+                <version>${guava.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>junit</groupId>
+                <artifactId>junit</artifactId>
+                <version>4.12</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
 
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.3.2</version>
-				<configuration>
-					<source>${java.version}</source>
-					<target>${java.version}</target>
-					<encoding>UTF-8</encoding>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.14.1</version>
-				<configuration>
-					<skipTests>true</skipTests>
-					<additionalClasspathElements>
-						<additionalClasspathElement>src/main/resources</additionalClasspathElement>
-					</additionalClasspathElements>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>2.3.2</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                    <encoding>UTF-8</encoding>
+                </configuration>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <version>2.14.1</version>
+                <configuration>
+                    <skipTests>true</skipTests>
+                    <additionalClasspathElements>
+                        <additionalClasspathElement>src/main/resources</additionalClasspathElement>
+                    </additionalClasspathElements>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
 </project>

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/dao/ExamStudentDao.java

@@ -24,6 +24,8 @@ public interface ExamStudentDao
 
     public List<ExamStudent> findByExamIdAndExamNumber(int examId, String examNumber);
 
+    public List<ExamStudent> findByExamIdAndSecretNumber(int examId, String secretNumber);
+
     @Query("select count(s) from ExamStudent s where s.examId=?1 and s.subjectCode=?2 "
             + "and s.upload=true and s.absent=false and s.breach=false")
     public long countUploaded(Integer examId, String subjectCode);

+ 16 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamStudent.java

@@ -3,10 +3,12 @@ package cn.com.qmth.stmms.biz.exam.model;
 import cn.com.qmth.stmms.biz.mark.model.ProblemType;
 import cn.com.qmth.stmms.biz.utils.ScoreItem;
 import cn.com.qmth.stmms.common.annotation.ExcelField;
+import com.google.common.hash.Hashing;
 import org.apache.commons.lang.StringUtils;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.LinkedList;
@@ -84,6 +86,12 @@ public class ExamStudent implements Serializable {
     @ExcelField(title = "学号", align = 2, sort = 50)
     private String studentCode;
 
+    /**
+     * 密号
+     */
+    @Column(name = "secret_number", length = 64, nullable = false)
+    private String secretNumber;
+
     /**
      * 姓名
      */
@@ -754,4 +762,12 @@ public class ExamStudent implements Serializable {
         this.problemType = problemType;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void resetSecretNumber() {
+        secretNumber = Integer
+                .toUnsignedString(Hashing.murmur3_32().hashString(examNumber, StandardCharsets.UTF_8).asInt());
+    }
 }

+ 1 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/model/ExamSubject.java

@@ -238,4 +238,5 @@ public class ExamSubject implements Serializable {
     public List<PictureConfigItem> getSheetConfigList() {
         return PictureConfigItem.parse(sheetConfig);
     }
+
 }

+ 2 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/ExamStudentService.java

@@ -36,6 +36,8 @@ public interface ExamStudentService {
 
     ExamStudent findByExamIdAndExamNumber(int examId, String examNumber);
 
+    ExamStudent findByExamIdAndSecretNumber(int examId, String secretNumber);
+
     public long countByExamId(int examId);
 
     public long countByExamIdAndSubjectCode(int examId, String subjectCode);

+ 8 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/exam/service/impl/ExamStudentServiceImpl.java

@@ -96,6 +96,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
 
         for (ExamStudent student : list) {
             ExamSubject subject = null;
+            student.resetSecretNumber();
             student.setSubjectCode(StringUtils.trimToNull(student.getSubjectCode()));
             student.setSubjectName(StringUtils.trimToNull(student.getSubjectName()));
             if (!subjectMap.containsKey(student.getSubjectCode())) {
@@ -176,6 +177,7 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
 
     @Transactional
     public ExamStudent save(ExamStudent student) {
+        student.resetSecretNumber();
         student.setSubjectCode(StringUtils.trimToNull(student.getSubjectCode()));
         student.setSubjectName(StringUtils.trimToNull(student.getSubjectName()));
         ExamSubject subject = subjectService.find(student.getExamId(), student.getSubjectCode());
@@ -297,6 +299,12 @@ public class ExamStudentServiceImpl extends BaseQueryService<ExamStudent> implem
         return list != null && list.size() > 0 ? list.get(0) : null;
     }
 
+    @Override
+    public ExamStudent findByExamIdAndSecretNumber(int examId, String secretNumber) {
+        List<ExamStudent> list = studentDao.findByExamIdAndSecretNumber(examId, secretNumber);
+        return list != null && list.size() > 0 ? list.get(0) : null;
+    }
+
     public long countByExamId(int examId) {
         ExamStudentSearchQuery query = new ExamStudentSearchQuery();
         query.setExamId(examId);

+ 19 - 14
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/ArbitrateHistory.java

@@ -1,25 +1,16 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
-import java.io.Serializable;
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
 import cn.com.qmth.stmms.biz.user.model.User;
 import cn.com.qmth.stmms.common.enums.HistoryStatus;
 
+import javax.persistence.*;
+import java.io.Serializable;
+import java.util.Date;
+
 /**
  * 多评仲裁记录表
- * 
- * @author luoshi
  *
+ * @author luoshi
  */
 @Entity
 @Table(name = "m_arbitrate_history")
@@ -61,6 +52,12 @@ public class ArbitrateHistory implements Serializable {
     @Column(name = "exam_number")
     private String examNumber;
 
+    /**
+     * 考生密号
+     */
+    @Column(name = "secret_number")
+    private String secretNumber;
+
     /**
      * 仲裁处理用户ID
      */
@@ -149,6 +146,14 @@ public class ArbitrateHistory implements Serializable {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
     public Integer getUserId() {
         return userId;
     }

+ 20 - 15
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/MarkLibrary.java

@@ -1,25 +1,16 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
+import cn.com.qmth.stmms.biz.exam.model.Marker;
+import cn.com.qmth.stmms.biz.utils.ScoreItem;
+import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import org.apache.commons.lang.StringUtils;
+
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
-import org.apache.commons.lang.StringUtils;
-
-import cn.com.qmth.stmms.biz.exam.model.Marker;
-import cn.com.qmth.stmms.biz.utils.ScoreItem;
-import cn.com.qmth.stmms.common.enums.LibraryStatus;
-
 @Entity
 @Table(name = "m_library")
 public class MarkLibrary implements Serializable {
@@ -66,6 +57,12 @@ public class MarkLibrary implements Serializable {
     @Column(name = "exam_number")
     private String examNumber;
 
+    /**
+     * 考生密号
+     */
+    @Column(name = "secret_number")
+    private String secretNumber;
+
     /**
      * 多评任务编号,单评时为1
      */
@@ -176,6 +173,14 @@ public class MarkLibrary implements Serializable {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
     public Integer getMarkerId() {
         return markerId;
     }

+ 16 - 9
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/model/TrialLibrary.java

@@ -1,19 +1,12 @@
 package cn.com.qmth.stmms.biz.mark.model;
 
+import javax.persistence.*;
 import java.io.Serializable;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.Transient;
-
 /**
  * 试评任务表
- * 
- * @author luoshi
  *
+ * @author luoshi
  */
 @Entity
 @Table(name = "m_trial_library")
@@ -61,6 +54,12 @@ public class TrialLibrary implements Serializable {
     @Column(name = "exam_number")
     private String examNumber;
 
+    /**
+     * 考生密号
+     */
+    @Column(name = "secret_number")
+    private String secretNumber;
+
     /**
      * 已评人数
      */
@@ -107,6 +106,14 @@ public class TrialLibrary implements Serializable {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
     public Integer getCampusId() {
         return campusId;
     }

+ 15 - 6
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/MarkLibrarySearchQuery.java

@@ -1,14 +1,13 @@
 package cn.com.qmth.stmms.biz.mark.query;
 
-import java.util.HashSet;
-import java.util.Set;
-
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-
 import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+
+import java.util.HashSet;
+import java.util.Set;
 
 public class MarkLibrarySearchQuery extends BaseQuery<MarkLibrary> {
 
@@ -22,6 +21,8 @@ public class MarkLibrarySearchQuery extends BaseQuery<MarkLibrary> {
 
     private String examNumber;
 
+    private String secretNumber;
+
     private Set<LibraryStatus> statusSet;
 
     private int markerId;
@@ -83,6 +84,14 @@ public class MarkLibrarySearchQuery extends BaseQuery<MarkLibrary> {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
+
     public int getMarkerId() {
         return markerId;
     }

+ 11 - 3
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/query/TrialLibrarySearchQuery.java

@@ -1,10 +1,9 @@
 package cn.com.qmth.stmms.biz.mark.query;
 
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-
 import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
 
 public class TrialLibrarySearchQuery extends BaseQuery<TrialLibrary> {
 
@@ -18,6 +17,8 @@ public class TrialLibrarySearchQuery extends BaseQuery<TrialLibrary> {
 
     private String examNumber;
 
+    private String secretNumber;
+
     public void orderByExamNumber() {
         setSort(new Sort(Direction.ASC, "examNumber"));
     }
@@ -66,4 +67,11 @@ public class TrialLibrarySearchQuery extends BaseQuery<TrialLibrary> {
         this.examNumber = examNumber;
     }
 
+    public String getSecretNumber() {
+        return secretNumber;
+    }
+
+    public void setSecretNumber(String secretNumber) {
+        this.secretNumber = secretNumber;
+    }
 }

+ 23 - 20
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkLibraryServiceImpl.java

@@ -1,27 +1,25 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.mark.dao.MarkLibraryDao;
 import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
 import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 
 @Service
 public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implements MarkLibraryService {
@@ -54,8 +52,9 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
         query.setPageNumber(pageNumber);
         query.setPageSize(pageSize);
 
-        return filterClass ? libraryDao.findUnMarkedFilterClass(examId, subjectCode, groupNumber, markerId, statusSet,
-                query) : libraryDao.findUnMarked(examId, subjectCode, groupNumber, markerId, statusSet, query);
+        return filterClass ?
+                libraryDao.findUnMarkedFilterClass(examId, subjectCode, groupNumber, markerId, statusSet, query) :
+                libraryDao.findUnMarked(examId, subjectCode, groupNumber, markerId, statusSet, query);
     }
 
     @Override
@@ -111,6 +110,9 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
                 if (StringUtils.isNotBlank(query.getExamNumber())) {
                     predicates.add(cb.equal(root.get("examNumber"), query.getExamNumber()));
                 }
+                if (StringUtils.isNotBlank(query.getSecretNumber())) {
+                    predicates.add(cb.equal(root.get("secretNumber"), query.getSecretNumber()));
+                }
                 if (query.getStudentId() != null) {
                     predicates.add(cb.equal(root.get("studentId"), query.getStudentId()));
                 }
@@ -132,8 +134,9 @@ public class MarkLibraryServiceImpl extends BaseQueryService<MarkLibrary> implem
                     Predicate predicate2 = cb.le(root.get("markerScore"), query.getEndScroe());
                     predicates.add(cb.and(predicate1, predicate2));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }

+ 5 - 0
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/MarkServiceImpl.java

@@ -589,6 +589,7 @@ public class MarkServiceImpl implements MarkService {
         history.setGroupNumber(library.getGroupNumber());
         history.setStudentId(library.getStudentId());
         history.setExamNumber(library.getExamNumber());
+        history.setSecretNumber(library.getSecretNumber());
         history.setStatus(HistoryStatus.WAITING);
         history.setCreateTime(now);
         return history;
@@ -602,6 +603,7 @@ public class MarkServiceImpl implements MarkService {
         library.setCampusId(markLibrary.getCampusId());
         library.setStudentId(markLibrary.getStudentId());
         library.setExamNumber(markLibrary.getExamNumber());
+        library.setSecretNumber(markLibrary.getSecretNumber());
         library.setTaskNumber(3);
         library.setStatus(LibraryStatus.WAITING);
         libraryDao.save(library);
@@ -887,6 +889,7 @@ public class MarkServiceImpl implements MarkService {
             library.setCampusId(campus.getId());
             library.setStudentId(student.getId());
             library.setExamNumber(student.getExamNumber());
+            library.setSecretNumber(student.getSecretNumber());
             library.setTaskNumber(1);
             library.setStatus(LibraryStatus.WAITING);
             libraryDao.save(library);
@@ -917,6 +920,7 @@ public class MarkServiceImpl implements MarkService {
                     library.setCampusId(campus.getId());
                     library.setStudentId(student.getId());
                     library.setExamNumber(student.getExamNumber());
+                    library.setSecretNumber(student.getSecretNumber());
                     library.setTaskNumber(2);
                     library.setStatus(LibraryStatus.WAITING);
                     libraryDao.save(library);
@@ -948,6 +952,7 @@ public class MarkServiceImpl implements MarkService {
             library.setCampusId(campus.getId());
             library.setStudentId(student.getId());
             library.setExamNumber(student.getExamNumber());
+            library.setSecretNumber(student.getSecretNumber());
             trialLibraryDao.save(library);
         }
     }

+ 64 - 72
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TaskServiceImpl.java

@@ -1,56 +1,33 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import cn.com.qmth.stmms.biz.campus.model.Campus;
 import cn.com.qmth.stmms.biz.campus.service.CampusService;
 import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
 import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
 import cn.com.qmth.stmms.biz.exam.model.MarkGroup;
 import cn.com.qmth.stmms.biz.exam.model.Marker;
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-import cn.com.qmth.stmms.biz.exam.service.ExamService;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.MarkGroupService;
-import cn.com.qmth.stmms.biz.exam.service.MarkerService;
-import cn.com.qmth.stmms.biz.mark.model.ArbitrateHistory;
-import cn.com.qmth.stmms.biz.mark.model.ArbitrationDTO;
-import cn.com.qmth.stmms.biz.mark.model.MarkLibrary;
-import cn.com.qmth.stmms.biz.mark.model.MarkSpecialTag;
-import cn.com.qmth.stmms.biz.mark.model.MarkStepDTO;
-import cn.com.qmth.stmms.biz.mark.model.MarkTrack;
-import cn.com.qmth.stmms.biz.mark.model.PictureConfigItem;
-import cn.com.qmth.stmms.biz.mark.model.SpecialTagDTO;
-import cn.com.qmth.stmms.biz.mark.model.Task;
-import cn.com.qmth.stmms.biz.mark.model.TrackDTO;
-import cn.com.qmth.stmms.biz.mark.model.TrialHistory;
-import cn.com.qmth.stmms.biz.mark.model.TrialLibrary;
-import cn.com.qmth.stmms.biz.mark.model.TrialTag;
-import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
+import cn.com.qmth.stmms.biz.exam.service.*;
+import cn.com.qmth.stmms.biz.mark.model.*;
 import cn.com.qmth.stmms.biz.mark.query.MarkLibrarySearchQuery;
-import cn.com.qmth.stmms.biz.mark.service.MarkLibraryService;
-import cn.com.qmth.stmms.biz.mark.service.MarkSpecialTagService;
-import cn.com.qmth.stmms.biz.mark.service.MarkTrackService;
-import cn.com.qmth.stmms.biz.mark.service.TaskService;
-import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import cn.com.qmth.stmms.biz.mark.service.*;
 import cn.com.qmth.stmms.biz.user.service.UserService;
 import cn.com.qmth.stmms.common.enums.LibraryStatus;
 import cn.com.qmth.stmms.common.enums.MarkStatus;
 import cn.com.qmth.stmms.common.utils.PictureUrlBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+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.LinkedList;
+import java.util.List;
 
 /**
  * 评卷任务服务实现
- * 
+ *
  * @author LS
- * 
  */
 @Service("taskService")
 public class TaskServiceImpl implements TaskService {
@@ -110,16 +87,20 @@ public class TaskServiceImpl implements TaskService {
 
         Task task = new Task();
         task.setExist(true);
-        task.setStudentId(student.getId());
+        task.setStudentId(history.getStudentId());
         task.setLibraryId(history.getId());
+        task.setStudentNumber(history.getSecretNumber());
         task.setMarkStepList(buildMarkStep(group, null));
-        task.setPictureUrls(PictureUrlBuilder.getSliceUrls(student.getExamId(), campusId, student.getSubjectCode(),
-                student.getExamNumber(), student.getSliceCount()));
+        task.setPictureUrls(PictureUrlBuilder
+                .getSliceUrls(student.getExamId(), campusId, student.getSubjectCode(), student.getExamNumber(),
+                        student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
-        task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campusId, student.getSubjectCode(),
-                student.getExamNumber(), student.getSheetCount()));
-        task.setJsonUrl(PictureUrlBuilder.getAnswerJson(student.getExamId(), student.getSubjectCode(),
-                student.getPaperType(), student.getExamNumber()));
+        task.setSheetUrls(PictureUrlBuilder
+                .getSheetUrls(student.getExamId(), campusId, student.getSubjectCode(), student.getExamNumber(),
+                        student.getSheetCount()));
+        task.setJsonUrl(PictureUrlBuilder
+                .getAnswerJson(student.getExamId(), student.getSubjectCode(), student.getPaperType(),
+                        student.getExamNumber()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
         task.setObjectiveScore(student.getObjectiveScore() != null ? student.getObjectiveScore() : 0);
@@ -153,16 +134,19 @@ public class TaskServiceImpl implements TaskService {
         task.setStatusValue(MarkStatus.FORMAL.getValue());
         task.setStudentId(library.getStudentId());
         task.setLibraryId(library.getId());
-        // 正评显示考生
-        task.setStudentNumber(library.getStudentId().toString());
+        // 正评显示考生
+        task.setStudentNumber(library.getSecretNumber());
         task.setMarkStepList(buildMarkStep(group, library.getId()));
-        task.setPictureUrls(PictureUrlBuilder.getSliceUrls(library.getExamId(), library.getCampusId(),
-                library.getSubjectCode(), library.getExamNumber(), student.getSliceCount()));
+        task.setPictureUrls(PictureUrlBuilder
+                .getSliceUrls(library.getExamId(), library.getCampusId(), library.getSubjectCode(),
+                        library.getExamNumber(), student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
-        task.setSheetUrls(PictureUrlBuilder.getSheetUrls(library.getExamId(), library.getCampusId(),
-                library.getSubjectCode(), library.getExamNumber(), student.getSheetCount()));
-        task.setJsonUrl(PictureUrlBuilder.getAnswerJson(library.getExamId(), library.getSubjectCode(),
-                student.getPaperType(), student.getExamNumber()));
+        task.setSheetUrls(PictureUrlBuilder
+                .getSheetUrls(library.getExamId(), library.getCampusId(), library.getSubjectCode(),
+                        library.getExamNumber(), student.getSheetCount()));
+        task.setJsonUrl(PictureUrlBuilder
+                .getAnswerJson(library.getExamId(), library.getSubjectCode(), student.getPaperType(),
+                        student.getExamNumber()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(library.getExamId(), library.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(library.getExamId(), library.getSubjectCode()));
         task.setObjectiveScore(student != null ? student.getObjectiveScore() : 0);
@@ -189,20 +173,23 @@ public class TaskServiceImpl implements TaskService {
         task.setExist(true);
         task.setStatusValue(MarkStatus.TRIAL.getValue());
         task.setStatusName(MarkStatus.TRIAL.getName());
-        // 试评显示考生
-        task.setStudentNumber(library.getStudentId().toString());
+        // 试评显示考生
+        task.setStudentNumber(library.getSecretNumber());
         task.setStudentId(library.getStudentId());
         task.setLibraryId(library.getId());
         task.setMarkStepList(buildTrialStep(group, history));
-        task.setPictureUrls(PictureUrlBuilder.getSliceUrls(library.getExamId(), library.getCampusId(),
-                library.getSubjectCode(), library.getExamNumber(), student.getSliceCount()));
+        task.setPictureUrls(PictureUrlBuilder
+                .getSliceUrls(library.getExamId(), library.getCampusId(), library.getSubjectCode(),
+                        library.getExamNumber(), student.getSliceCount()));
         task.setPictureConfig(group.getPictureConfigList());
-        task.setSheetUrls(PictureUrlBuilder.getSheetUrls(library.getExamId(), library.getCampusId(),
-                library.getSubjectCode(), library.getExamNumber(), student.getSheetCount()));
+        task.setSheetUrls(PictureUrlBuilder
+                .getSheetUrls(library.getExamId(), library.getCampusId(), library.getSubjectCode(),
+                        library.getExamNumber(), student.getSheetCount()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(library.getExamId(), library.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(library.getExamId(), library.getSubjectCode()));
-        task.setJsonUrl(PictureUrlBuilder.getAnswerJson(library.getExamId(), library.getSubjectCode(),
-                student.getPaperType(), student.getExamNumber()));
+        task.setJsonUrl(PictureUrlBuilder
+                .getAnswerJson(library.getExamId(), library.getSubjectCode(), student.getPaperType(),
+                        student.getExamNumber()));
         task.setObjectiveScore(student != null ? student.getObjectiveScore() : 0);
         if (history != null) {
             task.setMarkTime(history.getMarkerTime());
@@ -215,8 +202,9 @@ public class TaskServiceImpl implements TaskService {
 
     private List<MarkStepDTO> buildMarkStep(MarkGroup group, Integer libraryId) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
-                group.getSubjectCode(), false, group.getNumber());
+        List<ExamQuestion> sList = questionService
+                .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
+                        group.getNumber());
         int number = 0;
         for (ExamQuestion question : sList) {
             number++;
@@ -239,8 +227,9 @@ public class TaskServiceImpl implements TaskService {
 
     private List<MarkStepDTO> buildTrialStep(MarkGroup group, TrialHistory history) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(),
-                group.getSubjectCode(), false, group.getNumber());
+        List<ExamQuestion> sList = questionService
+                .findByExamAndSubjectAndObjectiveAndGroupNumber(group.getExamId(), group.getSubjectCode(), false,
+                        group.getNumber());
         int number = 0;
         for (ExamQuestion question : sList) {
             number++;
@@ -315,14 +304,16 @@ public class TaskServiceImpl implements TaskService {
         Task task = new Task();
         task.setExist(true);
         task.setStudentId(studentId);
-        // task.setLibraryId(studentId);
+        task.setStudentNumber(student.getSecretNumber());
         task.setMarkStepList(buildMarkStep(student));
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
-        task.setPictureUrls(PictureUrlBuilder.getSliceUrls(student.getExamId(), campus.getId(),
-                student.getSubjectCode(), student.getExamNumber(), student.getSliceCount()));
+        task.setPictureUrls(PictureUrlBuilder
+                .getSliceUrls(student.getExamId(), campus.getId(), student.getSubjectCode(), student.getExamNumber(),
+                        student.getSliceCount()));
         task.setPictureConfig(buildPictureConfig(student.getSliceCount()));
-        task.setSheetUrls(PictureUrlBuilder.getSheetUrls(student.getExamId(), campus.getId(), student.getSubjectCode(),
-                student.getExamNumber(), student.getSheetCount()));
+        task.setSheetUrls(PictureUrlBuilder
+                .getSheetUrls(student.getExamId(), campus.getId(), student.getSubjectCode(), student.getExamNumber(),
+                        student.getSheetCount()));
         task.setAnswerUrl(PictureUrlBuilder.getAnswerUrl(student.getExamId(), student.getSubjectCode()));
         task.setPaperUrl(PictureUrlBuilder.getPaperUrl(student.getExamId(), student.getSubjectCode()));
         task.setObjectiveScore(student != null ? student.getObjectiveScore() : 0);
@@ -341,8 +332,8 @@ public class TaskServiceImpl implements TaskService {
 
     private List<MarkStepDTO> buildMarkStep(ExamStudent student) {
         List<MarkStepDTO> list = new LinkedList<MarkStepDTO>();
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), false);
+        List<ExamQuestion> sList = questionService
+                .findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
         int number = 0;
         for (ExamQuestion question : sList) {
             number++;
@@ -378,8 +369,9 @@ public class TaskServiceImpl implements TaskService {
                 stepTask.setBack(task.isBack());
                 stepTask.setLibraryId(library.getId());
                 stepTask.setHeaderId(task.getHeaderId());
-                List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(
-                        library.getExamId(), library.getSubjectCode(), false, library.getGroupNumber());
+                List<ExamQuestion> sList = questionService
+                        .findByExamAndSubjectAndObjectiveAndGroupNumber(library.getExamId(), library.getSubjectCode(),
+                                false, library.getGroupNumber());
                 if (start == end) {
                     end = end + sList.size() * 2 - 1;
                 } else {

+ 26 - 22
stmms-biz/src/main/java/cn/com/qmth/stmms/biz/mark/service/Impl/TrialServiceImpl.java

@@ -1,21 +1,5 @@
 package cn.com.qmth.stmms.biz.mark.service.Impl;
 
-import java.util.LinkedList;
-import java.util.List;
-
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaQuery;
-import javax.persistence.criteria.Predicate;
-import javax.persistence.criteria.Root;
-
-import org.apache.commons.lang.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Sort;
-import org.springframework.data.domain.Sort.Direction;
-import org.springframework.data.jpa.domain.Specification;
-import org.springframework.stereotype.Service;
-
 import cn.com.qmth.stmms.biz.common.BaseQuery;
 import cn.com.qmth.stmms.biz.common.BaseQueryService;
 import cn.com.qmth.stmms.biz.mark.dao.TrialHistoryDao;
@@ -28,6 +12,20 @@ import cn.com.qmth.stmms.biz.mark.model.TrialTag;
 import cn.com.qmth.stmms.biz.mark.model.TrialTrack;
 import cn.com.qmth.stmms.biz.mark.query.TrialLibrarySearchQuery;
 import cn.com.qmth.stmms.biz.mark.service.TrialService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.domain.Sort.Direction;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.LinkedList;
+import java.util.List;
 
 @Service
 public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements TrialService {
@@ -87,8 +85,9 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
             return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndMarkerScore(examId, subjectCode,
                     groupNumber, markerId, markerScore, query);
         } else {
-            return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerId(examId, subjectCode, groupNumber,
-                    markerId, query);
+            return historyDao
+                    .findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerId(examId, subjectCode, groupNumber, markerId,
+                            query);
         }
     }
 
@@ -140,11 +139,15 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
                 if (StringUtils.isNotBlank(query.getExamNumber())) {
                     predicates.add(cb.equal(root.get("examNumber"), query.getExamNumber()));
                 }
+                if (StringUtils.isNotBlank(query.getSecretNumber())) {
+                    predicates.add(cb.equal(root.get("secretNumber"), query.getSecretNumber()));
+                }
                 if (query.getStudentId() != null) {
                     predicates.add(cb.equal(root.get("studentId"), query.getStudentId()));
                 }
-                return predicates.isEmpty() ? cb.conjunction() : cb.and(predicates.toArray(new Predicate[predicates
-                        .size()]));
+                return predicates.isEmpty() ?
+                        cb.conjunction() :
+                        cb.and(predicates.toArray(new Predicate[predicates.size()]));
             }
         };
     }
@@ -160,7 +163,8 @@ public class TrialServiceImpl extends BaseQueryService<TrialLibrary> implements
         } else {
             query.setSort(new Sort(Direction.DESC, "markerTime"));
         }
-        return historyDao.findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndStudentId(examId, subjectCode,
-                groupNumber, markerId, studentId, query);
+        return historyDao
+                .findByExamIdAndSubjectCodeAndGroupNumberAndPkMarkerIdAndStudentId(examId, subjectCode, groupNumber,
+                        markerId, studentId, query);
     }
 }

+ 214 - 0
stmms-common/src/main/java/cn/com/qmth/stmms/common/utils/MurmurHash.java

@@ -0,0 +1,214 @@
+package cn.com.qmth.stmms.common.utils;
+
+import com.google.common.hash.Hashing;
+
+/**
+ * murmur hash 2.0.
+ * <p>
+ * The murmur hash is a relatively fast hash function from
+ * http://murmurhash.googlepages.com/ for platforms with efficient
+ * multiplication.
+ * <p>
+ * This is a re-implementation of the original C code plus some
+ * additional features.
+ * <p>
+ * Public domain.
+ *
+ * @author Viliam Holub
+ * @version 1.0.2
+ */
+public class MurmurHash {
+
+    // all methods static; private constructor.
+    private MurmurHash() {
+    }
+
+    /**
+     * Generates 32 bit hash from byte array of the given length and
+     * seed.
+     *
+     * @param data   byte array to hash
+     * @param length length of the array to hash
+     * @param seed   initial seed value
+     * @return 32 bit hash of the given array
+     */
+    public static int hash32(final byte[] data, int length, int seed) {
+        // 'm' and 'r' are mixing constants generated offline.
+        // They're not really 'magic', they just happen to work well.
+        final int m = 0x5bd1e995;
+        final int r = 24;
+
+        // Initialize the hash to a random value
+        int h = seed ^ length;
+        int length4 = length / 4;
+
+        for (int i = 0; i < length4; i++) {
+            final int i4 = i * 4;
+            int k = (data[i4 + 0] & 0xff) + ((data[i4 + 1] & 0xff) << 8) + ((data[i4 + 2] & 0xff) << 16) + (
+                    (data[i4 + 3] & 0xff) << 24);
+            k *= m;
+            k ^= k >>> r;
+            k *= m;
+            h *= m;
+            h ^= k;
+        }
+
+        // Handle the last few bytes of the input array
+        switch (length % 4) {
+        case 3:
+            h ^= (data[(length & ~3) + 2] & 0xff) << 16;
+        case 2:
+            h ^= (data[(length & ~3) + 1] & 0xff) << 8;
+        case 1:
+            h ^= (data[length & ~3] & 0xff);
+            h *= m;
+        }
+
+        h ^= h >>> 13;
+        h *= m;
+        h ^= h >>> 15;
+
+        return h;
+    }
+
+    /**
+     * Generates 32 bit hash from byte array with default seed value.
+     *
+     * @param data   byte array to hash
+     * @param length length of the array to hash
+     * @return 32 bit hash of the given array
+     */
+    public static int hash32(final byte[] data, int length) {
+        return hash32(data, length, 0x9747b28c);
+    }
+
+    /**
+     * Generates 32 bit hash from a string.
+     *
+     * @param text string to hash
+     * @return 32 bit hash of the given string
+     */
+    public static int hash32(final String text) {
+        final byte[] bytes = text.getBytes();
+        return hash32(bytes, bytes.length);
+    }
+
+    /**
+     * Generates 32 bit hash unsigned string from a string.
+     *
+     * @param text string to hash
+     * @return 32 bit hash unsigned string of the given string
+     */
+    public static String hash32string(final String text) {
+        return Integer.toUnsignedString(hash32(text));
+    }
+
+    /**
+     * Generates 32 bit hash from a substring.
+     *
+     * @param text   string to hash
+     * @param from   starting index
+     * @param length length of the substring to hash
+     * @return 32 bit hash of the given string
+     */
+    public static int hash32(final String text, int from, int length) {
+        return hash32(text.substring(from, from + length));
+    }
+
+    /**
+     * Generates 64 bit hash from byte array of the given length and seed.
+     *
+     * @param data   byte array to hash
+     * @param length length of the array to hash
+     * @param seed   initial seed value
+     * @return 64 bit hash of the given array
+     */
+    public static long hash64(final byte[] data, int length, int seed) {
+        final long m = 0xc6a4a7935bd1e995L;
+        final int r = 47;
+
+        long h = (seed & 0xffffffffl) ^ (length * m);
+
+        int length8 = length / 8;
+
+        for (int i = 0; i < length8; i++) {
+            final int i8 = i * 8;
+            long k = ((long) data[i8 + 0] & 0xff) + (((long) data[i8 + 1] & 0xff) << 8) + (((long) data[i8 + 2] & 0xff)
+                    << 16) + (((long) data[i8 + 3] & 0xff) << 24) + (((long) data[i8 + 4] & 0xff) << 32) + (
+                    ((long) data[i8 + 5] & 0xff) << 40) + (((long) data[i8 + 6] & 0xff) << 48) + (
+                    ((long) data[i8 + 7] & 0xff) << 56);
+
+            k *= m;
+            k ^= k >>> r;
+            k *= m;
+
+            h ^= k;
+            h *= m;
+        }
+
+        switch (length % 8) {
+        case 7:
+            h ^= (long) (data[(length & ~7) + 6] & 0xff) << 48;
+        case 6:
+            h ^= (long) (data[(length & ~7) + 5] & 0xff) << 40;
+        case 5:
+            h ^= (long) (data[(length & ~7) + 4] & 0xff) << 32;
+        case 4:
+            h ^= (long) (data[(length & ~7) + 3] & 0xff) << 24;
+        case 3:
+            h ^= (long) (data[(length & ~7) + 2] & 0xff) << 16;
+        case 2:
+            h ^= (long) (data[(length & ~7) + 1] & 0xff) << 8;
+        case 1:
+            h ^= (long) (data[length & ~7] & 0xff);
+            h *= m;
+        }
+        ;
+
+        h ^= h >>> r;
+        h *= m;
+        h ^= h >>> r;
+
+        return h;
+    }
+
+    /**
+     * Generates 64 bit hash from byte array with default seed value.
+     *
+     * @param data   byte array to hash
+     * @param length length of the array to hash
+     * @return 64 bit hash of the given string
+     */
+    public static long hash64(final byte[] data, int length) {
+        return hash64(data, length, 0xe17a1465);
+    }
+
+    /**
+     * Generates 64 bit hash from a string.
+     *
+     * @param text string to hash
+     * @return 64 bit hash of the given string
+     */
+    public static long hash64(final String text) {
+        final byte[] bytes = text.getBytes();
+        return hash64(bytes, bytes.length);
+    }
+
+    /**
+     * Generates 64 bit hash from a substring.
+     *
+     * @param text   string to hash
+     * @param from   starting index
+     * @param length length of the substring to hash
+     * @return 64 bit hash of the given array
+     */
+    public static long hash64(final String text, int from, int length) {
+        return hash64(text.substring(from, from + length));
+    }
+
+    public static void main(String[] args) {
+        System.out.println(hash32("1000001".getBytes(), "1000001".getBytes().length, 0));
+        System.out.println(Hashing.murmur3_32().hashBytes("1000001".getBytes()).asInt());
+    }
+
+}