@pisell/pisellos 2.3.1 → 2.3.3

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 (54) hide show
  1. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  2. package/dist/modules/Order/index.d.ts +9 -0
  3. package/dist/modules/Order/index.js +448 -371
  4. package/dist/modules/Order/types.d.ts +2 -0
  5. package/dist/modules/Quotation/index.d.ts +16 -2
  6. package/dist/modules/Quotation/index.js +71 -38
  7. package/dist/modules/Quotation/types.d.ts +14 -0
  8. package/dist/modules/SalesSummary/index.d.ts +1 -0
  9. package/dist/modules/SalesSummary/index.js +7 -4
  10. package/dist/modules/Schedule/index.d.ts +4 -0
  11. package/dist/modules/Schedule/index.js +31 -1
  12. package/dist/modules/Schedule/types.d.ts +2 -0
  13. package/dist/server/index.js +13 -13
  14. package/dist/server/modules/order/index.d.ts +25 -7
  15. package/dist/server/modules/order/index.js +370 -309
  16. package/dist/server/modules/products/index.d.ts +4 -0
  17. package/dist/server/modules/products/index.js +76 -45
  18. package/dist/server/modules/quotation/index.d.ts +39 -0
  19. package/dist/server/modules/quotation/index.js +278 -66
  20. package/dist/server/modules/schedule/index.d.ts +2 -0
  21. package/dist/server/modules/schedule/index.js +10 -2
  22. package/dist/solution/BaseSales/index.d.ts +10 -1
  23. package/dist/solution/BaseSales/index.js +825 -528
  24. package/dist/solution/BaseSales/types.d.ts +7 -0
  25. package/dist/solution/BaseSales/utils/quotationPrice.d.ts +12 -1
  26. package/dist/solution/BaseSales/utils/quotationPrice.js +16 -3
  27. package/dist/solution/BookingByStep/index.d.ts +1 -1
  28. package/lib/modules/Order/index.d.ts +9 -0
  29. package/lib/modules/Order/index.js +48 -9
  30. package/lib/modules/Order/types.d.ts +2 -0
  31. package/lib/modules/Quotation/index.d.ts +16 -2
  32. package/lib/modules/Quotation/index.js +49 -13
  33. package/lib/modules/Quotation/types.d.ts +14 -0
  34. package/lib/modules/SalesSummary/index.d.ts +1 -0
  35. package/lib/modules/SalesSummary/index.js +4 -3
  36. package/lib/modules/Schedule/index.d.ts +4 -0
  37. package/lib/modules/Schedule/index.js +21 -0
  38. package/lib/modules/Schedule/types.d.ts +2 -0
  39. package/lib/server/index.js +1 -1
  40. package/lib/server/modules/order/index.d.ts +25 -7
  41. package/lib/server/modules/order/index.js +88 -54
  42. package/lib/server/modules/products/index.d.ts +4 -0
  43. package/lib/server/modules/products/index.js +43 -19
  44. package/lib/server/modules/quotation/index.d.ts +39 -0
  45. package/lib/server/modules/quotation/index.js +179 -1
  46. package/lib/server/modules/schedule/index.d.ts +2 -0
  47. package/lib/server/modules/schedule/index.js +8 -1
  48. package/lib/solution/BaseSales/index.d.ts +10 -1
  49. package/lib/solution/BaseSales/index.js +218 -19
  50. package/lib/solution/BaseSales/types.d.ts +7 -0
  51. package/lib/solution/BaseSales/utils/quotationPrice.d.ts +12 -1
  52. package/lib/solution/BaseSales/utils/quotationPrice.js +15 -3
  53. package/lib/solution/BookingByStep/index.d.ts +1 -1
  54. package/package.json +1 -1
@@ -666,6 +666,8 @@ export interface OrderModuleAPI {
666
666
  updateTempOrderContactsInfo: (contactsInfo: Record<string, any> | null) => Record<string, any> | null;
667
667
  addProductToOrder: (product: Partial<OrderProduct> & OrderProductIdentity, booking?: AddProductBookingInput) => Promise<OrderProduct[]>;
668
668
  updateOrderProduct: (params: UpdateOrderProductParams) => Promise<OrderProduct[]>;
669
+ /** 批量更新购物车行,末尾仅触发一次促销重算与 summary 刷新 */
670
+ updateOrderProducts: (paramsList: UpdateOrderProductParams[]) => Promise<OrderProduct[]>;
669
671
  updateOrderProductQuantity: (params: UpdateOrderProductQuantityParams) => Promise<OrderProduct[]>;
670
672
  updateOrderBooking: (params: UpdateOrderBookingParams) => any[];
671
673
  removeProductFromOrder: (identity: OrderProductIdentity) => Promise<OrderProduct[]>;
@@ -1,8 +1,8 @@
1
1
  import { Module, PisellCore, ModuleOptions } from '../../types';
2
2
  import { BaseModule } from '../BaseModule';
3
3
  import type { ScheduleItem } from '../Schedule/types';
4
- import type { QuotationItem } from './types';
5
- export type { QuotationItem, QuotationProductData, QuotationSchedule, QuotationState, QuotationCustomer } from './types';
4
+ import type { QuotationItem, QuotationCustomerScopeInfo } from './types';
5
+ export type { QuotationItem, QuotationProductData, QuotationSchedule, QuotationState, QuotationCustomer, QuotationCustomerScope, QuotationCustomerScopeInfo, } from './types';
6
6
  export declare class QuotationModule extends BaseModule implements Module {
7
7
  protected defaultName: string;
8
8
  protected defaultVersion: string;
@@ -16,6 +16,7 @@ export declare class QuotationModule extends BaseModule implements Module {
16
16
  customer_id?: number | string;
17
17
  }): Promise<void>;
18
18
  getQuotationList(): QuotationItem[];
19
+ getQuotationCustomerScopeInfo(): QuotationCustomerScopeInfo;
19
20
  /**
20
21
  * Look up the quotation price for a specific product (+ optional variant) at a given datetime.
21
22
  * Returns the price as a string (e.g. "300.00"), or null if no quotation applies.
@@ -28,12 +29,24 @@ export declare class QuotationModule extends BaseModule implements Module {
28
29
  productId: number;
29
30
  variantId?: number;
30
31
  datetime: string;
32
+ channel?: string;
31
33
  customer_id?: number | string;
32
34
  }): string | null;
35
+ getQuotationMatchForProduct(params: {
36
+ productId: number;
37
+ variantId?: number;
38
+ datetime: string;
39
+ channel?: string;
40
+ customer_id?: number | string;
41
+ }): {
42
+ price: string | null;
43
+ quotationShelfId: number;
44
+ } | null;
33
45
  getQuotationShelfId(params: {
34
46
  productId: number;
35
47
  variantId?: number;
36
48
  datetime: string;
49
+ channel?: string;
37
50
  customer_id?: number | string;
38
51
  }): number;
39
52
  /**
@@ -49,6 +62,7 @@ export declare class QuotationModule extends BaseModule implements Module {
49
62
  setScheduleResolver(resolver: (id: number) => ScheduleItem | undefined): void;
50
63
  private isQuotationVisibleForCustomer;
51
64
  private hasValidCustomerId;
65
+ private normalizeCustomerId;
52
66
  private isQuotationActiveAt;
53
67
  private findProductData;
54
68
  }
@@ -109,6 +109,43 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
109
109
  value: function getQuotationList() {
110
110
  return this.store.list;
111
111
  }
112
+ }, {
113
+ key: "getQuotationCustomerScopeInfo",
114
+ value: function getQuotationCustomerScopeInfo() {
115
+ var _this2 = this;
116
+ var customerById = new Map();
117
+ var quotationScopes = this.store.list.filter(function (quotation) {
118
+ return Array.isArray(quotation.customer) && quotation.customer.length > 0;
119
+ }).map(function (quotation) {
120
+ var customerIds = [];
121
+ var customers = [];
122
+ var localSeen = new Set();
123
+ var quotationCustomers = quotation.customer || [];
124
+ quotationCustomers.forEach(function (customer) {
125
+ var customerId = _this2.normalizeCustomerId(customer === null || customer === void 0 ? void 0 : customer.id);
126
+ if (!customerId || localSeen.has(customerId)) return;
127
+ localSeen.add(customerId);
128
+ customerIds.push(customerId);
129
+ customers.push(customer);
130
+ if (!customerById.has(customerId)) customerById.set(customerId, customer);
131
+ });
132
+ return {
133
+ quotationId: quotation.id,
134
+ quotationName: quotation.name,
135
+ customerIds: customerIds,
136
+ customers: customers
137
+ };
138
+ });
139
+ var result = {
140
+ quotationCount: this.store.list.length,
141
+ hasCustomerScopedQuotations: quotationScopes.length > 0,
142
+ allQuotationsCustomerScoped: this.store.list.length > 0 && quotationScopes.length === this.store.list.length,
143
+ customerIds: Array.from(customerById.keys()),
144
+ customers: Array.from(customerById.values()),
145
+ quotationScopes: quotationScopes
146
+ };
147
+ return result;
148
+ }
112
149
 
113
150
  /**
114
151
  * Look up the quotation price for a specific product (+ optional variant) at a given datetime.
@@ -121,6 +158,12 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
121
158
  }, {
122
159
  key: "getPriceForProduct",
123
160
  value: function getPriceForProduct(params) {
161
+ var _this$getQuotationMat, _this$getQuotationMat2;
162
+ return (_this$getQuotationMat = (_this$getQuotationMat2 = this.getQuotationMatchForProduct(params)) === null || _this$getQuotationMat2 === void 0 ? void 0 : _this$getQuotationMat2.price) !== null && _this$getQuotationMat !== void 0 ? _this$getQuotationMat : null;
163
+ }
164
+ }, {
165
+ key: "getQuotationMatchForProduct",
166
+ value: function getQuotationMatchForProduct(params) {
124
167
  var productId = params.productId,
125
168
  variantId = params.variantId,
126
169
  datetime = params.datetime,
@@ -137,7 +180,10 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
137
180
  var match = this.findProductData(quotation.product_data, productId, variantId);
138
181
  if (!match) continue;
139
182
  if (match.value === 0) continue;
140
- return String(match.value);
183
+ return {
184
+ price: String(match.value),
185
+ quotationShelfId: quotation.id
186
+ };
141
187
  }
142
188
  } catch (err) {
143
189
  _iterator.e(err);
@@ -149,27 +195,8 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
149
195
  }, {
150
196
  key: "getQuotationShelfId",
151
197
  value: function getQuotationShelfId(params) {
152
- var productId = params.productId,
153
- variantId = params.variantId,
154
- datetime = params.datetime,
155
- customer_id = params.customer_id;
156
- var _iterator2 = _createForOfIteratorHelper(this.store.list),
157
- _step2;
158
- try {
159
- for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
160
- var quotation = _step2.value;
161
- if (!this.isQuotationVisibleForCustomer(quotation, customer_id)) continue;
162
- if (!this.isQuotationActiveAt(quotation, datetime)) continue;
163
- var match = this.findProductData(quotation.product_data, productId, variantId);
164
- if (!match || match.value === 0) continue;
165
- return quotation.id;
166
- }
167
- } catch (err) {
168
- _iterator2.e(err);
169
- } finally {
170
- _iterator2.f();
171
- }
172
- return 0;
198
+ var _this$getQuotationMat3, _this$getQuotationMat4;
199
+ return (_this$getQuotationMat3 = (_this$getQuotationMat4 = this.getQuotationMatchForProduct(params)) === null || _this$getQuotationMat4 === void 0 ? void 0 : _this$getQuotationMat4.quotationShelfId) !== null && _this$getQuotationMat3 !== void 0 ? _this$getQuotationMat3 : 0;
173
200
  }
174
201
 
175
202
  /**
@@ -182,16 +209,16 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
182
209
  value: function buildProductPriceMap(params) {
183
210
  var map = new Map();
184
211
  if (!this.store.list.length) return map;
185
- var _iterator3 = _createForOfIteratorHelper(params.productIds),
186
- _step3;
212
+ var _iterator2 = _createForOfIteratorHelper(params.productIds),
213
+ _step2;
187
214
  try {
188
- for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
189
- var productId = _step3.value;
190
- var _iterator4 = _createForOfIteratorHelper(params.timePoints),
191
- _step4;
215
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
216
+ var productId = _step2.value;
217
+ var _iterator3 = _createForOfIteratorHelper(params.timePoints),
218
+ _step3;
192
219
  try {
193
- for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
194
- var timePoint = _step4.value;
220
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
221
+ var timePoint = _step3.value;
195
222
  var key = "".concat(productId, ":").concat(timePoint);
196
223
  var price = this.getPriceForProduct({
197
224
  productId: productId,
@@ -203,15 +230,15 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
203
230
  }
204
231
  }
205
232
  } catch (err) {
206
- _iterator4.e(err);
233
+ _iterator3.e(err);
207
234
  } finally {
208
- _iterator4.f();
235
+ _iterator3.f();
209
236
  }
210
237
  }
211
238
  } catch (err) {
212
- _iterator3.e(err);
239
+ _iterator2.e(err);
213
240
  } finally {
214
- _iterator3.f();
241
+ _iterator2.f();
215
242
  }
216
243
  return map;
217
244
  }
@@ -236,21 +263,27 @@ export var QuotationModule = /*#__PURE__*/function (_BaseModule) {
236
263
  if (customerId === undefined || customerId === null || customerId === '') return false;
237
264
  return Number(customerId) > 0;
238
265
  }
266
+ }, {
267
+ key: "normalizeCustomerId",
268
+ value: function normalizeCustomerId(customerId) {
269
+ if (customerId === undefined || customerId === null || customerId === '') return null;
270
+ return String(customerId);
271
+ }
239
272
  }, {
240
273
  key: "isQuotationActiveAt",
241
274
  value: function isQuotationActiveAt(quotation, datetime) {
242
275
  var _quotation$schedule,
243
- _this2 = this;
276
+ _this3 = this;
244
277
  if (!((_quotation$schedule = quotation.schedule) !== null && _quotation$schedule !== void 0 && _quotation$schedule.length)) return false;
245
278
  var scheduleItems = [];
246
279
  quotation.schedule.forEach(function (s) {
247
- var _this2$scheduleResolv;
248
- var full = (_this2$scheduleResolv = _this2.scheduleResolver) === null || _this2$scheduleResolv === void 0 ? void 0 : _this2$scheduleResolv.call(_this2, s.id);
280
+ var _this3$scheduleResolv;
281
+ var full = (_this3$scheduleResolv = _this3.scheduleResolver) === null || _this3$scheduleResolv === void 0 ? void 0 : _this3$scheduleResolv.call(_this3, s.id);
249
282
  if (full) {
250
283
  scheduleItems.push(full);
251
284
  return;
252
285
  }
253
- if (_this2.scheduleResolver) {
286
+ if (_this3.scheduleResolver) {
254
287
  return;
255
288
  }
256
289
  var fallbackSchedule = _objectSpread(_objectSpread({}, s), {}, {
@@ -45,3 +45,17 @@ export interface QuotationItem {
45
45
  export interface QuotationState {
46
46
  list: QuotationItem[];
47
47
  }
48
+ export interface QuotationCustomerScope {
49
+ quotationId: number;
50
+ quotationName: string;
51
+ customerIds: string[];
52
+ customers: QuotationCustomer[];
53
+ }
54
+ export interface QuotationCustomerScopeInfo {
55
+ quotationCount: number;
56
+ hasCustomerScopedQuotations: boolean;
57
+ allQuotationsCustomerScoped: boolean;
58
+ customerIds: string[];
59
+ customers: QuotationCustomer[];
60
+ quotationScopes: QuotationCustomerScope[];
61
+ }
@@ -29,6 +29,7 @@ export declare class SalesSummaryModule extends BaseModule implements Module, Sa
29
29
  }): Promise<{
30
30
  tax_title: string;
31
31
  tax_rate: number | undefined;
32
+ tax_country_code: string;
32
33
  product_quantity: number;
33
34
  product_original_amount: string;
34
35
  product_amount: string;
@@ -201,10 +201,12 @@ export var SalesSummaryModule = /*#__PURE__*/function (_BaseModule) {
201
201
  _params$products = params.products, products = _params$products === void 0 ? [] : _params$products, isPriceIncludeTax = params.isPriceIncludeTax, taxRate = params.taxRate, shopDiscount = params.shopDiscount;
202
202
  taxConfig = this.getTaxConfig();
203
203
  summarySchedule = this.core.getModule("".concat(this.name.split('_')[0], "_schedule"));
204
- needScheduleIds = (_this$store$surcharge = this.store.surchargeList) === null || _this$store$surcharge === void 0 || (_this$store$surcharge = _this$store$surcharge.map(function (item) {
204
+ needScheduleIds = (((_this$store$surcharge = this.store.surchargeList) === null || _this$store$surcharge === void 0 || (_this$store$surcharge = _this$store$surcharge.map(function (item) {
205
205
  return item.available_schedule_ids;
206
- })) === null || _this$store$surcharge === void 0 ? void 0 : _this$store$surcharge.flat();
207
- scheduleList = summarySchedule === null || summarySchedule === void 0 ? void 0 : summarySchedule.getScheduleListByIds(needScheduleIds);
206
+ })) === null || _this$store$surcharge === void 0 ? void 0 : _this$store$surcharge.flat()) || []).filter(function (id) {
207
+ return id !== undefined && id !== null && id !== '';
208
+ });
209
+ scheduleList = needScheduleIds.length > 0 ? summarySchedule === null || summarySchedule === void 0 ? void 0 : summarySchedule.getScheduleListByIds(needScheduleIds) : [];
208
210
  scheduleById = {};
209
211
  if (Array.isArray(scheduleList)) {
210
212
  _iterator = _createForOfIteratorHelper(scheduleList);
@@ -230,7 +232,8 @@ export var SalesSummaryModule = /*#__PURE__*/function (_BaseModule) {
230
232
  });
231
233
  summaryWithTaxMeta = _objectSpread(_objectSpread({}, summary), {}, {
232
234
  tax_title: taxConfig.taxTitle || '',
233
- tax_rate: taxRate !== null && taxRate !== void 0 ? taxRate : taxConfig.taxRate
235
+ tax_rate: taxRate !== null && taxRate !== void 0 ? taxRate : taxConfig.taxRate,
236
+ tax_country_code: taxConfig.taxCountryCode || ''
234
237
  });
235
238
  this.store.summary = summaryWithTaxMeta;
236
239
  return _context4.abrupt("return", summaryWithTaxMeta);
@@ -9,6 +9,7 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
9
9
  private cacheId;
10
10
  private openCache;
11
11
  private fatherModule;
12
+ private hasLoadedScheduleList;
12
13
  constructor(name?: string, version?: string);
13
14
  initialize(core: PisellCore, options: ModuleOptions): Promise<void>;
14
15
  /**
@@ -25,6 +26,9 @@ export declare class ScheduleModule extends BaseModule implements Module, Schedu
25
26
  */
26
27
  loadAllSchedule(): Promise<void>;
27
28
  setScheduleList(list: ScheduleItem[]): void;
29
+ private syncScheduleMap;
30
+ getScheduleList(): ScheduleItem[];
31
+ isScheduleListLoaded(): boolean;
28
32
  loadScheduleAvailableDate({ startDate, endDate, custom_page_id, channel, }: LoadScheduleAvailableDateParams): Promise<import("../Date/types").ITime[]>;
29
33
  getScheduleListByIds(ids: number[]): ScheduleItem[];
30
34
  setAvailabilityScheduleDateList(list: ScheduleAvailabilityDateItem[]): void;
@@ -44,6 +44,7 @@ export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
44
44
  _defineProperty(_assertThisInitialized(_this), "cacheId", void 0);
45
45
  _defineProperty(_assertThisInitialized(_this), "openCache", false);
46
46
  _defineProperty(_assertThisInitialized(_this), "fatherModule", void 0);
47
+ _defineProperty(_assertThisInitialized(_this), "hasLoadedScheduleList", false);
47
48
  return _this;
48
49
  }
49
50
  _createClass(ScheduleModule, [{
@@ -70,10 +71,14 @@ export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
70
71
  this.store = options === null || options === void 0 ? void 0 : options.store;
71
72
  if (options.initialState) {
72
73
  this.store.scheduleList = options.initialState.scheduleList;
74
+ this.syncScheduleMap();
73
75
  this.store.availabilityDateList = options.initialState.availabilityDateList;
76
+ this.hasLoadedScheduleList = Array.isArray(options.initialState.scheduleList);
74
77
  } else {
75
78
  this.store.scheduleList = [];
79
+ this.store.map = new Map();
76
80
  this.store.availabilityDateList = [];
81
+ this.hasLoadedScheduleList = false;
77
82
  }
78
83
  if ((_options$otherParams = options.otherParams) !== null && _options$otherParams !== void 0 && _options$otherParams.cacheId) {
79
84
  this.openCache = options.otherParams.openCache;
@@ -147,6 +152,25 @@ export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
147
152
  key: "setScheduleList",
148
153
  value: function setScheduleList(list) {
149
154
  this.store.scheduleList = list;
155
+ this.syncScheduleMap();
156
+ this.hasLoadedScheduleList = true;
157
+ }
158
+ }, {
159
+ key: "syncScheduleMap",
160
+ value: function syncScheduleMap() {
161
+ this.store.map = new Map((this.store.scheduleList || []).map(function (schedule) {
162
+ return [Number(schedule.id), schedule];
163
+ }));
164
+ }
165
+ }, {
166
+ key: "getScheduleList",
167
+ value: function getScheduleList() {
168
+ return this.store.scheduleList || [];
169
+ }
170
+ }, {
171
+ key: "isScheduleListLoaded",
172
+ value: function isScheduleListLoaded() {
173
+ return this.hasLoadedScheduleList;
150
174
  }
151
175
  }, {
152
176
  key: "loadScheduleAvailableDate",
@@ -221,11 +245,17 @@ export var ScheduleModule = /*#__PURE__*/function (_BaseModule) {
221
245
  }, {
222
246
  key: "getScheduleListByIds",
223
247
  value: function getScheduleListByIds(ids) {
224
- var _this$store$scheduleL;
248
+ var _this2 = this,
249
+ _this$store$scheduleL;
225
250
  var idSet = new Set(ids.map(function (id) {
226
251
  return String(id);
227
252
  }));
228
253
  console.log('getScheduleListByIds', this.store.scheduleList);
254
+ if (this.store.map instanceof Map && this.store.map.size > 0) {
255
+ return ids.map(function (id) {
256
+ return _this2.store.map.get(Number(id));
257
+ }).filter(Boolean);
258
+ }
229
259
  var list = (_this$store$scheduleL = this.store.scheduleList) === null || _this$store$scheduleL === void 0 ? void 0 : _this$store$scheduleL.filter(function (n) {
230
260
  return idSet.has(String(n.id));
231
261
  });
@@ -25,6 +25,8 @@ export interface LoadScheduleAvailableDateParams {
25
25
  channel?: string;
26
26
  }
27
27
  export interface ScheduleModuleAPI {
28
+ getScheduleList: () => ScheduleItem[];
29
+ isScheduleListLoaded: () => boolean;
28
30
  }
29
31
  export type ScheduleItem = {
30
32
  /** 颜色 */
@@ -3953,9 +3953,11 @@ var Server = /*#__PURE__*/function () {
3953
3953
  externalSaleNumber = next.external_sale_number;
3954
3954
  shouldClearLocalOrderId = this.isLocalCheckoutOrderId(next.order_id);
3955
3955
  if (shouldClearLocalOrderId) next.order_id = null;
3956
+ // 删除 数据体中的 vouchers,对小票和后端来说他们不需要,这个字段只是单向同步给前端用的,而且目前对订单来说还没什么用
3957
+ delete next.vouchers;
3956
3958
  hasCheckoutOrderNumbers = !this.isBlankCheckoutValue(next.shop_order_number) && !this.isBlankCheckoutValue(next.shop_full_order_number);
3957
3959
  if (!hasCheckoutOrderNumbers) {
3958
- _context42.next = 10;
3960
+ _context42.next = 11;
3959
3961
  break;
3960
3962
  }
3961
3963
  this.logInfo("".concat(title, ": checkout \u5DF2\u643A\u5E26\u8BA2\u5355\u53F7\uFF0C\u8DF3\u8FC7\u67E5\u91CD"), {
@@ -3966,9 +3968,9 @@ var Server = /*#__PURE__*/function () {
3966
3968
  shop_full_order_number: next.shop_full_order_number
3967
3969
  });
3968
3970
  return _context42.abrupt("return", next);
3969
- case 10:
3971
+ case 11:
3970
3972
  if (!this.isBlankCheckoutValue(externalSaleNumber)) {
3971
- _context42.next = 13;
3973
+ _context42.next = 14;
3972
3974
  break;
3973
3975
  }
3974
3976
  if (shouldClearLocalOrderId) {
@@ -3978,9 +3980,9 @@ var Server = /*#__PURE__*/function () {
3978
3980
  });
3979
3981
  }
3980
3982
  return _context42.abrupt("return", next);
3981
- case 13:
3983
+ case 14:
3982
3984
  if (!(!this.order || typeof this.order.getLocalOrderFromMemoryByLookup !== 'function')) {
3983
- _context42.next = 16;
3985
+ _context42.next = 17;
3984
3986
  break;
3985
3987
  }
3986
3988
  if (shouldClearLocalOrderId) {
@@ -3990,11 +3992,11 @@ var Server = /*#__PURE__*/function () {
3990
3992
  });
3991
3993
  }
3992
3994
  return _context42.abrupt("return", next);
3993
- case 16:
3994
- _context42.prev = 16;
3995
+ case 17:
3996
+ _context42.prev = 17;
3995
3997
  localOrder = this.order.getLocalOrderFromMemoryByLookup(externalSaleNumber);
3996
3998
  if (localOrder) {
3997
- _context42.next = 21;
3999
+ _context42.next = 22;
3998
4000
  break;
3999
4001
  }
4000
4002
  if (shouldClearLocalOrderId) {
@@ -4005,7 +4007,7 @@ var Server = /*#__PURE__*/function () {
4005
4007
  });
4006
4008
  }
4007
4009
  return _context42.abrupt("return", next);
4008
- case 21:
4010
+ case 22:
4009
4011
  if (this.isBlankCheckoutValue(next.shop_order_number)) {
4010
4012
  next.shop_order_number = localOrder.shop_order_number;
4011
4013
  }
@@ -4020,12 +4022,10 @@ var Server = /*#__PURE__*/function () {
4020
4022
  shop_order_number: next.shop_order_number,
4021
4023
  shop_full_order_number: next.shop_full_order_number
4022
4024
  });
4023
- // 删除 数据体中的 vouchers,对小票和后端来说他们不需要,这个字段只是单向同步给前端用的,而且目前对订单来说还没什么用
4024
- delete next.vouchers;
4025
4025
  return _context42.abrupt("return", next);
4026
4026
  case 28:
4027
4027
  _context42.prev = 28;
4028
- _context42.t0 = _context42["catch"](16);
4028
+ _context42.t0 = _context42["catch"](17);
4029
4029
  this.logWarning("".concat(title, ": checkout \u67E5\u627E\u672C\u5730\u8BA2\u5355\u5931\u8D25"), {
4030
4030
  external_sale_number: externalSaleNumber,
4031
4031
  error: this.getUnknownErrorMessage(_context42.t0),
@@ -4036,7 +4036,7 @@ var Server = /*#__PURE__*/function () {
4036
4036
  case "end":
4037
4037
  return _context42.stop();
4038
4038
  }
4039
- }, _callee42, this, [[16, 28]]);
4039
+ }, _callee42, this, [[17, 28]]);
4040
4040
  }));
4041
4041
  function normalizeCheckoutSubmitData(_x44, _x45) {
4042
4042
  return _normalizeCheckoutSubmitData.apply(this, arguments);
@@ -15,7 +15,6 @@ export declare class OrderModule extends BaseModule implements Module {
15
15
  private syncTimer?;
16
16
  private isProcessingSyncBatch;
17
17
  private isIdlePhase;
18
- private resourceIdIndex;
19
18
  private logger;
20
19
  private storage;
21
20
  private orderSQLiteSaveQueue; /** 按 storageKey 记录最近一次 SQLite 写入来源与时间,用于去重 */
@@ -32,10 +31,10 @@ export declare class OrderModule extends BaseModule implements Module {
32
31
  private emitOrdersChanged;
33
32
  initialize(core: PisellCore, options?: ModuleOptions): Promise<void>;
34
33
  /**
35
- * 记录信息日志
36
- * @param title 日志标题
37
- * @param metadata 日志元数据
38
- */
34
+ * 记录信息日志
35
+ * @param title 日志标题
36
+ * @param metadata 日志元数据
37
+ */
39
38
  private logInfo;
40
39
  /**
41
40
  * 记录错误日志
@@ -89,7 +88,6 @@ export declare class OrderModule extends BaseModule implements Module {
89
88
  * @returns 刷新后的订单列表
90
89
  */
91
90
  silentRefresh(): Promise<OrderData[]>;
92
- getOrdersByResourceId(resourceId: string | number): OrderData[];
93
91
  private normalizeOrderForMemoryList;
94
92
  /**
95
93
  * 仅覆盖本地已存在的订单;不存在则直接跳过,不落库、不 emit。
@@ -126,7 +124,6 @@ export declare class OrderModule extends BaseModule implements Module {
126
124
  private isBlankIdentityValue;
127
125
  private getOrderIdentityEntries;
128
126
  private getOrderIdentityKeys;
129
- private extractResourceIds;
130
127
  private getOrderDateKey;
131
128
  /**
132
129
  * 初始化 OrderDataSource 实例
@@ -175,6 +172,27 @@ export declare class OrderModule extends BaseModule implements Module {
175
172
  * 将增量订单合并到 store
176
173
  */
177
174
  private mergeOrdersToStore;
175
+ /**
176
+ * 在身份索引中查找与目标订单共享任一身份键的已存在订单下标。
177
+ * 返回所有命中键里最小的下标,等价于原 findOrderIndexByIdentity 的「取首个匹配」语义。
178
+ *
179
+ * @example
180
+ * const idx = this.lookupOrderIndexByIdentityKeys(identityKeyToIndex, freshIdentityKeys)
181
+ */
182
+ private lookupOrderIndexByIdentityKeys;
183
+ /**
184
+ * 将订单的全部身份键登记到索引并指向其在列表中的下标。
185
+ * 合并后订单新增的身份字段(如挂单同步后拿到 order_id)也会被登记。
186
+ *
187
+ * @example
188
+ * this.registerOrderIdentityKeys(identityKeyToIndex, mergedOrder, matchIndex)
189
+ */
190
+ private registerOrderIdentityKeys;
191
+ /**
192
+ * 合并热路径去重兜底:默认直接返回原列表(增量索引已保证无重复)。
193
+ * 仅当 ORDER_MERGE_SELF_CHECK 开启时,额外做一次全表压缩并在发现残留重复时告警。
194
+ */
195
+ private runOrderStoreSelfCheck;
178
196
  private normalizeOrderSyncMessage;
179
197
  private normalizeOrderSyncPayload;
180
198
  private uniqueOrderIds;