@pisell/pisellos 2.3.69 → 2.3.71
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.
- package/dist/core/index.d.ts +0 -7
- package/dist/core/index.js +65 -109
- package/dist/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/types.d.ts +2 -0
- package/dist/modules/Order/types.js +1 -0
- package/dist/modules/Quotation/index.d.ts +0 -6
- package/dist/modules/Quotation/index.js +19 -75
- package/dist/plugins/request.d.ts +0 -1
- package/dist/server/index.d.ts +2 -8
- package/dist/server/index.js +140 -206
- package/dist/server/modules/floor-plan/index.d.ts +0 -4
- package/dist/server/modules/floor-plan/index.js +98 -240
- package/dist/server/modules/menu/index.js +23 -48
- package/dist/server/modules/order/index.d.ts +7 -17
- package/dist/server/modules/order/index.js +207 -419
- package/dist/server/modules/products/index.d.ts +2 -8
- package/dist/server/modules/products/index.js +75 -167
- package/dist/server/modules/resource/index.js +13 -21
- package/dist/solution/BaseSales/index.js +15 -4
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.d.ts +5 -15
- package/dist/solution/BookingTicket/index.js +21 -6
- package/lib/core/index.d.ts +0 -7
- package/lib/core/index.js +2 -20
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/types.d.ts +2 -0
- package/lib/modules/Quotation/index.d.ts +0 -6
- package/lib/modules/Quotation/index.js +5 -49
- package/lib/plugins/request.d.ts +0 -1
- package/lib/server/index.d.ts +2 -8
- package/lib/server/index.js +17 -52
- package/lib/server/modules/floor-plan/index.d.ts +0 -4
- package/lib/server/modules/floor-plan/index.js +6 -54
- package/lib/server/modules/menu/index.js +5 -31
- package/lib/server/modules/order/index.d.ts +7 -17
- package/lib/server/modules/order/index.js +40 -197
- package/lib/server/modules/products/index.d.ts +2 -8
- package/lib/server/modules/products/index.js +24 -97
- package/lib/server/modules/resource/index.js +2 -7
- package/lib/solution/BaseSales/index.js +4 -4
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.d.ts +5 -15
- package/lib/solution/BookingTicket/index.js +15 -5
- package/package.json +1 -1
|
@@ -119,23 +119,14 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
119
119
|
payment: Record<string, any>;
|
|
120
120
|
previousPayment: Record<string, any>;
|
|
121
121
|
} | null>;
|
|
122
|
-
loadOrdersByServer(
|
|
123
|
-
trigger?: string;
|
|
124
|
-
}): Promise<OrderData[]>;
|
|
122
|
+
loadOrdersByServer(): Promise<OrderData[]>;
|
|
125
123
|
/**
|
|
126
124
|
* 静默全量刷新:后台重新拉取全量 SSE 订单数据并更新本地
|
|
127
125
|
* 拿到完整数据后一次性替换 store,触发订单变更与同步完成事件
|
|
128
126
|
* @returns 刷新后的订单列表
|
|
129
127
|
*/
|
|
130
|
-
silentRefresh(
|
|
131
|
-
trigger?: string;
|
|
132
|
-
}): Promise<OrderData[]>;
|
|
128
|
+
silentRefresh(): Promise<OrderData[]>;
|
|
133
129
|
private normalizeOrderForMemoryList;
|
|
134
|
-
/**
|
|
135
|
-
* 将已经完成集合规范化的订单转换为内存身份,不重复扫描 products/bookings/payments。
|
|
136
|
-
*/
|
|
137
|
-
private prepareNormalizedOrderForMemoryList;
|
|
138
|
-
private prepareNormalizedOrdersForMemoryList;
|
|
139
130
|
private normalizeOrdersForMemoryList;
|
|
140
131
|
private hasRealOrderId;
|
|
141
132
|
private shouldKeepOrderInMemory;
|
|
@@ -300,14 +291,13 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
300
291
|
private logDuplicateOrders;
|
|
301
292
|
private compactOrderListByIdentity;
|
|
302
293
|
/**
|
|
303
|
-
*
|
|
304
|
-
*
|
|
294
|
+
* 当前订单拉取窗口:
|
|
295
|
+
* - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
|
|
296
|
+
* - 无法解析时退化为自然日窗口
|
|
305
297
|
*/
|
|
306
|
-
private
|
|
298
|
+
private getCurrentPullWindow;
|
|
307
299
|
private hasPulledOrdersToday;
|
|
308
300
|
private markOrderPulledAtNow;
|
|
309
|
-
private clearOrderSnapshotMarker;
|
|
310
|
-
private getCurrentShopId;
|
|
311
301
|
private getStorageItem;
|
|
312
302
|
private setStorageItem;
|
|
313
303
|
private loadOrdersFromSQLite;
|
|
@@ -345,7 +335,7 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
345
335
|
* 用于 SSE 全量拉取与营业日窗口裁剪。
|
|
346
336
|
*
|
|
347
337
|
* @example
|
|
348
|
-
*
|
|
338
|
+
* await this.replaceOrdersSnapshotInSQLite(orderList)
|
|
349
339
|
*/
|
|
350
340
|
private replaceOrdersSnapshotInSQLite;
|
|
351
341
|
/**
|
|
@@ -41,7 +41,6 @@ var import_payment_utils = require("../../../modules/Order/payment-utils");
|
|
|
41
41
|
var INDEXDB_STORE_NAME = "orders";
|
|
42
42
|
var ORDER_STORAGE_KEY_FIELD = "__order_storage_key";
|
|
43
43
|
var ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY = "server_order_last_full_fetch_at";
|
|
44
|
-
var ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY = "server_order_last_full_fetch_shop_id";
|
|
45
44
|
var ORDER_SYNC_THROTTLE_MS_STORAGE_KEY = "order_sync_throttle_ms";
|
|
46
45
|
var DEFAULT_ORDER_SYNC_THROTTLE_MS = 2e3;
|
|
47
46
|
var ORDER_SQLITE_DEDUPE_MS = 15e3;
|
|
@@ -193,21 +192,18 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
193
192
|
* 仅记录计数与订单标识,不输出商品、预约、支付或客户明细。
|
|
194
193
|
*/
|
|
195
194
|
normalizeOrderCollectionsForIngress(order, source) {
|
|
196
|
-
const
|
|
197
|
-
|
|
195
|
+
const sourceOrder = (0, import_lodash_es.cloneDeep)(order);
|
|
196
|
+
const sourceOrderRecord = sourceOrder;
|
|
198
197
|
if (Array.isArray(sourceOrderRecord.payments)) {
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
};
|
|
209
|
-
})
|
|
210
|
-
};
|
|
198
|
+
sourceOrderRecord.payments = sourceOrderRecord.payments.map((payment) => {
|
|
199
|
+
if (!(0, import_payment_utils.isPendingOrderPayment)(payment) || (0, import_payment_utils.getOrderPaymentIdentityKeys)(payment).some((key) => key.startsWith("unique_payment_number:"))) {
|
|
200
|
+
return payment;
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
...payment,
|
|
204
|
+
[PENDING_PAYMENT_WITHOUT_UNIQUE_MARKER]: true
|
|
205
|
+
};
|
|
206
|
+
});
|
|
211
207
|
}
|
|
212
208
|
const result = (0, import_orderCollectionIdentity.normalizeOrderCollections)(sourceOrder);
|
|
213
209
|
const normalizedOrderRecord = result.order;
|
|
@@ -529,65 +525,11 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
529
525
|
return DEFAULT_ORDER_SYNC_THROTTLE_MS;
|
|
530
526
|
}
|
|
531
527
|
async preload() {
|
|
532
|
-
const
|
|
533
|
-
let cachedOrders = null;
|
|
534
|
-
let sqliteLoadTimings;
|
|
535
|
-
if (this.dbManager) {
|
|
536
|
-
try {
|
|
537
|
-
cachedOrders = await this.loadOrdersFromSQLite({
|
|
538
|
-
throwOnError: true,
|
|
539
|
-
onTiming: (timings) => {
|
|
540
|
-
sqliteLoadTimings = timings;
|
|
541
|
-
}
|
|
542
|
-
});
|
|
543
|
-
} catch (error) {
|
|
544
|
-
this.logWarning("preload-SQLite读取失败,回退远端全量拉取", {
|
|
545
|
-
error: error instanceof Error ? error.message : String(error)
|
|
546
|
-
});
|
|
547
|
-
}
|
|
548
|
-
}
|
|
549
|
-
if (cachedOrders !== null && this.hasPulledOrdersToday()) {
|
|
550
|
-
const memoryPrepareStartedAt = performance.now();
|
|
551
|
-
const memoryOrders = this.prepareNormalizedOrdersForMemoryList(cachedOrders);
|
|
552
|
-
const memoryPrepareMs = +(performance.now() - memoryPrepareStartedAt).toFixed(2);
|
|
553
|
-
this.store.list = memoryOrders;
|
|
554
|
-
const syncMapStartedAt = performance.now();
|
|
555
|
-
this.syncOrdersMap();
|
|
556
|
-
const syncMapMs = +(performance.now() - syncMapStartedAt).toFixed(2);
|
|
557
|
-
const onOrdersLoadedStartedAt = performance.now();
|
|
558
|
-
await this.core.effects.emit(import_types.OrderHooks.onOrdersLoaded, this.store.list);
|
|
559
|
-
const onOrdersLoadedMs = +(performance.now() - onOrdersLoadedStartedAt).toFixed(2);
|
|
560
|
-
const emitOrdersChangedStartedAt = performance.now();
|
|
561
|
-
await this.emitOrdersChanged([], "preload.sqlite");
|
|
562
|
-
const emitOrdersChangedMs = +(performance.now() - emitOrdersChangedStartedAt).toFixed(2);
|
|
563
|
-
this.logInfo("预加载完成", {
|
|
564
|
-
trigger: "preload",
|
|
565
|
-
source: "SQLite",
|
|
566
|
-
orderCount: this.store.list.length,
|
|
567
|
-
duration: `${Date.now() - preloadStartedAt}ms`,
|
|
568
|
-
stages: {
|
|
569
|
-
...sqliteLoadTimings || {},
|
|
570
|
-
memoryPrepareMs,
|
|
571
|
-
syncMapMs,
|
|
572
|
-
onOrdersLoadedMs,
|
|
573
|
-
emitOrdersChangedMs
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
return;
|
|
577
|
-
}
|
|
578
|
-
const orders = await this.loadOrdersByServer({
|
|
579
|
-
trigger: "preload"
|
|
580
|
-
});
|
|
528
|
+
const orders = await this.loadOrdersByServer();
|
|
581
529
|
this.store.list = (0, import_lodash_es.cloneDeep)(orders);
|
|
582
530
|
this.syncOrdersMap();
|
|
583
531
|
await this.emitOrdersChanged([], "preload");
|
|
584
532
|
await this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
|
|
585
|
-
this.logInfo("预加载完成", {
|
|
586
|
-
trigger: "preload",
|
|
587
|
-
source: "Server",
|
|
588
|
-
orderCount: this.store.list.length,
|
|
589
|
-
duration: `${Date.now() - preloadStartedAt}ms`
|
|
590
|
-
});
|
|
591
533
|
}
|
|
592
534
|
getOrders() {
|
|
593
535
|
return this.store.list;
|
|
@@ -808,16 +750,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
808
750
|
this.logInfo("updateLocalPayment-变更事件完成", paymentContext);
|
|
809
751
|
return { order: nextOrder, payment: nextPayment, previousPayment };
|
|
810
752
|
}
|
|
811
|
-
async loadOrdersByServer(
|
|
753
|
+
async loadOrdersByServer() {
|
|
812
754
|
var _a;
|
|
813
755
|
let orderList = [];
|
|
814
|
-
let hasFetchedRemoteSnapshot = false;
|
|
815
|
-
const trigger = options.trigger || "unknown";
|
|
816
756
|
const protectedOrdersBeforeRemoteFetch = (await this.loadOrdersFromSQLite()).filter(
|
|
817
757
|
(order) => this.shouldProtectLocalOrderFromRemoteSnapshot(order)
|
|
818
758
|
);
|
|
819
759
|
this.logInfo("loadOrdersByServer-开始", {
|
|
820
|
-
trigger,
|
|
821
760
|
hasOrderDataSource: !!this.orderDataSource,
|
|
822
761
|
query: ((_a = this.store) == null ? void 0 : _a.createdAtQuery) || null,
|
|
823
762
|
protectedLocalOrderCount: protectedOrdersBeforeRemoteFetch.length,
|
|
@@ -835,36 +774,25 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
835
774
|
});
|
|
836
775
|
orderList = data || [];
|
|
837
776
|
this.logInfo("loadOrdersByServer-SSE拉取成功", {
|
|
838
|
-
trigger,
|
|
839
777
|
count: orderList.length
|
|
840
778
|
});
|
|
841
|
-
|
|
779
|
+
this.markOrderPulledAtNow();
|
|
842
780
|
this.lastServerFullFetchAtMs = Date.now();
|
|
843
781
|
} catch {
|
|
844
782
|
this.logInfo("loadOrdersByServer-SSE拉取失败,保持当前内存订单");
|
|
845
783
|
return this.store.list;
|
|
846
784
|
}
|
|
847
785
|
}
|
|
848
|
-
|
|
849
|
-
this.clearOrderSnapshotMarker();
|
|
850
|
-
}
|
|
851
|
-
const {
|
|
852
|
-
orders: mergedOrders,
|
|
853
|
-
persisted: isRemoteSnapshotPersisted
|
|
854
|
-
} = await this.replaceOrdersSnapshotInSQLite(
|
|
786
|
+
const mergedOrders = await this.replaceOrdersSnapshotInSQLite(
|
|
855
787
|
orderList,
|
|
856
788
|
"loadOrdersByServer",
|
|
857
789
|
protectedOrdersBeforeRemoteFetch
|
|
858
790
|
);
|
|
859
|
-
if (hasFetchedRemoteSnapshot && isRemoteSnapshotPersisted) {
|
|
860
|
-
this.markOrderPulledAtNow();
|
|
861
|
-
}
|
|
862
791
|
const memoryOrders = this.normalizeOrdersForMemoryList(
|
|
863
792
|
mergedOrders,
|
|
864
793
|
"loadOrdersByServer.memory"
|
|
865
794
|
);
|
|
866
795
|
this.logInfo("loadOrdersByServer-结束", {
|
|
867
|
-
trigger,
|
|
868
796
|
count: memoryOrders.length,
|
|
869
797
|
persistedCount: mergedOrders.length,
|
|
870
798
|
sqliteOnlyDraftCount: mergedOrders.length - memoryOrders.length
|
|
@@ -877,34 +805,21 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
877
805
|
* 拿到完整数据后一次性替换 store,触发订单变更与同步完成事件
|
|
878
806
|
* @returns 刷新后的订单列表
|
|
879
807
|
*/
|
|
880
|
-
async silentRefresh(
|
|
808
|
+
async silentRefresh() {
|
|
881
809
|
const startTime = Date.now();
|
|
882
|
-
const trigger = options.trigger || "background";
|
|
883
810
|
const elapsedSinceFullFetch = Date.now() - this.lastServerFullFetchAtMs;
|
|
884
811
|
if (this.lastServerFullFetchAtMs > 0 && elapsedSinceFullFetch < ORDER_SILENT_REFRESH_MIN_INTERVAL_MS) {
|
|
885
|
-
this.logInfo("silentRefresh 跳过全量 SSE", {
|
|
886
|
-
trigger,
|
|
887
|
-
reason: "within_min_interval",
|
|
888
|
-
minIntervalMs: ORDER_SILENT_REFRESH_MIN_INTERVAL_MS,
|
|
889
|
-
elapsedSinceFullFetchMs: elapsedSinceFullFetch,
|
|
890
|
-
orderCount: this.store.list.length
|
|
891
|
-
});
|
|
892
812
|
return this.store.list;
|
|
893
813
|
}
|
|
894
|
-
this.logInfo("silentRefresh 开始"
|
|
895
|
-
trigger,
|
|
896
|
-
elapsedSinceFullFetchMs: elapsedSinceFullFetch,
|
|
897
|
-
orderCount: this.store.list.length
|
|
898
|
-
});
|
|
814
|
+
this.logInfo("silentRefresh 开始");
|
|
899
815
|
try {
|
|
900
816
|
this.updateCreateStore();
|
|
901
|
-
const orders = await this.loadOrdersByServer(
|
|
817
|
+
const orders = await this.loadOrdersByServer();
|
|
902
818
|
this.store.list = (0, import_lodash_es.cloneDeep)(orders);
|
|
903
819
|
this.syncOrdersMap();
|
|
904
820
|
await this.emitOrdersChanged([], "silentRefresh");
|
|
905
821
|
await this.core.effects.emit(import_types.OrderHooks.onOrdersSyncCompleted, null);
|
|
906
822
|
this.logInfo("silentRefresh 完成", {
|
|
907
|
-
trigger,
|
|
908
823
|
orderCount: orders.length,
|
|
909
824
|
duration: `${Date.now() - startTime}ms`
|
|
910
825
|
});
|
|
@@ -912,7 +827,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
912
827
|
} catch (error) {
|
|
913
828
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
914
829
|
this.logError("silentRefresh 失败", {
|
|
915
|
-
trigger,
|
|
916
830
|
duration: `${Date.now() - startTime}ms`,
|
|
917
831
|
error: errorMessage
|
|
918
832
|
});
|
|
@@ -921,12 +835,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
921
835
|
}
|
|
922
836
|
normalizeOrderForMemoryList(order, source = "normalizeOrderForMemoryList") {
|
|
923
837
|
const normalizedOrder = this.normalizeOrderCollectionsForIngress(order, source);
|
|
924
|
-
return this.prepareNormalizedOrderForMemoryList(normalizedOrder);
|
|
925
|
-
}
|
|
926
|
-
/**
|
|
927
|
-
* 将已经完成集合规范化的订单转换为内存身份,不重复扫描 products/bookings/payments。
|
|
928
|
-
*/
|
|
929
|
-
prepareNormalizedOrderForMemoryList(normalizedOrder) {
|
|
930
838
|
const externalSaleNumber = normalizedOrder == null ? void 0 : normalizedOrder.external_sale_number;
|
|
931
839
|
if (this.isDraftOrder(normalizedOrder) && !this.hasRealOrderId(normalizedOrder)) {
|
|
932
840
|
return normalizedOrder;
|
|
@@ -942,9 +850,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
942
850
|
order_id: externalSaleNumber
|
|
943
851
|
};
|
|
944
852
|
}
|
|
945
|
-
prepareNormalizedOrdersForMemoryList(orders) {
|
|
946
|
-
return orders.map((order) => this.prepareNormalizedOrderForMemoryList(order)).filter((order) => this.shouldKeepOrderInMemory(order));
|
|
947
|
-
}
|
|
948
853
|
normalizeOrdersForMemoryList(orders, source) {
|
|
949
854
|
return orders.map((order) => this.normalizeOrderForMemoryList(order, source)).filter((order) => this.shouldKeepOrderInMemory(order));
|
|
950
855
|
}
|
|
@@ -2232,29 +2137,20 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2232
2137
|
return { list, removedCount };
|
|
2233
2138
|
}
|
|
2234
2139
|
/**
|
|
2235
|
-
*
|
|
2236
|
-
*
|
|
2140
|
+
* 当前订单拉取窗口:
|
|
2141
|
+
* - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
|
|
2142
|
+
* - 无法解析时退化为自然日窗口
|
|
2237
2143
|
*/
|
|
2238
|
-
|
|
2239
|
-
var _a;
|
|
2144
|
+
getCurrentPullWindow() {
|
|
2145
|
+
var _a, _b;
|
|
2240
2146
|
const now = (0, import_dayjs.default)();
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
const
|
|
2244
|
-
const
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
const boundaryTime = String(boundary.time || "").trim();
|
|
2248
|
-
const todayBoundary = (0, import_dayjs.default)(`${now.format("YYYY-MM-DD")} ${boundaryTime}`);
|
|
2249
|
-
if (todayBoundary.isValid()) {
|
|
2250
|
-
const startAt2 = now.isBefore(todayBoundary) ? todayBoundary.subtract(1, "day") : todayBoundary;
|
|
2251
|
-
return {
|
|
2252
|
-
startAt: startAt2,
|
|
2253
|
-
endExclusiveAt: startAt2.add(1, "day")
|
|
2254
|
-
};
|
|
2255
|
-
}
|
|
2147
|
+
const range = (_b = (_a = this.store) == null ? void 0 : _a.createdAtQuery) == null ? void 0 : _b.sales_time_between;
|
|
2148
|
+
if (Array.isArray(range) && range.length >= 2) {
|
|
2149
|
+
const startAt2 = (0, import_dayjs.default)(range[0]);
|
|
2150
|
+
const endExclusiveAt = (0, import_dayjs.default)(range[1]);
|
|
2151
|
+
if (startAt2.isValid() && endExclusiveAt.isValid() && endExclusiveAt.isAfter(startAt2)) {
|
|
2152
|
+
return { startAt: startAt2, endExclusiveAt };
|
|
2256
2153
|
}
|
|
2257
|
-
} catch {
|
|
2258
2154
|
}
|
|
2259
2155
|
const startAt = now.startOf("day");
|
|
2260
2156
|
return { startAt, endExclusiveAt: startAt.add(1, "day") };
|
|
@@ -2263,51 +2159,17 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2263
2159
|
const lastFullFetchAt = this.getStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY);
|
|
2264
2160
|
if (!lastFullFetchAt)
|
|
2265
2161
|
return false;
|
|
2266
|
-
const currentShopId = this.getCurrentShopId();
|
|
2267
|
-
const lastFullFetchShopId = this.getStorageItem(
|
|
2268
|
-
ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY
|
|
2269
|
-
);
|
|
2270
|
-
if (!currentShopId || !lastFullFetchShopId || currentShopId !== lastFullFetchShopId) {
|
|
2271
|
-
return false;
|
|
2272
|
-
}
|
|
2273
2162
|
const parsed = (0, import_dayjs.default)(lastFullFetchAt);
|
|
2274
2163
|
if (!parsed.isValid())
|
|
2275
2164
|
return false;
|
|
2276
|
-
const { startAt, endExclusiveAt } = this.
|
|
2165
|
+
const { startAt, endExclusiveAt } = this.getCurrentPullWindow();
|
|
2277
2166
|
return (parsed.isAfter(startAt) || parsed.isSame(startAt)) && parsed.isBefore(endExclusiveAt);
|
|
2278
2167
|
}
|
|
2279
2168
|
markOrderPulledAtNow() {
|
|
2280
|
-
const currentShopId = this.getCurrentShopId();
|
|
2281
|
-
if (!currentShopId)
|
|
2282
|
-
return;
|
|
2283
2169
|
this.setStorageItem(
|
|
2284
2170
|
ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY,
|
|
2285
2171
|
(0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss")
|
|
2286
2172
|
);
|
|
2287
|
-
this.setStorageItem(
|
|
2288
|
-
ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY,
|
|
2289
|
-
currentShopId
|
|
2290
|
-
);
|
|
2291
|
-
}
|
|
2292
|
-
clearOrderSnapshotMarker() {
|
|
2293
|
-
this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, "");
|
|
2294
|
-
this.setStorageItem(ORDER_LAST_FULL_FETCH_SHOP_ID_STORAGE_KEY, "");
|
|
2295
|
-
}
|
|
2296
|
-
getCurrentShopId() {
|
|
2297
|
-
var _a;
|
|
2298
|
-
try {
|
|
2299
|
-
const appPlugin = this.core.getPlugin("app");
|
|
2300
|
-
const app = appPlugin == null ? void 0 : appPlugin.getApp();
|
|
2301
|
-
if (!app)
|
|
2302
|
-
return null;
|
|
2303
|
-
const coreData = app.data.store.getStore().getDataByModel("core");
|
|
2304
|
-
const shopId = (_a = coreData == null ? void 0 : coreData.core) == null ? void 0 : _a.id;
|
|
2305
|
-
if (shopId === void 0 || shopId === null || shopId === "")
|
|
2306
|
-
return null;
|
|
2307
|
-
return String(shopId);
|
|
2308
|
-
} catch {
|
|
2309
|
-
return null;
|
|
2310
|
-
}
|
|
2311
2173
|
}
|
|
2312
2174
|
getStorageItem(key) {
|
|
2313
2175
|
var _a;
|
|
@@ -2334,29 +2196,15 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2334
2196
|
} catch {
|
|
2335
2197
|
}
|
|
2336
2198
|
}
|
|
2337
|
-
async loadOrdersFromSQLite(
|
|
2338
|
-
var _a;
|
|
2199
|
+
async loadOrdersFromSQLite() {
|
|
2339
2200
|
if (!this.dbManager)
|
|
2340
2201
|
return [];
|
|
2341
2202
|
try {
|
|
2342
|
-
const loadStartedAt = performance.now();
|
|
2343
|
-
const rawReadStartedAt = performance.now();
|
|
2344
2203
|
const orders = await this.dbManager.getAll(INDEXDB_STORE_NAME);
|
|
2345
|
-
|
|
2346
|
-
const normalizeStartedAt = performance.now();
|
|
2347
|
-
const normalizedOrders = (orders || []).map(
|
|
2204
|
+
return (orders || []).map(
|
|
2348
2205
|
(order) => this.normalizeOrderCollectionsForIngress(order, "loadOrdersFromSQLite")
|
|
2349
2206
|
);
|
|
2350
|
-
|
|
2351
|
-
(_a = options.onTiming) == null ? void 0 : _a.call(options, {
|
|
2352
|
-
sqliteRawReadMs,
|
|
2353
|
-
sqliteNormalizeMs,
|
|
2354
|
-
sqliteLoadTotalMs: +(performance.now() - loadStartedAt).toFixed(2)
|
|
2355
|
-
});
|
|
2356
|
-
return normalizedOrders;
|
|
2357
|
-
} catch (error) {
|
|
2358
|
-
if (options.throwOnError)
|
|
2359
|
-
throw error;
|
|
2207
|
+
} catch {
|
|
2360
2208
|
return [];
|
|
2361
2209
|
}
|
|
2362
2210
|
}
|
|
@@ -2624,17 +2472,14 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2624
2472
|
* 用于 SSE 全量拉取与营业日窗口裁剪。
|
|
2625
2473
|
*
|
|
2626
2474
|
* @example
|
|
2627
|
-
*
|
|
2475
|
+
* await this.replaceOrdersSnapshotInSQLite(orderList)
|
|
2628
2476
|
*/
|
|
2629
2477
|
async replaceOrdersSnapshotInSQLite(orderList, source, protectedOrdersBeforeRemoteFetch = []) {
|
|
2630
2478
|
if (!this.dbManager) {
|
|
2631
|
-
return
|
|
2632
|
-
|
|
2633
|
-
|
|
2634
|
-
|
|
2635
|
-
).list,
|
|
2636
|
-
persisted: false
|
|
2637
|
-
};
|
|
2479
|
+
return this.compactOrderListByIdentity(
|
|
2480
|
+
orderList.map((order) => this.normalizeRemoteSyncedOrder(order)),
|
|
2481
|
+
`${source}.snapshotNoDb`
|
|
2482
|
+
).list;
|
|
2638
2483
|
}
|
|
2639
2484
|
const remoteSnapshot = (0, import_lodash_es.cloneDeep)(orderList).map(
|
|
2640
2485
|
(order) => this.normalizeOrderCollectionsForIngress(order, `${source}.remoteIngress`)
|
|
@@ -2643,7 +2488,6 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2643
2488
|
remoteSnapshot.map((order) => this.normalizeRemoteSyncedOrder(order)),
|
|
2644
2489
|
`${source}.remoteSnapshot`
|
|
2645
2490
|
).list;
|
|
2646
|
-
let persisted = false;
|
|
2647
2491
|
try {
|
|
2648
2492
|
await this.runInOrderSQLiteSaveQueue(async () => {
|
|
2649
2493
|
const existingOrders = typeof this.dbManager.getAll === "function" ? await this.dbManager.getAll(INDEXDB_STORE_NAME) : [];
|
|
@@ -2708,14 +2552,13 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2708
2552
|
count: mergedSnapshot.length
|
|
2709
2553
|
});
|
|
2710
2554
|
});
|
|
2711
|
-
persisted = true;
|
|
2712
2555
|
} catch (error) {
|
|
2713
2556
|
this.logError("全量保存订单到 SQLite 失败", {
|
|
2714
2557
|
error: error instanceof Error ? error.message : String(error),
|
|
2715
2558
|
orderList: remoteSnapshot.length
|
|
2716
2559
|
});
|
|
2717
2560
|
}
|
|
2718
|
-
return
|
|
2561
|
+
return mergedSnapshot;
|
|
2719
2562
|
}
|
|
2720
2563
|
/**
|
|
2721
2564
|
* 清空订单模块的内存数据和本地 SQLite 订单表。
|
|
@@ -2731,7 +2574,7 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
2731
2574
|
await this.dbManager.clear(INDEXDB_STORE_NAME);
|
|
2732
2575
|
});
|
|
2733
2576
|
}
|
|
2734
|
-
this.
|
|
2577
|
+
this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, "");
|
|
2735
2578
|
this.emitOrdersChanged([], "clear");
|
|
2736
2579
|
}
|
|
2737
2580
|
};
|
|
@@ -25,7 +25,6 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
25
25
|
private quotationBridgeLoadedKey?;
|
|
26
26
|
private quotationBridgeRefreshPromise?;
|
|
27
27
|
private quotationBridgeRefreshKey?;
|
|
28
|
-
private quotationBridgeUpdatedCallback?;
|
|
29
28
|
private quotationScheduleCache;
|
|
30
29
|
private quotationScheduleCacheSource;
|
|
31
30
|
private quotationScheduleCacheLoaded;
|
|
@@ -73,7 +72,6 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
73
72
|
scheduleModule?: any;
|
|
74
73
|
channel?: string;
|
|
75
74
|
customer_id?: number | string;
|
|
76
|
-
onQuotationUpdated?: () => void;
|
|
77
75
|
}): Promise<void>;
|
|
78
76
|
/**
|
|
79
77
|
* 刷新桥接器内的报价单列表。
|
|
@@ -183,9 +181,7 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
183
181
|
/**
|
|
184
182
|
* 通过 ProductDataSource SSE 加载完整商品列表
|
|
185
183
|
*/
|
|
186
|
-
loadProductsByServer(
|
|
187
|
-
trigger?: string;
|
|
188
|
-
}): Promise<any>;
|
|
184
|
+
loadProductsByServer(): Promise<any>;
|
|
189
185
|
/**
|
|
190
186
|
* 纯请求方法:通过 HTTP 接口获取商品列表(无副作用,不触发事件、不写 IndexDB)
|
|
191
187
|
* @param params 查询参数
|
|
@@ -335,9 +331,7 @@ export declare class ProductsModule extends BaseModule implements Module {
|
|
|
335
331
|
* 拿到完整数据后一次性替换 store,清除价格缓存,触发 onProductsSyncCompleted
|
|
336
332
|
* @returns 刷新后的商品列表
|
|
337
333
|
*/
|
|
338
|
-
silentRefresh(
|
|
339
|
-
trigger?: string;
|
|
340
|
-
}): Promise<ProductData[]>;
|
|
334
|
+
silentRefresh(): Promise<ProductData[]>;
|
|
341
335
|
/**
|
|
342
336
|
* 销毁同步资源(取消 pubsub 订阅、清除定时器)
|
|
343
337
|
*/
|