152 lines
5.6 KiB
Java
152 lines
5.6 KiB
Java
package iet.ustb.sf.service.impl;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.toolkit.SqlRunner;
|
|
import iet.ustb.sf.domain.Columns;
|
|
import iet.ustb.sf.domain.TableColumn;
|
|
import iet.ustb.sf.domain.Tables;
|
|
import iet.ustb.sf.exception.ThrowUtils;
|
|
import iet.ustb.sf.mapper.ColumnsMapper;
|
|
import iet.ustb.sf.mapper.TablesMapper;
|
|
import iet.ustb.sf.service.TableColumnService;
|
|
import iet.ustb.sf.mapper.TableColumnMapper;
|
|
import iet.ustb.sf.util.CheckUtils;
|
|
import iet.ustb.sf.vo.ColumnVo;
|
|
import iet.ustb.sf.vo.TableVo;
|
|
import jakarta.annotation.Resource;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
import java.util.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
/**
|
|
* @author hyy
|
|
* @description 针对表【mbgk_table_column】的数据库操作Service实现
|
|
* @createDate 2025-08-05 12:33:36
|
|
*/
|
|
@Service
|
|
public class TableColumnServiceImpl extends ServiceImpl<TableColumnMapper, TableColumn>
|
|
implements TableColumnService {
|
|
|
|
@Resource
|
|
private TableColumnMapper tableColumnMapper;
|
|
|
|
@Resource
|
|
private TablesMapper tablesMapper;
|
|
|
|
@Resource
|
|
private ColumnsMapper columnsMapper;
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public String syncTableData(String tableName) {
|
|
CheckUtils.checkTableName(tableName);
|
|
List<TableColumn> list = tableColumnMapper.selectList(new QueryWrapper<TableColumn>().eq("table_name", tableName));
|
|
if (list == null) {
|
|
list = new ArrayList<>();
|
|
}
|
|
List<String> columnList = list.stream().map(TableColumn::getColumnName).toList();
|
|
|
|
List<Columns> oriList = columnsMapper.selectList(new QueryWrapper<Columns>().in("table_name", tableName));
|
|
if (oriList == null) {
|
|
oriList = new ArrayList<>();
|
|
}
|
|
List<String> oriColumns = oriList.stream().map(Columns::getColumnName).toList();
|
|
|
|
Tables tables = tablesMapper.selectOne(new QueryWrapper<Tables>().eq("table_name", tableName));
|
|
|
|
List<TableColumn> saveList = new ArrayList<>();
|
|
Date now = new Date();
|
|
int addCount = 0;
|
|
for (Columns columns : oriList) {
|
|
if (columnList.contains(columns.getColumnName())) {
|
|
continue;
|
|
}
|
|
TableColumn ori = TableColumn.builder()
|
|
.id(UUID.randomUUID().toString())
|
|
.tableName(tableName)
|
|
.tableNameCn(tables.getTableComment())
|
|
.columnName(columns.getColumnName())
|
|
.columnNameCn(columns.getColumnComment())
|
|
.colnumnType(columns.getDataType())
|
|
.schema(columns.getTableSchema())
|
|
.isDelete(0)
|
|
.isPrimary("UNI".equals(columns.getColumnKey()) ? 1 : 0)
|
|
.createTime(now)
|
|
.updateTime(now)
|
|
.sort(list.size())
|
|
.build();
|
|
saveList.add(ori);
|
|
list.add(ori);
|
|
addCount++;
|
|
}
|
|
int delCount = 0;
|
|
for (TableColumn tableColumn : list) {
|
|
if (!oriColumns.contains(tableColumn.getColumnName())) {
|
|
tableColumn.setIsDelete(1);
|
|
tableColumn.setUpdateTime(now);
|
|
saveList.add(tableColumn);
|
|
delCount++;
|
|
}
|
|
}
|
|
tableColumnMapper.insert(saveList);
|
|
return "添加" + addCount + "个字段,删除" + delCount + "个字段";
|
|
}
|
|
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class)
|
|
public String syncTableDataByDb(String dbName) {
|
|
List<Tables> tablesList = tablesMapper.selectList(new QueryWrapper<Tables>().eq("table_schema", dbName));
|
|
ThrowUtils.throwIf(tablesList.size() <= 0, new RuntimeException("数据库不存在!"));
|
|
StringBuilder result = new StringBuilder();
|
|
for (Tables tables : tablesList) {
|
|
String tableName = tables.getTableName();
|
|
result.append("\n" + "数据库表:").append(tableName);
|
|
result.append(syncTableData(tableName));
|
|
}
|
|
return result.toString();
|
|
}
|
|
|
|
@Override
|
|
public List<TableVo> getTablesInfo() {
|
|
return tableColumnMapper.getTablesInfo();
|
|
}
|
|
|
|
@Override
|
|
public List<ColumnVo> getColumnsByTableName(String tableName) {
|
|
CheckUtils.checkTableName(tableName);
|
|
return tableColumnMapper.getColumnsByTableName(tableName);
|
|
}
|
|
|
|
@Override
|
|
public Page<?> getDataByTableName(JSONObject params) {
|
|
String columns = params.getString("columns");
|
|
String tableName = params.getString("tableName");
|
|
int pageIndex = Optional.ofNullable(params.getInteger("pageIndex")).orElse(1);
|
|
int pageSize = Optional.ofNullable(params.getInteger("pageSize")).orElse(10);
|
|
if (StringUtils.isEmpty(columns)) {
|
|
return new Page<>(pageIndex, pageSize);
|
|
}
|
|
CheckUtils.checkColumns(columns, tableName);
|
|
|
|
String countSql = "SELECT COUNT(1) FROM " + tableName;
|
|
long total = SqlRunner.db().selectCount(countSql);
|
|
Page<Map<String, Object>> page = new Page<>(pageIndex, pageSize);
|
|
page.setTotal(total);
|
|
|
|
long offset = (long) (pageIndex - 1) * pageSize;
|
|
String sql = "SELECT " + columns + " FROM " + tableName + " LIMIT " + pageSize + " OFFSET " + offset;
|
|
|
|
return SqlRunner.db().selectPage(page, sql);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|