@pisell/pisellos 2.2.215 → 2.2.217
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/modules/Order/index.d.ts +1 -1
- package/dist/modules/Order/index.js +19 -3
- package/dist/server/index.js +75 -52
- package/dist/server/modules/order/index.d.ts +13 -0
- package/dist/server/modules/order/index.js +457 -217
- package/dist/solution/BaseSales/index.js +40 -3
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingTicket/index.js +16 -19
- package/lib/model/strategy/adapter/promotion/index.js +49 -0
- package/lib/modules/Order/index.d.ts +1 -1
- package/lib/modules/Order/index.js +3 -0
- package/lib/server/index.js +24 -4
- package/lib/server/modules/order/index.d.ts +13 -0
- package/lib/server/modules/order/index.js +250 -96
- package/lib/solution/BaseSales/index.js +41 -2
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingTicket/index.js +2 -2
- package/package.json +1 -1
|
@@ -63,10 +63,47 @@ function preserveManualProductDiscountProducts(previousProducts, nextProducts) {
|
|
|
63
63
|
return previous && isBaseSalesManualProductDiscountProduct(previous) ? previous : product;
|
|
64
64
|
});
|
|
65
65
|
}
|
|
66
|
+
function getBaseSalesUniqueArrayMetadataKey(key) {
|
|
67
|
+
if (key === 'products' || key === 'bookings') return 'unique_identification_number';
|
|
68
|
+
if (key === 'payments' || key === 'payment') return 'unique_payment_number';
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function getBaseSalesMetadataUid(item, metadataKey) {
|
|
72
|
+
var _item$metadata$metada, _item$metadata;
|
|
73
|
+
var uid = (_item$metadata$metada = item === null || item === void 0 || (_item$metadata = item.metadata) === null || _item$metadata === void 0 ? void 0 : _item$metadata[metadataKey]) !== null && _item$metadata$metada !== void 0 ? _item$metadata$metada : item === null || item === void 0 ? void 0 : item[metadataKey];
|
|
74
|
+
if (uid === undefined || uid === null || uid === '') return null;
|
|
75
|
+
return String(uid);
|
|
76
|
+
}
|
|
77
|
+
function mergeBaseSalesUniqueArray(currentValue, loadedValue, metadataKey) {
|
|
78
|
+
var result = [];
|
|
79
|
+
var indexByUid = new Map();
|
|
80
|
+
var appendOrReplaceByUid = function appendOrReplaceByUid(item) {
|
|
81
|
+
var clonedItem = cloneDeep(item);
|
|
82
|
+
var uid = getBaseSalesMetadataUid(clonedItem, metadataKey);
|
|
83
|
+
if (!uid) {
|
|
84
|
+
result.push(clonedItem);
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
var existingIndex = indexByUid.get(uid);
|
|
88
|
+
if (existingIndex !== undefined) {
|
|
89
|
+
result[existingIndex] = clonedItem;
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
indexByUid.set(uid, result.length);
|
|
93
|
+
result.push(clonedItem);
|
|
94
|
+
};
|
|
95
|
+
currentValue.forEach(appendOrReplaceByUid);
|
|
96
|
+
loadedValue.forEach(appendOrReplaceByUid);
|
|
97
|
+
return result;
|
|
98
|
+
}
|
|
66
99
|
function mergeSalesDetailRecordWithTempOrder(currentTempOrder, loadedRecord) {
|
|
67
100
|
if (!currentTempOrder) return loadedRecord;
|
|
68
|
-
return mergeWith(cloneDeep(currentTempOrder), cloneDeep(loadedRecord || {}), function (currentValue, loadedValue) {
|
|
101
|
+
return mergeWith(cloneDeep(currentTempOrder), cloneDeep(loadedRecord || {}), function (currentValue, loadedValue, key) {
|
|
69
102
|
if (Array.isArray(currentValue) && Array.isArray(loadedValue)) {
|
|
103
|
+
var metadataKey = getBaseSalesUniqueArrayMetadataKey(key);
|
|
104
|
+
if (metadataKey) {
|
|
105
|
+
return mergeBaseSalesUniqueArray(currentValue, loadedValue, metadataKey);
|
|
106
|
+
}
|
|
70
107
|
return [].concat(_toConsumableArray(cloneDeep(currentValue)), _toConsumableArray(cloneDeep(loadedValue)));
|
|
71
108
|
}
|
|
72
109
|
if (Array.isArray(loadedValue)) return cloneDeep(loadedValue);
|
|
@@ -1868,7 +1905,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1868
1905
|
}
|
|
1869
1906
|
throw new Error('BaseSales 解决方案需要 order 模块支持');
|
|
1870
1907
|
case 2:
|
|
1871
|
-
this.store.order.persistTempOrder();
|
|
1908
|
+
// this.store.order.persistTempOrder();
|
|
1872
1909
|
inferredPaymentStatus = this.getSubmitPaymentStatus(params === null || params === void 0 ? void 0 : params.paymentStatus);
|
|
1873
1910
|
submitParams = _objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
1874
1911
|
cacheId: this.cacheId,
|
|
@@ -1886,7 +1923,7 @@ export var BaseSalesImpl = /*#__PURE__*/function (_BaseModule) {
|
|
|
1886
1923
|
enhancePayload: params.enhancePayload
|
|
1887
1924
|
} : {});
|
|
1888
1925
|
return _context18.abrupt("return", this.store.order.submitTempOrder(submitParams));
|
|
1889
|
-
case
|
|
1926
|
+
case 5:
|
|
1890
1927
|
case "end":
|
|
1891
1928
|
return _context18.stop();
|
|
1892
1929
|
}
|
|
@@ -311,7 +311,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
311
311
|
date: string;
|
|
312
312
|
status: string;
|
|
313
313
|
week: string;
|
|
314
|
-
weekNum: 0 |
|
|
314
|
+
weekNum: 0 | 2 | 1 | 6 | 3 | 4 | 5;
|
|
315
315
|
}[]>;
|
|
316
316
|
submitTimeSlot(timeSlots: TimeSliceItem): void;
|
|
317
317
|
private getScheduleDataByIds;
|
|
@@ -391,26 +391,22 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
391
391
|
country_calling_code: sales === null || sales === void 0 ? void 0 : sales.country_calling_code
|
|
392
392
|
} : null;
|
|
393
393
|
selectedCustomer = (_ref = detailCustomer !== null && detailCustomer !== void 0 ? detailCustomer : orderCustomerSnapshot) !== null && _ref !== void 0 ? _ref : protocolCustomer;
|
|
394
|
-
if (
|
|
395
|
-
|
|
396
|
-
|
|
394
|
+
if (customerModule && selectedCustomer) {
|
|
395
|
+
_ref2 = selectedCustomer !== null && selectedCustomer !== void 0 ? selectedCustomer : {}, detailCustomerId = _ref2.id, detailCustomerRest = _objectWithoutProperties(_ref2, _excluded);
|
|
396
|
+
rawId = detailCustomerId !== null && detailCustomerId !== void 0 ? detailCustomerId : '';
|
|
397
|
+
customer = _objectSpread(_objectSpread({}, detailCustomerRest), {}, {
|
|
398
|
+
id: rawId == null ? '' : rawId,
|
|
399
|
+
name: (_selectedCustomer$nam = selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.name) !== null && _selectedCustomer$nam !== void 0 ? _selectedCustomer$nam : '',
|
|
400
|
+
phone: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.phone,
|
|
401
|
+
email: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.email,
|
|
402
|
+
country_calling_code: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.country_calling_code
|
|
403
|
+
});
|
|
404
|
+
customerModule.setSelectedCustomer(customer);
|
|
405
|
+
this.setOrderCustomer(customer);
|
|
406
|
+
// await this.store.order.saveDraft();
|
|
397
407
|
}
|
|
398
|
-
_ref2 = selectedCustomer !== null && selectedCustomer !== void 0 ? selectedCustomer : {}, detailCustomerId = _ref2.id, detailCustomerRest = _objectWithoutProperties(_ref2, _excluded);
|
|
399
|
-
rawId = detailCustomerId !== null && detailCustomerId !== void 0 ? detailCustomerId : '';
|
|
400
|
-
customer = _objectSpread(_objectSpread({}, detailCustomerRest), {}, {
|
|
401
|
-
id: rawId == null ? '' : rawId,
|
|
402
|
-
name: (_selectedCustomer$nam = selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.name) !== null && _selectedCustomer$nam !== void 0 ? _selectedCustomer$nam : '',
|
|
403
|
-
phone: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.phone,
|
|
404
|
-
email: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.email,
|
|
405
|
-
country_calling_code: selectedCustomer === null || selectedCustomer === void 0 ? void 0 : selectedCustomer.country_calling_code
|
|
406
|
-
});
|
|
407
|
-
customerModule.setSelectedCustomer(customer);
|
|
408
|
-
this.setOrderCustomer(customer);
|
|
409
|
-
_context5.next = 17;
|
|
410
|
-
return this.store.order.saveDraft();
|
|
411
|
-
case 17:
|
|
412
408
|
return _context5.abrupt("return", sales);
|
|
413
|
-
case
|
|
409
|
+
case 11:
|
|
414
410
|
case "end":
|
|
415
411
|
return _context5.stop();
|
|
416
412
|
}
|
|
@@ -809,7 +805,8 @@ export var BookingTicketImpl = /*#__PURE__*/function (_BaseSalesImpl) {
|
|
|
809
805
|
throw new Error('refreshSalesDetail: tempOrder.order_id 缺失');
|
|
810
806
|
case 6:
|
|
811
807
|
return _context11.abrupt("return", this.loadSalesDetail({
|
|
812
|
-
orderId: Number(orderId)
|
|
808
|
+
orderId: Number(orderId),
|
|
809
|
+
merge: true
|
|
813
810
|
// forceRemote: true,
|
|
814
811
|
}));
|
|
815
812
|
case 7:
|
|
@@ -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
|
+
});
|
|
@@ -334,7 +334,7 @@ export declare class OrderModule extends BaseModule implements Module, OrderModu
|
|
|
334
334
|
private logSubmitBackendRejected;
|
|
335
335
|
syncPaymentsToOrder<T = any>(params: SyncPaymentsToOrderParams): Promise<SyncPaymentsToOrderResult<T>>;
|
|
336
336
|
createOrder(params: CommitOrderParams['query']): {
|
|
337
|
-
type: "
|
|
337
|
+
type: "virtual" | "appointment_booking";
|
|
338
338
|
platform: string;
|
|
339
339
|
sales_channel: string;
|
|
340
340
|
order_sales_channel: string;
|
|
@@ -3031,6 +3031,9 @@ var OrderModule = class extends import_BaseModule.BaseModule {
|
|
|
3031
3031
|
if (!lookup) {
|
|
3032
3032
|
throw new Error("加载销售详情需要 lookup");
|
|
3033
3033
|
}
|
|
3034
|
+
if (lookup.startsWith("LOCAL_")) {
|
|
3035
|
+
params.forceRemote = false;
|
|
3036
|
+
}
|
|
3034
3037
|
const res = await this.request.get(`/order/sales/${encodeURIComponent(lookup)}`, {
|
|
3035
3038
|
with: ["products", "bookings", "payments", "customer", "summary", "contacts_info"],
|
|
3036
3039
|
...params.forceRemote ? { forceRemote: true } : {}
|
package/lib/server/index.js
CHANGED
|
@@ -467,7 +467,13 @@ var Server = class {
|
|
|
467
467
|
* @example 批量:GET /update/localOrder?order_ids=96971,96972,96973
|
|
468
468
|
*/
|
|
469
469
|
this.handleUpdateLocalOrder = async ({ url, data }) => {
|
|
470
|
-
var _a;
|
|
470
|
+
var _a, _b;
|
|
471
|
+
if (typeof (data == null ? void 0 : data.order_id) === "string" && ((_a = data == null ? void 0 : data.order_id) == null ? void 0 : _a.startsWith("LOCAL_"))) {
|
|
472
|
+
return {
|
|
473
|
+
code: 200,
|
|
474
|
+
status: true
|
|
475
|
+
};
|
|
476
|
+
}
|
|
471
477
|
const batchIds = this.parseOrderIdsParam(url, data);
|
|
472
478
|
if (batchIds.length > 0) {
|
|
473
479
|
return this.handleUpdateLocalOrdersBatch(batchIds);
|
|
@@ -483,7 +489,7 @@ var Server = class {
|
|
|
483
489
|
this.logError("handleUpdateLocalOrder: Order 模块未注册");
|
|
484
490
|
return { code: 500, status: false, message: "Order 模块未注册", data: null };
|
|
485
491
|
}
|
|
486
|
-
if (!((
|
|
492
|
+
if (!((_b = this.app) == null ? void 0 : _b.request)) {
|
|
487
493
|
this.logError("handleUpdateLocalOrder: app.request 不可用");
|
|
488
494
|
return { code: 500, status: false, message: "app.request 不可用", data: null };
|
|
489
495
|
}
|
|
@@ -2545,6 +2551,7 @@ var Server = class {
|
|
|
2545
2551
|
return pendingResult;
|
|
2546
2552
|
}
|
|
2547
2553
|
async handlePendingSyncCheckoutOrder(params) {
|
|
2554
|
+
var _a, _b, _c, _d;
|
|
2548
2555
|
const { backendPath, data, title, reason } = params;
|
|
2549
2556
|
const pendingOrder = await this.buildPendingSyncCheckoutOrder(data);
|
|
2550
2557
|
if (!pendingOrder) {
|
|
@@ -2573,18 +2580,31 @@ var Server = class {
|
|
|
2573
2580
|
}
|
|
2574
2581
|
try {
|
|
2575
2582
|
await this.order.upsertPendingSyncOrders([pendingOrder]);
|
|
2576
|
-
this.
|
|
2583
|
+
this.logInfo(`${title}: 订单已写入本地待同步`, {
|
|
2577
2584
|
backendPath,
|
|
2578
2585
|
reason,
|
|
2579
2586
|
order_id: pendingOrder.order_id,
|
|
2580
2587
|
external_sale_number: pendingOrder.external_sale_number,
|
|
2581
2588
|
order_number: pendingOrder.order_number
|
|
2582
2589
|
});
|
|
2590
|
+
const changeGivenAmount = (_a = pendingOrder == null ? void 0 : pendingOrder.payments) == null ? void 0 : _a.reduce((sum, payment) => {
|
|
2591
|
+
var _a2;
|
|
2592
|
+
return sum + this.toAmountNumber((_a2 = payment == null ? void 0 : payment.metadata) == null ? void 0 : _a2.change_given_amount);
|
|
2593
|
+
}, 0);
|
|
2583
2594
|
return {
|
|
2584
2595
|
code: 200,
|
|
2585
2596
|
status: true,
|
|
2586
2597
|
message: "",
|
|
2587
|
-
data:
|
|
2598
|
+
data: {
|
|
2599
|
+
order_id: (pendingOrder == null ? void 0 : pendingOrder.order_id) ?? (pendingOrder == null ? void 0 : pendingOrder.external_sale_number),
|
|
2600
|
+
amount_gap: (_b = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _b.amount_gap,
|
|
2601
|
+
expect_amount: (_c = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _c.expect_amount,
|
|
2602
|
+
total_amount: (_d = pendingOrder == null ? void 0 : pendingOrder.summary) == null ? void 0 : _d.total_amount,
|
|
2603
|
+
payment_status: pendingOrder == null ? void 0 : pendingOrder.payment_status,
|
|
2604
|
+
payment_info: {
|
|
2605
|
+
current_change_given_amount: changeGivenAmount
|
|
2606
|
+
}
|
|
2607
|
+
}
|
|
2588
2608
|
};
|
|
2589
2609
|
} catch (error) {
|
|
2590
2610
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -43,6 +43,7 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
43
43
|
* @param metadata 日志元数据
|
|
44
44
|
*/
|
|
45
45
|
private logError;
|
|
46
|
+
private logWarning;
|
|
46
47
|
/**
|
|
47
48
|
* 记录订单最近一次 SQLite 写入,供 pubsub 回声去重使用。
|
|
48
49
|
*
|
|
@@ -119,6 +120,9 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
119
120
|
getRoutes(): RouteDefinition[];
|
|
120
121
|
destroy(): void;
|
|
121
122
|
private syncOrdersMap;
|
|
123
|
+
private getOrderMapKey;
|
|
124
|
+
private isBlankIdentityValue;
|
|
125
|
+
private getOrderIdentityEntries;
|
|
122
126
|
private getOrderIdentityKeys;
|
|
123
127
|
private extractResourceIds;
|
|
124
128
|
private getOrderDateKey;
|
|
@@ -182,6 +186,15 @@ export declare class OrderModule extends BaseModule implements Module {
|
|
|
182
186
|
* // => 'S-1001'
|
|
183
187
|
*/
|
|
184
188
|
private getOrderStorageKey;
|
|
189
|
+
private getOrderIdentityMatchKeys;
|
|
190
|
+
private doOrdersShareIdentity;
|
|
191
|
+
private findOrderIndexByIdentity;
|
|
192
|
+
private getOrderCompletenessScore;
|
|
193
|
+
private pickPreferredOrder;
|
|
194
|
+
private mergeOrderRecords;
|
|
195
|
+
private summarizeDuplicateOrders;
|
|
196
|
+
private logDuplicateOrders;
|
|
197
|
+
private compactOrderListByIdentity;
|
|
185
198
|
/**
|
|
186
199
|
* 当前订单拉取窗口:
|
|
187
200
|
* - 优先使用 createdAtQuery.sales_time_between(已按营业日边界初始化)
|