@pisell/pisellos 2.2.127 → 2.2.129

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.
@@ -45,7 +45,6 @@ var PisellOSCore = /*#__PURE__*/function () {
45
45
  this.serverOptions = options.server;
46
46
  }
47
47
  this.initialize(options);
48
- console.log('initialize12341');
49
48
  }
50
49
  _createClass(PisellOSCore, [{
51
50
  key: "initialize",
@@ -255,9 +255,9 @@ declare class Server {
255
255
  */
256
256
  private handleResourceList;
257
257
  /**
258
- * 代理刷新单个本地订单:
258
+ * 代理刷新 / 合并单个订单到本地:
259
259
  * - 入参:order_id(data 或 url query)
260
- * - 流程:本地存在性校验 → 调后端 /order/sales/{id}?with[]=... → 覆盖本地 → 落 SQLite → emit onOrdersChanged
260
+ * - 流程:调后端 /order/sales/{id}?with[]=... → 若本地已有则覆盖;若无则 merge 写入 → 落 SQLite → emit onOrdersChanged
261
261
  * - 监听级联:onOrdersChanged 触发订单/预约/bookingRemoteCache 三路订阅者推送
262
262
  */
263
263
  private handleUpdateLocalOrder;
@@ -443,15 +443,15 @@ var Server = /*#__PURE__*/function () {
443
443
  };
444
444
  }());
445
445
  /**
446
- * 代理刷新单个本地订单:
446
+ * 代理刷新 / 合并单个订单到本地:
447
447
  * - 入参:order_id(data 或 url query)
448
- * - 流程:本地存在性校验 → 调后端 /order/sales/{id}?with[]=... → 覆盖本地 → 落 SQLite → emit onOrdersChanged
448
+ * - 流程:调后端 /order/sales/{id}?with[]=... → 若本地已有则覆盖;若无则 merge 写入 → 落 SQLite → emit onOrdersChanged
449
449
  * - 监听级联:onOrdersChanged 触发订单/预约/bookingRemoteCache 三路订阅者推送
450
450
  */
451
451
  _defineProperty(this, "handleUpdateLocalOrder", /*#__PURE__*/function () {
452
452
  var _ref19 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(_ref18) {
453
453
  var _ref20, _this$app;
454
- var url, data, rawOrderId, orderId, backendPath, _response$data, response, fresh, _yield$_this$order$ov, overwritten, errorMessage;
454
+ var url, data, rawOrderId, orderId, backendPath, _response$data, response, fresh, exists, _yield$_this$order$ov, overwritten, errorMessage;
455
455
  return _regeneratorRuntime().wrap(function _callee7$(_context7) {
456
456
  while (1) switch (_context7.prev = _context7.next) {
457
457
  case 0:
@@ -489,24 +489,8 @@ var Server = /*#__PURE__*/function () {
489
489
  data: null
490
490
  });
491
491
  case 10:
492
- if (_this.order.getOrderByOrderId(orderId)) {
493
- _context7.next = 13;
494
- break;
495
- }
496
- _this.logInfo('handleUpdateLocalOrder: 本地不存在该订单,忽略', {
497
- orderId: orderId
498
- });
499
- return _context7.abrupt("return", {
500
- code: 200,
501
- status: true,
502
- message: '本地无此订单,已忽略',
503
- data: {
504
- overwritten: false
505
- }
506
- });
507
- case 13:
508
492
  if ((_this$app = _this.app) !== null && _this$app !== void 0 && _this$app.request) {
509
- _context7.next = 16;
493
+ _context7.next = 13;
510
494
  break;
511
495
  }
512
496
  _this.logError('handleUpdateLocalOrder: app.request 不可用');
@@ -516,18 +500,18 @@ var Server = /*#__PURE__*/function () {
516
500
  message: 'app.request 不可用',
517
501
  data: null
518
502
  });
519
- case 16:
503
+ case 13:
520
504
  backendPath = "/shop/order/sales/".concat(encodeURIComponent(orderId), "?with%5B%5D=all");
521
- _context7.prev = 17;
522
- _context7.next = 20;
505
+ _context7.prev = 14;
506
+ _context7.next = 17;
523
507
  return _this.app.request.get(backendPath, undefined, {
524
508
  isShopApi: true
525
509
  });
526
- case 20:
510
+ case 17:
527
511
  response = _context7.sent;
528
512
  fresh = (_response$data = response === null || response === void 0 ? void 0 : response.data) !== null && _response$data !== void 0 ? _response$data : response;
529
513
  if (!(!fresh || _typeof(fresh) !== 'object' || fresh.order_id == null)) {
530
- _context7.next = 25;
514
+ _context7.next = 22;
531
515
  break;
532
516
  }
533
517
  _this.logError('handleUpdateLocalOrder: 后端返回订单为空', {
@@ -540,10 +524,15 @@ var Server = /*#__PURE__*/function () {
540
524
  message: '后端返回订单为空',
541
525
  data: null
542
526
  });
543
- case 25:
544
- _context7.next = 27;
527
+ case 22:
528
+ exists = !!_this.order.getOrderByOrderId(orderId);
529
+ if (!exists) {
530
+ _context7.next = 30;
531
+ break;
532
+ }
533
+ _context7.next = 26;
545
534
  return _this.order.overwriteExistingOrder(fresh);
546
- case 27:
535
+ case 26:
547
536
  _yield$_this$order$ov = _context7.sent;
548
537
  overwritten = _yield$_this$order$ov.overwritten;
549
538
  _this.logInfo('handleUpdateLocalOrder: 覆盖完成', {
@@ -556,12 +545,30 @@ var Server = /*#__PURE__*/function () {
556
545
  message: '',
557
546
  data: {
558
547
  overwritten: overwritten,
548
+ inserted: false,
559
549
  order_id: orderId
560
550
  }
561
551
  });
562
- case 33:
563
- _context7.prev = 33;
564
- _context7.t0 = _context7["catch"](17);
552
+ case 30:
553
+ _context7.next = 32;
554
+ return _this.order.upsertOrdersFromRemote([fresh]);
555
+ case 32:
556
+ _this.logInfo('handleUpdateLocalOrder: 本地合并新订单完成', {
557
+ orderId: orderId
558
+ });
559
+ return _context7.abrupt("return", {
560
+ code: 200,
561
+ status: true,
562
+ message: '',
563
+ data: {
564
+ overwritten: false,
565
+ inserted: true,
566
+ order_id: orderId
567
+ }
568
+ });
569
+ case 36:
570
+ _context7.prev = 36;
571
+ _context7.t0 = _context7["catch"](14);
565
572
  errorMessage = _context7.t0 instanceof Error ? _context7.t0.message : String(_context7.t0);
566
573
  _this.logError('handleUpdateLocalOrder: 请求失败', {
567
574
  orderId: orderId,
@@ -574,11 +581,11 @@ var Server = /*#__PURE__*/function () {
574
581
  message: errorMessage,
575
582
  data: null
576
583
  });
577
- case 38:
584
+ case 41:
578
585
  case "end":
579
586
  return _context7.stop();
580
587
  }
581
- }, _callee7, null, [[17, 33]]);
588
+ }, _callee7, null, [[14, 36]]);
582
589
  }));
583
590
  return function (_x7) {
584
591
  return _ref19.apply(this, arguments);
@@ -47,6 +47,11 @@ export declare class OrderModule extends BaseModule implements Module {
47
47
  overwriteExistingOrder(fresh: OrderData): Promise<{
48
48
  overwritten: boolean;
49
49
  }>;
50
+ /**
51
+ * 将远端拉取的订单合并进本地 store(已存在则更新,不存在则追加),落库并 emit onOrdersChanged。
52
+ * 供 /update/localOrder 等在「本地尚无该单」时写入新建单。
53
+ */
54
+ upsertOrdersFromRemote(freshOrders: OrderData[]): Promise<void>;
50
55
  /**
51
56
  * 通过 SSE 按自定义 query 拉取订单(支持 select/with 精简字段)
52
57
  */
@@ -417,6 +417,41 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
417
417
  }
418
418
  return overwriteExistingOrder;
419
419
  }()
420
+ /**
421
+ * 将远端拉取的订单合并进本地 store(已存在则更新,不存在则追加),落库并 emit onOrdersChanged。
422
+ * 供 /update/localOrder 等在「本地尚无该单」时写入新建单。
423
+ */
424
+ )
425
+ }, {
426
+ key: "upsertOrdersFromRemote",
427
+ value: (function () {
428
+ var _upsertOrdersFromRemote = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(freshOrders) {
429
+ return _regeneratorRuntime().wrap(function _callee6$(_context6) {
430
+ while (1) switch (_context6.prev = _context6.next) {
431
+ case 0:
432
+ if (freshOrders !== null && freshOrders !== void 0 && freshOrders.length) {
433
+ _context6.next = 3;
434
+ break;
435
+ }
436
+ this.logInfo('upsertOrdersFromRemote-订单列表为空', {});
437
+ return _context6.abrupt("return");
438
+ case 3:
439
+ this.logInfo('upsertOrdersFromRemote-开始', {
440
+ count: freshOrders.length
441
+ });
442
+ _context6.next = 6;
443
+ return this.mergeOrdersToStore(freshOrders);
444
+ case 6:
445
+ case "end":
446
+ return _context6.stop();
447
+ }
448
+ }, _callee6, this);
449
+ }));
450
+ function upsertOrdersFromRemote(_x4) {
451
+ return _upsertOrdersFromRemote.apply(this, arguments);
452
+ }
453
+ return upsertOrdersFromRemote;
454
+ }()
420
455
  /**
421
456
  * 通过 SSE 按自定义 query 拉取订单(支持 select/with 精简字段)
422
457
  */
@@ -424,42 +459,42 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
424
459
  }, {
425
460
  key: "fetchOrdersBySSE",
426
461
  value: (function () {
427
- var _fetchOrdersBySSE = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6() {
462
+ var _fetchOrdersBySSE = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
428
463
  var query,
429
464
  data,
430
- _args6 = arguments;
431
- return _regeneratorRuntime().wrap(function _callee6$(_context6) {
432
- while (1) switch (_context6.prev = _context6.next) {
465
+ _args7 = arguments;
466
+ return _regeneratorRuntime().wrap(function _callee7$(_context7) {
467
+ while (1) switch (_context7.prev = _context7.next) {
433
468
  case 0:
434
- query = _args6.length > 0 && _args6[0] !== undefined ? _args6[0] : {};
469
+ query = _args7.length > 0 && _args7[0] !== undefined ? _args7[0] : {};
435
470
  if (this.orderDataSource) {
436
- _context6.next = 3;
471
+ _context7.next = 3;
437
472
  break;
438
473
  }
439
- return _context6.abrupt("return", []);
474
+ return _context7.abrupt("return", []);
440
475
  case 3:
441
- _context6.prev = 3;
442
- _context6.next = 6;
476
+ _context7.prev = 3;
477
+ _context7.next = 6;
443
478
  return this.orderDataSource.run({
444
479
  sse: {
445
480
  query: query
446
481
  }
447
482
  });
448
483
  case 6:
449
- data = _context6.sent;
450
- return _context6.abrupt("return", data || []);
484
+ data = _context7.sent;
485
+ return _context7.abrupt("return", data || []);
451
486
  case 10:
452
- _context6.prev = 10;
453
- _context6.t0 = _context6["catch"](3);
487
+ _context7.prev = 10;
488
+ _context7.t0 = _context7["catch"](3);
454
489
  this.logError('fetchOrdersBySSE-失败', {
455
- error: _context6.t0 instanceof Error ? _context6.t0.message : String(_context6.t0)
490
+ error: _context7.t0 instanceof Error ? _context7.t0.message : String(_context7.t0)
456
491
  });
457
- return _context6.abrupt("return", []);
492
+ return _context7.abrupt("return", []);
458
493
  case 14:
459
494
  case "end":
460
- return _context6.stop();
495
+ return _context7.stop();
461
496
  }
462
- }, _callee6, this, [[3, 10]]);
497
+ }, _callee7, this, [[3, 10]]);
463
498
  }));
464
499
  function fetchOrdersBySSE() {
465
500
  return _fetchOrdersBySSE.apply(this, arguments);
@@ -640,41 +675,41 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
640
675
  }, {
641
676
  key: "flushOrderSyncMessagesByThrottle",
642
677
  value: (function () {
643
- var _flushOrderSyncMessagesByThrottle = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7() {
644
- return _regeneratorRuntime().wrap(function _callee7$(_context7) {
645
- while (1) switch (_context7.prev = _context7.next) {
678
+ var _flushOrderSyncMessagesByThrottle = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
679
+ return _regeneratorRuntime().wrap(function _callee8$(_context8) {
680
+ while (1) switch (_context8.prev = _context8.next) {
646
681
  case 0:
647
682
  if (!this.isProcessingSyncBatch) {
648
- _context7.next = 2;
683
+ _context8.next = 2;
649
684
  break;
650
685
  }
651
- return _context7.abrupt("return");
686
+ return _context8.abrupt("return");
652
687
  case 2:
653
688
  if (!(this.pendingSyncMessages.length === 0)) {
654
- _context7.next = 5;
689
+ _context8.next = 5;
655
690
  break;
656
691
  }
657
692
  this.isIdlePhase = true;
658
- return _context7.abrupt("return");
693
+ return _context8.abrupt("return");
659
694
  case 5:
660
695
  this.isProcessingSyncBatch = true;
661
- _context7.prev = 6;
662
- _context7.next = 9;
696
+ _context8.prev = 6;
697
+ _context8.next = 9;
663
698
  return this.processOrderSyncMessages();
664
699
  case 9:
665
- _context7.prev = 9;
700
+ _context8.prev = 9;
666
701
  this.isProcessingSyncBatch = false;
667
702
  if (this.pendingSyncMessages.length > 0) {
668
703
  this.scheduleOrderSyncThrottle();
669
704
  } else {
670
705
  this.isIdlePhase = true;
671
706
  }
672
- return _context7.finish(9);
707
+ return _context8.finish(9);
673
708
  case 13:
674
709
  case "end":
675
- return _context7.stop();
710
+ return _context8.stop();
676
711
  }
677
- }, _callee7, this, [[6,, 9, 13]]);
712
+ }, _callee8, this, [[6,, 9, 13]]);
678
713
  }));
679
714
  function flushOrderSyncMessagesByThrottle() {
680
715
  return _flushOrderSyncMessagesByThrottle.apply(this, arguments);
@@ -696,18 +731,18 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
696
731
  }, {
697
732
  key: "processOrderSyncMessages",
698
733
  value: (function () {
699
- var _processOrderSyncMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8() {
734
+ var _processOrderSyncMessages = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9() {
700
735
  var messages, batchProcessStartAt, earliestReceivedAt, upsertOrders, refreshIds, _iterator3, _step3, _msg$id, _msg$relation_order_i, msg, hasBatchIds, singleId, hasSingleId, rawBody, normalizedBody, uniqueRefreshIds, upsertList, freshOrders, batchProcessEndAt;
701
- return _regeneratorRuntime().wrap(function _callee8$(_context8) {
702
- while (1) switch (_context8.prev = _context8.next) {
736
+ return _regeneratorRuntime().wrap(function _callee9$(_context9) {
737
+ while (1) switch (_context9.prev = _context9.next) {
703
738
  case 0:
704
739
  messages = _toConsumableArray(this.pendingSyncMessages);
705
740
  this.pendingSyncMessages = [];
706
741
  if (!(messages.length === 0)) {
707
- _context8.next = 4;
742
+ _context9.next = 4;
708
743
  break;
709
744
  }
710
- return _context8.abrupt("return");
745
+ return _context9.abrupt("return");
711
746
  case 4:
712
747
  batchProcessStartAt = Date.now();
713
748
  earliestReceivedAt = Math.min.apply(Math, _toConsumableArray(messages.map(function (m) {
@@ -723,11 +758,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
723
758
  upsertOrders = new Map();
724
759
  refreshIds = [];
725
760
  _iterator3 = _createForOfIteratorHelper(messages);
726
- _context8.prev = 10;
761
+ _context9.prev = 10;
727
762
  _iterator3.s();
728
763
  case 12:
729
764
  if ((_step3 = _iterator3.n()).done) {
730
- _context8.next = 25;
765
+ _context9.next = 25;
731
766
  break;
732
767
  }
733
768
  msg = _step3.value;
@@ -737,27 +772,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
737
772
  rawBody = msg.body || msg.data;
738
773
  normalizedBody = this.normalizeOrderSyncPayload(rawBody);
739
774
  if (!(hasSingleId && normalizedBody)) {
740
- _context8.next = 22;
775
+ _context9.next = 22;
741
776
  break;
742
777
  }
743
778
  upsertOrders.set(this.getIdKey(normalizedBody.order_id), normalizedBody);
744
- return _context8.abrupt("continue", 23);
779
+ return _context9.abrupt("continue", 23);
745
780
  case 22:
746
781
  if (hasBatchIds) refreshIds.push.apply(refreshIds, _toConsumableArray(msg.ids));else if (hasSingleId) refreshIds.push(singleId);else if ((_msg$relation_order_i = msg.relation_order_ids) !== null && _msg$relation_order_i !== void 0 && _msg$relation_order_i.length) refreshIds.push.apply(refreshIds, _toConsumableArray(msg.relation_order_ids));
747
782
  case 23:
748
- _context8.next = 12;
783
+ _context9.next = 12;
749
784
  break;
750
785
  case 25:
751
- _context8.next = 30;
786
+ _context9.next = 30;
752
787
  break;
753
788
  case 27:
754
- _context8.prev = 27;
755
- _context8.t0 = _context8["catch"](10);
756
- _iterator3.e(_context8.t0);
789
+ _context9.prev = 27;
790
+ _context9.t0 = _context9["catch"](10);
791
+ _iterator3.e(_context9.t0);
757
792
  case 30:
758
- _context8.prev = 30;
793
+ _context9.prev = 30;
759
794
  _iterator3.f();
760
- return _context8.finish(30);
795
+ return _context9.finish(30);
761
796
  case 33:
762
797
  uniqueRefreshIds = this.uniqueOrderIds(refreshIds);
763
798
  upsertList = _toConsumableArray(upsertOrders.values());
@@ -766,32 +801,32 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
766
801
  refreshIdCount: uniqueRefreshIds.length
767
802
  });
768
803
  if (!(upsertList.length > 0)) {
769
- _context8.next = 39;
804
+ _context9.next = 39;
770
805
  break;
771
806
  }
772
- _context8.next = 39;
807
+ _context9.next = 39;
773
808
  return this.mergeOrdersToStore(upsertList);
774
809
  case 39:
775
810
  if (!(uniqueRefreshIds.length > 0)) {
776
- _context8.next = 46;
811
+ _context9.next = 46;
777
812
  break;
778
813
  }
779
- _context8.next = 42;
814
+ _context9.next = 42;
780
815
  return this.fetchOrdersByHttp(uniqueRefreshIds);
781
816
  case 42:
782
- freshOrders = _context8.sent;
817
+ freshOrders = _context9.sent;
783
818
  if (!(freshOrders.length > 0)) {
784
- _context8.next = 46;
819
+ _context9.next = 46;
785
820
  break;
786
821
  }
787
- _context8.next = 46;
822
+ _context9.next = 46;
788
823
  return this.mergeOrdersToStore(freshOrders);
789
824
  case 46:
790
825
  if (!(upsertList.length === 0 && uniqueRefreshIds.length === 0)) {
791
- _context8.next = 48;
826
+ _context9.next = 48;
792
827
  break;
793
828
  }
794
- return _context8.abrupt("return");
829
+ return _context9.abrupt("return");
795
830
  case 48:
796
831
  batchProcessEndAt = Date.now();
797
832
  this.logInfo('processOrderSyncMessages-结束', {
@@ -800,13 +835,13 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
800
835
  batchProcessDurationMs: batchProcessEndAt - batchProcessStartAt,
801
836
  totalFromPubsubToProcessedMs: batchProcessEndAt - earliestReceivedAt
802
837
  });
803
- _context8.next = 52;
838
+ _context9.next = 52;
804
839
  return this.core.effects.emit(OrderHooks.onOrdersSyncCompleted, null);
805
840
  case 52:
806
841
  case "end":
807
- return _context8.stop();
842
+ return _context9.stop();
808
843
  }
809
- }, _callee8, this, [[10, 27, 30, 33]]);
844
+ }, _callee9, this, [[10, 27, 30, 33]]);
810
845
  }));
811
846
  function processOrderSyncMessages() {
812
847
  return _processOrderSyncMessages.apply(this, arguments);
@@ -820,29 +855,29 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
820
855
  }, {
821
856
  key: "fetchOrdersByHttp",
822
857
  value: (function () {
823
- var _fetchOrdersByHttp = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(ids) {
858
+ var _fetchOrdersByHttp = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(ids) {
824
859
  var _orderList, orderList;
825
- return _regeneratorRuntime().wrap(function _callee9$(_context9) {
826
- while (1) switch (_context9.prev = _context9.next) {
860
+ return _regeneratorRuntime().wrap(function _callee10$(_context10) {
861
+ while (1) switch (_context10.prev = _context10.next) {
827
862
  case 0:
828
863
  if (!(!this.orderDataSource || ids.length === 0)) {
829
- _context9.next = 2;
864
+ _context10.next = 2;
830
865
  break;
831
866
  }
832
- return _context9.abrupt("return", []);
867
+ return _context10.abrupt("return", []);
833
868
  case 2:
834
- _context9.prev = 2;
869
+ _context10.prev = 2;
835
870
  if (!(typeof this.orderDataSource.fetchOrdersByIds === 'function')) {
836
- _context9.next = 8;
871
+ _context10.next = 8;
837
872
  break;
838
873
  }
839
- _context9.next = 6;
874
+ _context10.next = 6;
840
875
  return this.orderDataSource.fetchOrdersByIds(ids);
841
876
  case 6:
842
- _orderList = _context9.sent;
843
- return _context9.abrupt("return", _orderList || []);
877
+ _orderList = _context10.sent;
878
+ return _context10.abrupt("return", _orderList || []);
844
879
  case 8:
845
- _context9.next = 10;
880
+ _context10.next = 10;
846
881
  return this.orderDataSource.run({
847
882
  http: {
848
883
  query: {
@@ -851,19 +886,19 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
851
886
  }
852
887
  });
853
888
  case 10:
854
- orderList = _context9.sent;
855
- return _context9.abrupt("return", orderList || []);
889
+ orderList = _context10.sent;
890
+ return _context10.abrupt("return", orderList || []);
856
891
  case 14:
857
- _context9.prev = 14;
858
- _context9.t0 = _context9["catch"](2);
859
- return _context9.abrupt("return", []);
892
+ _context10.prev = 14;
893
+ _context10.t0 = _context10["catch"](2);
894
+ return _context10.abrupt("return", []);
860
895
  case 17:
861
896
  case "end":
862
- return _context9.stop();
897
+ return _context10.stop();
863
898
  }
864
- }, _callee9, this, [[2, 14]]);
899
+ }, _callee10, this, [[2, 14]]);
865
900
  }));
866
- function fetchOrdersByHttp(_x4) {
901
+ function fetchOrdersByHttp(_x5) {
867
902
  return _fetchOrdersByHttp.apply(this, arguments);
868
903
  }
869
904
  return fetchOrdersByHttp;
@@ -875,11 +910,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
875
910
  }, {
876
911
  key: "mergeOrdersToStore",
877
912
  value: (function () {
878
- var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(freshOrders) {
913
+ var _mergeOrdersToStore = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11(freshOrders) {
879
914
  var _this8 = this;
880
915
  var freshMap, _iterator4, _step4, order, id, uniqueFreshCount, updatedList, _iterator5, _step5, _order;
881
- return _regeneratorRuntime().wrap(function _callee10$(_context10) {
882
- while (1) switch (_context10.prev = _context10.next) {
916
+ return _regeneratorRuntime().wrap(function _callee11$(_context11) {
917
+ while (1) switch (_context11.prev = _context11.next) {
883
918
  case 0:
884
919
  this.logInfo('mergeOrdersToStore-开始', {
885
920
  freshOrderCount: freshOrders.length,
@@ -887,36 +922,36 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
887
922
  });
888
923
  freshMap = new Map();
889
924
  _iterator4 = _createForOfIteratorHelper(freshOrders);
890
- _context10.prev = 3;
925
+ _context11.prev = 3;
891
926
  _iterator4.s();
892
927
  case 5:
893
928
  if ((_step4 = _iterator4.n()).done) {
894
- _context10.next = 13;
929
+ _context11.next = 13;
895
930
  break;
896
931
  }
897
932
  order = _step4.value;
898
933
  id = order === null || order === void 0 ? void 0 : order.order_id;
899
934
  if (!(id === undefined || id === null)) {
900
- _context10.next = 10;
935
+ _context11.next = 10;
901
936
  break;
902
937
  }
903
- return _context10.abrupt("continue", 11);
938
+ return _context11.abrupt("continue", 11);
904
939
  case 10:
905
940
  freshMap.set(this.getIdKey(id), order);
906
941
  case 11:
907
- _context10.next = 5;
942
+ _context11.next = 5;
908
943
  break;
909
944
  case 13:
910
- _context10.next = 18;
945
+ _context11.next = 18;
911
946
  break;
912
947
  case 15:
913
- _context10.prev = 15;
914
- _context10.t0 = _context10["catch"](3);
915
- _iterator4.e(_context10.t0);
948
+ _context11.prev = 15;
949
+ _context11.t0 = _context11["catch"](3);
950
+ _iterator4.e(_context11.t0);
916
951
  case 18:
917
- _context10.prev = 18;
952
+ _context11.prev = 18;
918
953
  _iterator4.f();
919
- return _context10.finish(18);
954
+ return _context11.finish(18);
920
955
  case 21:
921
956
  uniqueFreshCount = freshMap.size;
922
957
  updatedList = this.store.list.map(function (order) {
@@ -941,7 +976,7 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
941
976
  }
942
977
  this.store.list = updatedList;
943
978
  this.syncOrdersMap();
944
- _context10.next = 29;
979
+ _context11.next = 29;
945
980
  return this.saveOrdersToSQLite(this.store.list);
946
981
  case 29:
947
982
  this.logInfo('mergeOrdersToStore-结束', {
@@ -951,11 +986,11 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
951
986
  this.core.effects.emit(OrderHooks.onOrdersChanged, this.store.list);
952
987
  case 31:
953
988
  case "end":
954
- return _context10.stop();
989
+ return _context11.stop();
955
990
  }
956
- }, _callee10, this, [[3, 15, 18, 21]]);
991
+ }, _callee11, this, [[3, 15, 18, 21]]);
957
992
  }));
958
- function mergeOrdersToStore(_x5) {
993
+ function mergeOrdersToStore(_x6) {
959
994
  return _mergeOrdersToStore.apply(this, arguments);
960
995
  }
961
996
  return mergeOrdersToStore;
@@ -1092,32 +1127,32 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1092
1127
  }, {
1093
1128
  key: "loadOrdersFromSQLite",
1094
1129
  value: function () {
1095
- var _loadOrdersFromSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee11() {
1130
+ var _loadOrdersFromSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12() {
1096
1131
  var orders;
1097
- return _regeneratorRuntime().wrap(function _callee11$(_context11) {
1098
- while (1) switch (_context11.prev = _context11.next) {
1132
+ return _regeneratorRuntime().wrap(function _callee12$(_context12) {
1133
+ while (1) switch (_context12.prev = _context12.next) {
1099
1134
  case 0:
1100
1135
  if (this.dbManager) {
1101
- _context11.next = 2;
1136
+ _context12.next = 2;
1102
1137
  break;
1103
1138
  }
1104
- return _context11.abrupt("return", []);
1139
+ return _context12.abrupt("return", []);
1105
1140
  case 2:
1106
- _context11.prev = 2;
1107
- _context11.next = 5;
1141
+ _context12.prev = 2;
1142
+ _context12.next = 5;
1108
1143
  return this.dbManager.getAll(INDEXDB_STORE_NAME);
1109
1144
  case 5:
1110
- orders = _context11.sent;
1111
- return _context11.abrupt("return", orders || []);
1145
+ orders = _context12.sent;
1146
+ return _context12.abrupt("return", orders || []);
1112
1147
  case 9:
1113
- _context11.prev = 9;
1114
- _context11.t0 = _context11["catch"](2);
1115
- return _context11.abrupt("return", []);
1148
+ _context12.prev = 9;
1149
+ _context12.t0 = _context12["catch"](2);
1150
+ return _context12.abrupt("return", []);
1116
1151
  case 12:
1117
1152
  case "end":
1118
- return _context11.stop();
1153
+ return _context12.stop();
1119
1154
  }
1120
- }, _callee11, this, [[2, 9]]);
1155
+ }, _callee12, this, [[2, 9]]);
1121
1156
  }));
1122
1157
  function loadOrdersFromSQLite() {
1123
1158
  return _loadOrdersFromSQLite.apply(this, arguments);
@@ -1127,55 +1162,55 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1127
1162
  }, {
1128
1163
  key: "saveOrdersToSQLite",
1129
1164
  value: function () {
1130
- var _saveOrdersToSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee12(orderList) {
1131
- return _regeneratorRuntime().wrap(function _callee12$(_context12) {
1132
- while (1) switch (_context12.prev = _context12.next) {
1165
+ var _saveOrdersToSQLite = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13(orderList) {
1166
+ return _regeneratorRuntime().wrap(function _callee13$(_context13) {
1167
+ while (1) switch (_context13.prev = _context13.next) {
1133
1168
  case 0:
1134
1169
  if (this.dbManager) {
1135
- _context12.next = 2;
1170
+ _context13.next = 2;
1136
1171
  break;
1137
1172
  }
1138
- return _context12.abrupt("return");
1173
+ return _context13.abrupt("return");
1139
1174
  case 2:
1140
- _context12.prev = 2;
1175
+ _context13.prev = 2;
1141
1176
  this.logInfo('saveOrdersToSQLite-开始', {
1142
1177
  count: orderList.length
1143
1178
  });
1144
- _context12.next = 6;
1179
+ _context13.next = 6;
1145
1180
  return this.dbManager.clear(INDEXDB_STORE_NAME);
1146
1181
  case 6:
1147
1182
  this.logInfo('saveOrdersToSQLite-clear完成', {
1148
1183
  count: orderList.length
1149
1184
  });
1150
1185
  if (!(orderList.length === 0)) {
1151
- _context12.next = 9;
1186
+ _context13.next = 9;
1152
1187
  break;
1153
1188
  }
1154
- return _context12.abrupt("return");
1189
+ return _context13.abrupt("return");
1155
1190
  case 9:
1156
- _context12.next = 11;
1191
+ _context13.next = 11;
1157
1192
  return this.dbManager.bulkAdd(INDEXDB_STORE_NAME, orderList);
1158
1193
  case 11:
1159
1194
  this.logInfo('saveOrdersToSQLite-bulkAdd完成', {
1160
1195
  count: orderList.length
1161
1196
  });
1162
- _context12.next = 17;
1197
+ _context13.next = 17;
1163
1198
  break;
1164
1199
  case 14:
1165
- _context12.prev = 14;
1166
- _context12.t0 = _context12["catch"](2);
1200
+ _context13.prev = 14;
1201
+ _context13.t0 = _context13["catch"](2);
1167
1202
  // SQLite 异常,避免影响主流程
1168
1203
  this.logError('保存订单到 SQLite 失败', {
1169
- error: _context12.t0 instanceof Error ? _context12.t0.message : String(_context12.t0),
1204
+ error: _context13.t0 instanceof Error ? _context13.t0.message : String(_context13.t0),
1170
1205
  orderList: orderList.length
1171
1206
  });
1172
1207
  case 17:
1173
1208
  case "end":
1174
- return _context12.stop();
1209
+ return _context13.stop();
1175
1210
  }
1176
- }, _callee12, this, [[2, 14]]);
1211
+ }, _callee13, this, [[2, 14]]);
1177
1212
  }));
1178
- function saveOrdersToSQLite(_x6) {
1213
+ function saveOrdersToSQLite(_x7) {
1179
1214
  return _saveOrdersToSQLite.apply(this, arguments);
1180
1215
  }
1181
1216
  return saveOrdersToSQLite;
@@ -1183,27 +1218,27 @@ export var OrderModule = /*#__PURE__*/function (_BaseModule) {
1183
1218
  }, {
1184
1219
  key: "clear",
1185
1220
  value: function () {
1186
- var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee13() {
1187
- return _regeneratorRuntime().wrap(function _callee13$(_context13) {
1188
- while (1) switch (_context13.prev = _context13.next) {
1221
+ var _clear = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee14() {
1222
+ return _regeneratorRuntime().wrap(function _callee14$(_context14) {
1223
+ while (1) switch (_context14.prev = _context14.next) {
1189
1224
  case 0:
1190
1225
  this.store.list = [];
1191
1226
  this.store.map = new Map();
1192
1227
  this.resourceIdIndex.clear();
1193
1228
  if (!this.dbManager) {
1194
- _context13.next = 6;
1229
+ _context14.next = 6;
1195
1230
  break;
1196
1231
  }
1197
- _context13.next = 6;
1232
+ _context14.next = 6;
1198
1233
  return this.dbManager.clear(INDEXDB_STORE_NAME);
1199
1234
  case 6:
1200
1235
  this.setStorageItem(ORDER_LAST_FULL_FETCH_AT_STORAGE_KEY, '');
1201
1236
  this.core.effects.emit(OrderHooks.onOrdersChanged, this.store.list);
1202
1237
  case 8:
1203
1238
  case "end":
1204
- return _context13.stop();
1239
+ return _context14.stop();
1205
1240
  }
1206
- }, _callee13, this);
1241
+ }, _callee14, this);
1207
1242
  }));
1208
1243
  function clear() {
1209
1244
  return _clear.apply(this, arguments);
@@ -314,7 +314,7 @@ export function filterBookingsFromOrders(orders, filters) {
314
314
  }
315
315
  paginatedList.push(_objectSpread(_objectSpread({}, booking), {}, {
316
316
  order: orderInfo,
317
- products: productsForBooking(order, booking)
317
+ products: order.products
318
318
  }));
319
319
  }
320
320
  totalCount++;
@@ -396,7 +396,7 @@ export function filterBookings(bookings, filters) {
396
396
  if (!matchBooking(booking, order, ctx)) continue;
397
397
  if (totalCount >= startIndex && paginatedList.length < size) {
398
398
  paginatedList.push(_objectSpread(_objectSpread({}, booking), {}, {
399
- products: productsForBooking(booking.order, booking)
399
+ products: booking.order.products
400
400
  }));
401
401
  }
402
402
  totalCount++;
package/lib/core/index.js CHANGED
@@ -50,7 +50,6 @@ var PisellOSCore = class {
50
50
  this.serverOptions = options.server;
51
51
  }
52
52
  this.initialize(options);
53
- console.log("initialize12341");
54
53
  }
55
54
  initialize(options) {
56
55
  if (options == null ? void 0 : options.plugins) {
@@ -0,0 +1,49 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/model/strategy/adapter/promotion/index.ts
30
+ var promotion_exports = {};
31
+ __export(promotion_exports, {
32
+ BUY_X_GET_Y_FREE_STRATEGY: () => import_examples.BUY_X_GET_Y_FREE_STRATEGY,
33
+ PromotionAdapter: () => import_adapter.PromotionAdapter,
34
+ PromotionEvaluator: () => import_evaluator.PromotionEvaluator,
35
+ X_ITEMS_FOR_Y_PRICE_STRATEGY: () => import_examples.X_ITEMS_FOR_Y_PRICE_STRATEGY,
36
+ default: () => import_adapter2.default
37
+ });
38
+ module.exports = __toCommonJS(promotion_exports);
39
+ var import_evaluator = require("./evaluator");
40
+ var import_adapter = require("./adapter");
41
+ var import_adapter2 = __toESM(require("./adapter"));
42
+ var import_examples = require("./examples");
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ BUY_X_GET_Y_FREE_STRATEGY,
46
+ PromotionAdapter,
47
+ PromotionEvaluator,
48
+ X_ITEMS_FOR_Y_PRICE_STRATEGY
49
+ });
@@ -255,9 +255,9 @@ declare class Server {
255
255
  */
256
256
  private handleResourceList;
257
257
  /**
258
- * 代理刷新单个本地订单:
258
+ * 代理刷新 / 合并单个订单到本地:
259
259
  * - 入参:order_id(data 或 url query)
260
- * - 流程:本地存在性校验 → 调后端 /order/sales/{id}?with[]=... → 覆盖本地 → 落 SQLite → emit onOrdersChanged
260
+ * - 流程:调后端 /order/sales/{id}?with[]=... → 若本地已有则覆盖;若无则 merge 写入 → 落 SQLite → emit onOrdersChanged
261
261
  * - 监听级联:onOrdersChanged 触发订单/预约/bookingRemoteCache 三路订阅者推送
262
262
  */
263
263
  private handleUpdateLocalOrder;
@@ -314,9 +314,9 @@ var Server = class {
314
314
  };
315
315
  };
316
316
  /**
317
- * 代理刷新单个本地订单:
317
+ * 代理刷新 / 合并单个订单到本地:
318
318
  * - 入参:order_id(data 或 url query)
319
- * - 流程:本地存在性校验 → 调后端 /order/sales/{id}?with[]=... → 覆盖本地 → 落 SQLite → emit onOrdersChanged
319
+ * - 流程:调后端 /order/sales/{id}?with[]=... → 若本地已有则覆盖;若无则 merge 写入 → 落 SQLite → emit onOrdersChanged
320
320
  * - 监听级联:onOrdersChanged 触发订单/预约/bookingRemoteCache 三路订阅者推送
321
321
  */
322
322
  this.handleUpdateLocalOrder = async ({ url, data }) => {
@@ -332,15 +332,6 @@ var Server = class {
332
332
  this.logError("handleUpdateLocalOrder: Order 模块未注册");
333
333
  return { code: 500, status: false, message: "Order 模块未注册", data: null };
334
334
  }
335
- if (!this.order.getOrderByOrderId(orderId)) {
336
- this.logInfo("handleUpdateLocalOrder: 本地不存在该订单,忽略", { orderId });
337
- return {
338
- code: 200,
339
- status: true,
340
- message: "本地无此订单,已忽略",
341
- data: { overwritten: false }
342
- };
343
- }
344
335
  if (!((_a = this.app) == null ? void 0 : _a.request)) {
345
336
  this.logError("handleUpdateLocalOrder: app.request 不可用");
346
337
  return { code: 500, status: false, message: "app.request 不可用", data: null };
@@ -365,18 +356,29 @@ var Server = class {
365
356
  data: null
366
357
  };
367
358
  }
368
- const { overwritten } = await this.order.overwriteExistingOrder(
369
- fresh
370
- );
371
- this.logInfo("handleUpdateLocalOrder: 覆盖完成", {
372
- orderId,
373
- overwritten
374
- });
359
+ const exists = !!this.order.getOrderByOrderId(orderId);
360
+ if (exists) {
361
+ const { overwritten } = await this.order.overwriteExistingOrder(
362
+ fresh
363
+ );
364
+ this.logInfo("handleUpdateLocalOrder: 覆盖完成", {
365
+ orderId,
366
+ overwritten
367
+ });
368
+ return {
369
+ code: 200,
370
+ status: true,
371
+ message: "",
372
+ data: { overwritten, inserted: false, order_id: orderId }
373
+ };
374
+ }
375
+ await this.order.upsertOrdersFromRemote([fresh]);
376
+ this.logInfo("handleUpdateLocalOrder: 本地合并新订单完成", { orderId });
375
377
  return {
376
378
  code: 200,
377
379
  status: true,
378
380
  message: "",
379
- data: { overwritten, order_id: orderId }
381
+ data: { overwritten: false, inserted: true, order_id: orderId }
380
382
  };
381
383
  } catch (error) {
382
384
  const errorMessage = error instanceof Error ? error.message : String(error);
@@ -47,6 +47,11 @@ export declare class OrderModule extends BaseModule implements Module {
47
47
  overwriteExistingOrder(fresh: OrderData): Promise<{
48
48
  overwritten: boolean;
49
49
  }>;
50
+ /**
51
+ * 将远端拉取的订单合并进本地 store(已存在则更新,不存在则追加),落库并 emit onOrdersChanged。
52
+ * 供 /update/localOrder 等在「本地尚无该单」时写入新建单。
53
+ */
54
+ upsertOrdersFromRemote(freshOrders: OrderData[]): Promise<void>;
50
55
  /**
51
56
  * 通过 SSE 按自定义 query 拉取订单(支持 select/with 精简字段)
52
57
  */
@@ -252,6 +252,18 @@ var OrderModule = class extends import_BaseModule.BaseModule {
252
252
  await this.core.effects.emit(import_types.OrderHooks.onOrdersChanged, this.store.list);
253
253
  return { overwritten: true };
254
254
  }
255
+ /**
256
+ * 将远端拉取的订单合并进本地 store(已存在则更新,不存在则追加),落库并 emit onOrdersChanged。
257
+ * 供 /update/localOrder 等在「本地尚无该单」时写入新建单。
258
+ */
259
+ async upsertOrdersFromRemote(freshOrders) {
260
+ if (!(freshOrders == null ? void 0 : freshOrders.length)) {
261
+ this.logInfo("upsertOrdersFromRemote-订单列表为空", {});
262
+ return;
263
+ }
264
+ this.logInfo("upsertOrdersFromRemote-开始", { count: freshOrders.length });
265
+ await this.mergeOrdersToStore(freshOrders);
266
+ }
255
267
  /**
256
268
  * 通过 SSE 按自定义 query 拉取订单(支持 select/with 精简字段)
257
269
  */
@@ -298,7 +298,7 @@ function filterBookingsFromOrders(orders, filters) {
298
298
  paginatedList.push({
299
299
  ...booking,
300
300
  order: orderInfo,
301
- products: productsForBooking(order, booking)
301
+ products: order.products
302
302
  });
303
303
  }
304
304
  totalCount++;
@@ -364,7 +364,7 @@ function filterBookings(bookings, filters) {
364
364
  if (totalCount >= startIndex && paginatedList.length < size) {
365
365
  paginatedList.push({
366
366
  ...booking,
367
- products: productsForBooking(booking.order, booking)
367
+ products: booking.order.products
368
368
  });
369
369
  }
370
370
  totalCount++;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@pisell/pisellos",
4
- "version": "2.2.127",
4
+ "version": "2.2.129",
5
5
  "description": "一个可扩展的前端模块化SDK框架,支持插件系统",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",