@pisell/pisellos 0.0.569 → 0.10.2
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 +10 -6
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -3
- package/dist/model/strategy/adapter/promotion/index.js +9 -0
- package/dist/model/strategy/adapter/walletPass/evaluator.js +7 -5
- package/dist/model/strategy/adapter/walletPass/example.js +26 -3
- package/dist/model/strategy/adapter/walletPass/index.js +5 -5
- package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +17 -92
- package/dist/model/strategy/strategy-example.js +19 -5
- package/dist/modules/BaseModule.d.ts +1 -1
- package/dist/modules/BaseModule.js +8 -10
- package/dist/modules/Cart/index.js +3 -0
- package/dist/modules/Cart/utils/cartProduct.js +1 -0
- package/dist/modules/Cart/utils/cartResource.js +0 -2
- package/dist/modules/Cart/utils/changePrice.js +9 -16
- package/dist/modules/Date/index.js +5 -1
- package/dist/modules/Discount/index.d.ts +0 -1
- package/dist/modules/Discount/index.js +7 -22
- package/dist/modules/Discount/types.d.ts +0 -1
- package/dist/modules/OpenData/index.js +2 -0
- package/dist/modules/Order/index.js +70 -40
- package/dist/modules/Payment/index.js +162 -97
- package/dist/modules/Payment/types.d.ts +4 -8
- package/dist/modules/Payment/walletpass.d.ts +0 -2
- package/dist/modules/Payment/walletpass.js +5 -4
- package/dist/modules/ProductList/index.d.ts +1 -1
- package/dist/modules/ProductList/index.js +3 -12
- package/dist/modules/ProductList/types.d.ts +0 -1
- package/dist/modules/Rules/index.js +126 -427
- package/dist/modules/SalesSummary/utils.js +1 -2
- package/dist/modules/Schedule/getDateIsInSchedule.js +0 -5
- package/dist/modules/Schedule/index.js +1 -0
- package/dist/modules/Schedule/utils.js +1 -0
- package/dist/modules/Step/index.js +1 -0
- package/dist/modules/Summary/utils.js +22 -43
- package/dist/plugins/request.js +4 -1
- package/dist/plugins/window.js +6 -2
- package/dist/server/index.js +129 -97
- package/dist/server/modules/menu/index.js +41 -32
- package/dist/server/modules/order/index.js +4 -2
- package/dist/server/modules/products/index.js +42 -24
- package/dist/server/modules/quotation/index.js +38 -29
- package/dist/server/modules/resource/index.js +4 -3
- package/dist/server/modules/schedule/index.js +35 -27
- package/dist/server/utils/product.js +1 -0
- package/dist/solution/BaseSales/index.js +41 -38
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +60 -11
- package/dist/solution/BookingByStep/utils/capacity.js +11 -1
- package/dist/solution/BookingByStep/utils/resources.js +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +43 -2
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +2 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +7 -6
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +31 -25
- package/dist/solution/BookingTicket/utils/scan/index.js +10 -6
- package/dist/solution/BuyTickets/index.js +12 -9
- package/dist/solution/Checkout/index.js +252 -177
- package/dist/solution/Checkout/utils/index.js +16 -4
- package/dist/solution/RegisterAndLogin/index.js +76 -30
- package/dist/solution/ScanOrder/index.js +60 -50
- package/dist/solution/ShopDiscount/index.js +14 -15
- package/dist/solution/ShopDiscount/types.d.ts +4 -5
- package/dist/solution/ShopDiscount/utils.d.ts +0 -9
- package/dist/solution/ShopDiscount/utils.js +0 -9
- package/dist/solution/VenueBooking/index.d.ts +3 -31
- package/dist/solution/VenueBooking/index.js +496 -651
- package/dist/solution/VenueBooking/types.d.ts +1 -3
- package/dist/solution/VenueBooking/types.js +0 -1
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/dist/solution/VenueBooking/utils/dateSummary.js +25 -12
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/dist/solution/VenueBooking/utils/timeSlot.js +4 -9
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/task.js +18 -15
- package/dist/utils/watch.js +1 -0
- package/lib/apis/picoding.js +0 -2
- package/lib/core/index.js +132 -130
- package/lib/effects/index.js +57 -46
- package/lib/index.d.ts +0 -1
- package/lib/index.js +50 -92
- package/lib/model/index.js +21 -14
- package/lib/model/strategy/adapter/dataVariant/adapter.js +50 -38
- package/lib/model/strategy/adapter/dataVariant/evaluator.js +236 -162
- package/lib/model/strategy/adapter/dataVariant/examples.js +237 -229
- package/lib/model/strategy/adapter/dataVariant/index.js +34 -39
- package/lib/model/strategy/adapter/dataVariant/type.js +28 -57
- package/lib/model/strategy/adapter/index.js +64 -100
- package/lib/model/strategy/adapter/itemRule/adapter.js +144 -156
- package/lib/model/strategy/adapter/itemRule/evaluator.js +48 -36
- package/lib/model/strategy/adapter/itemRule/examples.js +225 -295
- package/lib/model/strategy/adapter/itemRule/index.js +57 -83
- package/lib/model/strategy/adapter/itemRule/type.js +36 -97
- package/lib/model/strategy/adapter/promotion/adapter.js +63 -84
- package/lib/model/strategy/adapter/promotion/evaluator.js +231 -381
- package/lib/model/strategy/adapter/promotion/examples.js +159 -139
- package/lib/model/strategy/adapter/promotion/index.js +49 -1
- package/lib/model/strategy/adapter/promotion/type.js +35 -199
- package/lib/model/strategy/adapter/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/evaluator.js +152 -180
- package/lib/model/strategy/adapter/walletPass/example.js +190 -217
- package/lib/model/strategy/adapter/walletPass/index.js +51 -75
- package/lib/model/strategy/adapter/walletPass/locales.js +58 -36
- package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -3
- package/lib/model/strategy/adapter/walletPass/type.js +16 -4
- package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -26
- package/lib/model/strategy/adapter/walletPass/utils.js +383 -678
- package/lib/model/strategy/engine.js +168 -270
- package/lib/model/strategy/index.js +34 -49
- package/lib/model/strategy/strategy-example.js +239 -243
- package/lib/model/strategy/type.js +40 -100
- package/lib/modules/Account/index.js +53 -39
- package/lib/modules/Account/types.js +33 -20
- package/lib/modules/AccountList/index.js +154 -116
- package/lib/modules/AccountList/types.js +31 -30
- package/lib/modules/AccountList/utils.js +30 -18
- package/lib/modules/BaseModule.d.ts +1 -1
- package/lib/modules/BaseModule.js +46 -25
- package/lib/modules/BookingContext/index.js +136 -158
- package/lib/modules/BookingContext/types.js +32 -46
- package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +143 -131
- package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +82 -75
- package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +150 -170
- package/lib/modules/BookingContext/utils/flexible.js +55 -38
- package/lib/modules/BookingContext/utils/formatResourceList.js +34 -19
- package/lib/modules/BookingContext/utils/index.js +41 -124
- package/lib/modules/BookingContext/utils/noResource.js +70 -58
- package/lib/modules/BookingContext/utils/orderLineDisplay.js +41 -14
- package/lib/modules/BookingContext/utils/productExtend.js +155 -202
- package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
- package/lib/modules/BookingContext/utils/resourceSelection.js +41 -19
- package/lib/modules/BookingContext/utils/resources.js +167 -209
- package/lib/modules/BookingContext/utils/serviceTimes.js +116 -115
- package/lib/modules/BookingContext/utils/timeSlices.js +80 -70
- package/lib/modules/Cart/index.js +124 -170
- package/lib/modules/Cart/types.js +51 -46
- package/lib/modules/Cart/utils/cartAccount.js +39 -40
- package/lib/modules/Cart/utils/cartDate.js +61 -56
- package/lib/modules/Cart/utils/cartDiscount.js +33 -28
- package/lib/modules/Cart/utils/cartNote.js +32 -27
- package/lib/modules/Cart/utils/cartProduct.js +251 -321
- package/lib/modules/Cart/utils/cartRelationForms.js +35 -29
- package/lib/modules/Cart/utils/cartResource.js +78 -72
- package/lib/modules/Cart/utils/changePrice.js +50 -28
- package/lib/modules/Cart/utils/index.js +48 -106
- package/lib/modules/Customer/constants.js +34 -13
- package/lib/modules/Customer/index.js +169 -232
- package/lib/modules/Customer/types.js +35 -38
- package/lib/modules/Date/index.js +115 -116
- package/lib/modules/Date/types.js +28 -16
- package/lib/modules/Date/utils.js +123 -174
- package/lib/modules/Discount/index.d.ts +0 -1
- package/lib/modules/Discount/index.js +128 -130
- package/lib/modules/Discount/types.d.ts +0 -1
- package/lib/modules/Discount/types.js +31 -9
- package/lib/modules/Guests/index.js +56 -30
- package/lib/modules/Guests/types.js +33 -23
- package/lib/modules/Holder/index.js +189 -209
- package/lib/modules/Holder/types.js +16 -4
- package/lib/modules/Holder/utils.js +49 -20
- package/lib/modules/OpenData/index.js +76 -69
- package/lib/modules/OpenData/types.js +16 -4
- package/lib/modules/OpenData/utils.js +78 -44
- package/lib/modules/Order/index.js +1909 -1572
- package/lib/modules/Order/types.js +35 -78
- package/lib/modules/Order/utils/bundleDiscountHydration.js +74 -41
- package/lib/modules/Order/utils/manualProductDiscount.js +123 -124
- package/lib/modules/Order/utils/orderCollectionIdentity.js +210 -148
- package/lib/modules/Order/utils.js +634 -799
- package/lib/modules/Payment/cash.js +33 -20
- package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
- package/lib/modules/Payment/eftpos.js +30 -16
- package/lib/modules/Payment/index.js +378 -518
- package/lib/modules/Payment/mx51.js +0 -1
- package/lib/modules/Payment/types.d.ts +4 -8
- package/lib/modules/Payment/types.js +107 -216
- package/lib/modules/Payment/utils.js +48 -51
- package/lib/modules/Payment/walletpass.d.ts +0 -2
- package/lib/modules/Payment/walletpass.js +211 -226
- package/lib/modules/Product/index.js +46 -51
- package/lib/modules/Product/types.js +16 -4
- package/lib/modules/Product/utils.js +33 -32
- package/lib/modules/ProductList/index.d.ts +1 -1
- package/lib/modules/ProductList/index.js +117 -117
- package/lib/modules/ProductList/types.d.ts +0 -1
- package/lib/modules/ProductList/types.js +31 -9
- package/lib/modules/Quotation/index.js +100 -66
- package/lib/modules/Quotation/types.js +16 -4
- package/lib/modules/Resource/index.js +59 -27
- package/lib/modules/Resource/types.js +32 -22
- package/lib/modules/Resource/utils.js +38 -30
- package/lib/modules/ResourcePlanner/index.js +61 -60
- package/lib/modules/ResourcePlanner/planner.js +384 -346
- package/lib/modules/ResourcePlanner/types.js +16 -4
- package/lib/modules/Rules/index.js +903 -1475
- package/lib/modules/Rules/types.js +40 -17
- package/lib/modules/SalesSummary/index.js +90 -85
- package/lib/modules/SalesSummary/types.js +16 -4
- package/lib/modules/SalesSummary/utils.js +427 -351
- package/lib/modules/ScanOrderLogger/index.js +79 -59
- package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
- package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
- package/lib/modules/ScanOrderLogger/types.js +16 -4
- package/lib/modules/Schedule/getDateIsInSchedule.js +163 -339
- package/lib/modules/Schedule/index.js +114 -100
- package/lib/modules/Schedule/type.js +16 -4
- package/lib/modules/Schedule/types.js +16 -4
- package/lib/modules/Schedule/utils.js +291 -433
- package/lib/modules/Step/index.js +52 -40
- package/lib/modules/Step/tyeps.js +16 -4
- package/lib/modules/Summary/index.js +71 -66
- package/lib/modules/Summary/types.js +16 -4
- package/lib/modules/Summary/utils.js +418 -791
- package/lib/modules/SurchargeList/index.js +60 -46
- package/lib/modules/SurchargeList/types.js +16 -4
- package/lib/modules/index.js +63 -245
- package/lib/plugins/app.js +16 -4
- package/lib/plugins/index.js +25 -36
- package/lib/plugins/request.js +126 -137
- package/lib/plugins/shopStore.js +16 -4
- package/lib/plugins/user.js +16 -4
- package/lib/plugins/window.js +179 -171
- package/lib/server/index.js +2337 -2675
- package/lib/server/modules/floor-plan/index.js +123 -102
- package/lib/server/modules/floor-plan/types.js +30 -15
- package/lib/server/modules/index.js +68 -106
- package/lib/server/modules/menu/index.js +122 -146
- package/lib/server/modules/menu/types.js +31 -18
- package/lib/server/modules/order/index.js +642 -567
- package/lib/server/modules/order/types.js +32 -117
- package/lib/server/modules/order/utils/filterBookings.js +194 -219
- package/lib/server/modules/order/utils/filterOrders.js +92 -118
- package/lib/server/modules/payment/index.js +83 -59
- package/lib/server/modules/payment/types.js +16 -4
- package/lib/server/modules/products/index.js +459 -575
- package/lib/server/modules/products/types.js +34 -44
- package/lib/server/modules/quotation/index.js +172 -137
- package/lib/server/modules/quotation/types.js +31 -21
- package/lib/server/modules/resource/index.js +184 -213
- package/lib/server/modules/resource/types.js +33 -42
- package/lib/server/modules/schedule/index.js +123 -135
- package/lib/server/modules/schedule/types.js +21 -14
- package/lib/server/modules/schedule/utils.js +163 -334
- package/lib/server/types.js +16 -4
- package/lib/server/utils/index.js +23 -25
- package/lib/server/utils/product.js +139 -196
- package/lib/server/utils/schedule.js +41 -34
- package/lib/server/utils/small-ticket.js +456 -478
- package/lib/server/utils/time.js +49 -40
- package/lib/solution/BaseSales/index.js +1016 -850
- package/lib/solution/BaseSales/types.js +37 -41
- package/lib/solution/BaseSales/utils/cartPromotion.js +460 -611
- package/lib/solution/BaseSales/utils/parseSalesResponse.js +105 -85
- package/lib/solution/BaseSales/utils/quotationPrice.js +114 -56
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +143 -102
- package/lib/solution/BaseSales/utils.js +140 -155
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1340 -1530
- package/lib/solution/BookingByStep/types.js +99 -40
- package/lib/solution/BookingByStep/utils/capacity.js +160 -192
- package/lib/solution/BookingByStep/utils/products.js +52 -42
- package/lib/solution/BookingByStep/utils/resources.js +330 -527
- package/lib/solution/BookingByStep/utils/stock.js +44 -65
- package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +459 -543
- package/lib/solution/BookingTicket/types.js +77 -99
- package/lib/solution/BookingTicket/utils/addProductDecision.js +184 -219
- package/lib/solution/BookingTicket/utils/addTimeAvailability.js +89 -58
- package/lib/solution/BookingTicket/utils/bookingStatus.js +78 -107
- package/lib/solution/BookingTicket/utils/cartView.js +94 -110
- package/lib/solution/BookingTicket/utils/exampleData.js +0 -185
- package/lib/solution/BookingTicket/utils/orderCustomer.js +41 -18
- package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +86 -219
- package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +93 -144
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +91 -79
- package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +41 -54
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -84
- package/lib/solution/BookingTicket/utils/scan/index.js +104 -98
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
- package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +64 -52
- package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +58 -56
- package/lib/solution/BuyTickets/index.js +70 -67
- package/lib/solution/BuyTickets/types.js +38 -22
- package/lib/solution/Checkout/index.js +1158 -1451
- package/lib/solution/Checkout/types.js +61 -91
- package/lib/solution/Checkout/utils/index.js +156 -228
- package/lib/solution/PlaceOrder/index.js +0 -55
- package/lib/solution/RegisterAndLogin/config.js +460 -493
- package/lib/solution/RegisterAndLogin/index.js +630 -633
- package/lib/solution/RegisterAndLogin/types.js +76 -189
- package/lib/solution/RegisterAndLogin/utils.js +125 -183
- package/lib/solution/Sales/index.js +320 -317
- package/lib/solution/Sales/types.js +33 -27
- package/lib/solution/ScanOrder/index.js +862 -831
- package/lib/solution/ScanOrder/types.js +34 -33
- package/lib/solution/ScanOrder/utils.js +371 -406
- package/lib/solution/ShopDiscount/index.js +233 -235
- package/lib/solution/ShopDiscount/types.d.ts +4 -5
- package/lib/solution/ShopDiscount/types.js +37 -15
- package/lib/solution/ShopDiscount/utils.d.ts +0 -9
- package/lib/solution/ShopDiscount/utils.js +172 -309
- package/lib/solution/UnifiedBookingSales/index.js +405 -379
- package/lib/solution/UnifiedBookingSales/types.js +31 -12
- package/lib/solution/VenueBooking/index.d.ts +3 -31
- package/lib/solution/VenueBooking/index.js +916 -967
- package/lib/solution/VenueBooking/types.d.ts +1 -3
- package/lib/solution/VenueBooking/types.js +39 -20
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
- package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
- package/lib/solution/VenueBooking/utils/resource.js +54 -31
- package/lib/solution/VenueBooking/utils/slotMerge.js +107 -94
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
- package/lib/solution/VenueBooking/utils.js +67 -130
- package/lib/solution/index.js +41 -124
- package/lib/store/createStore.js +29 -32
- package/lib/types/index.d.ts +1 -1
- package/lib/types/index.js +16 -4
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +47 -81
- package/package.json +2 -4
- package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
- package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
- package/lib/solution/VenueBooking/utils/smartPricing.js +0 -192
|
@@ -1,15 +1,42 @@
|
|
|
1
|
-
|
|
1
|
+
var __create = Object.create;
|
|
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);
|
|
2
28
|
|
|
3
|
-
|
|
4
|
-
|
|
29
|
+
// src/model/strategy/adapter/walletPass/evaluator.ts
|
|
30
|
+
var evaluator_exports = {};
|
|
31
|
+
__export(evaluator_exports, {
|
|
32
|
+
WalletPassEvaluator: () => WalletPassEvaluator
|
|
5
33
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
|
|
12
|
-
const defaultStrategyMetadataCustom = {
|
|
34
|
+
module.exports = __toCommonJS(evaluator_exports);
|
|
35
|
+
var import__ = require("../../index");
|
|
36
|
+
var import_utils = require("./utils");
|
|
37
|
+
var import_locales = require("./locales");
|
|
38
|
+
var import_decimal = __toESM(require("decimal.js"));
|
|
39
|
+
var defaultStrategyMetadataCustom = {
|
|
13
40
|
maxDeductionAmount: 99999,
|
|
14
41
|
maxUsagePerOrder: 0,
|
|
15
42
|
allowCrossProduct: true,
|
|
@@ -18,54 +45,34 @@ const defaultStrategyMetadataCustom = {
|
|
|
18
45
|
maxPassesPerItem: 0,
|
|
19
46
|
deductOptionPrice: false
|
|
20
47
|
};
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
*/
|
|
26
|
-
const FIELD_REASON_CODE_MAP = {
|
|
27
|
-
orderTotalAmount: 'order_total_amount_not_enough',
|
|
28
|
-
applicableProductTotalAmount: 'applicable_product_total_amount_not_enough',
|
|
29
|
-
applicableProductCount: 'applicable_product_count_not_enough'
|
|
48
|
+
var FIELD_REASON_CODE_MAP = {
|
|
49
|
+
orderTotalAmount: "order_total_amount_not_enough",
|
|
50
|
+
applicableProductTotalAmount: "applicable_product_total_amount_not_enough",
|
|
51
|
+
applicableProductCount: "applicable_product_count_not_enough"
|
|
30
52
|
};
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
*/
|
|
41
|
-
function formatReason(template, value, currency = '') {
|
|
42
|
-
if (!template) return template;
|
|
43
|
-
const v = value === undefined || value === null ? '' : String(value);
|
|
44
|
-
const c = currency === undefined || currency === null ? '' : String(currency);
|
|
45
|
-
// 注意:必须先替换 value,再替换 currency
|
|
46
|
-
// 否则 currency 注入的 "$" 会被后续的 /\$\{value\}/ 正则误吞
|
|
47
|
-
// 使用函数作为替换参数,避免替换串中的 "$" 被 String.prototype.replace
|
|
48
|
-
// 当作特殊序列(如 $$ -> $、$& 等)处理
|
|
53
|
+
var AMOUNT_FIELDS = /* @__PURE__ */ new Set([
|
|
54
|
+
"orderTotalAmount",
|
|
55
|
+
"applicableProductTotalAmount"
|
|
56
|
+
]);
|
|
57
|
+
function formatReason(template, value, currency = "") {
|
|
58
|
+
if (!template)
|
|
59
|
+
return template;
|
|
60
|
+
const v = value === void 0 || value === null ? "" : String(value);
|
|
61
|
+
const c = currency === void 0 || currency === null ? "" : String(currency);
|
|
49
62
|
return template.replace(/\$\{value\}/g, () => v).replace(/\{value\}/g, () => v).replace(/\{currency\}/g, () => c);
|
|
50
63
|
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Wallet Pass 评估器
|
|
54
|
-
* 用于评估哪些 voucher 可以在当前订单中使用
|
|
55
|
-
*/
|
|
56
|
-
class WalletPassEvaluator {
|
|
57
|
-
engine;
|
|
58
|
-
strategyConfigs = [];
|
|
59
|
-
locale = 'en';
|
|
60
|
-
otherParams = {};
|
|
64
|
+
var WalletPassEvaluator = class {
|
|
61
65
|
constructor() {
|
|
62
|
-
this.
|
|
66
|
+
this.strategyConfigs = [];
|
|
67
|
+
this.locale = "en";
|
|
68
|
+
this.otherParams = {};
|
|
69
|
+
this.engine = new import__.StrategyEngine({
|
|
63
70
|
debug: false,
|
|
64
71
|
enableTrace: false
|
|
65
72
|
});
|
|
66
73
|
}
|
|
67
74
|
setStrategyConfigs(strategyConfigs) {
|
|
68
|
-
const newStrategyConfigs = strategyConfigs.filter(item => item.metadata.type ===
|
|
75
|
+
const newStrategyConfigs = strategyConfigs.filter((item) => item.metadata.type === "wallet_pass");
|
|
69
76
|
this.strategyConfigs = newStrategyConfigs;
|
|
70
77
|
}
|
|
71
78
|
getStrategyConfigs() {
|
|
@@ -78,9 +85,9 @@ class WalletPassEvaluator {
|
|
|
78
85
|
this.otherParams = otherParams;
|
|
79
86
|
}
|
|
80
87
|
getText(key) {
|
|
81
|
-
|
|
88
|
+
var _a, _b;
|
|
89
|
+
return (_b = (_a = import_locales.locales) == null ? void 0 : _a[this.locale]) == null ? void 0 : _b[key];
|
|
82
90
|
}
|
|
83
|
-
|
|
84
91
|
/**
|
|
85
92
|
* 搜索券的格式
|
|
86
93
|
* @param input 输入
|
|
@@ -88,19 +95,20 @@ class WalletPassEvaluator {
|
|
|
88
95
|
*/
|
|
89
96
|
searchVoucherFormat(input) {
|
|
90
97
|
const results = this.evaluate(input);
|
|
91
|
-
return results.map(item => {
|
|
98
|
+
return results.map((item) => {
|
|
99
|
+
var _a, _b;
|
|
92
100
|
if (item.isApplicable) {
|
|
93
101
|
return {
|
|
94
102
|
...item.voucher,
|
|
95
103
|
config: {
|
|
96
|
-
...item
|
|
104
|
+
...(_a = item == null ? void 0 : item.strategyResult) == null ? void 0 : _a.config.metadata.custom
|
|
97
105
|
}
|
|
98
106
|
};
|
|
99
107
|
} else {
|
|
100
108
|
return {
|
|
101
109
|
...item.voucher,
|
|
102
110
|
config: {
|
|
103
|
-
...item
|
|
111
|
+
...(_b = item == null ? void 0 : item.strategyResult) == null ? void 0 : _b.config.metadata.custom
|
|
104
112
|
},
|
|
105
113
|
_unified_available_status: 0,
|
|
106
114
|
reason: item.reason,
|
|
@@ -109,28 +117,20 @@ class WalletPassEvaluator {
|
|
|
109
117
|
}
|
|
110
118
|
});
|
|
111
119
|
}
|
|
112
|
-
|
|
113
120
|
/**
|
|
114
121
|
* 评估可用的 vouchers
|
|
115
122
|
*/
|
|
116
123
|
evaluate(input) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
vouchers,
|
|
121
|
-
strategyConfigs
|
|
122
|
-
} = input;
|
|
123
|
-
|
|
124
|
-
// 提取订单中的商品ID
|
|
125
|
-
const productIds = products.map(p => p.product_id);
|
|
124
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
125
|
+
const { orderTotalAmount, products, vouchers, strategyConfigs } = input;
|
|
126
|
+
const productIds = products.map((p) => p.product_id);
|
|
126
127
|
const results = [];
|
|
127
|
-
|
|
128
|
-
// 遍历每个 voucher 进行评估
|
|
129
128
|
for (const voucher of vouchers) {
|
|
130
|
-
|
|
131
|
-
|
|
129
|
+
const applicableStrategies = this.findApplicableStrategies(
|
|
130
|
+
voucher,
|
|
131
|
+
strategyConfigs || this.strategyConfigs
|
|
132
|
+
);
|
|
132
133
|
if (applicableStrategies.length === 0) {
|
|
133
|
-
// 没有匹配的策略 默认可用
|
|
134
134
|
results.push({
|
|
135
135
|
voucher,
|
|
136
136
|
isApplicable: true,
|
|
@@ -138,8 +138,8 @@ class WalletPassEvaluator {
|
|
|
138
138
|
maxDeduction: 0,
|
|
139
139
|
deductTaxAndFee: true,
|
|
140
140
|
applicableProductIds: [],
|
|
141
|
-
reason:
|
|
142
|
-
reasonCode:
|
|
141
|
+
reason: "",
|
|
142
|
+
reasonCode: "",
|
|
143
143
|
strategyResult: {
|
|
144
144
|
config: {
|
|
145
145
|
metadata: {
|
|
@@ -152,20 +152,13 @@ class WalletPassEvaluator {
|
|
|
152
152
|
});
|
|
153
153
|
continue;
|
|
154
154
|
}
|
|
155
|
-
|
|
156
|
-
// 对每个策略进行评估(取第一个匹配的策略)
|
|
157
155
|
const strategy = applicableStrategies[0];
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
applicableTotal,
|
|
165
|
-
applicableCount
|
|
166
|
-
} = this.calculateApplicableProducts(products, applicableProductIds, strategy?.metadata?.custom?.deductTaxAndFee ?? true);
|
|
167
|
-
|
|
168
|
-
// 准备运行时上下文
|
|
156
|
+
const applicableProductIds = (0, import_utils.getApplicableProductIds)(voucher);
|
|
157
|
+
const { applicableTotal, applicableCount } = this.calculateApplicableProducts(
|
|
158
|
+
products,
|
|
159
|
+
applicableProductIds,
|
|
160
|
+
((_b = (_a = strategy == null ? void 0 : strategy.metadata) == null ? void 0 : _a.custom) == null ? void 0 : _b.deductTaxAndFee) ?? true
|
|
161
|
+
);
|
|
169
162
|
const context = {
|
|
170
163
|
entities: {
|
|
171
164
|
voucher,
|
|
@@ -176,7 +169,7 @@ class WalletPassEvaluator {
|
|
|
176
169
|
}
|
|
177
170
|
},
|
|
178
171
|
attributes: {
|
|
179
|
-
orderTotalAmount
|
|
172
|
+
orderTotalAmount,
|
|
180
173
|
applicableProductTotalAmount: applicableTotal,
|
|
181
174
|
applicableProductCount: applicableCount,
|
|
182
175
|
voucherProductId: voucher.product_id,
|
|
@@ -186,11 +179,7 @@ class WalletPassEvaluator {
|
|
|
186
179
|
timestamp: Date.now()
|
|
187
180
|
}
|
|
188
181
|
};
|
|
189
|
-
|
|
190
|
-
// 执行策略评估
|
|
191
182
|
const evaluationResult = this.engine.evaluate(strategy, context);
|
|
192
|
-
|
|
193
|
-
// 从策略配置中获取业务配置
|
|
194
183
|
const businessConfig = strategy.metadata.custom || {};
|
|
195
184
|
const maxDeduction = businessConfig.maxDeductionAmount || 0;
|
|
196
185
|
const canUseCount = businessConfig.maxUsagePerOrder || 0;
|
|
@@ -206,29 +195,27 @@ class WalletPassEvaluator {
|
|
|
206
195
|
strategyResult: evaluationResult
|
|
207
196
|
});
|
|
208
197
|
} else {
|
|
209
|
-
|
|
210
|
-
let
|
|
211
|
-
|
|
212
|
-
const
|
|
213
|
-
const failedRule = evaluationResult.matched?.failedRules?.[0];
|
|
198
|
+
let reasonCode = "not_meet_the_required_conditions";
|
|
199
|
+
let thresholdValue = void 0;
|
|
200
|
+
const failedField = (_c = evaluationResult.matched) == null ? void 0 : _c.failedField;
|
|
201
|
+
const failedRule = (_e = (_d = evaluationResult.matched) == null ? void 0 : _d.failedRules) == null ? void 0 : _e[0];
|
|
214
202
|
if (failedField && FIELD_REASON_CODE_MAP[failedField]) {
|
|
215
203
|
reasonCode = FIELD_REASON_CODE_MAP[failedField];
|
|
216
|
-
thresholdValue = failedRule
|
|
204
|
+
thresholdValue = failedRule == null ? void 0 : failedRule.value;
|
|
217
205
|
} else if (evaluationResult.code) {
|
|
218
|
-
// 兜底:保留原有 code → reasonCode 映射
|
|
219
206
|
const codeMapping = {
|
|
220
|
-
INSUFFICIENT_AMOUNT:
|
|
221
|
-
USAGE_LIMIT_EXCEEDED:
|
|
222
|
-
CHANNEL_NOT_ALLOWED:
|
|
223
|
-
ORDER_TYPE_NOT_ALLOWED:
|
|
224
|
-
DEDUCTION_LIMIT_EXCEEDED:
|
|
207
|
+
INSUFFICIENT_AMOUNT: "not_meet_the_required_conditions",
|
|
208
|
+
USAGE_LIMIT_EXCEEDED: "usage_limit_reached",
|
|
209
|
+
CHANNEL_NOT_ALLOWED: "not_available_for_this_channel",
|
|
210
|
+
ORDER_TYPE_NOT_ALLOWED: "not_valid_for_this_order_type",
|
|
211
|
+
DEDUCTION_LIMIT_EXCEEDED: "exceeds_the_maximum_deduction_limit"
|
|
225
212
|
};
|
|
226
|
-
reasonCode = codeMapping[evaluationResult.code] ||
|
|
213
|
+
reasonCode = codeMapping[evaluationResult.code] || "not_meet_the_required_conditions";
|
|
227
214
|
}
|
|
228
215
|
const rawText = this.getText(reasonCode);
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
const reason = thresholdValue !==
|
|
216
|
+
const currency = failedField && AMOUNT_FIELDS.has(failedField) ? ((_g = (_f = this.otherParams) == null ? void 0 : _f.getData) == null ? void 0 : _g.call(_f, "shop_symbol")) || "" : "";
|
|
217
|
+
console.log(currency, "currency12345");
|
|
218
|
+
const reason = thresholdValue !== void 0 ? formatReason(rawText, thresholdValue, currency) : rawText;
|
|
232
219
|
results.push({
|
|
233
220
|
voucher,
|
|
234
221
|
isApplicable: false,
|
|
@@ -237,47 +224,36 @@ class WalletPassEvaluator {
|
|
|
237
224
|
deductTaxAndFee: false,
|
|
238
225
|
applicableProductIds: [],
|
|
239
226
|
reason,
|
|
240
|
-
reasonCode
|
|
227
|
+
reasonCode,
|
|
241
228
|
strategyResult: evaluationResult
|
|
242
229
|
});
|
|
243
230
|
}
|
|
244
231
|
}
|
|
245
232
|
return results;
|
|
246
233
|
}
|
|
247
|
-
|
|
248
234
|
/** 检查代金券/折扣卡是否可用 并返回config */
|
|
249
235
|
checkVoucherAvailability(input) {
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
products,
|
|
253
|
-
vouchers
|
|
254
|
-
} = input;
|
|
236
|
+
var _a, _b, _c, _d, _e;
|
|
237
|
+
const { orderTotalAmount, products, vouchers } = input;
|
|
255
238
|
const results = this.evaluate(input);
|
|
256
|
-
const isAvailable = results[0]
|
|
239
|
+
const isAvailable = ((_a = results[0]) == null ? void 0 : _a.isApplicable) || false;
|
|
257
240
|
return {
|
|
258
241
|
isAvailable,
|
|
259
242
|
config: {
|
|
260
|
-
...results[0]
|
|
243
|
+
...(_e = (_d = (_c = (_b = results[0]) == null ? void 0 : _b.strategyResult) == null ? void 0 : _c.config) == null ? void 0 : _d.metadata) == null ? void 0 : _e.custom
|
|
261
244
|
}
|
|
262
245
|
};
|
|
263
246
|
}
|
|
264
|
-
|
|
265
247
|
/**
|
|
266
248
|
* 获取推荐券
|
|
267
249
|
* @param input 输入
|
|
268
250
|
* @returns 返回推荐券列表
|
|
269
251
|
*/
|
|
270
252
|
getRecommendedVouchers(input) {
|
|
271
|
-
const {
|
|
272
|
-
orderTotalAmount,
|
|
273
|
-
products,
|
|
274
|
-
vouchers
|
|
275
|
-
} = input;
|
|
276
|
-
// 基于后端返回的状态不可用券
|
|
253
|
+
const { orderTotalAmount, products, vouchers } = input;
|
|
277
254
|
const noApplicableVoucher = [];
|
|
278
|
-
// 基于后端返回的状态可用券
|
|
279
255
|
const applicableVoucher = [];
|
|
280
|
-
vouchers.forEach(voucher => {
|
|
256
|
+
vouchers.forEach((voucher) => {
|
|
281
257
|
if (voucher.unified_available_status === 1) {
|
|
282
258
|
applicableVoucher.push(voucher);
|
|
283
259
|
} else {
|
|
@@ -289,17 +265,17 @@ class WalletPassEvaluator {
|
|
|
289
265
|
vouchers: applicableVoucher
|
|
290
266
|
});
|
|
291
267
|
const newVouchers = [];
|
|
292
|
-
results.forEach(item => {
|
|
268
|
+
results.forEach((item) => {
|
|
269
|
+
var _a, _b, _c;
|
|
293
270
|
if (item.isApplicable) {
|
|
294
271
|
newVouchers.push({
|
|
295
272
|
...item.voucher,
|
|
296
273
|
config: {
|
|
297
274
|
...defaultStrategyMetadataCustom,
|
|
298
|
-
...(item
|
|
275
|
+
...((_c = (_b = (_a = item == null ? void 0 : item.strategyResult) == null ? void 0 : _a.config) == null ? void 0 : _b.metadata) == null ? void 0 : _c.custom) || {}
|
|
299
276
|
}
|
|
300
277
|
});
|
|
301
278
|
} else {
|
|
302
|
-
// 不可用的券,添加原因信息
|
|
303
279
|
noApplicableVoucher.push({
|
|
304
280
|
...item.voucher,
|
|
305
281
|
_unified_available_status: 0,
|
|
@@ -308,12 +284,13 @@ class WalletPassEvaluator {
|
|
|
308
284
|
});
|
|
309
285
|
}
|
|
310
286
|
});
|
|
311
|
-
const {
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
287
|
+
const { recommended, transformList } = this.processVouchers(
|
|
288
|
+
newVouchers,
|
|
289
|
+
orderTotalAmount,
|
|
290
|
+
products
|
|
291
|
+
);
|
|
315
292
|
const recommendedAmount = recommended.reduce((sum, item) => {
|
|
316
|
-
return new
|
|
293
|
+
return new import_decimal.default(sum).add(item._available_max_amount || 0).toNumber();
|
|
317
294
|
}, 0);
|
|
318
295
|
return {
|
|
319
296
|
// 推荐券总金额
|
|
@@ -335,7 +312,6 @@ class WalletPassEvaluator {
|
|
|
335
312
|
}
|
|
336
313
|
return voucher;
|
|
337
314
|
}
|
|
338
|
-
|
|
339
315
|
/**
|
|
340
316
|
* 优惠券处理函数
|
|
341
317
|
* @param applicableVouchers 可用的券列表
|
|
@@ -344,13 +320,16 @@ class WalletPassEvaluator {
|
|
|
344
320
|
* @returns 返回推荐券列表和全部列表,每个券包含 _available_max_amount 和 _unified_available_status
|
|
345
321
|
*/
|
|
346
322
|
processVouchers(vouchers, orderTotalAmount, products) {
|
|
347
|
-
const result = (0,
|
|
323
|
+
const result = (0, import_utils.processVouchers)(vouchers, orderTotalAmount, products);
|
|
348
324
|
return {
|
|
349
|
-
recommended: result.recommended.map(
|
|
350
|
-
|
|
325
|
+
recommended: result.recommended.map(
|
|
326
|
+
(item) => this.enhanceWithReason(item)
|
|
327
|
+
),
|
|
328
|
+
transformList: result.transformList.map(
|
|
329
|
+
(item) => this.enhanceWithReason(item)
|
|
330
|
+
)
|
|
351
331
|
};
|
|
352
332
|
}
|
|
353
|
-
|
|
354
333
|
/**
|
|
355
334
|
* 重新计算优惠券状态(基于已选券的增量计算)
|
|
356
335
|
* @param allVouchers 所有原始券列表
|
|
@@ -360,44 +339,47 @@ class WalletPassEvaluator {
|
|
|
360
339
|
* @returns 返回更新后的所有券列表和已选券的详细抵扣信息
|
|
361
340
|
*/
|
|
362
341
|
recalculateVouchers(allVouchers, selectedVouchers, orderTotalAmount, products) {
|
|
363
|
-
const result = (0,
|
|
342
|
+
const result = (0, import_utils.recalculateVouchers)(
|
|
343
|
+
allVouchers,
|
|
344
|
+
selectedVouchers,
|
|
345
|
+
orderTotalAmount,
|
|
346
|
+
products
|
|
347
|
+
);
|
|
364
348
|
return {
|
|
365
|
-
allWithUpdatedStatus: result.allWithUpdatedStatus.map(
|
|
366
|
-
|
|
349
|
+
allWithUpdatedStatus: result.allWithUpdatedStatus.map(
|
|
350
|
+
(item) => this.enhanceWithReason(item)
|
|
351
|
+
),
|
|
352
|
+
selectedWithDetails: result.selectedWithDetails.map(
|
|
353
|
+
(item) => this.enhanceWithReason(item)
|
|
354
|
+
)
|
|
367
355
|
};
|
|
368
356
|
}
|
|
369
|
-
|
|
370
357
|
/**
|
|
371
358
|
* 查找适用于指定 voucher 的策略配置
|
|
372
359
|
*/
|
|
373
360
|
findApplicableStrategies(voucher, strategyConfigs) {
|
|
374
|
-
return strategyConfigs.filter(config => {
|
|
375
|
-
// 检查策略的 conditions 中是否包含匹配此 voucher 的规则
|
|
361
|
+
return strategyConfigs.filter((config) => {
|
|
376
362
|
return this.checkVoucherInStrategy(voucher.product_id, config);
|
|
377
363
|
});
|
|
378
364
|
}
|
|
379
|
-
|
|
380
365
|
/**
|
|
381
366
|
* 检查策略中是否包含指定的 voucher ID
|
|
382
367
|
*/
|
|
383
368
|
checkVoucherInStrategy(voucherProductId, config) {
|
|
384
369
|
const rules = config.conditions.rules;
|
|
385
370
|
for (const rule of rules) {
|
|
386
|
-
|
|
387
|
-
if ('operator' in rule && 'rules' in rule) {
|
|
371
|
+
if ("operator" in rule && "rules" in rule) {
|
|
388
372
|
if (this.checkVoucherInConditionGroup(voucherProductId, rule)) {
|
|
389
373
|
return true;
|
|
390
374
|
}
|
|
391
375
|
} else {
|
|
392
|
-
// 检查是否是 voucherProductId 字段的规则
|
|
393
376
|
const conditionRule = rule;
|
|
394
|
-
if (conditionRule.field ===
|
|
377
|
+
if (conditionRule.field === "voucherProductId" && conditionRule.operator === "in" && Array.isArray(conditionRule.value)) {
|
|
395
378
|
if (conditionRule.value.includes(voucherProductId)) {
|
|
396
379
|
return true;
|
|
397
380
|
}
|
|
398
381
|
}
|
|
399
|
-
|
|
400
|
-
if (conditionRule.field === 'voucherProductId' && (conditionRule.operator === '=' || conditionRule.operator === '==')) {
|
|
382
|
+
if (conditionRule.field === "voucherProductId" && (conditionRule.operator === "=" || conditionRule.operator === "==")) {
|
|
401
383
|
if (conditionRule.value === voucherProductId) {
|
|
402
384
|
return true;
|
|
403
385
|
}
|
|
@@ -406,23 +388,22 @@ class WalletPassEvaluator {
|
|
|
406
388
|
}
|
|
407
389
|
return false;
|
|
408
390
|
}
|
|
409
|
-
|
|
410
391
|
/**
|
|
411
392
|
* 递归检查条件组中是否包含 voucher ID
|
|
412
393
|
*/
|
|
413
394
|
checkVoucherInConditionGroup(voucherProductId, group) {
|
|
414
395
|
for (const rule of group.rules) {
|
|
415
|
-
if (
|
|
396
|
+
if ("operator" in rule && "rules" in rule) {
|
|
416
397
|
if (this.checkVoucherInConditionGroup(voucherProductId, rule)) {
|
|
417
398
|
return true;
|
|
418
399
|
}
|
|
419
400
|
} else {
|
|
420
|
-
if (rule.field ===
|
|
401
|
+
if (rule.field === "voucherProductId" && rule.operator === "in" && Array.isArray(rule.value)) {
|
|
421
402
|
if (rule.value.includes(voucherProductId)) {
|
|
422
403
|
return true;
|
|
423
404
|
}
|
|
424
405
|
}
|
|
425
|
-
if (rule.field ===
|
|
406
|
+
if (rule.field === "voucherProductId" && (rule.operator === "=" || rule.operator === "==")) {
|
|
426
407
|
if (rule.value === voucherProductId) {
|
|
427
408
|
return true;
|
|
428
409
|
}
|
|
@@ -431,53 +412,44 @@ class WalletPassEvaluator {
|
|
|
431
412
|
}
|
|
432
413
|
return false;
|
|
433
414
|
}
|
|
434
|
-
|
|
435
415
|
/**
|
|
436
416
|
* 计算适用商品的总金额和数量
|
|
437
417
|
*/
|
|
438
418
|
calculateApplicableProducts(products, applicableProductIds, deductTaxAndFee) {
|
|
419
|
+
console.log(products, "products1234");
|
|
439
420
|
let total = 0;
|
|
440
421
|
let count = 0;
|
|
441
|
-
|
|
442
|
-
// 如果为空数组,不适用任何商品
|
|
443
422
|
if (applicableProductIds !== null && applicableProductIds.length === 0) {
|
|
444
|
-
return {
|
|
445
|
-
applicableTotal: 0,
|
|
446
|
-
applicableCount: 0
|
|
447
|
-
};
|
|
423
|
+
return { applicableTotal: 0, applicableCount: 0 };
|
|
448
424
|
}
|
|
449
|
-
products.forEach(product => {
|
|
450
|
-
const productQuantity = (0,
|
|
451
|
-
|
|
452
|
-
// 检查主商品是否适用
|
|
425
|
+
products.forEach((product) => {
|
|
426
|
+
const productQuantity = (0, import_utils.getProductQuantity)(product);
|
|
453
427
|
const isMainProductApplicable = applicableProductIds === null || applicableProductIds.includes(product.product_id);
|
|
454
428
|
if (isMainProductApplicable) {
|
|
455
|
-
|
|
456
|
-
total += (0, _utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity + (0, _utils.getTaxAndFeeRoundingRemainder)(product, deductTaxAndFee) - (0, _utils.getProductDiscountDifference)(product);
|
|
429
|
+
total += (0, import_utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity;
|
|
457
430
|
count += productQuantity;
|
|
458
431
|
}
|
|
459
|
-
|
|
460
|
-
// 检查原价子商品(需要单独判断适用性)
|
|
461
432
|
if (product.product_bundle && product.product_bundle.length > 0) {
|
|
462
|
-
product.product_bundle.forEach(bundleItem => {
|
|
463
|
-
|
|
464
|
-
if ((0, _utils.getBundleItemIsOriginalPrice)(bundleItem)) {
|
|
465
|
-
// 检查子商品是否适用
|
|
433
|
+
product.product_bundle.forEach((bundleItem) => {
|
|
434
|
+
if ((0, import_utils.getBundleItemIsOriginalPrice)(bundleItem)) {
|
|
466
435
|
const isBundleItemApplicable = applicableProductIds === null || applicableProductIds.includes(bundleItem.bundle_product_id);
|
|
467
436
|
if (isBundleItemApplicable) {
|
|
468
|
-
// 计算原价子商品价格 = 总价 + 舍入余数 - 商品差额
|
|
469
437
|
const bundleItemQuantity = bundleItem.num * productQuantity;
|
|
470
|
-
total += (0,
|
|
438
|
+
total += (0, import_utils.getBundleItemPrice)(
|
|
439
|
+
bundleItem,
|
|
440
|
+
productQuantity,
|
|
441
|
+
deductTaxAndFee
|
|
442
|
+
);
|
|
471
443
|
count += bundleItemQuantity;
|
|
472
444
|
}
|
|
473
445
|
}
|
|
474
446
|
});
|
|
475
447
|
}
|
|
476
448
|
});
|
|
477
|
-
return {
|
|
478
|
-
applicableTotal: total,
|
|
479
|
-
applicableCount: count
|
|
480
|
-
};
|
|
449
|
+
return { applicableTotal: total, applicableCount: count };
|
|
481
450
|
}
|
|
482
|
-
}
|
|
483
|
-
|
|
451
|
+
};
|
|
452
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
453
|
+
0 && (module.exports = {
|
|
454
|
+
WalletPassEvaluator
|
|
455
|
+
});
|