@pisell/pisellos 2.2.153 → 2.2.156
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/core/index.js +1 -0
- package/dist/modules/Cart/utils/cartProduct.js +1 -1
- package/dist/modules/Order/index.d.ts +3 -1
- package/dist/modules/Order/index.js +231 -160
- package/dist/modules/Order/types.d.ts +19 -0
- package/dist/modules/Order/utils.js +7 -6
- package/dist/modules/Payment/index.d.ts +4 -0
- package/dist/modules/Payment/index.js +567 -505
- package/dist/modules/Payment/types.d.ts +29 -9
- package/dist/modules/SalesSummary/index.d.ts +7 -5
- package/dist/modules/SalesSummary/index.js +35 -11
- package/dist/plugins/app.d.ts +2 -0
- package/dist/server/index.d.ts +2 -5
- package/dist/server/index.js +58 -66
- package/dist/server/modules/index.d.ts +1 -1
- package/dist/server/modules/products/index.d.ts +12 -1
- package/dist/server/modules/products/index.js +169 -78
- package/dist/server/modules/products/types.d.ts +11 -0
- package/dist/server/modules/products/types.js +4 -0
- package/dist/server/utils/product.js +2 -2
- package/dist/solution/BaseSales/index.d.ts +26 -2
- package/dist/solution/BaseSales/index.js +342 -112
- package/dist/solution/BaseSales/types.d.ts +4 -4
- package/dist/solution/BaseSales/types.js +4 -4
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +62 -0
- package/dist/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +116 -0
- package/dist/solution/BaseSales/utils.js +3 -3
- package/dist/solution/BookingByStep/index.d.ts +2 -2
- package/dist/solution/BookingTicket/index.d.ts +11 -13
- package/dist/solution/BookingTicket/index.js +23 -37
- package/dist/solution/BookingTicket/types.d.ts +9 -6
- package/dist/solution/BookingTicket/types.js +6 -3
- package/dist/solution/BookingTicket/utils/cartView.d.ts +7 -12
- package/dist/solution/BookingTicket/utils/cartView.js +52 -14
- package/dist/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
- package/dist/solution/BookingTicket/utils/orderCustomer.js +31 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
- package/dist/solution/BookingTicket/utils/scan/cloudSearch.js +36 -0
- package/dist/solution/BookingTicket/utils/scan/handleScan.js +2 -2
- package/dist/solution/Sales/index.d.ts +3 -0
- package/dist/solution/Sales/index.js +85 -43
- package/dist/solution/Sales/types.d.ts +3 -0
- package/dist/solution/ScanOrder/types.d.ts +4 -4
- package/dist/solution/ScanOrder/types.js +4 -4
- package/dist/solution/ScanOrder/utils.js +3 -3
- package/lib/core/index.js +1 -0
- package/lib/model/strategy/adapter/promotion/index.js +49 -0
- package/lib/modules/Cart/utils/cartProduct.js +1 -1
- package/lib/modules/Order/index.d.ts +3 -1
- package/lib/modules/Order/index.js +39 -7
- package/lib/modules/Order/types.d.ts +19 -0
- package/lib/modules/Order/utils.js +4 -2
- package/lib/modules/Payment/index.d.ts +4 -0
- package/lib/modules/Payment/index.js +26 -2
- package/lib/modules/Payment/types.d.ts +29 -9
- package/lib/modules/SalesSummary/index.d.ts +7 -5
- package/lib/modules/SalesSummary/index.js +29 -9
- package/lib/plugins/app.d.ts +2 -0
- package/lib/server/index.d.ts +2 -5
- package/lib/server/index.js +38 -58
- package/lib/server/modules/index.d.ts +1 -1
- package/lib/server/modules/products/index.d.ts +12 -1
- package/lib/server/modules/products/index.js +69 -9
- package/lib/server/modules/products/types.d.ts +11 -0
- package/lib/server/utils/product.js +2 -2
- package/lib/solution/BaseSales/index.d.ts +26 -2
- package/lib/solution/BaseSales/index.js +169 -3
- package/lib/solution/BaseSales/types.d.ts +4 -4
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.d.ts +62 -0
- package/lib/solution/BaseSales/utils/transformBaseProductToOrderProduct.js +155 -0
- package/lib/solution/BaseSales/utils.js +3 -3
- package/lib/solution/BookingByStep/index.d.ts +2 -2
- package/lib/solution/BookingTicket/index.d.ts +11 -13
- package/lib/solution/BookingTicket/index.js +17 -27
- package/lib/solution/BookingTicket/types.d.ts +9 -6
- package/lib/solution/BookingTicket/utils/cartView.d.ts +7 -12
- package/lib/solution/BookingTicket/utils/cartView.js +44 -18
- package/lib/solution/BookingTicket/utils/orderCustomer.d.ts +4 -0
- package/lib/solution/BookingTicket/utils/orderCustomer.js +58 -0
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.d.ts +4 -0
- package/lib/solution/BookingTicket/utils/scan/cloudSearch.js +14 -0
- package/lib/solution/BookingTicket/utils/scan/handleScan.js +2 -1
- package/lib/solution/Sales/index.d.ts +3 -0
- package/lib/solution/Sales/index.js +50 -15
- package/lib/solution/Sales/types.d.ts +3 -0
- package/lib/solution/ScanOrder/types.d.ts +4 -4
- package/lib/solution/ScanOrder/utils.js +3 -3
- package/package.json +1 -1
|
@@ -254,6 +254,37 @@ var SalesImpl = class extends import_BaseModule.BaseModule {
|
|
|
254
254
|
var _a;
|
|
255
255
|
return String(((_a = booking.order) == null ? void 0 : _a.payment_status) ?? "");
|
|
256
256
|
}
|
|
257
|
+
countBookingOrders(bookings) {
|
|
258
|
+
const orderIds = /* @__PURE__ */ new Set();
|
|
259
|
+
bookings.forEach((booking) => {
|
|
260
|
+
var _a;
|
|
261
|
+
const orderId = booking.order_id ?? ((_a = booking.order) == null ? void 0 : _a.order_id);
|
|
262
|
+
if (orderId === void 0 || orderId === null)
|
|
263
|
+
return;
|
|
264
|
+
orderIds.add(String(orderId));
|
|
265
|
+
});
|
|
266
|
+
return orderIds.size;
|
|
267
|
+
}
|
|
268
|
+
countCompletedBookings(bookings) {
|
|
269
|
+
return bookings.filter((booking) => this.getBookingAppointmentStatus(booking) === "completed").length;
|
|
270
|
+
}
|
|
271
|
+
groupBookingsByResource(bookingList) {
|
|
272
|
+
const bookingMap = /* @__PURE__ */ new Map();
|
|
273
|
+
bookingList.forEach((booking) => {
|
|
274
|
+
if (!Array.isArray(booking.resources))
|
|
275
|
+
return;
|
|
276
|
+
booking.resources.forEach((resource) => {
|
|
277
|
+
const relationId = resource == null ? void 0 : resource.relation_id;
|
|
278
|
+
if (relationId === void 0 || relationId === null)
|
|
279
|
+
return;
|
|
280
|
+
const key = String(relationId);
|
|
281
|
+
const list = bookingMap.get(key) || [];
|
|
282
|
+
list.push(booking);
|
|
283
|
+
bookingMap.set(key, list);
|
|
284
|
+
});
|
|
285
|
+
});
|
|
286
|
+
return bookingMap;
|
|
287
|
+
}
|
|
257
288
|
isBookingMatchedResource(booking, resourceId) {
|
|
258
289
|
if (!Array.isArray(booking.resources))
|
|
259
290
|
return false;
|
|
@@ -534,27 +565,22 @@ var SalesImpl = class extends import_BaseModule.BaseModule {
|
|
|
534
565
|
if (!Array.isArray(resourceList) || resourceList.length === 0)
|
|
535
566
|
return [];
|
|
536
567
|
const normalizedBookings = this.normalizeResourceBookings(current, deviceCurrent, bookingList);
|
|
537
|
-
const
|
|
538
|
-
|
|
539
|
-
if (!Array.isArray(booking.resources))
|
|
540
|
-
return;
|
|
541
|
-
booking.resources.forEach((resource) => {
|
|
542
|
-
const relationId = resource == null ? void 0 : resource.relation_id;
|
|
543
|
-
if (relationId === void 0 || relationId === null)
|
|
544
|
-
return;
|
|
545
|
-
const key = String(relationId);
|
|
546
|
-
const list2 = bookingMap.get(key) || [];
|
|
547
|
-
list2.push(booking);
|
|
548
|
-
bookingMap.set(key, list2);
|
|
549
|
-
});
|
|
550
|
-
});
|
|
568
|
+
const rawBookingMap = this.groupBookingsByResource(bookingList);
|
|
569
|
+
const bookingMap = this.groupBookingsByResource(normalizedBookings);
|
|
551
570
|
const list = resourceList.map((resource) => {
|
|
552
571
|
const resourceId = this.getResourceId(resource);
|
|
572
|
+
const rawMatchedBookings = rawBookingMap.get(String(resourceId)) || [];
|
|
553
573
|
const matchedBookings = bookingMap.get(String(resourceId)) || [];
|
|
574
|
+
const orderCount = this.countBookingOrders(rawMatchedBookings);
|
|
575
|
+
const bookingCount = rawMatchedBookings.length;
|
|
576
|
+
const compeleteBookingCount = this.countCompletedBookings(rawMatchedBookings);
|
|
554
577
|
const bookings = this.pickBookingsForCurrentPoint(current, matchedBookings);
|
|
555
578
|
return {
|
|
556
579
|
...resource,
|
|
557
580
|
resource_id: resourceId,
|
|
581
|
+
orderCount,
|
|
582
|
+
bookingCount,
|
|
583
|
+
compeleteBookingCount,
|
|
558
584
|
bookings
|
|
559
585
|
};
|
|
560
586
|
});
|
|
@@ -616,6 +642,9 @@ var SalesImpl = class extends import_BaseModule.BaseModule {
|
|
|
616
642
|
current,
|
|
617
643
|
this.normalizeResourceBookings(current, deviceCurrent, unpaidBookingList)
|
|
618
644
|
);
|
|
645
|
+
const orderCount = this.countBookingOrders(matchedBookingList);
|
|
646
|
+
const bookingCount = matchedBookingList.length;
|
|
647
|
+
const compeleteBookingCount = completedBookingList.length;
|
|
619
648
|
this.logger.addLog({
|
|
620
649
|
type: "info",
|
|
621
650
|
title: "getResourceBookingItem",
|
|
@@ -626,12 +655,18 @@ var SalesImpl = class extends import_BaseModule.BaseModule {
|
|
|
626
655
|
bookingList: (_b = params.bookingList) == null ? void 0 : _b.length,
|
|
627
656
|
bookings: bookings.length,
|
|
628
657
|
completedBookings: completedBookings.length,
|
|
629
|
-
unpaidBookings: unpaidBookings.length
|
|
658
|
+
unpaidBookings: unpaidBookings.length,
|
|
659
|
+
orderCount,
|
|
660
|
+
bookingCount,
|
|
661
|
+
compeleteBookingCount
|
|
630
662
|
}
|
|
631
663
|
});
|
|
632
664
|
return {
|
|
633
665
|
...targetResource,
|
|
634
666
|
resource_id: resourceId,
|
|
667
|
+
orderCount,
|
|
668
|
+
bookingCount,
|
|
669
|
+
compeleteBookingCount,
|
|
635
670
|
bookings,
|
|
636
671
|
completedBookings,
|
|
637
672
|
unpaidBookings
|
|
@@ -30,6 +30,9 @@ export interface SalesResourceMatchedBooking extends Omit<BookingData, 'status'>
|
|
|
30
30
|
}
|
|
31
31
|
export interface SalesResourceBookingItem extends Omit<ResourceData, 'bookings'> {
|
|
32
32
|
resource_id: ResourceId;
|
|
33
|
+
orderCount: number;
|
|
34
|
+
bookingCount: number;
|
|
35
|
+
compeleteBookingCount: number;
|
|
33
36
|
bookings: SalesResourceMatchedBooking[];
|
|
34
37
|
}
|
|
35
38
|
export interface SalesResourceBookingItemWithGroups extends SalesResourceBookingItem {
|
|
@@ -85,13 +85,13 @@ export interface ScanOrderOrderProduct extends ScanOrderOrderProductIdentity {
|
|
|
85
85
|
* 出站 payload 版本的商品行。
|
|
86
86
|
*
|
|
87
87
|
* 与 tempOrder 内部 `ScanOrderOrderProduct` 的字段差异:
|
|
88
|
-
* - `product_option_item[*]`:内部为 `{
|
|
89
|
-
*
|
|
88
|
+
* - `product_option_item[*]`:内部为 `{ option_group_item_id, option_group_id, num, price, ... }`,
|
|
89
|
+
* 出站保留 `{ option_group_item_id, option_group_id, num }`
|
|
90
90
|
* (后端 checkout 协议;丢弃 `price` 等运行时辅助字段)。
|
|
91
91
|
* - `product_bundle[*].option[*]`:同上重命名规则。
|
|
92
92
|
*
|
|
93
|
-
* 运行时(UI
|
|
94
|
-
*
|
|
93
|
+
* 运行时(UI 显示、加购合并、指纹、持久化)与提交边界统一消费字段名
|
|
94
|
+
* `option_group_item_id`,保持 tempOrder 与后端协议一致。
|
|
95
95
|
*/
|
|
96
96
|
export interface ScanOrderSubmitProduct extends Omit<ScanOrderOrderProduct, '_origin' | 'identity_key'> {
|
|
97
97
|
/**
|
|
@@ -349,13 +349,13 @@ function attachItemRuleLimitsToTopLevelProducts(productList, limits) {
|
|
|
349
349
|
function buildProductLineFingerprint(productOptionItem, productBundle) {
|
|
350
350
|
const optArr = Array.isArray(productOptionItem) ? productOptionItem : [];
|
|
351
351
|
const normalizedOpts = optArr.map((item) => ({
|
|
352
|
-
|
|
352
|
+
option_group_item_id: Number(item == null ? void 0 : item.option_group_item_id) || 0,
|
|
353
353
|
option_group_id: Number(item == null ? void 0 : item.option_group_id) || 0,
|
|
354
354
|
num: typeof (item == null ? void 0 : item.num) === "number" && !Number.isNaN(item.num) ? Math.max(1, Math.floor(item.num)) : 1,
|
|
355
355
|
price: String((item == null ? void 0 : item.price) ?? "")
|
|
356
356
|
})).sort((p, q) => {
|
|
357
|
-
if (p.
|
|
358
|
-
return p.
|
|
357
|
+
if (p.option_group_item_id !== q.option_group_item_id) {
|
|
358
|
+
return p.option_group_item_id - q.option_group_item_id;
|
|
359
359
|
}
|
|
360
360
|
if (p.option_group_id !== q.option_group_id)
|
|
361
361
|
return p.option_group_id - q.option_group_id;
|