diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/BasicConfigServiceTest.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/BasicConfigServiceTest.java index 99f4f37..be65141 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/BasicConfigServiceTest.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/BasicConfigServiceTest.java @@ -31,6 +31,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; 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; @@ -43,7 +44,31 @@ public class BasicConfigServiceTest { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext_biz_patient1.xml"); // queryRisk(applicationContext); - changeLong2Time(applicationContext); + removeDoubleBaby(applicationContext); + } + + public static void removeDoubleBaby(ApplicationContext applicationContext) { + MongoTemplate mongoTemplate + =(MongoTemplate)applicationContext.getBean("mongoTemplate"); + mongoTemplate.getDb().slaveOk(); + mongoTemplate.getDb().authenticate("platform", "platform123".toCharArray()); + List list = mongoTemplate.find(new Query(new Criteria()), BabyModel.class); + Map localMap = new HashMap<>(); + Map remoteMap = new HashMap<>(); + for (BabyModel model:list) { + if (model.getId().length() == 24) { + localMap.put(model.getMphone(),model); + } else if (model.getId().length() == 32) { + remoteMap.put(model.getMphone(),model); + } else { + System.out.println("other:"+JsonUtil.obj2JsonString(model)); + } + } + for (String phone:remoteMap.keySet()) { + if (localMap.containsKey(phone)) { + System.out.println("double:"+JsonUtil.obj2JsonString(remoteMap.get(phone))); + } + } } public static void changeLong2Time(ApplicationContext applicationContext) { diff --git a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MongoSyncService.java b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MongoSyncService.java index b3c6af5..859db71 100644 --- a/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MongoSyncService.java +++ b/platform-biz-patient-service/src/main/java/com/lyms/platform/biz/service/MongoSyncService.java @@ -11,6 +11,7 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.lang.StringUtils; 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.Service; @@ -58,8 +59,14 @@ public class MongoSyncService { } if (obj instanceof UpdateMultiData) { UpdateMultiData data = (UpdateMultiData) obj; - if (data.getMongoQuery() != null && data.getMongoUpdate() != null) { - mongoTemplate.updateMulti(data.getMongoQuery(), data.getMongoUpdate(), updateClass); + if (data.getQuery() != null && data.getUpdate() != null) { + Update update = MongoConvertHelper + .convertToNativeUpdate(data.getUpdate()); + MongoCondition condition = new MongoCondition(); + for (String key:data.getQuery().keySet()) { + condition = condition.and(key,data.getQuery().get(key),MongoOper.IS); + } + mongoTemplate.updateMulti(condition.toMongoQuery().convertToMongoQuery(), update, updateClass); return true; } else if (data.getQuery() != null && data.getUpdate() != null) { MongoCondition c = null; diff --git a/platform-common/src/main/java/com/lyms/platform/common/dao/BaseMongoDAOImpl.java b/platform-common/src/main/java/com/lyms/platform/common/dao/BaseMongoDAOImpl.java index efed239..ffe0dac 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/dao/BaseMongoDAOImpl.java +++ b/platform-common/src/main/java/com/lyms/platform/common/dao/BaseMongoDAOImpl.java @@ -1,5 +1,8 @@ package com.lyms.platform.common.dao; +import com.lyms.platform.common.dao.operator.MongoCondition; +import com.lyms.platform.common.dao.operator.MongoOper; +import com.lyms.platform.common.dao.operator.MongoQuery; import com.lyms.platform.common.dao.operator.Page; import com.lyms.platform.common.pojo.SyncDataModel; import com.lyms.platform.common.pojo.UpdateMultiData; @@ -8,6 +11,7 @@ import org.apache.commons.codec.binary.Base64; import org.apache.commons.collections.CollectionUtils; 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.util.Assert; @@ -144,7 +148,6 @@ public class BaseMongoDAOImpl implements BaseMongoDAO { // 数据上传 UpdateMultiData data = new UpdateMultiData(); data.setMongoQuery(query); - data.setMongoUpdate(update); data.setUpdate(ReflectionUtils.getUpdateField(obj)); // 批量修改的情况下,ID字段是要修改的CLASS addSyncData("UPDATEMULTI", data, obj.getClass().getName()); diff --git a/platform-common/src/main/java/com/lyms/platform/common/pojo/SyncDataModel.java b/platform-common/src/main/java/com/lyms/platform/common/pojo/SyncDataModel.java index f1240cf..8ac8dd5 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/pojo/SyncDataModel.java +++ b/platform-common/src/main/java/com/lyms/platform/common/pojo/SyncDataModel.java @@ -1,8 +1,19 @@ package com.lyms.platform.common.pojo; +import com.lyms.platform.common.dao.operator.MongoCondition; +import com.lyms.platform.common.dao.operator.MongoOper; +import com.lyms.platform.common.dao.operator.MongoQuery; import com.lyms.platform.common.result.BaseModel; +import com.lyms.platform.common.utils.MongoConvertHelper; +import com.lyms.platform.common.utils.ReflectionUtils; +import com.lyms.platform.common.utils.SerializUtils; +import org.apache.commons.codec.binary.Base64; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.core.query.Update; +import org.springframework.util.Assert; +import java.io.Serializable; import java.util.Date; /** @@ -11,6 +22,21 @@ import java.util.Date; @Document(collection = "lyms_sync_data") public class SyncDataModel extends BaseModel { + public static void main(String[] a) { + Query query = new MongoQuery(new MongoCondition("yn", 1, MongoOper.IS)).convertToMongoQuery(); + SyncDataModel model = new SyncDataModel(); + model.setDataId("fuck"); + Assert.notNull(model, "execute findAndModify method must not null."); + Update update = MongoConvertHelper + .convertToNativeUpdate(ReflectionUtils.getUpdateField(model)); + Assert.notNull(update, "execute findAndModify method must not null.update:" + update); + // 数据上传 + UpdateMultiData data = new UpdateMultiData(); + data.setMongoQuery(query); + data.setUpdate(ReflectionUtils.getUpdateField(model)); + System.out.println(Base64.encodeBase64String(SerializUtils.objToByte((Serializable) data))); + } + private static final long serialVersionUID = 97531300010L; private Date created; diff --git a/platform-common/src/main/java/com/lyms/platform/common/pojo/UpdateMultiData.java b/platform-common/src/main/java/com/lyms/platform/common/pojo/UpdateMultiData.java index be3335fb..c16ef91 100644 --- a/platform-common/src/main/java/com/lyms/platform/common/pojo/UpdateMultiData.java +++ b/platform-common/src/main/java/com/lyms/platform/common/pojo/UpdateMultiData.java @@ -21,21 +21,6 @@ public class UpdateMultiData implements Serializable { private Map query; private Map update; - private Query mongoQuery; - private Update mongoUpdate; - - public Update getMongoUpdate() { - return mongoUpdate; - } - - public void setMongoUpdate(Update mongoUpdate) { - this.mongoUpdate = mongoUpdate; - } - - public Query getMongoQuery() { - return mongoQuery; - } - public void setQuery(Map query) { this.query = query; } @@ -45,7 +30,6 @@ public class UpdateMultiData implements Serializable { } public void setMongoQuery(Query query) { - this.mongoQuery = query; DBObject dbObject = query.getQueryObject(); this.query = new HashMap<>(); for (String key:dbObject.keySet()) {