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();
}
}