|
@@ -3,9 +3,7 @@ package com.boman.web.core.service;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.alibaba.fastjson.TypeReference;
|
|
|
import com.boman.common.core.constant.GenConstants;
|
|
|
-import com.boman.common.core.utils.DateUtils;
|
|
|
import com.boman.common.core.utils.SecurityUtils;
|
|
|
import com.boman.common.core.utils.array.ArrayUtils;
|
|
|
import com.boman.common.core.utils.collection.CollectionUtils;
|
|
@@ -13,14 +11,13 @@ import com.boman.common.core.utils.obj.ObjectUtils;
|
|
|
import com.boman.common.core.web.domain.AjaxResult;
|
|
|
import com.boman.common.redis.RedisKey;
|
|
|
import com.boman.common.redis.service.RedisService;
|
|
|
-import com.boman.domain.SysDictData;
|
|
|
import com.boman.domain.constant.*;
|
|
|
import com.boman.gen.api.RemoteGenTableColumnService;
|
|
|
import com.boman.gen.api.RemoteGenTableService;
|
|
|
import com.boman.domain.GenTable;
|
|
|
import com.boman.domain.GenTableColumn;
|
|
|
import com.boman.system.api.RemoteDictDataService;
|
|
|
-import com.boman.system.api.domain.SysFile;
|
|
|
+import com.boman.domain.SysFile;
|
|
|
import com.boman.web.core.domain.*;
|
|
|
import com.boman.web.core.service.delete.IBaseDeleteService;
|
|
|
import com.boman.web.core.service.save.IBaseSaveService;
|
|
@@ -43,9 +40,13 @@ import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.function.Predicate;
|
|
|
|
|
|
+import static com.boman.common.core.constant.GenConstants.HTML_FILE_UPLOAD;
|
|
|
+import static com.boman.common.core.constant.GenConstants.HTML_IMAGE_UPLOAD;
|
|
|
import static com.boman.common.core.utils.obj.ObjectUtils.*;
|
|
|
import static com.boman.domain.constant.FormDataConstant.*;
|
|
|
import static com.boman.web.core.utils.ColumnUtils.*;
|
|
|
+import static com.boman.web.core.utils.HandlerFormDataUtils.*;
|
|
|
+import static com.boman.web.core.utils.JSONObjectUtils.containsKeyIgnoreCase;
|
|
|
|
|
|
/**
|
|
|
* @author shiqian
|
|
@@ -209,6 +210,7 @@ public class TableServiceCmdService {
|
|
|
public AjaxResult queryList(FormDataDto dto) {
|
|
|
requireNonNull(dto.getTable(), "tableName = [" + dto.getTable() + "] 此表不存在");
|
|
|
GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, dto.getTable());
|
|
|
+ String tableName = genTable.getTableName();
|
|
|
JSONObject fixedData = ifNullSetEmpty(dto.getFixedData());
|
|
|
List<GenTableColumn> columns = genTable.getColumns();
|
|
|
|
|
@@ -235,12 +237,14 @@ public class TableServiceCmdService {
|
|
|
return AjaxResult.success(rows);
|
|
|
}
|
|
|
|
|
|
- List<JSONObject> result = selectService.selectByCondition(genTable.getTableName(), condition, packCondition
|
|
|
- , showData, dto.getOrderBy(), dto.getLimit(), dto.getOffset());
|
|
|
+ List<JSONObject> result = selectService.selectByCondition(tableName, condition, packCondition, showData, dto);
|
|
|
+ result = filter(result, ObjectUtils::isNotEmpty);
|
|
|
// 处理blob
|
|
|
- handlerBlobWithJSONObject(genTable.getIsContainsBlob(), result);
|
|
|
+ handleBlob(result, genTable.getIsContainsBlob());
|
|
|
// 处理日期、外键、字典值
|
|
|
- handler(result = filter(result, ObjectUtils::isNotEmpty), columns);
|
|
|
+ handleDictForQueryList(result, columns);
|
|
|
+ handleDateTimeForQueryList(result, columns);
|
|
|
+ handleFkForQueryList(result, columns);
|
|
|
// 定制接口
|
|
|
result = isCustomized(dto.getTable(), result, "trigger_retrieve");
|
|
|
|
|
@@ -248,129 +252,6 @@ public class TableServiceCmdService {
|
|
|
return AjaxResult.success(rows);
|
|
|
}
|
|
|
|
|
|
- private void handler(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
|
- // 处理时间
|
|
|
- handlerDate(result, columns);
|
|
|
- // 处理字典值
|
|
|
- handlerSysDictData(result, columns);
|
|
|
- // 处理外键
|
|
|
- handlerForeignKey(result, columns);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 功能描述: 处理外键 todo 待优化
|
|
|
- *
|
|
|
- * @param result result
|
|
|
- * @param columns 该表对应的所有的列
|
|
|
- */
|
|
|
- private void handlerForeignKey(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- // 拿到所有有fk的列
|
|
|
- List<GenTableColumn> fkColumns = filter(columns, col -> ObjectUtils.isNotEmpty(col.getForeignKey()));
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isEmpty(fkColumns)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (GenTableColumn column : fkColumns) {
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
- String selfColumnName = column.getColumnName();
|
|
|
- for (JSONObject json : result) {
|
|
|
- if (json.containsKey(selfColumnName.toUpperCase()) || json.containsKey(selfColumnName.toLowerCase())) {
|
|
|
- Map<String, Object> fkInfoMap = column.getFkInfo();
|
|
|
- Object fkTableName = fkInfoMap.get(FK_TABLE_NAME);
|
|
|
- Object fkColumnName = fkInfoMap.get(FK_COLUMN_NAME);
|
|
|
- Object dkColumnName = fkInfoMap.get(DK_COLUMN_NAME);
|
|
|
- Object primaryTableFkValue = json.get(selfColumnName);
|
|
|
-
|
|
|
- JSONObject param = new JSONObject();
|
|
|
- param.put(fkColumnName.toString(), primaryTableFkValue);
|
|
|
- JSONObject fkInfo = selectService.getOneByMap(fkTableName.toString(), param);
|
|
|
-
|
|
|
- Object value = fkInfo.get(dkColumnName);
|
|
|
- jsonObject.put(SINGLE_OBJ_NAME, primaryTableFkValue);
|
|
|
- jsonObject.put(SINGLE_OBJ_VALUE, value);
|
|
|
- json.put(selfColumnName.toLowerCase(), jsonObject);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 功能描述: 把timeStamp转为string, 默认类型为:YYYY_MM_DD
|
|
|
- *
|
|
|
- * @param result 被转的数据
|
|
|
- */
|
|
|
- private void handlerDate(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (JSONObject jsonObject : result) {
|
|
|
- for (GenTableColumn column : columns) {
|
|
|
- if (jsonObject.containsKey(column.getColumnName()) && NEED_CONVERT_DATE_LIST.contains(column.getColumnType())) {
|
|
|
- Date date = jsonObject.getTimestamp(column.getColumnName());
|
|
|
- if (null != date) {
|
|
|
- jsonObject.put(column.getColumnName(), DateUtils.dateTime(date));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 功能描述: 处理附件,把数据拿出来转换成name、url形式
|
|
|
- *
|
|
|
- * @param result 被转的数据
|
|
|
- */
|
|
|
- private void handlerAnnex(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (JSONObject jsonObject : result) {
|
|
|
- for (GenTableColumn column : columns) {
|
|
|
- if (jsonObject.containsKey(column.getColumnName())) {
|
|
|
- String value = jsonObject.getString(column.getColumnName());
|
|
|
- List<SysFile> fileList = JSON.parseObject(value, new TypeReference<List<SysFile>>() {
|
|
|
- }.getType());
|
|
|
- jsonObject.put(column.getColumnName(), fileList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 功能描述: 把返回值中含有字典值的转为可视化的心事
|
|
|
- *
|
|
|
- * @param result 被转的数据
|
|
|
- */
|
|
|
- private void handlerSysDictData(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
|
- if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (JSONObject jsonObject : result) {
|
|
|
- for (GenTableColumn column : columns) {
|
|
|
- String dictType = column.getDictType();
|
|
|
- if (isNotEmpty(dictType) && jsonObject.containsKey(column.getColumnName())) {
|
|
|
- String dictLabel = null;
|
|
|
- try {
|
|
|
- List<SysDictData> sysDictData = listSysDictDataByType(dictType);
|
|
|
- jsonObject.put("sysDictData", sysDictData);
|
|
|
-// dictLabel = remoteDictDataService.selectDictLabel(dictType, jsonObject.getString(column.getColumnName()));
|
|
|
-// jsonObject.put(column.getColumnName(), dictLabel);
|
|
|
-// column.setColumnValue(jsonObject.get(column.getColumnName()));
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 功能描述: 获取单表单数据
|
|
|
*
|
|
@@ -395,28 +276,39 @@ public class TableServiceCmdService {
|
|
|
JSONObject json = selectService.selectById(tableName, pkName, id);
|
|
|
requireNonNull(json, "id 为[" + id + "]的数据不存在, 表名为[" + tableName + "]");
|
|
|
// 处理blob
|
|
|
- handlerBlobWithJSONObject(genTable.getIsContainsBlob(), Collections.singletonList(json));
|
|
|
- List<GenTableColumn> parentColumns = filterHrAndSort(columns);
|
|
|
+ handleBlob(Collections.singletonList(json), genTable.getIsContainsBlob());
|
|
|
|
|
|
+ List<GenTableColumn> parentColumns = filterHrAndSort(columns);
|
|
|
// 处理成hr的形式
|
|
|
for (GenTableColumn hrColumn : parentColumns) {
|
|
|
List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
|
|
|
for (GenTableColumn column : columns) {
|
|
|
if (hrColumn.getId().equals(column.getHrParentId())) {
|
|
|
String columnName = column.getColumnName();
|
|
|
- // handler column
|
|
|
- if (json.containsKey(columnName)) {
|
|
|
- handlerSysDictData(Collections.singletonList(json), Collections.singletonList(column));
|
|
|
- handlerDate(Collections.singletonList(json), Collections.singletonList(column));
|
|
|
- handlerForeignKey(Collections.singletonList(json), Collections.singletonList(column));
|
|
|
- if (GenConstants.HTML_IMAGE_UPLOAD.equalsIgnoreCase(column.getHtmlType())
|
|
|
- || GenConstants.HTML_FILE_UPLOAD.equalsIgnoreCase(column.getHtmlType())) {
|
|
|
- handlerAnnex(Collections.singletonList(json), Collections.singletonList(column));
|
|
|
+ String columnType = column.getColumnType();
|
|
|
+ String htmlType = column.getHtmlType();
|
|
|
+ String dictType = column.getDictType();
|
|
|
+ if (containsKeyIgnoreCase(json, columnName)) {
|
|
|
+ // sysDict
|
|
|
+ if (isNotEmpty(dictType)) {
|
|
|
+ // 既要sysDictData还得要columnValue
|
|
|
+ column.setSysDictData(listSysDictDataByType(dictType));
|
|
|
+ column.setColumnValue(json.get(columnName));
|
|
|
+ }
|
|
|
+ // dateTime
|
|
|
+ if (NEED_CONVERT_DATE_LIST.contains(columnType)) {
|
|
|
+ column.setColumnValue(getStrDate(json.getTimestamp(columnName)));
|
|
|
+ }
|
|
|
+ // fk
|
|
|
+ if (isNotEmpty(column.getForeignKey())) {
|
|
|
+ column.setFkInfo(getFkMap(column.getFkInfo(), json.get(columnName)));
|
|
|
+ }
|
|
|
+ // annex
|
|
|
+ if (HTML_IMAGE_UPLOAD.equalsIgnoreCase(htmlType) || HTML_FILE_UPLOAD.equalsIgnoreCase(htmlType)) {
|
|
|
+ column.setAnnex(getAnnex(json.getString(columnName)));
|
|
|
}
|
|
|
|
|
|
column.setReadonly(SubmitConstant.STATUS.equals(columnName));
|
|
|
- column.setColumnValue(json.get(columnName));
|
|
|
- column.setSysDictData((List<SysDictData>)json.get("sysDictData"));
|
|
|
}
|
|
|
|
|
|
children.add(column);
|
|
@@ -431,33 +323,6 @@ public class TableServiceCmdService {
|
|
|
return AjaxResult.success(result);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 功能描述: 封装成查询条件 key: 列名, value:查询条件_查询类别
|
|
|
- * eg: [{"config_name": ["系统配置", "EQ", "varchar(100)"]}]
|
|
|
- *
|
|
|
- * @param columns columns
|
|
|
- * @return com.alibaba.fastjson.JSONObject
|
|
|
- */
|
|
|
- private JSONObject packColCondition(List<GenTableColumn> columns, JSONObject condition) {
|
|
|
- requireNonNull(columns);
|
|
|
-
|
|
|
- JSONObject result = new JSONObject(columns.size());
|
|
|
- for (Map.Entry<String, Object> entry : condition.entrySet()) {
|
|
|
- String key = entry.getKey();
|
|
|
- Object value = entry.getValue();
|
|
|
- for (GenTableColumn column : columns) {
|
|
|
- // long string collection 暂时只作此三种类型判断
|
|
|
- if (column.getColumnName().equalsIgnoreCase(key) && ObjectUtils.isNotEmpty(value)) {
|
|
|
- // columnType 作为判断需不需要转义的一个标准,防止索引失效
|
|
|
- result.put(key, Lists.newArrayList(String.valueOf(value), column.getQueryType(), column.getColumnType()));
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 功能描述: 获取表单查询字段、按钮、表头
|
|
|
* 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
|
|
@@ -803,15 +668,5 @@ public class TableServiceCmdService {
|
|
|
AjaxResult ajaxResult = remoteGenTableColumnService.listColumnsByTableId(table.getId());
|
|
|
return ajaxResult;
|
|
|
}
|
|
|
-
|
|
|
- public List<SysDictData> listSysDictDataByType(String dictType) {
|
|
|
- List<SysDictData> sysDictData = null;
|
|
|
- try {
|
|
|
- sysDictData = remoteDictDataService.listByType(dictType);
|
|
|
- } catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
- }
|
|
|
- return sysDictData;
|
|
|
- }
|
|
|
}
|
|
|
|