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 OnsiteQtyValidDateCheck extends RuleAction {
 
    public static String remark = "即时买赠优惠效期限制";
    
    public OnsiteQtyValidDateCheck() {
        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.isOnsiteQty()) {
                recordIds.add(Util.quotedStr(record.getId()));
            }
        }
        
        DataObject dataObject = DataObject.getInstance("agm_record_gift");
        
        try {
            Filter filter = new Filter();
            filter = new Filter("suspend_date", "<", Util.StringToDate(Util.newDateStr()));
            filter.add("id", "in", "(" + String.join(",", recordIds) + ")");
            EntitySet invalidRebates = dataObject.getTableEntitySet(filter);
            
            for (Entity entity: invalidRebates) {
                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 == null || 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.isOnsiteQty()) {
                recordIds.add(Util.quotedStr(record.getId()));
            }
        }
        
        DataObject dataObject = DataObject.getInstance("agm_record_gift");
        
        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("OnsiteQtyValidDateCheck", "即时买赠效期检查不通过:" + meta.getTitle());
                for (String remark: remarks) {
                    dataWriter.reportOneAlert("OnsiteQtyValidDateCheck", "     " + remark);
                }
                
                return true;
            }
            
            dataWriter.reportOneError("OnsiteQtyValidDateCheck", "即时买赠效期检查不通过:" + meta.getTitle());
            for (String remark: remarks) {
                dataWriter.reportOneError("OnsiteQtyValidDateCheck", "     " + remark);
            }
        }
        
        return success;
    }
}