/document-web/src/main/java/com/bozhong/document/dao/impl/MongoDaoImpl.java

https://github.com/leorian/document · Java · 253 lines · 220 code · 30 blank · 3 comment · 12 complexity · 63b764b2584d198b32ec90431e9f632a MD5 · raw file

  1. package com.bozhong.document.dao.impl;
  2. import com.bozhong.config.common.MongoDBConfig;
  3. import com.bozhong.config.domain.JqPage;
  4. import com.bozhong.document.common.TaskStatusEnum;
  5. import com.bozhong.document.dao.MongoDao;
  6. import com.bozhong.document.entity.TaskEntity;
  7. import com.google.common.reflect.TypeToken;
  8. import com.google.gson.Gson;
  9. import com.google.gson.GsonBuilder;
  10. import com.mongodb.client.AggregateIterable;
  11. import com.mongodb.client.FindIterable;
  12. import com.mongodb.client.MongoCollection;
  13. import com.mongodb.client.MongoCursor;
  14. import org.bson.Document;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import java.util.*;
  17. import static com.mongodb.client.model.Filters.*;
  18. import static com.mongodb.client.model.Sorts.descending;
  19. /**
  20. * Created by xiezg@317hu.com on 2017/4/14 0014.
  21. */
  22. public class MongoDaoImpl implements MongoDao {
  23. @Autowired
  24. private MongoDBConfig mongoDBConfig;
  25. @Override
  26. public <T> void insertOne(T t) {
  27. Gson gson = new Gson();
  28. Document document = gson.fromJson(t.toString(), Document.class);
  29. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(t.getClass());
  30. mongoCollection.insertOne(document);
  31. }
  32. @Override
  33. public <T> void insertMany(List<T> tlist, Class<T> tClass) {
  34. Gson gson = new Gson();
  35. List<Document> documentList = gson.fromJson(gson.toJson(tlist), new TypeToken<List<Document>>() {
  36. }.getType());
  37. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  38. mongoCollection.insertMany(documentList);
  39. }
  40. @Override
  41. public <T> T findOneWaitingUpdateToExecuting(Class<T> tClass) {
  42. Gson gson = new Gson();
  43. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  44. TaskEntity taskEntity = new TaskEntity();
  45. taskEntity.setTaskStatus(TaskStatusEnum.EXECUTING.getName());
  46. taskEntity.setExecuteTimeStamp(String.valueOf(Calendar.getInstance().getTimeInMillis()));
  47. Document document = mongoCollection.findOneAndUpdate(eq("taskStatus", TaskStatusEnum.WAITING.getName()),
  48. new Document("$set", gson.fromJson(taskEntity.toString(), Document.class)));
  49. if (document != null) {
  50. return gson.fromJson(document.toJson(), tClass);
  51. }
  52. return null;
  53. }
  54. @Override
  55. public <T> void updateOneByTaskId(String taskId, T t) {
  56. Gson gson = new Gson();
  57. Document document = gson.fromJson(t.toString(), Document.class);
  58. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(t.getClass());
  59. mongoCollection.updateOne(eq("taskId", taskId), new Document("$set", document));
  60. }
  61. @Override
  62. public <T> T findOneByTaskId(String taskId, Class<T> tClass) {
  63. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  64. Document document = mongoCollection.find(eq("taskId", taskId)).first();
  65. if (document != null) {
  66. Gson gson = new Gson();
  67. return gson.fromJson(document.toJson(), tClass);
  68. }
  69. return null;
  70. }
  71. @Override
  72. public <T> T findOneByTaskContent(String taskContent, Class<T> tClass) {
  73. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  74. Document document = mongoCollection.find(eq("taskContent", taskContent)).first();
  75. if (document != null) {
  76. Gson gson = new Gson();
  77. return gson.fromJson(document.toJson(), tClass);
  78. }
  79. return null;
  80. }
  81. @Override
  82. public <T> long findCountByTaskStatus(String taskStatus, Class<T> tClass) {
  83. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  84. return mongoCollection.count(eq("taskStatus", taskStatus));
  85. }
  86. @Override
  87. public <T> long findCountByTaskStatusAndAppId(String taskStatus, Class<T> tClass, String appId) {
  88. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  89. return mongoCollection.count(and(eq("taskStatus", taskStatus), eq("appId", appId)));
  90. }
  91. @Override
  92. public <T> long findCount(Class<T> tClass) {
  93. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  94. return mongoCollection.count();
  95. }
  96. @Override
  97. public <T> long findCountByAppId(Class<T> tClass, String appId) {
  98. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  99. return mongoCollection.count(eq("appId", appId));
  100. }
  101. @Override
  102. public <T> long findAuthCount(Class<T> tClass, String[] appIds) {
  103. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  104. return mongoCollection.count(in("appId", appIds));
  105. }
  106. @Override
  107. public <T> long findAuthCountByTaskStatus(Class<T> tClass, String[] appIds, String taskStatus) {
  108. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  109. return mongoCollection.count(and(in("appId", appIds),
  110. eq("taskStatus", taskStatus)));
  111. }
  112. @Override
  113. public <T> JqPage<T> getJqPage(JqPage<T> jqPage, Class<T> tClass) {
  114. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  115. FindIterable<Document> findIterable = mongoCollection.find().sort(descending("createTimeStamp"))
  116. .skip(jqPage.getFromIndex()).limit(jqPage.getPageSize());
  117. Iterator<Document> iterator = findIterable.iterator();
  118. List<T> rows = new ArrayList<>(jqPage.getPageSize());
  119. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
  120. while (iterator.hasNext()) {
  121. Document document = iterator.next();
  122. rows.add(gson.fromJson(document.toJson(), tClass));
  123. }
  124. jqPage.setRecords((int) mongoCollection.count());
  125. jqPage.setRows(rows);
  126. return jqPage;
  127. }
  128. @Override
  129. public <T> JqPage<T> getJqPageByAppId(JqPage<T> jqPage, Class<T> tClass, String appId) {
  130. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  131. FindIterable<Document> findIterable = mongoCollection.find(eq("appId", appId)).
  132. sort(descending("createTimeStamp")).skip(jqPage.getFromIndex()).limit(jqPage.getPageSize());
  133. Iterator<Document> iterator = findIterable.iterator();
  134. List<T> rows = new ArrayList<>(jqPage.getPageSize());
  135. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
  136. while (iterator.hasNext()) {
  137. Document document = iterator.next();
  138. rows.add(gson.fromJson(document.toJson(), tClass));
  139. }
  140. jqPage.setRecords((int) mongoCollection.count(eq("appId", appId)));
  141. jqPage.setRows(rows);
  142. return jqPage;
  143. }
  144. @Override
  145. public <T> JqPage<T> getJqPage(String taskStatus, JqPage<T> jqPage, Class<T> tClass) {
  146. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  147. FindIterable<Document> findIterable = mongoCollection.find(eq("taskStatus", taskStatus)).
  148. sort(descending("createTimeStamp"))
  149. .skip(jqPage.getFromIndex()).limit(jqPage.getPageSize());
  150. Iterator<Document> iterator = findIterable.iterator();
  151. List<T> rows = new ArrayList<>(jqPage.getPageSize());
  152. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
  153. while (iterator.hasNext()) {
  154. Document document = iterator.next();
  155. rows.add(gson.fromJson(document.toJson(), tClass));
  156. }
  157. jqPage.setRecords((int) mongoCollection.count(eq("taskStatus", taskStatus)));
  158. jqPage.setRows(rows);
  159. return jqPage;
  160. }
  161. @Override
  162. public <T> JqPage<T> getJqPageByAppId(String taskStatus, JqPage<T> jqPage, Class<T> tClass, String appId) {
  163. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  164. FindIterable<Document> findIterable = mongoCollection.find(and(eq("taskStatus", taskStatus),
  165. eq("appId", appId))).
  166. sort(descending("createTimeStamp"))
  167. .skip(jqPage.getFromIndex()).limit(jqPage.getPageSize());
  168. Iterator<Document> iterator = findIterable.iterator();
  169. List<T> rows = new ArrayList<>(jqPage.getPageSize());
  170. Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
  171. while (iterator.hasNext()) {
  172. Document document = iterator.next();
  173. rows.add(gson.fromJson(document.toJson(), tClass));
  174. }
  175. jqPage.setRecords((int) mongoCollection.count(and(eq("taskStatus", taskStatus),
  176. eq("appId", appId))));
  177. jqPage.setRows(rows);
  178. return jqPage;
  179. }
  180. @Override
  181. public <T> Map<String, Integer> groupByAppId(Class<T> tClass) {
  182. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  183. AggregateIterable<Document> aggregateIterable = mongoCollection.aggregate(Arrays.asList(new Document("$project",
  184. new Document("taskId", 1).append("_id", 0).append("appId", 1)),
  185. new Document("$unwind", "$appId"),
  186. new Document("$group", new Document("_id", "$appId").append("count", new Document("$sum", 1)))));
  187. MongoCursor<Document> mongoCursor = aggregateIterable.iterator();
  188. Map<String, Integer> appCountMap = new HashMap<>();
  189. while (mongoCursor.hasNext()) {
  190. Document document = mongoCursor.next();
  191. appCountMap.put(document.getString("_id"), document.getInteger("count"));
  192. }
  193. return appCountMap;
  194. }
  195. @Override
  196. public <T> Map<String, Integer> groupByAppId(Class<T> tClass, String taskStatus) {
  197. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  198. AggregateIterable<Document> aggregateIterable = mongoCollection.aggregate(Arrays.asList(new Document("$project",
  199. new Document("taskId", 1).append("_id", 0).append("appId", 1).append("taskStatus", 1)),
  200. new Document("$match", new Document("taskStatus", taskStatus))
  201. , new Document("$unwind", "$appId"),
  202. new Document("$group", new Document("_id", "$appId").append("count", new Document("$sum", 1)))));
  203. MongoCursor<Document> mongoCursor = aggregateIterable.iterator();
  204. Map<String, Integer> appCountMap = new HashMap<>();
  205. while (mongoCursor.hasNext()) {
  206. Document document = mongoCursor.next();
  207. appCountMap.put(document.getString("_id"), document.getInteger("count"));
  208. }
  209. return appCountMap;
  210. }
  211. @Override
  212. public <T> Long findTodayCount(Class<T> tClass, String taskStatus, String createTimeStamp) {
  213. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  214. return mongoCollection.count(and(eq("taskStatus", taskStatus),
  215. gte("createTimeStamp", createTimeStamp)));
  216. }
  217. @Override
  218. public <T> Long findYesterdayCount(Class<T> tClass, String taskStatus, String startTime, String endTime) {
  219. MongoCollection<Document> mongoCollection = mongoDBConfig.getCollection(tClass);
  220. return mongoCollection.count(and(eq("taskStatus", taskStatus),
  221. lte("createTimeStamp", endTime), gte("createTimeStamp", startTime)));
  222. }
  223. }