@pisell/pisellos 2.2.283 → 2.2.285

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