Parcourir la source

优化数据导出问题

wkeyuan il y a 4 ans
Parent
commit
fad8959364

+ 56 - 0
src/main/java/net/diaowen/common/utils/RunAnswerUtil.java

@@ -0,0 +1,56 @@
+package net.diaowen.common.utils;
+
+import net.diaowen.dwsurvey.entity.Question;
+import net.diaowen.dwsurvey.service.SurveyAnswerManager;
+import net.diaowen.dwsurvey.service.impl.SurveyAnswerManagerImpl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class RunAnswerUtil {
+
+    /**
+     * 返回新question Map
+     * @param questions
+     * @param surveyAnswerId
+     * @return
+     */
+    public Map<Integer,Question> getQuestionMap(List<Question> questions,String surveyAnswerId) {
+        int quIndex = 0;
+        Map<Integer,Question> questionMap = new ConcurrentHashMap<Integer,Question>();
+        for (Question question : questions) {
+            new Thread(new RAnswerQuestionMap(quIndex++,questionMap,surveyAnswerId,question)).start();
+        }
+        while (questionMap.size() != questions.size()){
+            try {
+                Thread.sleep(1);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        return questionMap;
+    }
+
+
+    public class RAnswerQuestionMap implements Runnable{
+        private int quIndex;
+        private Map<Integer,Question> questionMap;
+        private String surveyAnswerId;
+        private Question question;
+        public RAnswerQuestionMap(int quIndex, Map<Integer,Question> questionMap, String surveyAnswerId, Question question){
+            this.quIndex = quIndex;
+            this.questionMap = questionMap;
+            this.surveyAnswerId = surveyAnswerId;
+            this.question = question;
+        }
+
+        @Override
+        public void run() {
+            SurveyAnswerManager surveyManager = SpringContextHolder.getBean(SurveyAnswerManagerImpl.class);
+            surveyManager.getquestionAnswer(surveyAnswerId, question);
+            questionMap.put(quIndex, question);
+        }
+    }
+
+}

+ 2 - 0
src/main/java/net/diaowen/dwsurvey/service/SurveyAnswerManager.java

@@ -44,4 +44,6 @@ public interface SurveyAnswerManager extends BaseService<SurveyAnswer, String>{
 	public Page<SurveyAnswer> answerPage(Page<SurveyAnswer> page, String surveyId);
 
 	public void deleteData(String[] ids);
+
+	public int getquestionAnswer(String surveyAnswerId, Question question);
 }

+ 3 - 2
src/main/java/net/diaowen/dwsurvey/service/impl/SurveyAnswerManagerImpl.java

@@ -4,6 +4,7 @@ import net.diaowen.common.QuType;
 import net.diaowen.common.base.entity.User;
 import net.diaowen.common.plugs.page.Page;
 import net.diaowen.common.service.BaseServiceImpl;
+import net.diaowen.common.utils.RunAnswerUtil;
 import net.diaowen.common.utils.excel.XLSXExportUtil;
 import net.diaowen.common.utils.parsehtml.HtmlUtil;
 import net.diaowen.dwsurvey.dao.SurveyAnswerDao;
@@ -86,7 +87,7 @@ public class SurveyAnswerManagerImpl extends
 	 * @param question
 	 * @return
 	 */
-	private int getquestionAnswer(String surveyAnswerId, Question question) {
+	public int getquestionAnswer(String surveyAnswerId, Question question) {
 		int score = 0;
 		String quId = question.getId();
 		// 查询每一题的答案,如果是主观题,则判断是否答对
@@ -245,13 +246,13 @@ public class SurveyAnswerManagerImpl extends
 	}
 
 	private void exportXLSRow(XLSXExportUtil exportUtil,String surveyAnswerId, List<Question> questions,SurveyAnswer surveyAnswer) {
+		new RunAnswerUtil().getQuestionMap(questions,surveyAnswerId);
 		int cellIndex = 0;
 		for (Question question : questions) {
 			QuType quType = question.getQuType();
 			if(quType==QuType.PAGETAG || quType==QuType.PARAGRAPH){
 				continue;
 			}
-			getquestionAnswer(surveyAnswerId, question);
 			String quName = question.getQuName();
 			String titleName = quType.getCnName();
 			if (quType == QuType.YESNO) {// 是非题