package foundation.io.file.pull;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.meta.field.FieldsRuntime;
|
import foundation.data.object.DataObject;
|
import foundation.io.mapping.FieldMapping;
|
import foundation.io.mapping.FieldMappingRuntime;
|
import foundation.io.mapping.IOMappings;
|
import foundation.io.mapping.MappingsRuntime;
|
import foundation.io.object.Check;
|
import foundation.io.object.Titles;
|
import foundation.monitor.Progressor;
|
|
public class DataBucket {
|
|
private int batchCount;
|
private Titles titles;
|
private List<EntitySet> dataList;
|
private int dataCount;
|
private int pos;
|
private DataObject dataObject;
|
private EntitySet currentSet;
|
private List<Check> checkList;
|
private IOMappings fieldMappings;
|
private MappingsRuntime mappingSetRuntime;
|
|
public DataBucket(int batchCount) {
|
this.batchCount = batchCount;
|
|
pos = -1;
|
}
|
|
public Titles getTitles() {
|
return titles;
|
}
|
|
public void addMapping(String title, int columnIndex) throws Exception {
|
FieldMapping fieldMapping = fieldMappings.getItemByToField(title);
|
|
if (fieldMapping == null) {
|
throw new Exception("列 【" + title + "】匹配失败");
|
}
|
FieldMappingRuntime mappingRuntime = mappingSetRuntime.getRuntimeMappingByFrom(fieldMapping.getFromName());
|
|
int fromIndex = 0; FieldsRuntime fieldMetas = null;
|
|
fieldMetas = dataObject.getTableFieldMetas();
|
|
fromIndex = fieldMetas.getIndex(fieldMapping.getFromName());
|
if (mappingRuntime == null) {
|
mappingRuntime = new FieldMappingRuntime(fieldMapping, fromIndex, fieldMapping.getIndexNo());
|
}
|
|
mappingSetRuntime.addItem(mappingRuntime);
|
addCheck(fieldMapping.getCheckRule());
|
}
|
|
public long getDataSize() {
|
return dataCount;
|
}
|
|
public EntitySet getNext() {
|
pos++;
|
|
if (pos >= dataList.size()) {
|
return null;
|
}
|
|
return dataList.get(pos);
|
}
|
|
public Entity addOneLine(Progressor progressor, int rowNo) {
|
if (currentSet == null || currentSet.isFull()) {
|
try {
|
if (currentSet != null) {
|
saveToBD(progressor);
|
}
|
|
currentSet = dataObject.createTableEntitySet(batchCount);
|
}
|
catch (Exception e) {
|
e.printStackTrace();
|
}
|
}
|
|
dataCount = rowNo;
|
return currentSet.append();
|
}
|
|
public void saveToBD(Progressor progressor) throws Exception {
|
if (currentSet == null) {
|
return ;
|
}
|
|
progressor.appendLine("正在插入" + pos + "-" + dataCount + "条数据到临时明细表");
|
int cnt = dataObject.batchInsertEntitySet(currentSet);
|
|
pos = pos + cnt;
|
clearData();
|
}
|
|
private void clearData() {
|
currentSet.clear();
|
}
|
|
public void setDataObject(DataObject dataObject) {
|
this.dataObject = dataObject;
|
}
|
|
public Check getCheckRule(int columnIndex) {
|
return checkList.get(columnIndex);
|
}
|
|
public void addCheck(Check oneCheck) {
|
if (checkList == null) {
|
checkList = new ArrayList<Check>();
|
}
|
|
checkList.add(oneCheck);
|
}
|
|
public boolean checkTitleMapping() {
|
for (FieldMapping fieldMapping : fieldMappings.getList()) {
|
String toName = fieldMapping.getToName();
|
toName = toName.toLowerCase();
|
if (mappingSetRuntime.getRuntimeMappingByTo(toName) == null) {
|
return false;
|
}
|
}
|
return true;
|
}
|
|
public FieldMappingRuntime getRuntimeMapping(int columnIndex) {
|
return mappingSetRuntime.getRuntimeMapping(columnIndex);
|
}
|
|
}
|