@pisell/pisellos 2.3.24 → 2.3.26

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 (69) hide show
  1. package/dist/model/strategy/adapter/index.d.ts +0 -4
  2. package/dist/model/strategy/adapter/index.js +1 -5
  3. package/dist/modules/Discount/index.d.ts +2 -5
  4. package/dist/modules/Discount/index.js +7 -30
  5. package/dist/modules/Discount/types.d.ts +0 -4
  6. package/dist/modules/Order/index.d.ts +4 -2
  7. package/dist/modules/Order/index.js +725 -647
  8. package/dist/modules/Order/types.d.ts +0 -2
  9. package/dist/modules/Product/types.d.ts +0 -22
  10. package/dist/modules/ProductList/index.d.ts +1 -1
  11. package/dist/modules/ProductList/index.js +2 -4
  12. package/dist/modules/ProductList/types.d.ts +0 -2
  13. package/dist/server/index.d.ts +0 -50
  14. package/dist/server/index.js +749 -995
  15. package/dist/server/modules/products/index.d.ts +7 -26
  16. package/dist/server/modules/products/index.js +76 -167
  17. package/dist/server/modules/products/types.d.ts +0 -14
  18. package/dist/solution/BaseSales/index.d.ts +0 -2
  19. package/dist/solution/BaseSales/index.js +50 -36
  20. package/dist/solution/BookingByStep/index.d.ts +1 -1
  21. package/dist/solution/BookingTicket/index.d.ts +1 -13
  22. package/dist/solution/BookingTicket/index.js +21 -5
  23. package/dist/solution/BookingTicket/types.d.ts +0 -2
  24. package/dist/solution/ShopDiscount/index.js +14 -15
  25. package/lib/model/strategy/adapter/index.d.ts +0 -4
  26. package/lib/model/strategy/adapter/index.js +2 -13
  27. package/lib/modules/Discount/index.d.ts +2 -5
  28. package/lib/modules/Discount/index.js +3 -23
  29. package/lib/modules/Discount/types.d.ts +0 -4
  30. package/lib/modules/Order/index.d.ts +4 -2
  31. package/lib/modules/Order/index.js +80 -34
  32. package/lib/modules/Order/types.d.ts +0 -2
  33. package/lib/modules/Product/types.d.ts +0 -22
  34. package/lib/modules/ProductList/index.d.ts +1 -1
  35. package/lib/modules/ProductList/index.js +2 -4
  36. package/lib/modules/ProductList/types.d.ts +0 -2
  37. package/lib/server/index.d.ts +0 -50
  38. package/lib/server/index.js +29 -206
  39. package/lib/server/modules/products/index.d.ts +7 -26
  40. package/lib/server/modules/products/index.js +35 -114
  41. package/lib/server/modules/products/types.d.ts +0 -14
  42. package/lib/solution/BaseSales/index.d.ts +0 -2
  43. package/lib/solution/BaseSales/index.js +22 -12
  44. package/lib/solution/BookingByStep/index.d.ts +1 -1
  45. package/lib/solution/BookingTicket/index.d.ts +1 -13
  46. package/lib/solution/BookingTicket/index.js +18 -1
  47. package/lib/solution/BookingTicket/types.d.ts +0 -2
  48. package/lib/solution/ShopDiscount/index.js +1 -2
  49. package/package.json +1 -1
  50. package/dist/model/strategy/adapter/dataVariant/adapter.d.ts +0 -50
  51. package/dist/model/strategy/adapter/dataVariant/adapter.js +0 -167
  52. package/dist/model/strategy/adapter/dataVariant/evaluator.d.ts +0 -89
  53. package/dist/model/strategy/adapter/dataVariant/evaluator.js +0 -780
  54. package/dist/model/strategy/adapter/dataVariant/examples.d.ts +0 -39
  55. package/dist/model/strategy/adapter/dataVariant/examples.js +0 -277
  56. package/dist/model/strategy/adapter/dataVariant/index.d.ts +0 -4
  57. package/dist/model/strategy/adapter/dataVariant/index.js +0 -4
  58. package/dist/model/strategy/adapter/dataVariant/type.d.ts +0 -148
  59. package/dist/model/strategy/adapter/dataVariant/type.js +0 -54
  60. package/lib/model/strategy/adapter/dataVariant/adapter.d.ts +0 -50
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +0 -149
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.d.ts +0 -89
  63. package/lib/model/strategy/adapter/dataVariant/evaluator.js +0 -583
  64. package/lib/model/strategy/adapter/dataVariant/examples.d.ts +0 -39
  65. package/lib/model/strategy/adapter/dataVariant/examples.js +0 -293
  66. package/lib/model/strategy/adapter/dataVariant/index.d.ts +0 -4
  67. package/lib/model/strategy/adapter/dataVariant/index.js +0 -38
  68. package/lib/model/strategy/adapter/dataVariant/type.d.ts +0 -148
  69. package/lib/model/strategy/adapter/dataVariant/type.js +0 -31
@@ -76,8 +76,6 @@ var Server = class {
76
76
  };
77
77
  // ---- 商品查询订阅者 ----
78
78
  this.productQuerySubscribers = /* @__PURE__ */ new Map();
79
- /** subscriberId → 智能定价变价时间点定时器句柄(与 subscriber 分离存储,便于 clear) */
80
- this.productQueryScheduleTimers = /* @__PURE__ */ new Map();
81
79
  // ---- 订单 / 预约列表查询订阅者 ----
82
80
  this.orderQuerySubscribers = /* @__PURE__ */ new Map();
83
81
  this.bookingQuerySubscribers = /* @__PURE__ */ new Map();
@@ -210,7 +208,7 @@ var Server = class {
210
208
  */
211
209
  this.handleProductQuery = async ({ url, method, data, config }) => {
212
210
  console.log("[Server] handleProductQuery:", url, method, data, config);
213
- const { menu_list_ids, schedule_datetime, schedule_date, customer_id, ids, extension_type, strategy_context } = data;
211
+ const { menu_list_ids, schedule_datetime, schedule_date, customer_id, ids, extension_type } = data;
214
212
  const { callback, subscriberId } = config || {};
215
213
  this.logInfo("handleProductQuery: 开始处理商品查询请求", {
216
214
  menu_list_ids,
@@ -218,32 +216,19 @@ var Server = class {
218
216
  schedule_datetime,
219
217
  schedule_date,
220
218
  customer_id,
221
- extension_type,
222
- strategyContextKeys: strategy_context ? Object.keys(strategy_context) : []
219
+ extension_type
223
220
  });
224
221
  if (subscriberId && typeof callback === "function") {
225
222
  this.productQuerySubscribers.set(subscriberId, {
226
223
  callback,
227
- context: { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type, strategy_context }
224
+ context: { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type }
228
225
  });
229
226
  this.logInfo("handleProductQuery: 已注册订阅者", {
230
227
  subscriberId,
231
228
  totalSubscribers: this.productQuerySubscribers.size
232
229
  });
233
230
  }
234
- const result = await this.computeProductQueryResult({
235
- menu_list_ids,
236
- ids,
237
- schedule_date,
238
- schedule_datetime,
239
- customer_id,
240
- extension_type,
241
- strategy_context
242
- });
243
- if (subscriberId && typeof callback === "function") {
244
- this.syncProductQueryScheduleTimers(subscriberId, strategy_context);
245
- }
246
- return result;
231
+ return this.computeProductQueryResult({ menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type });
247
232
  };
248
233
  /**
249
234
  * 按商品 id 查询单条(GET /shop/product/query/:productId)
@@ -1926,7 +1911,6 @@ var Server = class {
1926
1911
  */
1927
1912
  removeProductQuerySubscriber(subscriberId) {
1928
1913
  if (subscriberId) {
1929
- this.clearSubscriberScheduleTimers(subscriberId);
1930
1914
  this.productQuerySubscribers.delete(subscriberId);
1931
1915
  this.logInfo("removeProductQuerySubscriber: 已移除订阅者", {
1932
1916
  subscriberId,
@@ -1934,156 +1918,6 @@ var Server = class {
1934
1918
  });
1935
1919
  }
1936
1920
  }
1937
- /**
1938
- * 构建商品 query 响应 data 段,附带智能定价 schedule_time_points 元数据。
1939
- */
1940
- buildProductQueryResultPayload(list, count) {
1941
- var _a, _b;
1942
- return {
1943
- list,
1944
- count: count ?? list.length,
1945
- schedule_time_points: ((_b = (_a = this.products) == null ? void 0 : _a.getLastScheduleTimePoints) == null ? void 0 : _b.call(_a)) ?? []
1946
- };
1947
- }
1948
- /**
1949
- * 是否启用商品 query 订阅的 schedule 时间点定时重算。
1950
- * strategy_context.enable_schedule_reload === false 时关闭。
1951
- */
1952
- shouldScheduleProductQueryReload(strategy_context) {
1953
- return (strategy_context == null ? void 0 : strategy_context.enable_schedule_reload) !== false;
1954
- }
1955
- /**
1956
- * 清除指定 subscriber 的全部 schedule 定时器,防止重复 query 或 unsubscribe 后泄漏。
1957
- */
1958
- clearSubscriberScheduleTimers(subscriberId) {
1959
- const timers = this.productQueryScheduleTimers.get(subscriberId);
1960
- if (timers == null ? void 0 : timers.length) {
1961
- timers.forEach((timerId) => clearTimeout(timerId));
1962
- }
1963
- this.productQueryScheduleTimers.delete(subscriberId);
1964
- const subscriber = this.productQuerySubscribers.get(subscriberId);
1965
- if (subscriber) {
1966
- subscriber.scheduleTimerIds = [];
1967
- }
1968
- }
1969
- /**
1970
- * 从 productQueryScheduleTimers 移除已触发的 timer 引用。
1971
- */
1972
- removeScheduleTimerRef(subscriberId, timerId) {
1973
- const timers = this.productQueryScheduleTimers.get(subscriberId);
1974
- if (!(timers == null ? void 0 : timers.length))
1975
- return;
1976
- const next = timers.filter((id) => id !== timerId);
1977
- if (next.length === 0) {
1978
- this.productQueryScheduleTimers.delete(subscriberId);
1979
- } else {
1980
- this.productQueryScheduleTimers.set(subscriberId, next);
1981
- }
1982
- const subscriber = this.productQuerySubscribers.get(subscriberId);
1983
- if (subscriber) {
1984
- subscriber.scheduleTimerIds = next;
1985
- }
1986
- }
1987
- /**
1988
- * 计算 schedule 变价时间点到当前时刻的延迟(ms)。已过期返回 -1。
1989
- */
1990
- computeScheduleTimePointDelayMs(scheduleDate, timePoint) {
1991
- const parts = timePoint.split(":");
1992
- if (parts.length < 2)
1993
- return -1;
1994
- const hours = parseInt(parts[0], 10);
1995
- const minutes = parseInt(parts[1], 10);
1996
- if (!Number.isFinite(hours) || !Number.isFinite(minutes))
1997
- return -1;
1998
- const target = (0, import_dayjs.default)(scheduleDate).hour(hours).minute(minutes).second(4).millisecond(0);
1999
- const delayMs = target.diff((0, import_dayjs.default)());
2000
- return delayMs >= 0 ? delayMs : -1;
2001
- }
2002
- /**
2003
- * 定时重算前刷新 subscriber schedule 上下文:使用执行瞬间时间,禁止沿用首次 query 的 schedule_datetime。
2004
- */
2005
- refreshSubscriberScheduleAtExecution(subscriber) {
2006
- const executedAt = (0, import_dayjs.default)();
2007
- const bookingDate = subscriber.context.schedule_date || executedAt.format("YYYY-MM-DD");
2008
- subscriber.context.schedule_date = bookingDate;
2009
- subscriber.context.schedule_datetime = `${bookingDate} ${executedAt.format("HH:mm:ss")}`;
2010
- }
2011
- /**
2012
- * 为 subscriber 注册智能定价 scheduleTimePoints 定时重算。
2013
- * 必须先 clearSubscriberScheduleTimers,再调用本方法。
2014
- */
2015
- scheduleSubscriberTimePointReloads(subscriberId, timePoints) {
2016
- const subscriber = this.productQuerySubscribers.get(subscriberId);
2017
- if (!subscriber || !timePoints.length)
2018
- return;
2019
- const scheduleDate = subscriber.context.schedule_date || (0, import_dayjs.default)().format("YYYY-MM-DD");
2020
- const timerIds = [];
2021
- for (const timePoint of timePoints) {
2022
- const delayMs = this.computeScheduleTimePointDelayMs(scheduleDate, timePoint);
2023
- if (delayMs < 0)
2024
- continue;
2025
- const timerId = setTimeout(() => {
2026
- void this.onScheduleTimePointTimerFire(subscriberId, timerId);
2027
- }, delayMs);
2028
- timerIds.push(timerId);
2029
- }
2030
- if (timerIds.length > 0) {
2031
- this.productQueryScheduleTimers.set(subscriberId, timerIds);
2032
- subscriber.scheduleTimerIds = timerIds;
2033
- this.logInfo("scheduleSubscriberTimePointReloads: 已注册定时器", {
2034
- subscriberId,
2035
- timerCount: timerIds.length,
2036
- timePoints
2037
- });
2038
- }
2039
- }
2040
- /**
2041
- * schedule 变价时间点定时器触发:刷新 schedule_datetime 后重算并 callback。
2042
- */
2043
- async onScheduleTimePointTimerFire(subscriberId, timerId) {
2044
- this.removeScheduleTimerRef(subscriberId, timerId);
2045
- if (!this.productQuerySubscribers.has(subscriberId))
2046
- return;
2047
- const subscriber = this.productQuerySubscribers.get(subscriberId);
2048
- this.refreshSubscriberScheduleAtExecution(subscriber);
2049
- await this.recomputeAndNotifySubscriber(subscriberId);
2050
- }
2051
- /**
2052
- * 对单个商品 query 订阅者重算并推送(定时路径;不新建 schedule timer)。
2053
- */
2054
- async recomputeAndNotifySubscriber(subscriberId) {
2055
- const subscriber = this.productQuerySubscribers.get(subscriberId);
2056
- if (!subscriber)
2057
- return;
2058
- try {
2059
- const result = await this.computeProductQueryResult(subscriber.context);
2060
- subscriber.callback(result);
2061
- this.logInfo("recomputeAndNotifySubscriber: 已推送", {
2062
- subscriberId,
2063
- schedule_datetime: subscriber.context.schedule_datetime
2064
- });
2065
- } catch (error) {
2066
- const errorMessage = error instanceof Error ? error.message : String(error);
2067
- this.logError("recomputeAndNotifySubscriber: 推送失败", {
2068
- subscriberId,
2069
- error: errorMessage
2070
- });
2071
- }
2072
- }
2073
- /**
2074
- * query 完成后为 subscriber 同步 schedule 定时器(先 clear 再 schedule)。
2075
- */
2076
- syncProductQueryScheduleTimers(subscriberId, strategy_context) {
2077
- var _a, _b;
2078
- this.clearSubscriberScheduleTimers(subscriberId);
2079
- if (!this.shouldScheduleProductQueryReload(strategy_context)) {
2080
- return;
2081
- }
2082
- const timePoints = ((_b = (_a = this.products) == null ? void 0 : _a.getLastScheduleTimePoints) == null ? void 0 : _b.call(_a)) ?? [];
2083
- if (timePoints.length > 0) {
2084
- this.scheduleSubscriberTimePointReloads(subscriberId, timePoints);
2085
- }
2086
- }
2087
1921
  /**
2088
1922
  * 执行 sales 搜索并登记可见订单号。
2089
1923
  * 搜索参数完全透传后端,OS 不做过滤、筛选、排序。
@@ -4277,14 +4111,8 @@ var Server = class {
4277
4111
  */
4278
4112
  async computeProductQueryResult(context, options) {
4279
4113
  const tTotal = performance.now();
4280
- const { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type, product_id, strategy_context } = context;
4114
+ const { menu_list_ids, ids, schedule_date, schedule_datetime, customer_id, extension_type, product_id } = context;
4281
4115
  const queryIds = Array.isArray(ids) ? ids.map((id) => Number(id)).filter((id) => Number.isFinite(id)) : [];
4282
- const formatterContext = this.buildProductFormatterContext({
4283
- schedule_date,
4284
- schedule_datetime,
4285
- customer_id,
4286
- strategy_context
4287
- });
4288
4116
  this.logInfo("computeProductQueryResult 开始", {
4289
4117
  menuListIdsCount: (menu_list_ids == null ? void 0 : menu_list_ids.length) ?? 0,
4290
4118
  ids: queryIds,
@@ -4293,17 +4121,20 @@ var Server = class {
4293
4121
  customer_id,
4294
4122
  extension_type,
4295
4123
  product_id,
4296
- strategyContextKeys: strategy_context ? Object.keys(strategy_context) : [],
4297
4124
  changedIds: options == null ? void 0 : options.changedIds
4298
4125
  });
4299
4126
  if (!this.products) {
4300
4127
  this.logError("computeProductQueryResult: Products 模块未注册");
4301
- return { message: "Products 模块未注册", data: this.buildProductQueryResultPayload([], 0) };
4128
+ return { message: "Products 模块未注册", data: { list: [], count: 0 } };
4302
4129
  }
4303
4130
  if (queryIds.length > 0) {
4304
4131
  const uniqueIds = Array.from(new Set(queryIds));
4305
4132
  const tPrice2 = performance.now();
4306
- const productsWithPrice = await this.products.getProductsWithPrice(schedule_date, formatterContext, {
4133
+ const productsWithPrice = await this.products.getProductsWithPrice(schedule_date, {
4134
+ scheduleModule: this.getSchedule(),
4135
+ schedule_datetime,
4136
+ customer_id
4137
+ }, {
4307
4138
  changedIds: options == null ? void 0 : options.changedIds,
4308
4139
  productIds: uniqueIds
4309
4140
  });
@@ -4324,7 +4155,7 @@ var Server = class {
4324
4155
  });
4325
4156
  return {
4326
4157
  code: 200,
4327
- data: this.buildProductQueryResultPayload(extensionFilteredProducts),
4158
+ data: { list: extensionFilteredProducts, count: extensionFilteredProducts.length },
4328
4159
  message: "",
4329
4160
  status: true
4330
4161
  };
@@ -4332,7 +4163,9 @@ var Server = class {
4332
4163
  if (product_id != null && Number.isFinite(Number(product_id))) {
4333
4164
  const pid = Number(product_id);
4334
4165
  const tPrice2 = performance.now();
4335
- const allProductsWithPrice = await this.products.getProductsWithPrice(schedule_date, formatterContext, {
4166
+ const allProductsWithPrice = await this.products.getProductsWithPrice(schedule_date, {
4167
+ scheduleModule: this.getSchedule()
4168
+ }, {
4336
4169
  changedIds: options == null ? void 0 : options.changedIds
4337
4170
  });
4338
4171
  (0, import_product.perfMark)("computeQuery.getProductsWithPrice(single)", performance.now() - tPrice2, {
@@ -4362,7 +4195,11 @@ var Server = class {
4362
4195
  }
4363
4196
  if (this.shouldQueryProductsByExtensionTypes(extension_type)) {
4364
4197
  const tPrice2 = performance.now();
4365
- let filteredProducts2 = await this.products.getProductsWithPrice(schedule_date, formatterContext, {
4198
+ let filteredProducts2 = await this.products.getProductsWithPrice(schedule_date, {
4199
+ scheduleModule: this.getSchedule(),
4200
+ schedule_datetime,
4201
+ customer_id
4202
+ }, {
4366
4203
  changedIds: options == null ? void 0 : options.changedIds
4367
4204
  });
4368
4205
  (0, import_product.perfMark)("computeQuery.getProductsWithPrice(extensionType)", performance.now() - tPrice2, {
@@ -4402,18 +4239,18 @@ var Server = class {
4402
4239
  });
4403
4240
  return {
4404
4241
  code: 200,
4405
- data: this.buildProductQueryResultPayload(filteredProducts2),
4242
+ data: { list: filteredProducts2, count: filteredProducts2.length },
4406
4243
  message: "",
4407
4244
  status: true
4408
4245
  };
4409
4246
  }
4410
4247
  if (!this.menu) {
4411
4248
  this.logError("computeProductQueryResult: Menu 模块未注册");
4412
- return { message: "Menu 模块未注册", data: this.buildProductQueryResultPayload([], 0) };
4249
+ return { message: "Menu 模块未注册", data: { list: [], count: 0 } };
4413
4250
  }
4414
4251
  if (!this.schedule) {
4415
4252
  this.logError("computeProductQueryResult: Schedule 模块未注册");
4416
- return { message: "Schedule 模块未注册", data: this.buildProductQueryResultPayload([], 0) };
4253
+ return { message: "Schedule 模块未注册", data: { list: [], count: 0 } };
4417
4254
  }
4418
4255
  let activeMenuList = [];
4419
4256
  if (menu_list_ids && Array.isArray(menu_list_ids) && menu_list_ids.length > 0) {
@@ -4437,7 +4274,11 @@ var Server = class {
4437
4274
  isAllProducts: !!productScope.isAllProducts
4438
4275
  });
4439
4276
  const tPrice = performance.now();
4440
- let filteredProducts = scopedProductIds.length > 0 ? await this.products.getProductsWithPrice(schedule_date, formatterContext, {
4277
+ let filteredProducts = scopedProductIds.length > 0 ? await this.products.getProductsWithPrice(schedule_date, {
4278
+ scheduleModule: this.getSchedule(),
4279
+ schedule_datetime,
4280
+ customer_id
4281
+ }, {
4441
4282
  changedIds: options == null ? void 0 : options.changedIds,
4442
4283
  productIds: productScope.isAllProducts ? void 0 : scopedProductIds
4443
4284
  }) : [];
@@ -4480,29 +4321,11 @@ var Server = class {
4480
4321
  });
4481
4322
  return {
4482
4323
  code: 200,
4483
- data: this.buildProductQueryResultPayload(filteredProducts),
4324
+ data: { list: filteredProducts, count: filteredProducts.length },
4484
4325
  message: "",
4485
4326
  status: true
4486
4327
  };
4487
4328
  }
4488
- /**
4489
- * 构建商品格式化上下文。
4490
- *
4491
- * 智能定价条件使用全量 menuList/scheduleList;Product Query 顶层参数只保留筛选商品集合所需字段。
4492
- */
4493
- buildProductFormatterContext(context) {
4494
- var _a, _b, _c, _d;
4495
- const scheduleModule = this.getSchedule();
4496
- return {
4497
- scheduleModule,
4498
- schedule_datetime: context.schedule_datetime,
4499
- customer_id: context.customer_id,
4500
- strategy_context: context.strategy_context,
4501
- menuList: ((_b = (_a = this.menu) == null ? void 0 : _a.getMenuList) == null ? void 0 : _b.call(_a)) || [],
4502
- scheduleList: ((_c = scheduleModule == null ? void 0 : scheduleModule.getScheduleList) == null ? void 0 : _c.call(scheduleModule)) || [],
4503
- dataVariantEvaluator: (_d = this.core.context) == null ? void 0 : _d.dataVariantEvaluator
4504
- };
4505
- }
4506
4329
  /**
4507
4330
  * 数据变更后,遍历所有订阅者重新计算查询结果并通过 callback 推送
4508
4331
  * 由 ProductsModule 的 onProductsSyncCompleted 事件触发
@@ -18,8 +18,7 @@ export declare class ProductsModule extends BaseModule implements Module {
18
18
  private productsPriceCache;
19
19
  private readonly CACHE_MAX_DAYS;
20
20
  private formatters;
21
- private isBuiltinFormatterRegistered;
22
- private isLegacyPriceFormatterEnabled;
21
+ private isPriceFormatterRegistered;
23
22
  private quotationPriceBridge?;
24
23
  private quotationBridgeChannel?;
25
24
  private quotationBridgeLoadedKey?;
@@ -37,8 +36,6 @@ export declare class ProductsModule extends BaseModule implements Module {
37
36
  private lastPreloadCompletedAtMs;
38
37
  /** IndexDB 写入串行队列,避免快照与 patch 并发交错 */
39
38
  private productIndexDBSaveQueue;
40
- /** 最近一次智能定价评估提取的 schedule 变价时间点(HH:mm),供 Server 订阅定时刷新使用 */
41
- private lastScheduleTimePoints;
42
39
  constructor(name?: string, version?: string);
43
40
  initialize(core: PisellCore, options: any): Promise<void>;
44
41
  /**
@@ -111,10 +108,6 @@ export declare class ProductsModule extends BaseModule implements Module {
111
108
  */
112
109
  private prepareProductsWithPrice;
113
110
  private getProductsPriceCacheKey;
114
- /**
115
- * 稳定序列化策略上下文,避免对象 key 顺序不同导致缓存 key 抖动。
116
- */
117
- private stringifyStable;
118
111
  private normalizeProductIds;
119
112
  /**
120
113
  * 按轻量范围返回商品 ID,不做 structuredClone。
@@ -129,26 +122,14 @@ export declare class ProductsModule extends BaseModule implements Module {
129
122
  */
130
123
  private applyFormatters;
131
124
  /**
132
- * 注册内置商品格式化器。
133
- *
134
- * 智能定价默认替代报价单逻辑;报价单 formatter 仅在 enableLegacyPriceFormatter=true 时启用。
125
+ * 注册内置的价格格式化器
126
+ * 这个格式化器负责将价格数据应用到商品上
135
127
  * @private
136
128
  */
137
- private registerBuiltinProductFormatters;
138
- /**
139
- * 是否启用旧报价单价格 formatter。
140
- *
141
- * 默认关闭,避免报价单逻辑覆盖智能定价结果。
142
- */
143
- private shouldEnableLegacyPriceFormatter;
144
- /**
145
- * 返回最近一次 prepareProductsWithPrice / DataVariant 评估提取的变价时间点(HH:mm)。
146
- * 供 OS Server 商品 query 订阅定时刷新使用。
147
- */
148
- getLastScheduleTimePoints(): string[];
129
+ private registerBuiltinPriceFormatter;
149
130
  /**
150
131
  * 注册商品格式化器
151
- * 格式化器会按注册顺序依次执行;legacy 启用时先兜底报价,再由智能定价覆盖。
132
+ * 格式化器会按注册顺序依次执行(内置价格格式化器始终是第一个)
152
133
  * @param formatter 格式化函数
153
134
  * @param prepend 是否插入到队列开头(默认 false,追加到末尾)
154
135
  * @example
@@ -163,8 +144,8 @@ export declare class ProductsModule extends BaseModule implements Module {
163
144
  */
164
145
  registerFormatter(formatter: ProductFormatter, prepend?: boolean): void;
165
146
  /**
166
- * 清空所有格式化器(包括内置智能定价格式化器)
167
- * @param keepBuiltin 是否保留内置智能定价格式化器(默认 true)
147
+ * 清空所有格式化器(包括内置价格格式化器)
148
+ * @param keepBuiltin 是否保留内置价格格式化器(默认 true)
168
149
  */
169
150
  clearFormatters(keepBuiltin?: boolean): void;
170
151
  /**