package cn.cloudowr.dict; import com.jfinal.aop.Before; import com.jfinal.render.ContentType; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; import com.mongodb.client.model.Filters; import com.mongodb.client.model.UpdateOptions; import com.mongodb.client.model.Updates; import com.mongodb.client.result.DeleteResult; import com.mongodb.client.result.UpdateResult; import org.bson.Document; import org.bson.conversions.Bson; import org.bson.types.ObjectId; import sdk.FastJSONUtil; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; /** * Created by lyf66 on 2017/2/16. */ public class Controller extends com.jfinal.core.Controller { public void ping() { renderText("dict pong"); } public void dict() { Map paraMap = getParaMap(); List ops = new ArrayList<>(); paraMap.forEach((key, arr) -> { if ("id".equals(key)) { ops.add(Filters.eq("_id", new ObjectId(arr[0]))); } else { ops.add(Filters.eq(key, arr[0])); } }); MongoCollection collection = getCollection(); List documents = new ArrayList<>(); collection.find( Filters.and(ops) ).into(documents); // List json = new ArrayList<>(); // documents.forEach(doc -> { // json.add(FastJSONUtil.bsonToJSON(doc)); // }); renderJson(FastJSONUtil.bsonToJSON(documents)); } public void dictList() { int pageNum = getParaToInt("pageNum", 0); int pageSize = getParaToInt("pageSize", 20); MongoCollection collection = getCollection(); List documents = new ArrayList<>(); collection.find().limit(pageSize).skip(pageNum * pageSize).into(documents); // List json = new ArrayList<>(); // documents.forEach(doc -> { // json.add(doc.toJson()); // }); // renderText(Arrays.toString(json.toArray()), ContentType.JSON); renderJson(FastJSONUtil.bsonToJSON(documents)); } public void addDict() { Map paraMap = getParaMap(); Document dict = new Document(); paraMap.forEach((key, arr) -> { if (arr.length == 1) { dict.put(key, arr[0]); } else if (arr.length > 1) { List s = new ArrayList<>(); for (String s1 : arr) { s.add(s1); } dict.put(key, s); } }); getCollection().insertOne(dict); // renderJson(dict.toJson()); renderJson(FastJSONUtil.bsonToJSON(dict)); } @Before(IdInterceptor.class) public void updateDict() { String id = getPara("id"); String action = getPara("action"); String[] keysToUnset = getParaValues("keys"); List ops = new ArrayList<>(); if ("unset".equals(action)) { for (String key : keysToUnset) { if (key.equals("id")) continue; ops.add(Updates.unset(key)); } } else { Map paraMap = getParaMap(); paraMap.forEach((key, arr) -> { if (!"id".equals(key) && !"action".equals(key)) { if (arr.length == 1) { ops.add(Updates.set(key, arr[0])); } else if (arr.length > 1) { List s = new ArrayList<>(); for (String s1 : arr) { s.add(s1); } ops.add(Updates.set(key, s)); } } }); } UpdateResult result = getCollection().updateOne( Filters.eq("_id", new ObjectId(id)), Updates.combine( ops ), new UpdateOptions().upsert(true) ); renderJson("result", result.getMatchedCount() >= 1); } @Before(IdInterceptor.class) public void deleteDict() { String id = getPara("id"); DeleteResult result = getCollection().deleteOne( Filters.eq("_id", new ObjectId(id)) ); renderJson("result", result.getDeletedCount() == 1); } private MongoCollection getCollection() { MongoDatabase mongoDataBase = Config.getMongoDataBase(); MongoCollection collection = mongoDataBase.getCollection("dict"); return collection; } }