@pisell/pisellos 2.3.74 → 2.3.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/dist/core/index.js +6 -10
  2. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.js +0 -2
  10. package/dist/modules/Order/index.js +36 -64
  11. package/dist/modules/Payment/index.js +97 -162
  12. package/dist/modules/Rules/index.js +1 -4
  13. package/dist/modules/Schedule/index.js +0 -1
  14. package/dist/modules/Schedule/utils.js +0 -1
  15. package/dist/modules/Step/index.js +0 -1
  16. package/dist/plugins/request.js +1 -4
  17. package/dist/plugins/window.js +2 -6
  18. package/dist/server/index.js +97 -129
  19. package/dist/server/modules/menu/index.js +32 -41
  20. package/dist/server/modules/order/index.js +2 -4
  21. package/dist/server/modules/products/index.js +24 -42
  22. package/dist/server/modules/quotation/index.js +29 -38
  23. package/dist/server/modules/resource/index.js +3 -4
  24. package/dist/server/modules/schedule/index.js +27 -35
  25. package/dist/server/utils/product.js +0 -1
  26. package/dist/solution/BaseSales/index.js +38 -41
  27. package/dist/solution/BookingByStep/index.js +7 -59
  28. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  29. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  30. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  31. package/dist/solution/BookingTicket/index.js +0 -2
  32. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  33. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  34. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  35. package/dist/solution/BuyTickets/index.js +9 -12
  36. package/dist/solution/Checkout/index.js +177 -252
  37. package/dist/solution/Checkout/utils/index.js +4 -16
  38. package/dist/solution/RegisterAndLogin/index.js +30 -76
  39. package/dist/solution/ScanOrder/index.js +50 -60
  40. package/dist/solution/ShopDiscount/index.js +2 -7
  41. package/dist/solution/VenueBooking/index.js +45 -55
  42. package/dist/utils/task.js +15 -18
  43. package/dist/utils/watch.js +0 -1
  44. package/lib/apis/picoding.js +2 -0
  45. package/lib/core/index.js +134 -134
  46. package/lib/effects/index.js +46 -57
  47. package/lib/index.js +82 -49
  48. package/lib/model/index.js +14 -21
  49. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  50. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  51. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  52. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  53. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  54. package/lib/model/strategy/adapter/index.js +100 -64
  55. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  56. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  57. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  58. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  59. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  60. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  61. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  62. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  63. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  64. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  65. package/lib/model/strategy/adapter/type.js +4 -16
  66. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  67. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  68. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  69. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  70. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  71. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  72. package/lib/model/strategy/engine.js +270 -168
  73. package/lib/model/strategy/index.js +49 -34
  74. package/lib/model/strategy/strategy-example.js +243 -239
  75. package/lib/model/strategy/type.js +100 -40
  76. package/lib/modules/Account/index.js +39 -53
  77. package/lib/modules/Account/types.js +20 -33
  78. package/lib/modules/AccountList/index.js +116 -154
  79. package/lib/modules/AccountList/types.js +30 -31
  80. package/lib/modules/AccountList/utils.js +18 -30
  81. package/lib/modules/BaseModule.js +23 -42
  82. package/lib/modules/BookingContext/index.js +158 -136
  83. package/lib/modules/BookingContext/types.js +46 -32
  84. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  85. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  86. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  87. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  88. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  89. package/lib/modules/BookingContext/utils/index.js +124 -41
  90. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  91. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  92. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  93. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  94. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  95. package/lib/modules/BookingContext/utils/resources.js +209 -167
  96. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  97. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  98. package/lib/modules/Cart/index.js +170 -124
  99. package/lib/modules/Cart/types.js +46 -51
  100. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  101. package/lib/modules/Cart/utils/cartDate.js +56 -61
  102. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  103. package/lib/modules/Cart/utils/cartNote.js +27 -32
  104. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  105. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  106. package/lib/modules/Cart/utils/cartResource.js +70 -78
  107. package/lib/modules/Cart/utils/changePrice.js +22 -50
  108. package/lib/modules/Cart/utils/index.js +106 -48
  109. package/lib/modules/Customer/constants.js +13 -34
  110. package/lib/modules/Customer/index.js +235 -172
  111. package/lib/modules/Customer/types.js +38 -35
  112. package/lib/modules/Date/index.js +116 -115
  113. package/lib/modules/Date/types.js +16 -28
  114. package/lib/modules/Date/utils.js +174 -123
  115. package/lib/modules/Discount/index.js +122 -127
  116. package/lib/modules/Discount/types.js +9 -31
  117. package/lib/modules/Guests/index.js +30 -56
  118. package/lib/modules/Guests/types.js +23 -33
  119. package/lib/modules/Holder/index.js +209 -189
  120. package/lib/modules/Holder/types.js +4 -16
  121. package/lib/modules/Holder/utils.js +20 -49
  122. package/lib/modules/OpenData/index.js +70 -76
  123. package/lib/modules/OpenData/types.js +4 -16
  124. package/lib/modules/OpenData/utils.js +44 -78
  125. package/lib/modules/Order/index.js +1713 -2118
  126. package/lib/modules/Order/payment-utils.js +77 -120
  127. package/lib/modules/Order/types.js +88 -35
  128. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  129. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  130. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  131. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  132. package/lib/modules/Order/utils.js +814 -647
  133. package/lib/modules/Payment/cash.js +20 -33
  134. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  135. package/lib/modules/Payment/eftpos.js +16 -30
  136. package/lib/modules/Payment/index.js +532 -399
  137. package/lib/modules/Payment/mx51.js +1 -0
  138. package/lib/modules/Payment/types.js +230 -108
  139. package/lib/modules/Payment/utils.js +52 -51
  140. package/lib/modules/Payment/walletpass.js +485 -660
  141. package/lib/modules/Product/index.js +51 -46
  142. package/lib/modules/Product/types.js +4 -16
  143. package/lib/modules/Product/utils.js +32 -33
  144. package/lib/modules/ProductList/index.js +113 -123
  145. package/lib/modules/ProductList/types.js +9 -31
  146. package/lib/modules/Quotation/index.js +81 -118
  147. package/lib/modules/Quotation/types.js +4 -16
  148. package/lib/modules/Resource/index.js +27 -59
  149. package/lib/modules/Resource/types.js +22 -32
  150. package/lib/modules/Resource/utils.js +30 -38
  151. package/lib/modules/ResourcePlanner/index.js +25 -23
  152. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  153. package/lib/modules/ResourcePlanner/planner.js +589 -770
  154. package/lib/modules/ResourcePlanner/types.js +10 -29
  155. package/lib/modules/Rules/index.js +1218 -959
  156. package/lib/modules/Rules/types.js +17 -40
  157. package/lib/modules/SalesSummary/index.js +85 -90
  158. package/lib/modules/SalesSummary/types.js +4 -16
  159. package/lib/modules/SalesSummary/utils.js +355 -430
  160. package/lib/modules/ScanOrderLogger/index.js +59 -79
  161. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  162. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  163. package/lib/modules/ScanOrderLogger/types.js +4 -16
  164. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  165. package/lib/modules/Schedule/index.js +100 -114
  166. package/lib/modules/Schedule/type.js +4 -16
  167. package/lib/modules/Schedule/types.js +4 -16
  168. package/lib/modules/Schedule/utils.js +433 -291
  169. package/lib/modules/Step/index.js +40 -52
  170. package/lib/modules/Step/tyeps.js +4 -16
  171. package/lib/modules/Summary/index.js +66 -71
  172. package/lib/modules/Summary/types.js +4 -16
  173. package/lib/modules/Summary/utils.js +773 -418
  174. package/lib/modules/SurchargeList/index.js +46 -60
  175. package/lib/modules/SurchargeList/types.js +4 -16
  176. package/lib/modules/index.js +245 -63
  177. package/lib/plugins/app.js +4 -16
  178. package/lib/plugins/index.js +36 -25
  179. package/lib/plugins/request.js +137 -126
  180. package/lib/plugins/shopStore.js +4 -16
  181. package/lib/plugins/user.js +4 -16
  182. package/lib/plugins/window.js +171 -179
  183. package/lib/server/index.js +3050 -2665
  184. package/lib/server/modules/floor-plan/index.js +118 -134
  185. package/lib/server/modules/floor-plan/types.js +15 -30
  186. package/lib/server/modules/index.js +106 -68
  187. package/lib/server/modules/menu/index.js +142 -122
  188. package/lib/server/modules/menu/types.js +18 -31
  189. package/lib/server/modules/order/index.js +784 -1002
  190. package/lib/server/modules/order/types.js +122 -33
  191. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  192. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  193. package/lib/server/modules/payment/index.js +59 -83
  194. package/lib/server/modules/payment/types.js +4 -16
  195. package/lib/server/modules/products/index.js +583 -471
  196. package/lib/server/modules/products/types.js +44 -34
  197. package/lib/server/modules/quotation/index.js +137 -172
  198. package/lib/server/modules/quotation/types.js +21 -31
  199. package/lib/server/modules/resource/index.js +220 -186
  200. package/lib/server/modules/resource/types.js +42 -33
  201. package/lib/server/modules/schedule/index.js +135 -123
  202. package/lib/server/modules/schedule/types.js +14 -21
  203. package/lib/server/modules/schedule/utils.js +334 -163
  204. package/lib/server/types.js +4 -16
  205. package/lib/server/utils/index.js +25 -23
  206. package/lib/server/utils/product.js +196 -139
  207. package/lib/server/utils/schedule.js +34 -41
  208. package/lib/server/utils/small-ticket.js +479 -456
  209. package/lib/server/utils/time.js +40 -49
  210. package/lib/solution/BaseSales/index.js +1186 -1410
  211. package/lib/solution/BaseSales/types.js +42 -38
  212. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  213. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  214. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  215. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  216. package/lib/solution/BaseSales/utils.js +158 -143
  217. package/lib/solution/BookingByStep/index.js +1527 -1340
  218. package/lib/solution/BookingByStep/types.js +40 -99
  219. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  220. package/lib/solution/BookingByStep/utils/products.js +42 -52
  221. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  222. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  223. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  224. package/lib/solution/BookingTicket/index.js +607 -522
  225. package/lib/solution/BookingTicket/types.js +99 -77
  226. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  227. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  228. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  229. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  230. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  231. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  232. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  233. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  234. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  235. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  236. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  237. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  238. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  239. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  240. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  241. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  242. package/lib/solution/BuyTickets/index.js +67 -70
  243. package/lib/solution/BuyTickets/types.js +22 -38
  244. package/lib/solution/Checkout/index.js +1451 -1158
  245. package/lib/solution/Checkout/types.js +91 -61
  246. package/lib/solution/Checkout/utils/index.js +228 -156
  247. package/lib/solution/PlaceOrder/index.js +55 -0
  248. package/lib/solution/RegisterAndLogin/config.js +493 -460
  249. package/lib/solution/RegisterAndLogin/index.js +633 -630
  250. package/lib/solution/RegisterAndLogin/types.js +189 -76
  251. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  252. package/lib/solution/Sales/index.js +328 -324
  253. package/lib/solution/Sales/types.js +27 -33
  254. package/lib/solution/ScanOrder/index.js +832 -864
  255. package/lib/solution/ScanOrder/types.js +33 -34
  256. package/lib/solution/ScanOrder/utils.js +409 -374
  257. package/lib/solution/ShopDiscount/index.js +226 -232
  258. package/lib/solution/ShopDiscount/types.js +15 -37
  259. package/lib/solution/ShopDiscount/utils.js +300 -172
  260. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  261. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  262. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  263. package/lib/solution/VenueBooking/index.js +811 -879
  264. package/lib/solution/VenueBooking/types.js +19 -39
  265. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  266. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  267. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  268. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  269. package/lib/solution/VenueBooking/utils.js +130 -67
  270. package/lib/solution/index.js +124 -41
  271. package/lib/store/createStore.js +32 -29
  272. package/lib/types/index.js +4 -16
  273. package/lib/utils/payment-number.js +26 -46
  274. package/lib/utils/task.js +36 -36
  275. package/lib/utils/watch.js +81 -47
  276. 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
+ }