package biz.clean;
|
|
import foundation.dao.DataPackage;
|
import foundation.dao.DataSource;
|
import foundation.dao.DataWriter;
|
import foundation.data.entity.Entity;
|
import foundation.data.entity.EntitySet;
|
import foundation.data.entity.Filter;
|
import foundation.data.object.DataObject;
|
import foundation.workflow.ActionProvider;
|
import foundation.workflow.Event;
|
import foundation.workflow.WorkStep;
|
|
public class CleanCenter extends ActionProvider{
|
|
@Override
|
protected void publishMethod() {
|
addMethod("clean");
|
}
|
|
public void clean(WorkStep step) throws Exception{
|
Event event = step.getEvent();
|
String cleanTargetId = step.getStepParam();
|
|
//1. 获取清洗规则
|
CleanTarget target = CleanBucket.getTarget(cleanTargetId);
|
DataSource dataSource = target.getDataSource();
|
String dataName = target.getDataName();
|
DataObject dataObject = DataObject.getInstance(dataName);
|
EntitySet entitySet = null;
|
String cleanDataId;
|
|
//2. 数据获取
|
if (dataSource == DataSource.DB) {
|
cleanDataId = event.getDataId();
|
Filter filter = target.createFilter(cleanDataId);
|
entitySet = dataObject.getTableEntitySet(filter);
|
}
|
else{
|
DataPackage dataPackage = step.getDataPackage();
|
entitySet = dataPackage.getItemEntitySet(dataName, dataSource);
|
}
|
|
//3. 数据清洗
|
CleanResult cleanResult = cleanEntitySet(entitySet, target.getField(), target.isStandard(), target.getCleanEngine());
|
DataWriter dataWriter = step.getDataWriter();
|
|
//4. 结果处理
|
boolean toDB = target.isToDB();
|
|
if (toDB) {
|
cleanResult.save(dataObject, target.isStandard());
|
}
|
|
if (dataWriter != null) {
|
dataWriter.addValue(cleanResult);
|
}
|
}
|
|
public static CleanResult cleanEntitySet(EntitySet entitySet, String field, Boolean isStandard, CleanEngine cleanEngine) throws Exception {
|
CleanResult cleanResult = new CleanResult();
|
|
if (entitySet == null) {
|
return cleanResult;
|
}
|
|
for (Entity original : entitySet) {
|
Entity standard = cleanEngine.modify(original, field);
|
|
if (standard == null) {
|
original.setDeleted();
|
}
|
|
cleanResult.addOne(original, standard);
|
}
|
|
return cleanResult;
|
}
|
}
|