package com.product.data.sync.util;
|
|
import cn.hutool.core.lang.UUID;
|
import com.product.common.lang.StringUtils;
|
import com.product.core.cache.DataPoolCacheImpl;
|
import com.product.core.connection.ConnectionManager;
|
import com.product.core.entity.DataTableEntity;
|
import com.product.core.entity.FieldMetaEntity;
|
import com.product.core.entity.FieldSetEntity;
|
import com.product.datasource.dao.Dao;
|
import com.product.datasource.dao.impl.MysqlDaoImpl;
|
import com.product.util.BaseUtil;
|
import org.springframework.stereotype.Service;
|
|
import java.sql.Connection;
|
import java.sql.PreparedStatement;
|
import java.util.ArrayList;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
@Service
|
public class BatchAddData {
|
|
|
public void add(DataTableEntity dt) throws Exception {
|
Dao dao = new MysqlDaoImpl(() -> ConnectionManager.getConnection());
|
if (DataTableEntity.isEmpty(dt)) {
|
return;
|
}
|
FieldMetaEntity meta = dt.getMeta();
|
String tableName = dt.getTableName().toString();
|
//在缓存表中获取该表的所有字段
|
// DataPoolCacheImpl.getInstance().getCacheData("")
|
FieldSetEntity tableMeta = BaseUtil.getSingleInfoByCache("所有表信息", new String[]{tableName});
|
String tableUuid = tableMeta.getString("uuid");
|
//表字段
|
DataTableEntity fieldTableMeta = DataPoolCacheImpl.getInstance().getCacheData("所有字段信息并按表分组", new String[]{tableUuid});
|
|
List<String> fields = new ArrayList<>();
|
for (int i = 0; i < fieldTableMeta.getRows(); i++) {
|
FieldSetEntity fieldMeta = fieldTableMeta.getFieldSetEntity(i);
|
String fieldType = fieldMeta.getString("field_type");
|
String fieldName = fieldMeta.getString("field_name");
|
if (!"pk".equalsIgnoreCase(fieldType)) {
|
fields.add(fieldName);
|
}
|
}
|
DataTableEntity addDt = new DataTableEntity();
|
List<DataTableEntity> addDtList = new ArrayList<>();
|
for (int i = 0; i < dt.getRows(); i++) {
|
if(FieldSetEntity.isEmpty(dt.getFieldSetEntity(i))){
|
continue;
|
}
|
if (i == 5000) {
|
addDtList.add(addDt);
|
addDt = new DataTableEntity();
|
}
|
FieldSetEntity ff = new FieldSetEntity(tableName);
|
for (String field : fields) {
|
ff.setValue(field, dt.getObject(i, field));
|
}
|
if (StringUtils.isEmpty(ff.getString("uuid"))) {
|
ff.setValue("uuid", UUID.randomUUID().toString());
|
dt.setFieldValue(i, "uuid", ff.getString("uuid"));
|
}
|
addDt.addFieldSetEntity(ff);
|
}
|
addDtList.add(addDt);
|
for (DataTableEntity dataTableEntity : addDtList) {
|
dao.addBatch(dataTableEntity);
|
}
|
dao.closeConnection();
|
}
|
}
|