@pisell/pisellos 0.10.15 → 0.10.17

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 (331) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  3. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  4. package/dist/model/strategy/strategy-example.js +5 -19
  5. package/dist/modules/Cart/index.js +0 -3
  6. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  7. package/dist/modules/Date/index.js +1 -5
  8. package/dist/modules/Discount/index.js +2 -4
  9. package/dist/modules/OpenData/index.d.ts +5 -2
  10. package/dist/modules/OpenData/index.js +27 -14
  11. package/dist/modules/OpenData/types.d.ts +42 -0
  12. package/dist/modules/OpenData/types.js +7 -1
  13. package/dist/modules/OpenData/utils.d.ts +15 -1
  14. package/dist/modules/OpenData/utils.js +85 -0
  15. package/dist/modules/Order/index.d.ts +4 -2
  16. package/dist/modules/Order/index.js +131 -123
  17. package/dist/modules/Order/types.d.ts +8 -1
  18. package/dist/modules/Order/types.js +1 -0
  19. package/dist/modules/Order/utils.js +7 -1
  20. package/dist/modules/Payment/index.js +97 -162
  21. package/dist/modules/Product/types.d.ts +2 -0
  22. package/dist/modules/ProductList/index.js +96 -74
  23. package/dist/modules/Rules/index.js +12 -12
  24. package/dist/modules/SalesSummary/index.js +6 -4
  25. package/dist/modules/Schedule/index.js +0 -1
  26. package/dist/modules/Schedule/utils.js +0 -1
  27. package/dist/modules/Step/index.js +0 -1
  28. package/dist/plugins/request.js +1 -4
  29. package/dist/plugins/window.js +2 -6
  30. package/dist/server/index.d.ts +11 -0
  31. package/dist/server/index.js +977 -641
  32. package/dist/server/modules/menu/index.js +32 -41
  33. package/dist/server/modules/order/index.d.ts +8 -0
  34. package/dist/server/modules/order/index.js +253 -219
  35. package/dist/server/modules/products/index.js +24 -42
  36. package/dist/server/modules/quotation/index.js +29 -38
  37. package/dist/server/modules/resource/index.js +3 -4
  38. package/dist/server/modules/schedule/index.js +27 -35
  39. package/dist/server/utils/product.js +0 -1
  40. package/dist/server/utils/small-ticket.d.ts +9 -1
  41. package/dist/server/utils/small-ticket.js +117 -43
  42. package/dist/solution/BaseSales/index.d.ts +7 -0
  43. package/dist/solution/BaseSales/index.js +350 -215
  44. package/dist/solution/BaseSales/types.d.ts +2 -0
  45. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  46. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  47. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  48. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  49. package/dist/solution/BaseSales/utils.js +6 -3
  50. package/dist/solution/BookingByStep/index.d.ts +2 -2
  51. package/dist/solution/BookingByStep/index.js +7 -59
  52. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  53. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  54. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  55. package/dist/solution/BookingTicket/index.d.ts +14 -19
  56. package/dist/solution/BookingTicket/index.js +553 -433
  57. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  58. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  59. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  60. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  61. package/dist/solution/BuyTickets/index.js +9 -12
  62. package/dist/solution/Checkout/index.js +177 -252
  63. package/dist/solution/Checkout/utils/index.js +4 -16
  64. package/dist/solution/RegisterAndLogin/index.js +30 -76
  65. package/dist/solution/Sales/index.d.ts +20 -4
  66. package/dist/solution/Sales/index.js +348 -75
  67. package/dist/solution/Sales/types.d.ts +10 -0
  68. package/dist/solution/ScanOrder/index.js +50 -60
  69. package/dist/solution/ScanOrder/types.d.ts +2 -0
  70. package/dist/solution/ScanOrder/utils.js +6 -3
  71. package/dist/solution/ShopDiscount/index.js +2 -7
  72. package/dist/solution/UnifiedBookingSales/index.d.ts +5 -4
  73. package/dist/solution/UnifiedBookingSales/index.js +495 -422
  74. package/dist/solution/UnifiedBookingSales/types.d.ts +7 -1
  75. package/dist/solution/VenueBooking/index.js +45 -55
  76. package/dist/utils/task.js +15 -18
  77. package/dist/utils/watch.js +0 -1
  78. package/lib/apis/picoding.js +2 -0
  79. package/lib/core/index.js +131 -131
  80. package/lib/effects/index.js +46 -57
  81. package/lib/index.js +82 -49
  82. package/lib/model/index.js +14 -21
  83. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  84. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  85. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  86. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  87. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  88. package/lib/model/strategy/adapter/index.js +100 -64
  89. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  90. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  91. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  92. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  93. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  94. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  95. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  96. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  97. package/lib/model/strategy/adapter/promotion/index.js +1 -51
  98. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  99. package/lib/model/strategy/adapter/type.js +4 -16
  100. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  101. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  102. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  103. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  104. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  105. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  106. package/lib/model/strategy/engine.js +270 -168
  107. package/lib/model/strategy/index.js +49 -34
  108. package/lib/model/strategy/strategy-example.js +243 -239
  109. package/lib/model/strategy/type.js +100 -40
  110. package/lib/modules/Account/index.js +39 -53
  111. package/lib/modules/Account/types.js +20 -33
  112. package/lib/modules/AccountList/index.js +116 -154
  113. package/lib/modules/AccountList/types.js +30 -31
  114. package/lib/modules/AccountList/utils.js +18 -30
  115. package/lib/modules/BaseModule.js +23 -42
  116. package/lib/modules/BookingContext/index.js +158 -136
  117. package/lib/modules/BookingContext/types.js +46 -32
  118. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  119. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  120. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  121. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  122. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  123. package/lib/modules/BookingContext/utils/index.js +124 -41
  124. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  125. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  126. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  127. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  128. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  129. package/lib/modules/BookingContext/utils/resources.js +209 -167
  130. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  131. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  132. package/lib/modules/Cart/index.js +170 -124
  133. package/lib/modules/Cart/types.js +46 -51
  134. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  135. package/lib/modules/Cart/utils/cartDate.js +56 -61
  136. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  137. package/lib/modules/Cart/utils/cartNote.js +27 -32
  138. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  139. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  140. package/lib/modules/Cart/utils/cartResource.js +70 -78
  141. package/lib/modules/Cart/utils/changePrice.js +22 -50
  142. package/lib/modules/Cart/utils/index.js +106 -48
  143. package/lib/modules/Customer/constants.js +13 -34
  144. package/lib/modules/Customer/index.js +235 -172
  145. package/lib/modules/Customer/types.js +38 -35
  146. package/lib/modules/Date/index.js +116 -115
  147. package/lib/modules/Date/types.js +16 -28
  148. package/lib/modules/Date/utils.js +174 -123
  149. package/lib/modules/Discount/index.js +133 -143
  150. package/lib/modules/Discount/types.js +9 -31
  151. package/lib/modules/Guests/index.js +30 -56
  152. package/lib/modules/Guests/types.js +23 -33
  153. package/lib/modules/Holder/index.js +209 -189
  154. package/lib/modules/Holder/types.js +4 -16
  155. package/lib/modules/Holder/utils.js +20 -49
  156. package/lib/modules/OpenData/index.d.ts +5 -2
  157. package/lib/modules/OpenData/index.js +119 -78
  158. package/lib/modules/OpenData/types.d.ts +42 -0
  159. package/lib/modules/OpenData/types.js +12 -16
  160. package/lib/modules/OpenData/utils.d.ts +15 -1
  161. package/lib/modules/OpenData/utils.js +129 -78
  162. package/lib/modules/Order/index.d.ts +4 -2
  163. package/lib/modules/Order/index.js +1843 -2251
  164. package/lib/modules/Order/payment-utils.js +77 -120
  165. package/lib/modules/Order/types.d.ts +8 -1
  166. package/lib/modules/Order/types.js +88 -35
  167. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  168. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  169. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  170. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  171. package/lib/modules/Order/utils/virtualSettlement.js +120 -171
  172. package/lib/modules/Order/utils.js +834 -668
  173. package/lib/modules/Payment/cash.js +20 -33
  174. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  175. package/lib/modules/Payment/eftpos.js +16 -30
  176. package/lib/modules/Payment/index.js +532 -399
  177. package/lib/modules/Payment/mx51.js +1 -0
  178. package/lib/modules/Payment/types.js +230 -108
  179. package/lib/modules/Payment/utils.js +52 -51
  180. package/lib/modules/Payment/walletpass.js +485 -660
  181. package/lib/modules/Product/index.js +51 -46
  182. package/lib/modules/Product/types.d.ts +2 -0
  183. package/lib/modules/Product/types.js +4 -16
  184. package/lib/modules/Product/utils.js +32 -33
  185. package/lib/modules/ProductList/index.js +141 -161
  186. package/lib/modules/ProductList/types.js +9 -31
  187. package/lib/modules/Quotation/index.js +66 -100
  188. package/lib/modules/Quotation/types.js +4 -16
  189. package/lib/modules/Resource/index.js +27 -59
  190. package/lib/modules/Resource/types.js +22 -32
  191. package/lib/modules/Resource/utils.js +30 -38
  192. package/lib/modules/ResourcePlanner/index.js +25 -23
  193. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  194. package/lib/modules/ResourcePlanner/planner.js +591 -772
  195. package/lib/modules/ResourcePlanner/types.js +10 -29
  196. package/lib/modules/Rules/index.js +1224 -963
  197. package/lib/modules/Rules/types.js +17 -40
  198. package/lib/modules/SalesSummary/index.js +80 -89
  199. package/lib/modules/SalesSummary/types.js +4 -16
  200. package/lib/modules/SalesSummary/utils.js +359 -442
  201. package/lib/modules/ScanOrderLogger/index.js +59 -79
  202. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  203. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  204. package/lib/modules/ScanOrderLogger/types.js +4 -16
  205. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  206. package/lib/modules/Schedule/index.js +100 -114
  207. package/lib/modules/Schedule/type.js +4 -16
  208. package/lib/modules/Schedule/types.js +4 -16
  209. package/lib/modules/Schedule/utils.js +433 -291
  210. package/lib/modules/Step/index.js +40 -52
  211. package/lib/modules/Step/tyeps.js +4 -16
  212. package/lib/modules/Summary/index.js +66 -71
  213. package/lib/modules/Summary/types.js +4 -16
  214. package/lib/modules/Summary/utils.js +773 -418
  215. package/lib/modules/SurchargeList/index.js +46 -60
  216. package/lib/modules/SurchargeList/types.js +4 -16
  217. package/lib/modules/index.js +245 -63
  218. package/lib/plugins/app.js +4 -16
  219. package/lib/plugins/index.js +36 -25
  220. package/lib/plugins/request.js +137 -126
  221. package/lib/plugins/shopStore.js +4 -16
  222. package/lib/plugins/user.js +4 -16
  223. package/lib/plugins/window.js +171 -179
  224. package/lib/server/index.d.ts +11 -0
  225. package/lib/server/index.js +3432 -2757
  226. package/lib/server/modules/floor-plan/index.js +102 -123
  227. package/lib/server/modules/floor-plan/types.js +15 -30
  228. package/lib/server/modules/index.js +106 -68
  229. package/lib/server/modules/menu/index.js +146 -122
  230. package/lib/server/modules/menu/types.js +18 -31
  231. package/lib/server/modules/order/index.d.ts +8 -0
  232. package/lib/server/modules/order/index.js +781 -956
  233. package/lib/server/modules/order/types.js +122 -33
  234. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  235. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  236. package/lib/server/modules/payment/index.js +59 -83
  237. package/lib/server/modules/payment/types.js +4 -16
  238. package/lib/server/modules/products/index.js +575 -459
  239. package/lib/server/modules/products/types.js +44 -34
  240. package/lib/server/modules/quotation/index.js +137 -172
  241. package/lib/server/modules/quotation/types.js +21 -31
  242. package/lib/server/modules/resource/index.js +213 -184
  243. package/lib/server/modules/resource/types.js +42 -33
  244. package/lib/server/modules/schedule/index.js +135 -123
  245. package/lib/server/modules/schedule/types.js +14 -21
  246. package/lib/server/modules/schedule/utils.js +334 -163
  247. package/lib/server/types.js +4 -16
  248. package/lib/server/utils/index.js +25 -23
  249. package/lib/server/utils/product.js +196 -139
  250. package/lib/server/utils/schedule.js +34 -41
  251. package/lib/server/utils/small-ticket.d.ts +9 -1
  252. package/lib/server/utils/small-ticket.js +565 -470
  253. package/lib/server/utils/time.js +40 -49
  254. package/lib/solution/BaseSales/index.d.ts +7 -0
  255. package/lib/solution/BaseSales/index.js +1385 -1503
  256. package/lib/solution/BaseSales/types.d.ts +2 -0
  257. package/lib/solution/BaseSales/types.js +42 -38
  258. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  259. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  260. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  261. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  262. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  263. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  264. package/lib/solution/BaseSales/utils.js +161 -143
  265. package/lib/solution/BookingByStep/index.d.ts +2 -2
  266. package/lib/solution/BookingByStep/index.js +1527 -1340
  267. package/lib/solution/BookingByStep/types.js +40 -99
  268. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  269. package/lib/solution/BookingByStep/utils/products.js +42 -52
  270. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  271. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  272. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  273. package/lib/solution/BookingTicket/index.d.ts +14 -19
  274. package/lib/solution/BookingTicket/index.js +663 -526
  275. package/lib/solution/BookingTicket/types.js +99 -77
  276. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  277. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  278. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  279. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  280. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  281. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  282. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  283. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  284. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  285. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  286. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  287. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  288. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  289. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  290. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  291. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  292. package/lib/solution/BuyTickets/index.js +67 -70
  293. package/lib/solution/BuyTickets/types.js +22 -38
  294. package/lib/solution/Checkout/index.js +1451 -1158
  295. package/lib/solution/Checkout/types.js +91 -61
  296. package/lib/solution/Checkout/utils/index.js +228 -156
  297. package/lib/solution/PlaceOrder/index.js +55 -0
  298. package/lib/solution/RegisterAndLogin/config.js +493 -460
  299. package/lib/solution/RegisterAndLogin/index.js +633 -630
  300. package/lib/solution/RegisterAndLogin/types.js +189 -76
  301. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  302. package/lib/solution/Sales/index.d.ts +20 -4
  303. package/lib/solution/Sales/index.js +502 -330
  304. package/lib/solution/Sales/types.d.ts +10 -0
  305. package/lib/solution/Sales/types.js +27 -33
  306. package/lib/solution/ScanOrder/index.js +822 -852
  307. package/lib/solution/ScanOrder/types.d.ts +2 -0
  308. package/lib/solution/ScanOrder/types.js +33 -34
  309. package/lib/solution/ScanOrder/utils.js +412 -374
  310. package/lib/solution/ShopDiscount/index.js +226 -232
  311. package/lib/solution/ShopDiscount/types.js +15 -37
  312. package/lib/solution/ShopDiscount/utils.js +300 -172
  313. package/lib/solution/UnifiedBookingSales/index.d.ts +5 -4
  314. package/lib/solution/UnifiedBookingSales/index.js +1087 -1222
  315. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  316. package/lib/solution/UnifiedBookingSales/types.d.ts +7 -1
  317. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  318. package/lib/solution/VenueBooking/index.js +811 -879
  319. package/lib/solution/VenueBooking/types.js +19 -39
  320. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  321. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  322. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  323. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  324. package/lib/solution/VenueBooking/utils.js +130 -67
  325. package/lib/solution/index.js +124 -41
  326. package/lib/store/createStore.js +32 -29
  327. package/lib/types/index.js +4 -16
  328. package/lib/utils/payment-number.js +26 -46
  329. package/lib/utils/task.js +36 -36
  330. package/lib/utils/watch.js +81 -47
  331. package/package.json +2 -1
@@ -1,207 +1,234 @@
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"
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
+ }
9
62
  },
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"
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']
23
81
  },
24
- {
25
- id: "VOUCHER_002",
26
- amount: 20,
27
- balance: 20,
28
- type: "cash_voucher"
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
+ }
29
102
  },
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
- ]
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']
84
117
  },
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
- ]
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
+ }
125
138
  },
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
- ];
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']
153
+ },
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
+
168
167
  function runExample() {
169
- console.log("========== WalletPass 评估器示例 ==========\n");
170
- const evaluator = new import_evaluator.WalletPassEvaluator();
168
+ // 创建评估器实例
169
+ const evaluator = new _evaluator.WalletPassEvaluator();
170
+
171
+ // 执行评估
171
172
  const results = evaluator.evaluate({
172
173
  orderTotalAmount: 180,
173
174
  products,
174
175
  vouchers,
175
- strategyConfigs
176
+ strategyConfigs: strategyConfigs
176
177
  });
177
- console.log("订单信息:");
178
- console.log(`- 总金额: ${180} 元`);
179
- console.log(`- 商品: ${products.map((p) => `${p.name}(${p.quantity}件)`).join(", ")}
180
- `);
181
- console.log("评估结果:\n");
178
+
179
+ // 输出结果
180
+
182
181
  results.forEach((result, index) => {
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("");
182
+ if (result.isApplicable) {} else {}
196
183
  });
197
- const availableVouchers = results.filter((r) => r.isApplicable);
198
- console.log(`
199
- 共 ${availableVouchers.length} 张可用`);
184
+
185
+ // 筛选可用的 vouchers
186
+ const availableVouchers = results.filter(r => r.isApplicable);
200
187
  if (availableVouchers.length > 0) {
201
- console.log("可用 voucher ID:");
202
- availableVouchers.forEach((v) => {
203
- console.log(` - ${v.voucher.id}: 最多抵扣 ${v.maxDeduction} 元`);
204
- });
188
+ availableVouchers.forEach(v => {});
205
189
  }
206
190
  }
191
+
192
+ // 运行示例
207
193
  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,48 +1,44 @@
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/walletPass/index.ts
20
- var walletPass_exports = {};
21
- __export(walletPass_exports, {
22
- default: () => WalletPassAdapter
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
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
- }
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
+
31
16
  /**
32
17
  * 准备运行时上下文
33
18
  * 将业务数据转换为策略引擎可识别的 RuntimeContext
34
19
  */
35
20
  prepareContext(businessData) {
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(
21
+ const {
22
+ orderTotalAmount,
42
23
  products,
43
- applicableProductIds,
44
- deductTaxAndFee
45
- );
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);
46
42
  return {
47
43
  entities: {
48
44
  voucher,
@@ -69,15 +65,19 @@ var WalletPassAdapter = class {
69
65
  }
70
66
  };
71
67
  }
68
+
72
69
  /**
73
70
  * 转换执行结果
74
71
  * 将策略引擎的通用结果转换为业务层需要的格式
75
72
  */
76
73
  transformResult(result, businessData) {
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;
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;
81
81
  if (!result.applicable) {
82
82
  return {
83
83
  isApplicable: false,
@@ -90,6 +90,8 @@ var WalletPassAdapter = class {
90
90
  strategyResult: result
91
91
  };
92
92
  }
93
+
94
+ // 从配置中获取业务字段(不需要计算)
93
95
  const maxDeduction = businessConfig.maxDeductionAmount || 0;
94
96
  const canUseCount = businessConfig.maxUsagePerOrder || 0;
95
97
  const deductTaxAndFee = businessConfig.deductTaxAndFee || false;
@@ -102,41 +104,63 @@ var WalletPassAdapter = class {
102
104
  strategyResult: result
103
105
  };
104
106
  }
107
+
105
108
  /**
106
109
  * 格式化配置
107
110
  */
108
111
  formatConfig(result, businessData) {
109
- return { result, businessData };
112
+ return {
113
+ result,
114
+ businessData
115
+ };
110
116
  }
117
+
111
118
  /**
112
119
  * 计算适用商品的总金额和数量
113
120
  */
114
121
  calculateApplicableProducts(products, applicableProductIds, deductTaxAndFee = true) {
115
122
  let total = 0;
116
123
  let count = 0;
124
+
125
+ // 如果为空数组,不适用任何商品
117
126
  if (applicableProductIds !== null && applicableProductIds.length === 0) {
118
- return { applicableTotal: 0, applicableCount: 0 };
127
+ return {
128
+ applicableTotal: 0,
129
+ applicableCount: 0
130
+ };
119
131
  }
120
- products.forEach((product) => {
121
- const productQuantity = (0, import_utils.getProductQuantity)(product);
132
+ products.forEach(product => {
133
+ const productQuantity = (0, _utils.getProductQuantity)(product);
134
+
135
+ // 检查主商品是否适用
122
136
  const isMainProductApplicable = applicableProductIds === null || applicableProductIds.includes(product.product_id);
123
137
  if (isMainProductApplicable) {
124
- total += (0, import_utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity;
138
+ // 计算主商品价格(包含加减价子商品)
139
+ total += (0, _utils.getMainProductPrice)(product, deductTaxAndFee) * productQuantity;
125
140
  count += productQuantity;
126
141
  }
142
+
143
+ // 检查原价子商品(需要单独判断适用性)
127
144
  if (product.product_bundle && product.product_bundle.length > 0) {
128
- product.product_bundle.forEach((bundleItem) => {
129
- if ((0, import_utils.getBundleItemIsOriginalPrice)(bundleItem)) {
145
+ product.product_bundle.forEach(bundleItem => {
146
+ // 只处理原价子商品,加减价子商品已包含在主商品价格中
147
+ if ((0, _utils.getBundleItemIsOriginalPrice)(bundleItem)) {
148
+ // 检查子商品是否适用
130
149
  const isBundleItemApplicable = applicableProductIds === null || applicableProductIds.includes(bundleItem.bundle_product_id);
131
150
  if (isBundleItemApplicable) {
151
+ // 计算原价子商品价格
132
152
  const bundleItemQuantity = bundleItem.num * productQuantity;
133
- total += (0, import_utils.getBundleItemPrice)(bundleItem, productQuantity, deductTaxAndFee);
153
+ total += (0, _utils.getBundleItemPrice)(bundleItem, productQuantity, deductTaxAndFee);
134
154
  count += bundleItemQuantity;
135
155
  }
136
156
  }
137
157
  });
138
158
  }
139
159
  });
140
- return { applicableTotal: total, applicableCount: count };
160
+ return {
161
+ applicableTotal: total,
162
+ applicableCount: count
163
+ };
141
164
  }
142
- };
165
+ }
166
+ exports.default = WalletPassAdapter;