@pisell/pisellos 0.10.14 → 0.10.16

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 (301) hide show
  1. package/dist/core/index.js +6 -9
  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 +75 -91
  11. package/dist/modules/Order/types.d.ts +5 -1
  12. package/dist/modules/Order/utils/virtualSettlement.d.ts +8 -1
  13. package/dist/modules/Order/utils/virtualSettlement.js +15 -2
  14. package/dist/modules/Order/utils.js +7 -1
  15. package/dist/modules/Payment/index.js +97 -162
  16. package/dist/modules/Product/types.d.ts +2 -0
  17. package/dist/modules/Rules/index.js +1 -4
  18. package/dist/modules/Schedule/index.js +0 -1
  19. package/dist/modules/Schedule/utils.js +0 -1
  20. package/dist/modules/Step/index.js +0 -1
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.js +97 -129
  24. package/dist/server/modules/menu/index.js +32 -41
  25. package/dist/server/modules/order/index.js +2 -4
  26. package/dist/server/modules/products/index.js +24 -42
  27. package/dist/server/modules/quotation/index.js +29 -38
  28. package/dist/server/modules/resource/index.js +3 -4
  29. package/dist/server/modules/schedule/index.js +27 -35
  30. package/dist/server/utils/product.js +0 -1
  31. package/dist/solution/BaseSales/index.js +107 -76
  32. package/dist/solution/BaseSales/types.d.ts +2 -0
  33. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  34. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  37. package/dist/solution/BaseSales/utils.js +6 -3
  38. package/dist/solution/BookingByStep/index.d.ts +2 -2
  39. package/dist/solution/BookingByStep/index.js +7 -59
  40. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  41. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  42. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  43. package/dist/solution/BookingTicket/index.js +8 -4
  44. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  45. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  46. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  47. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  48. package/dist/solution/BuyTickets/index.js +9 -12
  49. package/dist/solution/Checkout/index.js +177 -252
  50. package/dist/solution/Checkout/utils/index.js +4 -16
  51. package/dist/solution/RegisterAndLogin/index.js +30 -76
  52. package/dist/solution/ScanOrder/index.js +50 -60
  53. package/dist/solution/ScanOrder/types.d.ts +2 -0
  54. package/dist/solution/ScanOrder/utils.js +6 -3
  55. package/dist/solution/ShopDiscount/index.js +2 -7
  56. package/dist/solution/VenueBooking/index.js +45 -55
  57. package/dist/utils/task.js +15 -18
  58. package/dist/utils/watch.js +0 -1
  59. package/lib/apis/picoding.js +2 -0
  60. package/lib/core/index.js +131 -131
  61. package/lib/effects/index.js +46 -57
  62. package/lib/index.js +82 -49
  63. package/lib/model/index.js +14 -21
  64. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  66. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  67. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  68. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  69. package/lib/model/strategy/adapter/index.js +100 -64
  70. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  71. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  72. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  73. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  74. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  75. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  76. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  77. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  78. package/lib/model/strategy/adapter/promotion/index.js +43 -48
  79. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  80. package/lib/model/strategy/adapter/type.js +4 -16
  81. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  82. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  83. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  84. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  85. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  86. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  87. package/lib/model/strategy/engine.js +270 -168
  88. package/lib/model/strategy/index.js +49 -34
  89. package/lib/model/strategy/strategy-example.js +243 -239
  90. package/lib/model/strategy/type.js +100 -40
  91. package/lib/modules/Account/index.js +39 -53
  92. package/lib/modules/Account/types.js +20 -33
  93. package/lib/modules/AccountList/index.js +116 -154
  94. package/lib/modules/AccountList/types.js +30 -31
  95. package/lib/modules/AccountList/utils.js +18 -30
  96. package/lib/modules/BaseModule.js +23 -42
  97. package/lib/modules/BookingContext/index.js +158 -136
  98. package/lib/modules/BookingContext/types.js +46 -32
  99. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  100. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  101. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  102. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  103. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  104. package/lib/modules/BookingContext/utils/index.js +124 -41
  105. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  106. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  107. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  108. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  109. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  110. package/lib/modules/BookingContext/utils/resources.js +209 -167
  111. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  112. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  113. package/lib/modules/Cart/index.js +170 -124
  114. package/lib/modules/Cart/types.js +46 -51
  115. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  116. package/lib/modules/Cart/utils/cartDate.js +56 -61
  117. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  118. package/lib/modules/Cart/utils/cartNote.js +27 -32
  119. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  120. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  121. package/lib/modules/Cart/utils/cartResource.js +70 -78
  122. package/lib/modules/Cart/utils/changePrice.js +22 -50
  123. package/lib/modules/Cart/utils/index.js +106 -48
  124. package/lib/modules/Customer/constants.js +13 -34
  125. package/lib/modules/Customer/index.js +235 -172
  126. package/lib/modules/Customer/types.js +38 -35
  127. package/lib/modules/Date/index.js +116 -115
  128. package/lib/modules/Date/types.js +16 -28
  129. package/lib/modules/Date/utils.js +174 -123
  130. package/lib/modules/Discount/index.js +133 -143
  131. package/lib/modules/Discount/types.js +9 -31
  132. package/lib/modules/Guests/index.js +30 -56
  133. package/lib/modules/Guests/types.js +23 -33
  134. package/lib/modules/Holder/index.js +209 -189
  135. package/lib/modules/Holder/types.js +4 -16
  136. package/lib/modules/Holder/utils.js +20 -49
  137. package/lib/modules/OpenData/index.js +70 -76
  138. package/lib/modules/OpenData/types.js +4 -16
  139. package/lib/modules/OpenData/utils.js +44 -78
  140. package/lib/modules/Order/index.d.ts +1 -1
  141. package/lib/modules/Order/index.js +1810 -2238
  142. package/lib/modules/Order/payment-utils.js +77 -120
  143. package/lib/modules/Order/types.d.ts +5 -1
  144. package/lib/modules/Order/types.js +87 -35
  145. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  146. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  147. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  148. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  149. package/lib/modules/Order/utils/virtualSettlement.d.ts +8 -1
  150. package/lib/modules/Order/utils/virtualSettlement.js +126 -164
  151. package/lib/modules/Order/utils.js +834 -668
  152. package/lib/modules/Payment/cash.js +20 -33
  153. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  154. package/lib/modules/Payment/eftpos.js +16 -30
  155. package/lib/modules/Payment/index.js +532 -399
  156. package/lib/modules/Payment/mx51.js +1 -0
  157. package/lib/modules/Payment/types.js +230 -108
  158. package/lib/modules/Payment/utils.js +52 -51
  159. package/lib/modules/Payment/walletpass.js +485 -660
  160. package/lib/modules/Product/index.js +51 -46
  161. package/lib/modules/Product/types.d.ts +2 -0
  162. package/lib/modules/Product/types.js +4 -16
  163. package/lib/modules/Product/utils.js +32 -33
  164. package/lib/modules/ProductList/index.js +138 -161
  165. package/lib/modules/ProductList/types.js +9 -31
  166. package/lib/modules/Quotation/index.js +66 -100
  167. package/lib/modules/Quotation/types.js +4 -16
  168. package/lib/modules/Resource/index.js +27 -59
  169. package/lib/modules/Resource/types.js +22 -32
  170. package/lib/modules/Resource/utils.js +30 -38
  171. package/lib/modules/ResourcePlanner/index.js +25 -23
  172. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  173. package/lib/modules/ResourcePlanner/planner.js +591 -772
  174. package/lib/modules/ResourcePlanner/types.js +10 -29
  175. package/lib/modules/Rules/index.js +1218 -959
  176. package/lib/modules/Rules/types.js +17 -40
  177. package/lib/modules/SalesSummary/index.js +78 -89
  178. package/lib/modules/SalesSummary/types.js +4 -16
  179. package/lib/modules/SalesSummary/utils.js +359 -442
  180. package/lib/modules/ScanOrderLogger/index.js +59 -79
  181. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  182. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  183. package/lib/modules/ScanOrderLogger/types.js +4 -16
  184. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  185. package/lib/modules/Schedule/index.js +100 -114
  186. package/lib/modules/Schedule/type.js +4 -16
  187. package/lib/modules/Schedule/types.js +4 -16
  188. package/lib/modules/Schedule/utils.js +433 -291
  189. package/lib/modules/Step/index.js +40 -52
  190. package/lib/modules/Step/tyeps.js +4 -16
  191. package/lib/modules/Summary/index.js +66 -71
  192. package/lib/modules/Summary/types.js +4 -16
  193. package/lib/modules/Summary/utils.js +773 -418
  194. package/lib/modules/SurchargeList/index.js +46 -60
  195. package/lib/modules/SurchargeList/types.js +4 -16
  196. package/lib/modules/index.js +245 -63
  197. package/lib/plugins/app.js +4 -16
  198. package/lib/plugins/index.js +36 -25
  199. package/lib/plugins/request.js +137 -126
  200. package/lib/plugins/shopStore.js +4 -16
  201. package/lib/plugins/user.js +4 -16
  202. package/lib/plugins/window.js +171 -179
  203. package/lib/server/index.js +3027 -2655
  204. package/lib/server/modules/floor-plan/index.js +102 -123
  205. package/lib/server/modules/floor-plan/types.js +15 -30
  206. package/lib/server/modules/index.js +106 -68
  207. package/lib/server/modules/menu/index.js +146 -122
  208. package/lib/server/modules/menu/types.js +18 -31
  209. package/lib/server/modules/order/index.js +758 -956
  210. package/lib/server/modules/order/types.js +122 -33
  211. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  212. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  213. package/lib/server/modules/payment/index.js +59 -83
  214. package/lib/server/modules/payment/types.js +4 -16
  215. package/lib/server/modules/products/index.js +575 -459
  216. package/lib/server/modules/products/types.js +44 -34
  217. package/lib/server/modules/quotation/index.js +137 -172
  218. package/lib/server/modules/quotation/types.js +21 -31
  219. package/lib/server/modules/resource/index.js +213 -184
  220. package/lib/server/modules/resource/types.js +42 -33
  221. package/lib/server/modules/schedule/index.js +135 -123
  222. package/lib/server/modules/schedule/types.js +14 -21
  223. package/lib/server/modules/schedule/utils.js +334 -163
  224. package/lib/server/types.js +4 -16
  225. package/lib/server/utils/index.js +25 -23
  226. package/lib/server/utils/product.js +196 -139
  227. package/lib/server/utils/schedule.js +34 -41
  228. package/lib/server/utils/small-ticket.js +479 -456
  229. package/lib/server/utils/time.js +40 -49
  230. package/lib/solution/BaseSales/index.js +1276 -1485
  231. package/lib/solution/BaseSales/types.d.ts +2 -0
  232. package/lib/solution/BaseSales/types.js +42 -38
  233. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  234. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  235. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  236. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  237. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  238. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  239. package/lib/solution/BaseSales/utils.js +161 -143
  240. package/lib/solution/BookingByStep/index.d.ts +2 -2
  241. package/lib/solution/BookingByStep/index.js +1527 -1340
  242. package/lib/solution/BookingByStep/types.js +40 -99
  243. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  244. package/lib/solution/BookingByStep/utils/products.js +42 -52
  245. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  246. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  247. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  248. package/lib/solution/BookingTicket/index.js +598 -514
  249. package/lib/solution/BookingTicket/types.js +99 -77
  250. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  251. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  252. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  253. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  254. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  255. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  256. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  257. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  258. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  259. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  260. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  261. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  262. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  263. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  264. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  265. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  266. package/lib/solution/BuyTickets/index.js +67 -70
  267. package/lib/solution/BuyTickets/types.js +22 -38
  268. package/lib/solution/Checkout/index.js +1451 -1158
  269. package/lib/solution/Checkout/types.js +91 -61
  270. package/lib/solution/Checkout/utils/index.js +228 -156
  271. package/lib/solution/PlaceOrder/index.js +55 -0
  272. package/lib/solution/RegisterAndLogin/config.js +493 -460
  273. package/lib/solution/RegisterAndLogin/index.js +633 -630
  274. package/lib/solution/RegisterAndLogin/types.js +189 -76
  275. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  276. package/lib/solution/Sales/index.js +328 -324
  277. package/lib/solution/Sales/types.js +27 -33
  278. package/lib/solution/ScanOrder/index.js +822 -852
  279. package/lib/solution/ScanOrder/types.d.ts +2 -0
  280. package/lib/solution/ScanOrder/types.js +33 -34
  281. package/lib/solution/ScanOrder/utils.js +412 -374
  282. package/lib/solution/ShopDiscount/index.js +226 -232
  283. package/lib/solution/ShopDiscount/types.js +15 -37
  284. package/lib/solution/ShopDiscount/utils.js +300 -172
  285. package/lib/solution/UnifiedBookingSales/index.js +1052 -1213
  286. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  287. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  288. package/lib/solution/VenueBooking/index.js +811 -879
  289. package/lib/solution/VenueBooking/types.js +19 -39
  290. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  291. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  292. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  293. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  294. package/lib/solution/VenueBooking/utils.js +130 -67
  295. package/lib/solution/index.js +124 -41
  296. package/lib/store/createStore.js +32 -29
  297. package/lib/types/index.js +4 -16
  298. package/lib/utils/payment-number.js +26 -46
  299. package/lib/utils/task.js +36 -36
  300. package/lib/utils/watch.js +81 -47
  301. package/package.json +2 -1
@@ -1,283 +1,271 @@
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/adapter/promotion/examples.ts
20
- var examples_exports = {};
21
- __export(examples_exports, {
22
- BUY_X_GET_Y_FREE_STRATEGY: () => BUY_X_GET_Y_FREE_STRATEGY,
23
- ITEM_REWARD_STRATEGY: () => ITEM_REWARD_STRATEGY,
24
- X_ITEMS_FOR_Y_PRICE_STRATEGY: () => X_ITEMS_FOR_Y_PRICE_STRATEGY
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
25
5
  });
26
- module.exports = __toCommonJS(examples_exports);
27
- var X_ITEMS_FOR_Y_PRICE_STRATEGY = {
6
+ exports.X_ITEMS_FOR_Y_PRICE_STRATEGY = exports.ITEM_REWARD_STRATEGY = exports.BUY_X_GET_Y_FREE_STRATEGY = void 0;
7
+ /**
8
+ * X件Y元策略配置示例
9
+ *
10
+ * 业务规则:
11
+ * - 每X件商品固定价格Y元(可累计)
12
+ * - 支持跨商品组合(A+B可以凑成一组)
13
+ * - 买5件 = 2组优惠 + 1件原价
14
+ *
15
+ * 商品匹配规则:
16
+ * - product_variant_id = 0 表示匹配任意变体
17
+ * - product_variant_id != 0 表示精确匹配该变体
18
+ */
19
+ const X_ITEMS_FOR_Y_PRICE_STRATEGY = exports.X_ITEMS_FOR_Y_PRICE_STRATEGY = {
28
20
  metadata: {
29
- id: "STRATEGY_001",
21
+ id: 'STRATEGY_001',
30
22
  name: {
31
- en: "2 items for $10",
32
- "zh-CN": "2杯10元",
33
- "zh-HK": "2杯10元"
23
+ en: '2 items for $10',
24
+ 'zh-CN': '2杯10元',
25
+ 'zh-HK': '2杯10元'
34
26
  },
35
- type: "promotion",
27
+ type: 'promotion',
36
28
  custom: {
37
29
  display: {
38
30
  product_card: {
39
31
  text: {
40
- en: "2 for $10",
41
- "zh-CN": "2杯10元",
42
- "zh-HK": "2杯10元"
32
+ en: '2 for $10',
33
+ 'zh-CN': '2杯10元',
34
+ 'zh-HK': '2杯10元'
43
35
  },
44
- type: "tag"
36
+ type: 'tag'
45
37
  }
46
38
  }
47
39
  }
48
40
  },
49
41
  conditions: {
50
- operator: "and",
51
- rules: [
52
- {
53
- type: "operator",
54
- field: "currentDateTime",
55
- value: "2023-01-01 00:00:00",
56
- operator: ">="
57
- },
58
- {
59
- type: "operator",
60
- field: "currentDateTime",
61
- value: "2027-01-01 00:00:00",
62
- operator: "<="
63
- },
64
- {
65
- type: "operator",
66
- field: "productIdAndVariantId",
67
- value: [
68
- {
69
- product_id: 60736,
70
- product_variant_id: 0
71
- // 0 = 匹配任意变体
72
- },
73
- {
74
- product_id: 60737,
75
- product_variant_id: 0
76
- // 0 = 匹配任意变体
77
- }
78
- ],
79
- operator: "product_match"
80
- }
81
- ],
82
- actionIds: ["1"]
42
+ operator: 'and',
43
+ rules: [{
44
+ type: 'operator',
45
+ field: 'currentDateTime',
46
+ value: '2023-01-01 00:00:00',
47
+ operator: '>='
48
+ }, {
49
+ type: 'operator',
50
+ field: 'currentDateTime',
51
+ value: '2027-01-01 00:00:00',
52
+ operator: '<='
53
+ }, {
54
+ type: 'operator',
55
+ field: 'productIdAndVariantId',
56
+ value: [{
57
+ product_id: 60736,
58
+ product_variant_id: 0 // 0 = 匹配任意变体
59
+ }, {
60
+ product_id: 60737,
61
+ product_variant_id: 0 // 0 = 匹配任意变体
62
+ }],
63
+ operator: 'product_match'
64
+ }],
65
+ actionIds: ['1']
83
66
  },
84
- actions: [
85
- {
86
- id: "1",
87
- type: "X_ITEMS_FOR_Y_PRICE",
88
- value: {
89
- x: 2,
90
- // 每X件
91
- price: 10
92
- // 固定价格Y元
93
- },
94
- valueType: "object",
95
- target: "product",
96
- priority: 1,
97
- config: {
98
- allowCrossProduct: true,
99
- // 允许跨商品组合(A+B可以凑成一组)
100
- cumulative: true
101
- // 可累计(买5件 = 2组优惠 + 1件原价)
102
- }
67
+ actions: [{
68
+ id: '1',
69
+ type: 'X_ITEMS_FOR_Y_PRICE',
70
+ value: {
71
+ x: 2,
72
+ // 每X件
73
+ price: 10 // 固定价格Y元
74
+ },
75
+ valueType: 'object',
76
+ target: 'product',
77
+ priority: 1,
78
+ config: {
79
+ allowCrossProduct: true,
80
+ // 允许跨商品组合(A+B可以凑成一组)
81
+ cumulative: true // 可累计(买5件 = 2组优惠 + 1件原价)
103
82
  }
104
- ]
83
+ }]
105
84
  };
106
- var BUY_X_GET_Y_FREE_STRATEGY = {
85
+
86
+ /**
87
+ * 买X送Y策略配置示例
88
+ *
89
+ * 业务规则:
90
+ * - 买X件送Y件(可累计:买2送2、买3送3...)
91
+ * - 赠品由用户从列表中选择
92
+ *
93
+ * 商品匹配规则:
94
+ * - product_variant_id = 0 表示匹配任意变体
95
+ * - product_variant_id != 0 表示精确匹配该变体
96
+ */
97
+ const BUY_X_GET_Y_FREE_STRATEGY = exports.BUY_X_GET_Y_FREE_STRATEGY = {
107
98
  metadata: {
108
- id: "STRATEGY_002",
99
+ id: 'STRATEGY_002',
109
100
  name: {
110
- en: "Buy 1 Get 1 Free",
111
- "zh-CN": "买1送1",
112
- "zh-HK": "買1送1"
101
+ en: 'Buy 1 Get 1 Free',
102
+ 'zh-CN': '买1送1',
103
+ 'zh-HK': '買1送1'
113
104
  },
114
- type: "promotion",
105
+ type: 'promotion',
115
106
  custom: {
116
107
  display: {
117
108
  product_card: {
118
109
  text: {
119
- en: "Buy 1 Get 1",
120
- "zh-CN": "买1送1",
121
- "zh-HK": "買1送1"
110
+ en: 'Buy 1 Get 1',
111
+ 'zh-CN': '买1送1',
112
+ 'zh-HK': '買1送1'
122
113
  },
123
- type: "tag"
114
+ type: 'tag'
124
115
  }
125
116
  }
126
117
  }
127
118
  },
128
119
  conditions: {
129
- operator: "and",
130
- rules: [
131
- {
132
- type: "operator",
133
- field: "currentDateTime",
134
- value: "2023-01-01 00:00:00",
135
- operator: ">="
136
- },
137
- {
138
- type: "operator",
139
- field: "currentDateTime",
140
- value: "2027-01-01 00:00:00",
141
- operator: "<="
142
- },
143
- {
144
- type: "operator",
145
- field: "productIdAndVariantId",
146
- value: [
147
- {
148
- product_id: 60736,
149
- product_variant_id: 0
150
- // 0 = 匹配任意变体
151
- },
152
- {
153
- product_id: 60737,
154
- product_variant_id: 0
155
- // 0 = 匹配任意变体
156
- }
157
- ],
158
- operator: "product_match"
159
- }
160
- ],
161
- actionIds: ["1"]
120
+ operator: 'and',
121
+ rules: [{
122
+ type: 'operator',
123
+ field: 'currentDateTime',
124
+ value: '2023-01-01 00:00:00',
125
+ operator: '>='
126
+ }, {
127
+ type: 'operator',
128
+ field: 'currentDateTime',
129
+ value: '2027-01-01 00:00:00',
130
+ operator: '<='
131
+ }, {
132
+ type: 'operator',
133
+ field: 'productIdAndVariantId',
134
+ value: [{
135
+ product_id: 60736,
136
+ product_variant_id: 0 // 0 = 匹配任意变体
137
+ }, {
138
+ product_id: 60737,
139
+ product_variant_id: 0 // 0 = 匹配任意变体
140
+ }],
141
+ operator: 'product_match'
142
+ }],
143
+ actionIds: ['1']
162
144
  },
163
- actions: [
164
- {
165
- id: "1",
166
- type: "BUY_X_GET_Y_FREE",
167
- value: {
168
- buyQuantity: 1,
169
- // 买X件
170
- freeQuantity: 1
171
- // 送Y件
172
- },
173
- valueType: "object",
174
- target: "product",
175
- priority: 1,
176
- config: {
177
- // 可累计(买2送2、买3送3...)
178
- cumulative: true,
179
- // 可选的赠品列表
180
- giftProducts: [
181
- { product_id: 60757, product_variant_id: 0 },
182
- { product_id: 38782, product_variant_id: 0 },
183
- { product_id: 60749, product_variant_id: 27267 }
184
- ]
185
- }
145
+ actions: [{
146
+ id: '1',
147
+ type: 'BUY_X_GET_Y_FREE',
148
+ value: {
149
+ buyQuantity: 1,
150
+ // 买X件
151
+ freeQuantity: 1 // 送Y件
152
+ },
153
+ valueType: 'object',
154
+ target: 'product',
155
+ priority: 1,
156
+ config: {
157
+ // 可累计(买2送2、买3送3...)
158
+ cumulative: true,
159
+ // 可选的赠品列表
160
+ giftProducts: [{
161
+ product_id: 60757,
162
+ product_variant_id: 0
163
+ }, {
164
+ product_id: 38782,
165
+ product_variant_id: 0
166
+ }, {
167
+ product_id: 60749,
168
+ product_variant_id: 27267
169
+ }]
186
170
  }
187
- ]
171
+ }]
188
172
  };
189
- var ITEM_REWARD_STRATEGY = {
173
+
174
+ /**
175
+ * ITEM_REWARD 策略配置示例:儿童票触发婴儿票免费
176
+ *
177
+ * 业务规则:
178
+ * - 条件商品:儿童票(conditions.rules.productIdAndVariantId)
179
+ * - 奖励商品:购物车/订单内已经存在的婴儿票(actions[0].config.rewardTargets)
180
+ * - 本 action 不自动新增婴儿票;每次购物车变更后由统一促销链路重算
181
+ *
182
+ * 字段说明:
183
+ * - type: "ITEM_REWARD" 表示商品奖励 action
184
+ * - target: "product" 表示本期只奖励商品行
185
+ * - config.rewardTargets: 奖励对象数组,支持 { product_id, product_variant_id }
186
+ * - config.targetSelection: "consumer_best" 表示目标商品超额时选择节省金额最高的商品
187
+ * - value.rewardMethod:
188
+ * - "free": 目标商品最终价为 0
189
+ * - "percent_off": 百分比折扣,rewardValue 为 0-100
190
+ * - "amount_off": 每个目标商品固定减免 rewardValue
191
+ * - "fixed_price": 目标商品最终单价为 rewardValue
192
+ * - value.quantityRule:
193
+ * - "per_condition_quantity": 每满足 triggerQuantity 个条件商品,奖励 rewardQuantity 个目标商品
194
+ * - "all_targets": 满足条件后奖励全部目标商品
195
+ * - "max_per_order": 满足条件后每单最多奖励 maxRewardQuantity 个目标商品
196
+ */
197
+ const ITEM_REWARD_STRATEGY = exports.ITEM_REWARD_STRATEGY = {
190
198
  metadata: {
191
- id: "STRATEGY_003",
199
+ id: 'STRATEGY_003',
192
200
  name: {
193
- en: "Infant ticket free with child ticket",
194
- "zh-CN": "儿童票触发婴儿票免费",
195
- "zh-HK": "兒童票觸發嬰兒票免費"
201
+ en: 'Infant ticket free with child ticket',
202
+ 'zh-CN': '儿童票触发婴儿票免费',
203
+ 'zh-HK': '兒童票觸發嬰兒票免費'
196
204
  },
197
- type: "promotion",
205
+ type: 'promotion',
198
206
  custom: {
199
207
  display: {
200
208
  product_card: {
201
209
  text: {
202
- en: "Infant ticket free",
203
- "zh-CN": "婴儿票免费",
204
- "zh-HK": "嬰兒票免費"
210
+ en: 'Infant ticket free',
211
+ 'zh-CN': '婴儿票免费',
212
+ 'zh-HK': '嬰兒票免費'
205
213
  },
206
- type: "tag"
214
+ type: 'tag'
207
215
  }
208
216
  }
209
217
  }
210
218
  },
211
219
  conditions: {
212
- operator: "and",
213
- rules: [
214
- {
215
- type: "operator",
216
- field: "currentDateTime",
217
- value: "2023-01-01 00:00:00",
218
- operator: ">="
219
- },
220
- {
221
- type: "operator",
222
- field: "currentDateTime",
223
- value: "2030-01-01 00:00:00",
224
- operator: "<="
225
- },
226
- {
227
- type: "operator",
228
- field: "productIdAndVariantId",
229
- value: [
230
- {
231
- product_id: 1001,
232
- // 条件商品:儿童票
233
- product_variant_id: 0
234
- // 0 = 匹配任意变体
235
- }
236
- ],
237
- operator: "product_match"
238
- }
239
- ],
240
- actionIds: ["1"]
220
+ operator: 'and',
221
+ rules: [{
222
+ type: 'operator',
223
+ field: 'currentDateTime',
224
+ value: '2023-01-01 00:00:00',
225
+ operator: '>='
226
+ }, {
227
+ type: 'operator',
228
+ field: 'currentDateTime',
229
+ value: '2030-01-01 00:00:00',
230
+ operator: '<='
231
+ }, {
232
+ type: 'operator',
233
+ field: 'productIdAndVariantId',
234
+ value: [{
235
+ product_id: 1001,
236
+ // 条件商品:儿童票
237
+ product_variant_id: 0 // 0 = 匹配任意变体
238
+ }],
239
+ operator: 'product_match'
240
+ }],
241
+ actionIds: ['1']
241
242
  },
242
- actions: [
243
- {
244
- id: "1",
245
- type: "ITEM_REWARD",
246
- value: {
247
- rewardMethod: "free",
248
- // free | percent_off | amount_off | fixed_price
249
- rewardValue: 0,
250
- // free 可省略;其他 rewardMethod 使用
251
- quantityRule: "per_condition_quantity",
252
- // per_condition_quantity | all_targets | max_per_order
253
- triggerQuantity: 1,
254
- // N:每满足 N 个条件商品
255
- rewardQuantity: 1,
256
- // Y:奖励 Y 个目标商品
257
- maxRewardQuantity: 1
258
- // max_per_order 使用;本例保留为配置示意
259
- },
260
- valueType: "object",
261
- target: "product",
262
- priority: 1,
263
- config: {
264
- rewardTargets: [
265
- {
266
- product_id: 2001,
267
- // 奖励对象:婴儿票
268
- product_variant_id: 0
269
- // 0 = 匹配任意变体
270
- }
271
- ],
272
- targetSelection: "consumer_best"
273
- // consumer_best = 按可节省金额从高到低选择
274
- }
243
+ actions: [{
244
+ id: '1',
245
+ type: 'ITEM_REWARD',
246
+ value: {
247
+ rewardMethod: 'free',
248
+ // free | percent_off | amount_off | fixed_price
249
+ rewardValue: 0,
250
+ // free 可省略;其他 rewardMethod 使用
251
+ quantityRule: 'per_condition_quantity',
252
+ // per_condition_quantity | all_targets | max_per_order
253
+ triggerQuantity: 1,
254
+ // N:每满足 N 个条件商品
255
+ rewardQuantity: 1,
256
+ // Y:奖励 Y 个目标商品
257
+ maxRewardQuantity: 1 // max_per_order 使用;本例保留为配置示意
258
+ },
259
+ valueType: 'object',
260
+ target: 'product',
261
+ priority: 1,
262
+ config: {
263
+ rewardTargets: [{
264
+ product_id: 2001,
265
+ // 奖励对象:婴儿票
266
+ product_variant_id: 0 // 0 = 匹配任意变体
267
+ }],
268
+ targetSelection: 'consumer_best' // consumer_best = 按可节省金额从高到低选择
275
269
  }
276
- ]
277
- };
278
- // Annotate the CommonJS export names for ESM import in node:
279
- 0 && (module.exports = {
280
- BUY_X_GET_Y_FREE_STRATEGY,
281
- ITEM_REWARD_STRATEGY,
282
- X_ITEMS_FOR_Y_PRICE_STRATEGY
283
- });
270
+ }]
271
+ };
@@ -1,51 +1,46 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/model/strategy/adapter/promotion/index.ts
30
- var promotion_exports = {};
31
- __export(promotion_exports, {
32
- BUY_X_GET_Y_FREE_STRATEGY: () => import_examples.BUY_X_GET_Y_FREE_STRATEGY,
33
- ITEM_REWARD_STRATEGY: () => import_examples.ITEM_REWARD_STRATEGY,
34
- PromotionAdapter: () => import_adapter.PromotionAdapter,
35
- PromotionEvaluator: () => import_evaluator.PromotionEvaluator,
36
- X_ITEMS_FOR_Y_PRICE_STRATEGY: () => import_examples.X_ITEMS_FOR_Y_PRICE_STRATEGY,
37
- default: () => import_adapter2.default
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "BUY_X_GET_Y_FREE_STRATEGY", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _examples.BUY_X_GET_Y_FREE_STRATEGY;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "ITEM_REWARD_STRATEGY", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _examples.ITEM_REWARD_STRATEGY;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "PromotionAdapter", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _adapter.PromotionAdapter;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "PromotionEvaluator", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _evaluator.PromotionEvaluator;
28
+ }
38
29
  });
39
- module.exports = __toCommonJS(promotion_exports);
40
- var import_evaluator = require("./evaluator");
41
- var import_adapter = require("./adapter");
42
- var import_adapter2 = __toESM(require("./adapter"));
43
- var import_examples = require("./examples");
44
- // Annotate the CommonJS export names for ESM import in node:
45
- 0 && (module.exports = {
46
- BUY_X_GET_Y_FREE_STRATEGY,
47
- ITEM_REWARD_STRATEGY,
48
- PromotionAdapter,
49
- PromotionEvaluator,
50
- X_ITEMS_FOR_Y_PRICE_STRATEGY
30
+ Object.defineProperty(exports, "X_ITEMS_FOR_Y_PRICE_STRATEGY", {
31
+ enumerable: true,
32
+ get: function () {
33
+ return _examples.X_ITEMS_FOR_Y_PRICE_STRATEGY;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "default", {
37
+ enumerable: true,
38
+ get: function () {
39
+ return _adapter.default;
40
+ }
51
41
  });
42
+ var _evaluator = require("./evaluator");
43
+ var _adapter = _interopRequireWildcard(require("./adapter"));
44
+ var _examples = require("./examples");
45
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
46
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }