@pisell/pisellos 0.0.567 → 0.0.568
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 -9
- package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
- package/dist/model/strategy/adapter/walletPass/example.js +3 -26
- package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
- 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 +1 -4
- package/dist/modules/OpenData/index.js +0 -2
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +14 -41
- package/dist/modules/Payment/index.js +142 -270
- package/dist/modules/Payment/walletpass.js +4 -5
- package/dist/modules/Rules/index.js +0 -7
- 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 +88 -121
- package/dist/server/modules/menu/index.js +32 -41
- package/dist/server/modules/products/index.js +29 -49
- 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 +32 -40
- package/dist/server/utils/product.js +0 -1
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- 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.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +5 -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 -246
- 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.d.ts +5 -0
- package/dist/solution/VenueBooking/index.js +364 -327
- 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 +130 -131
- package/lib/effects/index.js +46 -57
- package/lib/index.js +92 -53
- 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 +84 -63
- package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
- package/lib/model/strategy/adapter/promotion/examples.js +139 -159
- package/lib/model/strategy/adapter/promotion/index.js +1 -49
- package/lib/model/strategy/adapter/promotion/type.js +199 -35
- package/lib/model/strategy/adapter/type.js +4 -16
- package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
- 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 +652 -402
- 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 +22 -45
- 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 +306 -241
- package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
- package/lib/modules/Cart/utils/cartResource.js +72 -78
- package/lib/modules/Cart/utils/changePrice.js +26 -62
- package/lib/modules/Cart/utils/index.js +106 -48
- package/lib/modules/Customer/constants.js +13 -34
- package/lib/modules/Customer/index.js +216 -153
- 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 +117 -113
- 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 +63 -74
- package/lib/modules/OpenData/types.js +4 -16
- package/lib/modules/OpenData/utils.js +44 -78
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +332 -320
- package/lib/modules/Order/types.js +24 -33
- package/lib/modules/Order/utils.js +350 -284
- 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 +566 -432
- package/lib/modules/Payment/mx51.js +1 -0
- package/lib/modules/Payment/types.js +216 -107
- package/lib/modules/Payment/utils.js +50 -47
- package/lib/modules/Payment/walletpass.js +221 -203
- 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 +111 -110
- package/lib/modules/ProductList/types.js +9 -31
- package/lib/modules/Quotation/index.js +60 -82
- 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/Rules/index.js +1172 -872
- package/lib/modules/Rules/types.js +17 -40
- package/lib/modules/SalesSummary/index.js +59 -68
- package/lib/modules/SalesSummary/types.js +4 -16
- package/lib/modules/SalesSummary/utils.js +176 -193
- 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 -167
- package/lib/modules/Schedule/index.js +97 -107
- 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 -70
- package/lib/modules/Summary/types.js +4 -16
- package/lib/modules/Summary/utils.js +782 -429
- package/lib/modules/index.js +212 -57
- 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 +882 -623
- package/lib/server/modules/index.js +85 -59
- package/lib/server/modules/menu/index.js +146 -122
- package/lib/server/modules/menu/types.js +18 -31
- package/lib/server/modules/order/index.js +195 -231
- package/lib/server/modules/order/types.js +107 -32
- package/lib/server/modules/order/utils/filterBookings.js +174 -140
- package/lib/server/modules/order/utils/filterOrders.js +89 -60
- package/lib/server/modules/products/index.js +430 -335
- package/lib/server/modules/products/types.js +41 -34
- package/lib/server/modules/quotation/index.js +76 -77
- package/lib/server/modules/quotation/types.js +21 -31
- package/lib/server/modules/resource/index.js +216 -187
- package/lib/server/modules/resource/types.js +42 -33
- package/lib/server/modules/schedule/index.js +134 -119
- 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/time.js +40 -49
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +1530 -1343
- 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.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +147 -122
- package/lib/solution/BookingTicket/types.js +38 -64
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
- package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
- package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
- 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 +227 -158
- 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 +218 -200
- package/lib/solution/Sales/types.js +27 -33
- package/lib/solution/ScanOrder/index.js +803 -840
- package/lib/solution/ScanOrder/types.js +34 -34
- package/lib/solution/ScanOrder/utils.js +372 -331
- package/lib/solution/ShopDiscount/index.js +230 -236
- package/lib/solution/ShopDiscount/types.js +15 -37
- package/lib/solution/ShopDiscount/utils.js +309 -172
- package/lib/solution/VenueBooking/index.d.ts +5 -0
- package/lib/solution/VenueBooking/index.js +886 -929
- package/lib/solution/VenueBooking/types.js +20 -40
- package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
- package/lib/solution/VenueBooking/utils/resource.js +31 -54
- package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
- package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
- package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
- package/lib/solution/VenueBooking/utils.js +130 -67
- package/lib/solution/index.js +102 -37
- package/lib/store/createStore.js +32 -29
- package/lib/types/index.js +4 -16
- package/lib/utils/task.js +36 -36
- package/lib/utils/watch.js +81 -47
- package/package.json +2 -1
|
@@ -1,60 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
ItemRuleEvaluator: true,
|
|
8
|
+
ItemRuleAdapter: true,
|
|
9
|
+
MIN_CONDIMENT_PER_PERSON_STRATEGY: true,
|
|
10
|
+
MAX_BUNS_PER_TABLE_STRATEGY: true,
|
|
11
|
+
HOTPOT_BASE_REQUIRED_STRATEGY: true,
|
|
12
|
+
HOTPOT_BASE_PICK_ONE_STRATEGY: true,
|
|
13
|
+
quickUseItemRuleEvaluator: true,
|
|
14
|
+
runItemRuleEvaluatorDemo: true
|
|
10
15
|
};
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
Object.defineProperty(exports, "HOTPOT_BASE_PICK_ONE_STRATEGY", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _examples.HOTPOT_BASE_PICK_ONE_STRATEGY;
|
|
16
20
|
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/model/strategy/adapter/itemRule/index.ts
|
|
31
|
-
var itemRule_exports = {};
|
|
32
|
-
__export(itemRule_exports, {
|
|
33
|
-
HOTPOT_BASE_PICK_ONE_STRATEGY: () => import_examples.HOTPOT_BASE_PICK_ONE_STRATEGY,
|
|
34
|
-
HOTPOT_BASE_REQUIRED_STRATEGY: () => import_examples.HOTPOT_BASE_REQUIRED_STRATEGY,
|
|
35
|
-
ItemRuleAdapter: () => import_adapter.ItemRuleAdapter,
|
|
36
|
-
ItemRuleEvaluator: () => import_evaluator.ItemRuleEvaluator,
|
|
37
|
-
MAX_BUNS_PER_TABLE_STRATEGY: () => import_examples.MAX_BUNS_PER_TABLE_STRATEGY,
|
|
38
|
-
MIN_CONDIMENT_PER_PERSON_STRATEGY: () => import_examples.MIN_CONDIMENT_PER_PERSON_STRATEGY,
|
|
39
|
-
default: () => import_adapter2.default,
|
|
40
|
-
quickUseItemRuleEvaluator: () => import_examples.quickUseItemRuleEvaluator,
|
|
41
|
-
runItemRuleEvaluatorDemo: () => import_examples.runItemRuleEvaluatorDemo
|
|
42
|
-
});
|
|
43
|
-
module.exports = __toCommonJS(itemRule_exports);
|
|
44
|
-
var import_evaluator = require("./evaluator");
|
|
45
|
-
var import_adapter = require("./adapter");
|
|
46
|
-
var import_adapter2 = __toESM(require("./adapter"));
|
|
47
|
-
var import_examples = require("./examples");
|
|
48
|
-
__reExport(itemRule_exports, require("./type"), module.exports);
|
|
49
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
50
|
-
0 && (module.exports = {
|
|
51
|
-
HOTPOT_BASE_PICK_ONE_STRATEGY,
|
|
52
|
-
HOTPOT_BASE_REQUIRED_STRATEGY,
|
|
53
|
-
ItemRuleAdapter,
|
|
54
|
-
ItemRuleEvaluator,
|
|
55
|
-
MAX_BUNS_PER_TABLE_STRATEGY,
|
|
56
|
-
MIN_CONDIMENT_PER_PERSON_STRATEGY,
|
|
57
|
-
quickUseItemRuleEvaluator,
|
|
58
|
-
runItemRuleEvaluatorDemo,
|
|
59
|
-
...require("./type")
|
|
60
21
|
});
|
|
22
|
+
Object.defineProperty(exports, "HOTPOT_BASE_REQUIRED_STRATEGY", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return _examples.HOTPOT_BASE_REQUIRED_STRATEGY;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports, "ItemRuleAdapter", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function () {
|
|
31
|
+
return _adapter.ItemRuleAdapter;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(exports, "ItemRuleEvaluator", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return _evaluator.ItemRuleEvaluator;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(exports, "MAX_BUNS_PER_TABLE_STRATEGY", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
get: function () {
|
|
43
|
+
return _examples.MAX_BUNS_PER_TABLE_STRATEGY;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(exports, "MIN_CONDIMENT_PER_PERSON_STRATEGY", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: function () {
|
|
49
|
+
return _examples.MIN_CONDIMENT_PER_PERSON_STRATEGY;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(exports, "default", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
get: function () {
|
|
55
|
+
return _adapter.default;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(exports, "quickUseItemRuleEvaluator", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
get: function () {
|
|
61
|
+
return _examples.quickUseItemRuleEvaluator;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
Object.defineProperty(exports, "runItemRuleEvaluatorDemo", {
|
|
65
|
+
enumerable: true,
|
|
66
|
+
get: function () {
|
|
67
|
+
return _examples.runItemRuleEvaluatorDemo;
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
var _evaluator = require("./evaluator");
|
|
71
|
+
var _adapter = _interopRequireWildcard(require("./adapter"));
|
|
72
|
+
var _examples = require("./examples");
|
|
73
|
+
var _type = require("./type");
|
|
74
|
+
Object.keys(_type).forEach(function (key) {
|
|
75
|
+
if (key === "default" || key === "__esModule") return;
|
|
76
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
77
|
+
if (key in exports && exports[key] === _type[key]) return;
|
|
78
|
+
Object.defineProperty(exports, key, {
|
|
79
|
+
enumerable: true,
|
|
80
|
+
get: function () {
|
|
81
|
+
return _type[key];
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
86
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
@@ -1,46 +1,107 @@
|
|
|
1
|
-
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";
|
|
18
2
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
__export(type_exports, {
|
|
22
|
-
ITEM_RULE_ACTION_TYPES: () => ITEM_RULE_ACTION_TYPES,
|
|
23
|
-
ITEM_RULE_TEMPLATES: () => ITEM_RULE_TEMPLATES
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
26
|
-
|
|
6
|
+
exports.ITEM_RULE_TEMPLATES = exports.ITEM_RULE_ACTION_TYPES = void 0;
|
|
7
|
+
// ============================================
|
|
8
|
+
// Action Type 常量
|
|
9
|
+
// ============================================
|
|
10
|
+
|
|
11
|
+
const ITEM_RULE_ACTION_TYPES = exports.ITEM_RULE_ACTION_TYPES = {
|
|
27
12
|
/** 数量校验 */
|
|
28
|
-
QUANTITY_CHECK:
|
|
13
|
+
QUANTITY_CHECK: 'QUANTITY_CHECK',
|
|
29
14
|
/** 预填购物车 */
|
|
30
|
-
PREFILL_CART:
|
|
15
|
+
PREFILL_CART: 'PREFILL_CART'
|
|
31
16
|
};
|
|
32
|
-
|
|
17
|
+
// ============================================
|
|
18
|
+
// Rule Template 类型(创建规则时的起始模板)
|
|
19
|
+
// ============================================
|
|
20
|
+
|
|
21
|
+
const ITEM_RULE_TEMPLATES = exports.ITEM_RULE_TEMPLATES = {
|
|
33
22
|
/** 空白规则 */
|
|
34
|
-
BLANK:
|
|
23
|
+
BLANK: 'blank',
|
|
35
24
|
/** 人数关联最少量(每人至少N份) */
|
|
36
|
-
MINIMUM_PER_PERSON:
|
|
25
|
+
MINIMUM_PER_PERSON: 'minimum_per_person',
|
|
37
26
|
/** 每桌限量 */
|
|
38
|
-
MAXIMUM_PER_TABLE:
|
|
27
|
+
MAXIMUM_PER_TABLE: 'maximum_per_table',
|
|
39
28
|
/** 必选商品 */
|
|
40
|
-
MUST_INCLUDE:
|
|
29
|
+
MUST_INCLUDE: 'must_include'
|
|
41
30
|
};
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
|
|
32
|
+
// ============================================
|
|
33
|
+
// Quantity Check 相关类型
|
|
34
|
+
// ============================================
|
|
35
|
+
|
|
36
|
+
/** 数量比较类型 */
|
|
37
|
+
|
|
38
|
+
/** 数量来源 */
|
|
39
|
+
|
|
40
|
+
/** 目标类型(当前仅支持按商品) */
|
|
41
|
+
|
|
42
|
+
/** 作用范围 */
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 单条数量规则
|
|
46
|
+
*
|
|
47
|
+
* 例如:Minimum + Total Pax 表示"最少数量 = 总人数"
|
|
48
|
+
* 例如:Maximum + Fixed + 10 表示"最多10份"
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Quantity Check Action 的详细配置
|
|
53
|
+
*
|
|
54
|
+
* 存储在 ActionEffect.config 中
|
|
55
|
+
*/
|
|
56
|
+
|
|
57
|
+
/** 目标项 */
|
|
58
|
+
|
|
59
|
+
// ============================================
|
|
60
|
+
// Prefill Cart 相关类型
|
|
61
|
+
// ============================================
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 预填商品项
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Prefill Cart Action 的详细配置
|
|
69
|
+
*
|
|
70
|
+
* 存储在 ActionEffect.config 中
|
|
71
|
+
*/
|
|
72
|
+
|
|
73
|
+
// ============================================
|
|
74
|
+
// 业务数据类型(Evaluator 输入)
|
|
75
|
+
// ============================================
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* 购物车商品摘要
|
|
79
|
+
*/
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 就餐人数信息
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* ItemRule 评估器的输入业务数据
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
// ============================================
|
|
90
|
+
// 评估结果类型
|
|
91
|
+
// ============================================
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* 单个 Quantity Check 的校验结果
|
|
95
|
+
*/
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* 单个 Prefill Cart 的预填结果
|
|
99
|
+
*/
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* 单条规则的数量限制(不含校验结果,仅描述配置中的约束)
|
|
103
|
+
*/
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* ItemRule 评估器的完整输出结果
|
|
107
|
+
*/
|
|
@@ -1,43 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
|
|
19
|
-
// src/model/strategy/adapter/promotion/adapter.ts
|
|
20
|
-
var adapter_exports = {};
|
|
21
|
-
__export(adapter_exports, {
|
|
22
|
-
PromotionAdapter: () => PromotionAdapter,
|
|
23
|
-
default: () => adapter_default
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
24
5
|
});
|
|
25
|
-
|
|
26
|
-
var
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
6
|
+
exports.default = exports.PromotionAdapter = void 0;
|
|
7
|
+
var _type = require("./type");
|
|
8
|
+
// ============================================
|
|
9
|
+
// Promotion 适配器实现
|
|
10
|
+
// ============================================
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Promotion 适配器
|
|
14
|
+
*
|
|
15
|
+
* 用于将促销活动业务数据转换为策略引擎可识别的格式
|
|
16
|
+
* 策略引擎只负责匹配,具体的优惠计算由业务层完成
|
|
17
|
+
*/
|
|
18
|
+
class PromotionAdapter {
|
|
19
|
+
name = 'PromotionAdapter';
|
|
20
|
+
version = '1.0.0';
|
|
21
|
+
|
|
32
22
|
/**
|
|
33
23
|
* 准备运行时上下文
|
|
34
24
|
*
|
|
35
25
|
* 将业务数据转换为策略引擎可识别的 RuntimeContext
|
|
36
26
|
*/
|
|
37
27
|
prepareContext(businessData) {
|
|
38
|
-
const {
|
|
39
|
-
|
|
28
|
+
const {
|
|
29
|
+
products,
|
|
30
|
+
currentProduct,
|
|
31
|
+
channel,
|
|
32
|
+
custom
|
|
33
|
+
} = businessData;
|
|
34
|
+
|
|
35
|
+
// 当前时间(用于时间条件判断)
|
|
36
|
+
const now = new Date();
|
|
40
37
|
const currentDateTime = this.formatDateTime(now);
|
|
38
|
+
|
|
39
|
+
// 如果有 currentProduct,用于单商品场景(商品卡片展示)
|
|
41
40
|
const evaluatingProduct = currentProduct || (products.length > 0 ? products[0] : null);
|
|
42
41
|
return {
|
|
43
42
|
entities: {
|
|
@@ -53,7 +52,7 @@ var PromotionAdapter = class {
|
|
|
53
52
|
product_variant_id: evaluatingProduct.product_variant_id
|
|
54
53
|
} : null,
|
|
55
54
|
// 渠道
|
|
56
|
-
channel: channel ||
|
|
55
|
+
channel: channel || '',
|
|
57
56
|
// 商品总数量
|
|
58
57
|
totalQuantity: products.reduce((sum, p) => sum + p.quantity, 0),
|
|
59
58
|
// 商品总金额
|
|
@@ -66,6 +65,7 @@ var PromotionAdapter = class {
|
|
|
66
65
|
}
|
|
67
66
|
};
|
|
68
67
|
}
|
|
68
|
+
|
|
69
69
|
/**
|
|
70
70
|
* 转换执行结果
|
|
71
71
|
*
|
|
@@ -73,6 +73,7 @@ var PromotionAdapter = class {
|
|
|
73
73
|
* 主要是整理 matchedActions,让业务层更容易使用
|
|
74
74
|
*/
|
|
75
75
|
transformResult(result, businessData) {
|
|
76
|
+
// 获取适用的商品列表
|
|
76
77
|
const applicableProducts = businessData ? this.getApplicableProducts(result, businessData) : [];
|
|
77
78
|
if (!result.applicable) {
|
|
78
79
|
return {
|
|
@@ -83,16 +84,20 @@ var PromotionAdapter = class {
|
|
|
83
84
|
strategyResult: result
|
|
84
85
|
};
|
|
85
86
|
}
|
|
87
|
+
|
|
88
|
+
// 获取第一个匹配的 action(按 priority 排序后的)
|
|
86
89
|
const matchedAction = result.matchedActions[0];
|
|
87
90
|
if (!matchedAction) {
|
|
88
91
|
return {
|
|
89
92
|
isApplicable: false,
|
|
90
93
|
applicableProducts: [],
|
|
91
|
-
reason:
|
|
92
|
-
reasonCode:
|
|
94
|
+
reason: 'No matched action',
|
|
95
|
+
reasonCode: 'NO_ACTION',
|
|
93
96
|
strategyResult: result
|
|
94
97
|
};
|
|
95
98
|
}
|
|
99
|
+
|
|
100
|
+
// 解析 action 详情
|
|
96
101
|
const actionDetail = this.parseActionDetail(matchedAction);
|
|
97
102
|
return {
|
|
98
103
|
isApplicable: true,
|
|
@@ -102,27 +107,34 @@ var PromotionAdapter = class {
|
|
|
102
107
|
strategyResult: result
|
|
103
108
|
};
|
|
104
109
|
}
|
|
110
|
+
|
|
105
111
|
/**
|
|
106
112
|
* 格式化配置
|
|
107
113
|
*/
|
|
108
114
|
formatConfig(result, businessData) {
|
|
109
|
-
return {
|
|
115
|
+
return {
|
|
116
|
+
result,
|
|
117
|
+
businessData
|
|
118
|
+
};
|
|
110
119
|
}
|
|
120
|
+
|
|
111
121
|
// ============================================
|
|
112
122
|
// 私有辅助方法
|
|
113
123
|
// ============================================
|
|
124
|
+
|
|
114
125
|
/**
|
|
115
126
|
* 格式化日期时间
|
|
116
127
|
*/
|
|
117
128
|
formatDateTime(date) {
|
|
118
129
|
const year = date.getFullYear();
|
|
119
|
-
const month = String(date.getMonth() + 1).padStart(2,
|
|
120
|
-
const day = String(date.getDate()).padStart(2,
|
|
121
|
-
const hours = String(date.getHours()).padStart(2,
|
|
122
|
-
const minutes = String(date.getMinutes()).padStart(2,
|
|
123
|
-
const seconds = String(date.getSeconds()).padStart(2,
|
|
130
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
131
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
132
|
+
const hours = String(date.getHours()).padStart(2, '0');
|
|
133
|
+
const minutes = String(date.getMinutes()).padStart(2, '0');
|
|
134
|
+
const seconds = String(date.getSeconds()).padStart(2, '0');
|
|
124
135
|
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
|
|
125
136
|
}
|
|
137
|
+
|
|
126
138
|
/**
|
|
127
139
|
* 解析 Action 详情
|
|
128
140
|
*
|
|
@@ -130,14 +142,15 @@ var PromotionAdapter = class {
|
|
|
130
142
|
*/
|
|
131
143
|
parseActionDetail(action) {
|
|
132
144
|
switch (action.type) {
|
|
133
|
-
case
|
|
145
|
+
case _type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE:
|
|
134
146
|
return this.parseXItemsForYPriceAction(action);
|
|
135
|
-
case
|
|
147
|
+
case _type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE:
|
|
136
148
|
return this.parseBuyXGetYFreeAction(action);
|
|
137
149
|
default:
|
|
138
|
-
return
|
|
150
|
+
return undefined;
|
|
139
151
|
}
|
|
140
152
|
}
|
|
153
|
+
|
|
141
154
|
/**
|
|
142
155
|
* 解析 X件Y元 Action
|
|
143
156
|
*/
|
|
@@ -145,13 +158,14 @@ var PromotionAdapter = class {
|
|
|
145
158
|
const value = action.value || {};
|
|
146
159
|
const config = action.config || {};
|
|
147
160
|
return {
|
|
148
|
-
type:
|
|
161
|
+
type: _type.PROMOTION_ACTION_TYPES.X_ITEMS_FOR_Y_PRICE,
|
|
149
162
|
x: value.x || 2,
|
|
150
163
|
price: value.price || 0,
|
|
151
164
|
allowCrossProduct: config.allowCrossProduct ?? true,
|
|
152
165
|
cumulative: config.cumulative ?? true
|
|
153
166
|
};
|
|
154
167
|
}
|
|
168
|
+
|
|
155
169
|
/**
|
|
156
170
|
* 解析 买X送Y Action
|
|
157
171
|
*/
|
|
@@ -159,59 +173,66 @@ var PromotionAdapter = class {
|
|
|
159
173
|
const value = action.value || {};
|
|
160
174
|
const config = action.config || {};
|
|
161
175
|
return {
|
|
162
|
-
type:
|
|
176
|
+
type: _type.PROMOTION_ACTION_TYPES.BUY_X_GET_Y_FREE,
|
|
163
177
|
buyQuantity: value.buyQuantity || 1,
|
|
164
178
|
freeQuantity: value.freeQuantity || 1,
|
|
165
|
-
giftSelectionMode: config.giftSelectionMode ||
|
|
179
|
+
giftSelectionMode: config.giftSelectionMode || 'user_select',
|
|
166
180
|
cumulative: config.cumulative ?? true,
|
|
167
181
|
giftProducts: config.giftProducts || []
|
|
168
182
|
};
|
|
169
183
|
}
|
|
184
|
+
|
|
170
185
|
/**
|
|
171
186
|
* 获取适用的商品列表
|
|
172
187
|
*
|
|
173
188
|
* 从购物车商品中筛选出符合策略条件的商品
|
|
174
189
|
*/
|
|
175
190
|
getApplicableProducts(result, businessData) {
|
|
176
|
-
const {
|
|
191
|
+
const {
|
|
192
|
+
products
|
|
193
|
+
} = businessData;
|
|
194
|
+
|
|
195
|
+
// 从策略配置中获取商品范围条件
|
|
177
196
|
const productMatchRule = this.findProductMatchRule(result.config);
|
|
178
197
|
if (!productMatchRule) {
|
|
198
|
+
// 如果没有商品范围条件,所有商品都适用
|
|
179
199
|
return products;
|
|
180
200
|
}
|
|
181
201
|
const configProducts = productMatchRule.value;
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
);
|
|
202
|
+
|
|
203
|
+
// 筛选适用的商品
|
|
204
|
+
return products.filter(product => this.isProductMatch(product, configProducts));
|
|
185
205
|
}
|
|
206
|
+
|
|
186
207
|
/**
|
|
187
208
|
* 查找商品匹配规则
|
|
188
209
|
*/
|
|
189
210
|
findProductMatchRule(config) {
|
|
190
|
-
|
|
191
|
-
if (!((_a = config == null ? void 0 : config.conditions) == null ? void 0 : _a.rules)) {
|
|
211
|
+
if (!config?.conditions?.rules) {
|
|
192
212
|
return null;
|
|
193
213
|
}
|
|
194
|
-
return config.conditions.rules.find(
|
|
195
|
-
(rule) => rule.field === "productIdAndVariantId" && (rule.operator === "product_match" || rule.operator === "object_in")
|
|
196
|
-
);
|
|
214
|
+
return config.conditions.rules.find(rule => rule.field === 'productIdAndVariantId' && (rule.operator === 'product_match' || rule.operator === 'object_in'));
|
|
197
215
|
}
|
|
216
|
+
|
|
198
217
|
/**
|
|
199
218
|
* 检查商品是否匹配
|
|
200
219
|
*/
|
|
201
220
|
isProductMatch(product, configProducts) {
|
|
202
|
-
return configProducts.some(
|
|
221
|
+
return configProducts.some(config => {
|
|
222
|
+
// 首先检查 product_id
|
|
203
223
|
if (config.product_id !== product.product_id) {
|
|
204
224
|
return false;
|
|
205
225
|
}
|
|
226
|
+
|
|
227
|
+
// 如果配置的 product_variant_id = 0,只需要 product_id 匹配
|
|
206
228
|
if (config.product_variant_id === 0) {
|
|
207
229
|
return true;
|
|
208
230
|
}
|
|
231
|
+
|
|
232
|
+
// 否则需要 product_variant_id 精确匹配
|
|
209
233
|
return config.product_variant_id === product.product_variant_id;
|
|
210
234
|
});
|
|
211
235
|
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
0 && (module.exports = {
|
|
216
|
-
PromotionAdapter
|
|
217
|
-
});
|
|
236
|
+
}
|
|
237
|
+
exports.PromotionAdapter = PromotionAdapter;
|
|
238
|
+
var _default = exports.default = PromotionAdapter;
|