feat: FromtJS.Query

This commit is contained in:
RB 2024-09-04 14:18:10 +08:00
parent e18a27e55b
commit 2aef832ac4
2 changed files with 50 additions and 4 deletions

2
@rbv

@ -1 +1 @@
Subproject commit a1375513efbfaa1afca05ebe6c57a6dba802c0d2
Subproject commit 781a1e2e684ee252b4bb84e37bb30b976cce8eda

View file

@ -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