فهرست منبع

Merge branch 'master' of http://git.qmth.com.cn/examcloud-DevOps/examcloud-oe-tool.git

xiatian 1 سال پیش
والد
کامیت
c003866dc0

+ 77 - 0
src/main/java/cn/com/qmth/dp/examcloud/oe/modules/executesql/ExecuteSql.java

@@ -0,0 +1,77 @@
+package cn.com.qmth.dp.examcloud.oe.modules.executesql;
+
+import cn.com.qmth.dp.examcloud.oe.util.FileHelper;
+import com.mongodb.BasicDBObject;
+import com.mongodb.client.result.UpdateResult;
+import org.apache.commons.io.LineIterator;
+import org.bson.Document;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Component;
+
+import java.io.File;
+import java.io.IOException;
+
+@Component
+public class ExecuteSql {
+
+    private final static Logger log = LoggerFactory.getLogger(ExecuteSql.class);
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    public void start() {
+        // this.updateQuestionAnswer("648dbca0b51f8b1c554623ad", "正确");
+        // this.batchSql();
+    }
+
+    public void batchSql() {
+        int curTotal = 0; // 391832
+        File file = new File("C:\\Users\\deason\\Desktop\\sql.txt");
+        try (LineIterator lines = FileHelper.readLines(file);) {
+            while (lines.hasNext()) {
+                String line = lines.nextLine();
+                curTotal++;
+                if (curTotal % 10000 == 0) {
+                    System.out.println(" ****************** " + curTotal + " 进度:" + (curTotal * 100 / 391832) + "%");
+                }
+                this.updateSql(line);
+            }
+            System.out.println(" ****************** " + curTotal + " 进度:" + (curTotal * 100 / 391832) + "%");
+        } catch (IOException e) {
+            log.error(e.getMessage(), e);
+        }
+
+        System.out.println("执行完毕,共 " + curTotal + " 行!");
+    }
+
+    public void updateSql(String sql) {
+        BasicDBObject bson = new BasicDBObject();
+        bson.put("$eval", sql);
+        mongoTemplate.getDb().runCommand(bson);
+    }
+
+    public void updateQuestionAnswerBySql(String questionId, String quesAnswer) {
+        String sql = String.format("db.getCollection('question').update({\"_id\":ObjectId(\"%s\")},{\"$set\":{\"quesAnswer\":\"%s\"}});", questionId, quesAnswer);
+        System.out.println(sql);
+
+        BasicDBObject bson = new BasicDBObject();
+        bson.put("$eval", sql);
+        Document document = mongoTemplate.getDb().runCommand(bson);
+        log.info("questionId:{}  quesAnswer:{}", questionId, quesAnswer);
+    }
+
+    public void updateQuestionAnswer(String questionId, String quesAnswer) {
+        Query query = Query.query(Criteria.where("_id").is(questionId));
+        Update update = new Update();
+        update.set("quesAnswer", quesAnswer);
+        UpdateResult upResult = mongoTemplate.updateFirst(query, update, "question");
+        log.info("questionId:{}  quesAnswer:{}  result:{}", questionId, quesAnswer, upResult.getMatchedCount());
+    }
+
+}

+ 93 - 0
src/main/java/cn/com/qmth/dp/examcloud/oe/util/FileHelper.java

@@ -0,0 +1,93 @@
+package cn.com.qmth.dp.examcloud.oe.util;
+
+import cn.com.qmth.examcloud.commons.exception.StatusException;
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.LineIterator;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+public class FileHelper {
+
+    private static final Logger log = LoggerFactory.getLogger(FileHelper.class);
+
+    /**
+     * 获取文件后缀名,包括"."
+     */
+    public static String getFileSuffix(String fileName) {
+        if (StringUtils.isNotEmpty(fileName)) {
+            int index = fileName.lastIndexOf(".");
+            if (index > 0) {
+                return fileName.substring(index).toLowerCase();
+            }
+        }
+
+        return "";
+    }
+
+    /**
+     * 创建文件目录
+     */
+    public static void makeDirs(String dirPath) {
+        if (StringUtils.isBlank(dirPath)) {
+            return;
+        }
+        File dir = new File(dirPath);
+        if (!dir.exists()) {
+            dir.mkdirs();
+        }
+    }
+
+    /**
+     * 读取文件内容(一次性读取)
+     */
+    public static List<String> readAllLines(File file) {
+        try {
+            return Files.readLines(file, StandardCharsets.UTF_8);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new StatusException("读取文件失败! " + e.getMessage());
+        }
+    }
+
+    /**
+     * 读取文件内容(迭代按行读取)
+     */
+    public static LineIterator readLines(File file) throws IOException {
+        return FileUtils.lineIterator(file, StandardCharsets.UTF_8.name());
+    }
+
+    /**
+     * 写入文件内容
+     */
+    public static void writeLines(File file, List<String> lines) {
+        writeLines(file, lines, false);
+    }
+
+    /**
+     * 写入文件内容(支持追加)
+     */
+    public static void writeLines(File file, List<String> lines, boolean append) {
+        if (!file.exists()) {
+            makeDirs(file.getParent());
+        }
+
+        try {
+            if (lines == null) {
+                lines = new ArrayList<>();
+            }
+            FileUtils.writeLines(file, StandardCharsets.UTF_8.name(), lines, append);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            throw new StatusException("写入文件失败! " + e.getMessage());
+        }
+    }
+
+}

+ 6 - 0
src/test/java/cn/com/qmth/dp/examcloud/oe/test/ExportTest.java

@@ -2,6 +2,7 @@ package cn.com.qmth.dp.examcloud.oe.test;
 
 import cn.com.qmth.dp.examcloud.oe.OeToolApplication;
 import cn.com.qmth.dp.examcloud.oe.modules.exam_record_data.ExamRecordDataTool;
+import cn.com.qmth.dp.examcloud.oe.modules.executesql.ExecuteSql;
 import cn.com.qmth.dp.examcloud.oe.modules.export_exam_student_score.ExportExamStudentScore;
 import cn.com.qmth.dp.examcloud.oe.modules.fixExamStudentId.FixExamStudentId;
 import cn.com.qmth.dp.examcloud.oe.modules.fix_paper_score.FixPaperScore;
@@ -43,9 +44,14 @@ public class ExportTest {
     @Autowired
     private FixPaperScore fixPaperScore;
 
+    @Autowired
+    private ExecuteSql executeSql;
+
     @Test
     public void exportTest() throws Exception {
 
+        // executeSql.start();
+
         // fixPaperScore.start();
 
         // updateFillblankQuestionTypeService.start();