@pisell/pisellos 2.2.277 → 2.2.800

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 (127) hide show
  1. package/dist/core/index.d.ts +0 -2
  2. package/dist/core/index.js +1 -7
  3. package/dist/model/strategy/adapter/promotion/adapter.d.ts +0 -4
  4. package/dist/model/strategy/adapter/promotion/adapter.js +0 -23
  5. package/dist/model/strategy/adapter/promotion/evaluator.d.ts +0 -17
  6. package/dist/model/strategy/adapter/promotion/evaluator.js +6 -279
  7. package/dist/model/strategy/adapter/promotion/examples.d.ts +0 -86
  8. package/dist/model/strategy/adapter/promotion/examples.js +0 -99
  9. package/dist/model/strategy/adapter/promotion/index.d.ts +1 -1
  10. package/dist/model/strategy/adapter/promotion/index.js +0 -9
  11. package/dist/model/strategy/adapter/promotion/type.d.ts +2 -90
  12. package/dist/model/strategy/adapter/promotion/type.js +0 -45
  13. package/dist/model/strategy/adapter/walletPass/evaluator.js +2 -0
  14. package/dist/model/strategy/adapter/walletPass/type.d.ts +0 -5
  15. package/dist/model/strategy/adapter/walletPass/utils.js +26 -57
  16. package/dist/modules/OpenData/index.d.ts +0 -2
  17. package/dist/modules/OpenData/index.js +0 -8
  18. package/dist/modules/Order/index.d.ts +8 -28
  19. package/dist/modules/Order/index.js +496 -808
  20. package/dist/modules/Order/types.d.ts +1 -35
  21. package/dist/modules/Order/utils/orderCollectionIdentity.js +2 -7
  22. package/dist/modules/Order/utils.js +6 -10
  23. package/dist/modules/Payment/index.d.ts +0 -2
  24. package/dist/modules/Payment/index.js +49 -78
  25. package/dist/modules/Payment/types.d.ts +25 -106
  26. package/dist/modules/Payment/types.js +0 -17
  27. package/dist/modules/Payment/utils.js +1 -4
  28. package/dist/modules/Payment/walletpass.d.ts +1 -49
  29. package/dist/modules/Payment/walletpass.js +124 -1081
  30. package/dist/modules/Rules/index.d.ts +0 -3
  31. package/dist/modules/Rules/index.js +70 -100
  32. package/dist/server/index.d.ts +0 -25
  33. package/dist/server/index.js +1069 -2001
  34. package/dist/server/modules/index.d.ts +1 -1
  35. package/dist/server/modules/order/index.d.ts +4 -70
  36. package/dist/server/modules/order/index.js +728 -1816
  37. package/dist/server/modules/order/types.d.ts +3 -25
  38. package/dist/server/modules/order/types.js +1 -7
  39. package/dist/server/utils/small-ticket.js +2 -1
  40. package/dist/solution/BaseSales/index.d.ts +5 -109
  41. package/dist/solution/BaseSales/index.js +436 -1802
  42. package/dist/solution/BaseSales/types.d.ts +1 -55
  43. package/dist/solution/BaseSales/types.js +1 -2
  44. package/dist/solution/BaseSales/utils/cartPromotion.d.ts +1 -3
  45. package/dist/solution/BaseSales/utils/cartPromotion.js +31 -90
  46. package/dist/solution/BaseSales/utils/parseSalesResponse.d.ts +1 -6
  47. package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +4 -7
  48. package/dist/solution/BookingByStep/index.d.ts +1 -1
  49. package/dist/solution/BookingTicket/index.d.ts +5 -21
  50. package/dist/solution/BookingTicket/index.js +56 -139
  51. package/dist/solution/BookingTicket/types.d.ts +0 -1
  52. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +0 -8
  53. package/dist/solution/BookingTicket/utils/scan/applyGlobalScan.js +83 -173
  54. package/dist/solution/Sales/index.d.ts +0 -2
  55. package/dist/solution/Sales/index.js +4 -26
  56. package/dist/solution/ScanOrder/index.js +20 -31
  57. package/dist/solution/VenueBooking/index.d.ts +0 -1
  58. package/dist/solution/VenueBooking/index.js +19 -30
  59. package/dist/types/index.d.ts +0 -1
  60. package/lib/core/index.d.ts +0 -2
  61. package/lib/core/index.js +1 -4
  62. package/lib/model/strategy/adapter/promotion/adapter.d.ts +0 -4
  63. package/lib/model/strategy/adapter/promotion/adapter.js +0 -20
  64. package/lib/model/strategy/adapter/promotion/evaluator.d.ts +0 -17
  65. package/lib/model/strategy/adapter/promotion/evaluator.js +0 -235
  66. package/lib/model/strategy/adapter/promotion/examples.d.ts +0 -86
  67. package/lib/model/strategy/adapter/promotion/examples.js +0 -91
  68. package/lib/model/strategy/adapter/promotion/index.d.ts +1 -1
  69. package/lib/model/strategy/adapter/promotion/index.js +49 -0
  70. package/lib/model/strategy/adapter/promotion/type.d.ts +2 -90
  71. package/lib/model/strategy/adapter/promotion/type.js +0 -2
  72. package/lib/model/strategy/adapter/walletPass/evaluator.js +2 -0
  73. package/lib/model/strategy/adapter/walletPass/type.d.ts +0 -5
  74. package/lib/model/strategy/adapter/walletPass/utils.js +11 -62
  75. package/lib/modules/OpenData/index.d.ts +0 -2
  76. package/lib/modules/OpenData/index.js +0 -5
  77. package/lib/modules/Order/index.d.ts +8 -28
  78. package/lib/modules/Order/index.js +69 -231
  79. package/lib/modules/Order/types.d.ts +1 -35
  80. package/lib/modules/Order/utils/orderCollectionIdentity.js +0 -3
  81. package/lib/modules/Order/utils.js +4 -11
  82. package/lib/modules/Payment/index.d.ts +0 -2
  83. package/lib/modules/Payment/index.js +12 -33
  84. package/lib/modules/Payment/types.d.ts +25 -106
  85. package/lib/modules/Payment/types.js +0 -1
  86. package/lib/modules/Payment/utils.js +1 -5
  87. package/lib/modules/Payment/walletpass.d.ts +1 -49
  88. package/lib/modules/Payment/walletpass.js +22 -898
  89. package/lib/modules/Rules/index.d.ts +0 -3
  90. package/lib/modules/Rules/index.js +9 -38
  91. package/lib/server/index.d.ts +0 -25
  92. package/lib/server/index.js +31 -726
  93. package/lib/server/modules/index.d.ts +1 -1
  94. package/lib/server/modules/order/index.d.ts +4 -70
  95. package/lib/server/modules/order/index.js +69 -818
  96. package/lib/server/modules/order/types.d.ts +3 -25
  97. package/lib/server/modules/order/types.js +0 -1
  98. package/lib/server/utils/small-ticket.js +1 -1
  99. package/lib/solution/BaseSales/index.d.ts +5 -109
  100. package/lib/solution/BaseSales/index.js +27 -874
  101. package/lib/solution/BaseSales/types.d.ts +1 -55
  102. package/lib/solution/BaseSales/types.js +1 -2
  103. package/lib/solution/BaseSales/utils/cartPromotion.d.ts +1 -3
  104. package/lib/solution/BaseSales/utils/cartPromotion.js +12 -63
  105. package/lib/solution/BaseSales/utils/parseSalesResponse.d.ts +1 -6
  106. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +3 -4
  107. package/lib/solution/BookingByStep/index.d.ts +1 -1
  108. package/lib/solution/BookingTicket/index.d.ts +5 -21
  109. package/lib/solution/BookingTicket/index.js +13 -64
  110. package/lib/solution/BookingTicket/types.d.ts +0 -1
  111. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.d.ts +0 -8
  112. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +5 -37
  113. package/lib/solution/Sales/index.d.ts +0 -2
  114. package/lib/solution/Sales/index.js +6 -20
  115. package/lib/solution/ScanOrder/index.js +0 -8
  116. package/lib/solution/VenueBooking/index.d.ts +0 -1
  117. package/lib/solution/VenueBooking/index.js +0 -8
  118. package/lib/types/index.d.ts +0 -1
  119. package/package.json +1 -1
  120. package/dist/modules/Order/payment-utils.d.ts +0 -26
  121. package/dist/modules/Order/payment-utils.js +0 -225
  122. package/dist/utils/payment-number.d.ts +0 -9
  123. package/dist/utils/payment-number.js +0 -69
  124. package/lib/modules/Order/payment-utils.d.ts +0 -26
  125. package/lib/modules/Order/payment-utils.js +0 -224
  126. package/lib/utils/payment-number.d.ts +0 -9
  127. package/lib/utils/payment-number.js +0 -64
@@ -37,7 +37,6 @@ var import_dayjs = __toESM(require("dayjs"));
37
37
  var import_BaseModule = require("../../../modules/BaseModule");
38
38
  var import_orderCollectionIdentity = require("../../../modules/Order/utils/orderCollectionIdentity");
39
39
  var import_types = require("./types");
40
- var import_payment_utils = require("../../../modules/Order/payment-utils");
41
40
  var INDEXDB_STORE_NAME = "orders";
42
41
  var ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY = "server_order_last_full_fetch_at";
43
42
  var ORDER_SYNC_THROTTLE_MS_STORAGE_KEY = "order_sync_throttle_ms";
@@ -47,13 +46,10 @@ var ORDER_SILENT_REFRESH_MIN_INTERVAL_MS = 3e4;
47
46
  var ORDER_BUSINESS_WRITE_SOURCES = /* @__PURE__ */ new Set([
48
47
  "upsertOrdersFromRemote",
49
48
  "upsertPendingSyncOrders",
50
- "upsertLocalDraftOrders",
51
49
  "overwriteExistingOrder",
52
- "markOrderSyncedByExternalSaleNumber",
53
- "updateLocalPayment"
50
+ "markOrderSyncedByExternalSaleNumber"
54
51
  ]);
55
52
  var ORDER_MERGE_SELF_CHECK = false;
56
- var PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER = "__pisell_os_pending_payment_without_unique_number__";
57
53
  var ORDER_AUTHORITATIVE_COLLECTION_FIELDS = ["products", "bookings", "payments"];
58
54
  var ORDER_COLLECTION_KIND_BY_FIELD = {
59
55
  products: "product",
@@ -89,24 +85,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
89
85
  };
90
86
  await this.core.effects.emit(import_types.OrderHooks.onOrdersChanged, payload);
91
87
  }
92
- /**
93
- * 广播远端商品成员增删。监听器异常必须与订单落库和原有订单广播隔离。
94
- */
95
- async emitRemoteProductMembershipChanges(changes) {
96
- for (const payload of changes) {
97
- try {
98
- await this.core.effects.emit(import_types.OrderHooks.onRemoteProductMembershipChanged, payload);
99
- } catch (error) {
100
- this.logError("广播远端订单商品成员变更失败", {
101
- order_id: payload.order_id,
102
- source: payload.source,
103
- added_product_count: payload.added_product_keys.length,
104
- removed_product_count: payload.removed_product_keys.length,
105
- error: error instanceof Error ? error.message : String(error)
106
- });
107
- }
108
- }
109
- }
110
88
  async initialize(core, options) {
111
89
  var _a;
112
90
  this.core = core;
@@ -122,10 +100,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
122
100
  this.updateCreateStore();
123
101
  }
124
102
  if (Array.isArray((_a = options == null ? void 0 : options.initialState) == null ? void 0 : _a.list)) {
125
- this.store.list = this.normalizeOrdersForMemoryList(
126
- options.initialState.list,
127
- "initialState"
128
- );
103
+ this.store.list = options.initialState.list.map((order) => this.normalizeOrderForMemoryList(order));
129
104
  this.syncOrdersMap();
130
105
  this.emitOrdersChanged([], "initialState");
131
106
  } else {
@@ -191,35 +166,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
191
166
  * 仅记录计数与订单标识,不输出商品、预约、支付或客户明细。
192
167
  */
193
168
  normalizeOrderCollectionsForIngress(order, source) {
194
- const sourceOrder = (0, import_lodash_es.cloneDeep)(order);
195
- const sourceOrderRecord = sourceOrder;
196
- if (Array.isArray(sourceOrderRecord.payments)) {
197
- sourceOrderRecord.payments = sourceOrderRecord.payments.map((payment) => {
198
- if (!(0, import_payment_utils.isPendingOrderPayment)(payment) || (0, import_payment_utils.getOrderPaymentIdentityKeys)(payment).some((key) => key.startsWith("unique_payment_number:"))) {
199
- return payment;
200
- }
201
- return {
202
- ...payment,
203
- [PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER]: true
204
- };
205
- });
206
- }
207
- const result = (0, import_orderCollectionIdentity.normalizeOrderCollections)(sourceOrder);
208
- const normalizedOrderRecord = result.order;
209
- if (Array.isArray(normalizedOrderRecord.payments)) {
210
- normalizedOrderRecord.payments = normalizedOrderRecord.payments.map(
211
- (payment) => {
212
- if (!(payment == null ? void 0 : payment[PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER]))
213
- return payment;
214
- const nextPayment = { ...payment };
215
- const metadata = { ...nextPayment.metadata || {} };
216
- delete metadata.unique_payment_number;
217
- delete nextPayment[PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER];
218
- nextPayment.metadata = metadata;
219
- return nextPayment;
220
- }
221
- );
222
- }
169
+ const result = (0, import_orderCollectionIdentity.normalizeOrderCollections)(order);
223
170
  const kinds = ["product", "booking", "payment"];
224
171
  const hasChanges = kinds.some((kind) => {
225
172
  const stats = result.stats[kind];
@@ -255,16 +202,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
255
202
  /**
256
203
  * incoming 决定权威成员集合;同一持久化行仍从 existing 补齐 incoming 省略的本地展示字段。
257
204
  */
258
- mergeAuthoritativeOrderCollection(field, existing, incoming, uidRemaps = [], options = {}) {
205
+ mergeAuthoritativeOrderCollection(field, existing, incoming, uidRemaps = []) {
259
206
  const kind = ORDER_COLLECTION_KIND_BY_FIELD[field];
260
207
  const existingItems = Array.isArray(existing) ? existing : [];
261
- if (field === "payments" && options.preserveIdentifiedPendingPayments) {
262
- return (0, import_payment_utils.mergeOrderPaymentListsByIdentity)(
263
- existingItems,
264
- incoming,
265
- { preserveUnmatchedExistingWhen: import_payment_utils.isIdentifiedPendingOrderPayment }
266
- );
267
- }
268
208
  return incoming.map((incomingItem) => {
269
209
  const existingItem = existingItems.find(
270
210
  (item) => (0, import_orderCollectionIdentity.isSameOrderCollectionItem)(kind, item, incomingItem)
@@ -332,7 +272,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
332
272
  * @example
333
273
  * const { toWrite, skipped } = this.filterRedundantPatchOrders('pubsub.bodyUpsert', orders, mergeActions)
334
274
  */
335
- filterRedundantPatchOrders(source, orders, mergeActions, forceWriteStorageKeys = /* @__PURE__ */ new Set()) {
275
+ filterRedundantPatchOrders(source, orders, mergeActions) {
336
276
  const eligibleSkipSources = /* @__PURE__ */ new Set(["pubsub.bodyUpsert", "pubsub.httpRefresh"]);
337
277
  if (!eligibleSkipSources.has(source)) {
338
278
  return { toWrite: orders, skipped: [] };
@@ -352,10 +292,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
352
292
  toWrite.push(order);
353
293
  continue;
354
294
  }
355
- if (forceWriteStorageKeys.has(storageKey)) {
356
- toWrite.push(order);
357
- continue;
358
- }
359
295
  const recent = this.recentSqliteWriteByStorageKey.get(storageKey);
360
296
  if (recent && ORDER_BUSINESS_WRITE_SOURCES.has(recent.source) && now - recent.ts < ORDER_SQLITE_DEDUPE_MS) {
361
297
  skipped.push({
@@ -524,11 +460,17 @@ var OrderModule = class extends import_BaseModule.BaseModule {
524
460
  return DEFAULT_ORDER_SYNC_THROTTLE_MS;
525
461
  }
526
462
  async preload() {
527
- const orders = await this.loadOrdersByServer();
528
- this.store.list = (0, import_lodash_es.cloneDeep)(orders);
529
- this.syncOrdersMap();
530
- await this.emitOrdersChanged([], "preload");
531
- await this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
463
+ const getData = async () => {
464
+ const orders = await this.loadOrdersByServer();
465
+ if (orders.length === 0) {
466
+ return;
467
+ }
468
+ this.store.list = (0, import_lodash_es.cloneDeep)(orders);
469
+ this.syncOrdersMap();
470
+ this.emitOrdersChanged([], "preload");
471
+ this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
472
+ };
473
+ getData();
532
474
  }
533
475
  getOrders() {
534
476
  return this.store.list;
@@ -540,27 +482,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
540
482
  getOrderByOrderId(orderId) {
541
483
  return this.store.map.get(this.getIdKey(orderId));
542
484
  }
543
- buildLocalPaymentOrderLogContext(order) {
544
- if (!order)
545
- return {};
546
- return {
547
- order_id: order.order_id ?? null,
548
- external_sale_number: order.external_sale_number ?? null,
549
- order_number: order.order_number ?? null,
550
- shop_order_number: order.shop_order_number ?? null,
551
- shop_full_order_number: order.shop_full_order_number ?? null,
552
- order_status: order.status ?? null,
553
- payment_status: order.payment_status ?? null,
554
- is_draft_order: Number(order.is_draft_order || 0),
555
- need_sync: Number(order.need_sync || 0),
556
- platform: order.platform ?? null,
557
- business_code: order.business_code ?? null,
558
- order_sales_channel: order.order_sales_channel ?? null,
559
- sales_channel: order.sales_channel ?? null,
560
- order_type: order.type ?? null,
561
- payments_count: Array.isArray(order.payments) ? order.payments.length : 0
562
- };
563
- }
564
485
  getLocalOrderFromMemoryByLookup(lookup) {
565
486
  const key = this.getIdKey(lookup);
566
487
  const memoryOrderById = this.store.map.get(key);
@@ -569,200 +490,28 @@ var OrderModule = class extends import_BaseModule.BaseModule {
569
490
  const memoryOrder = this.store.list.find((order) => this.isOrderLookupMatch(order, key));
570
491
  return memoryOrder || null;
571
492
  }
572
- async getLocalOrderByLookup(lookup, options = {}) {
493
+ async getLocalOrderByLookup(lookup) {
573
494
  const key = this.getIdKey(lookup);
574
- const logContext = {
575
- operation_id: options.operationId,
576
- lookup: key,
577
- memory_order_count: this.store.list.length
578
- };
579
- if (options.operationId) {
580
- this.logInfo("getLocalOrderByLookup-localPayment-开始", logContext);
581
- }
582
495
  const memoryOrderById = this.store.map.get(key);
583
- if (memoryOrderById) {
584
- if (options.operationId) {
585
- this.logInfo("getLocalOrderByLookup-localPayment-命中内存映射", {
586
- ...logContext,
587
- ...this.buildLocalPaymentOrderLogContext(memoryOrderById)
588
- });
589
- }
496
+ if (memoryOrderById)
590
497
  return memoryOrderById;
591
- }
592
498
  const memoryOrder = this.store.list.find((order) => this.isOrderLookupMatch(order, key));
593
- if (memoryOrder) {
594
- if (options.operationId) {
595
- this.logInfo("getLocalOrderByLookup-localPayment-命中内存列表", {
596
- ...logContext,
597
- ...this.buildLocalPaymentOrderLogContext(memoryOrder)
598
- });
599
- }
499
+ if (memoryOrder)
600
500
  return memoryOrder;
601
- }
602
- if (options.operationId) {
603
- this.logInfo("getLocalOrderByLookup-localPayment-开始读取SQLite", logContext);
604
- }
605
501
  const orders = await this.loadOrdersFromSQLite();
606
502
  const localOrder = orders.find((order) => this.isOrderLookupMatch(order, key));
607
- if (!localOrder) {
608
- if (options.operationId) {
609
- this.logWarning("getLocalOrderByLookup-localPayment-SQLite未命中", {
610
- ...logContext,
611
- sqlite_order_count: orders.length
612
- });
613
- }
614
- return null;
615
- }
616
- this.store.list = this.normalizeOrdersForMemoryList(
617
- orders,
618
- "getLocalOrderByLookup.sqliteMemory"
619
- );
620
- this.syncOrdersMap();
621
- const normalizedOrder = this.normalizeOrderForMemoryList(localOrder);
622
- if (options.operationId) {
623
- this.logInfo("getLocalOrderByLookup-localPayment-SQLite命中", {
624
- ...logContext,
625
- sqlite_order_count: orders.length,
626
- ...this.buildLocalPaymentOrderLogContext(normalizedOrder)
627
- });
628
- }
629
- return normalizedOrder;
630
- }
631
- async getLocalPayment(params) {
632
- const logContext = {
633
- operation_id: params.operationId,
634
- sale_id: params.saleId,
635
- payment_number: params.paymentNumber
636
- };
637
- this.logInfo("getLocalPayment-开始", logContext);
638
- try {
639
- const order = await this.getLocalOrderByLookup(params.saleId, {
640
- operationId: params.operationId
641
- });
642
- if (!order) {
643
- this.logWarning("getLocalPayment-订单未命中", logContext);
644
- return null;
645
- }
646
- const payments = order.payments || [];
647
- const match = (0, import_payment_utils.resolveOrderPaymentIdentity)(
648
- payments,
649
- params.paymentNumber,
650
- "compat"
651
- );
652
- if (!match) {
653
- this.logWarning("getLocalPayment-支付项未命中", {
654
- ...logContext,
655
- ...this.buildLocalPaymentOrderLogContext(order),
656
- payments
657
- });
658
- return null;
659
- }
660
- this.logInfo("getLocalPayment-支付项命中", {
661
- ...logContext,
662
- ...this.buildLocalPaymentOrderLogContext(order),
663
- matched_by: match.matchedBy,
664
- payment_index: match.index,
665
- payment: match.payment
666
- });
667
- return {
668
- order,
669
- payment: match.payment,
670
- paymentIndex: match.index,
671
- matchedBy: match.matchedBy
672
- };
673
- } catch (error) {
674
- this.logError("getLocalPayment-查询失败", {
675
- ...logContext,
676
- error: error instanceof Error ? error.message : String(error)
677
- });
678
- throw error;
679
- }
680
- }
681
- async updateLocalPayment(params) {
682
- const logContext = {
683
- operation_id: params.operationId,
684
- sale_id: params.saleId,
685
- payment_number: params.paymentNumber,
686
- incoming_payment_update: params.updates
687
- };
688
- this.logInfo("updateLocalPayment-开始", logContext);
689
- const found = await this.getLocalPayment(params);
690
- if (!found) {
691
- this.logWarning("updateLocalPayment-支付项未命中", logContext);
692
- return null;
693
- }
694
- const previousPayment = (0, import_lodash_es.cloneDeep)(found.payment);
695
- const nextPayment = (0, import_payment_utils.mergeOrderPaymentRecord)(found.payment, {
696
- ...params.updates,
697
- updated_at: params.updates.updated_at || (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")
698
- });
699
- const nextOrder = {
700
- ...found.order,
701
- payments: (found.order.payments || []).map((payment, index) => index === found.paymentIndex ? nextPayment : payment),
702
- updated_at: (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")
703
- };
704
- const paymentContext = {
705
- ...logContext,
706
- matched_by: found.matchedBy,
707
- payment_index: found.paymentIndex,
708
- ...this.buildLocalPaymentOrderLogContext(nextOrder),
709
- previous_payment: previousPayment,
710
- payment: nextPayment
711
- };
712
- this.logInfo("updateLocalPayment-支付项合并完成", paymentContext);
713
- const targetIndex = this.findOrderIndexByIdentity(this.store.list, found.order);
714
- const shouldKeepInMemory = this.shouldKeepOrderInMemory(nextOrder);
715
- if (targetIndex < 0 && shouldKeepInMemory) {
716
- this.logError("updateLocalPayment-订单Store索引未命中", paymentContext);
503
+ if (!localOrder)
717
504
  return null;
718
- }
719
- const previousList = this.store.list;
720
- this.store.list = shouldKeepInMemory ? this.store.list.map((order, index) => index === targetIndex ? nextOrder : order) : this.store.list.filter((_, index) => index !== targetIndex);
505
+ this.store.list = orders.map((order) => this.normalizeOrderForMemoryList(order));
721
506
  this.syncOrdersMap();
722
- const storageOrder = this.withoutSyntheticDraftOrderId(nextOrder);
723
- try {
724
- this.logInfo("updateLocalPayment-SQLite写入开始", {
725
- ...paymentContext,
726
- storage_order_id: storageOrder.order_id ?? null
727
- });
728
- await this.updateOrderInSQLite(storageOrder, "updateLocalPayment", { throwOnError: true });
729
- this.logInfo("updateLocalPayment-SQLite写入完成", {
730
- ...paymentContext,
731
- storage_order_id: storageOrder.order_id ?? null
732
- });
733
- } catch (error) {
734
- this.store.list = previousList;
735
- this.syncOrdersMap();
736
- this.logError("updateLocalPayment-SQLite写入失败并回滚内存", {
737
- ...paymentContext,
738
- storage_order_id: storageOrder.order_id ?? null,
739
- error: error instanceof Error ? error.message : String(error)
740
- });
741
- throw error;
742
- }
743
- if (shouldKeepInMemory || targetIndex >= 0) {
744
- await this.emitOrdersChanged(
745
- shouldKeepInMemory ? [nextOrder] : [],
746
- shouldKeepInMemory ? "updateLocalPayment" : "updateLocalPayment.sqliteOnlyDraft"
747
- );
748
- }
749
- this.logInfo("updateLocalPayment-变更事件完成", paymentContext);
750
- return { order: nextOrder, payment: nextPayment, previousPayment };
507
+ return this.normalizeOrderForMemoryList(localOrder);
751
508
  }
752
509
  async loadOrdersByServer() {
753
510
  var _a;
754
511
  let orderList = [];
755
- const protectedOrdersBeforeRemoteFetch = (await this.loadOrdersFromSQLite()).filter(
756
- (order) => this.shouldProtectLocalOrderFromRemoteSnapshot(order)
757
- );
758
512
  this.logInfo("loadOrdersByServer-开始", {
759
513
  hasOrderDataSource: !!this.orderDataSource,
760
- query: ((_a = this.store) == null ? void 0 : _a.createdAtQuery) || null,
761
- protectedLocalOrderCount: protectedOrdersBeforeRemoteFetch.length,
762
- protectedPendingPaymentCount: protectedOrdersBeforeRemoteFetch.reduce(
763
- (count, order) => count + this.getIdentifiedPendingPayments(order).length,
764
- 0
765
- )
514
+ query: ((_a = this.store) == null ? void 0 : _a.createdAtQuery) || null
766
515
  });
767
516
  if (this.orderDataSource) {
768
517
  try {
@@ -782,19 +531,10 @@ var OrderModule = class extends import_BaseModule.BaseModule {
782
531
  return this.store.list;
783
532
  }
784
533
  }
785
- const mergedOrders = await this.replaceOrdersSnapshotInSQLite(
786
- orderList,
787
- "loadOrdersByServer",
788
- protectedOrdersBeforeRemoteFetch
789
- );
790
- const memoryOrders = this.normalizeOrdersForMemoryList(
791
- mergedOrders,
792
- "loadOrdersByServer.memory"
793
- );
534
+ const mergedOrders = await this.replaceOrdersSnapshotInSQLite(orderList, "loadOrdersByServer");
535
+ const memoryOrders = mergedOrders.map((order) => this.normalizeOrderForMemoryList(order));
794
536
  this.logInfo("loadOrdersByServer-结束", {
795
- count: memoryOrders.length,
796
- persistedCount: mergedOrders.length,
797
- sqliteOnlyDraftCount: mergedOrders.length - memoryOrders.length
537
+ count: memoryOrders.length
798
538
  });
799
539
  await this.core.effects.emit(import_types.OrderHooks.onOrdersLoaded, memoryOrders);
800
540
  return memoryOrders;
@@ -814,14 +554,18 @@ var OrderModule = class extends import_BaseModule.BaseModule {
814
554
  try {
815
555
  this.updateCreateStore();
816
556
  const orders = await this.loadOrdersByServer();
817
- this.store.list = (0, import_lodash_es.cloneDeep)(orders);
818
- this.syncOrdersMap();
819
- await this.emitOrdersChanged([], "silentRefresh");
820
- await this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
821
- this.logInfo("silentRefresh 完成", {
822
- orderCount: orders.length,
823
- duration: `${Date.now() - startTime}ms`
824
- });
557
+ if (orders.length > 0) {
558
+ this.store.list = (0, import_lodash_es.cloneDeep)(orders);
559
+ this.syncOrdersMap();
560
+ this.emitOrdersChanged([], "silentRefresh");
561
+ await this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
562
+ this.logInfo("silentRefresh 完成", {
563
+ orderCount: orders.length,
564
+ duration: `${Date.now() - startTime}ms`
565
+ });
566
+ } else {
567
+ this.logInfo("silentRefresh: 服务器未返回数据");
568
+ }
825
569
  return this.store.list;
826
570
  } catch (error) {
827
571
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -835,9 +579,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
835
579
  normalizeOrderForMemoryList(order, source = "normalizeOrderForMemoryList") {
836
580
  const normalizedOrder = this.normalizeOrderCollectionsForIngress(order, source);
837
581
  const externalSaleNumber = normalizedOrder == null ? void 0 : normalizedOrder.external_sale_number;
838
- if (this.isDraftOrder(normalizedOrder) && !this.hasRealOrderId(normalizedOrder)) {
839
- return normalizedOrder;
840
- }
841
582
  if ((normalizedOrder == null ? void 0 : normalizedOrder.order_id) !== void 0 && (normalizedOrder == null ? void 0 : normalizedOrder.order_id) !== null && (normalizedOrder == null ? void 0 : normalizedOrder.order_id) !== "") {
842
583
  return normalizedOrder;
843
584
  }
@@ -849,27 +590,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
849
590
  order_id: externalSaleNumber
850
591
  };
851
592
  }
852
- normalizeOrdersForMemoryList(orders, source) {
853
- return orders.map((order) => this.normalizeOrderForMemoryList(order, source)).filter((order) => this.shouldKeepOrderInMemory(order));
854
- }
855
- hasRealOrderId(order) {
856
- if (!order || this.isBlankIdentityValue(order.order_id))
857
- return false;
858
- const externalSaleNumber = order.external_sale_number;
859
- return !(this.isDraftOrder(order) && !this.isBlankIdentityValue(externalSaleNumber) && String(order.order_id) === String(externalSaleNumber));
860
- }
861
- shouldKeepOrderInMemory(order) {
862
- return !this.isDraftOrder(order) || this.hasRealOrderId(order);
863
- }
864
- withoutSyntheticDraftOrderId(order) {
865
- const externalSaleNumber = order.external_sale_number;
866
- if (Number(order.is_draft_order || 0) !== 1 || order.order_id === void 0 || externalSaleNumber === void 0 || String(order.order_id) !== String(externalSaleNumber)) {
867
- return order;
868
- }
869
- const next = { ...order };
870
- delete next.order_id;
871
- return next;
872
- }
873
593
  /**
874
594
  * 仅覆盖本地已存在的订单;不存在则直接跳过,不落库、不 emit。
875
595
  * 适用于"按 order_id 主动刷新本地订单详情"的代理场景。
@@ -918,13 +638,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
918
638
  * 将远端拉取的订单合并进本地 store(已存在则更新,不存在则追加),落库并 emit onOrdersChanged。
919
639
  * 供 /update/localOrder 等在「本地尚无该单」时写入新建单。
920
640
  */
921
- async upsertOrdersFromRemote(freshOrders, source = "upsertOrdersFromRemote") {
641
+ async upsertOrdersFromRemote(freshOrders) {
922
642
  if (!(freshOrders == null ? void 0 : freshOrders.length)) {
923
643
  this.logInfo("upsertOrdersFromRemote-订单列表为空", {});
924
644
  return;
925
645
  }
926
- this.logInfo("upsertOrdersFromRemote-开始", { count: freshOrders.length, source });
927
- await this.mergeOrdersToStore(freshOrders, source);
646
+ this.logInfo("upsertOrdersFromRemote-开始", { count: freshOrders.length });
647
+ await this.mergeOrdersToStore(freshOrders, "upsertOrdersFromRemote");
928
648
  }
929
649
  async markOrderSyncedByExternalSaleNumber(params) {
930
650
  const externalSaleNumber = params.externalSaleNumber;
@@ -950,8 +670,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
950
670
  ...existing,
951
671
  ...params.patch || {},
952
672
  external_sale_number: existing.external_sale_number ?? externalSaleNumber,
953
- need_sync: 0,
954
- is_draft_order: 0
673
+ need_sync: 0
955
674
  });
956
675
  const storageKey = this.getOrderStorageKey(nextOrder) || key;
957
676
  this.store.list = this.store.list.map((order, index) => {
@@ -976,7 +695,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
976
695
  * 将本地待同步订单按 SQLite storage key 合并进 store 并落库。
977
696
  * checkout 离线兜底可能没有 order_id,但通常会有 external_sale_number。
978
697
  */
979
- async upsertPendingSyncOrders(pendingOrders, options = {}) {
698
+ async upsertPendingSyncOrders(pendingOrders) {
980
699
  if (!(pendingOrders == null ? void 0 : pendingOrders.length)) {
981
700
  this.logInfo("upsertPendingSyncOrders-订单列表为空", {});
982
701
  return;
@@ -988,19 +707,14 @@ var OrderModule = class extends import_BaseModule.BaseModule {
988
707
  order,
989
708
  "upsertPendingSyncOrders.incoming"
990
709
  );
991
- const pendingOrder = {
992
- ...normalizedOrder,
993
- need_sync: 1,
994
- is_draft_order: 0
995
- };
996
- const storageKey = this.getOrderStorageKey(pendingOrder);
710
+ const storageKey = this.getOrderStorageKey(normalizedOrder);
997
711
  if (!storageKey)
998
712
  continue;
999
- pendingMap.set(storageKey, pendingOrder);
713
+ pendingMap.set(storageKey, normalizedOrder);
1000
714
  memoryPendingMap.set(
1001
715
  storageKey,
1002
716
  this.normalizeOrderForMemoryList(
1003
- pendingOrder,
717
+ normalizedOrder,
1004
718
  "upsertPendingSyncOrders.memory"
1005
719
  )
1006
720
  );
@@ -1031,12 +745,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1031
745
  if (matchIndex >= 0) {
1032
746
  const existingOrder = updatedList[matchIndex];
1033
747
  const mergedOrder = this.mergeOrderRecords(existingOrder, pendingOrder);
1034
- const nextOrder = {
1035
- ...mergedOrder,
1036
- need_sync: 1,
1037
- is_draft_order: 0
1038
- };
1039
- updatedList[matchIndex] = nextOrder;
748
+ updatedList[matchIndex] = mergedOrder;
1040
749
  const pendingSnapshot = pendingMap.get(storageKey);
1041
750
  if (pendingSnapshot) {
1042
751
  pendingMap.set(
@@ -1044,7 +753,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1044
753
  this.reconcileOverwriteOrderCollections(existingOrder, pendingSnapshot)
1045
754
  );
1046
755
  }
1047
- this.registerOrderIdentityKeys(identityKeyToIndex, nextOrder, matchIndex);
756
+ this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex);
1048
757
  mergeActions[storageKey] = "update";
1049
758
  continue;
1050
759
  }
@@ -1054,131 +763,15 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1054
763
  mergeActions[storageKey] = "insert";
1055
764
  }
1056
765
  const patchedOrders = [...pendingMap.values()];
1057
- const previousList = this.store.list;
1058
766
  this.store.list = this.runOrderStoreSelfCheck(updatedList, "upsertPendingSyncOrders.store");
1059
767
  this.syncOrdersMap();
1060
- try {
1061
- await this.patchOrdersInSQLite(
1062
- patchedOrders,
1063
- "upsertPendingSyncOrders",
1064
- mergeActions,
1065
- options
1066
- );
1067
- } catch (error) {
1068
- this.store.list = previousList;
1069
- this.syncOrdersMap();
1070
- throw error;
1071
- }
768
+ await this.patchOrdersInSQLite(patchedOrders, "upsertPendingSyncOrders", mergeActions);
1072
769
  this.logInfo("upsertPendingSyncOrders-结束", {
1073
770
  count: patchedOrders.length,
1074
771
  storeOrderCountAfter: this.store.list.length
1075
772
  });
1076
773
  await this.emitOrdersChanged(patchedOrders, "upsertPendingSyncOrders");
1077
774
  }
1078
- /**
1079
- * 将 POS 草稿订单按 SQLite storage key 落库。
1080
- * 只有具备真实 order_id 的草稿进入 store;其余草稿仅供本地恢复查询。
1081
- */
1082
- async upsertLocalDraftOrders(draftOrders) {
1083
- if (!(draftOrders == null ? void 0 : draftOrders.length)) {
1084
- this.logInfo("upsertLocalDraftOrders-订单列表为空", {});
1085
- return;
1086
- }
1087
- const draftMap = /* @__PURE__ */ new Map();
1088
- const memoryDraftMap = /* @__PURE__ */ new Map();
1089
- for (const order of draftOrders) {
1090
- const draftOrder = {
1091
- ...order,
1092
- need_sync: 0,
1093
- is_draft_order: 1
1094
- };
1095
- const storageKey = this.getOrderStorageKey(draftOrder);
1096
- if (!storageKey)
1097
- continue;
1098
- draftMap.set(storageKey, draftOrder);
1099
- const memoryDraftOrder = this.normalizeOrderForMemoryList(draftOrder);
1100
- if (this.shouldKeepOrderInMemory(memoryDraftOrder)) {
1101
- memoryDraftMap.set(storageKey, memoryDraftOrder);
1102
- }
1103
- }
1104
- if (draftMap.size === 0) {
1105
- this.logError("upsertLocalDraftOrders-订单缺少可落库标识", {
1106
- count: draftOrders.length
1107
- });
1108
- return;
1109
- }
1110
- this.logInfo("upsertLocalDraftOrders-开始", {
1111
- count: draftMap.size,
1112
- memoryDraftCount: memoryDraftMap.size,
1113
- sqliteOnlyDraftCount: draftMap.size - memoryDraftMap.size
1114
- });
1115
- const mergeActions = {};
1116
- const updatedList = this.store.list.filter((order) => this.shouldKeepOrderInMemory(order));
1117
- const identityKeyToIndex = /* @__PURE__ */ new Map();
1118
- for (let index = 0; index < updatedList.length; index += 1) {
1119
- for (const key of this.getOrderIdentityMatchKeys(updatedList[index])) {
1120
- if (!identityKeyToIndex.has(key))
1121
- identityKeyToIndex.set(key, index);
1122
- }
1123
- }
1124
- for (const [storageKey, draftOrder] of memoryDraftMap.entries()) {
1125
- const matchIndex = this.lookupOrderIndexByIdentityKeys(
1126
- identityKeyToIndex,
1127
- this.getOrderIdentityMatchKeys(draftOrder)
1128
- );
1129
- if (matchIndex >= 0) {
1130
- const existingOrder = updatedList[matchIndex];
1131
- const reconciledDraftOrder = this.preserveExistingBusinessCodeForDraft(
1132
- existingOrder,
1133
- draftOrder
1134
- );
1135
- const mergedOrder = this.mergeOrderRecords(existingOrder, reconciledDraftOrder);
1136
- const nextOrder = {
1137
- ...mergedOrder,
1138
- need_sync: 0,
1139
- is_draft_order: 1
1140
- };
1141
- updatedList[matchIndex] = nextOrder;
1142
- draftMap.set(storageKey, reconciledDraftOrder);
1143
- this.registerOrderIdentityKeys(identityKeyToIndex, nextOrder, matchIndex);
1144
- mergeActions[storageKey] = "update";
1145
- continue;
1146
- }
1147
- const insertIndex = updatedList.length;
1148
- updatedList.push(draftOrder);
1149
- this.registerOrderIdentityKeys(identityKeyToIndex, draftOrder, insertIndex);
1150
- mergeActions[storageKey] = "insert";
1151
- }
1152
- const patchedOrders = [...draftMap.values()];
1153
- const previousList = this.store.list;
1154
- this.store.list = this.runOrderStoreSelfCheck(updatedList, "upsertLocalDraftOrders.store");
1155
- this.syncOrdersMap();
1156
- try {
1157
- await this.patchOrdersInSQLite(
1158
- patchedOrders,
1159
- "upsertLocalDraftOrders",
1160
- mergeActions,
1161
- { throwOnError: true }
1162
- );
1163
- } catch (error) {
1164
- this.store.list = previousList;
1165
- this.syncOrdersMap();
1166
- throw error;
1167
- }
1168
- this.logInfo("upsertLocalDraftOrders-结束", {
1169
- count: patchedOrders.length,
1170
- storeOrderCountAfter: this.store.list.length
1171
- });
1172
- const removedLegacyMemoryDraft = previousList.some(
1173
- (order) => !this.shouldKeepOrderInMemory(order)
1174
- );
1175
- if (memoryDraftMap.size > 0 || removedLegacyMemoryDraft) {
1176
- await this.emitOrdersChanged(
1177
- patchedOrders.filter((order) => this.shouldKeepOrderInMemory(order)),
1178
- "upsertLocalDraftOrders"
1179
- );
1180
- }
1181
- }
1182
775
  /**
1183
776
  * 通过 SSE 按自定义 query 拉取订单(支持 select/with 精简字段)
1184
777
  */
@@ -1211,7 +804,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1211
804
  super.destroy();
1212
805
  }
1213
806
  syncOrdersMap() {
1214
- this.store.list = this.store.list.filter((order) => this.shouldKeepOrderInMemory(order));
1215
807
  this.store.map.clear();
1216
808
  for (const order of this.store.list) {
1217
809
  const primaryIdentity = this.getOrderMapKey(order);
@@ -1235,22 +827,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1235
827
  isBlankIdentityValue(value) {
1236
828
  return value === void 0 || value === null || value === "";
1237
829
  }
1238
- /**
1239
- * `/sales/draft` 的旧调用方可能把未设置的 business_code 传成空串。
1240
- * 对同一真实订单,空值不能覆盖已有的分类,否则 booking 查询会把该订单从 Party 列表过滤掉。
1241
- */
1242
- preserveExistingBusinessCodeForDraft(existingOrder, draftOrder) {
1243
- const existingBusinessCode = existingOrder.business_code;
1244
- const draftBusinessCode = draftOrder.business_code;
1245
- const hasExistingBusinessCode = typeof existingBusinessCode === "string" && existingBusinessCode.trim() !== "";
1246
- const hasDraftBusinessCode = typeof draftBusinessCode === "string" && draftBusinessCode.trim() !== "";
1247
- if (!hasExistingBusinessCode || hasDraftBusinessCode)
1248
- return draftOrder;
1249
- return {
1250
- ...draftOrder,
1251
- business_code: existingBusinessCode
1252
- };
1253
- }
1254
830
  getOrderIdentityEntries(order) {
1255
831
  if (!order)
1256
832
  return [];
@@ -1506,20 +1082,10 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1506
1082
  });
1507
1083
  this.logDuplicateOrders(`${source}.beforeMerge`, this.store.list);
1508
1084
  const normalizedFreshOrders = [];
1509
- const incomingProductsHaveStableIdentity = /* @__PURE__ */ new Map();
1510
1085
  for (const order of freshOrders) {
1511
1086
  const id = order == null ? void 0 : order.order_id;
1512
1087
  if (id === void 0 || id === null)
1513
1088
  continue;
1514
- const rawProducts = order.products;
1515
- if (Array.isArray(rawProducts)) {
1516
- const allProductsHaveStableIdentity = this.doProductsHaveStableMembershipIdentity(rawProducts);
1517
- const orderIdKey = this.getIdKey(id);
1518
- incomingProductsHaveStableIdentity.set(
1519
- orderIdKey,
1520
- (incomingProductsHaveStableIdentity.get(orderIdKey) ?? true) && allProductsHaveStableIdentity
1521
- );
1522
- }
1523
1089
  normalizedFreshOrders.push(this.normalizeRemoteSyncedOrder(order));
1524
1090
  }
1525
1091
  const uniqueFreshOrders = this.compactOrderListByIdentity(
@@ -1528,14 +1094,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1528
1094
  ).list;
1529
1095
  const uniqueFreshCount = uniqueFreshOrders.length;
1530
1096
  const patchedOrders = [];
1531
- const remoteProductMembershipChanges = [];
1532
- const forceWriteStorageKeys = /* @__PURE__ */ new Set();
1533
1097
  const mergeActions = {};
1534
- const existingProductsHaveStableIdentity = this.store.list.map(
1535
- (order) => this.doProductsHaveStableMembershipIdentity(
1536
- order.products
1537
- )
1538
- );
1539
1098
  const updatedList = this.store.list.map(
1540
1099
  (order) => this.normalizeOrderForMemoryList(order, `${source}.existingMemory`)
1541
1100
  );
@@ -1567,63 +1126,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1567
1126
  });
1568
1127
  continue;
1569
1128
  }
1570
- if (this.isDraftOrder(existingOrder) && this.shouldProtectDraftOrderFromIncoming(source)) {
1571
- this.logInfo("mergeOrdersToStore-跳过 draft 订单远端覆盖", {
1572
- source,
1573
- order_id: existingOrder.order_id ?? fresh.order_id ?? null,
1574
- external_sale_number: existingOrder.external_sale_number ?? fresh.external_sale_number ?? null,
1575
- local_is_draft_order: existingOrder.is_draft_order ?? null,
1576
- remote_is_draft_order: fresh.is_draft_order ?? null,
1577
- reason: "protect_draft_order_from_remote_echo"
1578
- });
1579
- continue;
1580
- }
1581
- let mergedOrder = this.mergeOrderRecords(existingOrder, fresh);
1582
- const freshOrderId = fresh.order_id;
1583
- const incomingProductsAreStable = freshOrderId !== void 0 && freshOrderId !== null && incomingProductsHaveStableIdentity.get(this.getIdKey(freshOrderId)) !== false;
1584
- let membershipChange = null;
1585
- if (Array.isArray(fresh.products) && freshOrderId !== void 0 && freshOrderId !== null && existingProductsHaveStableIdentity[matchIndex] !== false && incomingProductsAreStable) {
1586
- membershipChange = this.getRemoteProductMembershipChange(
1587
- existingOrder,
1588
- mergedOrder,
1589
- source
1590
- );
1591
- }
1592
- let mergedProductsHaveStableIdentity = existingProductsHaveStableIdentity[matchIndex] !== false && incomingProductsAreStable;
1593
- let adjustedMatchIndex = matchIndex;
1594
- const duplicateIndexes = /* @__PURE__ */ new Set();
1595
- for (const key of freshIdentityKeys) {
1596
- const duplicateIndex = identityKeyToIndex.get(key);
1597
- if (duplicateIndex === void 0 || duplicateIndex === matchIndex)
1598
- continue;
1599
- duplicateIndexes.add(duplicateIndex);
1600
- }
1601
- if (duplicateIndexes.size > 0) {
1602
- for (const duplicateIndex of [...duplicateIndexes].sort((left, right) => right - left)) {
1603
- mergedOrder = this.mergeOrderRecords(mergedOrder, updatedList[duplicateIndex]);
1604
- mergedProductsHaveStableIdentity = mergedProductsHaveStableIdentity && existingProductsHaveStableIdentity[duplicateIndex] !== false;
1605
- updatedList.splice(duplicateIndex, 1);
1606
- existingProductsHaveStableIdentity.splice(duplicateIndex, 1);
1607
- if (duplicateIndex < adjustedMatchIndex)
1608
- adjustedMatchIndex -= 1;
1609
- }
1610
- identityKeyToIndex.clear();
1611
- for (let index = 0; index < updatedList.length; index += 1) {
1612
- for (const key of this.getOrderIdentityMatchKeys(updatedList[index])) {
1613
- if (!identityKeyToIndex.has(key))
1614
- identityKeyToIndex.set(key, index);
1615
- }
1616
- }
1617
- }
1618
- updatedList[adjustedMatchIndex] = mergedOrder;
1619
- existingProductsHaveStableIdentity[adjustedMatchIndex] = mergedProductsHaveStableIdentity;
1620
- if (membershipChange) {
1621
- remoteProductMembershipChanges.push(membershipChange);
1622
- const mergedStorageKey = this.getOrderStorageKey(mergedOrder);
1623
- if (mergedStorageKey)
1624
- forceWriteStorageKeys.add(mergedStorageKey);
1625
- }
1626
- this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, adjustedMatchIndex);
1129
+ const mergedOrder = this.mergeOrderRecords(existingOrder, fresh);
1130
+ updatedList[matchIndex] = mergedOrder;
1131
+ this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex);
1627
1132
  patchedOrders.push(mergedOrder);
1628
1133
  if (mergeKey)
1629
1134
  mergeActions[mergeKey] = "update";
@@ -1631,9 +1136,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1631
1136
  }
1632
1137
  const insertIndex = updatedList.length;
1633
1138
  updatedList.push(fresh);
1634
- existingProductsHaveStableIdentity.push(
1635
- fresh.order_id !== void 0 && fresh.order_id !== null && incomingProductsHaveStableIdentity.get(this.getIdKey(fresh.order_id)) !== false
1636
- );
1637
1139
  this.registerOrderIdentityKeys(identityKeyToIndex, fresh, insertIndex);
1638
1140
  patchedOrders.push(fresh);
1639
1141
  if (mergeKey)
@@ -1648,20 +1150,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1648
1150
  });
1649
1151
  this.store.list = this.runOrderStoreSelfCheck(updatedList, `${source}.store`);
1650
1152
  this.syncOrdersMap();
1651
- await this.patchOrdersInSQLite(
1652
- patchedOrders,
1653
- source,
1654
- mergeActions,
1655
- {},
1656
- forceWriteStorageKeys
1657
- );
1153
+ await this.patchOrdersInSQLite(patchedOrders, source, mergeActions);
1658
1154
  this.logInfo("mergeOrdersToStore-结束", {
1659
1155
  uniqueFreshCount,
1660
1156
  storeOrderCountAfter: this.store.list.length,
1661
1157
  insertCount,
1662
1158
  updateCount
1663
1159
  });
1664
- await this.emitRemoteProductMembershipChanges(remoteProductMembershipChanges);
1665
1160
  await this.emitOrdersChanged(patchedOrders, source);
1666
1161
  }
1667
1162
  /**
@@ -1685,72 +1180,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1685
1180
  isRemoteEchoMergeSource(source) {
1686
1181
  return source === "pubsub.bodyUpsert" || source === "pubsub.httpRefresh";
1687
1182
  }
1688
- getProductMembershipKey(product) {
1689
- const persistentId = (0, import_orderCollectionIdentity.getOrderCollectionPersistentId)("product", product);
1690
- if (persistentId)
1691
- return `order_detail_id:${persistentId}`;
1692
- const uid = (0, import_orderCollectionIdentity.getOrderCollectionUid)("product", product);
1693
- return uid ? `unique_identification_number:${uid}` : "";
1694
- }
1695
- doProductsHaveStableMembershipIdentity(products) {
1696
- if (!Array.isArray(products))
1697
- return true;
1698
- return products.every(
1699
- (product) => Boolean(
1700
- (0, import_orderCollectionIdentity.getOrderCollectionPersistentId)("product", product) || (0, import_orderCollectionIdentity.getOrderCollectionUid)("product", product)
1701
- )
1702
- );
1703
- }
1704
- /**
1705
- * 冲突提示关注逻辑商品行,而不是服务端 checkout 过程中可能被重建的 detail 记录。
1706
- * 通用集合合并仍以 order_detail_id 为事实主键;这里只允许相同稳定 UID 跨 detail id 对齐,
1707
- * 避免本机 checkout 回声被误判成“一删一增”。
1708
- */
1709
- isSameProductMembershipItem(left, right) {
1710
- if ((0, import_orderCollectionIdentity.isSameOrderCollectionItem)("product", left, right))
1711
- return true;
1712
- const leftUid = (0, import_orderCollectionIdentity.getOrderCollectionUid)("product", left);
1713
- const rightUid = (0, import_orderCollectionIdentity.getOrderCollectionUid)("product", right);
1714
- return Boolean(leftUid && rightUid && leftUid === rightUid);
1715
- }
1716
- /**
1717
- * 对比合并前后的商品成员集合。商品字段修改与数组重排不会产生 diff。
1718
- */
1719
- getRemoteProductMembershipChange(existingOrder, mergedOrder, source) {
1720
- if (!this.isRemoteEchoMergeSource(source))
1721
- return null;
1722
- const previousProducts = Array.isArray(existingOrder.products) ? existingOrder.products : [];
1723
- const currentProducts = Array.isArray(mergedOrder.products) ? mergedOrder.products : [];
1724
- const unmatchedCurrentIndexes = new Set(currentProducts.map((_, index) => index));
1725
- const removedProductKeys = [];
1726
- for (const previousProduct of previousProducts) {
1727
- const matchedIndex = currentProducts.findIndex(
1728
- (currentProduct, index) => unmatchedCurrentIndexes.has(index) && this.isSameProductMembershipItem(previousProduct, currentProduct)
1729
- );
1730
- if (matchedIndex >= 0) {
1731
- unmatchedCurrentIndexes.delete(matchedIndex);
1732
- continue;
1733
- }
1734
- const productKey = this.getProductMembershipKey(previousProduct);
1735
- if (productKey)
1736
- removedProductKeys.push(productKey);
1737
- }
1738
- const addedProductKeys = [...unmatchedCurrentIndexes].map((index) => this.getProductMembershipKey(currentProducts[index])).filter(Boolean);
1739
- if (addedProductKeys.length === 0 && removedProductKeys.length === 0) {
1740
- return null;
1741
- }
1742
- const orderId = mergedOrder.order_id ?? existingOrder.order_id;
1743
- if (orderId === void 0 || orderId === null)
1744
- return null;
1745
- return {
1746
- order_id: orderId,
1747
- source,
1748
- added_product_keys: addedProductKeys,
1749
- removed_product_keys: removedProductKeys,
1750
- previous_product_count: previousProducts.length,
1751
- current_product_count: currentProducts.length
1752
- };
1753
- }
1754
1183
  /**
1755
1184
  * 将订单的全部身份键登记到索引并指向其在列表中的下标。
1756
1185
  * 合并后订单新增的身份字段(如挂单同步后拿到 order_id)也会被登记。
@@ -1891,72 +1320,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1891
1320
  return right;
1892
1321
  return left;
1893
1322
  }
1894
- getProductIdentityKeys(product) {
1895
- var _a;
1896
- const record = product;
1897
- if (!record)
1898
- return [];
1899
- const keys = [];
1900
- const metadataUid = (_a = record.metadata) == null ? void 0 : _a.unique_identification_number;
1901
- if (!this.isBlankIdentityValue(metadataUid))
1902
- keys.push(`uid:${String(metadataUid)}`);
1903
- const topLevelUid = record.unique_identification_number;
1904
- if (!this.isBlankIdentityValue(topLevelUid))
1905
- keys.push(`uid:${String(topLevelUid)}`);
1906
- const orderDetailId = record.order_detail_id;
1907
- if (!this.isBlankIdentityValue(orderDetailId))
1908
- keys.push(`detail:${String(orderDetailId)}`);
1909
- const bookingUid = record.booking_uid;
1910
- if (!this.isBlankIdentityValue(bookingUid))
1911
- keys.push(`booking:${String(bookingUid)}`);
1912
- return keys;
1913
- }
1914
- mergeOrderProductLists(preferred, secondary) {
1915
- const preferredList = Array.isArray(preferred) ? preferred : [];
1916
- const secondaryList = Array.isArray(secondary) ? secondary : [];
1917
- if (secondaryList.length === 0)
1918
- return preferredList;
1919
- if (preferredList.length === 0)
1920
- return secondaryList;
1921
- const seenKeys = /* @__PURE__ */ new Set();
1922
- for (const item of preferredList) {
1923
- const keys = this.getProductIdentityKeys(item);
1924
- for (const key of keys)
1925
- seenKeys.add(key);
1926
- }
1927
- const result = [...preferredList];
1928
- for (const item of secondaryList) {
1929
- const keys = this.getProductIdentityKeys(item);
1930
- if (keys.length === 0 || keys.some((key) => seenKeys.has(key)))
1931
- continue;
1932
- for (const key of keys)
1933
- seenKeys.add(key);
1934
- result.push((0, import_lodash_es.cloneDeep)(item));
1935
- }
1936
- return result;
1937
- }
1938
- mergeOrderPaymentLists(existing, incoming) {
1939
- const existingList = Array.isArray(existing) ? existing : [];
1940
- const incomingList = Array.isArray(incoming) ? incoming : [];
1941
- if (incomingList.length === 0)
1942
- return (0, import_lodash_es.cloneDeep)(existingList);
1943
- return (0, import_payment_utils.mergeOrderPaymentListsByIdentity)(existingList, incomingList);
1944
- }
1945
- getIdentifiedPendingPayments(order) {
1946
- const payments = Array.isArray(order == null ? void 0 : order.payments) ? order.payments : [];
1947
- return payments.filter((payment) => (0, import_payment_utils.isIdentifiedPendingOrderPayment)(payment));
1948
- }
1949
- shouldProtectLocalOrderFromRemoteSnapshot(order) {
1950
- return this.isPendingSyncOrder(order) || this.isDraftOrder(order) || this.getIdentifiedPendingPayments(order).length > 0;
1951
- }
1952
- getUnmatchedIdentifiedPendingPayments(existing, incoming) {
1953
- const existingPayments = Array.isArray(existing) ? existing : [];
1954
- const incomingPayments = Array.isArray(incoming) ? incoming : [];
1955
- const incomingIdentityKeys = new Set(
1956
- incomingPayments.flatMap((payment) => (0, import_payment_utils.getOrderPaymentIdentityKeys)(payment))
1957
- );
1958
- return existingPayments.filter((payment) => (0, import_payment_utils.isIdentifiedPendingOrderPayment)(payment) && !(0, import_payment_utils.getOrderPaymentIdentityKeys)(payment).some((key) => incomingIdentityKeys.has(key)));
1959
- }
1960
1323
  mergeOrderRecords(existing, incoming) {
1961
1324
  const preferred = this.pickPreferredOrder(existing, incoming);
1962
1325
  const secondary = preferred === existing ? incoming : existing;
@@ -1986,8 +1349,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
1986
1349
  "contacts_info",
1987
1350
  "phone",
1988
1351
  "email",
1989
- "relation_forms",
1990
- "is_draft_order"
1352
+ "relation_forms"
1991
1353
  ];
1992
1354
  const mergedRecord = merged;
1993
1355
  const preferredRecord = preferred;
@@ -2015,26 +1377,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2015
1377
  }
2016
1378
  for (const field of ORDER_AUTHORITATIVE_COLLECTION_FIELDS) {
2017
1379
  if (Array.isArray(incomingRecord[field])) {
2018
- if (field === "payments") {
2019
- const preservedPending = this.getUnmatchedIdentifiedPendingPayments(
2020
- existingRecord[field],
2021
- incomingRecord[field]
2022
- );
2023
- if (preservedPending.length > 0) {
2024
- this.logInfo("mergeOrderRecords-保留本地 pending 支付项", {
2025
- order_id: existing.order_id ?? incoming.order_id ?? null,
2026
- external_sale_number: existingRecord.external_sale_number ?? incomingRecord.external_sale_number ?? null,
2027
- preserved_pending_count: preservedPending.length,
2028
- preserved_payment_identities: preservedPending.map((payment) => (0, import_payment_utils.getOrderPaymentIdentityKeys)(payment))
2029
- });
2030
- }
2031
- }
2032
1380
  mergedRecord[field] = this.mergeAuthoritativeOrderCollection(
2033
1381
  field,
2034
1382
  existingRecord[field],
2035
1383
  incomingRecord[field],
2036
- childUidRemaps,
2037
- { preserveIdentifiedPendingPayments: field === "payments" }
1384
+ childUidRemaps
2038
1385
  );
2039
1386
  continue;
2040
1387
  }
@@ -2069,8 +1416,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2069
1416
  external_sale_number: order.external_sale_number ?? null,
2070
1417
  shop_order_number: order.shop_order_number ?? null,
2071
1418
  shop_full_order_number: order.shop_full_order_number ?? null,
2072
- need_sync: order.need_sync ?? null,
2073
- is_draft_order: order.is_draft_order ?? null
1419
+ need_sync: order.need_sync ?? null
2074
1420
  }))
2075
1421
  }));
2076
1422
  }
@@ -2187,48 +1533,18 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2187
1533
  isPendingSyncOrder(order) {
2188
1534
  return Number(order == null ? void 0 : order.need_sync) === 1;
2189
1535
  }
2190
- isDraftOrder(order) {
2191
- return Number(order == null ? void 0 : order.is_draft_order) === 1;
2192
- }
2193
- shouldProtectDraftOrderFromIncoming(source) {
2194
- return source !== "checkoutSync";
2195
- }
2196
1536
  normalizeRemoteSyncedOrder(order) {
2197
1537
  const normalizedOrder = this.normalizeOrderCollectionsForIngress(
2198
1538
  order,
2199
1539
  "normalizeRemoteSyncedOrder"
2200
1540
  );
2201
1541
  if (this.isPendingSyncOrder(normalizedOrder))
2202
- return {
2203
- ...normalizedOrder,
2204
- is_draft_order: 0
2205
- };
1542
+ return normalizedOrder;
2206
1543
  return {
2207
1544
  ...normalizedOrder,
2208
- need_sync: 0,
2209
- is_draft_order: 0
1545
+ need_sync: 0
2210
1546
  };
2211
1547
  }
2212
- mergeRemoteIdentityIntoDraftOrder(draftOrder, remoteOrder) {
2213
- const merged = {
2214
- ...this.withoutSyntheticDraftOrderId(draftOrder)
2215
- };
2216
- const remote = remoteOrder;
2217
- for (const field of [
2218
- "order_id",
2219
- "order_number",
2220
- "shop_order_number",
2221
- "shop_full_order_number"
2222
- ]) {
2223
- if (this.isBlankIdentityValue(merged[field]) && !this.isBlankIdentityValue(remote[field])) {
2224
- merged[field] = remote[field];
2225
- }
2226
- }
2227
- return this.normalizeOrderCollectionsForIngress(
2228
- merged,
2229
- "mergeRemoteIdentityIntoDraftOrder"
2230
- );
2231
- }
2232
1548
  mergeRemoteSnapshotWithPendingOrders(remoteOrders, existingOrders) {
2233
1549
  const merged = remoteOrders.map((order) => this.normalizeRemoteSyncedOrder(order));
2234
1550
  for (const rawOrder of existingOrders) {
@@ -2236,18 +1552,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2236
1552
  rawOrder,
2237
1553
  "mergeRemoteSnapshotWithPendingOrders.existingSQLite"
2238
1554
  );
2239
- if (!this.shouldProtectLocalOrderFromRemoteSnapshot(order))
1555
+ if (!this.isPendingSyncOrder(order))
2240
1556
  continue;
2241
1557
  const matchIndex = this.findOrderIndexByIdentity(merged, order);
2242
1558
  if (matchIndex >= 0) {
2243
- if (this.isDraftOrder(order)) {
2244
- merged[matchIndex] = this.mergeRemoteIdentityIntoDraftOrder(
2245
- order,
2246
- merged[matchIndex]
2247
- );
2248
- } else {
2249
- merged[matchIndex] = this.mergeOrderRecords(order, merged[matchIndex]);
2250
- }
1559
+ merged[matchIndex] = this.mergeOrderRecords(order, merged[matchIndex]);
2251
1560
  continue;
2252
1561
  }
2253
1562
  if (!this.getOrderStorageKey(order))
@@ -2275,13 +1584,8 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2275
1584
  * @example
2276
1585
  * await this.patchOrdersInSQLite(freshOrders)
2277
1586
  */
2278
- async patchOrdersInSQLite(orders, source, mergeActions = {}, options = {}, forceWriteStorageKeys = /* @__PURE__ */ new Set()) {
2279
- if (orders.length === 0) {
2280
- return;
2281
- }
2282
- if (!this.dbManager) {
2283
- if (options.throwOnError)
2284
- throw new Error("订单 SQLite 数据库未初始化");
1587
+ async patchOrdersInSQLite(orders, source, mergeActions = {}) {
1588
+ if (!this.dbManager || orders.length === 0) {
2285
1589
  return;
2286
1590
  }
2287
1591
  const ordersSnapshot = (0, import_lodash_es.cloneDeep)(orders).map((order) => this.normalizeOrderCollectionsForIngress(order, `${source}.sqliteIngress`)).filter((order) => this.getOrderStorageKey(order));
@@ -2291,8 +1595,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2291
1595
  const { toWrite, skipped } = this.filterRedundantPatchOrders(
2292
1596
  source,
2293
1597
  ordersSnapshot,
2294
- mergeActions,
2295
- forceWriteStorageKeys
1598
+ mergeActions
2296
1599
  );
2297
1600
  if (toWrite.length === 0) {
2298
1601
  return;
@@ -2320,8 +1623,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2320
1623
  for (const order of compactedToWrite) {
2321
1624
  await this.dbManager.update(INDEXDB_STORE_NAME, order);
2322
1625
  }
2323
- } else if (options.throwOnError) {
2324
- throw new Error("订单 SQLite 数据库不支持写入");
2325
1626
  }
2326
1627
  this.recordRecentSqliteWrite(source, compactedToWrite);
2327
1628
  this.logInfo("patchOrdersInSQLite-完成", {
@@ -2336,8 +1637,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2336
1637
  error: error instanceof Error ? error.message : String(error),
2337
1638
  orderCount: ordersSnapshot.length
2338
1639
  });
2339
- if (options.throwOnError)
2340
- throw error;
2341
1640
  }
2342
1641
  }
2343
1642
  /**
@@ -2346,15 +1645,8 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2346
1645
  * @example
2347
1646
  * await this.updateOrderInSQLite(freshOrder)
2348
1647
  */
2349
- async updateOrderInSQLite(order, source, options = {}) {
2350
- if (!this.getOrderStorageKey(order)) {
2351
- if (options.throwOnError)
2352
- throw new Error("订单缺少可用的 SQLite 存储主键");
2353
- return;
2354
- }
2355
- if (!this.dbManager) {
2356
- if (options.throwOnError)
2357
- throw new Error("订单 SQLite 数据库未初始化");
1648
+ async updateOrderInSQLite(order, source) {
1649
+ if (!this.dbManager || !this.getOrderStorageKey(order)) {
2358
1650
  return;
2359
1651
  }
2360
1652
  const orderSnapshot = this.normalizeOrderCollectionsForIngress(
@@ -2378,8 +1670,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2378
1670
  } else if (typeof this.dbManager.bulkAdd === "function") {
2379
1671
  writeMethod = "bulkAdd";
2380
1672
  await this.dbManager.bulkAdd(INDEXDB_STORE_NAME, [orderSnapshot]);
2381
- } else if (options.throwOnError) {
2382
- throw new Error("订单 SQLite 数据库不支持写入");
2383
1673
  }
2384
1674
  this.recordRecentSqliteWrite(source, [orderSnapshot]);
2385
1675
  this.logInfo("updateOrderInSQLite-完成", {
@@ -2393,18 +1683,15 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2393
1683
  error: error instanceof Error ? error.message : String(error),
2394
1684
  orderId: orderSnapshot.order_id ?? null
2395
1685
  });
2396
- if (options.throwOnError)
2397
- throw error;
2398
1686
  }
2399
1687
  }
2400
1688
  /**
2401
- * 全量快照替换 orders 表(clear + bulkAdd),并保留本地 draft / need_sync / pending 支付订单。
2402
- * 用于 SSE 全量拉取与营业日窗口裁剪。
1689
+ * 全量快照替换 orders 表(clear + bulkAdd),用于 SSE 全量拉取与营业日窗口裁剪。
2403
1690
  *
2404
1691
  * @example
2405
1692
  * await this.replaceOrdersSnapshotInSQLite(orderList)
2406
1693
  */
2407
- async replaceOrdersSnapshotInSQLite(orderList, source, protectedOrdersBeforeRemoteFetch = []) {
1694
+ async replaceOrdersSnapshotInSQLite(orderList, source) {
2408
1695
  if (!this.dbManager) {
2409
1696
  return this.compactOrderListByIdentity(
2410
1697
  orderList.map((order) => this.normalizeRemoteSyncedOrder(order)),
@@ -2421,52 +1708,16 @@ var OrderModule = class extends import_BaseModule.BaseModule {
2421
1708
  try {
2422
1709
  await this.runInOrderSQLiteSaveQueue(async () => {
2423
1710
  const existingOrders = typeof this.dbManager.getAll === "function" ? await this.dbManager.getAll(INDEXDB_STORE_NAME) : [];
2424
- const protectedLocalOrders = protectedOrdersBeforeRemoteFetch.map((order) => this.normalizeOrderCollectionsForIngress(
2425
- order,
2426
- `${source}.protectedBeforeRemoteFetch`
2427
- )).filter((order) => this.shouldProtectLocalOrderFromRemoteSnapshot(order));
2428
- for (const rawCurrentOrder of existingOrders || []) {
2429
- const currentOrder = this.normalizeOrderCollectionsForIngress(
2430
- rawCurrentOrder,
2431
- `${source}.currentSQLite`
2432
- );
2433
- const protectedIndex = this.findOrderIndexByIdentity(
2434
- protectedLocalOrders,
2435
- currentOrder
2436
- );
2437
- const currentNeedsProtection = this.shouldProtectLocalOrderFromRemoteSnapshot(currentOrder);
2438
- if (protectedIndex >= 0) {
2439
- if (currentNeedsProtection) {
2440
- protectedLocalOrders[protectedIndex] = currentOrder;
2441
- } else {
2442
- protectedLocalOrders.splice(protectedIndex, 1);
2443
- }
2444
- continue;
2445
- }
2446
- if (currentNeedsProtection)
2447
- protectedLocalOrders.push(currentOrder);
2448
- }
2449
1711
  const orderListSnapshot = this.mergeRemoteSnapshotWithPendingOrders(
2450
1712
  remoteSnapshot,
2451
- protectedLocalOrders
1713
+ existingOrders || []
2452
1714
  );
2453
1715
  mergedSnapshot = this.compactOrderListByIdentity(orderListSnapshot, `${source}.sqliteSnapshot`).list;
2454
1716
  this.logInfo("replaceOrdersSnapshotInSQLite-开始", {
2455
1717
  source,
2456
1718
  count: mergedSnapshot.length,
2457
1719
  remoteCount: remoteSnapshot.length,
2458
- protectedBeforeRemoteFetchCount: protectedOrdersBeforeRemoteFetch.length,
2459
- protectedLocalOrderCount: protectedLocalOrders.length,
2460
- preservedLocalUnsyncedCount: mergedSnapshot.length - remoteSnapshot.length,
2461
- protectedPendingPaymentCount: protectedLocalOrders.reduce(
2462
- (count, order) => count + this.getIdentifiedPendingPayments(order).length,
2463
- 0
2464
- ),
2465
- protectedPendingPaymentIdentities: protectedLocalOrders.flatMap((order) => this.getIdentifiedPendingPayments(order).map((payment) => ({
2466
- order_id: order.order_id ?? null,
2467
- external_sale_number: order.external_sale_number ?? null,
2468
- payment_identities: (0, import_payment_utils.getOrderPaymentIdentityKeys)(payment)
2469
- })))
1720
+ preservedPendingCount: mergedSnapshot.length - remoteSnapshot.length
2470
1721
  });
2471
1722
  await this.dbManager.clear(INDEXDB_STORE_NAME);
2472
1723
  this.logInfo("replaceOrdersSnapshotInSQLite-clear完成", {