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

tableschema 接口,模型刷新

上级 5ad47856
...@@ -175,7 +175,7 @@ ...@@ -175,7 +175,7 @@
<dependency> <dependency>
<groupId>net.ibizsys.model</groupId> <groupId>net.ibizsys.model</groupId>
<artifactId>ibizlab-model</artifactId> <artifactId>ibizlab-model</artifactId>
<version>1.2.7</version> <version>1.2.9</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>slf4j-simple</artifactId> <artifactId>slf4j-simple</artifactId>
......
...@@ -216,8 +216,8 @@ public class DOModel implements Serializable { ...@@ -216,8 +216,8 @@ public class DOModel implements Serializable {
{ {
return poSchemas.get(name); return poSchemas.get(name);
} }
String vendorProvider=POSchema.provider.get(name); String vendorProvider=POSchema.provider.get(name.toLowerCase());
if((!StringUtils.isEmpty(vendorProvider))&&(!name.equals(vendorProvider))&&poSchemas.containsKey(vendorProvider)) if((!StringUtils.isEmpty(vendorProvider))&&(!name.equalsIgnoreCase(vendorProvider))&&poSchemas.containsKey(vendorProvider))
return poSchemas.get(vendorProvider); return poSchemas.get(vendorProvider);
......
...@@ -88,6 +88,7 @@ public class DynamicModelService { ...@@ -88,6 +88,7 @@ public class DynamicModelService {
psModelService.setPSModelFolderPath(strPSModelFolderPath); psModelService.setPSModelFolderPath(strPSModelFolderPath);
try { try {
iPSSystem = psModelService.getPSSystem(); iPSSystem = psModelService.getPSSystem();
if (iPSSystem == null) if (iPSSystem == null)
throw new BadRequestAlertException("加载系统模型错误", "DynamicSystem", system); throw new BadRequestAlertException("加载系统模型错误", "DynamicSystem", system);
dynamicSystems.put(system, iPSSystem); dynamicSystems.put(system, iPSSystem);
...@@ -252,10 +253,13 @@ public class DynamicModelService { ...@@ -252,10 +253,13 @@ public class DynamicModelService {
if(defield.isLinkDEField() && defield instanceof IPSLinkDEField) if(defield.isLinkDEField() && defield instanceof IPSLinkDEField)
{ {
IPSLinkDEField linkDEField = (IPSLinkDEField)defield; IPSLinkDEField linkDEField = (IPSLinkDEField)defield;
metaFieldModel.setRefFieldId(linkDEField.getRelatedPSDEField().getId()) String relfieldname=linkDEField.getObjectNode().get("getRelatedPSDEField").get("name").asText();
.setRefFieldName(linkDEField.getRelatedPSDEField().getName()).setRelationId(linkDEField.getPSDER().getId()) String relfieldcodename=linkDEField.getObjectNode().get("getRelatedPSDEField").get("codeName").asText();
linkDEField.getRelatedPSDEField();
metaFieldModel.setRefFieldId(relfieldcodename)
.setRefFieldName(relfieldname).setRelationId(linkDEField.getPSDER().getId())
.setRelationName(linkDEField.getPSDER().getName()).setRelationCodeName(linkDEField.getPSDER().getCodeName()).setRefEntityName(linkDEField.getPSDER().getMajorPSDataEntity().getName()) .setRelationName(linkDEField.getPSDER().getName()).setRelationCodeName(linkDEField.getPSDER().getCodeName()).setRefEntityName(linkDEField.getPSDER().getMajorPSDataEntity().getName())
.setRefFieldCodeName(linkDEField.getRelatedPSDEField().getCodeName()); .setRefFieldCodeName(relfieldcodename);
} }
if(!ObjectUtils.isEmpty(defield.getAllPSDEFSearchModes())) if(!ObjectUtils.isEmpty(defield.getAllPSDEFSearchModes()))
...@@ -309,8 +313,10 @@ public class DynamicModelService { ...@@ -309,8 +313,10 @@ public class DynamicModelService {
if(der instanceof IPSDER1N) if(der instanceof IPSDER1N)
{ {
IPSDER1N der1n=(IPSDER1N)der; IPSDER1N der1n=(IPSDER1N)der;
String relfieldname=der1n.getPSPickupDEField().getObjectNode().get("getRelatedPSDEField").get("name").asText();
MetaLookupModel lookupModel=new MetaLookupModel().setRelationid(der.getId()) MetaLookupModel lookupModel=new MetaLookupModel().setRelationid(der.getId())
.setFieldname(der1n.getPickupDEFName()).setReffieldname(der1n.getPSPickupDEField().getRelatedPSDEField().getName()); .setFieldname(der1n.getPickupDEFName()).setReffieldname(relfieldname);
metaRel.addLookup(lookupModel); metaRel.addLookup(lookupModel);
} }
...@@ -340,8 +346,10 @@ public class DynamicModelService { ...@@ -340,8 +346,10 @@ public class DynamicModelService {
if(der instanceof IPSDER1N) if(der instanceof IPSDER1N)
{ {
IPSDER1N der1n=(IPSDER1N)der; IPSDER1N der1n=(IPSDER1N)der;
String relfieldname=der1n.getPSPickupDEField().getObjectNode().get("getRelatedPSDEField").get("name").asText();
MetaLookupModel lookupModel=new MetaLookupModel().setRelationid(der.getId()) MetaLookupModel lookupModel=new MetaLookupModel().setRelationid(der.getId())
.setFieldname(der1n.getPickupDEFName()).setReffieldname(der1n.getPSPickupDEField().getRelatedPSDEField().getName()); .setFieldname(der1n.getPickupDEFName()).setReffieldname(relfieldname);
metaRel.addLookup(lookupModel); metaRel.addLookup(lookupModel);
} }
...@@ -671,34 +679,49 @@ public class DynamicModelService { ...@@ -671,34 +679,49 @@ public class DynamicModelService {
return initDynamicSystem(system.getPssystemid(),system.getDynamicModelPath()); return initDynamicSystem(system.getPssystemid(),system.getDynamicModelPath());
} }
public Map<String,Map<String,Long>> getAllDynamicModelVersion() public synchronized Map<String,Long> getAllDynamicModelVersion()
{ {
Map<String,Map<String,Long>> ret=new LinkedHashMap<>(); Set<String> set=new HashSet<>();
Map<String,Long> ret=new LinkedHashMap<>();
this.findAllDynamicModel().values().forEach(dstSystemModel -> { this.findAllDynamicModel().values().forEach(dstSystemModel -> {
if(ret.containsKey(dstSystemModel.getPssystemid())) if(set.contains(dstSystemModel.getPssystemid()))
return; return;
ret.putAll(getDynamicModelVersion(dstSystemModel));
});
return ret;
}
public synchronized Map<String,Long> getDynamicModelVersion(String system)
{
DstSystemModel dstSystemModel=this.findAllDynamicModel().get(system);
if(dstSystemModel==null)
return getDynamicModelVersion(dstSystemModel);
return new LinkedHashMap<>();
}
public synchronized Map<String,Long> getDynamicModelVersion(DstSystemModel dstSystemModel)
{
if((!systemModifyMap.containsKey(dstSystemModel.getPssystemid()))||systemModifyMap.get(dstSystemModel.getPssystemid())<dstSystemModel.getLastModify()) if((!systemModifyMap.containsKey(dstSystemModel.getPssystemid()))||systemModifyMap.get(dstSystemModel.getPssystemid())<dstSystemModel.getLastModify())
{ {
reloadDynamicSystem(dstSystemModel);
this.getProxy().resetSystem(dstSystemModel.getPssystemid()); this.getProxy().resetSystem(dstSystemModel.getPssystemid());
if(!dstSystemModel.getPssystemid().equals(dstSystemModel.getPssystemid().toLowerCase())) if(!dstSystemModel.getPssystemid().equals(dstSystemModel.getPssystemid().toLowerCase()))
this.getProxy().resetSystem(dstSystemModel.getPssystemid().toLowerCase()); this.getProxy().resetSystem(dstSystemModel.getPssystemid().toLowerCase());
reloadDynamicSystem(dstSystemModel);
} }
systemModifyMap.put(dstSystemModel.getPssystemid(),dstSystemModel.getLastModify()); systemModifyMap.put(dstSystemModel.getPssystemid(),dstSystemModel.getLastModify());
Map<String,Long> entities=new LinkedHashMap<>(); Map<String,Long> entities=new LinkedHashMap<>();
ret.put(dstSystemModel.getPssystemid(),entities);
try { try {
this.getEntities(dstSystemModel.getPssystemid()).values().forEach(metaEntityModel -> { this.getEntities(dstSystemModel.getPssystemid()).values().forEach(metaEntityModel -> {
if(entities.containsKey(metaEntityModel.getEntityName())) String key=dstSystemModel.getPssystemid().concat(".").concat(metaEntityModel.getEntityName());
if(entities.containsKey(key))
return; return;
entities.put(metaEntityModel.getEntityName(),dstSystemModel.getLastModify()); entities.put(key,dstSystemModel.getLastModify());
}); });
} catch (Exception exception) { } catch (Exception exception) {
} }
}); return entities;
return ret;
} }
......
...@@ -846,7 +846,7 @@ public class POSchema { ...@@ -846,7 +846,7 @@ public class POSchema {
File dir=path.getParent().toFile(); File dir=path.getParent().toFile();
if(!dir.exists()) if(!dir.exists())
dir.mkdirs(); dir.mkdirs();
Files.write(path, JSON.toJSONBytes(poSchema), StandardOpenOption.CREATE); Files.write(path, JSON.toJSONBytes(poSchema));
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestAlertException("保存文件失败","POSchema",path.toString()); throw new BadRequestAlertException("保存文件失败","POSchema",path.toString());
} }
......
...@@ -514,7 +514,7 @@ public class PojoSchema { ...@@ -514,7 +514,7 @@ public class PojoSchema {
if(!dir.exists()) if(!dir.exists())
dir.mkdirs(); dir.mkdirs();
Files.write(path, JSON.toJSONBytes(pojoSchema), StandardOpenOption.CREATE); Files.write(path, JSON.toJSONBytes(pojoSchema));
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestAlertException("保存文件失败","PojoSchema",path.toString()); throw new BadRequestAlertException("保存文件失败","PojoSchema",path.toString());
} }
......
...@@ -5,6 +5,7 @@ import cn.ibizlab.core.data.dto.FilterData; ...@@ -5,6 +5,7 @@ import cn.ibizlab.core.data.dto.FilterData;
import cn.ibizlab.core.data.dto.RequestData; import cn.ibizlab.core.data.dto.RequestData;
import cn.ibizlab.core.data.dto.ResponseData; import cn.ibizlab.core.data.dto.ResponseData;
import cn.ibizlab.core.data.service.IDataService; import cn.ibizlab.core.data.service.IDataService;
import cn.ibizlab.core.data.service.ModelService;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
import cn.ibizlab.util.security.AuthenticationUser; import cn.ibizlab.util.security.AuthenticationUser;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
...@@ -35,6 +36,10 @@ public class DataResource ...@@ -35,6 +36,10 @@ public class DataResource
@Autowired @Autowired
public IDataService dataService; public IDataService dataService;
@Autowired
public ModelService modelService;
@ApiOperation(value = "callMethod数据", tags = {"数据" }, notes = "callMethod数据") @ApiOperation(value = "callMethod数据", tags = {"数据" }, notes = "callMethod数据")
@RequestMapping(method = {RequestMethod.GET}, value = {"/{entity}/call{method}","/{entity}/{key}/call{method}"}) @RequestMapping(method = {RequestMethod.GET}, value = {"/{entity}/call{method}","/{entity}/{key}/call{method}"})
public ResponseEntity call(@PathVariable(name = "system",required = true) String system, public ResponseEntity call(@PathVariable(name = "system",required = true) String system,
...@@ -423,10 +428,9 @@ public class DataResource ...@@ -423,10 +428,9 @@ public class DataResource
@PathVariable(name = "parentKey2",required = false) String parentKey2, @PathVariable(name = "parentKey2",required = false) String parentKey2,
@PathVariable(name = "entity",required = true) String entity, @PathVariable(name = "entity",required = true) String entity,
@RequestParam(name = "datasource",required = false) String datasource, @RequestParam(name = "datasource",required = false) String datasource,
@PathVariable(name = "dataquery",required = true) String dataquery,
@RequestParam Map map) { @RequestParam Map map) {
FilterData context=FilterData.fromContext(map); FilterData context=FilterData.fromContext(map);
return doSelect(system,scope,parentEntity,parentKey,parentEntity2,parentKey2,entity,datasource,dataquery,context); return doSelect(system,scope,parentEntity,parentKey,parentEntity2,parentKey2,entity,datasource,context);
} }
@ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,POST,返回body<list>+header<page,total>") @ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,POST,返回body<list>+header<page,total>")
...@@ -439,7 +443,6 @@ public class DataResource ...@@ -439,7 +443,6 @@ public class DataResource
@PathVariable(name = "parentKey2",required = false) String parentKey2, @PathVariable(name = "parentKey2",required = false) String parentKey2,
@PathVariable(name = "entity",required = true) String entity, @PathVariable(name = "entity",required = true) String entity,
@RequestParam(name = "datasource",required = false) String datasource, @RequestParam(name = "datasource",required = false) String datasource,
@PathVariable(name = "dataquery",required = true) String dataquery,
@RequestBody(required = false) FilterData context) { @RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData(); if(context==null)context=new FilterData();
context.addParent(parentEntity,parentKey).addParent(parentEntity2,parentKey2); context.addParent(parentEntity,parentKey).addParent(parentEntity2,parentKey2);
...@@ -601,7 +604,11 @@ public class DataResource ...@@ -601,7 +604,11 @@ public class DataResource
.body(new PageImpl(baseDatas.getContent(), context.getPageable(), baseDatas.getTotalElements())); .body(new PageImpl(baseDatas.getContent(), context.getPageable(), baseDatas.getTotalElements()));
} }
@RequestMapping(method = RequestMethod.GET, value = {"/reload"})
public ResponseEntity<Boolean> reload(@PathVariable(name = "system",required = true) String systemId) {
modelService.refreshDynamicModel(systemId);
return ResponseEntity.ok(true);
}
@Value("${ibiz.enablePermissionValid:false}") @Value("${ibiz.enablePermissionValid:false}")
......
package cn.ibizlab.core.data.rest;
import cn.ibizlab.core.data.dto.BaseData;
import cn.ibizlab.core.data.dto.FilterData;
import cn.ibizlab.core.data.service.IPersistentService;
import cn.ibizlab.util.errors.BadRequestAlertException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.*;
@Slf4j
@Api(tags = {"数据" })
@RestController("api-persistent")
@RequestMapping({"/ibiz-database/{system}/{datasource}"})
public class PersistentResource
{
@Autowired
public IPersistentService persistentService;
@ApiOperation(value = "新建数据", tags = {"数据" }, notes = "新建数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}","/{table}/create"})
public ResponseEntity<BaseData> create(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam(name = "get",required = false) boolean get,
@Validated @RequestBody BaseData baseData) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.create(system,table,datasource,baseData,get));
}
@ApiOperation(value = "批量新建数据", tags = {"数据" }, notes = "批量新建数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/batch","/{table}/createbatch"})
public ResponseEntity<List<BaseData>> createBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody List<BaseData> baseDatas) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.createBatch(system,table,datasource,baseDatas,get));
}
@ApiOperation(value = "获取数据", tags = {"数据" }, notes = "获取数据")
@RequestMapping(method = RequestMethod.GET, value = {"/{table}","/{table}/{key}"})
public ResponseEntity<BaseData> get(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestParam Map map) {
BaseData baseData=BaseData.fromContext(map);
return doGet(system,table,datasource,key,baseData);
}
@ApiOperation(value = "获取数据", tags = {"数据" }, notes = "获取数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/get","/{table}/{key}/get"})
public ResponseEntity<BaseData> doGet(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@Validated @RequestBody(required = false) BaseData baseData) {
if(baseData==null)
{
if(StringUtils.isEmpty(key))
throw new BadRequestAlertException("未找到要获取的键值信息",table,null);
baseData=new BaseData();
}
return ResponseEntity.status(HttpStatus.OK).body(persistentService.getByMap(system,table,datasource,baseData.setKey(key)));
}
@ApiOperation(value = "批量删除数据", tags = {"数据" }, notes = "批量删除数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/getbatch"})
public ResponseEntity<List<BaseData>> getBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestBody List datas) {
if(ObjectUtils.isEmpty(datas))
return ResponseEntity.status(HttpStatus.OK).body(new ArrayList<>());
else if(datas.get(0) instanceof Map)
return ResponseEntity.status(HttpStatus.OK).body(persistentService.getByMapBatch(system,table,datasource,datas));
else
return ResponseEntity.status(HttpStatus.OK).body(persistentService.getBatch(system,table,datasource,datas));
}
@ApiOperation(value = "删除数据", tags = {"数据" }, notes = "删除数据")
@RequestMapping(method = RequestMethod.DELETE, value = {"/{table}","/{table}/{key}"})
public ResponseEntity<Boolean> remove(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestParam Map map) {
BaseData baseData=BaseData.fromContext(map);
return doRemove(system,table,datasource,key,baseData);
}
@ApiOperation(value = "删除数据", tags = {"数据" }, notes = "删除数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/remove","/{table}/{key}/remove"})
public ResponseEntity<Boolean> doRemove(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestBody(required = false) BaseData baseData) {
if(baseData==null)
{
if(StringUtils.isEmpty(key))
throw new BadRequestAlertException("未找到要删除的键值信息",table,null);
baseData=new BaseData();
}
return ResponseEntity.status(HttpStatus.OK).body(persistentService.removeByMap(system,table,datasource,baseData.setKey(key)));
}
@ApiOperation(value = "批量删除数据", tags = {"数据" }, notes = "批量删除数据")
@RequestMapping(method = RequestMethod.DELETE, value = {"/{table}/batch"})
public ResponseEntity<Boolean> removeBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestBody List datas) {
return doRemoveBatch(system,table,datasource,datas);
}
@ApiOperation(value = "批量删除数据", tags = {"数据" }, notes = "批量删除数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/removebatch"})
public ResponseEntity<Boolean> doRemoveBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestBody List datas) {
if(ObjectUtils.isEmpty(datas))
return ResponseEntity.status(HttpStatus.OK).body(true);
else if(datas.get(0) instanceof Map)
return ResponseEntity.status(HttpStatus.OK).body(persistentService.removeByMapBatch(system,table,datasource,datas));
else
return ResponseEntity.status(HttpStatus.OK).body(persistentService.removeBatch(system,table,datasource,datas));
}
@ApiOperation(value = "更新数据", tags = {"数据" }, notes = "更新数据")
@RequestMapping(method = RequestMethod.PUT, value = {"/{table}","/{table}/{key}"})
public ResponseEntity<BaseData> update(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody BaseData baseData) {
return doUpdate(system,table,datasource,key,get,baseData);
}
@ApiOperation(value = "更新数据", tags = {"数据" }, notes = "更新数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/update","/{table}/{key}/update"})
public ResponseEntity<BaseData> doUpdate(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody BaseData baseData) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.update(system,table,datasource,baseData.setKey(key),get));
}
@ApiOperation(value = "批量更新数据", tags = {"数据" }, notes = "批量更新数据")
@RequestMapping(method = RequestMethod.PUT, value = {"/{table}/batch"})
public ResponseEntity<List<BaseData>> updateBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody List<BaseData> baseDatas) {
return doUpdateBatch(system,table,datasource,get,baseDatas);
}
@ApiOperation(value = "批量更新数据", tags = {"数据" }, notes = "批量更新数据")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/updatebatch"})
public ResponseEntity<List<BaseData>> doUpdateBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody List<BaseData> baseDatas) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.updateBatch(system,table,datasource,baseDatas,get));
}
@ApiOperation(value = "检查数据", tags = {"数据" }, notes = "检查数据")
@RequestMapping(method = {RequestMethod.GET}, value = {"/{table}/checkkey","/{table}/{key}/checkkey"})
public ResponseEntity<Boolean> checkKey(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestParam Map map) {
BaseData baseData=BaseData.fromContext(map);
return doCheckKey(system,table,datasource,key,baseData);
}
@ApiOperation(value = "检查数据", tags = {"数据" }, notes = "检查数据")
@RequestMapping(method = {RequestMethod.POST}, value = {"/{table}/checkkey","/{table}/{key}/checkkey"})
public ResponseEntity<Boolean> doCheckKey(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,
@RequestBody(required = false) BaseData baseData) {
if(baseData==null)
{
if(StringUtils.isEmpty(key))
throw new BadRequestAlertException("未找到要检查的键值信息",table,null);
baseData=new BaseData();
}
return ResponseEntity.status(HttpStatus.OK).body(persistentService.checkKey(system,table,datasource,baseData.setKey(key)));
}
@ApiOperation(value = "保存数据", tags = {"数据" }, notes = "保存数据,自动判断插入和更新")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/save","/{table}/{key}/save"})
public ResponseEntity<BaseData> save(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "key",required = false) String key,@RequestParam(name = "get",required = false) boolean get,
@RequestBody BaseData baseData) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.save(system,table,datasource,baseData.setKey(key),get));
}
@ApiOperation(value = "批量保存数据", tags = {"数据" }, notes = "批量保存数据,自动判断插入和更新")
@RequestMapping(method = RequestMethod.POST, value = {"/{table}/savebatch"})
public ResponseEntity<List<BaseData>> saveBatch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam(name = "get",required = false) boolean get,
@RequestBody List<BaseData> baseDatas) {
return ResponseEntity.status(HttpStatus.OK).body(persistentService.saveBatch(system,table,datasource,baseDatas,get));
}
@ApiOperation(value = "Select查询数据", tags = {"数据" } ,notes = "Select查询数据,GET,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.GET , value={"/{table}/select"})
public ResponseEntity<List<BaseData>> select(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestParam Map map) {
FilterData context=FilterData.fromContext(map);
return doSelect(system,table,datasource,context);
}
@ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,POST,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.POST , value={"/{table}/select"})
public ResponseEntity<List<BaseData>> doSelect(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData();
if(context.needPage()) {
Page<BaseData> baseDatas = persistentService.select(system,table,datasource,context,context.getPageable()) ;
List<BaseData> list = baseDatas.getContent();
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", String.valueOf(context.getPageable().getPageNumber()))
.header("x-per-page", String.valueOf(context.getPageable().getPageSize()))
.header("x-total", String.valueOf(baseDatas.getTotalElements()))
.body(list);
}
else {
List<BaseData> list = persistentService.select(system,table,datasource,context) ;
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", "0")
.header("x-per-page", String.valueOf(list.size()))
.header("x-total", String.valueOf(list.size()))
.body(list);
}
}
@ApiOperation(value = "获取数据集", tags = {"数据" } ,notes = "获取数据集,GET,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.GET , value={"/{table}/fetch{dataset}"})
public ResponseEntity<List<BaseData>> fetch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataset",required = true) String dataset,
@RequestParam Map map) {
FilterData context=FilterData.fromContext(map);
return doFetch(system,table,datasource,dataset,context);
}
@ApiOperation(value = "获取数据集", tags = {"数据" } ,notes = "获取数据集,POST,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.POST , value={"/{table}/fetch{dataset}"})
public ResponseEntity<List<BaseData>> doFetch(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataset",required = true) String dataset,
@RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData();
if(context.needPage()) {
Page<BaseData> baseDatas = persistentService.fetch(system, table, datasource, dataset, context, context.getPageable());
List<BaseData> list = baseDatas.getContent();
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", String.valueOf(context.getPageable().getPageNumber()))
.header("x-per-page", String.valueOf(context.getPageable().getPageSize()))
.header("x-total", String.valueOf(baseDatas.getTotalElements()))
.body(list);
}
else {
List<BaseData> list = persistentService.fetch(system,table,datasource,dataset,context) ;
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", "0")
.header("x-per-page", String.valueOf(list.size()))
.header("x-total", String.valueOf(list.size()))
.body(list);
}
}
@ApiOperation(value = "获取数据集", tags = {"数据" } ,notes = "获取数据集,POST,返回body<page,total,list>")
@RequestMapping(method= RequestMethod.POST , value={"/{table}/search{dataset}"})
public ResponseEntity<Page<BaseData>> search(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataset",required = true) String dataset,
@RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData();
Page<BaseData> baseDatas = persistentService.fetch(system,table,datasource,dataset,context,context.getPageable()) ;
return ResponseEntity.status(HttpStatus.OK)
.body(new PageImpl(baseDatas.getContent(), context.getPageable(), baseDatas.getTotalElements()));
}
@ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,GET,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.GET , value={"/{table}/query{dataquery}"})
public ResponseEntity<List<BaseData>> query(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataquery",required = true) String dataquery,
@RequestParam Map map) {
FilterData context=FilterData.fromContext(map);
return doQuery(system,table,datasource,dataquery,context);
}
@ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,POST,返回body<list>+header<page,total>")
@RequestMapping(method= RequestMethod.POST , value={"/{table}/query{dataquery}"})
public ResponseEntity<List<BaseData>> doQuery(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataquery",required = true) String dataquery,
@RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData();
if(context.needPage()) {
Page<BaseData> baseDatas = persistentService.query(system,table,datasource,dataquery,context,context.getPageable()) ;
List<BaseData> list = baseDatas.getContent();
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", String.valueOf(context.getPageable().getPageNumber()))
.header("x-per-page", String.valueOf(context.getPageable().getPageSize()))
.header("x-total", String.valueOf(baseDatas.getTotalElements()))
.body(list);
}
else {
List<BaseData> list = persistentService.query(system,table,datasource,dataquery,context) ;
return ResponseEntity.status(HttpStatus.OK)
.header("x-page", "0")
.header("x-per-page", String.valueOf(list.size()))
.header("x-total", String.valueOf(list.size()))
.body(list);
}
}
@ApiOperation(value = "查询数据", tags = {"数据" } ,notes = "查询数据,POST,返回body<page,total,list>")
@RequestMapping(method= RequestMethod.POST , value={"/{table}/page{dataquery}"})
public ResponseEntity<Page<BaseData>> queryPage(@PathVariable(name = "system",required = true) String system,
@PathVariable(name = "table",required = true) String table,@PathVariable(name = "datasource",required = true) String datasource,
@PathVariable(name = "dataquery",required = true) String dataquery,
@RequestBody(required = false) FilterData context) {
if(context==null)context=new FilterData();
Page<BaseData> baseDatas = persistentService.fetch(system,table,datasource,dataquery,context,context.getPageable()) ;
return ResponseEntity.status(HttpStatus.OK)
.body(new PageImpl(baseDatas.getContent(), context.getPageable(), baseDatas.getTotalElements()));
}
}
...@@ -67,44 +67,7 @@ public class ModelService { ...@@ -67,44 +67,7 @@ public class ModelService {
@Cacheable( value="syspssystem",key = "'row:sys-dst-sys-local'")
@Cacheable( value="syspssystem",key = "'row:sys-dst-sys-models'")
public Map<String, DstSystemModel> getAllSystemModels()
{
Map<String,DstSystemModel> models=dynamicService.findAllDynamicModel();
// try
// {
// List<DstSystemModel> liteSystems=liteService.getSysApps();
// if(!ObjectUtils.isEmpty(liteSystems))
// {
// liteSystems.forEach(dstSystemModel->{
// String system=dstSystemModel.getPssystemid();
// if(!models.containsKey(system))
// models.put(system, dstSystemModel);
// if ((!system.toLowerCase().equals(system))&&(!models.containsKey(system.toLowerCase())))
// models.put(system.toLowerCase(), dstSystemModel);
// });
// }
// }
// catch (Exception ex)
// {
// log.error("dst接口访问异常",ex);
// }
getLocalSystemModels().values().forEach(dstSystemModel->{
String system=dstSystemModel.getPssystemid();
if(!models.containsKey(system))
models.put(system, dstSystemModel);
if ((!system.toLowerCase().equals(system))&&(!models.containsKey(system.toLowerCase())))
models.put(system.toLowerCase(), dstSystemModel);
});
return models;
}
public Map<String, DstSystemModel> getLocalSystemModels() public Map<String, DstSystemModel> getLocalSystemModels()
{ {
Map<String,DstSystemModel> models=null; Map<String,DstSystemModel> models=null;
...@@ -123,6 +86,13 @@ public class ModelService { ...@@ -123,6 +86,13 @@ public class ModelService {
} }
@CacheEvict( value="syspssystem",key = "'row:sys-dst-sys-local'")
public void resetLocalSystemModels()
{
}
@CacheEvict( value="syspssystem",key = "'row:sys-dst-sys-local'")
public Map<String,DstSystemModel> LoadLocalSystemModels() public Map<String,DstSystemModel> LoadLocalSystemModels()
{ {
Map<String,DstSystemModel> models=new LinkedHashMap<>(); Map<String,DstSystemModel> models=new LinkedHashMap<>();
...@@ -139,7 +109,7 @@ public class ModelService { ...@@ -139,7 +109,7 @@ public class ModelService {
for(File entityDir:repoDir.listFiles()) for(File entityDir:repoDir.listFiles())
{ {
Path json=Paths.get(repoDir.getAbsolutePath(),"domain",repoDir.getName()+".json"); Path json=Paths.get(entityDir.getAbsolutePath(),"domain",entityDir.getName()+".json");
if(Files.exists(json)) if(Files.exists(json))
{ {
try{ try{
...@@ -161,7 +131,7 @@ public class ModelService { ...@@ -161,7 +131,7 @@ public class ModelService {
if(models.size()>0) if(models.size()>0)
{ {
try { try {
Files.write(Paths.get(modelDir.getAbsolutePath(),"SYSTEM.json"), JSON.toJSONBytes(models), StandardOpenOption.CREATE); Files.write(Paths.get(modelDir.getAbsolutePath(),"SYSTEM.json"), JSON.toJSONBytes(models));
} catch (IOException e) { } catch (IOException e) {
} }
} }
...@@ -172,67 +142,40 @@ public class ModelService { ...@@ -172,67 +142,40 @@ public class ModelService {
@Cacheable( value="meta-entities", key = "'system:keymap-'+#p0") @Cacheable( value="meta-entities", key = "'system:keymap-'+#p0")
public Map<String,String> getEntitiyIdsBySystem(String system) throws Exception { public Map<String,String> getEntitiyIdsBySystem(String system) throws Exception {
DstSystemModel dstSystemModel=proxy.getAllSystemModels().get(system);
if(dstSystemModel==null)
throw new BadRequestAlertException("未找到对应的系统模型","DstSystem",system);
system = dstSystemModel.getPssystemid();
Map<String, String> entities = new HashMap<>(); Map<String, String> entities = new HashMap<>();
DstSystemModel dstSystemModel=dynamicService.findAllDynamicModel().get(system);
if(dstSystemModel!=null)
{
system = dstSystemModel.getPssystemid();
Map<String, MetaEntityModel> entityModels = dynamicService.getEntities(system); Map<String, MetaEntityModel> entityModels = dynamicService.getEntities(system);
entityModels.entrySet().forEach(entity->{ entityModels.entrySet().forEach(entry->{
String id=entity.getValue().getSystemId().concat(".domain.").concat(entity.getValue().getEntityName()); String id=entry.getValue().getSystemId().concat(".domain.").concat(entry.getValue().getEntityName());
entities.put(entity.getKey(),id); entities.put(entry.getKey(),id);
}); });
}
else
{
dstSystemModel=proxy.getLocalSystemModels().get(system);
if(dstSystemModel==null)
throw new BadRequestAlertException("未找到对应的系统模型","DstSystem",system);
// try{ system = dstSystemModel.getPssystemid();
// List<MetaEntityModel> liteEntities=liteService.getEntityModel(system);
// if(!ObjectUtils.isEmpty(liteEntities)) File repoDir=Paths.get(getModelPath(),system,"repo").toFile();
// { for(File entityDir:repoDir.listFiles())
// liteEntities.forEach(metaEntityModel->{ {
// String id=metaEntityModel.getSystemId().concat(".domain.").concat(metaEntityModel.getEntityName()); Path json=Paths.get(entityDir.getAbsolutePath(),"domain",entityDir.getName()+".json");
// if(Files.exists(json))
// if(!entities.containsKey(metaEntityModel.getCodeName())) {
// entities.put(metaEntityModel.getCodeName(),id); try{
// if(!entities.containsKey(metaEntityModel.getCodeName().toLowerCase())) PojoSchema pojoSchema=PojoSchema.fromPath(json);
// entities.put(metaEntityModel.getCodeName().toLowerCase(),id); String entityName=pojoSchema.getName();
// if(!entities.containsKey(metaEntityModel.getEntityName())) {
// entities.put(metaEntityModel.getEntityName(), id);
// }
// if(!entities.containsKey(metaEntityModel.getEntityName().toLowerCase())) {
// entities.put(metaEntityModel.getEntityName().toLowerCase(), id);
// }
// String pluralize= Inflector.getInstance().pluralize(metaEntityModel.getCodeName()).toLowerCase();
// if(!entities.containsKey(pluralize)) {
// entities.put(pluralize, id);
// }
//
// });
// }
// }
// catch (Exception ex)
// {
// log.error("dst接口访问异常",ex);
// }
File dir=Paths.get(getModelPath(),system,"repo","domain").toFile();
if(dir.exists())
{
for(File file:dir.listFiles())
{
if(!file.getName().endsWith(".json"))
continue;
String entityName=file.getName().replace(".json","");
String id=system.concat(".domain.").concat(entityName); String id=system.concat(".domain.").concat(entityName);
if(!entities.containsKey(entityName.toLowerCase())) { entities.put(entityName, id);
if(!entityName.equals(entityName.toLowerCase())) {
entities.put(entityName.toLowerCase(), id); entities.put(entityName.toLowerCase(), id);
try {
PojoSchema pojoSchema=PojoSchema.fromPath(file.toPath());
entityName=pojoSchema.getName();
if((StringUtils.isEmpty(entityName))&&(!entities.containsKey(pojoSchema.getName()))) {
entities.put(pojoSchema.getName(), id);
} }
String codeName=pojoSchema.getCodeName(); String codeName=pojoSchema.getCodeName();
if((StringUtils.isEmpty(codeName))&&(!entities.containsKey(codeName))) { if((StringUtils.isEmpty(codeName))&&(!entities.containsKey(codeName))) {
...@@ -244,12 +187,11 @@ public class ModelService { ...@@ -244,12 +187,11 @@ public class ModelService {
entities.put(pluralize, id); entities.put(pluralize, id);
} }
} }
}catch (Exception ex){} }catch (Exception ex){}
} }
} }
} }
return entities; return entities;
...@@ -258,26 +200,12 @@ public class ModelService { ...@@ -258,26 +200,12 @@ public class ModelService {
public EntityModel getEntityModel(String system,String entity) public EntityModel getEntityModel(String system,String entity)
{ {
EntityModel entityModel = null;
try { try {
entityModel = dynamicService.getDynamicEntity(system,entity); return dynamicService.getDynamicEntity(system,entity);
} catch (Exception exception) { } catch (Exception exception) {
exception.printStackTrace(); exception.printStackTrace();
throw new BadRequestAlertException("未找到实体"+system+"."+entity,"loadDOModel","");
} }
// try{ throw new BadRequestAlertException("未找到实体"+system+"."+entity,"getEntityModel","");
// if(entityModel==null)
// entityModel = liteService.getProxyEntityModel(system,entity);
// }
// catch (Exception ex)
// {
// log.error("dst接口访问异常",ex);
// }
return entityModel;
} }
public DOModel loadDOModel(String system,String entity) public DOModel loadDOModel(String system,String entity)
...@@ -295,16 +223,114 @@ public class ModelService { ...@@ -295,16 +223,114 @@ public class ModelService {
doModel.addPOSchema(dsType, poSchema); doModel.addPOSchema(dsType, poSchema);
} }
} }
return doModel;
} }
} }
else throw new BadRequestAlertException("未找到实体"+system+"."+entity,"loadDOModel","");
return null; throw new BadRequestAlertException("未找到实体"+system+"."+entity,"loadDOModel","");
} }
@Cacheable( value="domodel",key = "'row:'+#p0+'.domain.'+#p1")
public DOModel getDOModel(String system,String entity) public DOModel getDOModel(String system,String entity)
{ {
return doModelService.get(system+".domain."+entity); String key=system+".domain."+entity;
DOModel doModel=null;
PojoSchema schema=null;
Path storePath = Paths.get(ModelService.MODEL_PATH,system,"repo",entity,"domain",entity+".json");
if(!Files.exists(storePath))
{
try {
String entityTag=proxy.getEntitiyIdsBySystem(system).get(entity);
if(StringUtils.isEmpty(entityTag))
throw new BadRequestAlertException("获取模型失败","DOModel",key);
if(!key.equals(entityTag))
{
String[] args=entityTag.split("[.]");
system=args[0];
entity=args[2];
storePath = Paths.get(ModelService.MODEL_PATH,system,"repo",entity,"domain",entity+".json");
}
} catch (Exception exception) {
throw new BadRequestAlertException("获取模型失败","DOModel",key);
}
}
if(!Files.exists(storePath))
{
doModel = proxy.loadDOModel(system,entity);
schema = doModel.getSchema();
if(schema!=null)
{
if(doModel.getPoSchemas()!=null)
{
Path poPath = Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"repository",doModel.getName()+".json");
try {
File dir=poPath.getParent().toFile();
if(!dir.exists())
dir.mkdirs();
Files.write(poPath, JSON.toJSONBytes(doModel.getPoSchemas()));
} catch (Exception e) {
throw new BadRequestAlertException("保存文件失败","POSchemas",poPath.toString());
}
}
schema.writeTo(Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"domain",doModel.getName()+".json"));
}
}
else {
doModel = new DOModel();
schema = PojoSchema.fromPath(storePath);
if(schema!=null) {
doModel.setSchema(schema);
Path poPath = Paths.get(ModelService.MODEL_PATH, system, "repo", entity, "repository", entity + ".json");
if (Files.exists(poPath)) {
try {
doModel.setPoSchemas(JSON.parseObject(new String(Files.readAllBytes(poPath), StandardCharsets.UTF_8), new TypeReference<LinkedHashMap<String, POSchema>>() {
}));
} catch (IOException e) {
}
}
}
}
if(schema==null)
throw new BadRequestAlertException("未找到对应的模型","DOModel",key);
return doModel;
}
@Cacheable( value="pomodel",key = "'row:'+#p0+'._table.'+#p1+'.'+#p2")
public POSchema getPOSchema(String system,String table,String type)
{
String key=system+"._table."+table.toUpperCase()+"."+type.toLowerCase();
if(type.equalsIgnoreCase("mongodb"))
{
DOModel doModel=proxy.getDOModel(system,table);
if(doModel!=null&&doModel.getSchema()!=null)
{
return doModel.getPOSchema(type);
}
}
else
{
Path storePath = Paths.get(ModelService.MODEL_PATH,system,"repo","_table",table.toUpperCase(),type.toUpperCase()+".json");
if(Files.exists(storePath))
return POSchema.fromPath(storePath);
String vendorProvider=POSchema.provider.get(type.toLowerCase());
if(!type.equalsIgnoreCase(vendorProvider))
{
storePath = Paths.get(ModelService.MODEL_PATH,system,"repo","_table",table.toUpperCase(),POSchema.provider.get(vendorProvider)+".json");
if(Files.exists(storePath))
return POSchema.fromPath(storePath);
}
}
throw new BadRequestAlertException("未找到对应的模型","DOModel",key);
} }
...@@ -332,12 +358,16 @@ public class ModelService { ...@@ -332,12 +358,16 @@ public class ModelService {
standardSystem=args[0]; standardSystem=args[0];
standardEntity=args[2]; standardEntity=args[2];
if(entry.getKey().equals(standardEntity)||entry.getKey().equals(entity)) { if(entry.getKey().equals(standardEntity)||entry.getKey().equals(entity)) {
proxy.resetDOModel(system.concat(".domain.").concat(entry.getKey()));
if(!system.equals(system.toLowerCase()))
proxy.resetDOModel(system.toLowerCase().concat(".domain.").concat(entry.getKey()));
proxy.resetDOModel(standardSystem.concat(".domain.").concat(entry.getKey())); proxy.resetDOModel(standardSystem.concat(".domain.").concat(entry.getKey()));
if(!standardSystem.equals(standardSystem.toLowerCase())) if(!standardSystem.equals(standardSystem.toLowerCase()))
proxy.resetDOModel(standardSystem.toLowerCase().concat(".domain.").concat(entry.getKey())); proxy.resetDOModel(standardSystem.toLowerCase().concat(".domain.").concat(entry.getKey()));
if(!system.equals(standardSystem))
{
proxy.resetDOModel(system.concat(".domain.").concat(entry.getKey()));
if(!system.equals(system.toLowerCase()))
proxy.resetDOModel(system.toLowerCase().concat(".domain.").concat(entry.getKey()));
}
} }
}); });
} catch (Exception exception) { } catch (Exception exception) {
...@@ -345,12 +375,23 @@ public class ModelService { ...@@ -345,12 +375,23 @@ public class ModelService {
} }
@Scheduled(cron="0 */1 * * * ?") @Scheduled(cron="0 */1 * * * ?")
public synchronized void refreshDynamicModel() public void refreshDynamicModel()
{
refreshDynamicModel(dynamicService.getAllDynamicModelVersion());
}
public void refreshDynamicModel(String system)
{
refreshDynamicModel(dynamicService.getDynamicModelVersion(system));
}
private synchronized void refreshDynamicModel(Map<String,Long> entities)
{ {
dynamicService.getAllDynamicModelVersion().entrySet().forEach(entry->{ Set<String> changedSystems=new LinkedHashSet<>();
String system=entry.getKey(); entities.entrySet().forEach(item->{
entry.getValue().entrySet().forEach(item->{ String arr[]=item.getKey().split("[.]");
String entity=item.getKey(); String system=arr[0];
String entity=arr[1];
Long systemModify=item.getValue(); Long systemModify=item.getValue();
File json=Paths.get(this.getModelPath(),system,"repo",entity,"domain",entity+".json").toFile(); File json=Paths.get(this.getModelPath(),system,"repo",entity,"domain",entity+".json").toFile();
Long doModify=0L; Long doModify=0L;
...@@ -368,6 +409,7 @@ public class ModelService { ...@@ -368,6 +409,7 @@ public class ModelService {
PojoSchema schema = doModel.getSchema(); PojoSchema schema = doModel.getSchema();
if(schema!=null) if(schema!=null)
{ {
changedSystems.add(system);
if(doModel.getPoSchemas()!=null) if(doModel.getPoSchemas()!=null)
{ {
Path poPath = Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"repository",doModel.getName()+".json"); Path poPath = Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"repository",doModel.getName()+".json");
...@@ -375,7 +417,7 @@ public class ModelService { ...@@ -375,7 +417,7 @@ public class ModelService {
File dir=poPath.getParent().toFile(); File dir=poPath.getParent().toFile();
if(!dir.exists()) if(!dir.exists())
dir.mkdirs(); dir.mkdirs();
Files.write(poPath, JSON.toJSONBytes(doModel.getPoSchemas()), StandardOpenOption.CREATE); Files.write(poPath, JSON.toJSONBytes(doModel.getPoSchemas()));
} catch (Exception e) { } catch (Exception e) {
throw new BadRequestAlertException("保存文件失败","POSchemas",poPath.toString()); throw new BadRequestAlertException("保存文件失败","POSchemas",poPath.toString());
} }
...@@ -388,7 +430,9 @@ public class ModelService { ...@@ -388,7 +430,9 @@ public class ModelService {
} }
}); });
}); if(changedSystems.size()>0) {
LoadLocalSystemModels();
}
} }
public void mergeTableSchema(String system, POSchema poSchema, Long timestamp) public void mergeTableSchema(String system, POSchema poSchema, Long timestamp)
...@@ -401,6 +445,8 @@ public class ModelService { ...@@ -401,6 +445,8 @@ public class ModelService {
if(Files.exists(json)&&json.toFile().lastModified()>timestamp) if(Files.exists(json)&&json.toFile().lastModified()>timestamp)
{ {
POSchema old=POSchema.fromPath(json); POSchema old=POSchema.fromPath(json);
Set<String> oldex=new HashSet<>();
Set<String> newex=new HashSet<>();
if(old.getColumns()!=null) if(old.getColumns()!=null)
{ {
old.getColumns().forEach(column -> { old.getColumns().forEach(column -> {
...@@ -408,6 +454,7 @@ public class ModelService { ...@@ -408,6 +454,7 @@ public class ModelService {
if (newColumn==null) if (newColumn==null)
{ {
newSchema.addColumn(JSON.parseObject(JSON.toJSONString(column),POSchema.Column.class)); newSchema.addColumn(JSON.parseObject(JSON.toJSONString(column),POSchema.Column.class));
oldex.add(column.getName());
} }
else if(!ObjectUtils.isEmpty(column.getSearchModes())) else if(!ObjectUtils.isEmpty(column.getSearchModes()))
{ {
...@@ -416,6 +463,14 @@ public class ModelService { ...@@ -416,6 +463,14 @@ public class ModelService {
}); });
} }
if(poSchema.getColumns()!=null)
{
poSchema.getColumns().forEach(column -> {
if (old.getColumn(column.getName())==null)
newex.add(column.getName());
});
}
if(old.getTransients()!=null) if(old.getTransients()!=null)
{ {
old.getTransients().forEach(column -> { old.getTransients().forEach(column -> {
...@@ -423,6 +478,7 @@ public class ModelService { ...@@ -423,6 +478,7 @@ public class ModelService {
if (newColumn==null) if (newColumn==null)
{ {
newSchema.addTransient(JSON.parseObject(JSON.toJSONString(column),POSchema.Column.class)); newSchema.addTransient(JSON.parseObject(JSON.toJSONString(column),POSchema.Column.class));
oldex.add(column.getName());
} }
else if(!ObjectUtils.isEmpty(column.getSearchModes())) else if(!ObjectUtils.isEmpty(column.getSearchModes()))
{ {
...@@ -431,6 +487,14 @@ public class ModelService { ...@@ -431,6 +487,14 @@ public class ModelService {
}); });
} }
if(poSchema.getTransients()!=null)
{
poSchema.getTransients().forEach(column -> {
if (old.getColumn(column.getName())==null)
newex.add(column.getName());
});
}
if(!ObjectUtils.isEmpty(old.getForeignKeyConstraints())) if(!ObjectUtils.isEmpty(old.getForeignKeyConstraints()))
{ {
old.getForeignKeyConstraints().forEach(fk->{ old.getForeignKeyConstraints().forEach(fk->{
...@@ -449,6 +513,28 @@ public class ModelService { ...@@ -449,6 +513,28 @@ public class ModelService {
}); });
} }
if(oldex.size()>0&&newex.size()==0)
newSchema.setDefaultQueryScript(JSON.parseObject(JSON.toJSONString(old.getDefaultQueryScript()),POSchema.Segment.class));
else if(oldex.size()>0&&newex.size()>0)
{
newSchema.refreshColumnMaps();
String sql="select ";
String cols="";
if(newSchema.getBaseColumnMap()!=null)
{
cols=String.join(",",newSchema.getBaseColumnMap().keySet());
}
else
cols="t1.*";
sql += (cols+" from "+newSchema.getName()+" t1 ");
if(newSchema.isLogicValid())
{
sql += " where t1."+newSchema.getLogicValidCond();
}
newSchema.setDefaultQueryScriptSQL(sql);
}
} }
POSchema.writeTo(newSchema,json); POSchema.writeTo(newSchema,json);
} }
......
...@@ -74,49 +74,9 @@ public class DOModelServiceImpl implements IDOModelService { ...@@ -74,49 +74,9 @@ public class DOModelServiceImpl implements IDOModelService {
String[] args=key.split("[.]"); String[] args=key.split("[.]");
String system=args[0]; String system=args[0];
String entity=args[2]; String entity=args[2];
Path storePath = Paths.get(ModelService.MODEL_PATH,system,"repo",entity,"domain",entity+".json"); Path storePath = Paths.get(ModelService.MODEL_PATH,system,"repo",entity,"domain",entity+".json");
if(!Files.exists(storePath)) if(Files.exists(storePath))
{
try {
String entityId=modelService.getEntitiyIdsBySystem(system).get(entity);
if(StringUtils.isEmpty(entityId))
throw new BadRequestAlertException("获取模型失败","DOModel",key);
if(!key.equals(entityId))
{
args=entityId.split("[.]");
system=args[0];
entity=args[2];
storePath = Paths.get(ModelService.MODEL_PATH,system,"repo",entity,"domain",entity+".json");
}
} catch (Exception exception) {
throw new BadRequestAlertException("获取模型失败","DOModel",key);
}
}
if(!Files.exists(storePath))
{ {
doModel = modelService.loadDOModel(system,entity);
schema = doModel.getSchema();
if(schema!=null)
{
if(doModel.getPoSchemas()!=null)
{
Path poPath = Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"repository",doModel.getName()+".json");
try {
File dir=poPath.getParent().toFile();
if(!dir.exists())
dir.mkdirs();
Files.write(poPath, JSON.toJSONBytes(doModel.getPoSchemas()), StandardOpenOption.CREATE);
} catch (Exception e) {
throw new BadRequestAlertException("保存文件失败","POSchemas",poPath.toString());
}
}
schema.writeTo(Paths.get(ModelService.MODEL_PATH,doModel.getSystemId(),"repo",doModel.getName(),"domain",doModel.getName()+".json"));
}
}
else {
doModel = new DOModel(); doModel = new DOModel();
schema = PojoSchema.fromPath(storePath); schema = PojoSchema.fromPath(storePath);
if(schema!=null) { if(schema!=null) {
...@@ -132,8 +92,6 @@ public class DOModelServiceImpl implements IDOModelService { ...@@ -132,8 +92,6 @@ public class DOModelServiceImpl implements IDOModelService {
} }
} }
} }
if(schema==null) if(schema==null)
throw new BadRequestAlertException("未找到对应的模型","DOModel",key); throw new BadRequestAlertException("未找到对应的模型","DOModel",key);
......
...@@ -7,6 +7,7 @@ import cn.ibizlab.core.data.model.DSLink; ...@@ -7,6 +7,7 @@ import cn.ibizlab.core.data.model.DSLink;
import cn.ibizlab.core.data.model.POSchema; import cn.ibizlab.core.data.model.POSchema;
import cn.ibizlab.core.data.service.IDSSettingService; import cn.ibizlab.core.data.service.IDSSettingService;
import cn.ibizlab.core.data.service.IPersistentService; import cn.ibizlab.core.data.service.IPersistentService;
import cn.ibizlab.core.data.service.ModelService;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -34,6 +35,8 @@ public class DbPersistentServiceImpl implements IPersistentService { ...@@ -34,6 +35,8 @@ public class DbPersistentServiceImpl implements IPersistentService {
@Autowired @Autowired
private DbDataMapper repository; private DbDataMapper repository;
@Autowired
private ModelService modelService;
@Override @Override
public BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet) { public BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet) {
...@@ -345,6 +348,6 @@ public class DbPersistentServiceImpl implements IPersistentService { ...@@ -345,6 +348,6 @@ public class DbPersistentServiceImpl implements IPersistentService {
@Override @Override
public POSchema getSchema(DSLink link, String system, String table) { public POSchema getSchema(DSLink link, String system, String table) {
return null; return modelService.getPOSchema(system,table,link.getType());
} }
} }
...@@ -7,6 +7,7 @@ import cn.ibizlab.core.data.model.POSchema; ...@@ -7,6 +7,7 @@ import cn.ibizlab.core.data.model.POSchema;
import cn.ibizlab.core.data.repository.MongoDataRepository; import cn.ibizlab.core.data.repository.MongoDataRepository;
import cn.ibizlab.core.data.service.IDSSettingService; import cn.ibizlab.core.data.service.IDSSettingService;
import cn.ibizlab.core.data.service.IPersistentService; import cn.ibizlab.core.data.service.IPersistentService;
import cn.ibizlab.core.data.service.ModelService;
import cn.ibizlab.util.errors.BadRequestAlertException; import cn.ibizlab.util.errors.BadRequestAlertException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -28,6 +29,8 @@ public class MongoPersistentServiceImpl implements IPersistentService { ...@@ -28,6 +29,8 @@ public class MongoPersistentServiceImpl implements IPersistentService {
@Autowired @Autowired
private MongoDataRepository repository; private MongoDataRepository repository;
@Autowired
private ModelService modelService;
@Override @Override
public BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet) { public BaseData create(DSLink link, POSchema poSchema, BaseData et, boolean bGet) {
...@@ -251,6 +254,6 @@ public class MongoPersistentServiceImpl implements IPersistentService { ...@@ -251,6 +254,6 @@ public class MongoPersistentServiceImpl implements IPersistentService {
@Override @Override
public POSchema getSchema(DSLink link, String system, String table) { public POSchema getSchema(DSLink link, String system, String table) {
return null; return modelService.getPOSchema(system,table,link.getType());
} }
} }
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册