@pisell/pisellos 2.3.74 → 2.3.75
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/core/index.js +6 -10
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/strategy-example.js +5 -19
- package/dist/modules/Cart/index.js +0 -3
- package/dist/modules/Cart/utils/cartProduct.js +0 -1
- package/dist/modules/Date/index.js +1 -5
- package/dist/modules/Discount/index.js +2 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.js +36 -64
- package/dist/modules/Payment/index.js +97 -162
- package/dist/modules/Rules/index.js +1 -4
- package/dist/modules/Schedule/index.js +0 -1
- package/dist/modules/Schedule/utils.js +0 -1
- package/dist/modules/Step/index.js +0 -1
- package/dist/plugins/request.js +1 -4
- package/dist/plugins/window.js +2 -6
- package/dist/server/index.js +97 -129
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/order/index.js +2 -4
- package/dist/server/modules/products/index.js +24 -42
- package/dist/server/modules/quotation/index.js +29 -38
- package/dist/server/modules/resource/index.js +3 -4
- package/dist/server/modules/schedule/index.js +27 -35
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BaseSales/index.js +38 -41
- package/dist/solution/BookingByStep/index.js +7 -59
- package/dist/solution/BookingByStep/utils/capacity.js +1 -11
- package/dist/solution/BookingByStep/utils/resources.js +1 -3
- package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
- package/dist/solution/BookingTicket/index.js +0 -2
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
- package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
- package/dist/solution/BuyTickets/index.js +9 -12
- package/dist/solution/Checkout/index.js +177 -252
- package/dist/solution/Checkout/utils/index.js +4 -16
- package/dist/solution/RegisterAndLogin/index.js +30 -76
- package/dist/solution/ScanOrder/index.js +50 -60
- package/dist/solution/ShopDiscount/index.js +2 -7
- package/dist/solution/VenueBooking/index.js +45 -55
- package/dist/utils/task.js +15 -18
- package/dist/utils/watch.js +0 -1
- package/lib/apis/picoding.js +2 -0
- package/lib/core/index.js +134 -134
- package/lib/effects/index.js +46 -57
- package/lib/index.js +82 -49
- package/lib/model/index.js +14 -21
- package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
- package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
- package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
- package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
- package/lib/model/strategy/adapter/index.js +100 -64
- package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
- package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
- package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
- package/lib/model/strategy/adapter/itemRule/index.js +83 -57
- package/lib/model/strategy/adapter/itemRule/type.js +97 -36
- package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
- package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
- package/lib/model/strategy/adapter/promotion/examples.js +222 -234
- package/lib/model/strategy/adapter/promotion/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/type.js +243 -36
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
- package/lib/model/strategy/adapter/walletPass/example.js +217 -190
- package/lib/model/strategy/adapter/walletPass/index.js +75 -51
- package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
- package/lib/model/strategy/adapter/walletPass/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
- package/lib/model/strategy/engine.js +270 -168
- package/lib/model/strategy/index.js +49 -34
- package/lib/model/strategy/strategy-example.js +243 -239
- package/lib/model/strategy/type.js +100 -40
- package/lib/modules/Account/index.js +39 -53
- package/lib/modules/Account/types.js +20 -33
- package/lib/modules/AccountList/index.js +116 -154
- package/lib/modules/AccountList/types.js +30 -31
- package/lib/modules/AccountList/utils.js +18 -30
- package/lib/modules/BaseModule.js +23 -42
- package/lib/modules/BookingContext/index.js +158 -136
- package/lib/modules/BookingContext/types.js +46 -32
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
- package/lib/modules/BookingContext/utils/flexible.js +38 -55
- package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
- package/lib/modules/BookingContext/utils/index.js +124 -41
- package/lib/modules/BookingContext/utils/noResource.js +58 -70
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
- package/lib/modules/BookingContext/utils/productExtend.js +202 -155
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
- package/lib/modules/BookingContext/utils/resources.js +209 -167
- package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
- package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
- package/lib/modules/Cart/index.js +170 -124
- package/lib/modules/Cart/types.js +46 -51
- package/lib/modules/Cart/utils/cartAccount.js +40 -39
- package/lib/modules/Cart/utils/cartDate.js +56 -61
- package/lib/modules/Cart/utils/cartDiscount.js +28 -33
- package/lib/modules/Cart/utils/cartNote.js +27 -32
- package/lib/modules/Cart/utils/cartProduct.js +321 -251
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +70 -78
- package/lib/modules/Cart/utils/changePrice.js +22 -50
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +235 -172
- package/lib/modules/Customer/types.js +38 -35
- package/lib/modules/Date/index.js +116 -115
- package/lib/modules/Date/types.js +16 -28
- package/lib/modules/Date/utils.js +174 -123
- package/lib/modules/Discount/index.js +122 -127
- package/lib/modules/Discount/types.js +9 -31
- package/lib/modules/Guests/index.js +30 -56
- package/lib/modules/Guests/types.js +23 -33
- package/lib/modules/Holder/index.js +209 -189
- package/lib/modules/Holder/types.js +4 -16
- package/lib/modules/Holder/utils.js +20 -49
- package/lib/modules/OpenData/index.js +70 -76
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.js +1713 -2118
- package/lib/modules/Order/payment-utils.js +77 -120
- package/lib/modules/Order/types.js +88 -35
- package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
- package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
- package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
- package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
- package/lib/modules/Order/utils.js +814 -647
- package/lib/modules/Payment/cash.js +20 -33
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
- package/lib/modules/Payment/eftpos.js +16 -30
- package/lib/modules/Payment/index.js +532 -399
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +230 -108
- package/lib/modules/Payment/utils.js +52 -51
- package/lib/modules/Payment/walletpass.js +485 -660
- package/lib/modules/Product/index.js +51 -46
- package/lib/modules/Product/types.js +4 -16
- package/lib/modules/Product/utils.js +32 -33
- package/lib/modules/ProductList/index.js +113 -123
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +81 -118
- package/lib/modules/Quotation/types.js +4 -16
- package/lib/modules/Resource/index.js +27 -59
- package/lib/modules/Resource/types.js +22 -32
- package/lib/modules/Resource/utils.js +30 -38
- package/lib/modules/ResourcePlanner/index.js +25 -23
- package/lib/modules/ResourcePlanner/localClock.js +54 -119
- package/lib/modules/ResourcePlanner/planner.js +589 -770
- package/lib/modules/ResourcePlanner/types.js +10 -29
- package/lib/modules/Rules/index.js +1218 -959
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +85 -90
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +355 -430
- package/lib/modules/ScanOrderLogger/index.js +59 -79
- package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
- package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
- package/lib/modules/ScanOrderLogger/types.js +4 -16
- package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
- package/lib/modules/Schedule/index.js +100 -114
- package/lib/modules/Schedule/type.js +4 -16
- package/lib/modules/Schedule/types.js +4 -16
- package/lib/modules/Schedule/utils.js +433 -291
- package/lib/modules/Step/index.js +40 -52
- package/lib/modules/Step/tyeps.js +4 -16
- package/lib/modules/Summary/index.js +66 -71
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +773 -418
- package/lib/modules/SurchargeList/index.js +46 -60
- package/lib/modules/SurchargeList/types.js +4 -16
- package/lib/modules/index.js +245 -63
- package/lib/plugins/app.js +4 -16
- package/lib/plugins/index.js +36 -25
- package/lib/plugins/request.js +137 -126
- package/lib/plugins/shopStore.js +4 -16
- package/lib/plugins/user.js +4 -16
- package/lib/plugins/window.js +171 -179
- package/lib/server/index.js +3050 -2665
- package/lib/server/modules/floor-plan/index.js +118 -134
- package/lib/server/modules/floor-plan/types.js +15 -30
- package/lib/server/modules/index.js +106 -68
- package/lib/server/modules/menu/index.js +142 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +784 -1002
- package/lib/server/modules/order/types.js +122 -33
- package/lib/server/modules/order/utils/filterBookings.js +219 -194
- package/lib/server/modules/order/utils/filterOrders.js +118 -92
- package/lib/server/modules/payment/index.js +59 -83
- package/lib/server/modules/payment/types.js +4 -16
- package/lib/server/modules/products/index.js +583 -471
- package/lib/server/modules/products/types.js +44 -34
- package/lib/server/modules/quotation/index.js +137 -172
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +220 -186
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +135 -123
- package/lib/server/modules/schedule/types.js +14 -21
- package/lib/server/modules/schedule/utils.js +334 -163
- package/lib/server/types.js +4 -16
- package/lib/server/utils/index.js +25 -23
- package/lib/server/utils/product.js +196 -139
- package/lib/server/utils/schedule.js +34 -41
- package/lib/server/utils/small-ticket.js +479 -456
- package/lib/server/utils/time.js +40 -49
- package/lib/solution/BaseSales/index.js +1186 -1410
- package/lib/solution/BaseSales/types.js +42 -38
- package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
- package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
- package/lib/solution/BaseSales/utils.js +158 -143
- package/lib/solution/BookingByStep/index.js +1527 -1340
- package/lib/solution/BookingByStep/types.js +40 -99
- package/lib/solution/BookingByStep/utils/capacity.js +192 -160
- package/lib/solution/BookingByStep/utils/products.js +42 -52
- package/lib/solution/BookingByStep/utils/resources.js +527 -330
- package/lib/solution/BookingByStep/utils/stock.js +65 -44
- package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
- package/lib/solution/BookingTicket/index.js +607 -522
- package/lib/solution/BookingTicket/types.js +99 -77
- package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
- package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
- package/lib/solution/BookingTicket/utils/cartView.js +114 -99
- package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
- package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
- package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
- package/lib/solution/BuyTickets/index.js +67 -70
- package/lib/solution/BuyTickets/types.js +22 -38
- package/lib/solution/Checkout/index.js +1451 -1158
- package/lib/solution/Checkout/types.js +91 -61
- package/lib/solution/Checkout/utils/index.js +228 -156
- package/lib/solution/PlaceOrder/index.js +55 -0
- package/lib/solution/RegisterAndLogin/config.js +493 -460
- package/lib/solution/RegisterAndLogin/index.js +633 -630
- package/lib/solution/RegisterAndLogin/types.js +189 -76
- package/lib/solution/RegisterAndLogin/utils.js +183 -125
- package/lib/solution/Sales/index.js +328 -324
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +832 -864
- package/lib/solution/ScanOrder/types.js +33 -34
- package/lib/solution/ScanOrder/utils.js +409 -374
- package/lib/solution/ShopDiscount/index.js +226 -232
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +300 -172
- package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
- package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
- package/lib/solution/UnifiedBookingSales/types.js +10 -32
- package/lib/solution/VenueBooking/index.js +811 -879
- package/lib/solution/VenueBooking/types.js +19 -39
- package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
- package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +124 -41
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/payment-number.js +26 -46
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,46 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
28
2
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
__export(filterOrders_exports, {
|
|
32
|
-
filterOrders: () => filterOrders
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
33
5
|
});
|
|
34
|
-
|
|
35
|
-
var
|
|
6
|
+
exports.filterOrders = filterOrders;
|
|
7
|
+
var _dayjs = _interopRequireDefault(require("dayjs"));
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
/** 从订单 payments 提取支付方式 code,与 UI 筛选选项及 filterBookings 一致 */
|
|
36
10
|
function getOrderPaymentCodes(order) {
|
|
37
11
|
const payments = order.payments;
|
|
38
12
|
if (!Array.isArray(payments) || payments.length === 0) {
|
|
39
13
|
return [];
|
|
40
14
|
}
|
|
41
|
-
return payments.map(
|
|
15
|
+
return payments.map(item => item?.code).filter(code => typeof code === 'string' && code.length > 0);
|
|
42
16
|
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* 订单过滤函数
|
|
20
|
+
* @param orders 原始订单列表
|
|
21
|
+
* @param filters 过滤条件
|
|
22
|
+
* @returns 过滤 + 排序 + 分页后的结果
|
|
23
|
+
*
|
|
24
|
+
* @优化口子 性能优化预留:
|
|
25
|
+
* - 可在此函数入口加缓存(按 filters 签名缓存结果)
|
|
26
|
+
* - 可对枚举字段建倒排索引(status/payment_status/shipping_status/customer_id)
|
|
27
|
+
* - 可对文本字段加前缀树或分词索引
|
|
28
|
+
* - 可做增量过滤而非全量遍历
|
|
29
|
+
*/
|
|
43
30
|
function filterOrders(orders, filters) {
|
|
31
|
+
// Bug 1 修复:防护 filters 为 null/undefined
|
|
44
32
|
const safeFilters = filters || {};
|
|
45
33
|
if (!orders || !Array.isArray(orders)) {
|
|
46
34
|
return {
|
|
@@ -51,31 +39,37 @@ function filterOrders(orders, filters) {
|
|
|
51
39
|
rejected: []
|
|
52
40
|
};
|
|
53
41
|
}
|
|
42
|
+
|
|
43
|
+
// 默认分页参数
|
|
54
44
|
const size = safeFilters.num || 20;
|
|
55
45
|
const page = safeFilters.skip || 1;
|
|
56
46
|
const rejected = [];
|
|
57
|
-
|
|
47
|
+
|
|
48
|
+
// 1. 过滤
|
|
49
|
+
let filteredList = orders.filter(order => {
|
|
58
50
|
if (safeFilters.keyword) {
|
|
59
51
|
if (!JSON.stringify(order).toLowerCase().includes(safeFilters.keyword.toLowerCase())) {
|
|
60
52
|
rejected.push({
|
|
61
53
|
order_id: order.order_id,
|
|
62
54
|
order_number: order.order_number,
|
|
63
55
|
reason: {
|
|
64
|
-
field:
|
|
65
|
-
actual:
|
|
56
|
+
field: 'keyword',
|
|
57
|
+
actual: '',
|
|
66
58
|
expected: safeFilters.keyword
|
|
67
59
|
}
|
|
68
60
|
});
|
|
69
61
|
return false;
|
|
70
62
|
}
|
|
71
63
|
}
|
|
64
|
+
|
|
65
|
+
// status - 订单状态
|
|
72
66
|
if (safeFilters.status && safeFilters.status.length > 0) {
|
|
73
67
|
if (!order.status || !safeFilters.status.includes(order.status)) {
|
|
74
68
|
rejected.push({
|
|
75
69
|
order_id: order.order_id,
|
|
76
70
|
order_number: order.order_number,
|
|
77
71
|
reason: {
|
|
78
|
-
field:
|
|
72
|
+
field: 'status',
|
|
79
73
|
actual: order.status,
|
|
80
74
|
expected: safeFilters.status
|
|
81
75
|
}
|
|
@@ -83,13 +77,15 @@ function filterOrders(orders, filters) {
|
|
|
83
77
|
return false;
|
|
84
78
|
}
|
|
85
79
|
}
|
|
80
|
+
|
|
81
|
+
// payment_status - 支付状态
|
|
86
82
|
if (safeFilters.payment_status && safeFilters.payment_status.length > 0) {
|
|
87
83
|
if (!order.payment_status || !safeFilters.payment_status.includes(order.payment_status)) {
|
|
88
84
|
rejected.push({
|
|
89
85
|
order_id: order.order_id,
|
|
90
86
|
order_number: order.order_number,
|
|
91
87
|
reason: {
|
|
92
|
-
field:
|
|
88
|
+
field: 'payment_status',
|
|
93
89
|
actual: order.payment_status,
|
|
94
90
|
expected: safeFilters.payment_status
|
|
95
91
|
}
|
|
@@ -97,13 +93,15 @@ function filterOrders(orders, filters) {
|
|
|
97
93
|
return false;
|
|
98
94
|
}
|
|
99
95
|
}
|
|
96
|
+
|
|
97
|
+
// shipping_status - 处理状态
|
|
100
98
|
if (safeFilters.shipping_status && safeFilters.shipping_status.length > 0) {
|
|
101
99
|
if (!order.shipping_status || !safeFilters.shipping_status.includes(order.shipping_status)) {
|
|
102
100
|
rejected.push({
|
|
103
101
|
order_id: order.order_id,
|
|
104
102
|
order_number: order.order_number,
|
|
105
103
|
reason: {
|
|
106
|
-
field:
|
|
104
|
+
field: 'shipping_status',
|
|
107
105
|
actual: order.shipping_status,
|
|
108
106
|
expected: safeFilters.shipping_status
|
|
109
107
|
}
|
|
@@ -111,13 +109,15 @@ function filterOrders(orders, filters) {
|
|
|
111
109
|
return false;
|
|
112
110
|
}
|
|
113
111
|
}
|
|
114
|
-
|
|
112
|
+
|
|
113
|
+
// customer_id - 客户ID(精确匹配)
|
|
114
|
+
if (safeFilters.customer_id !== undefined && safeFilters.customer_id !== null) {
|
|
115
115
|
if (String(order.customer_id) !== String(safeFilters.customer_id)) {
|
|
116
116
|
rejected.push({
|
|
117
117
|
order_id: order.order_id,
|
|
118
118
|
order_number: order.order_number,
|
|
119
119
|
reason: {
|
|
120
|
-
field:
|
|
120
|
+
field: 'customer_id',
|
|
121
121
|
actual: order.customer_id,
|
|
122
122
|
expected: safeFilters.customer_id
|
|
123
123
|
}
|
|
@@ -125,13 +125,15 @@ function filterOrders(orders, filters) {
|
|
|
125
125
|
return false;
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
+
|
|
129
|
+
// order_sales_channel - 销售渠道
|
|
128
130
|
if (safeFilters.order_sales_channel && safeFilters.order_sales_channel.length > 0) {
|
|
129
131
|
if (!order.order_sales_channel || !safeFilters.order_sales_channel.includes(order.order_sales_channel)) {
|
|
130
132
|
rejected.push({
|
|
131
133
|
order_id: order.order_id,
|
|
132
134
|
order_number: order.order_number,
|
|
133
135
|
reason: {
|
|
134
|
-
field:
|
|
136
|
+
field: 'order_sales_channel',
|
|
135
137
|
actual: order.order_sales_channel,
|
|
136
138
|
expected: safeFilters.order_sales_channel
|
|
137
139
|
}
|
|
@@ -139,6 +141,8 @@ function filterOrders(orders, filters) {
|
|
|
139
141
|
return false;
|
|
140
142
|
}
|
|
141
143
|
}
|
|
144
|
+
|
|
145
|
+
// payment_methods - 支付方式(按 payments[].code 匹配,不再使用 order.payment_methods)
|
|
142
146
|
if (safeFilters.payment_methods && safeFilters.payment_methods.length > 0) {
|
|
143
147
|
const orderPaymentCodes = getOrderPaymentCodes(order);
|
|
144
148
|
if (orderPaymentCodes.length === 0) {
|
|
@@ -146,20 +150,20 @@ function filterOrders(orders, filters) {
|
|
|
146
150
|
order_id: order.order_id,
|
|
147
151
|
order_number: order.order_number,
|
|
148
152
|
reason: {
|
|
149
|
-
field:
|
|
153
|
+
field: 'payment_methods',
|
|
150
154
|
actual: order.payments,
|
|
151
155
|
expected: safeFilters.payment_methods
|
|
152
156
|
}
|
|
153
157
|
});
|
|
154
158
|
return false;
|
|
155
159
|
}
|
|
156
|
-
const hasMatch = orderPaymentCodes.some(
|
|
160
|
+
const hasMatch = orderPaymentCodes.some(code => safeFilters.payment_methods.includes(code));
|
|
157
161
|
if (!hasMatch) {
|
|
158
162
|
rejected.push({
|
|
159
163
|
order_id: order.order_id,
|
|
160
164
|
order_number: order.order_number,
|
|
161
165
|
reason: {
|
|
162
|
-
field:
|
|
166
|
+
field: 'payment_methods',
|
|
163
167
|
actual: orderPaymentCodes,
|
|
164
168
|
expected: safeFilters.payment_methods
|
|
165
169
|
}
|
|
@@ -167,26 +171,28 @@ function filterOrders(orders, filters) {
|
|
|
167
171
|
return false;
|
|
168
172
|
}
|
|
169
173
|
}
|
|
170
|
-
|
|
174
|
+
|
|
175
|
+
// min_total_amount / max_total_amount - 订单金额范围
|
|
176
|
+
if (safeFilters.min_total_amount !== undefined || safeFilters.max_total_amount !== undefined) {
|
|
171
177
|
const orderAmount = parseFloat(String(order.total_amount || 0));
|
|
172
|
-
if (safeFilters.min_total_amount !==
|
|
178
|
+
if (safeFilters.min_total_amount !== undefined && orderAmount < safeFilters.min_total_amount) {
|
|
173
179
|
rejected.push({
|
|
174
180
|
order_id: order.order_id,
|
|
175
181
|
order_number: order.order_number,
|
|
176
182
|
reason: {
|
|
177
|
-
field:
|
|
183
|
+
field: 'min_total_amount',
|
|
178
184
|
actual: order.total_amount,
|
|
179
185
|
expected: safeFilters.min_total_amount
|
|
180
186
|
}
|
|
181
187
|
});
|
|
182
188
|
return false;
|
|
183
189
|
}
|
|
184
|
-
if (safeFilters.max_total_amount !==
|
|
190
|
+
if (safeFilters.max_total_amount !== undefined && orderAmount > safeFilters.max_total_amount) {
|
|
185
191
|
rejected.push({
|
|
186
192
|
order_id: order.order_id,
|
|
187
193
|
order_number: order.order_number,
|
|
188
194
|
reason: {
|
|
189
|
-
field:
|
|
195
|
+
field: 'max_total_amount',
|
|
190
196
|
actual: order.total_amount,
|
|
191
197
|
expected: safeFilters.max_total_amount
|
|
192
198
|
}
|
|
@@ -194,13 +200,15 @@ function filterOrders(orders, filters) {
|
|
|
194
200
|
return false;
|
|
195
201
|
}
|
|
196
202
|
}
|
|
203
|
+
|
|
204
|
+
// tag_ids - 标签(统一 String 比较,兼容 number/string)
|
|
197
205
|
if (safeFilters.tag_ids && safeFilters.tag_ids.length > 0) {
|
|
198
206
|
if (!order.tag_ids || !Array.isArray(order.tag_ids) || order.tag_ids.length === 0) {
|
|
199
207
|
rejected.push({
|
|
200
208
|
order_id: order.order_id,
|
|
201
209
|
order_number: order.order_number,
|
|
202
210
|
reason: {
|
|
203
|
-
field:
|
|
211
|
+
field: 'tag_ids',
|
|
204
212
|
actual: order.tag_ids,
|
|
205
213
|
expected: safeFilters.tag_ids
|
|
206
214
|
}
|
|
@@ -208,13 +216,13 @@ function filterOrders(orders, filters) {
|
|
|
208
216
|
return false;
|
|
209
217
|
}
|
|
210
218
|
const filterTagSet = new Set(safeFilters.tag_ids.map(String));
|
|
211
|
-
const hasMatch = order.tag_ids.some(
|
|
219
|
+
const hasMatch = order.tag_ids.some(tag => filterTagSet.has(String(tag)));
|
|
212
220
|
if (!hasMatch) {
|
|
213
221
|
rejected.push({
|
|
214
222
|
order_id: order.order_id,
|
|
215
223
|
order_number: order.order_number,
|
|
216
224
|
reason: {
|
|
217
|
-
field:
|
|
225
|
+
field: 'tag_ids',
|
|
218
226
|
actual: order.tag_ids,
|
|
219
227
|
expected: safeFilters.tag_ids
|
|
220
228
|
}
|
|
@@ -222,13 +230,15 @@ function filterOrders(orders, filters) {
|
|
|
222
230
|
return false;
|
|
223
231
|
}
|
|
224
232
|
}
|
|
233
|
+
|
|
234
|
+
// shipping_type - 配送方式
|
|
225
235
|
if (safeFilters.shipping_type && safeFilters.shipping_type.length > 0) {
|
|
226
236
|
if (!order.shipping_type || !safeFilters.shipping_type.includes(order.shipping_type)) {
|
|
227
237
|
rejected.push({
|
|
228
238
|
order_id: order.order_id,
|
|
229
239
|
order_number: order.order_number,
|
|
230
240
|
reason: {
|
|
231
|
-
field:
|
|
241
|
+
field: 'shipping_type',
|
|
232
242
|
actual: order.shipping_type,
|
|
233
243
|
expected: safeFilters.shipping_type
|
|
234
244
|
}
|
|
@@ -236,13 +246,15 @@ function filterOrders(orders, filters) {
|
|
|
236
246
|
return false;
|
|
237
247
|
}
|
|
238
248
|
}
|
|
239
|
-
|
|
249
|
+
|
|
250
|
+
// delivery_zone_name - 配送区域(模糊匹配)
|
|
251
|
+
if (safeFilters.delivery_zone_name !== undefined && safeFilters.delivery_zone_name !== null && safeFilters.delivery_zone_name !== '') {
|
|
240
252
|
if (!order.delivery_zone_name || !order.delivery_zone_name.toLowerCase().includes(safeFilters.delivery_zone_name.toLowerCase())) {
|
|
241
253
|
rejected.push({
|
|
242
254
|
order_id: order.order_id,
|
|
243
255
|
order_number: order.order_number,
|
|
244
256
|
reason: {
|
|
245
|
-
field:
|
|
257
|
+
field: 'delivery_zone_name',
|
|
246
258
|
actual: order.delivery_zone_name,
|
|
247
259
|
expected: safeFilters.delivery_zone_name
|
|
248
260
|
}
|
|
@@ -250,13 +262,15 @@ function filterOrders(orders, filters) {
|
|
|
250
262
|
return false;
|
|
251
263
|
}
|
|
252
264
|
}
|
|
253
|
-
|
|
265
|
+
|
|
266
|
+
// location_id - 取货地点(精确匹配)
|
|
267
|
+
if (safeFilters.location_id !== undefined && safeFilters.location_id !== null) {
|
|
254
268
|
if (String(order.location_id) !== String(safeFilters.location_id)) {
|
|
255
269
|
rejected.push({
|
|
256
270
|
order_id: order.order_id,
|
|
257
271
|
order_number: order.order_number,
|
|
258
272
|
reason: {
|
|
259
|
-
field:
|
|
273
|
+
field: 'location_id',
|
|
260
274
|
actual: order.location_id,
|
|
261
275
|
expected: safeFilters.location_id
|
|
262
276
|
}
|
|
@@ -264,13 +278,15 @@ function filterOrders(orders, filters) {
|
|
|
264
278
|
return false;
|
|
265
279
|
}
|
|
266
280
|
}
|
|
267
|
-
|
|
281
|
+
|
|
282
|
+
// shipping_order_number - 物流单号(模糊匹配)
|
|
283
|
+
if (safeFilters.shipping_order_number !== undefined && safeFilters.shipping_order_number !== null && safeFilters.shipping_order_number !== '') {
|
|
268
284
|
if (!order.shipping_order_number || !order.shipping_order_number.toLowerCase().includes(safeFilters.shipping_order_number.toLowerCase())) {
|
|
269
285
|
rejected.push({
|
|
270
286
|
order_id: order.order_id,
|
|
271
287
|
order_number: order.order_number,
|
|
272
288
|
reason: {
|
|
273
|
-
field:
|
|
289
|
+
field: 'shipping_order_number',
|
|
274
290
|
actual: order.shipping_order_number,
|
|
275
291
|
expected: safeFilters.shipping_order_number
|
|
276
292
|
}
|
|
@@ -278,13 +294,15 @@ function filterOrders(orders, filters) {
|
|
|
278
294
|
return false;
|
|
279
295
|
}
|
|
280
296
|
}
|
|
297
|
+
|
|
298
|
+
// logistics_company_id - 物流公司
|
|
281
299
|
if (safeFilters.logistics_company_id && safeFilters.logistics_company_id.length > 0) {
|
|
282
300
|
if (!order.logistics_company_id) {
|
|
283
301
|
rejected.push({
|
|
284
302
|
order_id: order.order_id,
|
|
285
303
|
order_number: order.order_number,
|
|
286
304
|
reason: {
|
|
287
|
-
field:
|
|
305
|
+
field: 'logistics_company_id',
|
|
288
306
|
actual: order.logistics_company_id,
|
|
289
307
|
expected: safeFilters.logistics_company_id
|
|
290
308
|
}
|
|
@@ -292,13 +310,13 @@ function filterOrders(orders, filters) {
|
|
|
292
310
|
return false;
|
|
293
311
|
}
|
|
294
312
|
const orderLogisticsId = String(order.logistics_company_id);
|
|
295
|
-
const hasMatch = safeFilters.logistics_company_id.some(
|
|
313
|
+
const hasMatch = safeFilters.logistics_company_id.some(id => String(id) === orderLogisticsId);
|
|
296
314
|
if (!hasMatch) {
|
|
297
315
|
rejected.push({
|
|
298
316
|
order_id: order.order_id,
|
|
299
317
|
order_number: order.order_number,
|
|
300
318
|
reason: {
|
|
301
|
-
field:
|
|
319
|
+
field: 'logistics_company_id',
|
|
302
320
|
actual: order.logistics_company_id,
|
|
303
321
|
expected: safeFilters.logistics_company_id
|
|
304
322
|
}
|
|
@@ -306,13 +324,15 @@ function filterOrders(orders, filters) {
|
|
|
306
324
|
return false;
|
|
307
325
|
}
|
|
308
326
|
}
|
|
309
|
-
|
|
327
|
+
|
|
328
|
+
// zip - 邮编(模糊匹配)
|
|
329
|
+
if (safeFilters.zip !== undefined && safeFilters.zip !== null && safeFilters.zip !== '') {
|
|
310
330
|
if (!order.zip || !order.zip.toLowerCase().includes(safeFilters.zip.toLowerCase())) {
|
|
311
331
|
rejected.push({
|
|
312
332
|
order_id: order.order_id,
|
|
313
333
|
order_number: order.order_number,
|
|
314
334
|
reason: {
|
|
315
|
-
field:
|
|
335
|
+
field: 'zip',
|
|
316
336
|
actual: order.zip,
|
|
317
337
|
expected: safeFilters.zip
|
|
318
338
|
}
|
|
@@ -320,13 +340,15 @@ function filterOrders(orders, filters) {
|
|
|
320
340
|
return false;
|
|
321
341
|
}
|
|
322
342
|
}
|
|
343
|
+
|
|
344
|
+
// business_code - 业务类型(精确匹配)
|
|
323
345
|
if (safeFilters.business_code) {
|
|
324
346
|
if (!order.business_code || order.business_code !== safeFilters.business_code) {
|
|
325
347
|
rejected.push({
|
|
326
348
|
order_id: order.order_id,
|
|
327
349
|
order_number: order.order_number,
|
|
328
350
|
reason: {
|
|
329
|
-
field:
|
|
351
|
+
field: 'business_code',
|
|
330
352
|
actual: order.business_code,
|
|
331
353
|
expected: safeFilters.business_code
|
|
332
354
|
}
|
|
@@ -334,17 +356,21 @@ function filterOrders(orders, filters) {
|
|
|
334
356
|
return false;
|
|
335
357
|
}
|
|
336
358
|
}
|
|
359
|
+
|
|
360
|
+
// start_time / end_time - 创建时间范围
|
|
337
361
|
if (safeFilters.start_time || safeFilters.end_time) {
|
|
338
|
-
const isCreatedIsUndefined = order.created_at ===
|
|
339
|
-
|
|
362
|
+
const isCreatedIsUndefined = order.created_at === undefined;
|
|
363
|
+
// 统一用 dayjs 按本地时区解析,避免 new Date("YYYY-MM-DD") 被当作 UTC 0 点
|
|
364
|
+
// 与含时分的本地时间字符串比较时产生时区错位
|
|
365
|
+
const orderTime = order.created_at ? typeof order.created_at === 'number' ? order.created_at : (0, _dayjs.default)(String(order.created_at)).valueOf() : 0;
|
|
340
366
|
if (safeFilters.start_time && !isCreatedIsUndefined) {
|
|
341
|
-
const startTs = (0,
|
|
367
|
+
const startTs = (0, _dayjs.default)(safeFilters.start_time).startOf('day').valueOf();
|
|
342
368
|
if (orderTime < startTs) {
|
|
343
369
|
rejected.push({
|
|
344
370
|
order_id: order.order_id,
|
|
345
371
|
order_number: order.order_number,
|
|
346
372
|
reason: {
|
|
347
|
-
field:
|
|
373
|
+
field: 'start_time',
|
|
348
374
|
actual: order.created_at,
|
|
349
375
|
expected: safeFilters.start_time
|
|
350
376
|
}
|
|
@@ -353,13 +379,13 @@ function filterOrders(orders, filters) {
|
|
|
353
379
|
}
|
|
354
380
|
}
|
|
355
381
|
if (safeFilters.end_time && !isCreatedIsUndefined) {
|
|
356
|
-
const endTs = (0,
|
|
382
|
+
const endTs = (0, _dayjs.default)(safeFilters.end_time).endOf('day').valueOf();
|
|
357
383
|
if (orderTime > endTs) {
|
|
358
384
|
rejected.push({
|
|
359
385
|
order_id: order.order_id,
|
|
360
386
|
order_number: order.order_number,
|
|
361
387
|
reason: {
|
|
362
|
-
field:
|
|
388
|
+
field: 'end_time',
|
|
363
389
|
actual: order.created_at,
|
|
364
390
|
expected: safeFilters.end_time
|
|
365
391
|
}
|
|
@@ -370,43 +396,47 @@ function filterOrders(orders, filters) {
|
|
|
370
396
|
}
|
|
371
397
|
return true;
|
|
372
398
|
});
|
|
399
|
+
|
|
400
|
+
// 2. 排序
|
|
373
401
|
if (safeFilters.order_by) {
|
|
374
402
|
const sortField = safeFilters.order_by;
|
|
375
|
-
const sortOrder = safeFilters.sort ||
|
|
403
|
+
const sortOrder = safeFilters.sort || 'desc';
|
|
376
404
|
filteredList.sort((a, b) => {
|
|
377
405
|
let aVal;
|
|
378
406
|
let bVal;
|
|
379
407
|
switch (sortField) {
|
|
380
|
-
case
|
|
381
|
-
aVal = a.created_at ? typeof a.created_at ===
|
|
382
|
-
bVal = b.created_at ? typeof b.created_at ===
|
|
408
|
+
case 'created_at':
|
|
409
|
+
aVal = a.created_at ? typeof a.created_at === 'number' ? a.created_at : new Date(String(a.created_at)).getTime() : 0;
|
|
410
|
+
bVal = b.created_at ? typeof b.created_at === 'number' ? b.created_at : new Date(String(b.created_at)).getTime() : 0;
|
|
383
411
|
break;
|
|
384
|
-
case
|
|
385
|
-
aVal = a.updated_at ? typeof a.updated_at ===
|
|
386
|
-
bVal = b.updated_at ? typeof b.updated_at ===
|
|
412
|
+
case 'updated_at':
|
|
413
|
+
aVal = a.updated_at ? typeof a.updated_at === 'number' ? a.updated_at : new Date(String(a.updated_at)).getTime() : 0;
|
|
414
|
+
bVal = b.updated_at ? typeof b.updated_at === 'number' ? b.updated_at : new Date(String(b.updated_at)).getTime() : 0;
|
|
387
415
|
break;
|
|
388
|
-
case
|
|
416
|
+
case 'total_amount':
|
|
389
417
|
aVal = parseFloat(String(a.total_amount || 0));
|
|
390
418
|
bVal = parseFloat(String(b.total_amount || 0));
|
|
391
419
|
break;
|
|
392
|
-
case
|
|
393
|
-
aVal = (a.customer_name ||
|
|
394
|
-
bVal = (b.customer_name ||
|
|
420
|
+
case 'customer_name':
|
|
421
|
+
aVal = (a.customer_name || '').toLowerCase();
|
|
422
|
+
bVal = (b.customer_name || '').toLowerCase();
|
|
395
423
|
break;
|
|
396
|
-
case
|
|
424
|
+
case 'amount_gap':
|
|
397
425
|
return 0;
|
|
398
426
|
default:
|
|
399
427
|
return 0;
|
|
400
428
|
}
|
|
401
429
|
if (aVal < bVal) {
|
|
402
|
-
return sortOrder ===
|
|
430
|
+
return sortOrder === 'asc' ? -1 : 1;
|
|
403
431
|
}
|
|
404
432
|
if (aVal > bVal) {
|
|
405
|
-
return sortOrder ===
|
|
433
|
+
return sortOrder === 'asc' ? 1 : -1;
|
|
406
434
|
}
|
|
407
435
|
return 0;
|
|
408
436
|
});
|
|
409
437
|
}
|
|
438
|
+
|
|
439
|
+
// 3. 分页(skip 为页码,从 1 开始)
|
|
410
440
|
const totalCount = filteredList.length;
|
|
411
441
|
const startIndex = (page - 1) * size;
|
|
412
442
|
const endIndex = startIndex + size;
|
|
@@ -418,8 +448,4 @@ function filterOrders(orders, filters) {
|
|
|
418
448
|
skip: page,
|
|
419
449
|
rejected
|
|
420
450
|
};
|
|
421
|
-
}
|
|
422
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
423
|
-
0 && (module.exports = {
|
|
424
|
-
filterOrders
|
|
425
|
-
});
|
|
451
|
+
}
|