MongoDBUtil

package com.bootdo.common.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.BasicDBObject;
import com.mongodb.BasicDBObjectBuilder;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.WriteResult;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSDBFile;

public class MongoDBUtils {
   /**
    * pdfhtml,將需要轉換的文件信息存入待轉換集合
    * 
    * @param mongoTemplate
    * @param fileMD5
    * @param fileMonId
    * @param collectionName
    * @param filename
    * @param bucket
    */
   public static void insertToBeConverted(MongoTemplate mongoTemplate, String fileMD5, String fileMonId,
         String collectionName, String filename, String bucket) {
      // 創建數據庫
      DB db = mongoTemplate.getDb();
      // 根據參數找到對應集合,沒有則創建
      DBCollection coll = db.getCollection(collectionName);
      /**
       * DBObject代表文檔,這是一個接口,java中提供了多種實現,最簡單的就是BasicDBObject       */
      DBObject convert = new BasicDBObject();
      convert.put("fileMD5", fileMD5);
      convert.put("fileMonId", fileMonId);
      convert.put("convertState", 0);
      convert.put("frequency", 0);
      convert.put("filename", filename);
      convert.put("collName", bucket);
      convert.put("convertType", "toZip");
      convert.put("convertTime", System.currentTimeMillis());
      coll.insert(convert);
   }

   /**
    * 歸檔時需要將html轉換爲pdf作爲附件保存,則調用此方法
    * 
    * @param mongoTemplate
    *            mongoTemplate實例,注入的
    * @param collectionName
    *            待轉換集合名字 目前待轉集合都是tobeconverted
    * @param htmlUrl
    *            需要轉換的文的url,注意是打印頁面
    * @param sessionid
    *            當前sessionid
    * @param JSESSIONID
    *            當前JSESSIONID
    * @param filename
    *            當前主文檔標題,不需要加"-審批單" 也不需要擴展名
    * @param docId
    *            主文檔id
    */
   public static void htmlToPdfInsertToBeConverted(MongoTemplate mongoTemplate, String collectionName, String htmlUrl,
         String sessionid, String JSESSIONID, String filename, String docId) {
      htmlUrl = "--cookie  JSESSIONID " + JSESSIONID + "  --cookie  sessionid " + sessionid + "  " + htmlUrl;
      collectionName = "tobeconverted";
      // 創建數據庫
      DB db = mongoTemplate.getDb();
      // 根據參數找到對應集合,沒有則創建
      DBCollection coll = db.getCollection(collectionName);
      /**
       * DBObject代表文檔,這是一個接口,java中提供了多種實現,最簡單的就是BasicDBObject       */
      DBObject convert = new BasicDBObject();
      convert.put("convertType", "toPdf");
      convert.put("htmlUrl", htmlUrl);
      convert.put("convertState", 0);
      convert.put("frequency", 0);
      convert.put("filename", filename);
      convert.put("docId", docId);
      convert.put("convertTime", System.currentTimeMillis());
      coll.insert(convert);
   }

   /**
    * 根據主文檔id,找到轉換後的pdf
    * 
    * @param mainId
    * @param mongoTemplate
    * @return
    */
   public static GridFSDBFile getFileByMainId(String mainId, MongoTemplate mongoTemplate) {
      DB db = mongoTemplate.getDb();
      GridFS gridFS = new GridFS(db, "keeppdf");
      DBObject query = new BasicDBObject("docId", mainId);
      GridFSDBFile file = gridFS.findOne(query);
      return file;
   }

   /**
    * 根據主文檔id,刪除轉換後的pdf
    * 
    * @param mainId
    * @param mongoTemplate
    * @return
    */
   public static boolean deleteFileByMainId(String mainId, MongoTemplate mongoTemplate) {
      DB db = mongoTemplate.getDb();
      GridFS gridFS = new GridFS(db, "keeppdf");
      DBObject query = new BasicDBObject("docId", mainId);
      gridFS.remove(query);
      return true;
   }

   /**
    * 查詢轉換zip失敗的文件列表
    * 
    * @param mongoTemplate
    * @return
    */
   public static List<Map<String, String>> convertFail(MongoTemplate mongoTemplate) {
      List<Map<String, String>> list = new ArrayList<Map<String, String>>();
      // 創建數據庫
      DB db = mongoTemplate.getDb();
      // 根據參數找到對應集合,沒有則創建
      DBCollection coll = db.getCollection("convertedFail");
      DBObject convertFailZip = new BasicDBObject();
      convertFailZip.put("convertType", "toZip");
      DBCursor d = coll.find(convertFailZip);
      for (DBObject dbob : d) {
         Map<String, String> m = new HashMap<String, String>();
         //m.put(dbob.get("fileMonId").toString(), dbob.get("convertTime").toString());
         m.put("fileMonId", dbob.get("fileMonId").toString());
         m.put("convertTime", dbob.get("convertTime").toString());
         if(dbob.get("completion")!=null){
            m.put("completion", dbob.get("completion").toString());
         }
         list.add(m);
      }
      d.close();
      return list;
   }
   /**
    * 刪除轉換失敗列表中的數據
    * @param fileMonId 
    * @param mongoTemplate
    * @return
    */
   public static boolean deleteConvertFailByMongoId(String fileMonId, MongoTemplate mongoTemplate) {
      // 創建數據庫
      DB db = mongoTemplate.getDb();
      // 根據參數找到對應集合,沒有則創建
      DBCollection coll = db.getCollection("convertedFail");
      DBObject convertFailZip = new BasicDBObject();
      convertFailZip.put("fileMonId", fileMonId);
      coll.findAndRemove(convertFailZip);
      return true;
   }
   
   /**
    * 將失敗列表中的記錄改爲已處理
    * @param mongoTemplate
    * @param newMongoId 新的mongoid
    * @param oldMongoId mongoid
    * @return
    */
   public static boolean completion(MongoTemplate mongoTemplate,String newMongoId,String oldMongoId){
      try{
         DB db = mongoTemplate.getDb();
         DBCollection coll = db.getCollection("convertedFail");
         DBObject convertFailZip = new BasicDBObject();
         convertFailZip.put("fileMonId", oldMongoId);
         DBObject oldObject = coll.findOne(convertFailZip);
         DBObject newObject = new BasicDBObject();
         newObject.putAll(oldObject);
         newObject.put("fileMonId", newMongoId);
         newObject.put("completion", "yes");
         coll.findAndModify(oldObject, newObject);
      }catch(Exception e){
         return false;
      }
      return true;
   }


   /**
    * 查詢轉換失敗的次數
    * @param mongoTemplate
    * @param MongoId mongoid
    * @return
    */
   public static int convertFailNumber(MongoTemplate mongoTemplate,String MongoId){
      try{
         DB db = mongoTemplate.getDb();
         DBCollection coll = db.getCollection("convertedFail");
         DBObject convertFail = new BasicDBObject();
         convertFail.put("fileMD5", MongoId);
         DBCursor dbObjects = coll.find(convertFail);
         return dbObjects.size();
      }catch(Exception e){
         return 0;
      }
   }

   /**
    * 將發文中的word轉換爲pdf
    * @param mongoTemplate
    * @param fileMonId
    * @param collectionName
    * @param filename
    * @param bucket
    */
   public static void dispatchWordConvert(MongoTemplate mongoTemplate, String sourceFileId, String fileMonId,
                                 String collectionName, String filename, String bucket) {
      // 創建數據庫
      DB db = mongoTemplate.getDb();
      // 根據參數找到對應集合,沒有則創建
      DBCollection coll = db.getCollection(collectionName);
      /**
       * DBObject代表文檔,這是一個接口,java中提供了多種實現,最簡單的就是BasicDBObject       */
      DBObject convert = new BasicDBObject();
      convert.put("sourceFileId", sourceFileId);
      convert.put("fileMonId", fileMonId);
      convert.put("convertState", 0);
      convert.put("frequency", 0);
      convert.put("filename", filename);
      convert.put("collName", bucket);
      convert.put("convertType", "WordToPdf");
      convert.put("convertTime", System.currentTimeMillis());
      coll.insert(convert);
   }

   public static int getDispatchPdfBySourceFileId(MongoTemplate mongoTemplate,String sourceFileId) {
      DB db = mongoTemplate.getDb();
      GridFS gridFS = new GridFS(db, "dispatch");
      DBObject query = new BasicDBObject("sourceFileId", sourceFileId);
      GridFSDBFile file = gridFS.findOne(query);
      if(file!=null){
         insertToBeConverted(mongoTemplate, file.getMD5(), file.getId().toString(),
               "tobeconverted", file.getFilename(), "dispatch");
         return 1;
      }else{
         return 0;
      }
   }


   public static Map<String,String> getDispatchMessageBySourceFileId(MongoTemplate mongoTemplate,String sourceFileId) {
      DB db = mongoTemplate.getDb();
      GridFS gridFS = new GridFS(db, "dispatch");
      DBObject query = new BasicDBObject("sourceFileId", sourceFileId);
      GridFSDBFile file = gridFS.findOne(query);
      if(file==null){
         return null;
      }
      Map<String,String> map = new HashMap<>();
      map.put("id",file.get("_id").toString());
      map.put("length",file.get("length").toString());
      map.put("chunkSize",file.get("chunkSize").toString());
      map.put("uploadDate",file.get("uploadDate").toString());
      map.put("md5",file.get("md5").toString());
      map.put("sourceFileId",file.get("sourceFileId").toString());
      map.put("filename",file.get("filename").toString());
      return map;
   }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章