@pisell/pisellos 0.0.569 → 0.10.1

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 (329) 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/walletPass/evaluator.js +7 -5
  5. package/dist/model/strategy/adapter/walletPass/example.js +26 -3
  6. package/dist/model/strategy/adapter/walletPass/index.js +5 -5
  7. package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -3
  8. package/dist/model/strategy/adapter/walletPass/utils.d.ts +0 -26
  9. package/dist/model/strategy/adapter/walletPass/utils.js +17 -92
  10. package/dist/model/strategy/strategy-example.js +19 -5
  11. package/dist/modules/BaseModule.d.ts +1 -1
  12. package/dist/modules/BaseModule.js +8 -10
  13. package/dist/modules/Cart/index.js +3 -0
  14. package/dist/modules/Cart/utils/cartProduct.js +1 -0
  15. package/dist/modules/Cart/utils/cartResource.js +0 -2
  16. package/dist/modules/Cart/utils/changePrice.js +9 -16
  17. package/dist/modules/Date/index.js +5 -1
  18. package/dist/modules/Discount/index.d.ts +0 -1
  19. package/dist/modules/Discount/index.js +7 -22
  20. package/dist/modules/Discount/types.d.ts +0 -1
  21. package/dist/modules/OpenData/index.js +2 -0
  22. package/dist/modules/Order/index.d.ts +1 -1
  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 +0 -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.d.ts +1 -1
  167. package/lib/modules/Order/index.js +1909 -1572
  168. package/lib/modules/Order/types.js +35 -78
  169. package/lib/modules/Order/utils/bundleDiscountHydration.js +74 -41
  170. package/lib/modules/Order/utils/manualProductDiscount.js +123 -124
  171. package/lib/modules/Order/utils/orderCollectionIdentity.js +210 -148
  172. package/lib/modules/Order/utils.js +634 -799
  173. package/lib/modules/Payment/cash.js +33 -20
  174. package/lib/modules/Payment/cashRecommendationAlgorithm.js +76 -145
  175. package/lib/modules/Payment/eftpos.js +30 -16
  176. package/lib/modules/Payment/index.js +378 -518
  177. package/lib/modules/Payment/mx51.js +0 -1
  178. package/lib/modules/Payment/types.d.ts +4 -8
  179. package/lib/modules/Payment/types.js +107 -216
  180. package/lib/modules/Payment/utils.js +48 -51
  181. package/lib/modules/Payment/walletpass.d.ts +0 -2
  182. package/lib/modules/Payment/walletpass.js +211 -226
  183. package/lib/modules/Product/index.js +46 -51
  184. package/lib/modules/Product/types.js +16 -4
  185. package/lib/modules/Product/utils.js +33 -32
  186. package/lib/modules/ProductList/index.d.ts +1 -1
  187. package/lib/modules/ProductList/index.js +117 -117
  188. package/lib/modules/ProductList/types.d.ts +0 -1
  189. package/lib/modules/ProductList/types.js +31 -9
  190. package/lib/modules/Quotation/index.js +100 -66
  191. package/lib/modules/Quotation/types.js +16 -4
  192. package/lib/modules/Resource/index.js +59 -27
  193. package/lib/modules/Resource/types.js +32 -22
  194. package/lib/modules/Resource/utils.js +38 -30
  195. package/lib/modules/ResourcePlanner/index.js +61 -60
  196. package/lib/modules/ResourcePlanner/planner.js +384 -346
  197. package/lib/modules/ResourcePlanner/types.js +16 -4
  198. package/lib/modules/Rules/index.js +903 -1475
  199. package/lib/modules/Rules/types.js +40 -17
  200. package/lib/modules/SalesSummary/index.js +90 -85
  201. package/lib/modules/SalesSummary/types.js +16 -4
  202. package/lib/modules/SalesSummary/utils.js +427 -351
  203. package/lib/modules/ScanOrderLogger/index.js +79 -59
  204. package/lib/modules/ScanOrderLogger/providers/feishu.js +78 -54
  205. package/lib/modules/ScanOrderLogger/providers/grafana.js +36 -13
  206. package/lib/modules/ScanOrderLogger/types.js +16 -4
  207. package/lib/modules/Schedule/getDateIsInSchedule.js +163 -339
  208. package/lib/modules/Schedule/index.js +114 -100
  209. package/lib/modules/Schedule/type.js +16 -4
  210. package/lib/modules/Schedule/types.js +16 -4
  211. package/lib/modules/Schedule/utils.js +291 -433
  212. package/lib/modules/Step/index.js +52 -40
  213. package/lib/modules/Step/tyeps.js +16 -4
  214. package/lib/modules/Summary/index.js +71 -66
  215. package/lib/modules/Summary/types.js +16 -4
  216. package/lib/modules/Summary/utils.js +418 -791
  217. package/lib/modules/SurchargeList/index.js +60 -46
  218. package/lib/modules/SurchargeList/types.js +16 -4
  219. package/lib/modules/index.js +63 -245
  220. package/lib/plugins/app.js +16 -4
  221. package/lib/plugins/index.js +25 -36
  222. package/lib/plugins/request.js +126 -137
  223. package/lib/plugins/shopStore.js +16 -4
  224. package/lib/plugins/user.js +16 -4
  225. package/lib/plugins/window.js +179 -171
  226. package/lib/server/index.js +2337 -2675
  227. package/lib/server/modules/floor-plan/index.js +123 -102
  228. package/lib/server/modules/floor-plan/types.js +30 -15
  229. package/lib/server/modules/index.js +68 -106
  230. package/lib/server/modules/menu/index.js +122 -146
  231. package/lib/server/modules/menu/types.js +31 -18
  232. package/lib/server/modules/order/index.js +642 -567
  233. package/lib/server/modules/order/types.js +32 -117
  234. package/lib/server/modules/order/utils/filterBookings.js +194 -219
  235. package/lib/server/modules/order/utils/filterOrders.js +92 -118
  236. package/lib/server/modules/payment/index.js +83 -59
  237. package/lib/server/modules/payment/types.js +16 -4
  238. package/lib/server/modules/products/index.js +459 -575
  239. package/lib/server/modules/products/types.js +34 -44
  240. package/lib/server/modules/quotation/index.js +172 -137
  241. package/lib/server/modules/quotation/types.js +31 -21
  242. package/lib/server/modules/resource/index.js +184 -213
  243. package/lib/server/modules/resource/types.js +33 -42
  244. package/lib/server/modules/schedule/index.js +123 -135
  245. package/lib/server/modules/schedule/types.js +21 -14
  246. package/lib/server/modules/schedule/utils.js +163 -334
  247. package/lib/server/types.js +16 -4
  248. package/lib/server/utils/index.js +23 -25
  249. package/lib/server/utils/product.js +139 -196
  250. package/lib/server/utils/schedule.js +41 -34
  251. package/lib/server/utils/small-ticket.js +456 -478
  252. package/lib/server/utils/time.js +49 -40
  253. package/lib/solution/BaseSales/index.js +1016 -850
  254. package/lib/solution/BaseSales/types.js +37 -41
  255. package/lib/solution/BaseSales/utils/cartPromotion.js +460 -611
  256. package/lib/solution/BaseSales/utils/parseSalesResponse.js +105 -85
  257. package/lib/solution/BaseSales/utils/quotationPrice.js +114 -56
  258. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +143 -102
  259. package/lib/solution/BaseSales/utils.js +140 -155
  260. package/lib/solution/BookingByStep/index.d.ts +1 -1
  261. package/lib/solution/BookingByStep/index.js +1340 -1530
  262. package/lib/solution/BookingByStep/types.js +99 -40
  263. package/lib/solution/BookingByStep/utils/capacity.js +160 -192
  264. package/lib/solution/BookingByStep/utils/products.js +52 -42
  265. package/lib/solution/BookingByStep/utils/resources.js +330 -527
  266. package/lib/solution/BookingByStep/utils/stock.js +44 -65
  267. package/lib/solution/BookingByStep/utils/timeslots.js +131 -129
  268. package/lib/solution/BookingTicket/index.d.ts +1 -1
  269. package/lib/solution/BookingTicket/index.js +459 -543
  270. package/lib/solution/BookingTicket/types.js +77 -99
  271. package/lib/solution/BookingTicket/utils/addProductDecision.js +184 -219
  272. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +89 -58
  273. package/lib/solution/BookingTicket/utils/bookingStatus.js +78 -107
  274. package/lib/solution/BookingTicket/utils/cartView.js +94 -110
  275. package/lib/solution/BookingTicket/utils/exampleData.js +0 -185
  276. package/lib/solution/BookingTicket/utils/orderCustomer.js +41 -18
  277. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +86 -219
  278. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +93 -144
  279. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +91 -79
  280. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +41 -54
  281. package/lib/solution/BookingTicket/utils/scan/handleScan.js +81 -84
  282. package/lib/solution/BookingTicket/utils/scan/index.js +104 -98
  283. package/lib/solution/BookingTicket/utils/scan/scanCache.js +43 -90
  284. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +64 -52
  285. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +58 -56
  286. package/lib/solution/BuyTickets/index.js +70 -67
  287. package/lib/solution/BuyTickets/types.js +38 -22
  288. package/lib/solution/Checkout/index.js +1158 -1451
  289. package/lib/solution/Checkout/types.js +61 -91
  290. package/lib/solution/Checkout/utils/index.js +156 -228
  291. package/lib/solution/PlaceOrder/index.js +0 -55
  292. package/lib/solution/RegisterAndLogin/config.js +460 -493
  293. package/lib/solution/RegisterAndLogin/index.js +630 -633
  294. package/lib/solution/RegisterAndLogin/types.js +76 -189
  295. package/lib/solution/RegisterAndLogin/utils.js +125 -183
  296. package/lib/solution/Sales/index.js +320 -317
  297. package/lib/solution/Sales/types.js +33 -27
  298. package/lib/solution/ScanOrder/index.js +862 -831
  299. package/lib/solution/ScanOrder/types.js +34 -33
  300. package/lib/solution/ScanOrder/utils.js +371 -406
  301. package/lib/solution/ShopDiscount/index.js +233 -235
  302. package/lib/solution/ShopDiscount/types.d.ts +4 -5
  303. package/lib/solution/ShopDiscount/types.js +37 -15
  304. package/lib/solution/ShopDiscount/utils.d.ts +0 -9
  305. package/lib/solution/ShopDiscount/utils.js +172 -309
  306. package/lib/solution/UnifiedBookingSales/index.js +405 -379
  307. package/lib/solution/UnifiedBookingSales/types.js +31 -12
  308. package/lib/solution/VenueBooking/index.d.ts +3 -31
  309. package/lib/solution/VenueBooking/index.js +916 -967
  310. package/lib/solution/VenueBooking/types.d.ts +1 -3
  311. package/lib/solution/VenueBooking/types.js +39 -20
  312. package/lib/solution/VenueBooking/utils/dateSummary.d.ts +2 -2
  313. package/lib/solution/VenueBooking/utils/dateSummary.js +62 -25
  314. package/lib/solution/VenueBooking/utils/resource.js +54 -31
  315. package/lib/solution/VenueBooking/utils/slotMerge.js +107 -94
  316. package/lib/solution/VenueBooking/utils/timeSlot.d.ts +0 -2
  317. package/lib/solution/VenueBooking/utils/timeSlot.js +133 -138
  318. package/lib/solution/VenueBooking/utils.js +67 -130
  319. package/lib/solution/index.js +41 -124
  320. package/lib/store/createStore.js +29 -32
  321. package/lib/types/index.d.ts +1 -1
  322. package/lib/types/index.js +16 -4
  323. package/lib/utils/task.js +36 -36
  324. package/lib/utils/watch.js +47 -81
  325. package/package.json +2 -4
  326. package/dist/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  327. package/dist/solution/VenueBooking/utils/smartPricing.js +0 -233
  328. package/lib/solution/VenueBooking/utils/smartPricing.d.ts +0 -70
  329. 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
+ };