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

link

上级 e5bcafdf
......@@ -10,13 +10,10 @@ import org.springframework.util.ObjectUtils;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.TimeZone;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class DataObj<K,V> extends ConcurrentHashMap<K,V> {
public class DataObj<K,V> extends HashMap<K,V> {
public String getRowKey()
......
......@@ -10,17 +10,20 @@ import java.util.List;
public interface CommonEntityService {
List<EntityObj> selectBase(EntityModel entityModel, QueryFilter filter);
List<EntityObj> selectCore(EntityModel entityModel, QueryFilter filter);
Integer selectCount(EntityModel entityModel, QueryFilter filter);
List<EntityObj> selectBase(String dsName, EntityModel entityModel, QueryFilter filter);
List<EntityObj> selectCore(String dsName, EntityModel entityModel, QueryFilter filter);
Integer selectCount(String dsName, EntityModel entityModel, QueryFilter filter);
List<EntityObj> search(String dataSet, EntityModel entityModel, QueryFilter filter);
List<EntityObj> search(String dsName, String dataSet, EntityModel entityModel, QueryFilter filter);
List<EntityObj> search(String dsName, String sql, QueryFilter filter);
boolean saveBatch(EntityModel entityModel, List<EntityObj> list);
boolean save(EntityModel entityModel, EntityObj entityObj);
EntityObj get(EntityModel entityModel, EntityObj entityObj);
void cursorRead(String dsName, EntityModel entityModel, String sql, QueryFilter filter, LiteDataCallback callback);
boolean saveBatch(String dsName, EntityModel entityModel, List<EntityObj> list);
boolean save(String dsName, EntityModel entityModel, EntityObj entityObj);
EntityObj get(String dsName, EntityModel entityModel, EntityObj entityObj);
void processList(DataModel dataModel, Timestamp lastModify, LiteDataCallback callback);
......
......@@ -40,19 +40,20 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
@Override
public List<EntityObj> selectBase(EntityModel entityModel, QueryFilter filter) {
return search("BASE", entityModel, filter);
public List<EntityObj> selectBase(String dsName, EntityModel entityModel, QueryFilter filter) {
return search(dsName,"BASE", entityModel, filter);
}
@Override
public List<EntityObj> selectCore(EntityModel entityModel, QueryFilter filter) {
return search("CORE", entityModel, filter);
public List<EntityObj> selectCore(String dsName, EntityModel entityModel, QueryFilter filter) {
return search(dsName,"CORE", entityModel, filter);
}
@Override
public Integer selectCount(EntityModel entityModel, QueryFilter filter) {
public Integer selectCount(String dsName, EntityModel entityModel, QueryFilter filter) {
String sql = entityModel.getSqlSegment("COUNT");
String dsName = entityModel.getDsName();
if(StringUtils.isEmpty(dsName))
dsName = entityModel.getDsName();
try {
dstDataSourceService.initDataSource(dsName);
DynamicDataSourceContextHolder.push(dsName);
......@@ -74,13 +75,13 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
}
@Override
public List<EntityObj> search(String dataSet, EntityModel entityModel, QueryFilter filter) {
public List<EntityObj> search(String dsName, String dataSet, EntityModel entityModel, QueryFilter filter) {
String sql = entityModel.getSqlSegment(dataSet);
if (StringUtils.isEmpty(sql))
return new ArrayList<>();
else
return search(entityModel.getDsName(), sql, filter);
return search(dsName, sql, filter);
}
@Override
......@@ -147,10 +148,76 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
}
@Override
public boolean saveBatch(EntityModel entityModel, List<EntityObj> list) {
public void cursorRead(String dsName, EntityModel entityModel, String sql, QueryFilter filter, LiteDataCallback callback) {
if(StringUtils.isEmpty(dsName))
dsName = entityModel.getDsName();
if(StringUtils.isEmpty(sql))
sql=entityModel.getSqlSegment("BASE");
Integer total = this.selectCount(dsName,entityModel, filter);
callback.total(total);
//没有业务数据时,不进行后续操作
if(total == 0){
return;
}
MyBatisCursorItemReader myMyBatisCursorItemReader =new MyBatisCursorItemReader();
try{
myMyBatisCursorItemReader.setSqlSessionFactory(sqlSessionFactory);
myMyBatisCursorItemReader.setQueryId("cn.ibizlab.core.extensions.mapper.DbEntityMapper.search");
DbEntitySearchContext context=new DbEntitySearchContext();
context.setFilter(filter);
QueryWrapper qw=context.getSelectCond();
if(!StringUtils.isEmpty(filter.getCustSqlSegment()))
qw.apply(filter.getCustSqlSegment());
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("sql", sql);
paramsMap.put("ew", qw);
myMyBatisCursorItemReader.setParameterValues(paramsMap);// 设置sql传入参数
dstDataSourceService.initDataSource(dsName);
DynamicDataSourceContextHolder.push(dsName);
myMyBatisCursorItemReader.open(new ExecutionContext()); // 开启游标
//DynamicDataSourceContextHolder.poll();
List<EntityObj> datas = new ArrayList<>();
EntityObj rowdata;
while ((rowdata = (EntityObj) myMyBatisCursorItemReader.read()) != null) {
datas.add(rowdata);
if(datas.size() >= 5){
boolean rt=callback.processData(datas);
datas.clear();
if(!rt)
break;
}
}
if(datas.size() > 0){
callback.processData(datas);
datas.clear();
}
} catch (Exception e) {
log.error(e.getMessage());
e.printStackTrace();
} finally {
try {
myMyBatisCursorItemReader.close();// 关闭游标
} catch (Exception ex) {
//log.error(ex.getMessage());
}
DynamicDataSourceContextHolder.poll();
}
}
@Override
public boolean saveBatch(String dsName, EntityModel entityModel, List<EntityObj> list) {
try {
dstDataSourceService.initDataSource(entityModel.getDsName());
DynamicDataSourceContextHolder.push(entityModel.getDsName());
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
dstDataSourceService.initDataSource(dsName);
DynamicDataSourceContextHolder.push(dsName);
list.forEach(entityObj -> {
entityObj.keySet().forEach(key -> {
......@@ -170,10 +237,12 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
}
@Override
public boolean save(EntityModel entityModel, EntityObj entityObj) {
public boolean save(String dsName, EntityModel entityModel, EntityObj entityObj) {
try {
dstDataSourceService.initDataSource(entityModel.getDsName());
DynamicDataSourceContextHolder.push(entityModel.getDsName());
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
dstDataSourceService.initDataSource(dsName);
DynamicDataSourceContextHolder.push(dsName);
entityObj.keySet().forEach(key -> {
if(!key.toUpperCase().equals(key))
entityObj.put(key.toUpperCase(),entityObj.get(key));
......@@ -190,7 +259,9 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
@Override
public EntityObj get(EntityModel entityModel, EntityObj entityObj) {
public EntityObj get(String dsName, EntityModel entityModel, EntityObj entityObj) {
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
QueryFilter filter=QueryFilter.createQuery();
entityModel.getKeyFields().forEach(item->{
Object val=entityObj.get(item.getColumnName());
......@@ -199,7 +270,7 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
filter.eq(item.getColumnName().toUpperCase(),val);
}
});
List<EntityObj> list=this.selectBase(entityModel,filter);
List<EntityObj> list=this.selectBase(dsName,entityModel,filter);
if(list.size()==1)
entityObj.putAll(list.get(0));
return entityObj;
......@@ -221,7 +292,7 @@ public class DbEntityService extends ServiceImpl<DbEntityMapper, EntityObj> impl
//记录处理的总业务数据量
String sql=entityModel.getSqlSegment("CORE");
Integer total = this.selectCount(entityModel, filter);
Integer total = this.selectCount(entityModel.getDsName(),entityModel, filter);
callback.total(total);
......
......@@ -15,6 +15,7 @@ import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.sql.Timestamp;
import java.util.*;
......@@ -56,33 +57,51 @@ public class LiteDataService {
}
public boolean saveBatch(String systemId, String entityName, List<EntityObj> list) {
public boolean saveBatch(String systemId, String entityName, String dsName, List<EntityObj> list) {
EntityModel entityModel = liteModelService.getEntityModel(systemId,entityName);
splitList(list, 500).forEach(objs->{
getEntityService(entityModel.getDsName()).saveBatch(entityModel,objs);
getEntityService(StringUtils.isEmpty(dsName)?entityModel.getDsName():dsName).saveBatch(dsName,entityModel,objs);
});
return true;
}
public boolean save(String systemId, String entityName, EntityObj entityObj) {
public boolean save(String systemId, String entityName, String dsName, EntityObj entityObj) {
EntityModel entityModel = liteModelService.getEntityModel(systemId,entityName);
return getEntityService(entityModel.getDsName()).save(entityModel,entityObj);
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
return getEntityService(dsName).save(dsName,entityModel,entityObj);
}
public EntityObj get(String systemId, String entityName, EntityObj entityObj) {
public EntityObj get(String systemId, String entityName, String dsName, EntityObj entityObj) {
EntityModel entityModel = liteModelService.getEntityModel(systemId,entityName);
return getEntityService(entityModel.getDsName()).get(entityModel,entityObj);
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
return getEntityService(dsName).get(dsName,entityModel,entityObj);
}
public List<EntityObj> search(String systemId, String entityName, QueryFilter filter) {
return search(systemId,entityName,"BASE",filter);
public List<EntityObj> search(String systemId, String entityName, String dsName, QueryFilter filter) {
return search(systemId,entityName,"BASE",dsName,filter);
}
public List<EntityObj> search(String systemId, String entityName, String dataset,QueryFilter filter) {
public List<EntityObj> search(String systemId, String entityName, String dataset, String dsName, QueryFilter filter) {
EntityModel entityModel = liteModelService.getEntityModel(systemId,entityName);
return getEntityService(entityModel.getDsName()).search(dataset,entityModel,filter);
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
return getEntityService(dsName).search(dsName,dataset,entityModel,filter);
}
public void searchCursor(String systemId, String entityName, String sql, String dsName, QueryFilter filter,LiteDataCallback callback) {
EntityModel entityModel = liteModelService.getEntityModel(systemId,entityName);
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
searchCursor(entityModel,sql,dsName,filter,callback);
}
public void searchCursor(EntityModel entityModel, String sql, String dsName, QueryFilter filter,LiteDataCallback callback) {
if(StringUtils.isEmpty(dsName))
dsName=entityModel.getDsName();
getEntityService(dsName).cursorRead(dsName,entityModel,sql,filter,callback);
}
public void processDataModel(String metaModelId,Timestamp lastModify,LiteDataCallback callback)
{
......@@ -126,7 +145,7 @@ public class LiteDataService {
List<ModelObj> rt = new ArrayList<>();
List<EntityObj> factEntityList = new ArrayList<>();
if (fillPropertys == null || fillPropertys.size() == 0 || fillPropertys.contains(dataModel.getFactPorperty().getPropertyName()))
splitList(kEntityObjs, 1000).forEach(list -> factEntityList.addAll(getEntityService(entityModel.getDsName()).selectBase(entityModel, QueryFilter.createQuery().cust(dataModel.lookup(list)))));
splitList(kEntityObjs, 1000).forEach(list -> factEntityList.addAll(getEntityService(entityModel.getDsName()).selectBase(entityModel.getDsName(), entityModel, QueryFilter.createQuery().cust(dataModel.lookup(list)))));
factEntityList.forEach(entityObj ->
rt.add(new ModelObj().setDataModel(dataModel).setFactEntity(entityObj.setProperty(dataModel.getFactPorperty()))));
fillEntityObj(dataModel, fillPropertys, rt);
......@@ -144,7 +163,7 @@ public class LiteDataService {
EntityModel entityModel = property.getEntityModel();
List<EntityObj> entityObjs = new ArrayList<>();
if (fillPropertys == null || fillPropertys.size() == 0 || fillPropertys.contains(property.getPropertyName()))
splitList(modelObjs, 1000).forEach(list -> entityObjs.addAll(getEntityService(entityModel.getDsName()).selectBase(entityModel, QueryFilter.createQuery().cust(property.lookup(list)))));
splitList(modelObjs, 1000).forEach(list -> entityObjs.addAll(getEntityService(entityModel.getDsName()).selectBase(entityModel.getDsName(), entityModel, QueryFilter.createQuery().cust(property.lookup(list)))));
entityObjs.forEach(entityObj -> {
entityObj.setProperty(property);
......
......@@ -13,24 +13,24 @@ import java.util.Set;
@Service
public class MongoEntityService implements CommonEntityService{
@Override
public List<EntityObj> selectBase(EntityModel entityModel, QueryFilter filter) {
public List<EntityObj> selectBase(String dsName, EntityModel entityModel, QueryFilter filter) {
return null;
}
@Override
public List<EntityObj> selectCore(EntityModel entityModel, QueryFilter filter) {
public List<EntityObj> selectCore(String dsName, EntityModel entityModel, QueryFilter filter) {
return null;
}
@Override
public Integer selectCount(EntityModel entityModel, QueryFilter filter) {
public Integer selectCount(String dsName, EntityModel entityModel, QueryFilter filter) {
return null;
}
@Override
public List<EntityObj> search(String dataSet, EntityModel entityModel, QueryFilter filter) {
public List<EntityObj> search(String dsName, String dataSet, EntityModel entityModel, QueryFilter filter) {
return null;
}
......@@ -40,21 +40,25 @@ public class MongoEntityService implements CommonEntityService{
}
@Override
public boolean saveBatch(EntityModel entityModel, List<EntityObj> list) {
public void cursorRead(String dsName, EntityModel entityModel, String sql, QueryFilter filter, LiteDataCallback callback) {
}
@Override
public boolean saveBatch(String dsName, EntityModel entityModel, List<EntityObj> list) {
return false;
}
@Override
public boolean save(EntityModel entityModel, EntityObj entityObj) {
public boolean save(String dsName, EntityModel entityModel, EntityObj entityObj) {
return false;
}
@Override
public EntityObj get(EntityModel entityModel, EntityObj entityObj) {
public EntityObj get(String dsName, EntityModel entityModel, EntityObj entityObj) {
return null;
}
@Override
public void processList(DataModel dataModel, Timestamp lastModify, LiteDataCallback callback) {
......
......@@ -300,24 +300,24 @@ public class LiteCoreResource {
for (String key : params.keySet()) {
entityObj.set(key.toUpperCase(),params.get(key)[0]);
}
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.get(system,entity,entityObj));
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.get(system,entity,entityObj.getStringValue("link"),entityObj));
}
@RequestMapping(method = RequestMethod.POST, value = "/lite/{system}/entitys/{entity}/search{dataset}")
public ResponseEntity<List<EntityObj>> searchEntity(@PathVariable("system") String system, @PathVariable("entity") String entity, @PathVariable(value = "dataset",required = false) String dataset,@RequestBody QueryFilter filter) {
public ResponseEntity<List<EntityObj>> searchEntity(@PathVariable("system") String system, @PathVariable("entity") String entity, @PathVariable(value = "dataset",required = false) String dataset,@RequestParam(value = "link",required = false) String link,@RequestBody QueryFilter filter) {
if(StringUtils.isEmpty(dataset))
dataset="BASE";
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.search(system,entity,filter));
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.search(system,entity,link,filter));
}
@RequestMapping(method = RequestMethod.POST, value = "/lite/{system}/entitys/{entity}/save")
public ResponseEntity<Boolean> saveEntity(@PathVariable("system") String system, @PathVariable("entity") String entity,@RequestBody EntityObj entityObj) {
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.save(system,entity,entityObj));
public ResponseEntity<Boolean> saveEntity(@PathVariable("system") String system, @PathVariable("entity") String entity,@RequestParam(value = "link",required = false) String link,@RequestBody EntityObj entityObj) {
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.save(system,entity,link,entityObj));
}
@RequestMapping(method = RequestMethod.POST, value = "/lite/{system}/entitys/{entity}/batch")
public ResponseEntity<Boolean> saveEntity(@PathVariable("system") String system, @PathVariable("entity") String entity,@RequestBody List<EntityObj> list) {
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.saveBatch(system,entity,list));
public ResponseEntity<Boolean> saveEntity(@PathVariable("system") String system, @PathVariable("entity") String entity,@RequestBody List<EntityObj> list, @RequestParam(value = "link",required = false) String link) {
return ResponseEntity.status(HttpStatus.OK).body(liteDataService.saveBatch(system,entity,link,list));
}
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册