@pisell/pisellos 0.0.569 → 0.10.2

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 (328) hide show
  1. package/dist/core/index.js +10 -6
  2. package/dist/index.d.ts +0 -1
  3. package/dist/index.js +0 -3
  4. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  5. package/dist/model/strategy/adapter/walletPass/evaluator.js +7 -5
  6. package/dist/model/strategy/adapter/walletPass/example.js +26 -3
  7. package/dist/model/strategy/adapter/walletPass/index.js +5 -5
  8. package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
  9. package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
  10. package/dist/model/strategy/adapter/walletPass/utils.js +17 -92
  11. package/dist/model/strategy/strategy-example.js +19 -5
  12. package/dist/modules/BaseModule.d.ts +1 -1
  13. package/dist/modules/BaseModule.js +8 -10
  14. package/dist/modules/Cart/index.js +3 -0
  15. package/dist/modules/Cart/utils/cartProduct.js +1 -0
  16. package/dist/modules/Cart/utils/cartResource.js +0 -2
  17. package/dist/modules/Cart/utils/changePrice.js +9 -16
  18. package/dist/modules/Date/index.js +5 -1
  19. package/dist/modules/Discount/index.d.ts +0 -1
  20. package/dist/modules/Discount/index.js +7 -22
  21. package/dist/modules/Discount/types.d.ts +0 -1
  22. package/dist/modules/OpenData/index.js +2 -0
  23. package/dist/modules/Order/index.js +70 -40
  24. package/dist/modules/Payment/index.js +162 -97
  25. package/dist/modules/Payment/types.d.ts +4 -8
  26. package/dist/modules/Payment/walletpass.d.ts +0 -2
  27. package/dist/modules/Payment/walletpass.js +5 -4
  28. package/dist/modules/ProductList/index.d.ts +1 -1
  29. package/dist/modules/ProductList/index.js +3 -12
  30. package/dist/modules/ProductList/types.d.ts +0 -1
  31. package/dist/modules/Rules/index.js +126 -427
  32. package/dist/modules/SalesSummary/utils.js +1 -2
  33. package/dist/modules/Schedule/getDateIsInSchedule.js +0 -5
  34. package/dist/modules/Schedule/index.js +1 -0
  35. package/dist/modules/Schedule/utils.js +1 -0
  36. package/dist/modules/Step/index.js +1 -0
  37. package/dist/modules/Summary/utils.js +22 -43
  38. package/dist/plugins/request.js +4 -1
  39. package/dist/plugins/window.js +6 -2
  40. package/dist/server/index.js +129 -97
  41. package/dist/server/modules/menu/index.js +41 -32
  42. package/dist/server/modules/order/index.js +4 -2
  43. package/dist/server/modules/products/index.js +42 -24
  44. package/dist/server/modules/quotation/index.js +38 -29
  45. package/dist/server/modules/resource/index.js +4 -3
  46. package/dist/server/modules/schedule/index.js +35 -27
  47. package/dist/server/utils/product.js +1 -0
  48. package/dist/solution/BaseSales/index.js +41 -38
  49. package/dist/solution/BookingByStep/index.d.ts +1 -1
  50. package/dist/solution/BookingByStep/index.js +60 -11
  51. package/dist/solution/BookingByStep/utils/capacity.js +11 -1
  52. package/dist/solution/BookingByStep/utils/resources.js +3 -1
  53. package/dist/solution/BookingByStep/utils/timeslots.js +43 -2
  54. package/dist/solution/BookingTicket/index.d.ts +1 -1
  55. package/dist/solution/BookingTicket/index.js +2 -0
  56. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +7 -6
  57. package/dist/solution/BookingTicket/utils/scan/handleScan.js +31 -25
  58. package/dist/solution/BookingTicket/utils/scan/index.js +10 -6
  59. package/dist/solution/BuyTickets/index.js +12 -9
  60. package/dist/solution/Checkout/index.js +252 -177
  61. package/dist/solution/Checkout/utils/index.js +16 -4
  62. package/dist/solution/RegisterAndLogin/index.js +76 -30
  63. package/dist/solution/ScanOrder/index.js +60 -50
  64. package/dist/solution/ShopDiscount/index.js +14 -15
  65. package/dist/solution/ShopDiscount/types.d.ts +4 -5
  66. package/dist/solution/ShopDiscount/utils.d.ts +0 -9
  67. package/dist/solution/ShopDiscount/utils.js +0 -9
  68. package/dist/solution/VenueBooking/index.d.ts +3 -31
  69. package/dist/solution/VenueBooking/index.js +496 -651
  70. package/dist/solution/VenueBooking/types.d.ts +1 -3
  71. package/dist/solution/VenueBooking/types.js +0 -1
  72. package/dist/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  73. package/dist/solution/VenueBooking/utils/dateSummary.js +25 -12
  74. package/dist/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
  75. package/dist/solution/VenueBooking/utils/timeSlot.js +4 -9
  76. package/dist/types/index.d.ts +1 -1
  77. package/dist/utils/task.js +18 -15
  78. package/dist/utils/watch.js +1 -0
  79. package/lib/apis/picoding.js +0 -2
  80. package/lib/core/index.js +132 -130
  81. package/lib/effects/index.js +57 -46
  82. package/lib/index.d.ts +0 -1
  83. package/lib/index.js +50 -92
  84. package/lib/model/index.js +21 -14
  85. package/lib/model/strategy/adapter/dataVariant/adapter.js +50 -38
  86. package/lib/model/strategy/adapter/dataVariant/evaluator.js +236 -162
  87. package/lib/model/strategy/adapter/dataVariant/examples.js +237 -229
  88. package/lib/model/strategy/adapter/dataVariant/index.js +34 -39
  89. package/lib/model/strategy/adapter/dataVariant/type.js +28 -57
  90. package/lib/model/strategy/adapter/index.js +64 -100
  91. package/lib/model/strategy/adapter/itemRule/adapter.js +144 -156
  92. package/lib/model/strategy/adapter/itemRule/evaluator.js +48 -36
  93. package/lib/model/strategy/adapter/itemRule/examples.js +225 -295
  94. package/lib/model/strategy/adapter/itemRule/index.js +57 -83
  95. package/lib/model/strategy/adapter/itemRule/type.js +36 -97
  96. package/lib/model/strategy/adapter/promotion/adapter.js +63 -84
  97. package/lib/model/strategy/adapter/promotion/evaluator.js +231 -381
  98. package/lib/model/strategy/adapter/promotion/examples.js +159 -139
  99. package/lib/model/strategy/adapter/promotion/index.js +49 -1
  100. package/lib/model/strategy/adapter/promotion/type.js +35 -199
  101. package/lib/model/strategy/adapter/type.js +16 -4
  102. package/lib/model/strategy/adapter/walletPass/evaluator.js +152 -180
  103. package/lib/model/strategy/adapter/walletPass/example.js +190 -217
  104. package/lib/model/strategy/adapter/walletPass/index.js +51 -75
  105. package/lib/model/strategy/adapter/walletPass/locales.js +58 -36
  106. package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -3
  107. package/lib/model/strategy/adapter/walletPass/type.js +16 -4
  108. package/lib/model/strategy/adapter/walletPass/utils.d.ts +0 -26
  109. package/lib/model/strategy/adapter/walletPass/utils.js +383 -678
  110. package/lib/model/strategy/engine.js +168 -270
  111. package/lib/model/strategy/index.js +34 -49
  112. package/lib/model/strategy/strategy-example.js +239 -243
  113. package/lib/model/strategy/type.js +40 -100
  114. package/lib/modules/Account/index.js +53 -39
  115. package/lib/modules/Account/types.js +33 -20
  116. package/lib/modules/AccountList/index.js +154 -116
  117. package/lib/modules/AccountList/types.js +31 -30
  118. package/lib/modules/AccountList/utils.js +30 -18
  119. package/lib/modules/BaseModule.d.ts +1 -1
  120. package/lib/modules/BaseModule.js +46 -25
  121. package/lib/modules/BookingContext/index.js +136 -158
  122. package/lib/modules/BookingContext/types.js +32 -46
  123. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +143 -131
  124. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +82 -75
  125. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +150 -170
  126. package/lib/modules/BookingContext/utils/flexible.js +55 -38
  127. package/lib/modules/BookingContext/utils/formatResourceList.js +34 -19
  128. package/lib/modules/BookingContext/utils/index.js +41 -124
  129. package/lib/modules/BookingContext/utils/noResource.js +70 -58
  130. package/lib/modules/BookingContext/utils/orderLineDisplay.js +41 -14
  131. package/lib/modules/BookingContext/utils/productExtend.js +155 -202
  132. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  133. package/lib/modules/BookingContext/utils/resourceSelection.js +41 -19
  134. package/lib/modules/BookingContext/utils/resources.js +167 -209
  135. package/lib/modules/BookingContext/utils/serviceTimes.js +116 -115
  136. package/lib/modules/BookingContext/utils/timeSlices.js +80 -70
  137. package/lib/modules/Cart/index.js +124 -170
  138. package/lib/modules/Cart/types.js +51 -46
  139. package/lib/modules/Cart/utils/cartAccount.js +39 -40
  140. package/lib/modules/Cart/utils/cartDate.js +61 -56
  141. package/lib/modules/Cart/utils/cartDiscount.js +33 -28
  142. package/lib/modules/Cart/utils/cartNote.js +32 -27
  143. package/lib/modules/Cart/utils/cartProduct.js +251 -321
  144. package/lib/modules/Cart/utils/cartRelationForms.js +35 -29
  145. package/lib/modules/Cart/utils/cartResource.js +78 -72
  146. package/lib/modules/Cart/utils/changePrice.js +50 -28
  147. package/lib/modules/Cart/utils/index.js +48 -106
  148. package/lib/modules/Customer/constants.js +34 -13
  149. package/lib/modules/Customer/index.js +169 -232
  150. package/lib/modules/Customer/types.js +35 -38
  151. package/lib/modules/Date/index.js +115 -116
  152. package/lib/modules/Date/types.js +28 -16
  153. package/lib/modules/Date/utils.js +123 -174
  154. package/lib/modules/Discount/index.d.ts +0 -1
  155. package/lib/modules/Discount/index.js +128 -130
  156. package/lib/modules/Discount/types.d.ts +0 -1
  157. package/lib/modules/Discount/types.js +31 -9
  158. package/lib/modules/Guests/index.js +56 -30
  159. package/lib/modules/Guests/types.js +33 -23
  160. package/lib/modules/Holder/index.js +189 -209
  161. package/lib/modules/Holder/types.js +16 -4
  162. package/lib/modules/Holder/utils.js +49 -20
  163. package/lib/modules/OpenData/index.js +76 -69
  164. package/lib/modules/OpenData/types.js +16 -4
  165. package/lib/modules/OpenData/utils.js +78 -44
  166. package/lib/modules/Order/index.js +1909 -1572
  167. package/lib/modules/Order/types.js +35 -78
  168. package/lib/modules/Order/utils/bundleDiscountHydration.js +74 -41
  169. package/lib/modules/Order/utils/manualProductDiscount.js +123 -124
  170. package/lib/modules/Order/utils/orderCollectionIdentity.js +210 -148
  171. package/lib/modules/Order/utils.js +634 -799
  172. package/lib/modules/Payment/cash.js +33 -20
  173. package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
  174. package/lib/modules/Payment/eftpos.js +30 -16
  175. package/lib/modules/Payment/index.js +378 -518
  176. package/lib/modules/Payment/mx51.js +0 -1
  177. package/lib/modules/Payment/types.d.ts +4 -8
  178. package/lib/modules/Payment/types.js +107 -216
  179. package/lib/modules/Payment/utils.js +48 -51
  180. package/lib/modules/Payment/walletpass.d.ts +0 -2
  181. package/lib/modules/Payment/walletpass.js +211 -226
  182. package/lib/modules/Product/index.js +46 -51
  183. package/lib/modules/Product/types.js +16 -4
  184. package/lib/modules/Product/utils.js +33 -32
  185. package/lib/modules/ProductList/index.d.ts +1 -1
  186. package/lib/modules/ProductList/index.js +117 -117
  187. package/lib/modules/ProductList/types.d.ts +0 -1
  188. package/lib/modules/ProductList/types.js +31 -9
  189. package/lib/modules/Quotation/index.js +100 -66
  190. package/lib/modules/Quotation/types.js +16 -4
  191. package/lib/modules/Resource/index.js +59 -27
  192. package/lib/modules/Resource/types.js +32 -22
  193. package/lib/modules/Resource/utils.js +38 -30
  194. package/lib/modules/ResourcePlanner/index.js +61 -60
  195. package/lib/modules/ResourcePlanner/planner.js +384 -346
  196. package/lib/modules/ResourcePlanner/types.js +16 -4
  197. package/lib/modules/Rules/index.js +903 -1475
  198. package/lib/modules/Rules/types.js +40 -17
  199. package/lib/modules/SalesSummary/index.js +90 -85
  200. package/lib/modules/SalesSummary/types.js +16 -4
  201. package/lib/modules/SalesSummary/utils.js +427 -351
  202. package/lib/modules/ScanOrderLogger/index.js +79 -59
  203. package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
  204. package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
  205. package/lib/modules/ScanOrderLogger/types.js +16 -4
  206. package/lib/modules/Schedule/getDateIsInSchedule.js +163 -339
  207. package/lib/modules/Schedule/index.js +114 -100
  208. package/lib/modules/Schedule/type.js +16 -4
  209. package/lib/modules/Schedule/types.js +16 -4
  210. package/lib/modules/Schedule/utils.js +291 -433
  211. package/lib/modules/Step/index.js +52 -40
  212. package/lib/modules/Step/tyeps.js +16 -4
  213. package/lib/modules/Summary/index.js +71 -66
  214. package/lib/modules/Summary/types.js +16 -4
  215. package/lib/modules/Summary/utils.js +418 -791
  216. package/lib/modules/SurchargeList/index.js +60 -46
  217. package/lib/modules/SurchargeList/types.js +16 -4
  218. package/lib/modules/index.js +63 -245
  219. package/lib/plugins/app.js +16 -4
  220. package/lib/plugins/index.js +25 -36
  221. package/lib/plugins/request.js +126 -137
  222. package/lib/plugins/shopStore.js +16 -4
  223. package/lib/plugins/user.js +16 -4
  224. package/lib/plugins/window.js +179 -171
  225. package/lib/server/index.js +2337 -2675
  226. package/lib/server/modules/floor-plan/index.js +123 -102
  227. package/lib/server/modules/floor-plan/types.js +30 -15
  228. package/lib/server/modules/index.js +68 -106
  229. package/lib/server/modules/menu/index.js +122 -146
  230. package/lib/server/modules/menu/types.js +31 -18
  231. package/lib/server/modules/order/index.js +642 -567
  232. package/lib/server/modules/order/types.js +32 -117
  233. package/lib/server/modules/order/utils/filterBookings.js +194 -219
  234. package/lib/server/modules/order/utils/filterOrders.js +92 -118
  235. package/lib/server/modules/payment/index.js +83 -59
  236. package/lib/server/modules/payment/types.js +16 -4
  237. package/lib/server/modules/products/index.js +459 -575
  238. package/lib/server/modules/products/types.js +34 -44
  239. package/lib/server/modules/quotation/index.js +172 -137
  240. package/lib/server/modules/quotation/types.js +31 -21
  241. package/lib/server/modules/resource/index.js +184 -213
  242. package/lib/server/modules/resource/types.js +33 -42
  243. package/lib/server/modules/schedule/index.js +123 -135
  244. package/lib/server/modules/schedule/types.js +21 -14
  245. package/lib/server/modules/schedule/utils.js +163 -334
  246. package/lib/server/types.js +16 -4
  247. package/lib/server/utils/index.js +23 -25
  248. package/lib/server/utils/product.js +139 -196
  249. package/lib/server/utils/schedule.js +41 -34
  250. package/lib/server/utils/small-ticket.js +456 -478
  251. package/lib/server/utils/time.js +49 -40
  252. package/lib/solution/BaseSales/index.js +1016 -850
  253. package/lib/solution/BaseSales/types.js +37 -41
  254. package/lib/solution/BaseSales/utils/cartPromotion.js +460 -611
  255. package/lib/solution/BaseSales/utils/parseSalesResponse.js +105 -85
  256. package/lib/solution/BaseSales/utils/quotationPrice.js +114 -56
  257. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +143 -102
  258. package/lib/solution/BaseSales/utils.js +140 -155
  259. package/lib/solution/BookingByStep/index.d.ts +1 -1
  260. package/lib/solution/BookingByStep/index.js +1340 -1530
  261. package/lib/solution/BookingByStep/types.js +99 -40
  262. package/lib/solution/BookingByStep/utils/capacity.js +160 -192
  263. package/lib/solution/BookingByStep/utils/products.js +52 -42
  264. package/lib/solution/BookingByStep/utils/resources.js +330 -527
  265. package/lib/solution/BookingByStep/utils/stock.js +44 -65
  266. package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
  267. package/lib/solution/BookingTicket/index.d.ts +1 -1
  268. package/lib/solution/BookingTicket/index.js +459 -543
  269. package/lib/solution/BookingTicket/types.js +77 -99
  270. package/lib/solution/BookingTicket/utils/addProductDecision.js +184 -219
  271. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +89 -58
  272. package/lib/solution/BookingTicket/utils/bookingStatus.js +78 -107
  273. package/lib/solution/BookingTicket/utils/cartView.js +94 -110
  274. package/lib/solution/BookingTicket/utils/exampleData.js +0 -185
  275. package/lib/solution/BookingTicket/utils/orderCustomer.js +41 -18
  276. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +86 -219
  277. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +93 -144
  278. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +91 -79
  279. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +41 -54
  280. package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -84
  281. package/lib/solution/BookingTicket/utils/scan/index.js +104 -98
  282. package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
  283. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +64 -52
  284. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +58 -56
  285. package/lib/solution/BuyTickets/index.js +70 -67
  286. package/lib/solution/BuyTickets/types.js +38 -22
  287. package/lib/solution/Checkout/index.js +1158 -1451
  288. package/lib/solution/Checkout/types.js +61 -91
  289. package/lib/solution/Checkout/utils/index.js +156 -228
  290. package/lib/solution/PlaceOrder/index.js +0 -55
  291. package/lib/solution/RegisterAndLogin/config.js +460 -493
  292. package/lib/solution/RegisterAndLogin/index.js +630 -633
  293. package/lib/solution/RegisterAndLogin/types.js +76 -189
  294. package/lib/solution/RegisterAndLogin/utils.js +125 -183
  295. package/lib/solution/Sales/index.js +320 -317
  296. package/lib/solution/Sales/types.js +33 -27
  297. package/lib/solution/ScanOrder/index.js +862 -831
  298. package/lib/solution/ScanOrder/types.js +34 -33
  299. package/lib/solution/ScanOrder/utils.js +371 -406
  300. package/lib/solution/ShopDiscount/index.js +233 -235
  301. package/lib/solution/ShopDiscount/types.d.ts +4 -5
  302. package/lib/solution/ShopDiscount/types.js +37 -15
  303. package/lib/solution/ShopDiscount/utils.d.ts +0 -9
  304. package/lib/solution/ShopDiscount/utils.js +172 -309
  305. package/lib/solution/UnifiedBookingSales/index.js +405 -379
  306. package/lib/solution/UnifiedBookingSales/types.js +31 -12
  307. package/lib/solution/VenueBooking/index.d.ts +3 -31
  308. package/lib/solution/VenueBooking/index.js +916 -967
  309. package/lib/solution/VenueBooking/types.d.ts +1 -3
  310. package/lib/solution/VenueBooking/types.js +39 -20
  311. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  312. package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
  313. package/lib/solution/VenueBooking/utils/resource.js +54 -31
  314. package/lib/solution/VenueBooking/utils/slotMerge.js +107 -94
  315. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
  316. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
  317. package/lib/solution/VenueBooking/utils.js +67 -130
  318. package/lib/solution/index.js +41 -124
  319. package/lib/store/createStore.js +29 -32
  320. package/lib/types/index.d.ts +1 -1
  321. package/lib/types/index.js +16 -4
  322. package/lib/utils/task.js +36 -36
  323. package/lib/utils/watch.js +47 -81
  324. package/package.json +2 -4
  325. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  326. package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
  327. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  328. package/lib/solution/VenueBooking/utils/smartPricing.js +0 -192
@@ -1,234 +1,207 @@
1
- "use strict";
2
-
3
- var _evaluator = require("./evaluator");
4
- /**
5
- * WalletPass 评估器使用示例
6
- */
7
-
8
- // ============================================
9
- // 准备测试数据
10
- // ============================================
11
-
12
- // 1. 商品列表
13
- const products = [{
14
- product_id: 60734,
15
- price: 80,
16
- quantity: 1,
17
- name: '商品A'
18
- }, {
19
- product_id: 60735,
20
- price: 50,
21
- quantity: 2,
22
- name: '商品B'
23
- }];
24
-
25
- // 订单总金额 = 80 + 50*2 = 180
26
-
27
- // 2. Voucher 列表
28
- const vouchers = [{
29
- id: 'VOUCHER_001',
30
- amount: 10,
31
- balance: 10,
32
- type: 'cash_voucher'
33
- }, {
34
- id: 'VOUCHER_002',
35
- amount: 20,
36
- balance: 20,
37
- type: 'cash_voucher'
38
- }, {
39
- id: 'VOUCHER_003',
40
- amount: 50,
41
- balance: 50,
42
- type: 'cash_voucher'
43
- }];
44
-
45
- // 3. 策略配置
46
- const strategyConfigs = [
47
- // 策略1: 满100减10,适用于 VOUCHER_001
48
- {
49
- metadata: {
50
- id: 'STRATEGY_001',
51
- name: '满100减10',
52
- type: 'wallet_pass',
53
- custom: {
54
- maxDeductionAmount: 10,
55
- // 最大抵扣10元
56
- maxUsagePerOrder: 1,
57
- // 每单最多用1张
58
- deductTaxAndFee: true,
59
- // 抵扣税费
60
- applicableProductIds: [60734, 60735] // 适用于这两个商品
61
- }
62
- },
63
- conditions: {
64
- operator: 'and',
65
- rules: [
66
- // 匹配 voucher ID
67
- {
68
- type: 'operator',
69
- field: 'voucherId',
70
- operator: 'in',
71
- value: ['VOUCHER_001']
72
- },
73
- // 适用商品总额需 >= 100
74
- {
75
- type: 'operator',
76
- field: 'applicableProductTotal',
77
- operator: '>=',
78
- value: 100
79
- }],
80
- actionIds: ['deduct_10']
1
+ // src/model/strategy/adapter/walletPass/example.ts
2
+ var import_evaluator = require("./evaluator");
3
+ var products = [
4
+ {
5
+ product_id: 60734,
6
+ price: 80,
7
+ quantity: 1,
8
+ name: "商品A"
81
9
  },
82
- actions: [{
83
- id: 'deduct_10',
84
- type: 'DEDUCT_AMOUNT',
85
- value: 10,
86
- target: 'applicable_products',
87
- priority: 1
88
- }]
89
- },
90
- // 策略2: 满150减20,适用于 VOUCHER_002
91
- {
92
- metadata: {
93
- id: 'STRATEGY_002',
94
- name: '满150减20',
95
- type: 'wallet_pass',
96
- custom: {
97
- maxDeductionAmount: 20,
98
- maxUsagePerOrder: 1,
99
- deductTaxAndFee: true,
100
- applicableProductIds: [60734, 60735]
101
- }
10
+ {
11
+ product_id: 60735,
12
+ price: 50,
13
+ quantity: 2,
14
+ name: "商品B"
15
+ }
16
+ ];
17
+ var vouchers = [
18
+ {
19
+ id: "VOUCHER_001",
20
+ amount: 10,
21
+ balance: 10,
22
+ type: "cash_voucher"
102
23
  },
103
- conditions: {
104
- operator: 'and',
105
- rules: [{
106
- type: 'operator',
107
- field: 'voucherId',
108
- operator: 'in',
109
- value: ['VOUCHER_002']
110
- }, {
111
- type: 'operator',
112
- field: 'applicableProductTotal',
113
- operator: '>=',
114
- value: 150
115
- }],
116
- actionIds: ['deduct_20']
24
+ {
25
+ id: "VOUCHER_002",
26
+ amount: 20,
27
+ balance: 20,
28
+ type: "cash_voucher"
117
29
  },
118
- actions: [{
119
- id: 'deduct_20',
120
- type: 'DEDUCT_AMOUNT',
121
- value: 20,
122
- target: 'applicable_products',
123
- priority: 1
124
- }]
125
- },
126
- // 策略3: 满200减50,适用于 VOUCHER_003
127
- {
128
- metadata: {
129
- id: 'STRATEGY_003',
130
- name: '满200减50',
131
- type: 'wallet_pass',
132
- custom: {
133
- maxDeductionAmount: 50,
134
- maxUsagePerOrder: 2,
135
- deductTaxAndFee: false,
136
- applicableProductIds: [60734, 60735]
137
- }
30
+ {
31
+ id: "VOUCHER_003",
32
+ amount: 50,
33
+ balance: 50,
34
+ type: "cash_voucher"
35
+ }
36
+ ];
37
+ var strategyConfigs = [
38
+ // 策略1: 满100减10,适用于 VOUCHER_001
39
+ {
40
+ metadata: {
41
+ id: "STRATEGY_001",
42
+ name: "满100减10",
43
+ type: "wallet_pass",
44
+ custom: {
45
+ maxDeductionAmount: 10,
46
+ // 最大抵扣10元
47
+ maxUsagePerOrder: 1,
48
+ // 每单最多用1张
49
+ deductTaxAndFee: true,
50
+ // 抵扣税费
51
+ applicableProductIds: [60734, 60735]
52
+ // 适用于这两个商品
53
+ }
54
+ },
55
+ conditions: {
56
+ operator: "and",
57
+ rules: [
58
+ // 匹配 voucher ID
59
+ {
60
+ type: "operator",
61
+ field: "voucherId",
62
+ operator: "in",
63
+ value: ["VOUCHER_001"]
64
+ },
65
+ // 适用商品总额需 >= 100
66
+ {
67
+ type: "operator",
68
+ field: "applicableProductTotal",
69
+ operator: ">=",
70
+ value: 100
71
+ }
72
+ ],
73
+ actionIds: ["deduct_10"]
74
+ },
75
+ actions: [
76
+ {
77
+ id: "deduct_10",
78
+ type: "DEDUCT_AMOUNT",
79
+ value: 10,
80
+ target: "applicable_products",
81
+ priority: 1
82
+ }
83
+ ]
138
84
  },
139
- conditions: {
140
- operator: 'and',
141
- rules: [{
142
- type: 'operator',
143
- field: 'voucherId',
144
- operator: 'in',
145
- value: ['VOUCHER_003']
146
- }, {
147
- type: 'operator',
148
- field: 'applicableProductTotal',
149
- operator: '>=',
150
- value: 200
151
- }],
152
- actionIds: ['deduct_50']
85
+ // 策略2: 满150减20,适用于 VOUCHER_002
86
+ {
87
+ metadata: {
88
+ id: "STRATEGY_002",
89
+ name: "满150减20",
90
+ type: "wallet_pass",
91
+ custom: {
92
+ maxDeductionAmount: 20,
93
+ maxUsagePerOrder: 1,
94
+ deductTaxAndFee: true,
95
+ applicableProductIds: [60734, 60735]
96
+ }
97
+ },
98
+ conditions: {
99
+ operator: "and",
100
+ rules: [
101
+ {
102
+ type: "operator",
103
+ field: "voucherId",
104
+ operator: "in",
105
+ value: ["VOUCHER_002"]
106
+ },
107
+ {
108
+ type: "operator",
109
+ field: "applicableProductTotal",
110
+ operator: ">=",
111
+ value: 150
112
+ }
113
+ ],
114
+ actionIds: ["deduct_20"]
115
+ },
116
+ actions: [
117
+ {
118
+ id: "deduct_20",
119
+ type: "DEDUCT_AMOUNT",
120
+ value: 20,
121
+ target: "applicable_products",
122
+ priority: 1
123
+ }
124
+ ]
153
125
  },
154
- actions: [{
155
- id: 'deduct_50',
156
- type: 'DEDUCT_AMOUNT',
157
- value: 50,
158
- target: 'applicable_products',
159
- priority: 1
160
- }]
161
- }];
162
-
163
- // ============================================
164
- // 执行评估
165
- // ============================================
166
-
126
+ // 策略3: 满200减50,适用于 VOUCHER_003
127
+ {
128
+ metadata: {
129
+ id: "STRATEGY_003",
130
+ name: "满200减50",
131
+ type: "wallet_pass",
132
+ custom: {
133
+ maxDeductionAmount: 50,
134
+ maxUsagePerOrder: 2,
135
+ deductTaxAndFee: false,
136
+ applicableProductIds: [60734, 60735]
137
+ }
138
+ },
139
+ conditions: {
140
+ operator: "and",
141
+ rules: [
142
+ {
143
+ type: "operator",
144
+ field: "voucherId",
145
+ operator: "in",
146
+ value: ["VOUCHER_003"]
147
+ },
148
+ {
149
+ type: "operator",
150
+ field: "applicableProductTotal",
151
+ operator: ">=",
152
+ value: 200
153
+ }
154
+ ],
155
+ actionIds: ["deduct_50"]
156
+ },
157
+ actions: [
158
+ {
159
+ id: "deduct_50",
160
+ type: "DEDUCT_AMOUNT",
161
+ value: 50,
162
+ target: "applicable_products",
163
+ priority: 1
164
+ }
165
+ ]
166
+ }
167
+ ];
167
168
  function runExample() {
168
- // 创建评估器实例
169
- const evaluator = new _evaluator.WalletPassEvaluator();
170
-
171
- // 执行评估
169
+ console.log("========== WalletPass 评估器示例 ==========\n");
170
+ const evaluator = new import_evaluator.WalletPassEvaluator();
172
171
  const results = evaluator.evaluate({
173
172
  orderTotalAmount: 180,
174
173
  products,
175
174
  vouchers,
176
- strategyConfigs: strategyConfigs
175
+ strategyConfigs
177
176
  });
178
-
179
- // 输出结果
180
-
177
+ console.log("订单信息:");
178
+ console.log(`- 总金额: ${180} 元`);
179
+ console.log(`- 商品: ${products.map((p) => `${p.name}(${p.quantity}件)`).join(", ")}
180
+ `);
181
+ console.log("评估结果:\n");
181
182
  results.forEach((result, index) => {
182
- if (result.isApplicable) {} else {}
183
+ console.log(`Voucher ${index + 1}: ${result.voucher.id}`);
184
+ console.log(` 面额: ${result.voucher.amount} 元`);
185
+ console.log(` 可用: ${result.isApplicable ? "✅ 是" : "❌ 否"}`);
186
+ if (result.isApplicable) {
187
+ console.log(` 最大抵扣: ${result.maxDeduction} 元`);
188
+ console.log(` 每单可用: ${result.canUseCount} 张`);
189
+ console.log(` 抵扣税费: ${result.deductTaxAndFee ? "是" : "否"}`);
190
+ console.log(` 适用商品: ${result.applicableProductIds.join(", ")}`);
191
+ } else {
192
+ console.log(` 原因: ${result.reason}`);
193
+ console.log(` 原因码: ${result.reasonCode}`);
194
+ }
195
+ console.log("");
183
196
  });
184
-
185
- // 筛选可用的 vouchers
186
- const availableVouchers = results.filter(r => r.isApplicable);
197
+ const availableVouchers = results.filter((r) => r.isApplicable);
198
+ console.log(`
199
+ 共 ${availableVouchers.length} 张可用`);
187
200
  if (availableVouchers.length > 0) {
188
- availableVouchers.forEach(v => {});
201
+ console.log("可用 voucher ID:");
202
+ availableVouchers.forEach((v) => {
203
+ console.log(` - ${v.voucher.id}: 最多抵扣 ${v.maxDeduction} 元`);
204
+ });
189
205
  }
190
206
  }
191
-
192
- // 运行示例
193
207
  runExample();
194
-
195
- // ============================================
196
- // 预期输出
197
- // ============================================
198
- /*
199
- ========== WalletPass 评估器示例 ==========
200
-
201
- 订单信息:
202
- - 总金额: 180 元
203
- - 商品: 商品A(1件), 商品B(2件)
204
-
205
- 评估结果:
206
-
207
- Voucher 1: VOUCHER_001
208
- 面额: 10 元
209
- 可用: ✅ 是
210
- 最大抵扣: 10 元
211
- 每单可用: 1 张
212
- 抵扣税费: 是
213
- 适用商品: 60734, 60735
214
-
215
- Voucher 2: VOUCHER_002
216
- 面额: 20 元
217
- 可用: ✅ 是
218
- 最大抵扣: 20 元
219
- 每单可用: 1 张
220
- 抵扣税费: 是
221
- 适用商品: 60734, 60735
222
-
223
- Voucher 3: VOUCHER_003
224
- 面额: 50 元
225
- 可用: ❌ 否
226
- 原因: Conditions not met
227
- 原因码: CONDITION_NOT_MET
228
-
229
-
230
- 共 2 张可用
231
- 可用 voucher ID:
232
- - VOUCHER_001: 最多抵扣 10 元
233
- - VOUCHER_002: 最多抵扣 20 元
234
- */
@@ -1,44 +1,48 @@
1
- "use strict";
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);
2
18
 
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
19
+ // src/model/strategy/adapter/walletPass/index.ts
20
+ var walletPass_exports = {};
21
+ __export(walletPass_exports, {
22
+ default: () => WalletPassAdapter
5
23
  });
6
- exports.default = void 0;
7
- var _utils = require("./utils");
8
- /**
9
- * Wallet Pass 适配器
10
- * 用于将 wallet pass 业务数据转换为策略引擎可识别的格式
11
- */
12
- class WalletPassAdapter {
13
- name = 'WalletPassAdapter';
14
- version = '1.0.0';
15
-
24
+ module.exports = __toCommonJS(walletPass_exports);
25
+ var import_utils = require("./utils");
26
+ var WalletPassAdapter = class {
27
+ constructor() {
28
+ this.name = "WalletPassAdapter";
29
+ this.version = "1.0.0";
30
+ }
16
31
  /**
17
32
  * 准备运行时上下文
18
33
  * 将业务数据转换为策略引擎可识别的 RuntimeContext
19
34
  */
20
35
  prepareContext(businessData) {
21
- const {
22
- orderTotalAmount,
36
+ var _a, _b;
37
+ const { orderTotalAmount, products, voucher, strategyConfig } = businessData;
38
+ const productIds = products.map((p) => p.product_id);
39
+ const applicableProductIds = (0, import_utils.getApplicableProductIds)(voucher);
40
+ const deductTaxAndFee = ((_b = (_a = strategyConfig == null ? void 0 : strategyConfig.metadata) == null ? void 0 : _a.custom) == null ? void 0 : _b.deductTaxAndFee) ?? true;
41
+ const { applicableTotal, applicableCount } = this.calculateApplicableProducts(
23
42
  products,
24
- voucher,
25
- strategyConfig
26
- } = businessData;
27
-
28
- // 提取订单中的商品ID
29
- const productIds = products.map(p => p.product_id);
30
-
31
- // 从 voucher 中获取适用商品ID
32
- const applicableProductIds = (0, _utils.getApplicableProductIds)(voucher);
33
-
34
- // 获取 deductTaxAndFee 配置
35
- const deductTaxAndFee = strategyConfig?.metadata?.custom?.deductTaxAndFee ?? true;
36
-
37
- // 计算适用商品的总金额和数量
38
- const {
39
- applicableTotal,
40
- applicableCount
41
- } = this.calculateApplicableProducts(products, applicableProductIds, deductTaxAndFee);
43
+ applicableProductIds,
44
+ deductTaxAndFee
45
+ );
42
46
  return {
43
47
  entities: {
44
48
  voucher,
@@ -65,19 +69,15 @@ class WalletPassAdapter {
65
69
  }
66
70
  };
67
71
  }
68
-
69
72
  /**
70
73
  * 转换执行结果
71
74
  * 将策略引擎的通用结果转换为业务层需要的格式
72
75
  */
73
76
  transformResult(result, businessData) {
74
- // 从策略配置中获取业务配置
75
- const strategyConfig = businessData?.strategyConfig;
76
- const businessConfig = strategyConfig?.metadata.custom || {};
77
-
78
- // 从 voucher 中获取适用商品ID
79
- const voucher = businessData?.voucher;
80
- const applicableProductIds = voucher ? (0, _utils.getApplicableProductIds)(voucher) : null;
77
+ const strategyConfig = businessData == null ? void 0 : businessData.strategyConfig;
78
+ const businessConfig = (strategyConfig == null ? void 0 : strategyConfig.metadata.custom) || {};
79
+ const voucher = businessData == null ? void 0 : businessData.voucher;
80
+ const applicableProductIds = voucher ? (0, import_utils.getApplicableProductIds)(voucher) : null;
81
81
  if (!result.applicable) {
82
82
  return {
83
83
  isApplicable: false,
@@ -90,8 +90,6 @@ class WalletPassAdapter {
90
90
  strategyResult: result
91
91
  };
92
92
  }
93
-
94
- // 从配置中获取业务字段(不需要计算)
95
93
  const maxDeduction = businessConfig.maxDeductionAmount || 0;
96
94
  const canUseCount = businessConfig.maxUsagePerOrder || 0;
97
95
  const deductTaxAndFee = businessConfig.deductTaxAndFee || false;
@@ -104,63 +102,41 @@ class WalletPassAdapter {
104
102
  strategyResult: result
105
103
  };
106
104
  }
107
-
108
105
  /**
109
106
  * 格式化配置
110
107
  */
111
108
  formatConfig(result, businessData) {
112
- return {
113
- result,
114
- businessData
115
- };
109
+ return { result, businessData };
116
110
  }
117
-
118
111
  /**
119
112
  * 计算适用商品的总金额和数量
120
113
  */
121
114
  calculateApplicableProducts(products, applicableProductIds, deductTaxAndFee = true) {
122
115
  let total = 0;
123
116
  let count = 0;
124
-
125
- // 如果为空数组,不适用任何商品
126
117
  if (applicableProductIds !== null && applicableProductIds.length === 0) {
127
- return {
128
- applicableTotal: 0,
129
- applicableCount: 0
130
- };
118
+ return { applicableTotal: 0, applicableCount: 0 };
131
119
  }
132
- products.forEach(product => {
133
- const productQuantity = (0, _utils.getProductQuantity)(product);
134
-
135
- // 检查主商品是否适用
120
+ products.forEach((product) => {
121
+ const productQuantity = (0, import_utils.getProductQuantity)(product);
136
122
  const isMainProductApplicable = applicableProductIds === null || applicableProductIds.includes(product.product_id);
137
123
  if (isMainProductApplicable) {
138
- // 计算主商品价格(包含加减价子商品)= 单价 * 数量 + 舍入余数 - 商品差额
139
- total += (0, _utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity + (0, _utils.getTaxAndFeeRoundingRemainder)(product, deductTaxAndFee) - (0, _utils.getProductDiscountDifference)(product);
124
+ total += (0, import_utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity;
140
125
  count += productQuantity;
141
126
  }
142
-
143
- // 检查原价子商品(需要单独判断适用性)
144
127
  if (product.product_bundle && product.product_bundle.length > 0) {
145
- product.product_bundle.forEach(bundleItem => {
146
- // 只处理原价子商品,加减价子商品已包含在主商品价格中
147
- if ((0, _utils.getBundleItemIsOriginalPrice)(bundleItem)) {
148
- // 检查子商品是否适用
128
+ product.product_bundle.forEach((bundleItem) => {
129
+ if ((0, import_utils.getBundleItemIsOriginalPrice)(bundleItem)) {
149
130
  const isBundleItemApplicable = applicableProductIds === null || applicableProductIds.includes(bundleItem.bundle_product_id);
150
131
  if (isBundleItemApplicable) {
151
- // 计算原价子商品价格 = 总价 + 舍入余数 - 商品差额
152
132
  const bundleItemQuantity = bundleItem.num * productQuantity;
153
- total += (0, _utils.getBundleItemPrice)(bundleItem, productQuantity, deductTaxAndFee) + (0, _utils.getBundleItemTaxAndFeeRoundingRemainder)(bundleItem, deductTaxAndFee) - (0, _utils.getBundleItemDiscountDifference)(bundleItem);
133
+ total += (0, import_utils.getBundleItemPrice)(bundleItem, productQuantity, deductTaxAndFee);
154
134
  count += bundleItemQuantity;
155
135
  }
156
136
  }
157
137
  });
158
138
  }
159
139
  });
160
- return {
161
- applicableTotal: total,
162
- applicableCount: count
163
- };
140
+ return { applicableTotal: total, applicableCount: count };
164
141
  }
165
- }
166
- exports.default = WalletPassAdapter;
142
+ };