提交 b0595b0b 编写于 作者: sq3536's avatar sq3536

代码分层

上级 e8233e50
...@@ -138,7 +138,6 @@ public class DOModel implements Serializable { ...@@ -138,7 +138,6 @@ public class DOModel implements Serializable {
public Serializable getKeyValue(BaseData data,boolean genKeyWhenNotExists) public Serializable getKeyValue(BaseData data,boolean genKeyWhenNotExists)
{ {
if(this.getSchema()!=null) { if(this.getSchema()!=null) {
this.getSchema().fillParentKey(data);
return this.getSchema().getKeyValue(data, genKeyWhenNotExists); return this.getSchema().getKeyValue(data, genKeyWhenNotExists);
} }
return null; return null;
...@@ -147,24 +146,30 @@ public class DOModel implements Serializable { ...@@ -147,24 +146,30 @@ public class DOModel implements Serializable {
public BaseData newData(Object keyValue) public BaseData newData(Object keyValue)
{ {
if(this.getSchema()!=null) if(this.getSchema()!=null)
return this.getSchema().setKeyValue(new BaseData(),keyValue); return this.getSchema().newData(keyValue);
return null; return null;
} }
public BaseData fillParentKey(BaseData data) public DOModel fillParentKey(BaseData data)
{ {
if(this.getSchema()!=null) if(this.getSchema()!=null)
return this.getSchema().fillParentKey(data); this.getSchema().fillParentKey(data);
return null; return this;
} }
public FilterData fillParentFilter(FilterData data) public DOModel fillParentFilter(FilterData data)
{ {
if(this.getSchema()!=null) if(this.getSchema()!=null)
return this.getSchema().fillParentFilter(data); this.getSchema().fillParentFilter(data);
return null; return this;
} }
public DOModel fillDefaultValue(BaseData data,boolean newFlag)
{
if(this.getSchema()!=null)
this.getSchema().fillDefaultValue(data,newFlag);
return this;
}
......
...@@ -278,4 +278,45 @@ public class BaseData extends DataObj ...@@ -278,4 +278,45 @@ public class BaseData extends DataObj
return null; return null;
return new BaseData().setAll(map); return new BaseData().setAll(map);
} }
public Serializable getKeyBySchema(boolean genKeyWhenNotExists)
{
if(this.getPojoSchema()!=null)
return this.getPojoSchema().getKeyValue(this, genKeyWhenNotExists);
else if(this.getPOSchema()!=null)
return this.getPOSchema().getKeyValue(this,genKeyWhenNotExists);
return this.getKey();
}
public BaseData setKeyBySchema(Object keyValue)
{
if(this.getPojoSchema()!=null) {
this.getPojoSchema().setKeyValue(this, keyValue);
return this;
}else if(this.getPOSchema()!=null){
this.getPOSchema().setKeyValue(this, keyValue);
return this;
}
return this.setKey(keyValue);
}
@JsonIgnore
@JSONField(serialize = false)
public BaseData fillParentKey()
{
if(this.getPojoSchema()!=null)
this.getPojoSchema().fillParentKey(this);
return this;
}
public BaseData fillDefaultValue(boolean newFlag)
{
if(this.getPojoSchema()!=null)
this.getPojoSchema().fillDefaultValue(this,newFlag);
return this;
}
} }
package cn.ibizlab.core.data.enums;
/**
* 实体属性默认值类型
*/
public enum DefaultValueType {
/**
* 用户全局对象
*/
SESSION,
/**
* 系统全局对象
*/
APPLICATION,
/**
* 唯一编码
*/
UNIQUEID,
/**
* 网页请求
*/
CONTEXT,
/**
* 数据对象属性
*/
PARAM,
/**
* 当前时间
*/
CURTIME,
/**
* 当前操作用户(编号)
*/
OPERATOR,
/**
* 当前操作用户(名称)
*/
OPERATORNAME,
/**
* 当前应用数据
*/
APPDATA,
/**
* 默认值
*/
NONE,
/**
* 用户自定义
*/
USER,
/**
* 用户自定义2
*/
USER2,
/**
* 用户自定义3
*/
USER3,
/**
* 用户自定义4
*/
USER4
}
package cn.ibizlab.core.data.enums;
/**
* 实体属性预定义类型
*/
public enum Predefined {
/**
* 创建人标识
*/
CREATEMAN,
/**
* 创建人名称
*/
CREATEMANNAME,
/**
* 更新人标识
*/
UPDATEMAN,
/**
* 更新人名称
*/
UPDATEMANNAME,
/**
* 创建时间
*/
CREATEDATE,
/**
* 更新时间
*/
UPDATEDATE,
/**
* 组织机构标识
*/
ORGID,
/**
* 组织机构名称
*/
ORGNAME,
/**
* 部门标识
*/
ORGSECTORID,
/**
* 部门名称
*/
ORGSECTORNAME,
/**
* 逻辑有效
*/
LOGICVALID,
/**
* 排序
*/
ORDERVALUE,
/**
* 不处理
*/
NONE,
/**
* 动态父类型
*/
PARENTTYPE,
/**
* 动态父标识
*/
PARENTID,
/**
* 动态父名称
*/
PARENTNAME
}
...@@ -31,7 +31,7 @@ public interface DbDataMapper { ...@@ -31,7 +31,7 @@ public interface DbDataMapper {
int saveBatch(@Param("schema") POSchema schema, @Param("list") List<BaseData> list); int saveBatch(@Param("schema") POSchema schema, @Param("list") List<BaseData> list);
int countData(@Param("schema") POSchema schema, @Param("data") BaseData data); Long countData(@Param("schema") POSchema schema, @Param("data") BaseData data);
List<BaseData> getData(@Param("schema") POSchema schema, @Param("data") BaseData data); List<BaseData> getData(@Param("schema") POSchema schema, @Param("data") BaseData data);
...@@ -44,7 +44,7 @@ public interface DbDataMapper { ...@@ -44,7 +44,7 @@ public interface DbDataMapper {
Page<BaseData> selectData(@Param("schema") POSchema schema, @Param("data") BaseData data, IPage page); Page<BaseData> selectData(@Param("schema") POSchema schema, @Param("data") BaseData data, IPage page);
@Update("${sql}") @Update("${sql}")
boolean executeRaw(@Param("schema") POSchema schema, @Param("sql") String sql, @Param("param") BaseData param); int executeRaw(@Param("schema") POSchema schema, @Param("sql") String sql, @Param("param") BaseData param);
@Select("${sql}") @Select("${sql}")
List<BaseData> queryData(@Param("schema") POSchema schema, @Param("sql") String sql, @Param("srf") FilterData context, @Param("ew") QueryWrapper wrapper); List<BaseData> queryData(@Param("schema") POSchema schema, @Param("sql") String sql, @Param("srf") FilterData context, @Param("ew") QueryWrapper wrapper);
...@@ -145,7 +145,7 @@ public interface DbDataMapper { ...@@ -145,7 +145,7 @@ public interface DbDataMapper {
} }
} }
default int countData(String ds,@Param("schema") POSchema schema, @Param("data") BaseData data){ default Long countData(String ds,@Param("schema") POSchema schema, @Param("data") BaseData data){
try try
{ {
DynamicDataSourceContextHolder.push(ds); DynamicDataSourceContextHolder.push(ds);
...@@ -212,7 +212,7 @@ public interface DbDataMapper { ...@@ -212,7 +212,7 @@ public interface DbDataMapper {
} }
@Update("${sql}") @Update("${sql}")
default boolean executeRaw(String ds,@Param("schema") POSchema schema, @Param("sql") String sql, @Param("param") BaseData param){ default int executeRaw(String ds,@Param("schema") POSchema schema, @Param("sql") String sql, @Param("param") BaseData param){
try try
{ {
DynamicDataSourceContextHolder.push(ds); DynamicDataSourceContextHolder.push(ds);
......
...@@ -193,7 +193,7 @@ public class PojoOption extends DataObj ...@@ -193,7 +193,7 @@ public class PojoOption extends DataObj
} }
public Boolean isPhysicalField() { public Boolean isPhysicalField() {
return this.getBooleanValue("physical_field",this.getBooleanValue("persisent",true)); return this.getBooleanValue("physical_field",this.getBooleanValue("Persistent",true));
} }
public PojoOption setPhysicalField(Boolean physicalField) { public PojoOption setPhysicalField(Boolean physicalField) {
......
...@@ -2,6 +2,8 @@ package cn.ibizlab.core.data.model; ...@@ -2,6 +2,8 @@ package cn.ibizlab.core.data.model;
import cn.ibizlab.core.data.dto.BaseData; import cn.ibizlab.core.data.dto.BaseData;
import cn.ibizlab.core.data.dto.FilterData; import cn.ibizlab.core.data.dto.FilterData;
import cn.ibizlab.core.data.enums.DefaultValueType;
import cn.ibizlab.core.data.enums.Predefined;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
import cn.ibizlab.util.helper.DataObject; import cn.ibizlab.util.helper.DataObject;
import cn.ibizlab.util.helper.Inflector; import cn.ibizlab.util.helper.Inflector;
...@@ -17,6 +19,7 @@ import lombok.Getter; ...@@ -17,6 +19,7 @@ import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import org.springframework.util.AlternativeJdkIdGenerator;
import org.springframework.util.DigestUtils; import org.springframework.util.DigestUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
...@@ -703,27 +706,89 @@ public class PojoSchema { ...@@ -703,27 +706,89 @@ public class PojoSchema {
curUser.setUserid(data.getStringValue("SRF_PERSONID")); curUser.setUserid(data.getStringValue("SRF_PERSONID"));
curUser.setPersonname(data.getStringValue("SRF_PERSONNAME")); curUser.setPersonname(data.getStringValue("SRF_PERSONNAME"));
} }
Timestamp now=new Timestamp(System.currentTimeMillis());
getProperties().values().forEach(sub-> { getProperties().values().forEach(sub-> {
if (Type.array.getCode().equals(sub.getType()) || Type.object.getCode().equals(sub.getType()) || !sub.getOptions().isPhysicalField() || (!StringUtils.isEmpty(sub.getOptions().getDefaultValue()))) if (Type.array.getCode().equals(sub.getType()) || Type.object.getCode().equals(sub.getType()) || !sub.getOptions().isPhysicalField() ||
(StringUtils.isEmpty(sub.getOptions().getDefaultValue())&&StringUtils.isEmpty(sub.getOptions().getPredefined())))
return; return;
String name=sub.getName().toLowerCase();
if(newFlag&&(!ObjectUtils.isEmpty(data.get(sub.getName().toLowerCase())))) Object value=data.get(name);
return; if(!StringUtils.isEmpty(sub.getOptions().getPredefined()))
String predefined=this.getOptions().getPredefined();
if(!newFlag)
{ {
if(predefined.equals("UPDATEDATE")) try
data.set(sub.getName().toLowerCase(),new Timestamp(System.currentTimeMillis())); {
else if(predefined.equals("UPDATEMAN")) Predefined predefinedType=Predefined.valueOf(sub.getOptions().getPredefined());
data.set(sub.getName().toLowerCase(),curUser.getUserid()); if(newFlag)
else if(predefined.equals("UPDATEMANNAME")) {
data.set(sub.getName().toLowerCase(),curUser.getPersonname()); switch(predefinedType) {
case CREATEMAN:
data.set(name, curUser.getUserid());
break;
case CREATEMANNAME:
data.set(name, curUser.getPersonname());
break;
case UPDATEMAN:
data.set(name, curUser.getUserid());
break;
case UPDATEMANNAME:
data.set(name, curUser.getPersonname());
break;
case CREATEDATE:
data.set(name, now);
break;
case UPDATEDATE:
data.set(name, now);
break;
case ORGID:
if(ObjectUtils.isEmpty(value)) {
data.set(name, curUser.getOrgid());
}
break;
case ORGNAME:
if(ObjectUtils.isEmpty(value)) {
data.set(name, curUser.getOrgname());
}
break;
case ORGSECTORID:
if(ObjectUtils.isEmpty(value)) {
data.set(name, curUser.getMdeptid());
}
break;
case ORGSECTORNAME:
if(ObjectUtils.isEmpty(value)) {
data.set(name, curUser.getMdeptname());
}
break;
case LOGICVALID:
data.set(name, this.getOptions().getLogicVal());
break;
}
}
else
{
{
switch(predefinedType) {
case UPDATEMAN:
data.set(name, curUser.getUserid());
break;
case UPDATEMANNAME:
data.set(name, curUser.getPersonname());
break;
case UPDATEDATE:
data.set(name, now);
break;
}
}
}
}catch (Exception ex) {}
return; return;
}
}
if((!newFlag)||ObjectUtils.isEmpty(data.get(name)))
return;
String DV=sub.getOptions().getDefaultValue(); String DV=sub.getOptions().getDefaultValue();
if(StringUtils.isEmpty(DV))
return;
String defaultValueType=""; String defaultValueType="";
String defaultValue=""; String defaultValue="";
if(DV.startsWith("$")) if(DV.startsWith("$"))
...@@ -733,10 +798,66 @@ public class PojoSchema { ...@@ -733,10 +798,66 @@ public class PojoSchema {
if(dvs.length>=1) if(dvs.length>=1)
defaultValueType=dvs[0]; defaultValueType=dvs[0];
if(dvs.length>=2) if(dvs.length>=2)
defaultValue=dvs[1]; defaultValue=dvs[1].toLowerCase();
} }
else else
defaultValue=DV; defaultValue=DV;
if(!StringUtils.isEmpty(defaultValueType))
{
try
{
DefaultValueType dvt=DefaultValueType.valueOf(defaultValueType);
switch(dvt) {
case SESSION:
if(!StringUtils.isEmpty(defaultValue)) {
Object sessionFieldValue = curUser.getSessionParams().get(defaultValue);
if(!ObjectUtils.isEmpty(sessionFieldValue)) {
data.set(name, sessionFieldValue);
}
}
break;
case APPLICATION:
//暂未实现
break;
case UNIQUEID:
data.set(name, IdWorker.get32UUID());
break;
case CONTEXT:
if(!StringUtils.isEmpty(defaultValue)) {
Object paramFieldValue=data.get(defaultValue);
if(!ObjectUtils.isEmpty(paramFieldValue)) {
data.set(name, paramFieldValue);
}
}
break;
case PARAM:
if(!StringUtils.isEmpty(defaultValue)) {
Object paramFieldValue=data.get(defaultValue);
if(!ObjectUtils.isEmpty(paramFieldValue)) {
data.set(name, paramFieldValue);
}
}
break;
case OPERATOR:
data.set(name, curUser.getUserid());
break;
case OPERATORNAME:
data.set(name, curUser.getPersonname());
break;
case CURTIME:
data.set(name, now);
break;
case APPDATA:
//暂未实现
break;
case NONE:
data.set(name, defaultValue);
break;
}
}catch (Exception ex){}
}
else if(!StringUtils.isEmpty(defaultValue))
data.set(name, defaultValue);
}); });
......
...@@ -7,6 +7,8 @@ import cn.ibizlab.core.data.mongodb.DynamicMongoContextHolder; ...@@ -7,6 +7,8 @@ import cn.ibizlab.core.data.mongodb.DynamicMongoContextHolder;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Select;
...@@ -86,16 +88,16 @@ public class MongoDataRepository { ...@@ -86,16 +88,16 @@ public class MongoDataRepository {
} }
public Query getKeyQuery(POSchema schema,BaseData data) public Query getKeyQuery(BaseData data)
{ {
Query query = new Query(); Query query = new Query();
if(!ObjectUtils.isEmpty(data.getKey())) if(!ObjectUtils.isEmpty(data.getKey()))
return query.addCriteria(new Criteria().and("_id").is(data.getKey())); return query.addCriteria(new Criteria().and("_id").is(data.getKey()));
else else
throw new BadRequestAlertException("未找到主键",schema.getName(),null); throw new BadRequestAlertException("未找到主键","mongo",null);
} }
public Query getKeyQuery(POSchema schema,List list) public Query getKeyQuery(List list)
{ {
Query query = new Query(); Query query = new Query();
if(ObjectUtils.isEmpty(list)) if(ObjectUtils.isEmpty(list))
...@@ -107,7 +109,7 @@ public class MongoDataRepository { ...@@ -107,7 +109,7 @@ public class MongoDataRepository {
BaseData data = (BaseData) item; BaseData data = (BaseData) item;
Serializable key=data.getKey(); Serializable key=data.getKey();
if(ObjectUtils.isEmpty(key)) if(ObjectUtils.isEmpty(key))
throw new BadRequestAlertException("未找到主键",schema.getName(),null); throw new BadRequestAlertException("未找到主键","mongo",null);
ids.add(key.toString()); ids.add(key.toString());
}); });
...@@ -146,9 +148,10 @@ public class MongoDataRepository { ...@@ -146,9 +148,10 @@ public class MongoDataRepository {
public int updateData(String ds,POSchema schema, BaseData data){ public int updateData(String ds,POSchema schema, BaseData data){
try try
{ {
DynamicMongoContextHolder.push(ds); Query query = getKeyQuery(data);
Query query = getKeyQuery(schema,data);
Update update = getUpdateByObject(data); Update update = getUpdateByObject(data);
DynamicMongoContextHolder.push(ds);
return (int)this.mongoTemplate.updateFirst(query, update, schema.getName()).getModifiedCount(); return (int)this.mongoTemplate.updateFirst(query, update, schema.getName()).getModifiedCount();
} }
finally { finally {
...@@ -161,7 +164,7 @@ public class MongoDataRepository { ...@@ -161,7 +164,7 @@ public class MongoDataRepository {
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
list.forEach(data -> { list.forEach(data -> {
Query query = getKeyQuery(schema,data); Query query = getKeyQuery(data);
Update update = getUpdateByObject(data); Update update = getUpdateByObject(data);
this.mongoTemplate.updateFirst(query, update, schema.getName()); this.mongoTemplate.updateFirst(query, update, schema.getName());
}); });
...@@ -175,7 +178,7 @@ public class MongoDataRepository { ...@@ -175,7 +178,7 @@ public class MongoDataRepository {
try try
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
return (int)this.mongoTemplate.remove(getKeyQuery(schema,data),schema.getName()).getDeletedCount(); return (int)this.mongoTemplate.remove(getKeyQuery(data),schema.getName()).getDeletedCount();
} }
finally { finally {
DynamicMongoContextHolder.poll(); DynamicMongoContextHolder.poll();
...@@ -186,7 +189,7 @@ public class MongoDataRepository { ...@@ -186,7 +189,7 @@ public class MongoDataRepository {
try try
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
return (int)mongoTemplate.remove(getKeyQuery(schema,list),schema.getName()).getDeletedCount(); return (int)mongoTemplate.remove(getKeyQuery(list),schema.getName()).getDeletedCount();
} }
finally { finally {
DynamicMongoContextHolder.poll(); DynamicMongoContextHolder.poll();
...@@ -196,9 +199,10 @@ public class MongoDataRepository { ...@@ -196,9 +199,10 @@ public class MongoDataRepository {
public int saveData(String ds,POSchema schema, BaseData data){ public int saveData(String ds,POSchema schema, BaseData data){
try try
{ {
DynamicMongoContextHolder.push(ds); Query query = getKeyQuery(data);
Query query = getKeyQuery(schema,data);
Update update = getUpdateByObject(data); Update update = getUpdateByObject(data);
DynamicMongoContextHolder.push(ds);
return (int)this.mongoTemplate.upsert(query, update, schema.getName()).getModifiedCount(); return (int)this.mongoTemplate.upsert(query, update, schema.getName()).getModifiedCount();
} }
finally { finally {
...@@ -211,7 +215,7 @@ public class MongoDataRepository { ...@@ -211,7 +215,7 @@ public class MongoDataRepository {
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
list.forEach(data -> { list.forEach(data -> {
Query query = getKeyQuery(schema,data); Query query = getKeyQuery(data);
Update update = getUpdateByObject(data); Update update = getUpdateByObject(data);
mongoTemplate.upsert(query, update, schema.getName()); mongoTemplate.upsert(query, update, schema.getName());
}); });
...@@ -221,11 +225,11 @@ public class MongoDataRepository { ...@@ -221,11 +225,11 @@ public class MongoDataRepository {
} }
} }
public int countData(String ds,POSchema schema, BaseData data){ public long countData(String ds,POSchema schema, BaseData data){
try try
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
return (int)mongoTemplate.count(getQueryByObject(data),schema.getName()); return mongoTemplate.count(getQueryByObject(data),schema.getName());
} }
finally { finally {
DynamicMongoContextHolder.poll(); DynamicMongoContextHolder.poll();
...@@ -236,7 +240,7 @@ public class MongoDataRepository { ...@@ -236,7 +240,7 @@ public class MongoDataRepository {
try try
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
return mongoTemplate.find(getKeyQuery(schema,data),getEntityClass(),schema.getName()); return mongoTemplate.find(getKeyQuery(data),getEntityClass(),schema.getName());
} }
finally { finally {
DynamicMongoContextHolder.poll(); DynamicMongoContextHolder.poll();
...@@ -247,7 +251,32 @@ public class MongoDataRepository { ...@@ -247,7 +251,32 @@ public class MongoDataRepository {
try try
{ {
DynamicMongoContextHolder.push(ds); DynamicMongoContextHolder.push(ds);
return mongoTemplate.find(getKeyQuery(schema,list),getEntityClass(),schema.getName()); return mongoTemplate.find(getKeyQuery(list),getEntityClass(),schema.getName());
}
finally {
DynamicMongoContextHolder.poll();
}
}
public List<BaseData> getBatchKey(String ds,POSchema schema, List<BaseData> list){
try
{
BasicDBObject query=new BasicDBObject();
BasicDBList values = new BasicDBList();
list.forEach(item->{
Serializable key=item.getKey();
if(ObjectUtils.isEmpty(key))
throw new BadRequestAlertException("未找到主键","mongo",null);
values.add(key);
});
BasicDBObject in = new BasicDBObject("$in", values);
query.put("_id",in);
BasicDBObject fieldsObject = new BasicDBObject();
fieldsObject.put("_id", true);
Query queryIds = new BasicQuery(query.toJson(), fieldsObject.toJson());
DynamicMongoContextHolder.push(ds);
return mongoTemplate.find(queryIds,getEntityClass(),schema.getName());
} }
finally { finally {
DynamicMongoContextHolder.poll(); DynamicMongoContextHolder.poll();
...@@ -270,10 +299,11 @@ public class MongoDataRepository { ...@@ -270,10 +299,11 @@ public class MongoDataRepository {
public Page<BaseData> selectData(String ds,POSchema schema, BaseData data, Pageable page){ public Page<BaseData> selectData(String ds,POSchema schema, BaseData data, Pageable page){
try try
{ {
DynamicMongoContextHolder.push(ds);
if(page==null) if(page==null)
page= PageRequest.of(0,20, Sort.unsorted()); page= PageRequest.of(0,20, Sort.unsorted());
Query query = getQueryByObject(data); Query query = getQueryByObject(data);
DynamicMongoContextHolder.push(ds);
long total = mongoTemplate.count(query, BaseData.class,schema.getName()); long total = mongoTemplate.count(query, BaseData.class,schema.getName());
List<BaseData> list=mongoTemplate.find(query.with(page),BaseData.class,schema.getName()); List<BaseData> list=mongoTemplate.find(query.with(page),BaseData.class,schema.getName());
return new PageImpl<BaseData>(list,page,total); return new PageImpl<BaseData>(list,page,total);
...@@ -298,12 +328,13 @@ public class MongoDataRepository { ...@@ -298,12 +328,13 @@ public class MongoDataRepository {
public Page<BaseData> queryData(String ds,POSchema schema, String sql, FilterData context, Pageable page){ public Page<BaseData> queryData(String ds,POSchema schema, String sql, FilterData context, Pageable page){
try try
{ {
DynamicMongoContextHolder.push(ds);
if(page==null) if(page==null)
page=context.getPageable(); page=context.getPageable();
else else
context.setPageable(page); context.setPageable(page);
Query query = new BasicQuery(context.getQueryBuilder().get().toString()); Query query = new BasicQuery(context.getQueryBuilder().get().toString());
DynamicMongoContextHolder.push(ds);
long total = mongoTemplate.count(query, BaseData.class,schema.getName()); long total = mongoTemplate.count(query, BaseData.class,schema.getName());
List<BaseData> list=mongoTemplate.find(query.with(page),BaseData.class,schema.getName()); List<BaseData> list=mongoTemplate.find(query.with(page),BaseData.class,schema.getName());
return new PageImpl<BaseData>(list,page,total); return new PageImpl<BaseData>(list,page,total);
......
package cn.ibizlab.core.data.service;
import cn.ibizlab.core.data.domain.DOModel;
import cn.ibizlab.core.data.dto.BaseData;
import cn.ibizlab.core.data.dto.FilterData;
import cn.ibizlab.core.data.dto.RequestData;
import cn.ibizlab.core.data.dto.ResponseData;
import cn.ibizlab.core.data.model.DSLink;
import cn.ibizlab.core.data.model.POSchema;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import java.io.Serializable;
import java.util.List;
public interface IPersistentService {
BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet);
List<BaseData> createBatch(DSLink link,POSchema poSchema,List<BaseData> list,boolean bGet);
BaseData update(DSLink link,POSchema poSchema,BaseData et,boolean bGet);
List<BaseData> updateBatch(DSLink link,POSchema poSchema,List<BaseData> list,boolean bGet);
boolean remove(DSLink link,POSchema poSchema,Serializable key);
boolean removeBatch(DSLink link,POSchema poSchema,List<Serializable> idList);
boolean removeByMap(DSLink link,POSchema poSchema,BaseData et);
boolean removeByMapBatch(DSLink link,POSchema poSchema,List<BaseData> list);
BaseData get(DSLink link,POSchema poSchema,Serializable key);
List<BaseData> getBatch(DSLink link,POSchema poSchema,List<Serializable> idList);
BaseData getByMap(DSLink link,POSchema poSchema,BaseData et);
List<BaseData> getByMapBatch(DSLink link,POSchema poSchema,List<BaseData> list);
List<BaseData> getBatchKey(DSLink link,POSchema poSchema,List<BaseData> list);
Long count(DSLink link,POSchema poSchema,BaseData et);
boolean checkKey(DSLink link,POSchema poSchema,BaseData et);
BaseData save(DSLink link,POSchema poSchema,BaseData et,boolean bGet);
List<BaseData> saveBatch(DSLink link,POSchema poSchema,List<BaseData> list,boolean bGet);
List<BaseData> select(DSLink link,POSchema poSchema,BaseData et);
Page<BaseData> select(DSLink link,POSchema poSchema,BaseData et,Pageable pageable);
List<BaseData> query(DSLink link,POSchema poSchema,String dataQuery,FilterData context);
Page<BaseData> query(DSLink link,POSchema poSchema,String dataQuery,FilterData context,Pageable pageable);
List<BaseData> selectRaw(DSLink link,POSchema poSchema,String sql,FilterData context);
boolean execRaw(DSLink link,POSchema poSchema,String sql,BaseData param);
List<BaseData> fetch(DSLink link,POSchema poSchema,String dataSet,FilterData context);
Page<BaseData> fetch(DSLink link,POSchema poSchema,String dataSet,FilterData context,Pageable pageable);
default BaseData create(String datasource,String table,BaseData et,boolean bGet)
{
DSLink link=getDSLink(datasource);
return create(link,getSchema(link,table),et,bGet);
}
default List<BaseData> createBatch(String datasource,String table,List<BaseData> list,boolean bGet)
{
DSLink link=getDSLink(datasource);
return createBatch(link,getSchema(link,table),list,bGet);
}
default BaseData update(String datasource,String table,BaseData et,boolean bGet)
{
DSLink link=getDSLink(datasource);
return update(link,getSchema(link,table),et,bGet);
}
default List<BaseData> updateBatch(String datasource,String table,List<BaseData> list,boolean bGet)
{
DSLink link=getDSLink(datasource);
return updateBatch(link,getSchema(link,table),list,bGet);
}
default boolean remove(String datasource,String table,Serializable key)
{
DSLink link=getDSLink(datasource);
return remove(link,getSchema(link,table),key);
}
default boolean removeBatch(String datasource,String table,List<Serializable> idList)
{
DSLink link=getDSLink(datasource);
return removeBatch(link,getSchema(link,table),idList);
}
default boolean removeByMap(String datasource,String table,BaseData et)
{
DSLink link=getDSLink(datasource);
return removeByMap(link,getSchema(link,table),et);
}
default boolean removeByMapBatch(String datasource,String table,List<BaseData> list)
{
DSLink link=getDSLink(datasource);
return removeByMapBatch(link,getSchema(link,table),list);
}
default BaseData get(String datasource,String table,Serializable key)
{
DSLink link=getDSLink(datasource);
return get(link,getSchema(link,table),key);
}
default List<BaseData> getBatch(String datasource,String table,List<Serializable> idList)
{
DSLink link=getDSLink(datasource);
return getBatch(link,getSchema(link,table),idList);
}
default BaseData getByMap(String datasource,String table,BaseData et)
{
DSLink link=getDSLink(datasource);
return getByMap(link,getSchema(link,table),et);
}
default List<BaseData> getByMapBatch(String datasource,String table,List<BaseData> list)
{
DSLink link=getDSLink(datasource);
return getByMapBatch(link,getSchema(link,table),list);
}
default List<BaseData> getBatchKey(String datasource,String table,List<BaseData> list)
{
DSLink link=getDSLink(datasource);
return getBatchKey(link,getSchema(link,table),list);
}
default Long count(String datasource,String table,BaseData et)
{
DSLink link=getDSLink(datasource);
return count(link,getSchema(link,table),et);
}
default boolean checkKey(String datasource,String table,BaseData et)
{
DSLink link=getDSLink(datasource);
return checkKey(link,getSchema(link,table),et);
}
default BaseData save(String datasource,String table,BaseData et,boolean bGet)
{
DSLink link=getDSLink(datasource);
return save(link,getSchema(link,table),et,bGet);
}
default List<BaseData> saveBatch(String datasource,String table,List<BaseData> list,boolean bGet)
{
DSLink link=getDSLink(datasource);
return saveBatch(link,getSchema(link,table),list,bGet);
}
default List<BaseData> select(String datasource,String table,BaseData et){
DSLink link=getDSLink(datasource);
return select(link,getSchema(link,table),et);
}
default Page<BaseData> select(String datasource,String table,BaseData et,Pageable pageable){
DSLink link=getDSLink(datasource);
return select(link,getSchema(link,table),et,pageable);
}
default List<BaseData> query(String datasource,String table,String dataQuery,FilterData context){
DSLink link=getDSLink(datasource);
return query(link,getSchema(link,table),dataQuery,context);
}
default Page<BaseData> query(String datasource,String table,String dataQuery,FilterData context,Pageable pageable){
DSLink link=getDSLink(datasource);
return query(link,getSchema(link,table),dataQuery,context,pageable);
}
default List<BaseData> selectRaw(String datasource,String table,String sql,FilterData context){
DSLink link=getDSLink(datasource);
return selectRaw(link,getSchema(link,table),sql,context);
}
default boolean execRaw(String datasource,String table,String sql,BaseData param){
DSLink link=getDSLink(datasource);
return execRaw(link,getSchema(link,table),sql,param);
}
default List<BaseData> fetch(String datasource,String table,String dataSet,FilterData context){
DSLink link=getDSLink(datasource);
return fetch(link,getSchema(link,table),dataSet,context);
}
default Page<BaseData> fetch(String datasource,String table,String dataSet,FilterData context,Pageable pageable){
DSLink link=getDSLink(datasource);
return fetch(link,getSchema(link,table),dataSet,context,pageable);
}
DSLink getDSLink(String datasource);
POSchema getSchema(DSLink link,String table);
}
package cn.ibizlab.core.data.service.impl;
import cn.ibizlab.core.data.dto.BaseData;
import cn.ibizlab.core.data.dto.FilterData;
import cn.ibizlab.core.data.model.DSLink;
import cn.ibizlab.core.data.model.POSchema;
import cn.ibizlab.core.data.repository.MongoDataRepository;
import cn.ibizlab.core.data.service.IDSSettingService;
import cn.ibizlab.core.data.service.IPersistentService;
import cn.ibizlab.util.errors.BadRequestAlertException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Service
@Slf4j
public class MongoPersistentServiceImpl implements IPersistentService {
@Autowired
private MongoDataRepository repository;
@Override
public BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet) {
repository.insertData(link.getName(),poSchema,et);
if(bGet) et.setAll(getByMap(link,poSchema,et));
return et;
}
@Override
public List<BaseData> createBatch(DSLink link, POSchema poSchema, List<BaseData> list, boolean bGet) {
repository.insertBathData(link.getName(),poSchema,list);
if(bGet) return getByMapBatch(link,poSchema,list);
return list;
}
@Override
public BaseData update(DSLink link, POSchema poSchema, BaseData et, boolean bGet) {
repository.updateData(link.getName(),poSchema,et);
if(bGet) et.setAll(getByMap(link,poSchema,et));
return et;
}
@Override
public List<BaseData> updateBatch(DSLink link, POSchema poSchema, List<BaseData> list, boolean bGet) {
repository.updateBathData(link.getName(),poSchema,list);
if(bGet) return getByMapBatch(link,poSchema,list);
return list;
}
@Override
public boolean remove(DSLink link, POSchema poSchema, Serializable key) {
BaseData et=poSchema.newData(key);
if(et==null)
throw new BadRequestAlertException("未找到主键",poSchema.getName(),null);
repository.removeData(link.getName(),poSchema,et);
return true;
}
@Override
public boolean removeBatch(DSLink link, POSchema poSchema, List<Serializable> idList) {
List<BaseData> batch=new ArrayList<>();
idList.forEach(key->{
BaseData et = poSchema.newData(key);
if(et==null)
throw new BadRequestAlertException("未找到主键",poSchema.getName(),null);
batch.add(et);
});
if(batch.size()>0)
{
repository.removeBathData(link.getName(),poSchema,batch);
batch.clear();
}
return true;
}
@Override
public boolean removeByMap(DSLink link, POSchema poSchema, BaseData et) {
repository.removeData(link.getName(),poSchema,et);
return true;
}
@Override
public boolean removeByMapBatch(DSLink link, POSchema poSchema, List<BaseData> list) {
repository.removeBathData(link.getName(),poSchema,list);
return true;
}
@Override
public BaseData get(DSLink link, POSchema poSchema, Serializable key) {
BaseData et=poSchema.newData(key);
if(et==null)
throw new BadRequestAlertException("未找到主键",poSchema.getName(),null);
List<BaseData> list = repository.getData(link.getName(),poSchema,et);
if(ObjectUtils.isEmpty(list)||list.size()>1)
throw new BadRequestAlertException("未找到数据",poSchema.getName(),key.toString());
return list.get(0);
}
@Override
public List<BaseData> getBatch(DSLink link, POSchema poSchema, List<Serializable> idList) {
List<BaseData> batch=new ArrayList<>();
idList.forEach(key->{
BaseData et = poSchema.newData(key);
if(et==null)
throw new BadRequestAlertException("未找到主键",poSchema.getName(),null);
batch.add(et);
});
return repository.getBatchData(link.getName(),poSchema,batch);
}
@Override
public BaseData getByMap(DSLink link, POSchema poSchema, BaseData et) {
List<BaseData> list = repository.getData(link.getName(),poSchema,et);
if(ObjectUtils.isEmpty(list)||list.size()>1)
throw new BadRequestAlertException("未找到数据",poSchema.getName(),"");
return list.get(0);
}
@Override
public List<BaseData> getByMapBatch(DSLink link, POSchema poSchema, List<BaseData> list) {
return repository.getBatchData(link.getName(),poSchema,list);
}
@Override
public List<BaseData> getBatchKey(DSLink link, POSchema poSchema, List<BaseData> list) {
return repository.getBatchKey(link.getName(),poSchema,list);
}
@Override
public Long count(DSLink link, POSchema poSchema, BaseData et) {
return repository.countData(link.getName(),poSchema,et);
}
@Override
public boolean checkKey(DSLink link, POSchema poSchema, BaseData et) {
Long cnt=repository.countData(link.getName(),poSchema,et);
return cnt==1;
}
@Override
public BaseData save(DSLink link, POSchema poSchema, BaseData et, boolean bGet) {
if(checkKey(link,poSchema,et))
return update(link,poSchema,et,bGet);
else
return create(link,poSchema,et,bGet);
}
@Override
public List<BaseData> saveBatch(DSLink link, POSchema poSchema, List<BaseData> list, boolean bGet) {
List<BaseData> rt=this.getBatchKey(link,poSchema,list);
Map<Serializable,Integer> keys=new LinkedHashMap<>();
rt.forEach(et->{
Serializable key=poSchema.getKeyValue(et,false);
if(!ObjectUtils.isEmpty(key))
keys.put(key,1);
});
List<BaseData> create=new ArrayList<>();
List<BaseData> update=new ArrayList<>();
list.forEach(et-> {
Serializable key = poSchema.getKeyValue(et, false);
if(keys.containsKey(key))
update.add(et);
else
create.add(et);
});
List rtList=new ArrayList<>();
if(update.size()>0)
rtList.addAll(this.updateBatch(link,poSchema,update,bGet));
if(create.size()>0)
rtList.addAll(this.createBatch(link,poSchema,create,bGet));
return rtList;
}
@Override
public List<BaseData> select(DSLink link, POSchema poSchema, BaseData et) {
return repository.selectData(link.getName(),poSchema,et);
}
@Override
public Page<BaseData> select(DSLink link, POSchema poSchema, BaseData et, Pageable pageable) {
Page<BaseData> pages= repository.selectData(link.getName(),poSchema,poSchema.trans2PO(et),pageable);
return pages;
}
@Override
public List<BaseData> query(DSLink link, POSchema poSchema, String dataQuery, FilterData context) {
context.setPOSchema(poSchema);
return repository.queryData(link.getName(),poSchema,"",context);
}
@Override
public Page<BaseData> query(DSLink link, POSchema poSchema, String dataQuery, FilterData context, Pageable pageable) {
context.setPOSchema(poSchema);
if(pageable!=null)
context.setPageable(pageable);
else
pageable=context.getPageable();
Page<BaseData> pages=repository.queryData(link.getName(),poSchema,"",context,pageable);
return pages;
}
@Override
public List<BaseData> selectRaw(DSLink link, POSchema poSchema, String sql, FilterData context) {
return repository.queryData(link.getName(),poSchema,sql,context);
}
@Override
public boolean execRaw(DSLink link, POSchema poSchema, String sql, BaseData param) {
throw new BadRequestAlertException("没有实现方法execRaw",poSchema.getName(),sql);
}
@Override
public List<BaseData> fetch(DSLink link, POSchema poSchema, String dataSet, FilterData context) {
context.setPOSchema(poSchema);
return repository.queryData(link.getName(),poSchema,"",context);
}
@Override
public Page<BaseData> fetch(DSLink link, POSchema poSchema, String dataSet, FilterData context, Pageable pageable) {
context.setPOSchema(poSchema);
if(pageable!=null)
context.setPageable(pageable);
else
pageable=context.getPageable();
Page<BaseData> pages=repository.queryData(link.getName(),poSchema,"",context,pageable);
return pages;
}
@Autowired
private IDSSettingService dsSettingService;
@Override
public DSLink getDSLink(String datasource) {
return dsSettingService.getDataSource(datasource);
}
@Override
public POSchema getSchema(DSLink link, String table) {
return null;
}
}
...@@ -88,7 +88,7 @@ ...@@ -88,7 +88,7 @@
</foreach> </foreach>
</select> </select>
<select id="countData" parameterType="cn.ibizlab.core.data.dto.BaseData" resultType="java.lang.Integer"> <select id="countData" parameterType="cn.ibizlab.core.data.dto.BaseData" resultType="java.lang.Long">
select count(1) as cnt from ${schema.name} select count(1) as cnt from ${schema.name}
where where
<if test="schema.logicValidColumn!=null"> <if test="schema.logicValidColumn!=null">
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册