@pisell/pisellos 0.10.14 → 0.10.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/dist/core/index.js +6 -9
  2. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  3. package/dist/model/strategy/strategy-example.js +5 -19
  4. package/dist/modules/Cart/index.js +0 -3
  5. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  6. package/dist/modules/Date/index.js +1 -5
  7. package/dist/modules/Discount/index.js +2 -4
  8. package/dist/modules/OpenData/index.js +0 -2
  9. package/dist/modules/Order/index.d.ts +1 -1
  10. package/dist/modules/Order/index.js +75 -91
  11. package/dist/modules/Order/types.d.ts +5 -1
  12. package/dist/modules/Order/utils/virtualSettlement.d.ts +8 -1
  13. package/dist/modules/Order/utils/virtualSettlement.js +15 -2
  14. package/dist/modules/Order/utils.js +7 -1
  15. package/dist/modules/Payment/index.js +97 -162
  16. package/dist/modules/Product/types.d.ts +2 -0
  17. package/dist/modules/Rules/index.js +1 -4
  18. package/dist/modules/Schedule/index.js +0 -1
  19. package/dist/modules/Schedule/utils.js +0 -1
  20. package/dist/modules/Step/index.js +0 -1
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.js +97 -129
  24. package/dist/server/modules/menu/index.js +32 -41
  25. package/dist/server/modules/order/index.js +2 -4
  26. package/dist/server/modules/products/index.js +24 -42
  27. package/dist/server/modules/quotation/index.js +29 -38
  28. package/dist/server/modules/resource/index.js +3 -4
  29. package/dist/server/modules/schedule/index.js +27 -35
  30. package/dist/server/utils/product.js +0 -1
  31. package/dist/solution/BaseSales/index.js +107 -76
  32. package/dist/solution/BaseSales/types.d.ts +2 -0
  33. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  34. package/dist/solution/BaseSales/utils/cartPromotion.js +15 -6
  35. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  36. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +7 -1
  37. package/dist/solution/BaseSales/utils.js +6 -3
  38. package/dist/solution/BookingByStep/index.d.ts +2 -2
  39. package/dist/solution/BookingByStep/index.js +7 -59
  40. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  41. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  42. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  43. package/dist/solution/BookingTicket/index.js +8 -4
  44. package/dist/solution/BookingTicket/utils/addProductDecision.js +3 -1
  45. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  46. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  47. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  48. package/dist/solution/BuyTickets/index.js +9 -12
  49. package/dist/solution/Checkout/index.js +177 -252
  50. package/dist/solution/Checkout/utils/index.js +4 -16
  51. package/dist/solution/RegisterAndLogin/index.js +30 -76
  52. package/dist/solution/ScanOrder/index.js +50 -60
  53. package/dist/solution/ScanOrder/types.d.ts +2 -0
  54. package/dist/solution/ScanOrder/utils.js +6 -3
  55. package/dist/solution/ShopDiscount/index.js +2 -7
  56. package/dist/solution/VenueBooking/index.js +45 -55
  57. package/dist/utils/task.js +15 -18
  58. package/dist/utils/watch.js +0 -1
  59. package/lib/apis/picoding.js +2 -0
  60. package/lib/core/index.js +131 -131
  61. package/lib/effects/index.js +46 -57
  62. package/lib/index.js +82 -49
  63. package/lib/model/index.js +14 -21
  64. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  65. package/lib/model/strategy/adapter/dataVariant/evaluator.js +209 -315
  66. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  67. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  68. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  69. package/lib/model/strategy/adapter/index.js +100 -64
  70. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  71. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  72. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  73. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  74. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  75. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  76. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  77. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  78. package/lib/model/strategy/adapter/promotion/index.js +43 -48
  79. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  80. package/lib/model/strategy/adapter/type.js +4 -16
  81. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  82. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  83. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  84. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  85. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  86. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  87. package/lib/model/strategy/engine.js +270 -168
  88. package/lib/model/strategy/index.js +49 -34
  89. package/lib/model/strategy/strategy-example.js +243 -239
  90. package/lib/model/strategy/type.js +100 -40
  91. package/lib/modules/Account/index.js +39 -53
  92. package/lib/modules/Account/types.js +20 -33
  93. package/lib/modules/AccountList/index.js +116 -154
  94. package/lib/modules/AccountList/types.js +30 -31
  95. package/lib/modules/AccountList/utils.js +18 -30
  96. package/lib/modules/BaseModule.js +23 -42
  97. package/lib/modules/BookingContext/index.js +158 -136
  98. package/lib/modules/BookingContext/types.js +46 -32
  99. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  100. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  101. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  102. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  103. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  104. package/lib/modules/BookingContext/utils/index.js +124 -41
  105. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  106. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  107. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  108. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  109. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  110. package/lib/modules/BookingContext/utils/resources.js +209 -167
  111. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  112. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  113. package/lib/modules/Cart/index.js +170 -124
  114. package/lib/modules/Cart/types.js +46 -51
  115. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  116. package/lib/modules/Cart/utils/cartDate.js +56 -61
  117. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  118. package/lib/modules/Cart/utils/cartNote.js +27 -32
  119. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  120. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  121. package/lib/modules/Cart/utils/cartResource.js +70 -78
  122. package/lib/modules/Cart/utils/changePrice.js +22 -50
  123. package/lib/modules/Cart/utils/index.js +106 -48
  124. package/lib/modules/Customer/constants.js +13 -34
  125. package/lib/modules/Customer/index.js +235 -172
  126. package/lib/modules/Customer/types.js +38 -35
  127. package/lib/modules/Date/index.js +116 -115
  128. package/lib/modules/Date/types.js +16 -28
  129. package/lib/modules/Date/utils.js +174 -123
  130. package/lib/modules/Discount/index.js +133 -143
  131. package/lib/modules/Discount/types.js +9 -31
  132. package/lib/modules/Guests/index.js +30 -56
  133. package/lib/modules/Guests/types.js +23 -33
  134. package/lib/modules/Holder/index.js +209 -189
  135. package/lib/modules/Holder/types.js +4 -16
  136. package/lib/modules/Holder/utils.js +20 -49
  137. package/lib/modules/OpenData/index.js +70 -76
  138. package/lib/modules/OpenData/types.js +4 -16
  139. package/lib/modules/OpenData/utils.js +44 -78
  140. package/lib/modules/Order/index.d.ts +1 -1
  141. package/lib/modules/Order/index.js +1810 -2238
  142. package/lib/modules/Order/payment-utils.js +77 -120
  143. package/lib/modules/Order/types.d.ts +5 -1
  144. package/lib/modules/Order/types.js +87 -35
  145. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  146. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  147. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  148. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  149. package/lib/modules/Order/utils/virtualSettlement.d.ts +8 -1
  150. package/lib/modules/Order/utils/virtualSettlement.js +126 -164
  151. package/lib/modules/Order/utils.js +834 -668
  152. package/lib/modules/Payment/cash.js +20 -33
  153. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  154. package/lib/modules/Payment/eftpos.js +16 -30
  155. package/lib/modules/Payment/index.js +532 -399
  156. package/lib/modules/Payment/mx51.js +1 -0
  157. package/lib/modules/Payment/types.js +230 -108
  158. package/lib/modules/Payment/utils.js +52 -51
  159. package/lib/modules/Payment/walletpass.js +485 -660
  160. package/lib/modules/Product/index.js +51 -46
  161. package/lib/modules/Product/types.d.ts +2 -0
  162. package/lib/modules/Product/types.js +4 -16
  163. package/lib/modules/Product/utils.js +32 -33
  164. package/lib/modules/ProductList/index.js +138 -161
  165. package/lib/modules/ProductList/types.js +9 -31
  166. package/lib/modules/Quotation/index.js +66 -100
  167. package/lib/modules/Quotation/types.js +4 -16
  168. package/lib/modules/Resource/index.js +27 -59
  169. package/lib/modules/Resource/types.js +22 -32
  170. package/lib/modules/Resource/utils.js +30 -38
  171. package/lib/modules/ResourcePlanner/index.js +25 -23
  172. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  173. package/lib/modules/ResourcePlanner/planner.js +591 -772
  174. package/lib/modules/ResourcePlanner/types.js +10 -29
  175. package/lib/modules/Rules/index.js +1218 -959
  176. package/lib/modules/Rules/types.js +17 -40
  177. package/lib/modules/SalesSummary/index.js +78 -89
  178. package/lib/modules/SalesSummary/types.js +4 -16
  179. package/lib/modules/SalesSummary/utils.js +359 -442
  180. package/lib/modules/ScanOrderLogger/index.js +59 -79
  181. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  182. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  183. package/lib/modules/ScanOrderLogger/types.js +4 -16
  184. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  185. package/lib/modules/Schedule/index.js +100 -114
  186. package/lib/modules/Schedule/type.js +4 -16
  187. package/lib/modules/Schedule/types.js +4 -16
  188. package/lib/modules/Schedule/utils.js +433 -291
  189. package/lib/modules/Step/index.js +40 -52
  190. package/lib/modules/Step/tyeps.js +4 -16
  191. package/lib/modules/Summary/index.js +66 -71
  192. package/lib/modules/Summary/types.js +4 -16
  193. package/lib/modules/Summary/utils.js +773 -418
  194. package/lib/modules/SurchargeList/index.js +46 -60
  195. package/lib/modules/SurchargeList/types.js +4 -16
  196. package/lib/modules/index.js +245 -63
  197. package/lib/plugins/app.js +4 -16
  198. package/lib/plugins/index.js +36 -25
  199. package/lib/plugins/request.js +137 -126
  200. package/lib/plugins/shopStore.js +4 -16
  201. package/lib/plugins/user.js +4 -16
  202. package/lib/plugins/window.js +171 -179
  203. package/lib/server/index.js +3027 -2655
  204. package/lib/server/modules/floor-plan/index.js +102 -123
  205. package/lib/server/modules/floor-plan/types.js +15 -30
  206. package/lib/server/modules/index.js +106 -68
  207. package/lib/server/modules/menu/index.js +146 -122
  208. package/lib/server/modules/menu/types.js +18 -31
  209. package/lib/server/modules/order/index.js +758 -956
  210. package/lib/server/modules/order/types.js +122 -33
  211. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  212. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  213. package/lib/server/modules/payment/index.js +59 -83
  214. package/lib/server/modules/payment/types.js +4 -16
  215. package/lib/server/modules/products/index.js +575 -459
  216. package/lib/server/modules/products/types.js +44 -34
  217. package/lib/server/modules/quotation/index.js +137 -172
  218. package/lib/server/modules/quotation/types.js +21 -31
  219. package/lib/server/modules/resource/index.js +213 -184
  220. package/lib/server/modules/resource/types.js +42 -33
  221. package/lib/server/modules/schedule/index.js +135 -123
  222. package/lib/server/modules/schedule/types.js +14 -21
  223. package/lib/server/modules/schedule/utils.js +334 -163
  224. package/lib/server/types.js +4 -16
  225. package/lib/server/utils/index.js +25 -23
  226. package/lib/server/utils/product.js +196 -139
  227. package/lib/server/utils/schedule.js +34 -41
  228. package/lib/server/utils/small-ticket.js +479 -456
  229. package/lib/server/utils/time.js +40 -49
  230. package/lib/solution/BaseSales/index.js +1276 -1485
  231. package/lib/solution/BaseSales/types.d.ts +2 -0
  232. package/lib/solution/BaseSales/types.js +42 -38
  233. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +5 -0
  234. package/lib/solution/BaseSales/utils/cartPromotion.js +652 -498
  235. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  236. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  237. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +3 -0
  238. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +138 -180
  239. package/lib/solution/BaseSales/utils.js +161 -143
  240. package/lib/solution/BookingByStep/index.d.ts +2 -2
  241. package/lib/solution/BookingByStep/index.js +1527 -1340
  242. package/lib/solution/BookingByStep/types.js +40 -99
  243. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  244. package/lib/solution/BookingByStep/utils/products.js +42 -52
  245. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  246. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  247. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  248. package/lib/solution/BookingTicket/index.js +598 -514
  249. package/lib/solution/BookingTicket/types.js +99 -77
  250. package/lib/solution/BookingTicket/utils/addProductDecision.js +229 -190
  251. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  252. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  253. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  254. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  255. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  256. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  257. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  258. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  259. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  260. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  261. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  262. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  263. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  264. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  265. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  266. package/lib/solution/BuyTickets/index.js +67 -70
  267. package/lib/solution/BuyTickets/types.js +22 -38
  268. package/lib/solution/Checkout/index.js +1451 -1158
  269. package/lib/solution/Checkout/types.js +91 -61
  270. package/lib/solution/Checkout/utils/index.js +228 -156
  271. package/lib/solution/PlaceOrder/index.js +55 -0
  272. package/lib/solution/RegisterAndLogin/config.js +493 -460
  273. package/lib/solution/RegisterAndLogin/index.js +633 -630
  274. package/lib/solution/RegisterAndLogin/types.js +189 -76
  275. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  276. package/lib/solution/Sales/index.js +328 -324
  277. package/lib/solution/Sales/types.js +27 -33
  278. package/lib/solution/ScanOrder/index.js +822 -852
  279. package/lib/solution/ScanOrder/types.d.ts +2 -0
  280. package/lib/solution/ScanOrder/types.js +33 -34
  281. package/lib/solution/ScanOrder/utils.js +412 -374
  282. package/lib/solution/ShopDiscount/index.js +226 -232
  283. package/lib/solution/ShopDiscount/types.js +15 -37
  284. package/lib/solution/ShopDiscount/utils.js +300 -172
  285. package/lib/solution/UnifiedBookingSales/index.js +1052 -1213
  286. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  287. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  288. package/lib/solution/VenueBooking/index.js +811 -879
  289. package/lib/solution/VenueBooking/types.js +19 -39
  290. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  291. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  292. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  293. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  294. package/lib/solution/VenueBooking/utils.js +130 -67
  295. package/lib/solution/index.js +124 -41
  296. package/lib/store/createStore.js +32 -29
  297. package/lib/types/index.js +4 -16
  298. package/lib/utils/payment-number.js +26 -46
  299. package/lib/utils/task.js +36 -36
  300. package/lib/utils/watch.js +81 -47
  301. package/package.json +2 -1
@@ -1,72 +1,53 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
8
- for (var name in all)
9
- __defProp(target, name, { get: all[name], enumerable: true });
10
- };
11
- var __copyProps = (to, from, except, desc) => {
12
- if (from && typeof from === "object" || typeof from === "function") {
13
- for (let key of __getOwnPropNames(from))
14
- if (!__hasOwnProp.call(to, key) && key !== except)
15
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
- }
17
- return to;
18
- };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
28
2
 
29
- // src/solution/BaseSales/utils.ts
30
- var utils_exports = {};
31
- __export(utils_exports, {
32
- buildProductLineFingerprint: () => buildProductLineFingerprint,
33
- createEmptySummary: () => createEmptySummary,
34
- getSafeProductNum: () => getSafeProductNum,
35
- isSkuOnlyDeleteIdentity: () => isSkuOnlyDeleteIdentity,
36
- normalizeOrderProduct: () => normalizeOrderProduct
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
37
5
  });
38
- module.exports = __toCommonJS(utils_exports);
39
- var import_decimal = __toESM(require("decimal.js"));
40
- var import_utils = require("../../modules/Order/utils");
41
- var import_manualProductDiscount = require("../../modules/Order/utils/manualProductDiscount");
6
+ exports.buildProductLineFingerprint = buildProductLineFingerprint;
7
+ exports.createEmptySummary = createEmptySummary;
8
+ exports.getSafeProductNum = getSafeProductNum;
9
+ exports.isSkuOnlyDeleteIdentity = isSkuOnlyDeleteIdentity;
10
+ exports.normalizeOrderProduct = normalizeOrderProduct;
11
+ var _decimal = _interopRequireDefault(require("decimal.js"));
12
+ var _utils = require("../../modules/Order/utils");
13
+ var _manualProductDiscount = require("../../modules/Order/utils/manualProductDiscount");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ /**
16
+ * 构建金额全为 0 的空 summary。
17
+ * 作为尚未计算金额时的兜底默认值,避免下游因 undefined 报错。
18
+ */
42
19
  function createEmptySummary() {
43
20
  return {
44
21
  product_quantity: 0,
45
- product_original_amount: "0.00",
46
- product_amount: "0.00",
47
- product_expect_amount: "0.00",
48
- product_tax_fee: "0.00",
49
- shipping_fee: "0.00",
50
- shipping_tax_fee: "0.00",
51
- tax_fee: "0.00",
52
- surcharge_fee: "0.00",
53
- discount_amount: "0.00",
54
- deposit_amount: "0.00",
55
- expect_amount: "0.00",
56
- total_amount: "0.00",
57
- amount_gap: "0.00",
58
- rounding_amount: "0.00",
59
- pay_service_charge_amount: "0.00"
22
+ product_original_amount: '0.00',
23
+ product_amount: '0.00',
24
+ product_expect_amount: '0.00',
25
+ product_tax_fee: '0.00',
26
+ shipping_fee: '0.00',
27
+ shipping_tax_fee: '0.00',
28
+ tax_fee: '0.00',
29
+ surcharge_fee: '0.00',
30
+ discount_amount: '0.00',
31
+ deposit_amount: '0.00',
32
+ expect_amount: '0.00',
33
+ total_amount: '0.00',
34
+ amount_gap: '0.00',
35
+ rounding_amount: '0.00',
36
+ pay_service_charge_amount: '0.00'
60
37
  };
61
38
  }
39
+ /**
40
+ * 将选项行 / 套餐行归一成稳定 JSON,用于「同 SKU 是否合并」判断。
41
+ * 数组元素先按主键排序再序列化,避免顺序差异导致误判为不同行。
42
+ */
62
43
  function buildProductLineFingerprint(productOptionItem, productBundle) {
63
- const normalizeOptions = (options) => {
44
+ const normalizeOptions = options => {
64
45
  const optionArr = Array.isArray(options) ? options : [];
65
- return optionArr.map((item) => ({
66
- option_group_item_id: Number(item == null ? void 0 : item.option_group_item_id) || 0,
67
- option_group_id: Number(item == null ? void 0 : item.option_group_id) || 0,
68
- num: typeof (item == null ? void 0 : item.num) === "number" && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
69
- price: String((item == null ? void 0 : item.add_price) ?? (item == null ? void 0 : item.price) ?? "")
46
+ return optionArr.map(item => ({
47
+ option_group_item_id: Number(item?.option_group_item_id) || 0,
48
+ option_group_id: Number(item?.option_group_id) || 0,
49
+ num: typeof item?.num === 'number' && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
50
+ price: String(item?.add_price ?? item?.price ?? '')
70
51
  })).sort((p, q) => {
71
52
  if (p.option_group_item_id !== q.option_group_item_id) {
72
53
  return p.option_group_item_id - q.option_group_item_id;
@@ -74,68 +55,89 @@ function buildProductLineFingerprint(productOptionItem, productBundle) {
74
55
  if (p.option_group_id !== q.option_group_id) {
75
56
  return p.option_group_id - q.option_group_id;
76
57
  }
77
- if (p.num !== q.num)
78
- return p.num - q.num;
58
+ if (p.num !== q.num) return p.num - q.num;
79
59
  return p.price.localeCompare(q.price);
80
60
  });
81
61
  };
82
62
  const normalizedOpts = normalizeOptions(productOptionItem);
83
63
  const bundleArr = Array.isArray(productBundle) ? productBundle : [];
84
- const normalizedBundles = bundleArr.map((item) => ({
85
- bundle_id: Number((item == null ? void 0 : item.bundle_id) ?? (item == null ? void 0 : item.id) ?? 0) || 0,
86
- product_id: Number(item == null ? void 0 : item.product_id) || 0,
87
- product_variant_id: Number((item == null ? void 0 : item.bundle_variant_id) ?? (item == null ? void 0 : item.product_variant_id)) || 0,
88
- num: typeof (item == null ? void 0 : item.num) === "number" && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
89
- option: normalizeOptions(item == null ? void 0 : item.option)
64
+ const normalizedBundles = bundleArr.map(item => ({
65
+ bundle_id: Number(item?.bundle_id ?? item?.id ?? 0) || 0,
66
+ product_id: Number(item?.product_id) || 0,
67
+ product_variant_id: Number(item?.bundle_variant_id ?? item?.product_variant_id) || 0,
68
+ num: typeof item?.num === 'number' && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
69
+ option: normalizeOptions(item?.option)
90
70
  })).sort((p, q) => {
91
- if (p.bundle_id !== q.bundle_id)
92
- return p.bundle_id - q.bundle_id;
93
- if (p.product_id !== q.product_id)
94
- return p.product_id - q.product_id;
71
+ if (p.bundle_id !== q.bundle_id) return p.bundle_id - q.bundle_id;
72
+ if (p.product_id !== q.product_id) return p.product_id - q.product_id;
95
73
  if (p.product_variant_id !== q.product_variant_id) {
96
74
  return p.product_variant_id - q.product_variant_id;
97
75
  }
98
- if (p.num !== q.num)
99
- return p.num - q.num;
76
+ if (p.num !== q.num) return p.num - q.num;
100
77
  return JSON.stringify(p.option).localeCompare(JSON.stringify(q.option));
101
78
  });
102
79
  return JSON.stringify([normalizedOpts, normalizedBundles]);
103
80
  }
104
81
  function getSafeProductNum(num) {
105
- if (!num || Number.isNaN(num))
106
- return 1;
107
- if (num < 1)
108
- return 1;
82
+ if (!num || Number.isNaN(num)) return 1;
83
+ if (num < 1) return 1;
109
84
  return Math.floor(num);
110
85
  }
86
+
87
+ /**
88
+ * removeProductFromOrder 仅传 SKU 时的通配 identity(对象上未声明选项键)。
89
+ * 与显式 `product_sku: { option: [] }` 区分:后者只匹配「无选项」行。
90
+ */
111
91
  function isSkuOnlyDeleteIdentity(x) {
112
- if (x.identity_key)
113
- return false;
114
- return !("product_sku" in x) && !("product_bundle" in x);
92
+ if (x.identity_key) return false;
93
+ return !('product_sku' in x) && !('product_bundle' in x);
115
94
  }
95
+
96
+ /**
97
+ * 对外部传入的商品对象做归一化(v2 composite 语义):
98
+ * - 补全可选字段默认值(未传则使用兜底值,避免后续计算时因 undefined 导致异常)
99
+ * - 对 num 调用 getSafeProductNum 做安全处理
100
+ * - 保留 _origin 供后续业务流程(如促销规则)使用
101
+ *
102
+ * 价格字段语义(metadata 权威源 + composite 派生):
103
+ * - `metadata.source_product_price`:主商品/variant 基础价(已应用报价单),**不含 option**、
104
+ * **不含折扣**。是推导 main_product_* 的起点。variant 分支优先读 `metadata.origin.variant[vid].price`。
105
+ * - `metadata.main_product_original_price`:`source + Σ(option.price × option.num)`,**含 option**、
106
+ * **不含折扣**。
107
+ * - `metadata.main_product_selling_price`:`main_product_original_price - 主商品券 per-unit amount`,
108
+ * **含 option**、**含折扣**。
109
+ * - 行级 `selling_price` = `main_product_selling_price + Σ(bundle_selling_price × num)`。
110
+ * - 行级 `original_price` = `main_product_original_price + Σ(bundle 原价 × num)`。
111
+ *
112
+ * 迁移与幂等:
113
+ * - `metadata.price_schema_version === 2` → 已新语义归一化,保留 main_product_* 原值(保留折扣)。
114
+ * - 其它情况(v1 / 缺字段 / 无 metadata)→ 按"main_product_selling_price 曾是 main-only"的旧约定
115
+ * 反推 legacyDiscount,再以新 source + options 基准重算。最终统一打上 `price_schema_version: 2`。
116
+ * - 因此多次 normalize 不会重复叠加 option/bundle。
117
+ */
116
118
  function normalizeOrderProduct(product) {
117
- var _a, _b, _c, _d, _e, _f, _g;
118
- const metadata = { ...product.metadata || {} };
119
- const resolvedIdentityKey = ((_a = product.metadata) == null ? void 0 : _a.unique_identification_number) ? String(product.metadata.unique_identification_number) : product.unique_identification_number && String(product.unique_identification_number).length > 0 ? String(product.unique_identification_number) : product.identity_key && String(product.identity_key).length > 0 ? String(product.identity_key) : (0, import_utils.createUuidV4)();
119
+ const metadata = {
120
+ ...(product.metadata || {})
121
+ };
122
+ // 不透明 identity 契约:每条订单行必须带 identity_key。
123
+ // 调用方未传时由 SDK 自动生成 UUID,后续 update/remove 只做严格比对,避免猜测合成 key。
124
+ const resolvedIdentityKey = product.metadata?.unique_identification_number ? String(product.metadata.unique_identification_number) : product.unique_identification_number && String(product.unique_identification_number).length > 0 ? String(product.unique_identification_number) : product.identity_key && String(product.identity_key).length > 0 ? String(product.identity_key) : (0, _utils.createUuidV4)();
120
125
  metadata.unique_identification_number = resolvedIdentityKey;
121
126
  const priceOverride = metadata.price_override;
122
- const originOtherBundle = (_d = (_c = (_b = metadata.origin) == null ? void 0 : _b._extend) == null ? void 0 : _c.other) == null ? void 0 : _d.bundle;
127
+ const originOtherBundle = metadata.origin?._extend?.other?.bundle;
123
128
  let bundleInput = product.product_bundle || [];
124
- if (priceOverride !== void 0 && priceOverride !== null && priceOverride !== "" && Array.isArray(originOtherBundle) && originOtherBundle.length > 0) {
125
- const priceById = /* @__PURE__ */ new Map();
126
- originOtherBundle.forEach((item) => {
127
- if ((item == null ? void 0 : item.id) == null)
128
- return;
129
+ if (priceOverride !== undefined && priceOverride !== null && priceOverride !== '' && Array.isArray(originOtherBundle) && originOtherBundle.length > 0) {
130
+ const priceById = new Map();
131
+ originOtherBundle.forEach(item => {
132
+ if (item?.id == null) return;
129
133
  const unit = item.price ?? item.bundle_selling_price;
130
- if (unit === void 0 || unit === null)
131
- return;
134
+ if (unit === undefined || unit === null) return;
132
135
  priceById.set(String(item.id), String(unit));
133
136
  });
134
137
  const base = Array.isArray(bundleInput) && bundleInput.length > 0 ? bundleInput : originOtherBundle;
135
- bundleInput = base.map((item) => {
136
- const unit = priceById.get(String(item == null ? void 0 : item.id));
137
- if (unit === void 0)
138
- return item;
138
+ bundleInput = base.map(item => {
139
+ const unit = priceById.get(String(item?.id));
140
+ if (unit === undefined) return item;
139
141
  return {
140
142
  ...item,
141
143
  price: unit,
@@ -143,86 +145,107 @@ function normalizeOrderProduct(product) {
143
145
  };
144
146
  });
145
147
  }
146
- const normalizedBundle = bundleInput.map((item) => ({
148
+ const normalizedBundle = bundleInput.map(item => ({
147
149
  ...item,
148
150
  bundle_id: item.bundle_id ?? item.id,
149
151
  bundle_product_id: item.bundle_product_id ?? item._bundle_product_id,
150
152
  bundle_group_id: item.bundle_group_id ?? item.group_id,
151
- bundle_selling_price: item.bundle_selling_price ?? item.price ?? "0.00",
152
- price: item.price ?? item.custom_price ?? item.bundle_selling_price ?? "0.00",
153
- price_type: item.price_type ?? item.custom_price_type ?? "",
154
- price_type_ext: item.price_type_ext ?? item.custom_price_type_ext ?? ""
153
+ bundle_selling_price: item.bundle_selling_price ?? item.price ?? '0.00',
154
+ price: item.price ?? item.custom_price ?? item.bundle_selling_price ?? '0.00',
155
+ price_type: item.price_type ?? item.custom_price_type ?? '',
156
+ price_type_ext: item.price_type_ext ?? item.custom_price_type_ext ?? ''
155
157
  }));
156
- const normalizedOptions = (0, import_utils.normalizeProductSkuOptions)((_e = product.product_sku) == null ? void 0 : _e.option);
157
- const optionSum = (0, import_utils.sumOptionUnitPrice)(normalizedOptions);
158
+ const normalizedOptions = (0, _utils.normalizeProductSkuOptions)(product.product_sku?.option);
159
+ const optionSum = (0, _utils.sumOptionUnitPrice)(normalizedOptions);
158
160
  const productSku = {
159
- ...(0, import_utils.ensureProductSku)(product),
161
+ ...(0, _utils.ensureProductSku)(product),
160
162
  option: normalizedOptions
161
163
  };
162
- const isV2 = metadata.price_schema_version === 2 || metadata.price_schema_version === "2";
164
+
165
+ // 1) 解析 source_product_price。
166
+ // 优先级:
167
+ // 1) metadata.source_product_price(v2 权威)
168
+ // 2) variantPrice(命中 variant_id,从 metadata.origin.variant[vid].price 读)
169
+ // 3) _origin.price / _origin.base_price(后端语义的基础价)
170
+ // 4) v1 兼容:无 v2 标记但存在 metadata.main_product_original_price(v1 main-only,即旧 source)
171
+ // 5) 入参 original_price(v1 addProduct 约定:original_price 为 pre-discount 基础价)
172
+ // 6) 入参 selling_price(最末兜底,新添加路径 caller 只给 selling_price)
173
+ const isV2 = metadata.price_schema_version === 2 || metadata.price_schema_version === '2';
163
174
  const variantId = Number(product.product_variant_id || 0);
164
- const variantList = variantId ? (_f = metadata == null ? void 0 : metadata.origin) == null ? void 0 : _f.variant : null;
165
- const variantPrice = Array.isArray(variantList) ? (_g = variantList.find((v) => Number(v == null ? void 0 : v.id) === variantId)) == null ? void 0 : _g.price : void 0;
175
+ const variantList = variantId ? metadata?.origin?.variant : null;
176
+ const variantPrice = Array.isArray(variantList) ? variantList.find(v => Number(v?.id) === variantId)?.price : undefined;
166
177
  const resolvedSource = (() => {
167
- var _a2, _b2;
168
- if (metadata.source_product_price !== void 0) {
178
+ if (metadata.source_product_price !== undefined) {
169
179
  return String(metadata.source_product_price);
170
180
  }
171
- if (variantPrice !== void 0 && variantPrice !== null) {
181
+ if (variantPrice !== undefined && variantPrice !== null) {
172
182
  return String(variantPrice);
173
183
  }
174
- const originPrice = (_a2 = product._origin) == null ? void 0 : _a2.price;
175
- if (originPrice !== void 0 && originPrice !== null) {
184
+ const originPrice = product._origin?.price;
185
+ if (originPrice !== undefined && originPrice !== null) {
176
186
  return String(originPrice);
177
187
  }
178
- const originBasePrice = (_b2 = product._origin) == null ? void 0 : _b2.base_price;
179
- if (originBasePrice !== void 0 && originBasePrice !== null) {
188
+ const originBasePrice = product._origin?.base_price;
189
+ if (originBasePrice !== undefined && originBasePrice !== null) {
180
190
  return String(originBasePrice);
181
191
  }
182
- if (!isV2 && metadata.main_product_original_price !== void 0) {
192
+ if (!isV2 && metadata.main_product_original_price !== undefined) {
183
193
  return String(metadata.main_product_original_price);
184
194
  }
185
- return product.original_price ?? product.selling_price ?? "0.00";
195
+ return product.original_price ?? product.selling_price ?? '0.00';
186
196
  })();
187
- const mainOriginalDec = new import_decimal.default(Number(resolvedSource) || 0).plus(optionSum);
197
+
198
+ // 2) 派生 main_product_original_price(含 option、不含折扣)
199
+ const mainOriginalDec = new _decimal.default(Number(resolvedSource) || 0).plus(optionSum);
188
200
  const mainOriginalStr = mainOriginalDec.toDecimalPlaces(2).toFixed(2);
201
+
202
+ // 3) 派生 main_product_selling_price(含 option、含主商品折扣)
203
+ // - v2 数据:直接沿用 metadata.main_product_selling_price(保留折扣)
204
+ // - v1 metadata:main_product_selling_price 旧语义是 main-only(≈ source-level 折后价),
205
+ // 反推 legacyDiscount = main_original(旧) - main_selling(旧),再用新 main_original - legacyDiscount
206
+ // - v1 addProduct 入参:top-level selling_price < original_price 表示主商品折扣;
207
+ // 用差额作为 legacyDiscount 映射到新 main_selling
208
+ // - 其它:视为无折扣,main_selling = main_original
189
209
  let mainSellingDec;
190
210
  if (isV2 && metadata.main_product_selling_price != null) {
191
- mainSellingDec = new import_decimal.default(Number(metadata.main_product_selling_price) || 0);
211
+ mainSellingDec = new _decimal.default(Number(metadata.main_product_selling_price) || 0);
192
212
  } else if (metadata.main_product_selling_price != null && metadata.main_product_original_price != null) {
193
- const legacyOriginal = new import_decimal.default(Number(metadata.main_product_original_price) || 0);
194
- const legacySelling = new import_decimal.default(Number(metadata.main_product_selling_price) || 0);
213
+ const legacyOriginal = new _decimal.default(Number(metadata.main_product_original_price) || 0);
214
+ const legacySelling = new _decimal.default(Number(metadata.main_product_selling_price) || 0);
195
215
  const legacyDiscount = legacyOriginal.minus(legacySelling);
196
216
  mainSellingDec = mainOriginalDec.minus(legacyDiscount);
197
- } else if (product.original_price != null && product.selling_price != null && new import_decimal.default(Number(product.original_price) || 0).greaterThan(
198
- new import_decimal.default(Number(product.selling_price) || 0)
199
- )) {
200
- const topOriginal = new import_decimal.default(Number(product.original_price) || 0);
201
- const topSelling = new import_decimal.default(Number(product.selling_price) || 0);
217
+ } else if (product.original_price != null && product.selling_price != null && new _decimal.default(Number(product.original_price) || 0).greaterThan(new _decimal.default(Number(product.selling_price) || 0))) {
218
+ const topOriginal = new _decimal.default(Number(product.original_price) || 0);
219
+ const topSelling = new _decimal.default(Number(product.selling_price) || 0);
202
220
  const legacyDiscount = topOriginal.minus(topSelling);
203
221
  mainSellingDec = mainOriginalDec.minus(legacyDiscount);
204
222
  } else {
205
223
  mainSellingDec = mainOriginalDec;
206
224
  }
207
225
  const mainSellingStr = mainSellingDec.toDecimalPlaces(2).toFixed(2);
226
+
227
+ // 4) 落盘 metadata:三字段 + schema 版本 sentinel
208
228
  metadata.source_product_price = resolvedSource;
209
229
  metadata.main_product_original_price = mainOriginalStr;
210
230
  metadata.main_product_selling_price = mainSellingStr;
211
231
  metadata.price_schema_version = 2;
212
- const composedSellingPrice = (0, import_utils.composeLinePrice)({
232
+
233
+ // 5) 合成行级 composite(main 已含 option,本步只叠 bundle)
234
+ const composedSellingPrice = (0, _utils.composeLinePrice)({
213
235
  mainPrice: mainSellingStr,
214
236
  bundle: normalizedBundle
215
237
  });
216
- const composedOriginalPrice = (0, import_utils.composeLinePrice)({
238
+ const composedOriginalPrice = (0, _utils.composeLinePrice)({
217
239
  mainPrice: mainOriginalStr,
218
240
  bundle: normalizedBundle,
219
241
  useOriginalBundle: true
220
242
  });
221
- const finalOriginalPrice = (0, import_utils.resolveManualOverrideLineOriginalPrice)(
222
- { num: product.num, metadata, lineOriginalPrice: product.original_price },
223
- composedOriginalPrice
224
- );
225
- const discountList = (0, import_manualProductDiscount.ensureManualProductDiscountList)({
243
+ const finalOriginalPrice = (0, _utils.resolveManualOverrideLineOriginalPrice)({
244
+ num: product.num,
245
+ metadata,
246
+ lineOriginalPrice: product.original_price
247
+ }, composedOriginalPrice);
248
+ const discountList = (0, _manualProductDiscount.ensureManualProductDiscountList)({
226
249
  discountList: product.discount_list,
227
250
  metadata,
228
251
  originalPrice: finalOriginalPrice,
@@ -234,22 +257,17 @@ function normalizeOrderProduct(product) {
234
257
  product_id: product.product_id,
235
258
  num: getSafeProductNum(product.num),
236
259
  product_variant_id: product.product_variant_id,
260
+ ...(product.production_code !== undefined && product.production_code !== null ? {
261
+ production_code: String(product.production_code).trim()
262
+ } : {}),
237
263
  product_sku: productSku,
238
264
  selling_price: composedSellingPrice,
239
265
  original_price: finalOriginalPrice,
240
- tax_fee: product.tax_fee || "0.00",
266
+ tax_fee: product.tax_fee || '0.00',
241
267
  is_charge_tax: product.is_charge_tax ?? 0,
242
268
  discount_list: discountList,
243
269
  product_bundle: normalizedBundle,
244
270
  metadata,
245
- note: product.note != null ? String(product.note) : ""
271
+ note: product.note != null ? String(product.note) : ''
246
272
  };
247
- }
248
- // Annotate the CommonJS export names for ESM import in node:
249
- 0 && (module.exports = {
250
- buildProductLineFingerprint,
251
- createEmptySummary,
252
- getSafeProductNum,
253
- isSkuOnlyDeleteIdentity,
254
- normalizeOrderProduct
255
- });
273
+ }
@@ -326,7 +326,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
326
326
  date: string;
327
327
  status: string;
328
328
  week: string;
329
- weekNum: 0 | 1 | 2 | 5 | 4 | 3 | 6;
329
+ weekNum: 0 | 2 | 1 | 3 | 4 | 5 | 6;
330
330
  }[]>;
331
331
  submitTimeSlot(timeSlots: TimeSliceItem): void;
332
332
  private getScheduleDataByIds;
@@ -345,7 +345,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
345
345
  count: number;
346
346
  left: number;
347
347
  summaryCount: number;
348
- status: "sold_out" | "lots_of_space" | "filling_up_fast";
348
+ status: "lots_of_space" | "filling_up_fast" | "sold_out";
349
349
  }[];
350
350
  /**
351
351
  * 找到多个资源的公共可用时间段