From d7b7501d19281c4d9eea628f02a7cf2b12dc8c41 Mon Sep 17 00:00:00 2001 From: alwaysfrin <39822157+alwaysfrin@users.noreply.github.com> Date: Fri, 2 Nov 2018 17:35:22 +0800 Subject: [PATCH 1/2] =?UTF-8?q?mongodb=E5=B7=A5=E5=85=B7=E6=96=B9=E6=B3=95?= =?UTF-8?q?=EF=BC=8C=E6=97=A5=E5=BF=97=E9=83=A8=E5=88=86=E4=BD=BF=E7=94=A8?= =?UTF-8?q?mongo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/i3plus-pojo-base/pom.xml | 4 + .../pojo/base/jpa/dao/BaseMongoRepository.java | 50 ++ .../base/jpa/daoimpl/BaseMongoRepositoryImpl.java | 286 ++++++++++ .../pojo/base/jpa/daoimpl/BaseRepositoryImpl.java | 4 +- .../factory/BaseMongoRepositoryFactoryBean.java | 63 +++ .../jpa/factory/BaseRepositoryFactoryBean.java | 4 + .../estsh/i3plus/pojo/base/tool/BsonPackTool.java | 586 +++++++++++++++++++++ .../cn/estsh/i3plus/pojo/base/tool/HqlPack.java | 2 + .../i3plus/pojo/platform/bean/LogOperate.java | 1 - .../platform/repository/LogOperateRepository.java | 3 +- pom.xml | 7 + 11 files changed, 1006 insertions(+), 4 deletions(-) create mode 100644 modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseMongoRepository.java create mode 100644 modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseMongoRepositoryImpl.java create mode 100644 modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseMongoRepositoryFactoryBean.java create mode 100644 modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/BsonPackTool.java diff --git a/modules/i3plus-pojo-base/pom.xml b/modules/i3plus-pojo-base/pom.xml index c5bfff4..7582a6b 100644 --- a/modules/i3plus-pojo-base/pom.xml +++ b/modules/i3plus-pojo-base/pom.xml @@ -27,6 +27,10 @@ org.apache.commons commons-lang3 + + com.alibaba + fastjson + diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseMongoRepository.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseMongoRepository.java new file mode 100644 index 0000000..abb1c6d --- /dev/null +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/dao/BaseMongoRepository.java @@ -0,0 +1,50 @@ +package cn.estsh.i3plus.pojo.base.jpa.dao; + +import cn.estsh.i3plus.pojo.base.common.Pager; +import org.bson.conversions.Bson; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.repository.NoRepositoryBean; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * @Description : 自定义Repository的方法接口 + * @Reference : MongoRepository + * @Author : alwaysfrin + * @CreateDate : 2018-09-13 10:34 + * @Modify: + **/ +@NoRepositoryBean +public interface BaseMongoRepository extends MongoRepository { + + T getById(long id); + + List findByProperty(String propertyName, Object value); + + List findByProperty(String propertyName, Object value,String orderByParam, int ascOrDesc); + + List findByPropertyLike(String propertyName, Object value); + + List findByPropertyLike(String propertyName, Object value,String orderByParam, int ascOrDesc); + + T getByProperty(String propertyName, Object value); + + List findByBson(Bson bson); + + List findByBson(Bson bson,String orderByParam, int ascOrDesc); + + long findByBsonCount(Bson bson); + + List findByBsonPager(Bson bson,Pager pager); + + List findByBsonPager(Bson bson,Pager pager,String orderByParam, int ascOrDesc); + + long listCount(); + + List listPager(Pager pager); + + List listPager(Pager pager,String orderByParam, int ascOrDesc); +} diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseMongoRepositoryImpl.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseMongoRepositoryImpl.java new file mode 100644 index 0000000..f44aa09 --- /dev/null +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseMongoRepositoryImpl.java @@ -0,0 +1,286 @@ +package cn.estsh.i3plus.pojo.base.jpa.daoimpl; + +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseMongoRepository; +import cn.estsh.i3plus.pojo.base.tool.SnowflakeIdMaker; +import com.alibaba.fastjson.JSONObject; +import com.mongodb.Block; +import com.mongodb.client.FindIterable; +import com.mongodb.client.model.Filters; +import com.mongodb.client.model.Sorts; +import org.apache.commons.lang3.StringUtils; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mapping.context.MappingContext; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; +import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty; +import org.springframework.data.mongodb.repository.query.MongoEntityInformation; +import org.springframework.data.mongodb.repository.support.SimpleMongoRepository; + +import javax.persistence.Id; +import java.io.Serializable; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.UUID; + +/** + * @Description : 自定义mongodb持久化接口实现 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-13 11:24 + * @Modify: + **/ +public class BaseMongoRepositoryImpl extends SimpleMongoRepository + implements BaseMongoRepository { + public static final Logger LOGGER = LoggerFactory.getLogger(BaseMongoRepositoryImpl.class); + + /** + * 持久化上下文 + */ + private final MongoOperations mongoOperations; + private final MongoEntityInformation entityInformation; + private final MappingContext, MongoPersistentProperty> mongoContext; + private final Class entityClass; + + public BaseMongoRepositoryImpl(MongoEntityInformation metadata, MongoOperations mongoOperations) { + super(metadata, mongoOperations); + this.entityInformation = metadata; + this.mongoOperations = mongoOperations; + this.entityClass = this.entityInformation.getJavaType(); + mongoContext = mongoOperations.getConverter().getMappingContext(); + } + + /** + * 重写新增方法 + * @param entity + * @param + * @return + */ + @Override + public S insert(S entity) { + innerSave(entity); + return entity; + } + + /** + * 保存对象 + * @param item 保存对象 + * @return + */ + private T innerSave(T item) { + try { + if(item==null)return null; + Class clazz = item.getClass(); + + //获取主键 + Field idField = clazz.getField("id"); + if(idField == null){ + idField = clazz.getField("primaryKey"); + } + if(idField == null){ + // 遍历所有属性,以@Id声明确认主键 + Field[] fields = clazz.getFields(); + for(Field f : fields){ + if(f.getAnnotation(Id.class) != null){ + idField = f; + break; + } + } + } + + if(idField != null){ + Class type = idField.getType(); + Object val = idField.get(item); + if((type == long.class || type == Long.class) && (val == null || Long.parseLong(val.toString()) == 0)){ + // long类型主键,以snowflake为主键 + idField.set(item, new SnowflakeIdMaker().nextId()); + } else if(type == String.class && (val==null || "".equals(val))){ + // String类型主键,以UUID为主键 + idField.set(item, UUID.randomUUID().toString().replace("-", "").toLowerCase()); + } + } + + this.mongoOperations.insert(item, this.entityInformation.getCollectionName()); + if(idField!=null){ + return item; + }else { + return null; + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + @Override + public Optional findById(ID id) { + T entity = this.mongoOperations.findById(id, this.entityInformation.getJavaType(), this.entityInformation.getCollectionName()); + + if(entity != null) { + return Optional.of(entity); + }else{ + return null; + } + } + + @Override + public T getById(long id) { + return this.mongoOperations.findById(id, this.entityInformation.getJavaType(), this.entityInformation.getCollectionName()); + } + + @Override + public List findByProperty(String propertyName, Object value) { + return findByProperty(propertyName,value,null,0); + } + + @Override + public List findByProperty(String propertyName, Object value, String orderByParam, int ascOrDesc) { + Bson bson = Filters.and( + Filters.eq(propertyName, value) + ); + + return findByBson(bson,orderByParam,ascOrDesc); + } + + @Override + public List findByPropertyLike(String propertyName, Object value) { + return findByPropertyLike(propertyName,value,null,0); + } + + @Override + public List findByPropertyLike(String propertyName, Object value, String orderByParam, int ascOrDesc) { + Bson bson = Filters.and( + Filters.regex(propertyName, value.toString()) + ); + + return findByBson(bson,orderByParam,ascOrDesc); + } + + @Override + public T getByProperty(String propertyName, Object value) { + List tList = this.findByProperty(propertyName,value); + if(tList.size() > 0){ + return tList.iterator().next(); + }else{ + return null; + } + } + + /** + * 根据bson查询 + * @param bson + * @return + */ + public List findByBson(Bson bson) { + return findByBson(bson,null,0); + } + + @Override + public List findByBson(Bson bson, String orderByParam, int ascOrDesc) { + List dList = new ArrayList<>(); + Block saveBlock = new Block() { + @Override + public void apply(final Document document) { + dList.add(document); + } + }; + + FindIterable findIter = mongoOperations.getCollection(this.entityInformation.getCollectionName()).find(bson); + if(StringUtils.isNotBlank(orderByParam) && ascOrDesc != 0){ + //排序 + if(ascOrDesc == CommonEnumUtil.ASC_OR_DESC.ASC.getValue()){ + findIter.sort(Sorts.ascending(orderByParam)); + }else{ + findIter.sort(Sorts.descending(orderByParam)); + } + } + findIter.forEach(saveBlock); + + return packObjectListFromDocument(dList); + } + + @Override + public long findByBsonCount(Bson bson) { + return mongoOperations.getCollection(this.entityInformation.getCollectionName()).count(bson); + } + + private List packObjectListFromDocument(List dList) { + //将获取的document转为对象 + List resultList = new ArrayList<>(); + for(Document d : dList){ + resultList.add(JSONObject.parseObject(d.toJson(), entityClass)); + } + + return resultList; + } + + @Override + public List findByBsonPager(Bson bson, Pager pager) { + return findByBsonPager(bson,pager,null,0); + } + + @Override + public List findByBsonPager(Bson bson, Pager pager, String orderByParam, int ascOrDesc) { + List dList = new ArrayList<>(); + Block saveBlock = new Block() { + @Override + public void apply(final Document document) { + dList.add(document); + } + }; + + FindIterable findIter = mongoOperations.getCollection(this.entityInformation.getCollectionName()).find(bson) + .skip(pager.getStartRow()) + .limit(pager.getPageSize()); + if(StringUtils.isNotBlank(orderByParam) && ascOrDesc != 0){ + //排序 + if(ascOrDesc == CommonEnumUtil.ASC_OR_DESC.ASC.getValue()){ + findIter.sort(Sorts.ascending(orderByParam)); + }else{ + findIter.sort(Sorts.descending(orderByParam)); + } + } + findIter.forEach(saveBlock); + return packObjectListFromDocument(dList); + } + + @Override + public long listCount() { + return mongoOperations.getCollection(this.entityInformation.getCollectionName()).count(); + } + + @Override + public List listPager(Pager pager) { + return listPager(pager,null,0); + } + + @Override + public List listPager(Pager pager, String orderByParam, int ascOrDesc) { + List dList = new ArrayList<>(); + Block saveBlock = new Block() { + @Override + public void apply(final Document document) { + dList.add(document); + } + }; + FindIterable findIter = mongoOperations.getCollection(this.entityInformation.getCollectionName()).find() + .skip(pager.getStartRow()) + .limit(pager.getPageSize()); + if(StringUtils.isNotBlank(orderByParam) && ascOrDesc != 0){ + //排序 + if(ascOrDesc == CommonEnumUtil.ASC_OR_DESC.ASC.getValue()){ + findIter.sort(Sorts.ascending(orderByParam)); + }else{ + findIter.sort(Sorts.descending(orderByParam)); + } + } + findIter.forEach(saveBlock); + return packObjectListFromDocument(dList); + } +} diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java index 0251050..5193449 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/daoimpl/BaseRepositoryImpl.java @@ -21,8 +21,8 @@ import java.util.*; * @CreateDate : 2018-09-13 11:24 * @Modify: **/ -public class BaseRepositoryImpl extends SimpleJpaRepository - implements BaseRepository { +public class BaseRepositoryImpl extends SimpleJpaRepository + implements BaseRepository { public static final Logger LOGGER = LoggerFactory.getLogger(BaseRepositoryImpl.class); /** diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseMongoRepositoryFactoryBean.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseMongoRepositoryFactoryBean.java new file mode 100644 index 0000000..a8ff6df --- /dev/null +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseMongoRepositoryFactoryBean.java @@ -0,0 +1,63 @@ +package cn.estsh.i3plus.pojo.base.jpa.factory; + +import cn.estsh.i3plus.pojo.base.jpa.daoimpl.BaseMongoRepositoryImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.repository.MongoRepository; +import org.springframework.data.mongodb.repository.query.MongoEntityInformation; +import org.springframework.data.mongodb.repository.support.MongoRepositoryFactory; +import org.springframework.data.mongodb.repository.support.MongoRepositoryFactoryBean; +import org.springframework.data.repository.core.RepositoryInformation; +import org.springframework.data.repository.core.RepositoryMetadata; +import org.springframework.data.repository.core.support.RepositoryFactorySupport; + +import java.io.Serializable; + +/** + * @Description : 自定义mongodb持久化工厂类 + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-09-13 14:55 + * @Modify: + **/ +public class BaseMongoRepositoryFactoryBean, T, I extends Serializable> extends MongoRepositoryFactoryBean { + public static final Logger LOGGER = LoggerFactory.getLogger(BaseMongoRepositoryFactoryBean.class); + + public BaseMongoRepositoryFactoryBean(Class repositoryInterface) { + super(repositoryInterface); + } + + @Override + protected RepositoryFactorySupport getFactoryInstance(MongoOperations operations) { + //LOGGER.info("【初始mongo持久仓】"); + //生成持久mongo仓库实例 + return new BaseMongoRepositoryFactory(operations); + } + + //创建一个内部类,该类不用在外部访问 + private static class BaseMongoRepositoryFactory extends MongoRepositoryFactory { + + private final MongoOperations mongoOperations; + //private final MappingContext, MongoPersistentProperty> mappingContext; + + public BaseMongoRepositoryFactory(MongoOperations mongoOperations) { + super(mongoOperations); + this.mongoOperations = mongoOperations; + //this.mappingContext = mongoOperations.getConverter().getMappingContext(); + } + + //设置具体的实现类是BaseRepositoryImpl + @Override + protected Object getTargetRepository(RepositoryInformation information) { + MongoEntityInformation entityInformation = getEntityInformation(information.getDomainType()); + return new BaseMongoRepositoryImpl(entityInformation, mongoOperations); + } + + //设置具体的实现类的class + @Override + protected Class getRepositoryBaseClass(RepositoryMetadata metadata) { + return BaseMongoRepositoryImpl.class; + } + } +} diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseRepositoryFactoryBean.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseRepositoryFactoryBean.java index 5903690..f94c46e 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseRepositoryFactoryBean.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/jpa/factory/BaseRepositoryFactoryBean.java @@ -1,6 +1,8 @@ package cn.estsh.i3plus.pojo.base.jpa.factory; import cn.estsh.i3plus.pojo.base.jpa.daoimpl.BaseRepositoryImpl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.support.JpaRepositoryFactory; import org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean; @@ -19,6 +21,7 @@ import java.io.Serializable; * @Modify: **/ public class BaseRepositoryFactoryBean, T, I extends Serializable> extends JpaRepositoryFactoryBean { + public static final Logger LOGGER = LoggerFactory.getLogger(BaseRepositoryFactoryBean.class); public BaseRepositoryFactoryBean(Class repositoryInterface) { super(repositoryInterface); @@ -26,6 +29,7 @@ public class BaseRepositoryFactoryBean, T, I exten @Override protected RepositoryFactorySupport createRepositoryFactory(EntityManager em) { + //LOGGER.info("【初始JPA持久仓】"); return new BaseRepositoryFactory(em); } diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/BsonPackTool.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/BsonPackTool.java new file mode 100644 index 0000000..d8892ed --- /dev/null +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/BsonPackTool.java @@ -0,0 +1,586 @@ +package cn.estsh.i3plus.pojo.base.tool; + +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import com.alibaba.fastjson.JSONObject; +import com.mongodb.Block; +import com.mongodb.client.MongoCollection; +import com.mongodb.client.model.Filters; +import com.mongodb.client.model.Sorts; +import org.bson.Document; +import org.bson.conversions.Bson; +import org.springframework.data.mongodb.core.MongoOperations; + +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * @Description : + * @Reference : + * @Author : alwaysfrin + * @CreateDate : 2018-11-01 16:26 + * @Modify: + * + * (>) 大于 - $gt + * (<) 小于 - $lt + * (>=) 大于等于 - $gte + * (<= ) 小于等于 - $lte + * $ne ----------- not equal != + * $eq -------- equal = + * + * 查询 title 包含"库"字的文档: + * db.col.find({title:/库/}) + * + * 查询 title 字段以"教"字开头的文档: + * db.col.find({title:/^库/}) + * + * 查询 titl e字段以"教"字结尾的文档: + * db.col.find({title:/库$/}) + **/ +public class BsonPackTool { + + /** + * 防止sql注入 + * @param data + * @return + */ + public static String getSafeParam(Object data){ + return data.toString().replaceAll(";","") + .replaceAll("'","") + .replaceAll("\"","") + .replaceAll("/","") + .replaceAll("\\\\","") + .replaceAll("delete","") + .replaceAll("update","") + .replaceAll("insert",""); + } + + /** + * 单页查询,获取查询document结果集合 + * @param mongoOperations + * @param tableName 查询的表名 + * @param bson 查询条件 + * @param skip 忽略的条数 + * @param limit 查询的条数 + * @return document结果集合 + */ + public static List query(MongoOperations mongoOperations, String tableName, Bson bson, int skip, int limit) { + List newLins = new ArrayList<>(); + Block saveBlock = new Block() { + @Override + public void apply(final Document document) { + newLins.add(document); + } + }; + + //查询 + MongoCollection collection = mongoOperations.getCollection(tableName); + collection.find(bson).skip(skip).limit(limit).forEach(saveBlock); + collection.count(bson); + + return newLins; + } + + /** + * 分页查询 + * @param mongoOperations + * @param tableName 表名 + * @param bson 查询条件 + * @param pageSize 单页查询条数 + * @return 查询结果集合 + */ + public static List queryPages(MongoOperations mongoOperations, String tableName, Bson bson, int pageSize) { + //分页查询 + List list = new ArrayList<>(); + long count = mongoOperations.getCollection(tableName).count(bson); + int loops = (int)((count + pageSize - 1) / pageSize); + for(int i = 0; i < loops; i++) { + List newFinds = query(mongoOperations, tableName, bson, i * pageSize, pageSize); + list.addAll(newFinds); + } + return list; + } + + + /** + * 封装日期 + * @param startDate 开始日期 + * @param endDate 开始日期和结束日期,以逗号分隔(分为开始时间和结束时间) + * @param columnName HQL里对应的时间字段 + * @param bson 封装的bson + * @param isShowTime 是否包含时分秒 + */ + public static Bson timeBuilder( String startDate,String endDate, String columnName, Bson bson, boolean isShowTime) { + startDate = getSafeParam(startDate); + endDate = getSafeParam(endDate); + + if (startDate == null || startDate.trim().length() == 0) { + startDate = "1900-01-01"; + } else { + startDate = startDate.trim(); + } + if (isShowTime && startDate.trim().length()<=11) { + startDate+= " 00:00:00"; + } + if (endDate == null || endDate.trim().length() == 0) { + endDate = "2100-01-01"; + } else { + endDate = endDate.trim(); + } + if (isShowTime&& endDate.trim().length()<=11) { + endDate+= " 23:59:59"; + } + bson = Filters.and( + bson, + Filters.gte(columnName,startDate), //大于等于开始日期 + Filters.lte(columnName,endDate) //小于等于结束日期 + ); + + return bson; + } + + /** + * 封装日期 + * @param date 开始日期和结束日期,以逗号分隔(分为开始时间和结束时间) + * @param columnName HQL里对应的时间字段 + * @param bson 封装的bson + * @param showTaday 如果没有开始时间和结束时间,是否查询当天时间,还是查询所有时间。true:查询当天时间,false:查询所有 + * @param isShowTime 是否包含时分秒 + */ + public static Bson timeBuilder( String date, String columnName, Bson bson, Boolean showTaday,boolean isShowTime) { + date = getSafeParam(date); + + String today = (new SimpleDateFormat("yyyy-MM-dd")).format(new Date()); + if(date != null && date.trim().length() > 0 && (date.length() == 1 || ",".equals(date))){ + //只有一个逗号 + date = ""; + } + if(date != null && date.trim().length() > 0){ + String[] time = date.split(","); + if(time.length == 1){ + //只有开始日期,没有结束日期 + bson = Filters.and( + bson, + //Filters.eq(columnName,time[0]) + Filters.regex(columnName, "^"+time[0]) //like 日期%^ + ); + }else if (time.length == 2 && ((time[0] != null && time[0].trim().length() > 0) || (time[1] != null & time[1].trim().length() > 0))) { + if (time[0] == null || time[0].trim().length() == 0) { + time[0] = "1900-01-01"; + } else { + time[0] = time[0].trim(); + } + if (isShowTime && time[0].trim().length()<=11) { + time[0]+= " 00:00:00"; + } + if (time[1] == null || time[1].trim().length() == 0) { + time[1] = "2100-01-01"; + } else { + time[1] = time[1].trim(); + } + if (isShowTime&& time[1].trim().length()<=11) { + time[1]+= " 23:59:59"; + } + bson = Filters.and( + bson, + Filters.gte(columnName,time[0]), //大于等于开始日期 + Filters.lte(columnName,time[1]) //小于等于结束日期 + ); + } else { + if (showTaday) { + if (isShowTime) { + + bson = Filters.and( + bson, + Filters.gte(columnName,time[0] + " 00:00:00"), //大于等于开始日期 + Filters.lte(columnName,time[1] + " 23:59:59") //小于等于结束日期 + ); + }else{ + bson = Filters.and( + bson, + Filters.gte(columnName,time[0]), //大于等于开始日期 + Filters.lte(columnName,time[1]) //小于等于结束日期 + ); + } + } + } + } + return bson; + } + + /** + * 封装String对象成like语句 + * @param str 对象值 + * @param columnName 列名 + * @param bson + */ + public static Bson getStringLikerPack(String str,String columnName, Bson bson) { + if (str != null && str.trim().length() > 0) { + str = getSafeParam(str); + + bson = Filters.and( + bson, + Filters.regex(columnName, str) //like + ); + } + + return bson; + } + + /** + * 封装String对象成like语句 + * @param str 对象值 + * @param columnName 列名 + * @param bson + */ + public static Bson getStringLikerPackOr(String str,String columnName, Bson bson) { + if (str != null && str.trim().length() > 0) { + str = getSafeParam(str); + + bson = Filters.and( + bson, + Filters.or( + Filters.regex(columnName, str) //like + ) + ); + } + return bson; + } + + /** + * 封装String对象成like语句(右侧模糊) + * @param str 对象值 + * @param columnName 列名 + * @param bson + */ + public static Bson getStringRightLikerPack(String str,String columnName, Bson bson) { + if (str != null && str.trim().length() > 0) { + str = getSafeParam(str); + bson = Filters.and( + bson, + Filters.regex(columnName, str + "^") //like + ); + } + return bson; + } + + /** + * 封装String对象成like语句(左侧模糊) + * @param str 对象值 + * @param columnName 列名 + * @param bson + */ + public static Bson getStringLeftLikerPack(String str,String columnName, Bson bson) { + if (str != null && str.trim().length() > 0) { + str = getSafeParam(str); + bson = Filters.and( + bson, + Filters.regex(columnName, "^" + str) //like + ); + } + return bson; + } + + /** + * 封装String对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getStringEqualPack(String data,String columnName, Bson bson) { + if(data != null && data.trim().length() > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumEqualPack(Object data,String columnName, Bson bson) { + if(data!=null&&Long.parseLong(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumEqualPackForZero(Object data,String columnName, Bson bson) { + if(data!=null&&Long.parseLong(data.toString()) >= 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumWithZeroEqualPack(Object data,String columnName, Bson bson) { + if(data!=null&&Long.parseLong(data.toString()) >= 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成大于语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumBiggerPack(Object data,String columnName, Bson bson) { + if(data!=null&&Long.parseLong(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.gt(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成小于语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumSmallerPack(Object data,String columnName, Bson bson) { + if(data!=null&&Long.parseLong(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.lt(columnName, data) + ); + } + return bson; + } + + /** + * 封装double对象成大于语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getDoubleBiggerPack(Object data,String columnName, Bson bson) { + if(data!=null&&Double.parseDouble(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.gt(columnName, data) + ); + } + return bson; + } + + /** + * 封装double对象成小于语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getDoubleSmallerPack(Object data,String columnName, Bson bson) { + if(data!=null&&Double.parseDouble(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.lt(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumEqualPack(Object data,String columnName, Bson bson,Integer expvalue) { + if(data!=null&&Long.parseLong(data.toString()) > (long)expvalue){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装double对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumEqualPackDouble(Object data,String columnName, Bson bson) { + if(data!=null&&Double.parseDouble(data.toString()) > 0){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句 + * @param columnName 列名 + * @param bson + */ + public static Bson getNumEqualPackDouble(Object data,String columnName, Bson bson,Integer expvalue) { + if(data!=null&&Double.parseDouble(data.toString()) > (double)expvalue){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.eq(columnName, data) + ); + } + return bson; + } + + /** + * 封装long或者int的整数对象成equal语句(不等于) + * @param columnName 列名 + * @param bson + */ + public static Bson getNumNOEqualPack(Object data,String columnName, Bson bson) { + if(data!=null){ + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.ne(columnName, data) + ); + } + return bson; + } + + /** + * 封装in查询语句 + * @param data + * @param columnName + * @param bson + */ + public static Bson getInPack(String data,String columnName, Bson bson){ + if (data!=null&&data.trim().length()>0) { + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.in(columnName, data) + ); + } + return bson; + } + + /** + * 封装in String查询语句 + * @param data + * @param columnName + * @param bson + */ + public static Bson getInPackString(String data,String columnName, Bson bson){ + if (data != null && data.trim().length()>0) { + data = getSafeParam(data); + //判断最后一位是不是逗号 + if(data.lastIndexOf(",") != (data.length()-1)){ + data += ","; + } + String[] dataArray = data.substring(0, data.length()-1).split(","); + data = ""; + for (int i = 0 ; i < dataArray.length ;i++) { + if(i == dataArray.length -1){ + data += "'" + dataArray[i] + "'"; + }else{ + data += "'" + dataArray[i] + "',"; + } + } + bson = Filters.and( + bson, + Filters.in(columnName, data) + ); + } + return bson; + } + + /** + * 封装in String查询语句 + * @param data + * @param columnName + * @param bson + */ + public static Bson getNotInPackString(String data,String columnName, Bson bson){ + if (data != null && data.trim().length()>0) { + data = getSafeParam(data); + //判断最后一位是不是逗号 + if(data.lastIndexOf(",") != (data.length()-1)){ + data += ","; + } + String[] dataArray = data.substring(0, data.length()-1).split(","); + data = ""; + for (int i = 0 ; i < dataArray.length ;i++) { + if(i == dataArray.length -1){ + data += "'" + dataArray[i] + "'"; + }else{ + data += "'" + dataArray[i] + "',"; + } + } + bson = Filters.and( + bson, + Filters.nin(columnName, data) + ); + } + return bson; + } + + /** + * 封装not in查询语句 + * @param data + * @param columnName + * @param bson + */ + public static Bson getNotInPack(String data,String columnName, Bson bson){ + if (data!=null&&data.trim().length()>0) { + data = getSafeParam(data); + bson = Filters.and( + bson, + Filters.nin(columnName, data) + ); + } + return bson; + } + + /** + * 将MONGODB的BSON转成对象 + * @param dList + * @param entityClass + * @return + */ + public List packDocumentToObjectList(List dList,Class entityClass){ + //将获取的document转为对象 + List resultList = new ArrayList(); + for(Document d : dList){ + resultList.add(JSONObject.parseObject(d.toJson(), entityClass)); + } + + return resultList; + } +} diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/HqlPack.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/HqlPack.java index f3902c5..1740bb6 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/HqlPack.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/tool/HqlPack.java @@ -16,6 +16,8 @@ public class HqlPack { return data.toString().replaceAll(";","") .replaceAll("'","") .replaceAll("\"","") + .replaceAll("/","") + .replaceAll("\\\\","") .replaceAll("delete","") .replaceAll("update","") .replaceAll("insert",""); diff --git a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/LogOperate.java b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/LogOperate.java index a376260..aeb04e5 100644 --- a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/LogOperate.java +++ b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/bean/LogOperate.java @@ -27,7 +27,6 @@ import java.text.DecimalFormat; @Api(value="操作日志表",description = "操作日志表") public class LogOperate extends BaseBean { - @Column(name="OPERATE_MODULE_ID") @ApiParam(value ="操作模块(枚举)" , example = "-1") private Integer operateModuleId; diff --git a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/repository/LogOperateRepository.java b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/repository/LogOperateRepository.java index 798cefd..ebc7b4a 100644 --- a/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/repository/LogOperateRepository.java +++ b/modules/i3plus-pojo-platform/src/main/java/cn/estsh/i3plus/pojo/platform/repository/LogOperateRepository.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.pojo.platform.repository; +import cn.estsh.i3plus.pojo.base.jpa.dao.BaseMongoRepository; import cn.estsh.i3plus.pojo.base.jpa.dao.BaseRepository; import cn.estsh.i3plus.pojo.platform.bean.LogOperate; import org.springframework.data.mongodb.repository.MongoRepository; @@ -11,5 +12,5 @@ import org.springframework.data.mongodb.repository.MongoRepository; * @Date : 2018-10-22 12:03:00.118 * @Modify : **/ -public interface LogOperateRepository extends MongoRepository { +public interface LogOperateRepository extends BaseMongoRepository { } diff --git a/pom.xml b/pom.xml index d6218ea..bcf0ef5 100644 --- a/pom.xml +++ b/pom.xml @@ -115,6 +115,13 @@ shiro-core 1.4.0 + + + + com.alibaba + fastjson + 1.2.49 + From 54384429a77d7a6f1dbef1537a73b780d27b8095 Mon Sep 17 00:00:00 2001 From: jimmy <1622218722@qq.com> Date: Mon, 5 Nov 2018 18:03:18 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=A4=E6=98=93?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../i3plus/pojo/base/enumutil/WmsEnumUtil.java | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java index 8518b7a..3c06790 100644 --- a/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java +++ b/modules/i3plus-pojo-base/src/main/java/cn/estsh/i3plus/pojo/base/enumutil/WmsEnumUtil.java @@ -10,6 +10,40 @@ import com.fasterxml.jackson.annotation.JsonFormat; * @Modify: **/ public class WmsEnumUtil { + + /** + * 交易状态 + */ + public enum TRANS_STATUS { + CREATE(1, "创建"), FINISH(2, "完成"),FAIL(3,"失败"); + + private int value; + private String description; + + private TRANS_STATUS(int value, String description) { + this.value = value; + this.description = description; + } + + public int getValue() { + return value; + } + + public String getDescription() { + return description; + } + + public static String valueOf(int val) { + String tmp = null; + for (int i = 0; i < values().length; i++) { + if (values()[i].value == val) { + tmp = values()[i].description; + } + } + return tmp; + } + } + /** * 消息队列,队列名称 * 1: success_queue