@pisell/pisellos 2.2.141 → 2.2.143
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/model/strategy/adapter/walletPass/evaluator.js +33 -8
- package/dist/model/strategy/adapter/walletPass/locales.js +12 -3
- package/dist/model/strategy/engine.d.ts +18 -5
- package/dist/model/strategy/engine.js +145 -45
- package/dist/model/strategy/type.d.ts +17 -0
- package/dist/model/strategy/type.js +4 -0
- package/dist/server/index.js +2 -1
- package/dist/server/modules/index.d.ts +1 -1
- package/dist/server/modules/order/types.d.ts +21 -1
- package/dist/server/modules/order/types.js +4 -0
- package/dist/server/modules/order/utils/filterOrders.js +209 -4
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/lib/model/strategy/adapter/walletPass/evaluator.js +22 -3
- package/lib/model/strategy/adapter/walletPass/locales.js +12 -3
- package/lib/model/strategy/engine.d.ts +18 -5
- package/lib/model/strategy/engine.js +85 -21
- package/lib/model/strategy/type.d.ts +17 -0
- package/lib/server/index.js +2 -1
- package/lib/server/modules/index.d.ts +1 -1
- package/lib/server/modules/order/types.d.ts +21 -1
- package/lib/server/modules/order/utils/filterOrders.js +207 -4
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/package.json +1 -1
|
@@ -165,6 +165,23 @@ export interface MatchedInfo {
|
|
|
165
165
|
actionIds: string[];
|
|
166
166
|
/** 详细匹配信息 */
|
|
167
167
|
details: Record<string, any>;
|
|
168
|
+
/** 顶层第一个失败的 field(仅在 conditions=false 时存在,便于直接消费) */
|
|
169
|
+
failedField?: string;
|
|
170
|
+
/** 失败的原子规则列表(仅在 conditions=false 时存在;or 全失败时可能有多条) */
|
|
171
|
+
failedRules?: FailedRuleInfo[];
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* 失败规则信息
|
|
175
|
+
*/
|
|
176
|
+
export interface FailedRuleInfo {
|
|
177
|
+
/** 字段名 */
|
|
178
|
+
field?: string;
|
|
179
|
+
/** 运算符 */
|
|
180
|
+
operator?: string;
|
|
181
|
+
/** 配置的比较值(阈值) */
|
|
182
|
+
value?: any;
|
|
183
|
+
/** 实际取到的字段值 */
|
|
184
|
+
actualValue?: any;
|
|
168
185
|
}
|
|
169
186
|
/**
|
|
170
187
|
* 执行轨迹
|
package/lib/server/index.js
CHANGED
|
@@ -14,7 +14,7 @@ export { QuotationHooks } from './quotation/types';
|
|
|
14
14
|
export { ScheduleModuleEx } from './schedule';
|
|
15
15
|
export type { ScheduleState, ScheduleItem } from './schedule/types';
|
|
16
16
|
export { OrderModule } from './order';
|
|
17
|
-
export type { OrderState, OrderData, OrderId, OrderSummary, OrderBookingItem, OrderProductLineItem, OrderPaymentItem, OrderSurchargeItem, OrderProductDiscountItem, OrderWithoutBookings, BookingData, OrderFilters, BookingFilters, OrderFilterResult, BookingFilterResult, OrderModulePagedResult, } from './order/types';
|
|
17
|
+
export type { OrderState, OrderData, OrderId, OrderSummary, OrderBookingItem, OrderProductLineItem, OrderPaymentItem, OrderSurchargeItem, OrderProductDiscountItem, OrderWithoutBookings, BookingData, OrderFilters, BookingFilters, OrderFilterResult, OrderFilterRejectDetail, OrderFilterRejectedEntry, BookingFilterResult, OrderModulePagedResult, } from './order/types';
|
|
18
18
|
export { OrderHooks } from './order/types';
|
|
19
19
|
export { FloorPlanModule } from './floor-plan';
|
|
20
20
|
export type { FloorPlanItem, FloorPlanState, FloorPlanSyncMessage } from './floor-plan/types';
|
|
@@ -479,7 +479,27 @@ export interface OrderModulePagedResult<T> {
|
|
|
479
479
|
size: number;
|
|
480
480
|
skip: number;
|
|
481
481
|
}
|
|
482
|
-
|
|
482
|
+
/** 单条筛选未命中说明(用于排查过滤原因) */
|
|
483
|
+
export interface OrderFilterRejectDetail {
|
|
484
|
+
/** 对应 OrderFilters 维度的标识 */
|
|
485
|
+
field: string;
|
|
486
|
+
/** 订单上该维度的当前值 */
|
|
487
|
+
actual: unknown;
|
|
488
|
+
/** 本次筛选的期望值/区间(便于对照) */
|
|
489
|
+
expected?: unknown;
|
|
490
|
+
}
|
|
491
|
+
/** 未通过筛选的订单及首个未满足条件(与过滤短路顺序一致) */
|
|
492
|
+
export interface OrderFilterRejectedEntry {
|
|
493
|
+
order_id?: OrderId | null;
|
|
494
|
+
/** 系统订单号等,便于与业务「订单号」对照 */
|
|
495
|
+
order_number?: string;
|
|
496
|
+
/** 按筛选顺序命中的第一条未满足条件 */
|
|
497
|
+
reason: OrderFilterRejectDetail;
|
|
498
|
+
}
|
|
499
|
+
export type OrderFilterResult = OrderModulePagedResult<OrderData> & {
|
|
500
|
+
/** 被过滤掉的订单及首个命中原因(与筛选短路顺序一致;不含仅分页未展示的已通过订单) */
|
|
501
|
+
rejected: OrderFilterRejectedEntry[];
|
|
502
|
+
};
|
|
483
503
|
export type BookingFilterResult = OrderModulePagedResult<BookingData>;
|
|
484
504
|
/**
|
|
485
505
|
* SSE 同步配置
|
|
@@ -29,107 +29,289 @@ function filterOrders(orders, filters) {
|
|
|
29
29
|
list: [],
|
|
30
30
|
count: 0,
|
|
31
31
|
size: 0,
|
|
32
|
-
skip: 0
|
|
32
|
+
skip: 0,
|
|
33
|
+
rejected: []
|
|
33
34
|
};
|
|
34
35
|
}
|
|
35
36
|
const size = safeFilters.num || 20;
|
|
36
37
|
const page = safeFilters.skip || 1;
|
|
38
|
+
const rejected = [];
|
|
37
39
|
let filteredList = orders.filter((order) => {
|
|
38
40
|
if (safeFilters.keyword) {
|
|
39
41
|
if (!JSON.stringify(order).toLowerCase().includes(safeFilters.keyword.toLowerCase())) {
|
|
42
|
+
rejected.push({
|
|
43
|
+
order_id: order.order_id,
|
|
44
|
+
order_number: order.order_number,
|
|
45
|
+
reason: {
|
|
46
|
+
field: "keyword",
|
|
47
|
+
actual: "",
|
|
48
|
+
expected: safeFilters.keyword
|
|
49
|
+
}
|
|
50
|
+
});
|
|
40
51
|
return false;
|
|
41
52
|
}
|
|
42
53
|
}
|
|
43
54
|
if (safeFilters.status && safeFilters.status.length > 0) {
|
|
44
55
|
if (!order.status || !safeFilters.status.includes(order.status)) {
|
|
56
|
+
rejected.push({
|
|
57
|
+
order_id: order.order_id,
|
|
58
|
+
order_number: order.order_number,
|
|
59
|
+
reason: {
|
|
60
|
+
field: "status",
|
|
61
|
+
actual: order.status,
|
|
62
|
+
expected: safeFilters.status
|
|
63
|
+
}
|
|
64
|
+
});
|
|
45
65
|
return false;
|
|
46
66
|
}
|
|
47
67
|
}
|
|
48
68
|
if (safeFilters.payment_status && safeFilters.payment_status.length > 0) {
|
|
49
69
|
if (!order.payment_status || !safeFilters.payment_status.includes(order.payment_status)) {
|
|
70
|
+
rejected.push({
|
|
71
|
+
order_id: order.order_id,
|
|
72
|
+
order_number: order.order_number,
|
|
73
|
+
reason: {
|
|
74
|
+
field: "payment_status",
|
|
75
|
+
actual: order.payment_status,
|
|
76
|
+
expected: safeFilters.payment_status
|
|
77
|
+
}
|
|
78
|
+
});
|
|
50
79
|
return false;
|
|
51
80
|
}
|
|
52
81
|
}
|
|
53
82
|
if (safeFilters.shipping_status && safeFilters.shipping_status.length > 0) {
|
|
54
83
|
if (!order.shipping_status || !safeFilters.shipping_status.includes(order.shipping_status)) {
|
|
84
|
+
rejected.push({
|
|
85
|
+
order_id: order.order_id,
|
|
86
|
+
order_number: order.order_number,
|
|
87
|
+
reason: {
|
|
88
|
+
field: "shipping_status",
|
|
89
|
+
actual: order.shipping_status,
|
|
90
|
+
expected: safeFilters.shipping_status
|
|
91
|
+
}
|
|
92
|
+
});
|
|
55
93
|
return false;
|
|
56
94
|
}
|
|
57
95
|
}
|
|
58
96
|
if (safeFilters.customer_id !== void 0 && safeFilters.customer_id !== null) {
|
|
59
97
|
if (String(order.customer_id) !== String(safeFilters.customer_id)) {
|
|
98
|
+
rejected.push({
|
|
99
|
+
order_id: order.order_id,
|
|
100
|
+
order_number: order.order_number,
|
|
101
|
+
reason: {
|
|
102
|
+
field: "customer_id",
|
|
103
|
+
actual: order.customer_id,
|
|
104
|
+
expected: safeFilters.customer_id
|
|
105
|
+
}
|
|
106
|
+
});
|
|
60
107
|
return false;
|
|
61
108
|
}
|
|
62
109
|
}
|
|
63
110
|
if (safeFilters.order_sales_channel && safeFilters.order_sales_channel.length > 0) {
|
|
64
111
|
if (!order.order_sales_channel || !safeFilters.order_sales_channel.includes(order.order_sales_channel)) {
|
|
112
|
+
rejected.push({
|
|
113
|
+
order_id: order.order_id,
|
|
114
|
+
order_number: order.order_number,
|
|
115
|
+
reason: {
|
|
116
|
+
field: "order_sales_channel",
|
|
117
|
+
actual: order.order_sales_channel,
|
|
118
|
+
expected: safeFilters.order_sales_channel
|
|
119
|
+
}
|
|
120
|
+
});
|
|
65
121
|
return false;
|
|
66
122
|
}
|
|
67
123
|
}
|
|
68
124
|
if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
|
|
69
125
|
if (!order.payment_methods || !Array.isArray(order.payment_methods) || order.payment_methods.length === 0) {
|
|
126
|
+
rejected.push({
|
|
127
|
+
order_id: order.order_id,
|
|
128
|
+
order_number: order.order_number,
|
|
129
|
+
reason: {
|
|
130
|
+
field: "payment_methods",
|
|
131
|
+
actual: order.payment_methods,
|
|
132
|
+
expected: safeFilters.payment_methods
|
|
133
|
+
}
|
|
134
|
+
});
|
|
70
135
|
return false;
|
|
71
136
|
}
|
|
72
137
|
const hasMatch = order.payment_methods.some((pm) => safeFilters.payment_methods.includes(pm));
|
|
73
138
|
if (!hasMatch) {
|
|
139
|
+
rejected.push({
|
|
140
|
+
order_id: order.order_id,
|
|
141
|
+
order_number: order.order_number,
|
|
142
|
+
reason: {
|
|
143
|
+
field: "payment_methods",
|
|
144
|
+
actual: order.payment_methods,
|
|
145
|
+
expected: safeFilters.payment_methods
|
|
146
|
+
}
|
|
147
|
+
});
|
|
74
148
|
return false;
|
|
75
149
|
}
|
|
76
150
|
}
|
|
77
151
|
if (safeFilters.min_total_amount !== void 0 || safeFilters.max_total_amount !== void 0) {
|
|
78
152
|
const orderAmount = parseFloat(String(order.total_amount || 0));
|
|
79
153
|
if (safeFilters.min_total_amount !== void 0 && orderAmount < safeFilters.min_total_amount) {
|
|
154
|
+
rejected.push({
|
|
155
|
+
order_id: order.order_id,
|
|
156
|
+
order_number: order.order_number,
|
|
157
|
+
reason: {
|
|
158
|
+
field: "min_total_amount",
|
|
159
|
+
actual: order.total_amount,
|
|
160
|
+
expected: safeFilters.min_total_amount
|
|
161
|
+
}
|
|
162
|
+
});
|
|
80
163
|
return false;
|
|
81
164
|
}
|
|
82
165
|
if (safeFilters.max_total_amount !== void 0 && orderAmount > safeFilters.max_total_amount) {
|
|
166
|
+
rejected.push({
|
|
167
|
+
order_id: order.order_id,
|
|
168
|
+
order_number: order.order_number,
|
|
169
|
+
reason: {
|
|
170
|
+
field: "max_total_amount",
|
|
171
|
+
actual: order.total_amount,
|
|
172
|
+
expected: safeFilters.max_total_amount
|
|
173
|
+
}
|
|
174
|
+
});
|
|
83
175
|
return false;
|
|
84
176
|
}
|
|
85
177
|
}
|
|
86
178
|
if (safeFilters.tag_ids && safeFilters.tag_ids.length > 0) {
|
|
87
179
|
if (!order.tag_ids || !Array.isArray(order.tag_ids) || order.tag_ids.length === 0) {
|
|
180
|
+
rejected.push({
|
|
181
|
+
order_id: order.order_id,
|
|
182
|
+
order_number: order.order_number,
|
|
183
|
+
reason: {
|
|
184
|
+
field: "tag_ids",
|
|
185
|
+
actual: order.tag_ids,
|
|
186
|
+
expected: safeFilters.tag_ids
|
|
187
|
+
}
|
|
188
|
+
});
|
|
88
189
|
return false;
|
|
89
190
|
}
|
|
90
191
|
const filterTagSet = new Set(safeFilters.tag_ids.map(String));
|
|
91
192
|
const hasMatch = order.tag_ids.some((tag) => filterTagSet.has(String(tag)));
|
|
92
193
|
if (!hasMatch) {
|
|
194
|
+
rejected.push({
|
|
195
|
+
order_id: order.order_id,
|
|
196
|
+
order_number: order.order_number,
|
|
197
|
+
reason: {
|
|
198
|
+
field: "tag_ids",
|
|
199
|
+
actual: order.tag_ids,
|
|
200
|
+
expected: safeFilters.tag_ids
|
|
201
|
+
}
|
|
202
|
+
});
|
|
93
203
|
return false;
|
|
94
204
|
}
|
|
95
205
|
}
|
|
96
206
|
if (safeFilters.shipping_type && safeFilters.shipping_type.length > 0) {
|
|
97
207
|
if (!order.shipping_type || !safeFilters.shipping_type.includes(order.shipping_type)) {
|
|
208
|
+
rejected.push({
|
|
209
|
+
order_id: order.order_id,
|
|
210
|
+
order_number: order.order_number,
|
|
211
|
+
reason: {
|
|
212
|
+
field: "shipping_type",
|
|
213
|
+
actual: order.shipping_type,
|
|
214
|
+
expected: safeFilters.shipping_type
|
|
215
|
+
}
|
|
216
|
+
});
|
|
98
217
|
return false;
|
|
99
218
|
}
|
|
100
219
|
}
|
|
101
220
|
if (safeFilters.delivery_zone_name !== void 0 && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== "") {
|
|
102
221
|
if (!order.delivery_zone_name || !order.delivery_zone_name.toLowerCase().includes(safeFilters.delivery_zone_name.toLowerCase())) {
|
|
222
|
+
rejected.push({
|
|
223
|
+
order_id: order.order_id,
|
|
224
|
+
order_number: order.order_number,
|
|
225
|
+
reason: {
|
|
226
|
+
field: "delivery_zone_name",
|
|
227
|
+
actual: order.delivery_zone_name,
|
|
228
|
+
expected: safeFilters.delivery_zone_name
|
|
229
|
+
}
|
|
230
|
+
});
|
|
103
231
|
return false;
|
|
104
232
|
}
|
|
105
233
|
}
|
|
106
234
|
if (safeFilters.location_id !== void 0 && safeFilters.location_id !== null) {
|
|
107
235
|
if (String(order.location_id) !== String(safeFilters.location_id)) {
|
|
236
|
+
rejected.push({
|
|
237
|
+
order_id: order.order_id,
|
|
238
|
+
order_number: order.order_number,
|
|
239
|
+
reason: {
|
|
240
|
+
field: "location_id",
|
|
241
|
+
actual: order.location_id,
|
|
242
|
+
expected: safeFilters.location_id
|
|
243
|
+
}
|
|
244
|
+
});
|
|
108
245
|
return false;
|
|
109
246
|
}
|
|
110
247
|
}
|
|
111
248
|
if (safeFilters.shipping_order_number !== void 0 && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== "") {
|
|
112
249
|
if (!order.shipping_order_number || !order.shipping_order_number.toLowerCase().includes(safeFilters.shipping_order_number.toLowerCase())) {
|
|
250
|
+
rejected.push({
|
|
251
|
+
order_id: order.order_id,
|
|
252
|
+
order_number: order.order_number,
|
|
253
|
+
reason: {
|
|
254
|
+
field: "shipping_order_number",
|
|
255
|
+
actual: order.shipping_order_number,
|
|
256
|
+
expected: safeFilters.shipping_order_number
|
|
257
|
+
}
|
|
258
|
+
});
|
|
113
259
|
return false;
|
|
114
260
|
}
|
|
115
261
|
}
|
|
116
262
|
if (safeFilters.logistics_company_id && safeFilters.logistics_company_id.length > 0) {
|
|
117
263
|
if (!order.logistics_company_id) {
|
|
264
|
+
rejected.push({
|
|
265
|
+
order_id: order.order_id,
|
|
266
|
+
order_number: order.order_number,
|
|
267
|
+
reason: {
|
|
268
|
+
field: "logistics_company_id",
|
|
269
|
+
actual: order.logistics_company_id,
|
|
270
|
+
expected: safeFilters.logistics_company_id
|
|
271
|
+
}
|
|
272
|
+
});
|
|
118
273
|
return false;
|
|
119
274
|
}
|
|
120
275
|
const orderLogisticsId = String(order.logistics_company_id);
|
|
121
276
|
const hasMatch = safeFilters.logistics_company_id.some((id) => String(id) === orderLogisticsId);
|
|
122
277
|
if (!hasMatch) {
|
|
278
|
+
rejected.push({
|
|
279
|
+
order_id: order.order_id,
|
|
280
|
+
order_number: order.order_number,
|
|
281
|
+
reason: {
|
|
282
|
+
field: "logistics_company_id",
|
|
283
|
+
actual: order.logistics_company_id,
|
|
284
|
+
expected: safeFilters.logistics_company_id
|
|
285
|
+
}
|
|
286
|
+
});
|
|
123
287
|
return false;
|
|
124
288
|
}
|
|
125
289
|
}
|
|
126
290
|
if (safeFilters.zip !== void 0 && safeFilters.zip !== null && safeFilters.zip !== "") {
|
|
127
291
|
if (!order.zip || !order.zip.toLowerCase().includes(safeFilters.zip.toLowerCase())) {
|
|
292
|
+
rejected.push({
|
|
293
|
+
order_id: order.order_id,
|
|
294
|
+
order_number: order.order_number,
|
|
295
|
+
reason: {
|
|
296
|
+
field: "zip",
|
|
297
|
+
actual: order.zip,
|
|
298
|
+
expected: safeFilters.zip
|
|
299
|
+
}
|
|
300
|
+
});
|
|
128
301
|
return false;
|
|
129
302
|
}
|
|
130
303
|
}
|
|
131
304
|
if (safeFilters.business_code) {
|
|
132
305
|
if (!order.business_code || order.business_code !== safeFilters.business_code) {
|
|
306
|
+
rejected.push({
|
|
307
|
+
order_id: order.order_id,
|
|
308
|
+
order_number: order.order_number,
|
|
309
|
+
reason: {
|
|
310
|
+
field: "business_code",
|
|
311
|
+
actual: order.business_code,
|
|
312
|
+
expected: safeFilters.business_code
|
|
313
|
+
}
|
|
314
|
+
});
|
|
133
315
|
return false;
|
|
134
316
|
}
|
|
135
317
|
}
|
|
@@ -137,13 +319,33 @@ function filterOrders(orders, filters) {
|
|
|
137
319
|
const orderTime = order.created_at ? typeof order.created_at === "number" ? order.created_at : new Date(String(order.created_at)).getTime() : 0;
|
|
138
320
|
if (safeFilters.start_time) {
|
|
139
321
|
const startTs = new Date(safeFilters.start_time).getTime();
|
|
140
|
-
if (orderTime < startTs)
|
|
322
|
+
if (orderTime < startTs) {
|
|
323
|
+
rejected.push({
|
|
324
|
+
order_id: order.order_id,
|
|
325
|
+
order_number: order.order_number,
|
|
326
|
+
reason: {
|
|
327
|
+
field: "start_time",
|
|
328
|
+
actual: order.created_at,
|
|
329
|
+
expected: safeFilters.start_time
|
|
330
|
+
}
|
|
331
|
+
});
|
|
141
332
|
return false;
|
|
333
|
+
}
|
|
142
334
|
}
|
|
143
335
|
if (safeFilters.end_time) {
|
|
144
336
|
const endTs = new Date(safeFilters.end_time).getTime() + 864e5 - 1;
|
|
145
|
-
if (orderTime > endTs)
|
|
337
|
+
if (orderTime > endTs) {
|
|
338
|
+
rejected.push({
|
|
339
|
+
order_id: order.order_id,
|
|
340
|
+
order_number: order.order_number,
|
|
341
|
+
reason: {
|
|
342
|
+
field: "end_time",
|
|
343
|
+
actual: order.created_at,
|
|
344
|
+
expected: safeFilters.end_time
|
|
345
|
+
}
|
|
346
|
+
});
|
|
146
347
|
return false;
|
|
348
|
+
}
|
|
147
349
|
}
|
|
148
350
|
}
|
|
149
351
|
return true;
|
|
@@ -193,7 +395,8 @@ function filterOrders(orders, filters) {
|
|
|
193
395
|
list: paginatedList,
|
|
194
396
|
count: totalCount,
|
|
195
397
|
size,
|
|
196
|
-
skip: page
|
|
398
|
+
skip: page,
|
|
399
|
+
rejected
|
|
197
400
|
};
|
|
198
401
|
}
|
|
199
402
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -136,7 +136,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
|
|
|
136
136
|
* 获取当前的客户搜索条件
|
|
137
137
|
* @returns 当前搜索条件
|
|
138
138
|
*/
|
|
139
|
-
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "
|
|
139
|
+
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "skip" | "num">;
|
|
140
140
|
/**
|
|
141
141
|
* 获取客户列表状态(包含滚动加载相关状态)
|
|
142
142
|
* @returns 客户状态
|