|
@@ -17,7 +17,6 @@ import com.boman.gen.domain.GenTable;
|
|
import com.boman.gen.domain.GenTableColumn;
|
|
import com.boman.gen.domain.GenTableColumn;
|
|
import com.boman.gen.domain.GenTableRelation;
|
|
import com.boman.gen.domain.GenTableRelation;
|
|
import com.boman.system.api.RemoteDictDataService;
|
|
import com.boman.system.api.RemoteDictDataService;
|
|
-import com.boman.web.core.constant.DictConstant;
|
|
|
|
import com.boman.web.core.constant.FormDataConstant;
|
|
import com.boman.web.core.constant.FormDataConstant;
|
|
import com.boman.web.core.constant.SubmitConstant;
|
|
import com.boman.web.core.constant.SubmitConstant;
|
|
import com.boman.web.core.domain.*;
|
|
import com.boman.web.core.domain.*;
|
|
@@ -29,6 +28,7 @@ import com.boman.web.core.service.update.IBaseUpdateService;
|
|
import com.boman.web.core.utils.IdUtils;
|
|
import com.boman.web.core.utils.IdUtils;
|
|
import com.google.common.base.Strings;
|
|
import com.google.common.base.Strings;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Lists;
|
|
|
|
+import org.apache.commons.lang3.BooleanUtils;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
@@ -38,12 +38,11 @@ import javax.annotation.Resource;
|
|
import java.sql.Timestamp;
|
|
import java.sql.Timestamp;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
+import java.util.function.Predicate;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
-import static com.boman.common.core.utils.obj.ObjectUtils.ifNullSetEmpty;
|
|
|
|
-import static com.boman.common.core.utils.obj.ObjectUtils.requireNonNull;
|
|
|
|
-import static com.boman.web.core.constant.FormDataConstant.CONDITION;
|
|
|
|
-import static com.boman.web.core.constant.FormDataConstant.SHOW_DATA;
|
|
|
|
|
|
+import static com.boman.common.core.utils.obj.ObjectUtils.*;
|
|
|
|
+import static com.boman.web.core.constant.FormDataConstant.*;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author shiqian
|
|
* @author shiqian
|
|
@@ -68,7 +67,7 @@ public class TableServiceCmdService {
|
|
@Resource
|
|
@Resource
|
|
private RestTemplate restTemplate;
|
|
private RestTemplate restTemplate;
|
|
@Resource
|
|
@Resource
|
|
- private RemoteDictDataService dictTypeService;
|
|
|
|
|
|
+ private RemoteDictDataService remoteDictDataService;
|
|
@Resource
|
|
@Resource
|
|
private RemoteGenTableService remoteGenTableService;
|
|
private RemoteGenTableService remoteGenTableService;
|
|
|
|
|
|
@@ -91,15 +90,10 @@ public class TableServiceCmdService {
|
|
String pkName = IdUtils.getPkName(columns);
|
|
String pkName = IdUtils.getPkName(columns);
|
|
requireNonNull(pkName, "主键名称为空");
|
|
requireNonNull(pkName, "主键名称为空");
|
|
|
|
|
|
- //
|
|
|
|
- List<String> allColumnNameList = columns.stream()
|
|
|
|
- .map(GenTableColumn::getColumnName)
|
|
|
|
- .collect(Collectors.toList());
|
|
|
|
-
|
|
|
|
// 新增
|
|
// 新增
|
|
if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
|
|
if (ObjectUtils.ltZero(baseTableDTO.getObjId())) {
|
|
Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
|
|
Long maxId = IdUtils.getMaxId(baseTableDTO.getTable(), pkName);
|
|
- RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), allColumnNameList);
|
|
|
|
|
|
+ RowResult rowResult = saveService.insertRow(context.getRealTableName(), pkName, maxId, context.getRows().get(0), columns);
|
|
if (RowResult.checkSuccess(rowResult)) {
|
|
if (RowResult.checkSuccess(rowResult)) {
|
|
LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
|
|
LOGGER.info("保存成功,封装到数据库的数据为: {}", JSON.toJSONString(rowResult.getData()));
|
|
} else {
|
|
} else {
|
|
@@ -209,7 +203,8 @@ public class TableServiceCmdService {
|
|
|
|
|
|
List<JSONObject> result = selectService.selectByCondition(genTable.getTableName(), condition, packCondition
|
|
List<JSONObject> result = selectService.selectByCondition(genTable.getTableName(), condition, packCondition
|
|
, showData, dto.getOrderBy(), dto.getLimit(), dto.getOffset());
|
|
, showData, dto.getOrderBy(), dto.getLimit(), dto.getOffset());
|
|
- handlerDate(result);
|
|
|
|
|
|
+ handlerDate(result, columns);
|
|
|
|
+ handlerSysDictData(result, columns);
|
|
result = isCustomized(dto.getTable(),result,"trigger_retrieve");
|
|
result = isCustomized(dto.getTable(),result,"trigger_retrieve");
|
|
rows.put(FormDataConstant.PAGE_ROWS, result);
|
|
rows.put(FormDataConstant.PAGE_ROWS, result);
|
|
return AjaxResult.success(rows);
|
|
return AjaxResult.success(rows);
|
|
@@ -220,13 +215,38 @@ public class TableServiceCmdService {
|
|
*
|
|
*
|
|
* @param result 被转的数据
|
|
* @param result 被转的数据
|
|
*/
|
|
*/
|
|
- private void handlerDate(List<JSONObject> result) {
|
|
|
|
|
|
+ private void handlerDate(List<JSONObject> result, List<GenTableColumn> columns) {
|
|
if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
if (org.apache.commons.collections4.CollectionUtils.isEmpty(result)) {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
+
|
|
for (JSONObject jsonObject : result) {
|
|
for (JSONObject jsonObject : result) {
|
|
- getStrByTimeStamp(jsonObject, FormDataConstant.CREATE_TIME);
|
|
|
|
- getStrByTimeStamp(jsonObject, FormDataConstant.UPDATE_TIME.toLowerCase());
|
|
|
|
|
|
+ for (GenTableColumn column : columns) {
|
|
|
|
+ if (jsonObject.containsKey(column.getColumnName()) && DATETIME.equalsIgnoreCase(column.getColumnType())) {
|
|
|
|
+ getStrByTimeStamp(jsonObject, column.getColumnName());
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 功能描述: 把返回值中含有字典值的转为可视化的心事
|
|
|
|
+ *
|
|
|
|
+ * @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 = remoteDictDataService.selectDictLabel(dictType, jsonObject.getString(column.getColumnName()));
|
|
|
|
+ jsonObject.put(column.getColumnName(), dictLabel);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -239,7 +259,6 @@ public class TableServiceCmdService {
|
|
private void getStrByTimeStamp(JSONObject jsonObject, String columnType) {
|
|
private void getStrByTimeStamp(JSONObject jsonObject, String columnType) {
|
|
Date date = jsonObject.getTimestamp(columnType);
|
|
Date date = jsonObject.getTimestamp(columnType);
|
|
if (null != date) {
|
|
if (null != date) {
|
|
-
|
|
|
|
jsonObject.put(columnType, DateUtils.dateTime(date));
|
|
jsonObject.put(columnType, DateUtils.dateTime(date));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -318,7 +337,7 @@ public class TableServiceCmdService {
|
|
if (GenTableColumn.IS_QUERY.equalsIgnoreCase(column.getIsQuery())) {
|
|
if (GenTableColumn.IS_QUERY.equalsIgnoreCase(column.getIsQuery())) {
|
|
String dictType = column.getDictType();
|
|
String dictType = column.getDictType();
|
|
if (ObjectUtils.isNotEmpty(dictType)) {
|
|
if (ObjectUtils.isNotEmpty(dictType)) {
|
|
- List<SysDictData> sysDictData1 = dictTypeService.listByType(dictType);
|
|
|
|
|
|
+ List<SysDictData> sysDictData1 = remoteDictDataService.listByType(dictType);
|
|
column.setSysDictData(sysDictData1);
|
|
column.setSysDictData(sysDictData1);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -330,12 +349,87 @@ public class TableServiceCmdService {
|
|
// genTable.getMenuRole() 暂时数据库没有数据,
|
|
// genTable.getMenuRole() 暂时数据库没有数据,
|
|
jsonObject.put(FormDataConstant.BUTTON_LIST, Strings.nullToEmpty(genTable.getMenuRole()));
|
|
jsonObject.put(FormDataConstant.BUTTON_LIST, Strings.nullToEmpty(genTable.getMenuRole()));
|
|
|
|
|
|
|
|
+ jsonObject.put(FormDataConstant.TABLE_HEAD_LIST, getTableHeadList(genTable));
|
|
|
|
+ return AjaxResult.success(jsonObject);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 功能描述: 获取表单查询字段
|
|
|
|
+ * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
|
|
|
|
+ * 刷新的入口为 {@link MyController#loadTable(com.boman.gen.domain.GenTable)}
|
|
|
|
+ *
|
|
|
|
+ * eg:{
|
|
|
|
+ * "table": "sys_config"
|
|
|
|
+ * }
|
|
|
|
+ *
|
|
|
|
+ * @param condition condition
|
|
|
|
+ * @return com.boman.common.core.web.domain.AjaxResult
|
|
|
|
+ */
|
|
|
|
+ public AjaxResult getQueryParam(BaseTableSaveDTO condition) {
|
|
|
|
+ GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
|
|
|
|
+ List<GenTableColumn> columns = genTable.getColumns();
|
|
|
|
+ // 查询字段
|
|
|
|
+ ArrayList<GenTableColumn> queryList = Lists.newArrayListWithCapacity(16);
|
|
|
|
+ for (GenTableColumn column : columns) {
|
|
|
|
+ if (GenTableColumn.IS_QUERY.equalsIgnoreCase(column.getIsQuery())) {
|
|
|
|
+ String dictType = column.getDictType();
|
|
|
|
+ if (ObjectUtils.isNotEmpty(dictType)) {
|
|
|
|
+ List<SysDictData> sysDictData1 = remoteDictDataService.listByType(dictType);
|
|
|
|
+ column.setSysDictData(sysDictData1);
|
|
|
|
+ }
|
|
|
|
+ queryList.add(column);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return AjaxResult.success(queryList);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 功能描述: 获取表单表头
|
|
|
|
+ * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
|
|
|
|
+ * 刷新的入口为 {@link MyController#loadTable(com.boman.gen.domain.GenTable)}
|
|
|
|
+ *
|
|
|
|
+ * eg:{
|
|
|
|
+ * "table": "sys_config"
|
|
|
|
+ * }
|
|
|
|
+ *
|
|
|
|
+ * @param condition condition
|
|
|
|
+ * @return com.boman.common.core.web.domain.AjaxResult
|
|
|
|
+ */
|
|
|
|
+ public AjaxResult getTableHead(BaseTableSaveDTO condition) {
|
|
|
|
+ GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
|
|
|
|
+ return AjaxResult.success(getTableHeadList(genTable));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 功能描述: 获取表单按钮
|
|
|
|
+ * 注意: 都是从redis中拿的,如果数据库和redis不一致,则需刷新一下redis
|
|
|
|
+ * 刷新的入口为 {@link MyController#loadTable(com.boman.gen.domain.GenTable)}
|
|
|
|
+ *
|
|
|
|
+ * eg:{
|
|
|
|
+ * "table": "sys_config"
|
|
|
|
+ * }
|
|
|
|
+ *
|
|
|
|
+ * @param condition condition
|
|
|
|
+ * @return com.boman.common.core.web.domain.AjaxResult
|
|
|
|
+ */
|
|
|
|
+ public AjaxResult getButton(BaseTableSaveDTO condition) {
|
|
|
|
+ GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
|
|
|
|
+ return AjaxResult.success("成功", Strings.nullToEmpty(genTable.getMenuRole()));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 根据表对象获取要显示的表头信息
|
|
|
|
+ * @param genTable
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public List<GenTableColumn> getTableHeadList(GenTable genTable){
|
|
|
|
+ List<GenTableColumn> columns = genTable.getColumns();
|
|
// 表头
|
|
// 表头
|
|
- List<GenTableColumn> tableHeadList = columns.stream()
|
|
|
|
|
|
+ return columns.stream()
|
|
.filter(genTableColumn -> GenTableColumn.IS_LIST.equals(genTableColumn.getIsList()))
|
|
.filter(genTableColumn -> GenTableColumn.IS_LIST.equals(genTableColumn.getIsList()))
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
- jsonObject.put(FormDataConstant.TABLE_HEAD_LIST, tableHeadList);
|
|
|
|
- return AjaxResult.success(jsonObject);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -345,24 +439,16 @@ public class TableServiceCmdService {
|
|
* @return com.boman.common.core.web.domain.AjaxResult
|
|
* @return com.boman.common.core.web.domain.AjaxResult
|
|
*/
|
|
*/
|
|
public AjaxResult objectTab(BaseTableSaveDTO condition) {
|
|
public AjaxResult objectTab(BaseTableSaveDTO condition) {
|
|
|
|
+ //获取到主表对象
|
|
GenTable genTable = getTableFromRedisByTableName(RedisKey.RELATION, condition.getTable());
|
|
GenTable genTable = getTableFromRedisByTableName(RedisKey.RELATION, condition.getTable());
|
|
-
|
|
|
|
|
|
+ //从主表对象的relationList中获取出所有子表表对象
|
|
List<GenTable> childTableList = genTable.getRelationList();
|
|
List<GenTable> childTableList = genTable.getRelationList();
|
|
- // 此表没有关联子表,查啥查
|
|
|
|
- requireNonNull(childTableList);
|
|
|
|
- // todo
|
|
|
|
- for (GenTable childTable : childTableList) {
|
|
|
|
- String childTableName = childTable.getTableName();
|
|
|
|
- Long childTableTableId = childTable.getTableId();
|
|
|
|
- List<GenTableColumn> childColumns = childTable.getColumns();
|
|
|
|
- // column_name = 先根据tableName查到id,再用id到relation中查到relation_child_id, 在用这个值去到tableColumn中查到column_name
|
|
|
|
- // select * from childTableName where column_name = objId
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return AjaxResult.success();
|
|
|
|
|
|
+ // 表头
|
|
|
|
+ List<GenTableColumn> tableHeadList = getTableHeadList(genTable);
|
|
|
|
+ JSONObject jsonObject = new JSONObject();
|
|
|
|
+ jsonObject.put(FormDataConstant.REF, childTableList);
|
|
|
|
+ jsonObject.put(FormDataConstant.TABLE_HEAD_LIST, tableHeadList);
|
|
|
|
+ return AjaxResult.success(jsonObject);
|
|
}
|
|
}
|
|
|
|
|
|
public String getChildColumnNameByParentTableName(GenTable parentGenTable, Long childTableTableId){
|
|
public String getChildColumnNameByParentTableName(GenTable parentGenTable, Long childTableTableId){
|
|
@@ -517,7 +603,7 @@ public class TableServiceCmdService {
|
|
GenTable genTable = redisService.getCacheObject(key);
|
|
GenTable genTable = redisService.getCacheObject(key);
|
|
if (ObjectUtils.isEmpty(genTable)) {
|
|
if (ObjectUtils.isEmpty(genTable)) {
|
|
genTable = remoteGenTableService.getByTableName(tableName);
|
|
genTable = remoteGenTableService.getByTableName(tableName);
|
|
- requireNonNull(genTable, "未找到表对应的信息");
|
|
|
|
|
|
+ requireNonNull(genTable, "数据库中,未找到表对应的信息");
|
|
// {@link com.boman.gen.controller.MyController.packTableAndInsertToRedis} 失效时间
|
|
// {@link com.boman.gen.controller.MyController.packTableAndInsertToRedis} 失效时间
|
|
redisService.setCacheObject(key, genTable, 12L, TimeUnit.DAYS);
|
|
redisService.setCacheObject(key, genTable, 12L, TimeUnit.DAYS);
|
|
}
|
|
}
|
|
@@ -526,7 +612,7 @@ public class TableServiceCmdService {
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|
|
- * 功能描述: 反提交接口, 更改的字段类型和字段值都是一致的
|
|
|
|
|
|
+ * 功能描述: 根据表名获取表信息、表字段和表字段对应的字典值
|
|
* {
|
|
* {
|
|
* "table": "sys_config",
|
|
* "table": "sys_config",
|
|
* }
|
|
* }
|
|
@@ -537,32 +623,52 @@ public class TableServiceCmdService {
|
|
*/
|
|
*/
|
|
public AjaxResult getByTableName(BaseTableSaveDTO condition) {
|
|
public AjaxResult getByTableName(BaseTableSaveDTO condition) {
|
|
requireNonNull(condition.getTable(), "表名为空");
|
|
requireNonNull(condition.getTable(), "表名为空");
|
|
|
|
+ requireNonNull(condition.getIsUi(), "根据表名获取表字段,未传 isUi 这个字段");
|
|
GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
|
|
GenTable genTable = getTableFromRedisByTableName(RedisKey.TABLE_INFO, condition.getTable());
|
|
- List<GenTableColumn> columns = genTable.getColumns();
|
|
|
|
- for (GenTableColumn column : columns) {
|
|
|
|
- String dictType = column.getDictType();
|
|
|
|
- if (ObjectUtils.isNotEmpty(dictType)) {
|
|
|
|
- List<SysDictData> sysDictData1 = dictTypeService.listByType(dictType);
|
|
|
|
- column.setSysDictData(sysDictData1);
|
|
|
|
|
|
+ List<GenTableColumn> allColumns = genTable.getColumns();
|
|
|
|
+ // 普通的展示,不带折叠的
|
|
|
|
+ if (BooleanUtils.isFalse(condition.getIsUi())) {
|
|
|
|
+ packDictDataToColumns(allColumns, ObjectUtils::isNotEmpty);
|
|
|
|
+ return AjaxResult.success(genTable);
|
|
|
|
+ } else {
|
|
|
|
+ // 带折叠的展示
|
|
|
|
+ return getByTableName(allColumns);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public AjaxResult getByTableName( List<GenTableColumn> allColumns) {
|
|
|
|
+ List<GenTableColumn> parentColumns = filter(allColumns, col -> HR.equalsIgnoreCase(col.getHtmlType()));
|
|
|
|
+
|
|
|
|
+ // 把孩子放入父亲的怀抱
|
|
|
|
+ for (GenTableColumn hrColumn : parentColumns) {
|
|
|
|
+ List<GenTableColumn> children = Lists.newArrayListWithCapacity(16);
|
|
|
|
+ for (GenTableColumn column : allColumns) {
|
|
|
|
+ if (hrColumn.getColumnId().equals(column.getHrParentId())) {
|
|
|
|
+ children.add(column);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ hrColumn.setHrChildren(children);
|
|
}
|
|
}
|
|
|
|
|
|
- return AjaxResult.success(genTable);
|
|
|
|
|
|
+ // 把孩子对应的字典值放进去
|
|
|
|
+ for (GenTableColumn hrColumn : parentColumns) {
|
|
|
|
+ packDictDataToColumns(hrColumn.getHrChildren(), ObjectUtils::isNotEmpty);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return AjaxResult.success(parentColumns);
|
|
}
|
|
}
|
|
|
|
|
|
- public List<JSONObject> coverSysDictDataToJSONObject(List<SysDictData> sysDictData) {
|
|
|
|
- List<JSONObject> result = Lists.newArrayListWithCapacity(sysDictData.size());
|
|
|
|
- for (SysDictData data : sysDictData) {
|
|
|
|
- JSONObject jsonObject = new JSONObject();
|
|
|
|
- String dictLabel = data.getDictLabel();
|
|
|
|
- String dictValue = data.getDictValue();
|
|
|
|
- jsonObject.put(DictConstant.DICT_LABEL, dictLabel);
|
|
|
|
- jsonObject.put(DictConstant.DICT_VALUE, dictValue);
|
|
|
|
- result.add(jsonObject);
|
|
|
|
|
|
+ public void packDictDataToColumns(List<GenTableColumn> columns, Predicate<String> predicate) {
|
|
|
|
+ requireNonNull(columns, "columns 为空");
|
|
|
|
+ for (GenTableColumn column : columns) {
|
|
|
|
+ String dictType = column.getDictType();
|
|
|
|
+ if (predicate.test(dictType)) {
|
|
|
|
+ List<SysDictData> sysDictData1 = remoteDictDataService.listByType(dictType);
|
|
|
|
+ column.setSysDictData(sysDictData1);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- return result;
|
|
|
|
|
|
|
|
- }
|
|
|
|
}
|
|
}
|
|
|
|
|