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