P15GEN2\59518
2025-10-10 9f6890646993d16260d4201d613c092132856127
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
package biz.policy.rule.action;
 
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
 
import biz.policy.OrderEvent;
import biz.policy.rule.CheckLevel;
import biz.policy.rule.CheckResult;
import biz.policy.rule.OnsiteRecord;
import biz.policy.rule.OnsiteRecords;
import biz.policy.rule.OrderCalculator;
import biz.policy.rule.RuleAction;
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.util.Util;
 
public class OnsitePriceValidDateCheck extends RuleAction {
 
    public static String remark = "即时价格效期限制";
    
    public OnsitePriceValidDateCheck() {
        super();
    }
 
    @Override
    public void createBoard(OrderCalculator calculator, CheckResult result) {
        OnsiteRecords records = calculator.getOnsiteRecords();
        
        if (records == null || records.size() == 0 ) {
            return ;
        }
        
        Set<String> recordIds = new HashSet<String>();
        recordIds.add(Util.quotedStr(""));
        int cnt = 0;
        
        for (OnsiteRecord record: records) {
            if (record.isOnsitePrice()) {
                recordIds.add(Util.quotedStr(record.getId()));
            }
        }
        
        DataObject dataObject = DataObject.getInstance("agm_record_price");
        
        try {
            Filter filter = new Filter();
            filter = new Filter("suspend_date", "<", Util.StringToDate(Util.newDateStr()));
            filter.add("id", "in", "(" + String.join(",", recordIds) + ")");
            EntitySet invalidRecords = dataObject.getTableEntitySet(filter);
            
            for (Entity entity: invalidRecords) {
                String expireDate = Util.DataTimeToString(entity.getDate("suspend_date"), Util.NORMALFORMAT);
                result.writeOneRemark("即时价格编码:【" + entity.getString("record_no") + "】到期日期:" + expireDate);
                cnt++;
            }
                
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //5. 计算结果
        boolean success = cnt < 1;
        
        result.setSuccess(success);
        
        if (success) {
            result.clearRemarks();
        }
    }
 
    @Override
    public boolean check(OrderCalculator calculator, OrderEvent event, DataWriter dataWriter) {
        OnsiteRecords records = calculator.getOnsiteRecords();
        
        if (records.size() == 0 ) {
            return true;
        }
        
        List<String> remarks = new ArrayList<String>();
        Set<String> recordIds = new HashSet<String>();
        recordIds.add(Util.quotedStr(""));
        
        for (OnsiteRecord record: records) {
            if (record.isOnsitePrice()) {
                recordIds.add(Util.quotedStr(record.getId()));
            }
        }
        
        DataObject dataObject = DataObject.getInstance("agm_record_price");
        
        try {
            Filter filter = new Filter();
            filter = new Filter("suspend_date", "<", Util.StringToDate(Util.newDateStr()));
            filter.add("id", "in", "(" + String.join(",", recordIds) + ")");
            EntitySet invalidRecords = dataObject.getTableEntitySet(filter);
            
            for (Entity entity: invalidRecords) {
                String expireDate = Util.DataTimeToString(entity.getDate("suspend_date"), Util.NORMALFORMAT);
                remarks.add("即时价格编码:【" + entity.getString("record_no") + "】到期日期:" + expireDate);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        //计算结果
        boolean success = remarks.size() < 1;
        
        if (!success) {
            if(CheckLevel.Info.equals(meta.getLevel())) {
                dataWriter.reportOneAlert("OnsitePriceValidDateCheck", "即时价格效期检查不通过:" + meta.getTitle());
                for (String remark: remarks) {
                    dataWriter.reportOneAlert("OnsitePriceValidDateCheck", "     " + remark);
                }
                
                return true;
            }
            
            dataWriter.reportOneError("OnsitePriceValidDateCheck", "即时价格效期检查不通过:" + meta.getTitle());
            for (String remark: remarks) {
                dataWriter.reportOneError("OnsitePriceValidDateCheck", "     " + remark);
            }
        }
        
        return success;
    }
}