@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.
Files changed (228) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/evaluator.js +0 -2
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/adapter/walletPass/utils.js +0 -3
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +1 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +14 -41
  13. package/dist/modules/Payment/index.js +142 -270
  14. package/dist/modules/Payment/walletpass.js +4 -5
  15. package/dist/modules/Rules/index.js +0 -7
  16. package/dist/modules/Schedule/utils.js +0 -1
  17. package/dist/modules/Step/index.js +0 -1
  18. package/dist/plugins/request.js +1 -4
  19. package/dist/plugins/window.js +2 -6
  20. package/dist/server/index.js +88 -121
  21. package/dist/server/modules/menu/index.js +32 -41
  22. package/dist/server/modules/products/index.js +29 -49
  23. package/dist/server/modules/quotation/index.js +29 -38
  24. package/dist/server/modules/resource/index.js +3 -4
  25. package/dist/server/modules/schedule/index.js +32 -40
  26. package/dist/server/utils/product.js +0 -1
  27. package/dist/solution/BookingByStep/index.d.ts +1 -1
  28. package/dist/solution/BookingByStep/index.js +7 -59
  29. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  30. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  31. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  32. package/dist/solution/BookingTicket/index.d.ts +1 -1
  33. package/dist/solution/BookingTicket/index.js +5 -7
  34. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  35. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  36. package/dist/solution/BuyTickets/index.js +9 -12
  37. package/dist/solution/Checkout/index.js +177 -246
  38. package/dist/solution/Checkout/utils/index.js +4 -16
  39. package/dist/solution/RegisterAndLogin/index.js +30 -76
  40. package/dist/solution/ScanOrder/index.js +50 -60
  41. package/dist/solution/ShopDiscount/index.js +2 -7
  42. package/dist/solution/VenueBooking/index.d.ts +5 -0
  43. package/dist/solution/VenueBooking/index.js +364 -327
  44. package/dist/utils/task.js +15 -18
  45. package/dist/utils/watch.js +0 -1
  46. package/lib/apis/picoding.js +2 -0
  47. package/lib/core/index.js +130 -131
  48. package/lib/effects/index.js +46 -57
  49. package/lib/index.js +92 -53
  50. package/lib/model/index.js +14 -21
  51. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  52. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  53. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  54. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  55. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  56. package/lib/model/strategy/adapter/index.js +100 -64
  57. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  58. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  59. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  60. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  61. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  62. package/lib/model/strategy/adapter/promotion/adapter.js +84 -63
  63. package/lib/model/strategy/adapter/promotion/evaluator.js +381 -231
  64. package/lib/model/strategy/adapter/promotion/examples.js +139 -159
  65. package/lib/model/strategy/adapter/promotion/index.js +1 -49
  66. package/lib/model/strategy/adapter/promotion/type.js +199 -35
  67. package/lib/model/strategy/adapter/type.js +4 -16
  68. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -152
  69. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  70. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  71. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  72. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  73. package/lib/model/strategy/adapter/walletPass/utils.js +652 -402
  74. package/lib/model/strategy/engine.js +270 -168
  75. package/lib/model/strategy/index.js +49 -34
  76. package/lib/model/strategy/strategy-example.js +243 -239
  77. package/lib/model/strategy/type.js +100 -40
  78. package/lib/modules/Account/index.js +39 -53
  79. package/lib/modules/Account/types.js +20 -33
  80. package/lib/modules/AccountList/index.js +116 -154
  81. package/lib/modules/AccountList/types.js +30 -31
  82. package/lib/modules/AccountList/utils.js +18 -30
  83. package/lib/modules/BaseModule.js +22 -45
  84. package/lib/modules/Cart/index.js +170 -124
  85. package/lib/modules/Cart/types.js +46 -51
  86. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  87. package/lib/modules/Cart/utils/cartDate.js +56 -61
  88. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  89. package/lib/modules/Cart/utils/cartNote.js +27 -32
  90. package/lib/modules/Cart/utils/cartProduct.js +306 -241
  91. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  92. package/lib/modules/Cart/utils/cartResource.js +72 -78
  93. package/lib/modules/Cart/utils/changePrice.js +26 -62
  94. package/lib/modules/Cart/utils/index.js +106 -48
  95. package/lib/modules/Customer/constants.js +13 -34
  96. package/lib/modules/Customer/index.js +216 -153
  97. package/lib/modules/Customer/types.js +38 -35
  98. package/lib/modules/Date/index.js +116 -115
  99. package/lib/modules/Date/types.js +16 -28
  100. package/lib/modules/Date/utils.js +174 -123
  101. package/lib/modules/Discount/index.js +117 -113
  102. package/lib/modules/Discount/types.js +9 -31
  103. package/lib/modules/Guests/index.js +30 -56
  104. package/lib/modules/Guests/types.js +23 -33
  105. package/lib/modules/Holder/index.js +209 -189
  106. package/lib/modules/Holder/types.js +4 -16
  107. package/lib/modules/Holder/utils.js +20 -49
  108. package/lib/modules/OpenData/index.js +63 -74
  109. package/lib/modules/OpenData/types.js +4 -16
  110. package/lib/modules/OpenData/utils.js +44 -78
  111. package/lib/modules/Order/index.d.ts +1 -1
  112. package/lib/modules/Order/index.js +332 -320
  113. package/lib/modules/Order/types.js +24 -33
  114. package/lib/modules/Order/utils.js +350 -284
  115. package/lib/modules/Payment/cash.js +20 -33
  116. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  117. package/lib/modules/Payment/eftpos.js +16 -30
  118. package/lib/modules/Payment/index.js +566 -432
  119. package/lib/modules/Payment/mx51.js +1 -0
  120. package/lib/modules/Payment/types.js +216 -107
  121. package/lib/modules/Payment/utils.js +50 -47
  122. package/lib/modules/Payment/walletpass.js +221 -203
  123. package/lib/modules/Product/index.js +51 -46
  124. package/lib/modules/Product/types.js +4 -16
  125. package/lib/modules/Product/utils.js +32 -33
  126. package/lib/modules/ProductList/index.js +111 -110
  127. package/lib/modules/ProductList/types.js +9 -31
  128. package/lib/modules/Quotation/index.js +60 -82
  129. package/lib/modules/Quotation/types.js +4 -16
  130. package/lib/modules/Resource/index.js +27 -59
  131. package/lib/modules/Resource/types.js +22 -32
  132. package/lib/modules/Resource/utils.js +30 -38
  133. package/lib/modules/Rules/index.js +1172 -872
  134. package/lib/modules/Rules/types.js +17 -40
  135. package/lib/modules/SalesSummary/index.js +59 -68
  136. package/lib/modules/SalesSummary/types.js +4 -16
  137. package/lib/modules/SalesSummary/utils.js +176 -193
  138. package/lib/modules/ScanOrderLogger/index.js +59 -79
  139. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  140. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  141. package/lib/modules/ScanOrderLogger/types.js +4 -16
  142. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -167
  143. package/lib/modules/Schedule/index.js +97 -107
  144. package/lib/modules/Schedule/type.js +4 -16
  145. package/lib/modules/Schedule/types.js +4 -16
  146. package/lib/modules/Schedule/utils.js +433 -291
  147. package/lib/modules/Step/index.js +40 -52
  148. package/lib/modules/Step/tyeps.js +4 -16
  149. package/lib/modules/Summary/index.js +66 -70
  150. package/lib/modules/Summary/types.js +4 -16
  151. package/lib/modules/Summary/utils.js +782 -429
  152. package/lib/modules/index.js +212 -57
  153. package/lib/plugins/app.js +4 -16
  154. package/lib/plugins/index.js +36 -25
  155. package/lib/plugins/request.js +137 -126
  156. package/lib/plugins/shopStore.js +4 -16
  157. package/lib/plugins/user.js +4 -16
  158. package/lib/plugins/window.js +171 -179
  159. package/lib/server/index.js +882 -623
  160. package/lib/server/modules/index.js +85 -59
  161. package/lib/server/modules/menu/index.js +146 -122
  162. package/lib/server/modules/menu/types.js +18 -31
  163. package/lib/server/modules/order/index.js +195 -231
  164. package/lib/server/modules/order/types.js +107 -32
  165. package/lib/server/modules/order/utils/filterBookings.js +174 -140
  166. package/lib/server/modules/order/utils/filterOrders.js +89 -60
  167. package/lib/server/modules/products/index.js +430 -335
  168. package/lib/server/modules/products/types.js +41 -34
  169. package/lib/server/modules/quotation/index.js +76 -77
  170. package/lib/server/modules/quotation/types.js +21 -31
  171. package/lib/server/modules/resource/index.js +216 -187
  172. package/lib/server/modules/resource/types.js +42 -33
  173. package/lib/server/modules/schedule/index.js +134 -119
  174. package/lib/server/modules/schedule/types.js +14 -21
  175. package/lib/server/modules/schedule/utils.js +334 -163
  176. package/lib/server/types.js +4 -16
  177. package/lib/server/utils/index.js +25 -23
  178. package/lib/server/utils/product.js +196 -139
  179. package/lib/server/utils/schedule.js +34 -41
  180. package/lib/server/utils/time.js +40 -49
  181. package/lib/solution/BookingByStep/index.d.ts +1 -1
  182. package/lib/solution/BookingByStep/index.js +1530 -1343
  183. package/lib/solution/BookingByStep/types.js +40 -99
  184. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  185. package/lib/solution/BookingByStep/utils/products.js +42 -52
  186. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  187. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  188. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  189. package/lib/solution/BookingTicket/index.d.ts +1 -1
  190. package/lib/solution/BookingTicket/index.js +147 -122
  191. package/lib/solution/BookingTicket/types.js +38 -64
  192. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +64 -80
  193. package/lib/solution/BookingTicket/utils/scan/handleScan.js +82 -80
  194. package/lib/solution/BookingTicket/utils/scan/index.js +90 -94
  195. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  196. package/lib/solution/BuyTickets/index.js +67 -70
  197. package/lib/solution/BuyTickets/types.js +22 -38
  198. package/lib/solution/Checkout/index.js +1451 -1158
  199. package/lib/solution/Checkout/types.js +91 -61
  200. package/lib/solution/Checkout/utils/index.js +227 -158
  201. package/lib/solution/PlaceOrder/index.js +55 -0
  202. package/lib/solution/RegisterAndLogin/config.js +493 -460
  203. package/lib/solution/RegisterAndLogin/index.js +633 -630
  204. package/lib/solution/RegisterAndLogin/types.js +189 -76
  205. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  206. package/lib/solution/Sales/index.js +218 -200
  207. package/lib/solution/Sales/types.js +27 -33
  208. package/lib/solution/ScanOrder/index.js +803 -840
  209. package/lib/solution/ScanOrder/types.js +34 -34
  210. package/lib/solution/ScanOrder/utils.js +372 -331
  211. package/lib/solution/ShopDiscount/index.js +230 -236
  212. package/lib/solution/ShopDiscount/types.js +15 -37
  213. package/lib/solution/ShopDiscount/utils.js +309 -172
  214. package/lib/solution/VenueBooking/index.d.ts +5 -0
  215. package/lib/solution/VenueBooking/index.js +886 -929
  216. package/lib/solution/VenueBooking/types.js +20 -40
  217. package/lib/solution/VenueBooking/utils/dateSummary.js +22 -54
  218. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  219. package/lib/solution/VenueBooking/utils/slotMerge.js +88 -106
  220. package/lib/solution/VenueBooking/utils/smartPricing.js +112 -100
  221. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -132
  222. package/lib/solution/VenueBooking/utils.js +130 -67
  223. package/lib/solution/index.js +102 -37
  224. package/lib/store/createStore.js +32 -29
  225. package/lib/types/index.js +4 -16
  226. package/lib/utils/task.js +36 -36
  227. package/lib/utils/watch.js +81 -47
  228. package/package.json +2 -1
@@ -1,38 +1,53 @@
1
- var __defProp = Object.defineProperty;
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 });
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _exportNames = {
7
+ StrategyEngine: true,
8
+ createStrategyEngine: true,
9
+ evaluate: true
8
10
  };
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 });
11
+ Object.defineProperty(exports, "StrategyEngine", {
12
+ enumerable: true,
13
+ get: function () {
14
+ return _engine.StrategyEngine;
15
+ }
16
+ });
17
+ Object.defineProperty(exports, "createStrategyEngine", {
18
+ enumerable: true,
19
+ get: function () {
20
+ return _engine.createStrategyEngine;
21
+ }
22
+ });
23
+ Object.defineProperty(exports, "evaluate", {
24
+ enumerable: true,
25
+ get: function () {
26
+ return _engine.evaluate;
14
27
  }
15
- return to;
16
- };
17
- var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/model/strategy/index.ts
21
- var strategy_exports = {};
22
- __export(strategy_exports, {
23
- StrategyEngine: () => import_engine.StrategyEngine,
24
- createStrategyEngine: () => import_engine.createStrategyEngine,
25
- evaluate: () => import_engine.evaluate
26
28
  });
27
- module.exports = __toCommonJS(strategy_exports);
28
- var import_engine = require("./engine");
29
- __reExport(strategy_exports, require("./type"), module.exports);
30
- __reExport(strategy_exports, require("./adapter"), module.exports);
31
- // Annotate the CommonJS export names for ESM import in node:
32
- 0 && (module.exports = {
33
- StrategyEngine,
34
- createStrategyEngine,
35
- evaluate,
36
- ...require("./type"),
37
- ...require("./adapter")
29
+ var _engine = require("./engine");
30
+ var _type = require("./type");
31
+ Object.keys(_type).forEach(function (key) {
32
+ if (key === "default" || key === "__esModule") return;
33
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
34
+ if (key in exports && exports[key] === _type[key]) return;
35
+ Object.defineProperty(exports, key, {
36
+ enumerable: true,
37
+ get: function () {
38
+ return _type[key];
39
+ }
40
+ });
38
41
  });
42
+ var _adapter = require("./adapter");
43
+ Object.keys(_adapter).forEach(function (key) {
44
+ if (key === "default" || key === "__esModule") return;
45
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
46
+ if (key in exports && exports[key] === _adapter[key]) return;
47
+ Object.defineProperty(exports, key, {
48
+ enumerable: true,
49
+ get: function () {
50
+ return _adapter[key];
51
+ }
52
+ });
53
+ });
@@ -1,206 +1,188 @@
1
- var __defProp = Object.defineProperty;
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
- // src/model/strategy/strategy-example.ts
20
- var strategy_example_exports = {};
21
- __export(strategy_example_exports, {
22
- runExamples: () => runExamples
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(strategy_example_exports);
25
- var import_index = require("./index");
26
- var voucherConfig = {
6
+ exports.runExamples = runExamples;
7
+ var _index = require("./index");
8
+ /**
9
+ * 策略模型使用示例
10
+ */
11
+
12
+ // ============================================
13
+ // 示例1: 简单的代金券(单层条件)
14
+ // ============================================
15
+
16
+ const voucherConfig = {
27
17
  metadata: {
28
- id: "VOUCHER_10",
29
- name: "10元代金券",
30
- type: "wallet_pass",
31
- calculationType: "single"
18
+ id: 'VOUCHER_10',
19
+ name: '10元代金券',
20
+ type: 'wallet_pass',
21
+ calculationType: 'single'
32
22
  },
33
23
  conditions: {
34
- operator: "and",
35
- rules: [
36
- {
37
- type: "operator",
38
- dimension: "scope_product",
39
- field: "productId",
40
- operator: "in",
41
- value: [60734, 60735]
42
- },
43
- {
44
- type: "operator",
45
- dimension: "scope_channel",
46
- field: "channel",
47
- operator: "in",
48
- value: ["pos", "mini_program"]
49
- },
50
- {
51
- type: "operator",
52
- dimension: "transaction",
53
- field: "applicableProductTotal",
54
- operator: ">=",
55
- value: 100
56
- },
57
- {
58
- type: "operator",
59
- dimension: "limit_usage",
60
- field: "perUserUsedCount",
61
- operator: "<",
62
- value: 1
63
- }
64
- ],
65
- actionIds: ["deduct_10"]
24
+ operator: 'and',
25
+ rules: [{
26
+ type: 'operator',
27
+ dimension: 'scope_product',
28
+ field: 'productId',
29
+ operator: 'in',
30
+ value: [60734, 60735]
31
+ }, {
32
+ type: 'operator',
33
+ dimension: 'scope_channel',
34
+ field: 'channel',
35
+ operator: 'in',
36
+ value: ['pos', 'mini_program']
37
+ }, {
38
+ type: 'operator',
39
+ dimension: 'transaction',
40
+ field: 'applicableProductTotal',
41
+ operator: '>=',
42
+ value: 100
43
+ }, {
44
+ type: 'operator',
45
+ dimension: 'limit_usage',
46
+ field: 'perUserUsedCount',
47
+ operator: '<',
48
+ value: 1
49
+ }],
50
+ actionIds: ['deduct_10']
66
51
  },
67
- actions: [
68
- {
69
- id: "deduct_10",
70
- type: "DEDUCT_AMOUNT",
71
- value: 10,
72
- valueType: "number",
73
- valueUnit: "元",
74
- target: "applicable_products",
75
- priority: 1,
76
- config: {
77
- allowCrossProduct: true,
78
- deductTaxAndFee: true
79
- }
52
+ actions: [{
53
+ id: 'deduct_10',
54
+ type: 'DEDUCT_AMOUNT',
55
+ value: 10,
56
+ valueType: 'number',
57
+ valueUnit: '元',
58
+ target: 'applicable_products',
59
+ priority: 1,
60
+ config: {
61
+ allowCrossProduct: true,
62
+ deductTaxAndFee: true
80
63
  }
81
- ]
64
+ }]
82
65
  };
83
- var voucherContext = {
66
+
67
+ // 运行时上下文
68
+ const voucherContext = {
84
69
  entities: {
85
70
  order: {
86
- id: "ORDER_001",
71
+ id: 'ORDER_001',
87
72
  total: 150,
88
- items: [
89
- { productId: 60734, quantity: 2, price: 75 }
90
- ]
73
+ items: [{
74
+ productId: 60734,
75
+ quantity: 2,
76
+ price: 75
77
+ }]
91
78
  },
92
79
  customer: {
93
- id: "USER_001",
94
- level: "vip"
80
+ id: 'USER_001',
81
+ level: 'vip'
95
82
  }
96
83
  },
97
84
  attributes: {
98
85
  productId: 60734,
99
- channel: "pos",
86
+ channel: 'pos',
100
87
  applicableProductTotal: 150,
101
88
  perUserUsedCount: 0
102
89
  },
103
90
  metadata: {
104
91
  timestamp: Date.now(),
105
- locale: "zh-CN"
92
+ locale: 'zh-CN'
106
93
  }
107
94
  };
108
- var tieredDiscountConfig = {
95
+
96
+ // ============================================
97
+ // 示例2: 阶梯式满减(嵌套条件)
98
+ // ============================================
99
+
100
+ const tieredDiscountConfig = {
109
101
  metadata: {
110
- id: "TIERED_DISCOUNT",
111
- name: "阶梯满减",
112
- type: "promotion",
113
- calculationType: "single"
102
+ id: 'TIERED_DISCOUNT',
103
+ name: '阶梯满减',
104
+ type: 'promotion',
105
+ calculationType: 'single'
114
106
  },
115
107
  conditions: {
116
- operator: "or",
108
+ operator: 'or',
117
109
  rules: [
118
- // 档位1:100-199 减10
119
- {
120
- operator: "and",
121
- rules: [
122
- {
123
- type: "operator",
124
- dimension: "transaction",
125
- field: "orderTotal",
126
- operator: ">=",
127
- value: 100
128
- },
129
- {
130
- type: "operator",
131
- dimension: "transaction",
132
- field: "orderTotal",
133
- operator: "<",
134
- value: 200
135
- }
136
- ],
137
- actionIds: ["deduct_10"]
138
- },
139
- // 档位2:200-299 减25
140
- {
141
- operator: "and",
142
- rules: [
143
- {
144
- type: "operator",
145
- dimension: "transaction",
146
- field: "orderTotal",
147
- operator: ">=",
148
- value: 200
149
- },
150
- {
151
- type: "operator",
152
- dimension: "transaction",
153
- field: "orderTotal",
154
- operator: "<",
155
- value: 300
156
- }
157
- ],
158
- actionIds: ["deduct_25"]
159
- },
160
- // 档位3:>= 300 减40
161
- {
162
- operator: "and",
163
- rules: [
164
- {
165
- type: "operator",
166
- dimension: "transaction",
167
- field: "orderTotal",
168
- operator: ">=",
169
- value: 300
170
- }
171
- ],
172
- actionIds: ["deduct_40"]
173
- }
174
- ],
175
- actionIds: []
176
- },
177
- actions: [
110
+ // 档位1:100-199 减10
178
111
  {
179
- id: "deduct_10",
180
- type: "DEDUCT_AMOUNT",
181
- value: 10,
182
- target: "order",
183
- priority: 1
112
+ operator: 'and',
113
+ rules: [{
114
+ type: 'operator',
115
+ dimension: 'transaction',
116
+ field: 'orderTotal',
117
+ operator: '>=',
118
+ value: 100
119
+ }, {
120
+ type: 'operator',
121
+ dimension: 'transaction',
122
+ field: 'orderTotal',
123
+ operator: '<',
124
+ value: 200
125
+ }],
126
+ actionIds: ['deduct_10']
184
127
  },
128
+ // 档位2:200-299 减25
185
129
  {
186
- id: "deduct_25",
187
- type: "DEDUCT_AMOUNT",
188
- value: 25,
189
- target: "order",
190
- priority: 2
130
+ operator: 'and',
131
+ rules: [{
132
+ type: 'operator',
133
+ dimension: 'transaction',
134
+ field: 'orderTotal',
135
+ operator: '>=',
136
+ value: 200
137
+ }, {
138
+ type: 'operator',
139
+ dimension: 'transaction',
140
+ field: 'orderTotal',
141
+ operator: '<',
142
+ value: 300
143
+ }],
144
+ actionIds: ['deduct_25']
191
145
  },
146
+ // 档位3:>= 300 减40
192
147
  {
193
- id: "deduct_40",
194
- type: "DEDUCT_AMOUNT",
195
- value: 40,
196
- target: "order",
197
- priority: 3
198
- }
199
- ]
148
+ operator: 'and',
149
+ rules: [{
150
+ type: 'operator',
151
+ dimension: 'transaction',
152
+ field: 'orderTotal',
153
+ operator: '>=',
154
+ value: 300
155
+ }],
156
+ actionIds: ['deduct_40']
157
+ }],
158
+ actionIds: []
159
+ },
160
+ actions: [{
161
+ id: 'deduct_10',
162
+ type: 'DEDUCT_AMOUNT',
163
+ value: 10,
164
+ target: 'order',
165
+ priority: 1
166
+ }, {
167
+ id: 'deduct_25',
168
+ type: 'DEDUCT_AMOUNT',
169
+ value: 25,
170
+ target: 'order',
171
+ priority: 2
172
+ }, {
173
+ id: 'deduct_40',
174
+ type: 'DEDUCT_AMOUNT',
175
+ value: 40,
176
+ target: 'order',
177
+ priority: 3
178
+ }]
200
179
  };
201
- var tieredContext = {
180
+ const tieredContext = {
202
181
  entities: {
203
- order: { id: "ORDER_002", total: 250 }
182
+ order: {
183
+ id: 'ORDER_002',
184
+ total: 250
185
+ }
204
186
  },
205
187
  attributes: {
206
188
  orderTotal: 250
@@ -209,44 +191,52 @@ var tieredContext = {
209
191
  timestamp: Date.now()
210
192
  }
211
193
  };
212
- var codeConditionConfig = {
194
+
195
+ // ============================================
196
+ // 示例3: 使用 Code 模式的条件
197
+ // ============================================
198
+
199
+ const codeConditionConfig = {
213
200
  metadata: {
214
- id: "CODE_CONDITION_EXAMPLE",
215
- name: "代码条件示例",
216
- type: "custom"
201
+ id: 'CODE_CONDITION_EXAMPLE',
202
+ name: '代码条件示例',
203
+ type: 'custom'
217
204
  },
218
205
  conditions: {
219
- operator: "and",
206
+ operator: 'and',
220
207
  rules: [
221
- // 使用 code 模式
222
- {
223
- type: "code",
224
- code: 'attributes.orderTotal >= 100 && entities.customer.level === "vip"'
225
- },
226
- // 混合使用 operator 模式
227
- {
228
- type: "operator",
229
- field: "productCount",
230
- operator: ">=",
231
- value: 2
232
- }
233
- ],
234
- actionIds: ["vip_discount"]
235
- },
236
- actions: [
208
+ // 使用 code 模式
237
209
  {
238
- id: "vip_discount",
239
- type: "DISCOUNT_RATE",
240
- value: 0.85,
241
- target: "order",
242
- priority: 1
243
- }
244
- ]
210
+ type: 'code',
211
+ code: 'attributes.orderTotal >= 100 && entities.customer.level === "vip"'
212
+ },
213
+ // 混合使用 operator 模式
214
+ {
215
+ type: 'operator',
216
+ field: 'productCount',
217
+ operator: '>=',
218
+ value: 2
219
+ }],
220
+ actionIds: ['vip_discount']
221
+ },
222
+ actions: [{
223
+ id: 'vip_discount',
224
+ type: 'DISCOUNT_RATE',
225
+ value: 0.85,
226
+ target: 'order',
227
+ priority: 1
228
+ }]
245
229
  };
246
- var codeContext = {
230
+ const codeContext = {
247
231
  entities: {
248
- customer: { id: "USER_002", level: "vip" },
249
- order: { id: "ORDER_003", total: 150 }
232
+ customer: {
233
+ id: 'USER_002',
234
+ level: 'vip'
235
+ },
236
+ order: {
237
+ id: 'ORDER_003',
238
+ total: 150
239
+ }
250
240
  },
251
241
  attributes: {
252
242
  orderTotal: 150,
@@ -256,63 +246,77 @@ var codeContext = {
256
246
  timestamp: Date.now()
257
247
  }
258
248
  };
249
+
250
+ // ============================================
251
+ // 执行示例
252
+ // ============================================
253
+
259
254
  function runExamples() {
260
- console.log("====== 策略模型使用示例 ======\n");
261
- const engine = (0, import_index.createStrategyEngine)({
255
+ // 创建引擎实例(开启调试和追踪)
256
+ const engine = (0, _index.createStrategyEngine)({
262
257
  debug: true,
263
258
  enableTrace: true
264
259
  });
265
- console.log("示例1: 10元代金券");
260
+
261
+ // 示例1: 代金券
262
+
266
263
  const result1 = engine.evaluate(voucherConfig, voucherContext);
267
- console.log("结果:", JSON.stringify(result1, null, 2));
268
- console.log("\n");
269
- console.log("示例2: 阶梯满减(订单金额250)");
264
+
265
+ // 示例2: 阶梯满减
266
+
270
267
  const result2 = engine.evaluate(tieredDiscountConfig, tieredContext);
271
- console.log("结果:", JSON.stringify(result2, null, 2));
272
- console.log("\n");
273
- console.log("示例3: Code 模式条件");
268
+
269
+ // 示例3: Code 模式
270
+
274
271
  const result3 = engine.evaluate(codeConditionConfig, codeContext);
275
- console.log("结果:", JSON.stringify(result3, null, 2));
276
- console.log("\n");
277
- console.log("示例4: 快速评估");
278
- const result4 = (0, import_index.evaluate)(voucherConfig, voucherContext);
279
- console.log("适用:", result4.applicable);
280
- console.log("匹配动作数:", result4.matchedActions.length);
281
- console.log("\n");
282
- console.log("示例5: 自定义运算符");
283
- engine.registerOperator("divisible_by", (fieldValue, compareValue) => {
272
+
273
+ // 快速评估(不需要创建引擎实例)
274
+
275
+ const result4 = (0, _index.evaluate)(voucherConfig, voucherContext);
276
+
277
+ // 注册自定义运算符
278
+
279
+ engine.registerOperator('divisible_by', (fieldValue, compareValue) => {
284
280
  return Number(fieldValue) % Number(compareValue) === 0;
285
281
  });
286
282
  const customOperatorConfig = {
287
- metadata: { id: "CUSTOM_OP", name: "自定义运算符", type: "test" },
283
+ metadata: {
284
+ id: 'CUSTOM_OP',
285
+ name: '自定义运算符',
286
+ type: 'test'
287
+ },
288
288
  conditions: {
289
- operator: "and",
290
- rules: [
291
- {
292
- type: "operator",
293
- field: "amount",
294
- operator: "divisible_by",
295
- value: 10
296
- }
297
- ],
298
- actionIds: ["bonus"]
289
+ operator: 'and',
290
+ rules: [{
291
+ type: 'operator',
292
+ field: 'amount',
293
+ operator: 'divisible_by',
294
+ value: 10
295
+ }],
296
+ actionIds: ['bonus']
299
297
  },
300
- actions: [{ id: "bonus", type: "ADD_POINTS", value: 100, target: "customer" }]
298
+ actions: [{
299
+ id: 'bonus',
300
+ type: 'ADD_POINTS',
301
+ value: 100,
302
+ target: 'customer'
303
+ }]
301
304
  };
302
305
  const customContext = {
303
306
  entities: {},
304
- attributes: { amount: 50 },
305
- metadata: { timestamp: Date.now() }
307
+ attributes: {
308
+ amount: 50
309
+ },
310
+ metadata: {
311
+ timestamp: Date.now()
312
+ }
306
313
  };
307
314
  const result5 = engine.evaluate(customOperatorConfig, customContext);
308
- console.log("结果:", result5.applicable ? "适用" : "不适用");
309
- console.log("匹配动作:", result5.matchedActions);
310
- console.log("\n引擎调试信息:", engine.getDebugInfo());
315
+
316
+ // 调试信息
311
317
  }
318
+
319
+ // 运行示例(如果直接执行此文件)
312
320
  if (require.main === module) {
313
321
  runExamples();
314
- }
315
- // Annotate the CommonJS export names for ESM import in node:
316
- 0 && (module.exports = {
317
- runExamples
318
- });
322
+ }