1
0
Эх сурвалжийг харах

修改后台任务线程池,将手动任务与定时任务分开,定时任务允许多线程调度与执行

luoshi 5 жил өмнө
parent
commit
2c51e6280c

+ 47 - 45
stmms-biz/src/main/resources/service-context.xml

@@ -1,9 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
 <beans xmlns="http://www.springframework.org/schema/beans"
-	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
-	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
-	xmlns:task="http://www.springframework.org/schema/task"
-	xsi:schemaLocation="
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
+       xmlns:task="http://www.springframework.org/schema/task"
+       xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context
@@ -15,52 +15,54 @@ http://www.springframework.org/schema/data/jpa/spring-jpa-1.2.xsd
 http://www.springframework.org/schema/task 
 http://www.springframework.org/schema/task 
 http://www.springframework.org/schema/task/spring-task.xsd
 http://www.springframework.org/schema/task/spring-task.xsd
 ">
 ">
-	<!-- 引入属性文件 <context:property-placeholder location="classpath:jdbc.properties" 
-		/> -->
+    <!-- 引入属性文件 <context:property-placeholder location="classpath:jdbc.properties"
+        /> -->
 
 
-	<!-- 自动扫描dao和service包(自动注入) -->
-	<context:component-scan base-package="cn.com.qmth.stmms.biz" />
+    <!-- 自动扫描dao和service包(自动注入) -->
+    <context:component-scan base-package="cn.com.qmth.stmms.biz"/>
 
 
-	<import resource="spring-jpa.xml" />
+    <import resource="spring-jpa.xml"/>
 
 
-	<!-- dbcp数据源 -->
-	<bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
-		destroy-method="close">
-		<property name="driverClassName" value="${driverClassName}" />
-		<property name="url" value="${url}" />
-		<property name="username" value="${username}" />
-		<property name="password" value="${password}" />
-		<property name="maxActive" value="50" />  
-        <property name="initialSize" value="5" />  
-        <property name="maxWait" value="60000" />  
-        <property name="maxIdle" value="5" />  
-        <property name="minIdle" value="5" />
-		<property name="minEvictableIdleTimeMillis" value="1800000" />
-		<property name="timeBetweenEvictionRunsMillis" value="60000" />
-		<property name="testWhileIdle" value="true" />
-		<property name="testOnBorrow" value="false" />
-		<property name="validationQuery" value="SELECT 1 FROM DUAL" />
-	</bean>
+    <!-- dbcp数据源 -->
+    <bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
+          destroy-method="close">
+        <property name="driverClassName" value="${driverClassName}"/>
+        <property name="url" value="${url}"/>
+        <property name="username" value="${username}"/>
+        <property name="password" value="${password}"/>
+        <property name="maxActive" value="50"/>
+        <property name="initialSize" value="5"/>
+        <property name="maxWait" value="60000"/>
+        <property name="maxIdle" value="5"/>
+        <property name="minIdle" value="5"/>
+        <property name="minEvictableIdleTimeMillis" value="1800000"/>
+        <property name="timeBetweenEvictionRunsMillis" value="60000"/>
+        <property name="testWhileIdle" value="true"/>
+        <property name="testOnBorrow" value="false"/>
+        <property name="validationQuery" value="SELECT 1 FROM DUAL"/>
+    </bean>
 
 
-	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
-		<property name="entityManagerFactory" ref="entityManagerFactory" />
-	</bean>
+    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
+        <property name="entityManagerFactory" ref="entityManagerFactory"/>
+    </bean>
 
 
-	<!-- 指定事务声明的配置方式:使用注解的方式 -->
-	<tx:annotation-driven transaction-manager="transactionManager" />
+    <!-- 指定事务声明的配置方式:使用注解的方式 -->
+    <tx:annotation-driven transaction-manager="transactionManager"/>
 
 
-	<bean id="entityManagerFactory"
-		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
-		<property name="dataSource" ref="dataSource" />
-		<property name="jpaVendorAdapter">
-			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
-				<property name="database" value="MYSQL" />
-				<property name="showSql" value="false" />
-				<property name="generateDdl" value="true" />
-			</bean>
-		</property>
-	</bean>
+    <bean id="entityManagerFactory"
+          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+        <property name="dataSource" ref="dataSource"/>
+        <property name="jpaVendorAdapter">
+            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
+                <property name="database" value="MYSQL"/>
+                <property name="showSql" value="false"/>
+                <property name="generateDdl" value="true"/>
+            </bean>
+        </property>
+    </bean>
 
 
-	<task:executor id="stmms-executor" pool-size="10" />
-	<task:annotation-driven executor="stmms-executor" />
+    <task:executor id="task-executor" pool-size="5"/>
+    <task:executor id="cron-executor" pool-size="5"/>
+    <task:scheduler id="cron-scheduler" pool-size="5"/>
+    <task:annotation-driven executor="cron-executor" scheduler="cron-scheduler"/>
 </beans>
 </beans>

+ 111 - 110
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ImageCheckController.java

@@ -1,110 +1,111 @@
-package cn.com.qmth.stmms.admin.exam;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.task.AsyncTaskExecutor;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import cn.com.qmth.stmms.admin.dto.ExceptionStudentDTO;
-import cn.com.qmth.stmms.admin.thread.ImageCheckThread;
-import cn.com.qmth.stmms.admin.utils.UpyunConfig;
-import cn.com.qmth.stmms.biz.campus.service.CampusService;
-import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
-import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.utils.ExportExcel;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-
-@Controller
-@RequestMapping("/admin/exam/check/image")
-public class ImageCheckController extends BaseExamController {
-
-    @Autowired
-    private CampusService campusService;
-
-    @Autowired
-    private ExamStudentService studentService;
-
-    @Autowired
-    private UpyunConfig config;
-
-    @Autowired
-    private AsyncTaskExecutor taskExecutor;
-
-    @Value("${file.root}")
-    private String baseDir;
-
-    private AtomicBoolean running = new AtomicBoolean(false);
-
-    @RequestMapping
-    public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        int examId = getSessionExamId(request);
-        ModelAndView view = new ModelAndView("modules/exam/checkImage");
-        query.setExamId(examId);
-        query.setUpload(true);
-        query.setAbsent(false);
-        query.setException(true);
-        query.orderByExamNumber();
-        subjectFilter(query, wu);
-        query = studentService.findByQuery(query);
-
-        view.addObject("query", query);
-        view.addObject("subjectList", getExamSubject(examId, wu));
-        view.addObject("campusList", studentService.findDistinctCampusName(examId));
-        view.addObject("running", running.get());
-        return view;
-    }
-
-    @RequestMapping("/run")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public ModelAndView checkImage(HttpServletRequest request) {
-        int examId = getSessionExamId(request);
-        if (running.compareAndSet(false, true) == true) {
-            ImageCheckThread thread = new ImageCheckThread(examId, running, config, baseDir, studentService,
-                    campusService);
-            taskExecutor.submit(thread);
-        }
-        return new ModelAndView("redirect:/admin/exam/check/image");
-    }
-
-    @RequestMapping("/export")
-    public String export(ExamStudentSearchQuery query, HttpServletRequest request, HttpServletResponse response,
-            RedirectAttributes redirectAttributes) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        List<ExceptionStudentDTO> list = new LinkedList<ExceptionStudentDTO>();
-        query.setExamId(getSessionExamId(request));
-        query.setUpload(true);
-        query.setAbsent(false);
-        query.setException(true);
-        query.setPageNumber(1);
-        query.setPageSize(Integer.MAX_VALUE);
-        subjectFilter(query, wu);
-        query = studentService.findByQuery(query);
-        for (ExamStudent student : query.getResult()) {
-            ExceptionStudentDTO dto = new ExceptionStudentDTO(student);
-            list.add(dto);
-        }
-        String fileName = "异常名单.xlsx";
-        try {
-            new ExportExcel("异常名单", ExceptionStudentDTO.class).setDataList(list).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导出失败!" + e.getMessage());
-            return "redirect:/admin/exam/check/image";
-        }
-    }
-}
+package cn.com.qmth.stmms.admin.exam;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.task.AsyncTaskExecutor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import cn.com.qmth.stmms.admin.dto.ExceptionStudentDTO;
+import cn.com.qmth.stmms.admin.thread.ImageCheckThread;
+import cn.com.qmth.stmms.admin.utils.UpyunConfig;
+import cn.com.qmth.stmms.biz.campus.service.CampusService;
+import cn.com.qmth.stmms.biz.exam.model.ExamStudent;
+import cn.com.qmth.stmms.biz.exam.query.ExamStudentSearchQuery;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+
+@Controller
+@RequestMapping("/admin/exam/check/image")
+public class ImageCheckController extends BaseExamController {
+
+    @Autowired
+    private CampusService campusService;
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Autowired
+    private UpyunConfig config;
+
+    @Qualifier("task-executor")
+    @Autowired
+    private AsyncTaskExecutor taskExecutor;
+
+    @Value("${file.root}")
+    private String baseDir;
+
+    private AtomicBoolean running = new AtomicBoolean(false);
+
+    @RequestMapping
+    public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        int examId = getSessionExamId(request);
+        ModelAndView view = new ModelAndView("modules/exam/checkImage");
+        query.setExamId(examId);
+        query.setUpload(true);
+        query.setAbsent(false);
+        query.setException(true);
+        query.orderByExamNumber();
+        subjectFilter(query, wu);
+        query = studentService.findByQuery(query);
+
+        view.addObject("query", query);
+        view.addObject("subjectList", getExamSubject(examId, wu));
+        view.addObject("campusList", studentService.findDistinctCampusName(examId));
+        view.addObject("running", running.get());
+        return view;
+    }
+
+    @RequestMapping("/run")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public ModelAndView checkImage(HttpServletRequest request) {
+        int examId = getSessionExamId(request);
+        if (running.compareAndSet(false, true) == true) {
+            ImageCheckThread thread = new ImageCheckThread(examId, running, config, baseDir, studentService, campusService);
+            taskExecutor.submit(thread);
+        }
+        return new ModelAndView("redirect:/admin/exam/check/image");
+    }
+
+    @RequestMapping("/export")
+    public String export(ExamStudentSearchQuery query, HttpServletRequest request, HttpServletResponse response,
+            RedirectAttributes redirectAttributes) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        List<ExceptionStudentDTO> list = new LinkedList<ExceptionStudentDTO>();
+        query.setExamId(getSessionExamId(request));
+        query.setUpload(true);
+        query.setAbsent(false);
+        query.setException(true);
+        query.setPageNumber(1);
+        query.setPageSize(Integer.MAX_VALUE);
+        subjectFilter(query, wu);
+        query = studentService.findByQuery(query);
+        for (ExamStudent student : query.getResult()) {
+            ExceptionStudentDTO dto = new ExceptionStudentDTO(student);
+            list.add(dto);
+        }
+        String fileName = "异常名单.xlsx";
+        try {
+            new ExportExcel("异常名单", ExceptionStudentDTO.class).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出失败!" + e.getMessage());
+            return "redirect:/admin/exam/check/image";
+        }
+    }
+}

+ 23 - 26
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/MarkQualityController.java

@@ -10,6 +10,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
@@ -62,6 +63,7 @@ public class MarkQualityController extends BaseExamController {
     @Autowired
     @Autowired
     private LockService lockService;
     private LockService lockService;
 
 
+    @Qualifier("task-executor")
     @Autowired
     @Autowired
     private AsyncTaskExecutor taskExecutor;
     private AsyncTaskExecutor taskExecutor;
 
 
@@ -112,10 +114,8 @@ public class MarkQualityController extends BaseExamController {
         }
         }
         if (query.getSubjectCode() != null && query.getGroupNumber() != null) {
         if (query.getSubjectCode() != null && query.getGroupNumber() != null) {
             query = markerService.findByQuery(query);
             query = markerService.findByQuery(query);
-            model.addAttribute(
-                    "running",
-                    lockService.isLocked(LockType.BATCH_QUALITY,
-                            getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
+            model.addAttribute("running",
+                    lockService.isLocked(LockType.BATCH_QUALITY, getLockKey(examId, query.getSubjectCode(), query.getGroupNumber())));
         }
         }
         model.addAttribute("query", query);
         model.addAttribute("query", query);
         model.addAttribute("subjectList", subjectList);
         model.addAttribute("subjectList", subjectList);
@@ -124,15 +124,15 @@ public class MarkQualityController extends BaseExamController {
     }
     }
 
 
     @RequestMapping("/update")
     @RequestMapping("/update")
-    public String update(HttpServletRequest request, RedirectAttributes redirectAttributes,
-            @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
+    public String update(HttpServletRequest request, RedirectAttributes redirectAttributes, @RequestParam String subjectCode,
+            @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         if (group != null) {
         if (group != null) {
             final String lockKey = getLockKey(examId, subjectCode, groupNumber);
             final String lockKey = getLockKey(examId, subjectCode, groupNumber);
             if (lockService.trylock(LockType.BATCH_QUALITY, lockKey)) {
             if (lockService.trylock(LockType.BATCH_QUALITY, lockKey)) {
-                taskExecutor.submit(new MarkQualityThread(markerService.findByExamAndSubjectAndGroup(examId,
-                        subjectCode, groupNumber), lockKey));
+                taskExecutor.submit(new MarkQualityThread(markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber),
+                        lockKey));
             }
             }
             redirectAttributes.addAttribute("groupNumber", groupNumber);
             redirectAttributes.addAttribute("groupNumber", groupNumber);
         }
         }
@@ -145,17 +145,16 @@ public class MarkQualityController extends BaseExamController {
     }
     }
 
 
     @RequestMapping("/chart")
     @RequestMapping("/chart")
-    public String chart(HttpServletRequest request, Model model, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+    public String chart(HttpServletRequest request, Model model, @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         MarkGroup group = groupService.findOne(examId, subjectCode, groupNumber);
         if (group != null) {
         if (group != null) {
             List<MarkerVO> list = new ArrayList<MarkerVO>();
             List<MarkerVO> list = new ArrayList<MarkerVO>();
             List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
             List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
-            List<Double> scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED,LibraryStatus.INSPECTED);
+            List<Double> scores = libraryService.findScore(examId, subjectCode, groupNumber, LibraryStatus.MARKED, LibraryStatus.INSPECTED);
             for (Marker marker : markers) {
             for (Marker marker : markers) {
-                List<Object[]> libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber,
-                        marker.getId(), LibraryStatus.MARKED,LibraryStatus.INSPECTED);
+                List<Object[]> libraries = libraryService
+                        .findScoreCount(examId, subjectCode, groupNumber, marker.getId(), LibraryStatus.MARKED, LibraryStatus.INSPECTED);
                 Map<Double, Long> scoreCount = new HashMap<Double, Long>();
                 Map<Double, Long> scoreCount = new HashMap<Double, Long>();
                 for (Object[] array : libraries) {
                 for (Object[] array : libraries) {
                     Double score = (Double) array[0];
                     Double score = (Double) array[0];
@@ -169,8 +168,8 @@ public class MarkQualityController extends BaseExamController {
                 vo.setScoreCount(scoreCount);
                 vo.setScoreCount(scoreCount);
                 list.add(vo);
                 list.add(vo);
             }
             }
-            group.setQuestionList(questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode,
-                    false, group.getNumber()));
+            group.setQuestionList(
+                    questionService.findByExamAndSubjectAndObjectiveAndGroupNumber(examId, subjectCode, false, group.getNumber()));
             model.addAttribute("scores", scores);
             model.addAttribute("scores", scores);
             model.addAttribute("markers", list);
             model.addAttribute("markers", list);
             model.addAttribute("group", group);
             model.addAttribute("group", group);
@@ -183,14 +182,13 @@ public class MarkQualityController extends BaseExamController {
 
 
     @RequestMapping("/getChart")
     @RequestMapping("/getChart")
     @ResponseBody
     @ResponseBody
-    public List<MarkerVO> getChart(HttpServletRequest request, @RequestParam String subjectCode,
-            @RequestParam Integer groupNumber) {
+    public List<MarkerVO> getChart(HttpServletRequest request, @RequestParam String subjectCode, @RequestParam Integer groupNumber) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         List<MarkerVO> list = new ArrayList<MarkerVO>();
         List<MarkerVO> list = new ArrayList<MarkerVO>();
         List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
         List<Marker> markers = markerService.findByExamAndSubjectAndGroup(examId, subjectCode, groupNumber);
         for (Marker marker : markers) {
         for (Marker marker : markers) {
-            List<Object[]> libraries = libraryService.findScoreCount(examId, subjectCode, groupNumber, marker.getId(),
-                    LibraryStatus.MARKED,LibraryStatus.INSPECTED);
+            List<Object[]> libraries = libraryService
+                    .findScoreCount(examId, subjectCode, groupNumber, marker.getId(), LibraryStatus.MARKED, LibraryStatus.INSPECTED);
             MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
             MarkLibrarySearchQuery query = new MarkLibrarySearchQuery();
             query.setMarkerId(marker.getId());
             query.setMarkerId(marker.getId());
             query.addStatus(LibraryStatus.MARKED);
             query.addStatus(LibraryStatus.MARKED);
@@ -218,8 +216,7 @@ public class MarkQualityController extends BaseExamController {
 
 
     @RequestMapping("/batchProcess")
     @RequestMapping("/batchProcess")
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public String batchProcess(Model model, HttpServletRequest request, @RequestParam Integer markerId,
-            @RequestParam Double markerScore) {
+    public String batchProcess(Model model, HttpServletRequest request, @RequestParam Integer markerId, @RequestParam Double markerScore) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         Marker marker = markerService.findById(markerId);
         Marker marker = markerService.findById(markerId);
         WebUser wu = RequestUtils.getWebUser(request);
         WebUser wu = RequestUtils.getWebUser(request);
@@ -243,9 +240,8 @@ public class MarkQualityController extends BaseExamController {
     @RequestMapping(value = "/history", method = RequestMethod.POST)
     @RequestMapping(value = "/history", method = RequestMethod.POST)
     @ResponseBody
     @ResponseBody
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
     @RoleRequire({ Role.SCHOOL_ADMIN, Role.SUBJECT_HEADER })
-    public List<Task> getTask(HttpServletRequest request, @RequestParam Integer markerId,
-            @RequestParam Double markerScore, @RequestParam(required = false) Integer pageNumber,
-            @RequestParam(required = false) Integer pageSize) {
+    public List<Task> getTask(HttpServletRequest request, @RequestParam Integer markerId, @RequestParam Double markerScore,
+            @RequestParam(required = false) Integer pageNumber, @RequestParam(required = false) Integer pageSize) {
         Marker marker = markerService.findById(markerId);
         Marker marker = markerService.findById(markerId);
         List<Task> list = new ArrayList<>();
         List<Task> list = new ArrayList<>();
         MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
         MarkGroup group = groupService.findOne(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber());
@@ -276,8 +272,9 @@ public class MarkQualityController extends BaseExamController {
         } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
         } else if (group != null && group.getStatus() == MarkStatus.TRIAL) {
             // 试评查找给分历史记录
             // 试评查找给分历史记录
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
             List<TrialHistory> historyList = new ArrayList<TrialHistory>();
-            historyList = trialService.findHistory(marker.getExamId(), marker.getSubjectCode(),
-                    marker.getGroupNumber(), marker.getId(), pageNumber, pageSize, null,markerScore);
+            historyList = trialService
+                    .findHistory(marker.getExamId(), marker.getSubjectCode(), marker.getGroupNumber(), marker.getId(), pageNumber, pageSize,
+                            null, markerScore);
             for (TrialHistory history : historyList) {
             for (TrialHistory history : historyList) {
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());
                 TrialLibrary library = trialService.findLibrary(history.getLibraryId());
                 if (library != null) {
                 if (library != null) {

+ 115 - 113
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreCheckController.java

@@ -1,113 +1,115 @@
-package cn.com.qmth.stmms.admin.exam;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.core.task.AsyncTaskExecutor;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-import org.springframework.web.servlet.mvc.support.RedirectAttributes;
-
-import cn.com.qmth.stmms.admin.dto.ExceptionQuestionDTO;
-import cn.com.qmth.stmms.admin.thread.ScoreCheckThread;
-import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
-import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
-import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
-import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
-import cn.com.qmth.stmms.biz.exam.service.query.ExamQuestionSearchQuery;
-import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
-import cn.com.qmth.stmms.common.domain.WebUser;
-import cn.com.qmth.stmms.common.enums.Role;
-import cn.com.qmth.stmms.common.utils.ExportExcel;
-import cn.com.qmth.stmms.common.utils.RequestUtils;
-
-@Controller
-@RequestMapping("/admin/exam/check/score")
-public class ScoreCheckController extends BaseExamController {
-
-    @Autowired
-    private ExamStudentService studentService;
-
-    @Autowired
-    private ExamQuestionService questionService;
-
-    @Autowired
-    private ExamSubjectService subjectService;
-
-    @Autowired
-    private AsyncTaskExecutor taskExecutor;
-
-    private AtomicBoolean running = new AtomicBoolean(false);
-
-    @RequestMapping
-    public ModelAndView list(HttpServletRequest request, ExamQuestionSearchQuery query) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        int examId = getSessionExamId(request);
-        ModelAndView view = new ModelAndView("modules/exam/checkScore");
-        query.setExamId(examId);
-        query.setTotalScoreGt(0d);
-        query.setTotalCountGt(0);
-        query.orderBySubjectAndNumber();
-        if (query.getZeroRateGt() == null) {
-            query.setZeroRateGt(1.0);
-        }
-        subjectFilter(query, wu);
-        query = questionService.findByQuery(query);
-
-        for (ExamQuestion q : query.getResult()) {
-            q.setSubject((subjectService.find(q.getExamId(), q.getSubjectCode())));
-        }
-
-        view.addObject("query", query);
-        view.addObject("subjectList", getExamSubject(examId, wu));
-        view.addObject("running", running.get());
-        return view;
-    }
-
-    @RequestMapping("/run")
-    @RoleRequire(Role.SCHOOL_ADMIN)
-    public ModelAndView checkScore(HttpServletRequest request) {
-        int examId = getSessionExamId(request);
-        if (running.compareAndSet(false, true) == true) {
-            ScoreCheckThread thread = new ScoreCheckThread(examId, running, studentService, questionService);
-            taskExecutor.submit(thread);
-        }
-        return new ModelAndView("redirect:/admin/exam/check/score");
-    }
-
-    @RequestMapping("/export")
-    public String export(ExamQuestionSearchQuery query, HttpServletRequest request, HttpServletResponse response,
-            RedirectAttributes redirectAttributes) {
-        WebUser wu = RequestUtils.getWebUser(request);
-        int examId = getSessionExamId(request);
-        List<ExceptionQuestionDTO> list = new LinkedList<ExceptionQuestionDTO>();
-        query.setExamId(examId);
-        query.setTotalCountGt(0);
-        query.orderBySubjectAndNumber();
-        query.setPageNumber(1);
-        query.setPageSize(Integer.MAX_VALUE);
-        subjectFilter(query, wu);
-        query = questionService.findByQuery(query);
-        for (ExamQuestion question : query.getResult()) {
-            if (question.getTotalScore() > 0) {
-                ExceptionQuestionDTO dto = new ExceptionQuestionDTO(question,
-                        subjectService.find(question.getExamId(), question.getSubjectCode()));
-                list.add(dto);
-            }
-        }
-        String fileName = "异常试题.xlsx";
-        try {
-            new ExportExcel("异常试题", ExceptionQuestionDTO.class).setDataList(list).write(response, fileName).dispose();
-            return null;
-        } catch (Exception e) {
-            addMessage(redirectAttributes, "导出失败!" + e.getMessage());
-            return "redirect:/admin/exam/check/score";
-        }
-    }
-}
+package cn.com.qmth.stmms.admin.exam;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.core.task.AsyncTaskExecutor;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import cn.com.qmth.stmms.admin.dto.ExceptionQuestionDTO;
+import cn.com.qmth.stmms.admin.thread.ScoreCheckThread;
+import cn.com.qmth.stmms.biz.exam.model.ExamQuestion;
+import cn.com.qmth.stmms.biz.exam.service.ExamQuestionService;
+import cn.com.qmth.stmms.biz.exam.service.ExamStudentService;
+import cn.com.qmth.stmms.biz.exam.service.ExamSubjectService;
+import cn.com.qmth.stmms.biz.exam.service.query.ExamQuestionSearchQuery;
+import cn.com.qmth.stmms.common.auth.annotation.RoleRequire;
+import cn.com.qmth.stmms.common.domain.WebUser;
+import cn.com.qmth.stmms.common.enums.Role;
+import cn.com.qmth.stmms.common.utils.ExportExcel;
+import cn.com.qmth.stmms.common.utils.RequestUtils;
+
+@Controller
+@RequestMapping("/admin/exam/check/score")
+public class ScoreCheckController extends BaseExamController {
+
+    @Autowired
+    private ExamStudentService studentService;
+
+    @Autowired
+    private ExamQuestionService questionService;
+
+    @Autowired
+    private ExamSubjectService subjectService;
+
+    @Qualifier("task-executor")
+    @Autowired
+    private AsyncTaskExecutor taskExecutor;
+
+    private AtomicBoolean running = new AtomicBoolean(false);
+
+    @RequestMapping
+    public ModelAndView list(HttpServletRequest request, ExamQuestionSearchQuery query) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        int examId = getSessionExamId(request);
+        ModelAndView view = new ModelAndView("modules/exam/checkScore");
+        query.setExamId(examId);
+        query.setTotalScoreGt(0d);
+        query.setTotalCountGt(0);
+        query.orderBySubjectAndNumber();
+        if (query.getZeroRateGt() == null) {
+            query.setZeroRateGt(1.0);
+        }
+        subjectFilter(query, wu);
+        query = questionService.findByQuery(query);
+
+        for (ExamQuestion q : query.getResult()) {
+            q.setSubject((subjectService.find(q.getExamId(), q.getSubjectCode())));
+        }
+
+        view.addObject("query", query);
+        view.addObject("subjectList", getExamSubject(examId, wu));
+        view.addObject("running", running.get());
+        return view;
+    }
+
+    @RequestMapping("/run")
+    @RoleRequire(Role.SCHOOL_ADMIN)
+    public ModelAndView checkScore(HttpServletRequest request) {
+        int examId = getSessionExamId(request);
+        if (running.compareAndSet(false, true) == true) {
+            ScoreCheckThread thread = new ScoreCheckThread(examId, running, studentService, questionService);
+            taskExecutor.submit(thread);
+        }
+        return new ModelAndView("redirect:/admin/exam/check/score");
+    }
+
+    @RequestMapping("/export")
+    public String export(ExamQuestionSearchQuery query, HttpServletRequest request, HttpServletResponse response,
+            RedirectAttributes redirectAttributes) {
+        WebUser wu = RequestUtils.getWebUser(request);
+        int examId = getSessionExamId(request);
+        List<ExceptionQuestionDTO> list = new LinkedList<ExceptionQuestionDTO>();
+        query.setExamId(examId);
+        query.setTotalCountGt(0);
+        query.orderBySubjectAndNumber();
+        query.setPageNumber(1);
+        query.setPageSize(Integer.MAX_VALUE);
+        subjectFilter(query, wu);
+        query = questionService.findByQuery(query);
+        for (ExamQuestion question : query.getResult()) {
+            if (question.getTotalScore() > 0) {
+                ExceptionQuestionDTO dto = new ExceptionQuestionDTO(question,
+                        subjectService.find(question.getExamId(), question.getSubjectCode()));
+                list.add(dto);
+            }
+        }
+        String fileName = "异常试题.xlsx";
+        try {
+            new ExportExcel("异常试题", ExceptionQuestionDTO.class).setDataList(list).write(response, fileName).dispose();
+            return null;
+        } catch (Exception e) {
+            addMessage(redirectAttributes, "导出失败!" + e.getMessage());
+            return "redirect:/admin/exam/check/score";
+        }
+    }
+}

+ 23 - 26
stmms-web/src/main/java/cn/com/qmth/stmms/admin/exam/ScoreController.java

@@ -12,6 +12,7 @@ import net.sf.json.JSONObject;
 
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
@@ -74,6 +75,7 @@ public class ScoreController extends BaseExamController {
     @Autowired
     @Autowired
     private MarkGroupService groupService;
     private MarkGroupService groupService;
 
 
+    @Qualifier("task-executor")
     @Autowired
     @Autowired
     private AsyncTaskExecutor taskExecutor;
     private AsyncTaskExecutor taskExecutor;
 
 
@@ -102,8 +104,7 @@ public class ScoreController extends BaseExamController {
     private String answerServer;
     private String answerServer;
 
 
     @RequestMapping
     @RequestMapping
-    public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query,
-            @RequestParam(defaultValue = "0") Integer filter) {
+    public ModelAndView list(HttpServletRequest request, ExamStudentSearchQuery query, @RequestParam(defaultValue = "0") Integer filter) {
         WebUser wu = RequestUtils.getWebUser(request);
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         String subjectCode = RequestUtils.getSession(request).getParameter("subjectCode");
         String subjectCode = RequestUtils.getSession(request).getParameter("subjectCode");
@@ -126,11 +127,12 @@ public class ScoreController extends BaseExamController {
             buildSheetUrl(student);
             buildSheetUrl(student);
             buildPackageUrl(student);
             buildPackageUrl(student);
             buildAnswerUrl(student);
             buildAnswerUrl(student);
-            student.setAnswerUrl(PictureUrlBuilder.getAnswerJson(student.getExamId(), student.getSubjectCode(),
-                    student.getPaperType(), student.getExamNumber()));
+            student.setAnswerUrl(PictureUrlBuilder
+                    .getAnswerJson(student.getExamId(), student.getSubjectCode(), student.getPaperType(), student.getExamNumber()));
         }
         }
-        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ? enableExport(examId,
-                query.getSubjectCode()) : enableExport(examId);
+        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ?
+                enableExport(examId, query.getSubjectCode()) :
+                enableExport(examId);
         if (exportMessage != null) {
         if (exportMessage != null) {
             view.addObject("exportMessage", exportMessage);
             view.addObject("exportMessage", exportMessage);
             view.addObject("enableExport", false);
             view.addObject("enableExport", false);
@@ -151,8 +153,7 @@ public class ScoreController extends BaseExamController {
     }
     }
 
 
     @RequestMapping("/detail")
     @RequestMapping("/detail")
-    public ModelAndView detail(HttpServletRequest request, @RequestParam String examNumber,
-            @RequestParam String queryString) {
+    public ModelAndView detail(HttpServletRequest request, @RequestParam String examNumber, @RequestParam String queryString) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
         if (student != null) {
         if (student != null) {
@@ -210,8 +211,8 @@ public class ScoreController extends BaseExamController {
     public ModelAndView calculate(HttpServletRequest request) {
     public ModelAndView calculate(HttpServletRequest request) {
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
         if (lockService.trylock(LockType.SCORE_CALCULATE, examId)) {
         if (lockService.trylock(LockType.SCORE_CALCULATE, examId)) {
-            ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService,
-                    questionService, markService, reportService, examService, subjectService, groupService);
+            ScoreCalculateThread thread = new ScoreCalculateThread(examId, lockService, studentService, questionService, markService,
+                    reportService, examService, subjectService, groupService);
             taskExecutor.submit(thread);
             taskExecutor.submit(thread);
         }
         }
         return new ModelAndView("redirect:/admin/exam/score");
         return new ModelAndView("redirect:/admin/exam/score");
@@ -222,8 +223,9 @@ public class ScoreController extends BaseExamController {
             RedirectAttributes redirectAttributes) {
             RedirectAttributes redirectAttributes) {
         WebUser wu = RequestUtils.getWebUser(request);
         WebUser wu = RequestUtils.getWebUser(request);
         int examId = getSessionExamId(request);
         int examId = getSessionExamId(request);
-        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ? enableExport(examId,
-                query.getSubjectCode()) : enableExport(examId);
+        String exportMessage = StringUtils.isNotBlank(query.getSubjectCode()) ?
+                enableExport(examId, query.getSubjectCode()) :
+                enableExport(examId);
         if (exportMessage == null && StringUtils.isNotBlank(query.getSubjectCode())) {
         if (exportMessage == null && StringUtils.isNotBlank(query.getSubjectCode())) {
             exportMessage = enableExport(examId, query.getSubjectCode());
             exportMessage = enableExport(examId, query.getSubjectCode());
         }
         }
@@ -266,8 +268,7 @@ public class ScoreController extends BaseExamController {
 
 
     private List<String> getOptionHeader(int examId, String subjectCode, String paerType) {
     private List<String> getOptionHeader(int examId, String subjectCode, String paerType) {
         List<String> headerList = new ArrayList<String>();
         List<String> headerList = new ArrayList<String>();
-        List<ExamQuestion> oQuestions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId,
-                subjectCode, true, paerType);
+        List<ExamQuestion> oQuestions = questionService.findByExamAndSubjectAndObjectiveAndPaperType(examId, subjectCode, true, paerType);
         List<ExamQuestion> sQestions = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
         List<ExamQuestion> sQestions = questionService.findByExamAndSubjectAndObjective(examId, subjectCode, false);
         for (ExamQuestion examQuestion : oQuestions) {
         for (ExamQuestion examQuestion : oQuestions) {
             headerList.add(getTitle(examQuestion) + "选项");
             headerList.add(getTitle(examQuestion) + "选项");
@@ -323,8 +324,8 @@ public class ScoreController extends BaseExamController {
     private List<ScoreItem> buildScoreList(ExamStudent student) {
     private List<ScoreItem> buildScoreList(ExamStudent student) {
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
         List<ScoreItem> scoreList = new LinkedList<ScoreItem>();
 
 
-        List<ExamQuestion> oList = questionService.findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(),
-                student.getSubjectCode(), true, student.getPaperType());
+        List<ExamQuestion> oList = questionService
+                .findByExamAndSubjectAndObjectiveAndPaperType(student.getExamId(), student.getSubjectCode(), true, student.getPaperType());
         List<ScoreItem> list1 = student.getScoreList(true);
         List<ScoreItem> list1 = student.getScoreList(true);
         int index = 0;
         int index = 0;
         for (ExamQuestion question : oList) {
         for (ExamQuestion question : oList) {
@@ -339,8 +340,7 @@ public class ScoreController extends BaseExamController {
         }
         }
         scoreList.addAll(list1);
         scoreList.addAll(list1);
 
 
-        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(),
-                student.getSubjectCode(), false);
+        List<ExamQuestion> sList = questionService.findByExamAndSubjectAndObjective(student.getExamId(), student.getSubjectCode(), false);
         List<ScoreItem> list2 = student.getScoreList(false);
         List<ScoreItem> list2 = student.getScoreList(false);
         index = 0;
         index = 0;
         for (ExamQuestion question : sList) {
         for (ExamQuestion question : sList) {
@@ -360,16 +360,14 @@ public class ScoreController extends BaseExamController {
 
 
     private void buildSheetUrl(ExamStudent student) {
     private void buildSheetUrl(ExamStudent student) {
         // 改为内部原图浏览地址,直接附带标记内容
         // 改为内部原图浏览地址,直接附带标记内容
-        student.setSheetUrls(PictureUrlBuilder.getInnerSheetUrls(student.getExamId(), student.getExamNumber(),
-                student.getSheetCount()));
+        student.setSheetUrls(PictureUrlBuilder.getInnerSheetUrls(student.getExamId(), student.getExamNumber(), student.getSheetCount()));
     }
     }
 
 
     private void buildPackageUrl(ExamStudent student) {
     private void buildPackageUrl(ExamStudent student) {
         if (StringUtils.isNotBlank(student.getPackageCode())) {
         if (StringUtils.isNotBlank(student.getPackageCode())) {
             ExamPackage ep = packageService.find(student.getExamId(), student.getPackageCode());
             ExamPackage ep = packageService.find(student.getExamId(), student.getPackageCode());
             if (ep != null && ep.getPicCount() > 0) {
             if (ep != null && ep.getPicCount() > 0) {
-                student.setPackageUrls(PictureUrlBuilder.getPackageUrls(student.getExamId(), student.getPackageCode(),
-                        ep.getPicCount()));
+                student.setPackageUrls(PictureUrlBuilder.getPackageUrls(student.getExamId(), student.getPackageCode(), ep.getPicCount()));
             }
             }
         }
         }
     }
     }
@@ -408,8 +406,8 @@ public class ScoreController extends BaseExamController {
 
 
         List<ExamSubject> subjects = subjectService.list(examId);
         List<ExamSubject> subjects = subjectService.list(examId);
         for (ExamSubject examSubject : subjects) {
         for (ExamSubject examSubject : subjects) {
-            List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, examSubject.getCode(),
-                    MarkStatus.FORMAL, MarkStatus.TRIAL);
+            List<MarkGroup> groups = groupService
+                    .findByExamAndSubjectAndStatus(examId, examSubject.getCode(), MarkStatus.FORMAL, MarkStatus.TRIAL);
             if (groups != null && !groups.isEmpty()) {
             if (groups != null && !groups.isEmpty()) {
                 String message = examSubject.getCode() + " 科目未评卷完成";
                 String message = examSubject.getCode() + " 科目未评卷完成";
                 return message;
                 return message;
@@ -426,8 +424,7 @@ public class ScoreController extends BaseExamController {
             return message;
             return message;
         }
         }
 
 
-        List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL,
-                MarkStatus.TRIAL);
+        List<MarkGroup> groups = groupService.findByExamAndSubjectAndStatus(examId, subjectCode, MarkStatus.FORMAL, MarkStatus.TRIAL);
         if (groups != null && !groups.isEmpty()) {
         if (groups != null && !groups.isEmpty()) {
             String message = subjectCode + " 科目未评卷完成";
             String message = subjectCode + " 科目未评卷完成";
             return message;
             return message;

+ 7 - 6
stmms-web/src/main/java/cn/com/qmth/stmms/api/controller/PictureController.java

@@ -15,6 +15,7 @@ import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatus;
@@ -61,6 +62,7 @@ public class PictureController {
     @Autowired
     @Autowired
     private LockService lockService;
     private LockService lockService;
 
 
+    @Qualifier("task-executor")
     @Autowired
     @Autowired
     private AsyncTaskExecutor taskExecutor;
     private AsyncTaskExecutor taskExecutor;
 
 
@@ -75,8 +77,7 @@ public class PictureController {
 
 
     @RequestMapping("/sheet/{examId}/{examNumber}-{index}")
     @RequestMapping("/sheet/{examId}/{examNumber}-{index}")
     public void getSheet(HttpServletResponse response, @PathVariable Integer examId, @PathVariable String examNumber,
     public void getSheet(HttpServletResponse response, @PathVariable Integer examId, @PathVariable String examNumber,
-            @PathVariable Integer index, @RequestParam(required = false, defaultValue = "true") Boolean withTag)
-            throws IOException {
+            @PathVariable Integer index, @RequestParam(required = false, defaultValue = "true") Boolean withTag) throws IOException {
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
         ExamStudent student = studentService.findByExamIdAndExamNumber(examId, examNumber);
         if (student == null || !student.isUpload() || index < 1 || index > student.getSheetCount()) {
         if (student == null || !student.isUpload() || index < 1 || index > student.getSheetCount()) {
             response.sendError(HttpStatus.NOT_FOUND.value());
             response.sendError(HttpStatus.NOT_FOUND.value());
@@ -131,8 +132,8 @@ public class PictureController {
 
 
     public BufferedImage getSheetImage(ExamStudent student, int index) throws FileNotFoundException, IOException {
     public BufferedImage getSheetImage(ExamStudent student, int index) throws FileNotFoundException, IOException {
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
-        String url = PictureUrlBuilder.getSheetUrl(student.getExamId(), campus.getId(), student.getSubjectCode(),
-                student.getExamNumber(), index);
+        String url = PictureUrlBuilder
+                .getSheetUrl(student.getExamId(), campus.getId(), student.getSubjectCode(), student.getExamNumber(), index);
         if (StringUtils.isNotBlank(baseDir)) {
         if (StringUtils.isNotBlank(baseDir)) {
             return ImageIO.read(new File(new File(baseDir, config.getSheetBucket()), url));
             return ImageIO.read(new File(new File(baseDir, config.getSheetBucket()), url));
         } else {
         } else {
@@ -145,8 +146,8 @@ public class PictureController {
 
 
     public BufferedImage getSliceImage(ExamStudent student, int index) throws FileNotFoundException, IOException {
     public BufferedImage getSliceImage(ExamStudent student, int index) throws FileNotFoundException, IOException {
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
         Campus campus = campusService.findBySchoolAndName(student.getSchoolId(), student.getCampusName());
-        String url = PictureUrlBuilder.getSliceUrl(student.getExamId(), campus.getId(), student.getSubjectCode(),
-                student.getExamNumber(), index);
+        String url = PictureUrlBuilder
+                .getSliceUrl(student.getExamId(), campus.getId(), student.getSubjectCode(), student.getExamNumber(), index);
         if (StringUtils.isNotBlank(baseDir)) {
         if (StringUtils.isNotBlank(baseDir)) {
             return ImageIO.read(new File(new File(baseDir, config.getSliceBucket()), url));
             return ImageIO.read(new File(new File(baseDir, config.getSliceBucket()), url));
         } else {
         } else {

+ 2 - 0
stmms-web/src/main/java/cn/com/qmth/stmms/monitor/ScoreMonitorController.java

@@ -10,6 +10,7 @@ import cn.com.qmth.stmms.common.utils.DateUtils;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
 import net.sf.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.core.task.AsyncTaskExecutor;
 import org.springframework.stereotype.Controller;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -42,6 +43,7 @@ public class ScoreMonitorController {
     @Autowired
     @Autowired
     private MarkGroupService groupService;
     private MarkGroupService groupService;
 
 
+    @Qualifier("task-executor")
     @Autowired
     @Autowired
     private AsyncTaskExecutor taskExecutor;
     private AsyncTaskExecutor taskExecutor;