@pisell/pisellos 2.2.282 → 2.2.284

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