@pisell/pisellos 2.2.244 → 2.2.245

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 (317) hide show
  1. package/dist/model/strategy/adapter/promotion/evaluator.js +3 -2
  2. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  3. package/dist/model/strategy/adapter/walletPass/utils.js +7 -4
  4. package/dist/modules/BookingContext/index.d.ts +48 -0
  5. package/dist/modules/BookingContext/index.js +566 -0
  6. package/dist/modules/BookingContext/types.d.ts +102 -0
  7. package/dist/modules/BookingContext/types.js +51 -0
  8. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  9. package/dist/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +284 -0
  10. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  11. package/dist/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +145 -0
  12. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  13. package/dist/modules/BookingContext/utils/cacheItemToBookingInput.js +218 -0
  14. package/dist/modules/BookingContext/utils/flexible.d.ts +28 -0
  15. package/dist/modules/BookingContext/utils/flexible.js +56 -0
  16. package/dist/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  17. package/dist/modules/BookingContext/utils/formatResourceList.js +38 -0
  18. package/dist/modules/BookingContext/utils/index.d.ts +11 -0
  19. package/dist/modules/BookingContext/utils/index.js +11 -0
  20. package/dist/modules/BookingContext/utils/noResource.d.ts +13 -0
  21. package/dist/modules/BookingContext/utils/noResource.js +77 -0
  22. package/dist/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  23. package/dist/modules/BookingContext/utils/orderLineDisplay.js +36 -0
  24. package/dist/modules/BookingContext/utils/productExtend.d.ts +72 -0
  25. package/dist/modules/BookingContext/utils/productExtend.js +339 -0
  26. package/dist/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  27. package/dist/modules/BookingContext/utils/resourceErrors.js +74 -0
  28. package/dist/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  29. package/dist/modules/BookingContext/utils/resourceSelection.js +24 -0
  30. package/dist/modules/BookingContext/utils/resources.d.ts +80 -0
  31. package/dist/modules/BookingContext/utils/resources.js +486 -0
  32. package/dist/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  33. package/dist/modules/BookingContext/utils/serviceTimes.js +151 -0
  34. package/dist/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  35. package/dist/modules/BookingContext/utils/timeSlices.js +100 -0
  36. package/dist/modules/Cart/utils/cartProduct.js +24 -3
  37. package/dist/modules/Cart/utils/changePrice.js +11 -11
  38. package/dist/modules/Customer/index.d.ts +20 -0
  39. package/dist/modules/Customer/index.js +172 -83
  40. package/dist/modules/Customer/types.d.ts +2 -0
  41. package/dist/modules/Discount/index.d.ts +1 -1
  42. package/dist/modules/Discount/index.js +13 -6
  43. package/dist/modules/Discount/types.d.ts +1 -0
  44. package/dist/modules/OpenData/index.d.ts +8 -0
  45. package/dist/modules/OpenData/index.js +37 -17
  46. package/dist/modules/Order/index.d.ts +275 -19
  47. package/dist/modules/Order/index.js +3493 -809
  48. package/dist/modules/Order/types.d.ts +286 -31
  49. package/dist/modules/Order/types.js +38 -0
  50. package/dist/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  51. package/dist/modules/Order/utils/manualProductDiscount.js +210 -0
  52. package/dist/modules/Order/utils.d.ts +147 -5
  53. package/dist/modules/Order/utils.js +750 -104
  54. package/dist/modules/Payment/index.d.ts +10 -13
  55. package/dist/modules/Payment/index.js +467 -837
  56. package/dist/modules/Payment/types.d.ts +2 -0
  57. package/dist/modules/Payment/utils.js +2 -1
  58. package/dist/modules/Payment/walletpass.js +41 -25
  59. package/dist/modules/ProductList/index.d.ts +16 -12
  60. package/dist/modules/ProductList/index.js +133 -59
  61. package/dist/modules/ProductList/types.d.ts +14 -0
  62. package/dist/modules/Quotation/index.d.ts +0 -1
  63. package/dist/modules/Quotation/index.js +25 -22
  64. package/dist/modules/Rules/index.d.ts +4 -0
  65. package/dist/modules/Rules/index.js +97 -70
  66. package/dist/modules/Rules/types.d.ts +1 -0
  67. package/dist/modules/SalesSummary/index.d.ts +8 -25
  68. package/dist/modules/SalesSummary/index.js +86 -35
  69. package/dist/modules/SalesSummary/types.d.ts +4 -1
  70. package/dist/modules/SalesSummary/utils.d.ts +2 -25
  71. package/dist/modules/SalesSummary/utils.js +794 -162
  72. package/dist/modules/Schedule/index.d.ts +7 -0
  73. package/dist/modules/Schedule/index.js +24 -2
  74. package/dist/modules/Summary/index.js +4 -3
  75. package/dist/modules/SurchargeList/index.d.ts +16 -0
  76. package/dist/modules/SurchargeList/index.js +162 -0
  77. package/dist/modules/SurchargeList/types.d.ts +11 -0
  78. package/dist/modules/SurchargeList/types.js +1 -0
  79. package/dist/modules/index.d.ts +2 -0
  80. package/dist/modules/index.js +3 -1
  81. package/dist/plugins/request.d.ts +1 -0
  82. package/dist/server/index.d.ts +204 -1
  83. package/dist/server/index.js +3654 -922
  84. package/dist/server/modules/index.d.ts +2 -0
  85. package/dist/server/modules/index.js +2 -0
  86. package/dist/server/modules/order/index.d.ts +120 -3
  87. package/dist/server/modules/order/index.js +1758 -448
  88. package/dist/server/modules/order/types.d.ts +32 -3
  89. package/dist/server/modules/order/types.js +8 -0
  90. package/dist/server/modules/order/utils/filterBookings.js +26 -3
  91. package/dist/server/modules/order/utils/filterOrders.js +23 -8
  92. package/dist/server/modules/payment/index.d.ts +28 -0
  93. package/dist/server/modules/payment/index.js +305 -0
  94. package/dist/server/modules/payment/types.d.ts +9 -0
  95. package/dist/server/modules/payment/types.js +1 -0
  96. package/dist/server/modules/products/index.d.ts +34 -7
  97. package/dist/server/modules/products/index.js +631 -317
  98. package/dist/server/modules/resource/index.d.ts +2 -0
  99. package/dist/server/modules/resource/index.js +29 -3
  100. package/dist/server/modules/schedule/index.d.ts +4 -4
  101. package/dist/server/modules/schedule/index.js +111 -88
  102. package/dist/server/test.json +713 -0
  103. package/dist/server/utils/small-ticket.d.ts +71 -0
  104. package/dist/server/utils/small-ticket.js +840 -0
  105. package/dist/solution/BaseSales/index.d.ts +133 -10
  106. package/dist/solution/BaseSales/index.js +1950 -447
  107. package/dist/solution/BaseSales/types.d.ts +82 -6
  108. package/dist/solution/BaseSales/types.js +5 -4
  109. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  110. package/dist/solution/BaseSales/utils/cartPromotion.js +1438 -0
  111. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  112. package/dist/solution/BaseSales/utils/quotationPrice.js +237 -0
  113. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  114. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +105 -24
  115. package/dist/solution/BaseSales/utils.d.ts +1 -1
  116. package/dist/solution/BaseSales/utils.js +62 -21
  117. package/dist/solution/BookingByStep/index.d.ts +1 -1
  118. package/dist/solution/BookingTicket/index.d.ts +271 -11
  119. package/dist/solution/BookingTicket/index.js +1777 -242
  120. package/dist/solution/BookingTicket/types.d.ts +118 -1
  121. package/dist/solution/BookingTicket/types.js +41 -2
  122. package/dist/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  123. package/dist/solution/BookingTicket/utils/addProductDecision.js +346 -0
  124. package/dist/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  125. package/dist/solution/BookingTicket/utils/addTimeAvailability.js +95 -0
  126. package/dist/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
  127. package/dist/solution/BookingTicket/utils/bookingStatus.js +70 -0
  128. package/dist/solution/BookingTicket/utils/cartView.d.ts +9 -1
  129. package/dist/solution/BookingTicket/utils/cartView.js +94 -7
  130. package/dist/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  131. package/dist/solution/BookingTicket/utils/exampleData.js +183 -0
  132. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  133. package/dist/solution/BookingTicket/utils/resolveBestAddTimePlan.js +438 -0
  134. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  135. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +400 -0
  136. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  137. package/dist/solution/BookingTicket/utils/scan/formatGlobalScan.js +56 -0
  138. package/dist/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  139. package/dist/solution/BookingTicket/utils/scan/index.js +20 -8
  140. package/dist/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  141. package/dist/solution/BookingTicket/utils/scan/scanProductValues.js +150 -0
  142. package/dist/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  143. package/dist/solution/BookingTicket/utils/sessionCatalogStale.js +78 -0
  144. package/dist/solution/Checkout/index.d.ts +1 -0
  145. package/dist/solution/Checkout/index.js +10 -9
  146. package/dist/solution/RegisterAndLogin/config.js +2 -10
  147. package/dist/solution/ScanOrder/index.d.ts +9 -3
  148. package/dist/solution/ScanOrder/index.js +241 -134
  149. package/dist/solution/ScanOrder/types.d.ts +9 -5
  150. package/dist/solution/ScanOrder/types.js +2 -3
  151. package/dist/solution/ScanOrder/utils.d.ts +1 -1
  152. package/dist/solution/ScanOrder/utils.js +84 -22
  153. package/dist/solution/VenueBooking/index.d.ts +5 -2
  154. package/dist/solution/VenueBooking/index.js +110 -59
  155. package/dist/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  156. package/dist/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  157. package/dist/solution/VenueBooking/utils/slotMerge.js +10 -0
  158. package/dist/types/index.d.ts +10 -0
  159. package/lib/model/strategy/adapter/promotion/evaluator.js +2 -1
  160. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  161. package/lib/model/strategy/adapter/walletPass/utils.js +3 -2
  162. package/lib/modules/BookingContext/index.d.ts +48 -0
  163. package/lib/modules/BookingContext/index.js +368 -0
  164. package/lib/modules/BookingContext/types.d.ts +102 -0
  165. package/lib/modules/BookingContext/types.js +34 -0
  166. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.d.ts +16 -0
  167. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +276 -0
  168. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.d.ts +8 -0
  169. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +151 -0
  170. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.d.ts +76 -0
  171. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +201 -0
  172. package/lib/modules/BookingContext/utils/flexible.d.ts +28 -0
  173. package/lib/modules/BookingContext/utils/flexible.js +80 -0
  174. package/lib/modules/BookingContext/utils/formatResourceList.d.ts +8 -0
  175. package/lib/modules/BookingContext/utils/formatResourceList.js +50 -0
  176. package/lib/modules/BookingContext/utils/index.d.ts +11 -0
  177. package/lib/modules/BookingContext/utils/index.js +43 -0
  178. package/lib/modules/BookingContext/utils/noResource.d.ts +13 -0
  179. package/lib/modules/BookingContext/utils/noResource.js +90 -0
  180. package/lib/modules/BookingContext/utils/orderLineDisplay.d.ts +1 -0
  181. package/lib/modules/BookingContext/utils/orderLineDisplay.js +56 -0
  182. package/lib/modules/BookingContext/utils/productExtend.d.ts +72 -0
  183. package/lib/modules/BookingContext/utils/productExtend.js +283 -0
  184. package/lib/modules/BookingContext/utils/resourceErrors.d.ts +41 -0
  185. package/lib/modules/BookingContext/utils/resourceErrors.js +80 -0
  186. package/lib/modules/BookingContext/utils/resourceSelection.d.ts +7 -0
  187. package/lib/modules/BookingContext/utils/resourceSelection.js +46 -0
  188. package/lib/modules/BookingContext/utils/resources.d.ts +80 -0
  189. package/lib/modules/BookingContext/utils/resources.js +377 -0
  190. package/lib/modules/BookingContext/utils/serviceTimes.d.ts +55 -0
  191. package/lib/modules/BookingContext/utils/serviceTimes.js +162 -0
  192. package/lib/modules/BookingContext/utils/timeSlices.d.ts +42 -0
  193. package/lib/modules/BookingContext/utils/timeSlices.js +124 -0
  194. package/lib/modules/Cart/utils/cartProduct.js +20 -3
  195. package/lib/modules/Cart/utils/changePrice.js +12 -20
  196. package/lib/modules/Customer/index.d.ts +20 -0
  197. package/lib/modules/Customer/index.js +64 -11
  198. package/lib/modules/Customer/types.d.ts +2 -0
  199. package/lib/modules/Discount/index.d.ts +1 -1
  200. package/lib/modules/Discount/index.js +9 -1
  201. package/lib/modules/Discount/types.d.ts +1 -0
  202. package/lib/modules/OpenData/index.d.ts +8 -0
  203. package/lib/modules/OpenData/index.js +19 -5
  204. package/lib/modules/Order/index.d.ts +275 -19
  205. package/lib/modules/Order/index.js +2245 -336
  206. package/lib/modules/Order/types.d.ts +286 -31
  207. package/lib/modules/Order/types.js +1 -0
  208. package/lib/modules/Order/utils/manualProductDiscount.d.ts +106 -0
  209. package/lib/modules/Order/utils/manualProductDiscount.js +206 -0
  210. package/lib/modules/Order/utils.d.ts +147 -5
  211. package/lib/modules/Order/utils.js +615 -46
  212. package/lib/modules/Payment/index.d.ts +10 -13
  213. package/lib/modules/Payment/index.js +18 -150
  214. package/lib/modules/Payment/types.d.ts +2 -0
  215. package/lib/modules/Payment/utils.js +2 -1
  216. package/lib/modules/Payment/walletpass.js +16 -3
  217. package/lib/modules/ProductList/index.d.ts +16 -12
  218. package/lib/modules/ProductList/index.js +41 -4
  219. package/lib/modules/ProductList/types.d.ts +14 -0
  220. package/lib/modules/Quotation/index.d.ts +0 -1
  221. package/lib/modules/Quotation/index.js +19 -16
  222. package/lib/modules/Rules/index.d.ts +4 -0
  223. package/lib/modules/Rules/index.js +137 -120
  224. package/lib/modules/Rules/types.d.ts +1 -0
  225. package/lib/modules/SalesSummary/index.d.ts +8 -25
  226. package/lib/modules/SalesSummary/index.js +30 -4
  227. package/lib/modules/SalesSummary/types.d.ts +4 -1
  228. package/lib/modules/SalesSummary/utils.d.ts +2 -25
  229. package/lib/modules/SalesSummary/utils.js +645 -91
  230. package/lib/modules/Schedule/index.d.ts +7 -0
  231. package/lib/modules/Schedule/index.js +17 -1
  232. package/lib/modules/Summary/index.js +5 -4
  233. package/lib/modules/SurchargeList/index.d.ts +16 -0
  234. package/lib/modules/SurchargeList/index.js +89 -0
  235. package/lib/modules/SurchargeList/types.d.ts +11 -0
  236. package/lib/modules/SurchargeList/types.js +17 -0
  237. package/lib/modules/index.d.ts +2 -0
  238. package/lib/modules/index.js +5 -1
  239. package/lib/plugins/request.d.ts +1 -0
  240. package/lib/server/index.d.ts +204 -1
  241. package/lib/server/index.js +1891 -59
  242. package/lib/server/modules/index.d.ts +2 -0
  243. package/lib/server/modules/index.js +3 -0
  244. package/lib/server/modules/order/index.d.ts +120 -3
  245. package/lib/server/modules/order/index.js +883 -94
  246. package/lib/server/modules/order/types.d.ts +32 -3
  247. package/lib/server/modules/order/utils/filterBookings.js +24 -5
  248. package/lib/server/modules/order/utils/filterOrders.js +15 -6
  249. package/lib/server/modules/payment/index.d.ts +28 -0
  250. package/lib/server/modules/payment/index.js +192 -0
  251. package/lib/server/modules/payment/types.d.ts +9 -0
  252. package/lib/server/modules/payment/types.js +17 -0
  253. package/lib/server/modules/products/index.d.ts +34 -7
  254. package/lib/server/modules/products/index.js +189 -54
  255. package/lib/server/modules/resource/index.d.ts +2 -0
  256. package/lib/server/modules/resource/index.js +27 -3
  257. package/lib/server/modules/schedule/index.d.ts +4 -4
  258. package/lib/server/modules/schedule/index.js +47 -40
  259. package/lib/server/test.json +713 -0
  260. package/lib/server/utils/small-ticket.d.ts +71 -0
  261. package/lib/server/utils/small-ticket.js +800 -0
  262. package/lib/solution/BaseSales/index.d.ts +133 -10
  263. package/lib/solution/BaseSales/index.js +1111 -63
  264. package/lib/solution/BaseSales/types.d.ts +82 -6
  265. package/lib/solution/BaseSales/types.js +3 -1
  266. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +287 -0
  267. package/lib/solution/BaseSales/utils/cartPromotion.js +992 -0
  268. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +7 -0
  269. package/lib/solution/BaseSales/utils/quotationPrice.js +277 -0
  270. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +1 -0
  271. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +106 -18
  272. package/lib/solution/BaseSales/utils.d.ts +1 -1
  273. package/lib/solution/BaseSales/utils.js +54 -10
  274. package/lib/solution/BookingByStep/index.d.ts +1 -1
  275. package/lib/solution/BookingTicket/index.d.ts +271 -11
  276. package/lib/solution/BookingTicket/index.js +922 -29
  277. package/lib/solution/BookingTicket/types.d.ts +118 -1
  278. package/lib/solution/BookingTicket/types.js +11 -0
  279. package/lib/solution/BookingTicket/utils/addProductDecision.d.ts +117 -0
  280. package/lib/solution/BookingTicket/utils/addProductDecision.js +318 -0
  281. package/lib/solution/BookingTicket/utils/addTimeAvailability.d.ts +35 -0
  282. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +125 -0
  283. package/lib/solution/BookingTicket/utils/bookingStatus.d.ts +40 -0
  284. package/lib/solution/BookingTicket/utils/bookingStatus.js +44 -2
  285. package/lib/solution/BookingTicket/utils/cartView.d.ts +9 -1
  286. package/lib/solution/BookingTicket/utils/cartView.js +61 -6
  287. package/lib/solution/BookingTicket/utils/exampleData.d.ts +123 -0
  288. package/lib/solution/BookingTicket/utils/exampleData.js +0 -0
  289. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.d.ts +185 -0
  290. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +254 -0
  291. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +36 -0
  292. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +169 -0
  293. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.d.ts +32 -0
  294. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +51 -0
  295. package/lib/solution/BookingTicket/utils/scan/index.d.ts +5 -0
  296. package/lib/solution/BookingTicket/utils/scan/index.js +17 -3
  297. package/lib/solution/BookingTicket/utils/scan/scanProductValues.d.ts +21 -0
  298. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +127 -0
  299. package/lib/solution/BookingTicket/utils/sessionCatalogStale.d.ts +23 -0
  300. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +85 -0
  301. package/lib/solution/Checkout/index.d.ts +1 -0
  302. package/lib/solution/Checkout/index.js +1 -2
  303. package/lib/solution/RegisterAndLogin/config.js +2 -10
  304. package/lib/solution/ScanOrder/index.d.ts +9 -3
  305. package/lib/solution/ScanOrder/index.js +153 -70
  306. package/lib/solution/ScanOrder/types.d.ts +9 -5
  307. package/lib/solution/ScanOrder/utils.d.ts +1 -1
  308. package/lib/solution/ScanOrder/utils.js +83 -17
  309. package/lib/solution/VenueBooking/index.d.ts +5 -2
  310. package/lib/solution/VenueBooking/index.js +54 -17
  311. package/lib/solution/VenueBooking/sales-section-4-annotated.json +0 -2
  312. package/lib/solution/VenueBooking/utils/slotMerge.d.ts +4 -0
  313. package/lib/solution/VenueBooking/utils/slotMerge.js +10 -0
  314. package/lib/types/index.d.ts +10 -0
  315. package/package.json +1 -1
  316. package/dist/solution/Checkout/appointmentDemo.json +0 -1
  317. package/lib/solution/Checkout/appointmentDemo.json +0 -1
@@ -0,0 +1,183 @@
1
+ var data = [{
2
+ "id": 58299,
3
+ "title": "玄-加时商品-与数量无关-不指定商品",
4
+ "price": 1,
5
+ "minMinutes": 30,
6
+ "maxMinutes": 30,
7
+ "unitMinutes": 30,
8
+ "unlimited": false,
9
+ "_originalProduct": {
10
+ "id": 58299,
11
+ "extension_id": 384,
12
+ "extension_type": "product_add_time",
13
+ "shop_id": 9,
14
+ "title": "玄-加时商品-与数量无关-不指定商品",
15
+ "slug": "玄-加时商品-与数量无关-指定商品",
16
+ "status": "published",
17
+ "stock_quantity": -119,
18
+ "sales_quantity": 113,
19
+ "sum_stock": -119,
20
+ "price": "1.00",
21
+ "original_price": "4.00",
22
+ "cost_price": "0.00",
23
+ "cover": "",
24
+ "channel_application": ["online-store", "pos", "bbc-module:mebook"],
25
+ "is_track": 0,
26
+ "over_sold": 0,
27
+ "is_gst": 1,
28
+ "code": "",
29
+ "barcode": "",
30
+ "is_delivery": 0,
31
+ "weight_unit": "KILOGRAMS",
32
+ "weight_value": "0.00",
33
+ "type": "physical",
34
+ "unit": "",
35
+ "sort": 9999999,
36
+ "subtitle": "",
37
+ "minimum_markup_price": "0.00",
38
+ "is_bundle": 0,
39
+ "description": "",
40
+ "open_sold_weight": 0,
41
+ "unit_value": 0,
42
+ "is_variant": 0,
43
+ "variant_count": 0,
44
+ "add_time": {
45
+ "unit_duration": 30,
46
+ "min_add_time": 30,
47
+ "max_add_time": 30,
48
+ "calculate_type": "not_related_to_quantity",
49
+ "relation_product": {
50
+ "type": "product_all",
51
+ "products": []
52
+ }
53
+ },
54
+ "shelf_product_datas": [],
55
+ "step_value": 1,
56
+ "min_num_unit": 1,
57
+ "is_charge_tax": 1,
58
+ "base_price": "1.00",
59
+ "variant": []
60
+ }
61
+ }, {
62
+ "id": 58279,
63
+ "title": "加时商品2",
64
+ "price": 10,
65
+ "minMinutes": 30,
66
+ "maxMinutes": 120,
67
+ "unitMinutes": 10,
68
+ "unlimited": false,
69
+ "_originalProduct": {
70
+ "id": 58279,
71
+ "extension_id": 384,
72
+ "extension_type": "product_add_time",
73
+ "shop_id": 9,
74
+ "title": "加时商品2",
75
+ "slug": "加时商品2",
76
+ "status": "published",
77
+ "stock_quantity": -275,
78
+ "sales_quantity": 261,
79
+ "sum_stock": -275,
80
+ "price": "10.00",
81
+ "original_price": "10.00",
82
+ "cost_price": "0.00",
83
+ "cover": "",
84
+ "channel_application": ["online-store", "pos", "bbc-module:mebook"],
85
+ "is_track": 0,
86
+ "over_sold": 0,
87
+ "is_gst": 1,
88
+ "code": "",
89
+ "barcode": "",
90
+ "is_delivery": 0,
91
+ "weight_unit": "KILOGRAMS",
92
+ "weight_value": "0.00",
93
+ "type": "physical",
94
+ "unit": "",
95
+ "sort": 9999999,
96
+ "subtitle": "",
97
+ "minimum_markup_price": "0.00",
98
+ "is_bundle": 0,
99
+ "description": "",
100
+ "open_sold_weight": 0,
101
+ "unit_value": 0,
102
+ "is_variant": 0,
103
+ "variant_count": 0,
104
+ "add_time": {
105
+ "additional_time_options": "explicit_durations",
106
+ "unit_duration": 10,
107
+ "min_add_time": 30,
108
+ "max_add_time": 120,
109
+ "calculate_type": "not_related_to_quantity",
110
+ "relation_product": {
111
+ "type": "product_all",
112
+ "products": []
113
+ }
114
+ },
115
+ "shelf_product_datas": [],
116
+ "step_value": 1,
117
+ "min_num_unit": 1,
118
+ "is_charge_tax": 1,
119
+ "base_price": "10.00",
120
+ "variant": []
121
+ }
122
+ }, {
123
+ "id": 58277,
124
+ "title": "测试加时商品",
125
+ "price": 2,
126
+ "minMinutes": 30,
127
+ "maxMinutes": 780,
128
+ "unitMinutes": 30,
129
+ "unlimited": true,
130
+ "_originalProduct": {
131
+ "id": 58277,
132
+ "extension_id": 384,
133
+ "extension_type": "product_add_time",
134
+ "shop_id": 9,
135
+ "title": "测试加时商品",
136
+ "slug": "测试加时商品",
137
+ "status": "published",
138
+ "stock_quantity": -7,
139
+ "sales_quantity": 8,
140
+ "sum_stock": -7,
141
+ "price": "2.00",
142
+ "original_price": "0.00",
143
+ "cost_price": "0.00",
144
+ "cover": "",
145
+ "channel_application": ["online-store", "pos", "bbc-module:mebook"],
146
+ "is_track": 0,
147
+ "over_sold": 0,
148
+ "is_gst": 1,
149
+ "code": "",
150
+ "barcode": "",
151
+ "is_delivery": 0,
152
+ "weight_unit": "KILOGRAMS",
153
+ "weight_value": "0.00",
154
+ "type": "physical",
155
+ "unit": "",
156
+ "sort": 9999999,
157
+ "subtitle": "",
158
+ "minimum_markup_price": "0.00",
159
+ "is_bundle": 0,
160
+ "description": "",
161
+ "open_sold_weight": 0,
162
+ "unit_value": 0,
163
+ "is_variant": 0,
164
+ "variant_count": 0,
165
+ "add_time": {
166
+ "additional_time_options": "unlimited",
167
+ "unit_duration": 30,
168
+ "min_add_time": 30,
169
+ "max_add_time": 780,
170
+ "calculate_type": "select_quantity",
171
+ "relation_product": {
172
+ "type": "product_all",
173
+ "products": []
174
+ }
175
+ },
176
+ "shelf_product_datas": [],
177
+ "step_value": 1,
178
+ "min_num_unit": 1,
179
+ "is_charge_tax": 1,
180
+ "base_price": "2.00",
181
+ "variant": []
182
+ }
183
+ }];
@@ -0,0 +1,185 @@
1
+ /**
2
+ * 计算指定加时时长下的最优购买方案。
3
+ *
4
+ * 输入的商品结构来自旧版 booking addTimeModal 的加时商品配置映射:
5
+ * - `minMinutes`:该商品第一次可选择的最小时长。
6
+ * - `maxMinutes`:单次购买该商品可覆盖的最大时长。
7
+ * - `unitMinutes`:超过最小时长后,每次递增的时长切片。
8
+ * - `price`:每个 `unitMinutes` 切片的价格。
9
+ * - `unlimited`:固定价格商品,可覆盖任意目标时长。
10
+ *
11
+ * 算法流程:
12
+ *
13
+ * ```
14
+ * products
15
+ * |
16
+ * v
17
+ * 将每个普通商品展开成有限候选档位
18
+ * 商品 A: min=30, max=60, unit=10, price=10
19
+ * => 30m/$30, 40m/$40, 50m/$50, 60m/$60
20
+ * |
21
+ * v
22
+ * 单独加入 unlimited 候选
23
+ * unlimited 商品 => targetMinutes / 固定商品价格
24
+ * |
25
+ * v
26
+ * 按 covered minutes 做动态规划
27
+ * dp[minutes] = 正好覆盖 `minutes` 时的最低价候选组合
28
+ * |
29
+ * v
30
+ * 从所有 dp[minutes >= targetMinutes] 中挑选最优方案
31
+ * ```
32
+ *
33
+ * 候选档位生成刻意对齐旧版 addTimeModal:
34
+ * `totalPrice = minutes / unitMinutes * price`.
35
+ * 例如 `minMinutes=30`、`unitMinutes=10`、`price=10` 时:
36
+ * - 30 分钟 => 30 / 10 * 10 = 30
37
+ * - 60 分钟 => 60 / 10 * 10 = 60
38
+ *
39
+ * 目标时长不要求精确命中某个档位,只需要覆盖即可。例如目标是 51 分钟时,
40
+ * 60 分钟档位可以作为候选。动态规划也允许跨商品组合,例如商品 A 的 30m
41
+ * 加上商品 B 的 30m。最终方案按以下优先级比较:
42
+ * 1. 总价更低;
43
+ * 2. 超出时长更少,即 `coveredMinutes - targetMinutes` 更小;
44
+ * 3. 结果行数更少,让购买方案尽量简单。
45
+ *
46
+ * 典型匹配示例:
47
+ *
48
+ * 示例 1:精确命中,直接选择更便宜的商品。
49
+ * ```
50
+ * target = 30
51
+ * 商品 A: min=30, max=30, unit=30, price=10 => 30m/$10
52
+ * 商品 B: min=30, max=30, unit=30, price=8 => 30m/$8
53
+ * 结果:选择商品 B,coveredMinutes=30,totalPrice=8
54
+ * ```
55
+ *
56
+ * 示例 2:目标时长落在两个档位之间,向上选择可覆盖的档位。
57
+ * ```
58
+ * target = 51
59
+ * 商品 A: min=30, max=120, unit=10, price=10
60
+ * 候选:30m/$30, 40m/$40, 50m/$50, 60m/$60 ...
61
+ * 结果:50m 不足以覆盖 51m,因此选择 60m/$60
62
+ * ```
63
+ *
64
+ * 示例 3:不同商品都能覆盖同一目标时长,比较最终价格。
65
+ * ```
66
+ * target = 51
67
+ * 商品 A: min=30, max=120, unit=10, price=10 => 60m/$60
68
+ * 商品 B: min=30, max=120, unit=30, price=25 => 60m/$50
69
+ * 结果:两个方案都覆盖 60m,但商品 B 更便宜,所以选择商品 B
70
+ * ```
71
+ *
72
+ * 示例 4:允许跨商品组合,组合价更低时会选择组合。
73
+ * ```
74
+ * target = 90
75
+ * 商品 A: min=30, max=30, unit=30, price=5 => 30m/$5
76
+ * 商品 B: min=60, max=60, unit=60, price=8 => 60m/$8
77
+ * 商品 C: min=90, max=90, unit=90, price=20 => 90m/$20
78
+ * 结果:商品 A + 商品 B = 90m/$13,比商品 C 更便宜
79
+ * ```
80
+ *
81
+ * 示例 5:允许重复购买同一个候选档位。
82
+ * ```
83
+ * target = 90
84
+ * 商品 A: min=30, max=30, unit=30, price=5 => 30m/$5
85
+ * 结果:购买 3 份商品 A,coveredMinutes=90,totalPrice=15,
86
+ * lines 中会合并为一行:product_add_schedule_time=30,num=3
87
+ * ```
88
+ *
89
+ * 示例 6:unlimited 可以覆盖任意目标时长,并参与价格比较。
90
+ * ```
91
+ * target = 180
92
+ * 商品 A: min=30, max=120, unit=30, price=10
93
+ * 商品 B: unlimited=true, price=35
94
+ * 普通商品可以组合成 180m,例如 120m + 60m,总价 $60
95
+ * unlimited 商品固定 $35
96
+ * 结果:选择 unlimited 商品,coveredMinutes=180,totalPrice=35
97
+ * ```
98
+ *
99
+ * 示例 7:unlimited 不一定优先,普通商品更便宜时选择普通商品。
100
+ * ```
101
+ * target = 60
102
+ * 商品 A: min=30, max=60, unit=30, price=10 => 60m/$20
103
+ * 商品 B: unlimited=true, price=50
104
+ * 结果:选择商品 A 的 60m 档位
105
+ * ```
106
+ *
107
+ * 示例 8:价格相同,优先选择超出时长更少的方案。
108
+ * ```
109
+ * target = 51
110
+ * 商品 A: 60m/$20
111
+ * 商品 B: 90m/$20
112
+ * 结果:选择 60m,因为 overage=9,小于 90m 的 overage=39
113
+ * ```
114
+ *
115
+ * 示例 9:价格和覆盖时长都相同,优先选择结果行数更少的方案。
116
+ * ```
117
+ * target = 60
118
+ * 商品 A: 60m/$20
119
+ * 商品 B: 30m/$10
120
+ * 商品 C: 30m/$10
121
+ * 结果:商品 A 单行方案和 B+C 两行方案价格、时长相同,选择商品 A
122
+ * ```
123
+ *
124
+ * 示例 10:没有任何有效商品时返回 `NO_PRODUCTS`。
125
+ * ```
126
+ * target = 30
127
+ * products = []
128
+ * 结果:available=false,unavailableReason='NO_PRODUCTS'
129
+ * ```
130
+ *
131
+ * 示例 11:有商品但没有可用候选时返回 `NO_COVERAGE`。
132
+ * ```
133
+ * target = 30
134
+ * 商品 A: price=0,或 minMinutes 缺失/无效
135
+ * 结果:available=false,unavailableReason='NO_COVERAGE'
136
+ * ```
137
+ *
138
+ * 示例 12:目标时长小于等于 0 时无需购买。
139
+ * ```
140
+ * target = 0
141
+ * 结果:available=true,coveredMinutes=0,totalPrice=0,lines=[]
142
+ * ```
143
+ *
144
+ * 搜索边界:
145
+ * 有限档位只需要搜索到 `targetMinutes + maxFiniteCandidateMinutes`。
146
+ * 这里的 `maxFiniteCandidateMinutes` 是所有普通候选档位里的最大时长。
147
+ * 例如目标是 51 分钟,最大普通档位是 120 分钟,则只搜索到 171 分钟。
148
+ * 如果某个组合覆盖了 180 分钟,那么移除其中任意一个普通档位后,剩余时长
149
+ * 仍然有机会覆盖 51 分钟,而且价格一定不会更高,所以 180 分钟这个组合不
150
+ * 可能是最优解。
151
+ */
152
+ export interface AddTimeProduct {
153
+ id: string | number;
154
+ title?: string;
155
+ price: number;
156
+ minMinutes?: number;
157
+ maxMinutes?: number;
158
+ unitMinutes?: number;
159
+ unlimited?: boolean;
160
+ _originalProduct?: unknown;
161
+ }
162
+ export interface AddTimePlanLine {
163
+ product_id: string | number;
164
+ product_title?: string;
165
+ product_add_schedule_time: number;
166
+ num: number;
167
+ price: number;
168
+ _originalProduct?: unknown;
169
+ }
170
+ export interface AddTimePlan {
171
+ available: boolean;
172
+ unavailableReason?: 'NO_PRODUCTS' | 'NO_COVERAGE';
173
+ targetMinutes: number;
174
+ coveredMinutes: number;
175
+ totalPrice: number;
176
+ lines: AddTimePlanLine[];
177
+ }
178
+ interface AddTimeCandidate extends AddTimePlanLine {
179
+ totalPrice: number;
180
+ unlimited?: boolean;
181
+ }
182
+ export declare const ADD_TIME_UNIT_MINUTES: readonly [10, 15, 20, 30, 45, 60];
183
+ export declare function buildAddTimeCandidates(products: AddTimeProduct[]): AddTimeCandidate[];
184
+ export declare function resolveBestAddTimePlan(products: AddTimeProduct[], targetMinutes: number): AddTimePlan;
185
+ export {};