P15GEN2\59518
2024-05-29 d4210c7c4b04abde20037ea8aa0f54ef8a2649aa
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package foundation.clean;
 
import java.util.List;
 
import foundation.action.ActionProvider;
import foundation.dao.DataPackage;
import foundation.dao.DataSource;
import foundation.dao.Domain;
import foundation.data.entity.Entity;
import foundation.data.entity.EntitySet;
import foundation.data.object.DataObject;
import foundation.json.JArrayReader;
import foundation.json.JSONReader;
import foundation.json.JType;
import foundation.util.Util;
 
public class CleanHandler extends ActionProvider {
 
    @Override
    protected void publishMethod() {
        //1. 过滤数组(来自请求)
        addMethod("cleanValueArray");
        
        //2. 过滤对象数组(来自请求)
        addMethod("cleanObjectArray");
        
        //3. 过滤对象数组(来自数据库)
        addMethod("cleanEntitySet");
    }
    
    public void cleanValueArray() throws Exception {
        //1. 获取清洗规则
        String cleanName = dataReader.getString("clean_name");
        CleanBucket cleanBucket = CleanBucket.getInstance();
        CleanEngine cleanEngine = cleanBucket.get(cleanName);
        
        //2. 获取清洗数据
        List<String> list = dataReader.getStringList("data");
        CleanResult cleanResult = new CleanResult();
        
        //3. 数据清洗
        for (String value : list) {
            String result = cleanEngine.modify(value);
            if(result != null) {
                cleanResult.addOneOrginal(value);
                cleanResult.addOneStandard(result);
            }
        }
        dataWriter.addValue("data", cleanResult);
    }
 
    public void cleanObjectArray() throws Exception {
        
        //1. 获取清洗规则
        String cleanName = dataReader.getString("clean_name");
        CleanBucket cleanBucket = CleanBucket.getInstance();
        CleanEngine cleanEngine = cleanBucket.get(cleanName);
        String field = dataReader.getString("field");
        
        //2. 获取清洗数据
        JArrayReader dataList = dataReader.getReader("data", JType.Array);
        CleanResult cleanResult = new CleanResult();
        cleanResult.setType(JType.Object);
        //3. 数据清洗
        for (JSONReader data : dataList) {
            JSONReader json = cleanEngine.modify(data, field);
            if(data != null) {
                cleanResult.addOneStandard(json);
                cleanResult.addOneOrginal(data);
            }
        }
        
        dataWriter.addValue("data", cleanResult);
    }
    
    public void cleanEntitySet() throws Exception {
        Domain domain = dataReader.getDomain();
        DataPackage dataPackage = dataReader.getDataPackage();
        String field = dataReader.getString("field");
        String id = dataReader.getString("id");        
        String cleanName = dataReader.getString("clean_name");
        boolean isLoadtoDB = dataReader.getBoolean("is_load_to_db", false);
        String cleanDataName = dataReader.getString("clean_data_name");
        
        //1. 获取清洗规则
        CleanBucket cleanBucket = CleanBucket.getInstance();
        CleanEngine cleanEngine = cleanBucket.get(cleanName);
        CleanResult cleanResult = new CleanResult();
        
        //2. 获取清洗数据
        if(Util.isEmpty(id)) {
            dataPackage.loadBatchDataFromDB();
            EntitySet entitySet = dataPackage.getItemEntitySet(cleanDataName, DataSource.DB);
            DataObject dataObject = dataPackage.getDataObject(cleanDataName);
            
            //3. 数据清洗
            if (Util.isEmpty(cleanDataName)) {
                cleanResult.addOneOrginal(entitySet);
                cleanResult.addOneStandard(entitySet);
            }
 
            for (Entity entity: entitySet) {
                Entity resultEntity = cleanEngine.modify(entity, field);
                if (resultEntity != null) {
                    cleanResult.addOneOrginal(entity);
                    cleanResult.addOneStandard(resultEntity);
                }
                else {
                    String detailId = entity.getId();
                    entitySet.delete(detailId);
                    if (isLoadtoDB) {
                        dataObject.deleteEntity(detailId);
                    }
                }
            }
        }else {
            dataPackage.loadOneDataFromDB();
            Entity entity = dataPackage.getItemEntity(cleanDataName, DataSource.DB);
            DataObject dataObject = dataPackage.getDataObject(cleanDataName);
            
            if (Util.isEmpty(cleanDataName)) {
                cleanResult.addOneOrginal(entity);
                cleanResult.addOneStandard(entity);
            }
 
            Entity resultEntity = cleanEngine.modify(entity, field);
            if (resultEntity != null) {
                cleanResult.addOneOrginal(entity);
                cleanResult.addOneStandard(resultEntity);
            }
            else {
                String detailId = entity.getId();
                entity.setDeleted();
                if (isLoadtoDB) {
                    dataObject.deleteEntity(detailId);
                }
            }
        }
        
        dataWriter.addValue("data", cleanResult);
        
    }
}