许鹏程
2024-05-28 e6720f333268682d11aedb3b3308fa2f2c3a40df
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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();
    }
}