mirror of
https://github.com/getrebuild/rebuild.git
synced 2025-09-08 23:56:20 +08:00
feat: FromtJS.Query
This commit is contained in:
parent
e18a27e55b
commit
2aef832ac4
2 changed files with 50 additions and 4 deletions
2
@rbv
2
@rbv
|
@ -1 +1 @@
|
|||
Subproject commit a1375513efbfaa1afca05ebe6c57a6dba802c0d2
|
||||
Subproject commit 781a1e2e684ee252b4bb84e37bb30b976cce8eda
|
|
@ -9,6 +9,8 @@ package com.rebuild.web.general;
|
|||
|
||||
import cn.devezhao.bizz.security.AccessDeniedException;
|
||||
import cn.devezhao.commons.web.ServletUtils;
|
||||
import cn.devezhao.persist4j.Entity;
|
||||
import cn.devezhao.persist4j.Field;
|
||||
import cn.devezhao.persist4j.Record;
|
||||
import cn.devezhao.persist4j.engine.ID;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
@ -17,7 +19,10 @@ import com.alibaba.fastjson.JSONObject;
|
|||
import com.rebuild.api.RespBody;
|
||||
import com.rebuild.core.Application;
|
||||
import com.rebuild.core.metadata.EntityHelper;
|
||||
import com.rebuild.core.metadata.MetadataHelper;
|
||||
import com.rebuild.core.service.DataSpecificationException;
|
||||
import com.rebuild.core.service.query.AdvFilterParser;
|
||||
import com.rebuild.core.service.query.ParseHelper;
|
||||
import com.rebuild.utils.JSONUtils;
|
||||
import com.rebuild.web.BaseController;
|
||||
import com.rebuild.web.IdParam;
|
||||
|
@ -28,6 +33,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 非业务实体操作(如系统实体)
|
||||
|
@ -64,15 +71,54 @@ public class CommonOperatingController extends BaseController {
|
|||
|
||||
@RequestMapping("common-get")
|
||||
public RespBody get(@IdParam ID recordId, HttpServletRequest request) {
|
||||
final String fields = getParameter(request, "fields");
|
||||
Record record = Application.getQueryFactory()
|
||||
.record(recordId, StringUtils.isBlank(fields) ? new String[0] : fields.split("[,;]"));
|
||||
String fields = getParameter(request, "fields");
|
||||
if (StringUtils.isEmpty(fields)) fields = getAllFields(MetadataHelper.getEntity(recordId.getEntityCode()));
|
||||
|
||||
Record record = Application.getQueryFactory().record(recordId, fields.split("[,;]"));
|
||||
if (record == null) {
|
||||
return RespBody.error("无权读取此记录或记录已被删除");
|
||||
}
|
||||
return RespBody.ok(record);
|
||||
}
|
||||
|
||||
@RequestMapping("common-list")
|
||||
public RespBody list(HttpServletRequest request) {
|
||||
JSONObject queryBody = (JSONObject) ServletUtils.getRequestJson(request);
|
||||
|
||||
// FIXME SAFE!
|
||||
String entity = queryBody.getString("entity");
|
||||
String fields = queryBody.getString("fields");
|
||||
JSONObject filter = queryBody.getJSONObject("filter");
|
||||
String sort = queryBody.getString("sort");
|
||||
int limit = queryBody.getIntValue("limit");
|
||||
if (limit < 1) limit = 20;
|
||||
if (limit > 500) limit = 500;
|
||||
|
||||
Entity entityMate = MetadataHelper.getEntity(entity);
|
||||
if (StringUtils.isBlank(fields)) fields = getAllFields(entityMate);
|
||||
|
||||
String sql = String.format("select %s from %s", fields, entityMate.getName());
|
||||
if (ParseHelper.validAdvFilter(filter)) {
|
||||
String filterWhere = new AdvFilterParser(filter, entityMate).toSqlWhere();
|
||||
if (filterWhere != null) sql += " where " + filterWhere;
|
||||
}
|
||||
if (StringUtils.isNotBlank(sort)) {
|
||||
sql += " order by " + sort.replace(":", " ");
|
||||
}
|
||||
|
||||
List<Record> list = Application.getQueryFactory().createQueryNoFilter(sql).setLimit(limit).list();
|
||||
return RespBody.ok(list);
|
||||
}
|
||||
|
||||
// 获取全部字段
|
||||
private String getAllFields(Entity entity) {
|
||||
List<String> ss = new ArrayList<>();
|
||||
for (Field field : entity.getFields()) {
|
||||
if (!MetadataHelper.isSystemField(field.getName())) ss.add(field.getName());
|
||||
}
|
||||
return StringUtils.join(ss, ",");
|
||||
}
|
||||
|
||||
/**
|
||||
* @param record
|
||||
* @return
|
||||
|
|
Loading…
Add table
Reference in a new issue