@pisell/pisellos 2.3.73 → 2.3.75

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 (296) hide show
  1. package/dist/core/index.d.ts +7 -0
  2. package/dist/core/index.js +111 -71
  3. package/dist/model/strategy/adapter/promotion/index.js +9 -0
  4. package/dist/model/strategy/adapter/walletPass/example.js +3 -26
  5. package/dist/model/strategy/strategy-example.js +5 -19
  6. package/dist/modules/Cart/index.js +0 -3
  7. package/dist/modules/Cart/utils/cartProduct.js +0 -1
  8. package/dist/modules/Date/index.js +1 -5
  9. package/dist/modules/Discount/index.js +2 -4
  10. package/dist/modules/OpenData/index.js +0 -2
  11. package/dist/modules/Order/index.d.ts +1 -1
  12. package/dist/modules/Order/index.js +36 -64
  13. package/dist/modules/Payment/index.js +97 -162
  14. package/dist/modules/Quotation/index.d.ts +6 -0
  15. package/dist/modules/Quotation/index.js +75 -19
  16. package/dist/modules/Rules/index.js +1 -4
  17. package/dist/modules/Schedule/index.js +0 -1
  18. package/dist/modules/Schedule/utils.js +0 -1
  19. package/dist/modules/Step/index.js +0 -1
  20. package/dist/plugins/request.d.ts +1 -0
  21. package/dist/plugins/request.js +1 -4
  22. package/dist/plugins/window.js +2 -6
  23. package/dist/server/index.d.ts +8 -2
  24. package/dist/server/index.js +303 -269
  25. package/dist/server/modules/floor-plan/index.d.ts +4 -0
  26. package/dist/server/modules/floor-plan/index.js +240 -98
  27. package/dist/server/modules/menu/index.js +75 -59
  28. package/dist/server/modules/order/index.d.ts +17 -7
  29. package/dist/server/modules/order/index.js +421 -211
  30. package/dist/server/modules/products/index.d.ts +8 -2
  31. package/dist/server/modules/products/index.js +191 -117
  32. package/dist/server/modules/quotation/index.js +29 -38
  33. package/dist/server/modules/resource/index.js +24 -17
  34. package/dist/server/modules/schedule/index.js +27 -35
  35. package/dist/server/utils/product.js +0 -1
  36. package/dist/solution/BaseSales/index.js +38 -41
  37. package/dist/solution/BookingByStep/index.d.ts +1 -1
  38. package/dist/solution/BookingByStep/index.js +7 -59
  39. package/dist/solution/BookingByStep/utils/capacity.js +1 -11
  40. package/dist/solution/BookingByStep/utils/resources.js +1 -3
  41. package/dist/solution/BookingByStep/utils/timeslots.js +2 -43
  42. package/dist/solution/BookingTicket/index.js +0 -2
  43. package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +6 -7
  44. package/dist/solution/BookingTicket/utils/scan/handleScan.js +25 -31
  45. package/dist/solution/BookingTicket/utils/scan/index.js +6 -10
  46. package/dist/solution/BuyTickets/index.js +9 -12
  47. package/dist/solution/Checkout/index.js +177 -252
  48. package/dist/solution/Checkout/utils/index.js +4 -16
  49. package/dist/solution/RegisterAndLogin/index.js +30 -76
  50. package/dist/solution/ScanOrder/index.js +50 -60
  51. package/dist/solution/ShopDiscount/index.js +2 -7
  52. package/dist/solution/VenueBooking/index.js +45 -55
  53. package/dist/utils/task.js +15 -18
  54. package/dist/utils/watch.js +0 -1
  55. package/lib/apis/picoding.js +2 -0
  56. package/lib/core/index.d.ts +7 -0
  57. package/lib/core/index.js +149 -131
  58. package/lib/effects/index.js +46 -57
  59. package/lib/index.js +82 -49
  60. package/lib/model/index.js +14 -21
  61. package/lib/model/strategy/adapter/dataVariant/adapter.js +38 -50
  62. package/lib/model/strategy/adapter/dataVariant/evaluator.js +162 -236
  63. package/lib/model/strategy/adapter/dataVariant/examples.js +229 -237
  64. package/lib/model/strategy/adapter/dataVariant/index.js +39 -34
  65. package/lib/model/strategy/adapter/dataVariant/type.js +57 -28
  66. package/lib/model/strategy/adapter/index.js +100 -64
  67. package/lib/model/strategy/adapter/itemRule/adapter.js +156 -144
  68. package/lib/model/strategy/adapter/itemRule/evaluator.js +36 -48
  69. package/lib/model/strategy/adapter/itemRule/examples.js +295 -225
  70. package/lib/model/strategy/adapter/itemRule/index.js +83 -57
  71. package/lib/model/strategy/adapter/itemRule/type.js +97 -36
  72. package/lib/model/strategy/adapter/promotion/adapter.js +91 -69
  73. package/lib/model/strategy/adapter/promotion/evaluator.js +444 -310
  74. package/lib/model/strategy/adapter/promotion/examples.js +222 -234
  75. package/lib/model/strategy/adapter/promotion/index.js +1 -0
  76. package/lib/model/strategy/adapter/promotion/type.js +243 -36
  77. package/lib/model/strategy/adapter/type.js +4 -16
  78. package/lib/model/strategy/adapter/walletPass/evaluator.js +180 -150
  79. package/lib/model/strategy/adapter/walletPass/example.js +217 -190
  80. package/lib/model/strategy/adapter/walletPass/index.js +75 -51
  81. package/lib/model/strategy/adapter/walletPass/locales.js +36 -58
  82. package/lib/model/strategy/adapter/walletPass/type.js +4 -16
  83. package/lib/model/strategy/adapter/walletPass/utils.js +588 -378
  84. package/lib/model/strategy/engine.js +270 -168
  85. package/lib/model/strategy/index.js +49 -34
  86. package/lib/model/strategy/strategy-example.js +243 -239
  87. package/lib/model/strategy/type.js +100 -40
  88. package/lib/modules/Account/index.js +39 -53
  89. package/lib/modules/Account/types.js +20 -33
  90. package/lib/modules/AccountList/index.js +116 -154
  91. package/lib/modules/AccountList/types.js +30 -31
  92. package/lib/modules/AccountList/utils.js +18 -30
  93. package/lib/modules/BaseModule.js +23 -42
  94. package/lib/modules/BookingContext/index.js +158 -136
  95. package/lib/modules/BookingContext/types.js +46 -32
  96. package/lib/modules/BookingContext/utils/buildCacheItemFromOrderLine.js +138 -146
  97. package/lib/modules/BookingContext/utils/buildNormalProductCacheItemFromOrderLine.js +78 -83
  98. package/lib/modules/BookingContext/utils/cacheItemToBookingInput.js +170 -150
  99. package/lib/modules/BookingContext/utils/flexible.js +38 -55
  100. package/lib/modules/BookingContext/utils/formatResourceList.js +19 -34
  101. package/lib/modules/BookingContext/utils/index.js +124 -41
  102. package/lib/modules/BookingContext/utils/noResource.js +58 -70
  103. package/lib/modules/BookingContext/utils/orderLineDisplay.js +14 -41
  104. package/lib/modules/BookingContext/utils/productExtend.js +202 -155
  105. package/lib/modules/BookingContext/utils/resourceErrors.js +53 -53
  106. package/lib/modules/BookingContext/utils/resourceSelection.js +19 -41
  107. package/lib/modules/BookingContext/utils/resources.js +209 -167
  108. package/lib/modules/BookingContext/utils/serviceTimes.js +115 -116
  109. package/lib/modules/BookingContext/utils/timeSlices.js +76 -86
  110. package/lib/modules/Cart/index.js +170 -124
  111. package/lib/modules/Cart/types.js +46 -51
  112. package/lib/modules/Cart/utils/cartAccount.js +40 -39
  113. package/lib/modules/Cart/utils/cartDate.js +56 -61
  114. package/lib/modules/Cart/utils/cartDiscount.js +28 -33
  115. package/lib/modules/Cart/utils/cartNote.js +27 -32
  116. package/lib/modules/Cart/utils/cartProduct.js +321 -251
  117. package/lib/modules/Cart/utils/cartRelationForms.js +29 -35
  118. package/lib/modules/Cart/utils/cartResource.js +70 -78
  119. package/lib/modules/Cart/utils/changePrice.js +22 -50
  120. package/lib/modules/Cart/utils/index.js +106 -48
  121. package/lib/modules/Customer/constants.js +13 -34
  122. package/lib/modules/Customer/index.js +235 -172
  123. package/lib/modules/Customer/types.js +38 -35
  124. package/lib/modules/Date/index.js +116 -115
  125. package/lib/modules/Date/types.js +16 -28
  126. package/lib/modules/Date/utils.js +174 -123
  127. package/lib/modules/Discount/index.js +122 -127
  128. package/lib/modules/Discount/types.js +9 -31
  129. package/lib/modules/Guests/index.js +30 -56
  130. package/lib/modules/Guests/types.js +23 -33
  131. package/lib/modules/Holder/index.js +209 -189
  132. package/lib/modules/Holder/types.js +4 -16
  133. package/lib/modules/Holder/utils.js +20 -49
  134. package/lib/modules/OpenData/index.js +70 -76
  135. package/lib/modules/OpenData/types.js +4 -16
  136. package/lib/modules/OpenData/utils.js +44 -78
  137. package/lib/modules/Order/index.d.ts +1 -1
  138. package/lib/modules/Order/index.js +1713 -2118
  139. package/lib/modules/Order/payment-utils.js +77 -120
  140. package/lib/modules/Order/types.js +88 -35
  141. package/lib/modules/Order/utils/bundleDiscountHydration.js +41 -74
  142. package/lib/modules/Order/utils/discountProductLineIdentity.js +142 -100
  143. package/lib/modules/Order/utils/manualProductDiscount.js +124 -123
  144. package/lib/modules/Order/utils/orderCollectionIdentity.js +184 -244
  145. package/lib/modules/Order/utils.js +814 -647
  146. package/lib/modules/Payment/cash.js +20 -33
  147. package/lib/modules/Payment/cashRecommendationAlgorithm.js +145 -76
  148. package/lib/modules/Payment/eftpos.js +16 -30
  149. package/lib/modules/Payment/index.js +532 -399
  150. package/lib/modules/Payment/mx51.js +1 -0
  151. package/lib/modules/Payment/types.js +230 -108
  152. package/lib/modules/Payment/utils.js +52 -51
  153. package/lib/modules/Payment/walletpass.js +485 -660
  154. package/lib/modules/Product/index.js +51 -46
  155. package/lib/modules/Product/types.js +4 -16
  156. package/lib/modules/Product/utils.js +32 -33
  157. package/lib/modules/ProductList/index.js +113 -123
  158. package/lib/modules/ProductList/types.js +9 -31
  159. package/lib/modules/Quotation/index.d.ts +6 -0
  160. package/lib/modules/Quotation/index.js +110 -103
  161. package/lib/modules/Quotation/types.js +4 -16
  162. package/lib/modules/Resource/index.js +27 -59
  163. package/lib/modules/Resource/types.js +22 -32
  164. package/lib/modules/Resource/utils.js +30 -38
  165. package/lib/modules/ResourcePlanner/index.js +25 -23
  166. package/lib/modules/ResourcePlanner/localClock.js +54 -119
  167. package/lib/modules/ResourcePlanner/planner.js +589 -770
  168. package/lib/modules/ResourcePlanner/types.js +10 -29
  169. package/lib/modules/Rules/index.js +1218 -959
  170. package/lib/modules/Rules/types.js +17 -40
  171. package/lib/modules/SalesSummary/index.js +85 -90
  172. package/lib/modules/SalesSummary/types.js +4 -16
  173. package/lib/modules/SalesSummary/utils.js +355 -430
  174. package/lib/modules/ScanOrderLogger/index.js +59 -79
  175. package/lib/modules/ScanOrderLogger/providers/feishu.js +54 -78
  176. package/lib/modules/ScanOrderLogger/providers/grafana.js +13 -36
  177. package/lib/modules/ScanOrderLogger/types.js +4 -16
  178. package/lib/modules/Schedule/getDateIsInSchedule.js +334 -163
  179. package/lib/modules/Schedule/index.js +100 -114
  180. package/lib/modules/Schedule/type.js +4 -16
  181. package/lib/modules/Schedule/types.js +4 -16
  182. package/lib/modules/Schedule/utils.js +433 -291
  183. package/lib/modules/Step/index.js +40 -52
  184. package/lib/modules/Step/tyeps.js +4 -16
  185. package/lib/modules/Summary/index.js +66 -71
  186. package/lib/modules/Summary/types.js +4 -16
  187. package/lib/modules/Summary/utils.js +773 -418
  188. package/lib/modules/SurchargeList/index.js +46 -60
  189. package/lib/modules/SurchargeList/types.js +4 -16
  190. package/lib/modules/index.js +245 -63
  191. package/lib/plugins/app.js +4 -16
  192. package/lib/plugins/index.js +36 -25
  193. package/lib/plugins/request.d.ts +1 -0
  194. package/lib/plugins/request.js +137 -126
  195. package/lib/plugins/shopStore.js +4 -16
  196. package/lib/plugins/user.js +4 -16
  197. package/lib/plugins/window.js +171 -179
  198. package/lib/server/index.d.ts +8 -2
  199. package/lib/server/index.js +3083 -2663
  200. package/lib/server/modules/floor-plan/index.d.ts +4 -0
  201. package/lib/server/modules/floor-plan/index.js +159 -127
  202. package/lib/server/modules/floor-plan/types.js +15 -30
  203. package/lib/server/modules/index.js +106 -68
  204. package/lib/server/modules/menu/index.js +170 -124
  205. package/lib/server/modules/menu/types.js +18 -31
  206. package/lib/server/modules/order/index.d.ts +17 -7
  207. package/lib/server/modules/order/index.js +916 -977
  208. package/lib/server/modules/order/types.js +122 -33
  209. package/lib/server/modules/order/utils/filterBookings.js +219 -194
  210. package/lib/server/modules/order/utils/filterOrders.js +118 -92
  211. package/lib/server/modules/payment/index.js +59 -83
  212. package/lib/server/modules/payment/types.js +4 -16
  213. package/lib/server/modules/products/index.d.ts +8 -2
  214. package/lib/server/modules/products/index.js +656 -471
  215. package/lib/server/modules/products/types.js +44 -34
  216. package/lib/server/modules/quotation/index.js +137 -172
  217. package/lib/server/modules/quotation/types.js +21 -31
  218. package/lib/server/modules/resource/index.js +225 -186
  219. package/lib/server/modules/resource/types.js +42 -33
  220. package/lib/server/modules/schedule/index.js +135 -123
  221. package/lib/server/modules/schedule/types.js +14 -21
  222. package/lib/server/modules/schedule/utils.js +334 -163
  223. package/lib/server/types.js +4 -16
  224. package/lib/server/utils/index.js +25 -23
  225. package/lib/server/utils/product.js +196 -139
  226. package/lib/server/utils/schedule.js +34 -41
  227. package/lib/server/utils/small-ticket.js +479 -456
  228. package/lib/server/utils/time.js +40 -49
  229. package/lib/solution/BaseSales/index.js +1186 -1410
  230. package/lib/solution/BaseSales/types.js +42 -38
  231. package/lib/solution/BaseSales/utils/cartPromotion.js +642 -498
  232. package/lib/solution/BaseSales/utils/parseSalesResponse.js +85 -105
  233. package/lib/solution/BaseSales/utils/quotationPrice.js +56 -114
  234. package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +108 -145
  235. package/lib/solution/BaseSales/utils.js +158 -143
  236. package/lib/solution/BookingByStep/index.d.ts +1 -1
  237. package/lib/solution/BookingByStep/index.js +1527 -1340
  238. package/lib/solution/BookingByStep/types.js +40 -99
  239. package/lib/solution/BookingByStep/utils/capacity.js +192 -160
  240. package/lib/solution/BookingByStep/utils/products.js +42 -52
  241. package/lib/solution/BookingByStep/utils/resources.js +527 -330
  242. package/lib/solution/BookingByStep/utils/stock.js +65 -44
  243. package/lib/solution/BookingByStep/utils/timeslots.js +129 -131
  244. package/lib/solution/BookingTicket/index.js +607 -522
  245. package/lib/solution/BookingTicket/types.js +99 -77
  246. package/lib/solution/BookingTicket/utils/addProductDecision.js +226 -189
  247. package/lib/solution/BookingTicket/utils/addTimeAvailability.js +58 -89
  248. package/lib/solution/BookingTicket/utils/bookingStatus.js +107 -78
  249. package/lib/solution/BookingTicket/utils/cartView.js +114 -99
  250. package/lib/solution/BookingTicket/utils/exampleData.js +185 -0
  251. package/lib/solution/BookingTicket/utils/orderCustomer.js +18 -41
  252. package/lib/solution/BookingTicket/utils/resolveBestAddTimePlan.js +219 -86
  253. package/lib/solution/BookingTicket/utils/scan/applyGlobalScan.js +168 -116
  254. package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +79 -91
  255. package/lib/solution/BookingTicket/utils/scan/formatGlobalScan.js +54 -41
  256. package/lib/solution/BookingTicket/utils/scan/handleScan.js +84 -81
  257. package/lib/solution/BookingTicket/utils/scan/index.js +98 -104
  258. package/lib/solution/BookingTicket/utils/scan/scanCache.js +90 -43
  259. package/lib/solution/BookingTicket/utils/scan/scanProductValues.js +52 -64
  260. package/lib/solution/BookingTicket/utils/sessionCatalogStale.js +56 -58
  261. package/lib/solution/BookingTicket/utils/weighingProductSku.js +34 -48
  262. package/lib/solution/BuyTickets/index.js +67 -70
  263. package/lib/solution/BuyTickets/types.js +22 -38
  264. package/lib/solution/Checkout/index.js +1451 -1158
  265. package/lib/solution/Checkout/types.js +91 -61
  266. package/lib/solution/Checkout/utils/index.js +228 -156
  267. package/lib/solution/PlaceOrder/index.js +55 -0
  268. package/lib/solution/RegisterAndLogin/config.js +493 -460
  269. package/lib/solution/RegisterAndLogin/index.js +633 -630
  270. package/lib/solution/RegisterAndLogin/types.js +189 -76
  271. package/lib/solution/RegisterAndLogin/utils.js +183 -125
  272. package/lib/solution/Sales/index.js +328 -324
  273. package/lib/solution/Sales/types.js +27 -33
  274. package/lib/solution/ScanOrder/index.js +832 -864
  275. package/lib/solution/ScanOrder/types.js +33 -34
  276. package/lib/solution/ScanOrder/utils.js +409 -374
  277. package/lib/solution/ShopDiscount/index.js +226 -232
  278. package/lib/solution/ShopDiscount/types.js +15 -37
  279. package/lib/solution/ShopDiscount/utils.js +300 -172
  280. package/lib/solution/UnifiedBookingSales/index.js +1035 -1201
  281. package/lib/solution/UnifiedBookingSales/remoteOccupancyCache.js +99 -159
  282. package/lib/solution/UnifiedBookingSales/types.js +10 -32
  283. package/lib/solution/VenueBooking/index.js +811 -879
  284. package/lib/solution/VenueBooking/types.js +19 -39
  285. package/lib/solution/VenueBooking/utils/dateSummary.js +27 -56
  286. package/lib/solution/VenueBooking/utils/resource.js +31 -54
  287. package/lib/solution/VenueBooking/utils/slotMerge.js +94 -107
  288. package/lib/solution/VenueBooking/utils/timeSlot.js +132 -132
  289. package/lib/solution/VenueBooking/utils.js +130 -67
  290. package/lib/solution/index.js +124 -41
  291. package/lib/store/createStore.js +32 -29
  292. package/lib/types/index.js +4 -16
  293. package/lib/utils/payment-number.js +26 -46
  294. package/lib/utils/task.js +36 -36
  295. package/lib/utils/watch.js +81 -47
  296. package/package.json +2 -1
@@ -10,6 +10,7 @@ export declare class FloorPlanModule extends BaseModule implements Module {
10
10
  private store;
11
11
  private request;
12
12
  private logger;
13
+ private dbManager;
13
14
  private floorPlanDataSource;
14
15
  private pendingSyncMessages;
15
16
  private syncTimer?;
@@ -28,6 +29,9 @@ export declare class FloorPlanModule extends BaseModule implements Module {
28
29
  private mergeItems;
29
30
  private removeByIds;
30
31
  private loadListFromServer;
32
+ private loadListFromSQLite;
33
+ private saveListToSQLite;
34
+ private refreshListFromServer;
31
35
  fetchByIdFromServer(id: number | string): Promise<FloorPlanItem | null>;
32
36
  fetchByCodeFromServer(code: string): Promise<FloorPlanItem | null>;
33
37
  preload(): Promise<void>;
@@ -1,101 +1,93 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/floor-plan/index.ts
20
- var floor_plan_exports = {};
21
- __export(floor_plan_exports, {
22
- FloorPlanModule: () => FloorPlanModule
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(floor_plan_exports);
25
- var import_BaseModule = require("../../../modules/BaseModule");
26
- var import_types = require("./types");
27
- var FLOOR_PLAN_SYNC_DEBOUNCE_MS = 3e3;
28
- var FloorPlanModule = class extends import_BaseModule.BaseModule {
6
+ exports.FloorPlanModule = void 0;
7
+ var _BaseModule = require("../../../modules/BaseModule");
8
+ var _types = require("./types");
9
+ const FLOOR_PLAN_SYNC_DEBOUNCE_MS = 3000;
10
+ const FLOOR_PLAN_STORE_NAME = 'floor_plans';
11
+
12
+ /**
13
+ * 平面图模块:预加载列表、pubsub 同步、供 OS Server 路由读本地 store
14
+ */
15
+ class FloorPlanModule extends _BaseModule.BaseModule {
16
+ defaultName = 'floor_plan';
17
+ defaultVersion = '1.0.0';
18
+ store;
19
+ request;
20
+ logger;
21
+ dbManager;
22
+ floorPlanDataSource;
23
+ pendingSyncMessages = [];
24
+ syncTimer;
29
25
  constructor(name, version) {
30
26
  super(name, version);
31
- this.defaultName = "floor_plan";
32
- this.defaultVersion = "1.0.0";
33
- this.pendingSyncMessages = [];
34
27
  }
35
28
  async initialize(core, options) {
36
- var _a;
37
29
  this.core = core;
38
30
  this.store = options.store;
39
- if (Array.isArray((_a = options == null ? void 0 : options.initialState) == null ? void 0 : _a.list) && options.initialState.list.length > 0) {
31
+ if (Array.isArray(options?.initialState?.list) && options.initialState.list.length > 0) {
40
32
  this.store.list = options.initialState.list;
41
33
  this.syncMaps();
42
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
34
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.store.list);
43
35
  } else {
44
36
  this.store.list = [];
45
- this.store.map = /* @__PURE__ */ new Map();
46
- this.store.codeMap = /* @__PURE__ */ new Map();
37
+ this.store.map = new Map();
38
+ this.store.codeMap = new Map();
47
39
  }
48
- this.request = core.getPlugin("request");
49
- const appPlugin = core.getPlugin("app");
40
+ this.request = core.getPlugin('request');
41
+ const appPlugin = core.getPlugin('app');
50
42
  if (appPlugin) {
51
43
  const app = appPlugin.getApp();
52
44
  this.logger = app.logger;
45
+ this.dbManager = app.sqlite || app.dbManager;
53
46
  }
54
47
  this.initFloorPlanDataSource();
55
48
  this.setupFloorPlanSync();
56
49
  }
57
50
  logInfo(title, metadata) {
58
- var _a, _b;
59
51
  try {
60
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
61
- type: "info",
52
+ this.logger?.addLog?.({
53
+ type: 'info',
62
54
  title: `[FloorPlanModule] ${title}`,
63
55
  metadata: metadata || {}
64
56
  });
65
57
  } catch {
58
+ // ignore
66
59
  }
67
60
  }
68
61
  logWarning(title, metadata) {
69
- var _a, _b;
70
62
  try {
71
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
72
- type: "warning",
63
+ this.logger?.addLog?.({
64
+ type: 'warning',
73
65
  title: `[FloorPlanModule] ${title}`,
74
66
  metadata: metadata || {}
75
67
  });
76
68
  } catch {
69
+ // ignore
77
70
  }
78
71
  }
79
72
  logError(title, metadata) {
80
- var _a, _b;
81
73
  try {
82
- (_b = (_a = this.logger) == null ? void 0 : _a.addLog) == null ? void 0 : _b.call(_a, {
83
- type: "error",
74
+ this.logger?.addLog?.({
75
+ type: 'error',
84
76
  title: `[FloorPlanModule] ${title}`,
85
77
  metadata: metadata || {}
86
78
  });
87
79
  } catch {
80
+ // ignore
88
81
  }
89
82
  }
90
83
  idKey(id) {
91
84
  return String(id);
92
85
  }
93
86
  syncMaps() {
94
- this.store.map = /* @__PURE__ */ new Map();
95
- this.store.codeMap = /* @__PURE__ */ new Map();
87
+ this.store.map = new Map();
88
+ this.store.codeMap = new Map();
96
89
  for (const item of this.store.list) {
97
- if ((item == null ? void 0 : item.id) == null)
98
- continue;
90
+ if (item?.id == null) continue;
99
91
  const key = this.idKey(item.id);
100
92
  this.store.map.set(key, item);
101
93
  if (item.code) {
@@ -103,12 +95,12 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
103
95
  }
104
96
  }
105
97
  }
98
+
106
99
  /** 与接口约定一致:sort 升序,id 降序 */
107
100
  getSortedList() {
108
101
  return [...this.store.list].sort((a, b) => {
109
102
  const sortDiff = Number(a.sort ?? 0) - Number(b.sort ?? 0);
110
- if (sortDiff !== 0)
111
- return sortDiff;
103
+ if (sortDiff !== 0) return sortDiff;
112
104
  return Number(b.id) - Number(a.id);
113
105
  });
114
106
  }
@@ -119,56 +111,92 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
119
111
  return this.store.codeMap.get(String(code));
120
112
  }
121
113
  replaceStore(list) {
122
- this.store.list = list.map((i) => ({ ...i }));
114
+ this.store.list = list.map(i => ({
115
+ ...i
116
+ }));
123
117
  this.syncMaps();
124
118
  }
125
119
  mergeItems(items) {
126
- if (items.length === 0)
127
- return;
120
+ if (items.length === 0) return;
128
121
  const byId = new Map(this.store.map);
129
122
  for (const item of items) {
130
- if ((item == null ? void 0 : item.id) == null)
131
- continue;
132
- byId.set(this.idKey(item.id), { ...item });
123
+ if (item?.id == null) continue;
124
+ byId.set(this.idKey(item.id), {
125
+ ...item
126
+ });
133
127
  }
134
128
  this.store.list = Array.from(byId.values());
135
129
  this.syncMaps();
136
130
  }
137
131
  removeByIds(ids) {
138
- if (ids.length === 0)
139
- return;
140
- const set = new Set(ids.map((id) => this.idKey(id)));
141
- this.store.list = this.store.list.filter((p) => !set.has(this.idKey(p.id)));
132
+ if (ids.length === 0) return;
133
+ const set = new Set(ids.map(id => this.idKey(id)));
134
+ this.store.list = this.store.list.filter(p => !set.has(this.idKey(p.id)));
142
135
  this.syncMaps();
143
136
  }
144
137
  async loadListFromServer() {
145
138
  try {
146
- const res = await this.request.get(
147
- `/schedule/floor-plan`,
148
- {},
149
- { isShopApi: true }
150
- );
139
+ const res = await this.request.get(`/schedule/floor-plan`, {}, {
140
+ isShopApi: true
141
+ });
151
142
  const body = res;
152
- const raw = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
143
+ const raw = body?.data !== undefined ? body.data : body;
153
144
  const list = Array.isArray(raw) ? raw : [];
154
145
  return list;
155
146
  } catch (e) {
156
- this.logWarning("loadListFromServer 失败", {
147
+ this.logWarning('loadListFromServer 失败', {
157
148
  error: e instanceof Error ? e.message : String(e)
158
149
  });
159
150
  return [];
160
151
  }
161
152
  }
153
+ async loadListFromSQLite() {
154
+ if (!this.dbManager) return [];
155
+ try {
156
+ const list = await this.dbManager.getAll(FLOOR_PLAN_STORE_NAME);
157
+ return Array.isArray(list) ? list : [];
158
+ } catch (error) {
159
+ this.logWarning('从 SQLite 读取平面图失败', {
160
+ error: error instanceof Error ? error.message : String(error)
161
+ });
162
+ return [];
163
+ }
164
+ }
165
+ async saveListToSQLite(list) {
166
+ if (!this.dbManager) return;
167
+ try {
168
+ await this.dbManager.clear(FLOOR_PLAN_STORE_NAME);
169
+ if (list.length > 0) {
170
+ await this.dbManager.bulkAdd(FLOOR_PLAN_STORE_NAME, list);
171
+ }
172
+ } catch (error) {
173
+ this.logWarning('保存平面图到 SQLite 失败', {
174
+ count: list.length,
175
+ error: error instanceof Error ? error.message : String(error)
176
+ });
177
+ }
178
+ }
179
+ async refreshListFromServer() {
180
+ const list = await this.loadListFromServer();
181
+ if (list.length === 0) {
182
+ this.logWarning('远端平面图刷新完成但列表为空');
183
+ return;
184
+ }
185
+ this.replaceStore(list);
186
+ await this.saveListToSQLite(list);
187
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
188
+ this.logInfo('远端平面图刷新完成', {
189
+ count: list.length
190
+ });
191
+ }
162
192
  async fetchByIdFromServer(id) {
163
193
  try {
164
- const res = await this.request.get(
165
- `/schedule/floor-plan/${id}`,
166
- {},
167
- { isShopApi: true }
168
- );
194
+ const res = await this.request.get(`/schedule/floor-plan/${id}`, {}, {
195
+ isShopApi: true
196
+ });
169
197
  const body = res;
170
- const data = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
171
- return data && typeof data === "object" ? data : null;
198
+ const data = body?.data !== undefined ? body.data : body;
199
+ return data && typeof data === 'object' ? data : null;
172
200
  } catch {
173
201
  return null;
174
202
  }
@@ -176,81 +204,88 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
176
204
  async fetchByCodeFromServer(code) {
177
205
  try {
178
206
  const enc = encodeURIComponent(code);
179
- const res = await this.request.get(
180
- `/schedule/floor-plan/code/${enc}`,
181
- {},
182
- { isShopApi: true }
183
- );
207
+ const res = await this.request.get(`/schedule/floor-plan/code/${enc}`, {}, {
208
+ isShopApi: true
209
+ });
184
210
  const body = res;
185
- const data = (body == null ? void 0 : body.data) !== void 0 ? body.data : body;
186
- return data && typeof data === "object" ? data : null;
211
+ const data = body?.data !== undefined ? body.data : body;
212
+ return data && typeof data === 'object' ? data : null;
187
213
  } catch {
188
214
  return null;
189
215
  }
190
216
  }
191
217
  async preload() {
192
- this.logInfo("开始预加载平面图列表");
193
- const list = await this.loadListFromServer();
194
- if (list.length > 0) {
195
- this.replaceStore(list);
196
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
197
- this.logInfo("预加载完成", { count: list.length });
198
- } else {
199
- this.logWarning("预加载完成但列表为空");
218
+ this.logInfo('开始预加载平面图列表');
219
+ const cachedList = await this.loadListFromSQLite();
220
+ if (cachedList.length > 0) {
221
+ this.replaceStore(cachedList);
222
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
223
+ this.logInfo('预加载完成(SQLite)', {
224
+ count: cachedList.length
225
+ });
226
+
227
+ // 二次启动立即使用本地平面图,远端刷新完成后自动更新 store 与订阅者。
228
+ void this.refreshListFromServer().catch(error => {
229
+ this.logWarning('后台刷新平面图失败,继续使用本地数据', {
230
+ error: error instanceof Error ? error.message : String(error)
231
+ });
232
+ });
233
+ return;
200
234
  }
235
+
236
+ // 首次启动没有缓存时仍等待一次远端请求,并为后续启动建立缓存。
237
+ await this.refreshListFromServer();
201
238
  }
202
239
  initFloorPlanDataSource() {
203
- var _a, _b;
204
- const Ctor = (_b = (_a = this.core.serverOptions) == null ? void 0 : _a.All_DATA_SOURCES) == null ? void 0 : _b.FloorPlanDataSource;
240
+ const Ctor = this.core.serverOptions?.All_DATA_SOURCES?.FloorPlanDataSource;
205
241
  if (!Ctor) {
206
- this.logWarning("FloorPlanDataSource 不可用,跳过 pubsub 同步");
242
+ this.logWarning('FloorPlanDataSource 不可用,跳过 pubsub 同步');
207
243
  return;
208
244
  }
209
245
  this.floorPlanDataSource = new Ctor();
210
- this.logInfo("FloorPlanDataSource 实例已创建");
246
+ this.logInfo('FloorPlanDataSource 实例已创建');
211
247
  }
212
248
  setupFloorPlanSync() {
213
- if (!this.floorPlanDataSource)
214
- return;
249
+ if (!this.floorPlanDataSource) return;
215
250
  const flush = () => {
216
- if (this.syncTimer)
217
- clearTimeout(this.syncTimer);
251
+ if (this.syncTimer) clearTimeout(this.syncTimer);
218
252
  this.syncTimer = setTimeout(() => {
219
253
  this.processFloorPlanSyncMessages();
220
254
  }, FLOOR_PLAN_SYNC_DEBOUNCE_MS);
221
255
  };
222
256
  this.floorPlanDataSource.run({
223
257
  pubsub: {
224
- callback: (res) => {
225
- const data = (res == null ? void 0 : res.data) || res;
226
- if (!data || data.module !== "floor_plan")
227
- return;
228
- this.pendingSyncMessages.push({ ...data });
258
+ callback: res => {
259
+ const data = res?.data || res;
260
+ if (!data || data.module !== 'floor_plan') return;
261
+ this.pendingSyncMessages.push({
262
+ ...data
263
+ });
229
264
  flush();
230
265
  }
231
266
  }
232
- }).catch((err) => {
233
- this.logError("setupFloorPlanSync: DataSource run 出错", {
267
+ }).catch(err => {
268
+ this.logError('setupFloorPlanSync: DataSource run 出错', {
234
269
  error: err instanceof Error ? err.message : String(err)
235
270
  });
236
271
  });
237
- this.logInfo("floor_plan pubsub 订阅已建立");
272
+ this.logInfo('floor_plan pubsub 订阅已建立');
238
273
  }
239
274
  async processFloorPlanSyncMessages() {
240
- var _a, _b;
241
275
  const messages = [...this.pendingSyncMessages];
242
276
  this.pendingSyncMessages = [];
243
- if (messages.length === 0)
244
- return;
245
- this.logInfo("processFloorPlanSyncMessages 开始", { count: messages.length });
277
+ if (messages.length === 0) return;
278
+ this.logInfo('processFloorPlanSyncMessages 开始', {
279
+ count: messages.length
280
+ });
246
281
  let changed = false;
247
282
  const deleteIds = [];
248
283
  const bodyItems = [];
249
284
  let needFullList = false;
250
- const partialIds = /* @__PURE__ */ new Set();
285
+ const partialIds = new Set();
251
286
  for (const msg of messages) {
252
- if (msg.operation === "delete" || msg.action === "delete") {
253
- if ((_a = msg.ids) == null ? void 0 : _a.length) {
287
+ if (msg.operation === 'delete' || msg.action === 'delete') {
288
+ if (msg.ids?.length) {
254
289
  deleteIds.push(...msg.ids);
255
290
  } else if (msg.id != null) {
256
291
  deleteIds.push(msg.id);
@@ -258,7 +293,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
258
293
  continue;
259
294
  }
260
295
  const body = msg.body;
261
- const hasBody = body && typeof body === "object" && Object.keys(body).length > 0 && body.id != null;
296
+ const hasBody = body && typeof body === 'object' && Object.keys(body).length > 0 && body.id != null;
262
297
  if (hasBody) {
263
298
  bodyItems.push(body);
264
299
  continue;
@@ -267,7 +302,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
267
302
  needFullList = true;
268
303
  continue;
269
304
  }
270
- if (((_b = msg.ids) == null ? void 0 : _b.length) === 1) {
305
+ if (msg.ids?.length === 1) {
271
306
  partialIds.add(msg.ids[0]);
272
307
  } else if (msg.id != null) {
273
308
  partialIds.add(msg.id);
@@ -290,8 +325,7 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
290
325
  const fetched = [];
291
326
  for (const id of partialIds) {
292
327
  const one = await this.fetchByIdFromServer(id);
293
- if (one)
294
- fetched.push(one);
328
+ if (one) fetched.push(one);
295
329
  }
296
330
  if (fetched.length > 0) {
297
331
  this.mergeItems(fetched);
@@ -299,29 +333,27 @@ var FloorPlanModule = class extends import_BaseModule.BaseModule {
299
333
  }
300
334
  }
301
335
  if (changed) {
302
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
303
- this.core.effects.emit(import_types.FloorPlanHooks.onFloorPlanSyncCompleted, null);
336
+ await this.saveListToSQLite(this.store.list);
337
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlansChanged, this.getSortedList());
338
+ this.core.effects.emit(_types.FloorPlanHooks.onFloorPlanSyncCompleted, null);
304
339
  }
305
340
  }
306
341
  async clear() {
307
342
  this.store.list = [];
308
343
  this.store.map.clear();
309
344
  this.store.codeMap.clear();
345
+ await this.saveListToSQLite([]);
310
346
  }
311
347
  destroy() {
312
- var _a;
313
348
  if (this.syncTimer) {
314
349
  clearTimeout(this.syncTimer);
315
- this.syncTimer = void 0;
350
+ this.syncTimer = undefined;
316
351
  }
317
352
  this.pendingSyncMessages = [];
318
- if ((_a = this.floorPlanDataSource) == null ? void 0 : _a.destroy) {
353
+ if (this.floorPlanDataSource?.destroy) {
319
354
  this.floorPlanDataSource.destroy();
320
355
  }
321
356
  super.destroy();
322
357
  }
323
- };
324
- // Annotate the CommonJS export names for ESM import in node:
325
- 0 && (module.exports = {
326
- FloorPlanModule
327
- });
358
+ }
359
+ exports.FloorPlanModule = FloorPlanModule;
@@ -1,34 +1,19 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
1
+ "use strict";
18
2
 
19
- // src/server/modules/floor-plan/types.ts
20
- var types_exports = {};
21
- __export(types_exports, {
22
- FloorPlanHooks: () => FloorPlanHooks
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
23
5
  });
24
- module.exports = __toCommonJS(types_exports);
25
- var FloorPlanHooks = {
6
+ exports.FloorPlanHooks = void 0;
7
+ /**
8
+ * 平面图(floor-plan)Server 模块类型
9
+ * 与 GET /shop/schedule/floor-plan 系列接口数据结构对齐
10
+ */
11
+
12
+ /** pubsub / Ably 推送消息(与《平面图编辑器API文档》Socket 一节一致) */
13
+
14
+ const FloorPlanHooks = exports.FloorPlanHooks = {
26
15
  /** 本地列表变更(预加载、合并、删除后) */
27
- onFloorPlansChanged: "server_floor_plan:onFloorPlansChanged",
16
+ onFloorPlansChanged: 'server_floor_plan:onFloorPlansChanged',
28
17
  /** pubsub 同步处理完成,供 Server 向订阅者推送最新查询结果 */
29
- onFloorPlanSyncCompleted: "server_floor_plan:onFloorPlanSyncCompleted"
30
- };
31
- // Annotate the CommonJS export names for ESM import in node:
32
- 0 && (module.exports = {
33
- FloorPlanHooks
34
- });
18
+ onFloorPlanSyncCompleted: 'server_floor_plan:onFloorPlanSyncCompleted'
19
+ };