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
package policy.rule;
 
import java.util.ArrayList;
import java.util.List;
 
import foundation.dao.DataPackage;
import foundation.dao.DataSource;
import foundation.dao.DataWriter;
import foundation.data.entity.Entity;
import foundation.json.IJSONProvider;
import foundation.json.IJSONWriter;
import order.OrderSetting;
import order.OrderSettingBucket;
import policy.OrderEvent;
 
public class RuleRuntimes implements IJSONProvider{
 
    private List<RuleAction> items;
    
    public RuleRuntimes() {
        items = new ArrayList<RuleAction>();
    }
    
    public void calculateData(DataPackage dataPackage, DataWriter dataWriter) throws Exception {
        //1. 进行计算
        dataPackage.loadOneDataFromDB();
        
        OrderCalculator calculator = new OrderCalculator(dataWriter);
        boolean success = calculator.setDataPackage(dataPackage, DataSource.DB);
        
        if (!success) {
            return;
        }
        
        calculator.exec();
    }
 
    public boolean check(DataPackage dataPackage, OrderEvent event, DataWriter dataWriter) throws Exception {
        //1. 进行计算
        dataPackage.loadOneDataFromDB();
        
        OrderCalculator calculator = new OrderCalculator(dataWriter);
        boolean success = calculator.setDataPackage(dataPackage, DataSource.DB);
        
        if (!success) {
            return false;
        }        
        
        calculator.exec();
        success = calculator.saveToDB(dataWriter);
                
        if (!success) {
            return false;
        }
 
        //2. 检查订单是否开启校验
        OrderSettingBucket orderSettingBucket = OrderSettingBucket.getInstance();
        String orderType = getOrderType(dataPackage);
        OrderSetting orderSetting = orderSettingBucket.get(orderType);
        
        if (orderSetting == null || !orderSetting.isCheckRule()) {
            return true;
        }
        
        //3. 进行检查
        for (RuleAction action: items) {
            boolean checkSuccess = action.check(calculator, event, dataWriter);
            
            if (!checkSuccess) {
                success = false;
            }
            
        }
        
        return success;
    }
 
    public void createCheckBoard(DataPackage dataPackage, CheckBoard resultList, DataWriter dataWriter) throws Exception {
        //1. 进行计算
        dataPackage.loadOneDataFromDB();
        
        OrderCalculator calculator = new OrderCalculator(dataWriter);
        boolean success = calculator.setDataPackage(dataPackage, DataSource.DB, DataSource.Request);
        
        if (!success) {
            return;
        }        
        
        calculator.exec();
        success = calculator.saveToDB(dataWriter);
        
        //2. 检查订单是否开启校验
        OrderSettingBucket orderSettingBucket = OrderSettingBucket.getInstance();
        String orderType = getOrderType(dataPackage);
        OrderSetting orderSetting = orderSettingBucket.get(orderType);
        
        if (orderSetting == null || !orderSetting.isCheckRule()) {
            return ;
        }
        
        //3. 创建看板
        for (RuleAction action: items) {
            CheckResult result = new CheckResult(action.getMeta(), resultList);
            resultList.append(result);
            
            action.createBoard(calculator, result);
        }
    }
 
    public void loadOneChecker(RuleAction checker) {
        items.add(checker);
    }
 
    @Override
    public void writeJSON(IJSONWriter writer) {
        writer.beginArray();
        
        for (RuleAction action : items) {
            action.writeJSON(writer);
        }
        
        writer.endArray();
        
    }
 
    private String getOrderType(DataPackage dataPackage) throws Exception {
        String orderType = null;
        Entity master = dataPackage.getMasterEntity(DataSource.DB, DataSource.Request);
        
        if (master != null) {
            orderType = master.getString("type_code");
        }
        
        return orderType;
    }
}