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 { /** * pdf轉html,將需要轉換的文件信息存入待轉換集合 * * @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; } }
MongoDBUtil
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.