@pisell/pisellos 0.0.491 → 0.0.493
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/apis/picoding.d.ts +0 -0
- package/dist/apis/picoding.js +1 -0
- package/dist/model/strategy/adapter/index.d.ts +2 -0
- package/dist/model/strategy/adapter/index.js +3 -1
- package/dist/model/strategy/adapter/itemRule/adapter.d.ts +59 -0
- package/dist/model/strategy/adapter/itemRule/adapter.js +439 -0
- package/dist/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
- package/dist/model/strategy/adapter/itemRule/evaluator.js +169 -0
- package/dist/model/strategy/adapter/itemRule/examples.d.ts +64 -0
- package/dist/model/strategy/adapter/itemRule/examples.js +315 -0
- package/dist/model/strategy/adapter/itemRule/index.d.ts +5 -0
- package/dist/model/strategy/adapter/itemRule/index.js +5 -0
- package/dist/model/strategy/adapter/itemRule/type.d.ts +206 -0
- package/dist/model/strategy/adapter/itemRule/type.js +101 -0
- package/dist/model/strategy/adapter/walletPass/utils.js +2 -2
- package/dist/modules/OpenData/index.d.ts +23 -0
- package/dist/modules/OpenData/index.js +167 -0
- package/dist/modules/OpenData/types.d.ts +73 -0
- package/dist/modules/OpenData/types.js +1 -0
- package/dist/modules/OpenData/utils.d.ts +2 -0
- package/dist/modules/OpenData/utils.js +75 -0
- package/dist/modules/Order/index.d.ts +54 -2
- package/dist/modules/Order/index.js +717 -27
- package/dist/modules/Order/types.d.ts +144 -12
- package/dist/modules/Order/utils.d.ts +25 -0
- package/dist/modules/Order/utils.js +214 -1
- package/dist/modules/Product/index.d.ts +1 -1
- package/dist/modules/Product/utils.js +2 -2
- package/dist/modules/ProductList/index.d.ts +1 -1
- package/dist/modules/ProductList/index.js +3 -1
- package/dist/modules/Quotation/index.d.ts +40 -0
- package/dist/modules/Quotation/index.js +212 -0
- package/dist/modules/Quotation/types.d.ts +42 -0
- package/dist/modules/Quotation/types.js +1 -0
- package/dist/modules/SalesSummary/index.d.ts +63 -0
- package/dist/modules/SalesSummary/index.js +174 -0
- package/dist/modules/SalesSummary/types.d.ts +59 -0
- package/dist/modules/SalesSummary/types.js +1 -0
- package/dist/modules/SalesSummary/utils.d.ts +30 -0
- package/dist/modules/SalesSummary/utils.js +506 -0
- package/dist/modules/ScanOrderLogger/index.d.ts +21 -0
- package/dist/modules/ScanOrderLogger/index.js +161 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/feishu.js +95 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/dist/modules/ScanOrderLogger/providers/grafana.js +50 -0
- package/dist/modules/ScanOrderLogger/types.d.ts +46 -0
- package/dist/modules/ScanOrderLogger/types.js +1 -0
- package/dist/modules/Summary/utils.d.ts +3 -3
- package/dist/modules/Summary/utils.js +4 -4
- package/dist/modules/index.d.ts +4 -0
- package/dist/modules/index.js +5 -1
- package/dist/solution/BookingByStep/index.d.ts +1 -1
- package/dist/solution/BookingByStep/index.js +44 -42
- package/dist/solution/BookingByStep/types.d.ts +3 -1
- package/dist/solution/BookingByStep/types.js +5 -1
- package/dist/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/dist/solution/BookingByStep/utils/timeslots.js +19 -12
- package/dist/solution/BookingTicket/index.d.ts +1 -1
- package/dist/solution/ScanOrder/index.d.ts +90 -0
- package/dist/solution/ScanOrder/index.js +1853 -0
- package/dist/solution/ScanOrder/types.d.ts +210 -0
- package/dist/solution/ScanOrder/types.js +16 -0
- package/dist/solution/ScanOrder/utils.d.ts +93 -0
- package/dist/solution/ScanOrder/utils.js +378 -0
- package/dist/solution/VenueBooking/index.d.ts +159 -0
- package/dist/solution/VenueBooking/index.js +2773 -0
- package/dist/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/dist/solution/VenueBooking/types.d.ts +123 -0
- package/dist/solution/VenueBooking/types.js +21 -0
- package/dist/solution/VenueBooking/utils/dateSummary.d.ts +10 -0
- package/dist/solution/VenueBooking/utils/dateSummary.js +102 -0
- package/dist/solution/VenueBooking/utils/resource.d.ts +4 -0
- package/dist/solution/VenueBooking/utils/resource.js +94 -0
- package/dist/solution/VenueBooking/utils/slotMerge.d.ts +18 -0
- package/dist/solution/VenueBooking/utils/slotMerge.js +128 -0
- package/dist/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/dist/solution/VenueBooking/utils/timeSlot.js +256 -0
- package/dist/solution/VenueBooking/utils.d.ts +1 -0
- package/dist/solution/VenueBooking/utils.js +1 -0
- package/dist/solution/index.d.ts +2 -0
- package/dist/solution/index.js +3 -1
- package/lib/apis/picoding.d.ts +0 -0
- package/lib/apis/picoding.js +0 -0
- package/lib/model/strategy/adapter/index.d.ts +2 -0
- package/lib/model/strategy/adapter/index.js +6 -0
- package/lib/model/strategy/adapter/itemRule/adapter.d.ts +59 -0
- package/lib/model/strategy/adapter/itemRule/adapter.js +338 -0
- package/lib/model/strategy/adapter/itemRule/evaluator.d.ts +43 -0
- package/lib/model/strategy/adapter/itemRule/evaluator.js +124 -0
- package/lib/model/strategy/adapter/itemRule/examples.d.ts +64 -0
- package/lib/model/strategy/adapter/itemRule/examples.js +269 -0
- package/lib/model/strategy/adapter/itemRule/index.d.ts +5 -0
- package/lib/model/strategy/adapter/itemRule/index.js +58 -0
- package/lib/model/strategy/adapter/itemRule/type.d.ts +206 -0
- package/lib/model/strategy/adapter/itemRule/type.js +46 -0
- package/lib/model/strategy/adapter/walletPass/utils.js +2 -2
- package/lib/modules/OpenData/index.d.ts +23 -0
- package/lib/modules/OpenData/index.js +116 -0
- package/lib/modules/OpenData/types.d.ts +73 -0
- package/lib/modules/OpenData/types.js +17 -0
- package/lib/modules/OpenData/utils.d.ts +2 -0
- package/lib/modules/OpenData/utils.js +111 -0
- package/lib/modules/Order/index.d.ts +54 -2
- package/lib/modules/Order/index.js +389 -1
- package/lib/modules/Order/types.d.ts +144 -12
- package/lib/modules/Order/utils.d.ts +25 -0
- package/lib/modules/Order/utils.js +217 -0
- package/lib/modules/Product/index.d.ts +1 -1
- package/lib/modules/Product/utils.js +2 -2
- package/lib/modules/ProductList/index.d.ts +1 -1
- package/lib/modules/ProductList/index.js +2 -1
- package/lib/modules/Quotation/index.d.ts +40 -0
- package/lib/modules/Quotation/index.js +128 -0
- package/lib/modules/Quotation/types.d.ts +42 -0
- package/lib/modules/Quotation/types.js +17 -0
- package/lib/modules/SalesSummary/index.d.ts +63 -0
- package/lib/modules/SalesSummary/index.js +105 -0
- package/lib/modules/SalesSummary/types.d.ts +59 -0
- package/lib/modules/SalesSummary/types.js +17 -0
- package/lib/modules/SalesSummary/utils.d.ts +30 -0
- package/lib/modules/SalesSummary/utils.js +445 -0
- package/lib/modules/ScanOrderLogger/index.d.ts +21 -0
- package/lib/modules/ScanOrderLogger/index.js +135 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/feishu.js +82 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.d.ts +2 -0
- package/lib/modules/ScanOrderLogger/providers/grafana.js +52 -0
- package/lib/modules/ScanOrderLogger/types.d.ts +46 -0
- package/lib/modules/ScanOrderLogger/types.js +17 -0
- package/lib/modules/Summary/utils.d.ts +3 -3
- package/lib/modules/Summary/utils.js +4 -4
- package/lib/modules/index.d.ts +4 -0
- package/lib/modules/index.js +9 -1
- package/lib/solution/BookingByStep/index.d.ts +1 -1
- package/lib/solution/BookingByStep/index.js +4 -2
- package/lib/solution/BookingByStep/types.d.ts +3 -1
- package/lib/solution/BookingByStep/types.js +10 -0
- package/lib/solution/BookingByStep/utils/timeslots.d.ts +3 -1
- package/lib/solution/BookingByStep/utils/timeslots.js +19 -11
- package/lib/solution/BookingTicket/index.d.ts +1 -1
- package/lib/solution/ScanOrder/index.d.ts +90 -0
- package/lib/solution/ScanOrder/index.js +1071 -0
- package/lib/solution/ScanOrder/types.d.ts +210 -0
- package/lib/solution/ScanOrder/types.js +36 -0
- package/lib/solution/ScanOrder/utils.d.ts +93 -0
- package/lib/solution/ScanOrder/utils.js +342 -0
- package/lib/solution/VenueBooking/index.d.ts +159 -0
- package/lib/solution/VenueBooking/index.js +1508 -0
- package/lib/solution/VenueBooking/sales-section-4-annotated.json +343 -0
- package/lib/solution/VenueBooking/types.d.ts +123 -0
- package/lib/solution/VenueBooking/types.js +44 -0
- package/lib/solution/VenueBooking/utils/dateSummary.d.ts +10 -0
- package/lib/solution/VenueBooking/utils/dateSummary.js +101 -0
- package/lib/solution/VenueBooking/utils/resource.d.ts +4 -0
- package/lib/solution/VenueBooking/utils/resource.js +80 -0
- package/lib/solution/VenueBooking/utils/slotMerge.d.ts +18 -0
- package/lib/solution/VenueBooking/utils/slotMerge.js +156 -0
- package/lib/solution/VenueBooking/utils/timeSlot.d.ts +32 -0
- package/lib/solution/VenueBooking/utils/timeSlot.js +200 -0
- package/lib/solution/VenueBooking/utils.d.ts +1 -0
- package/lib/solution/VenueBooking/utils.js +69 -0
- package/lib/solution/index.d.ts +2 -0
- package/lib/solution/index.js +5 -1
- package/package.json +1 -1
|
@@ -0,0 +1,135 @@
|
|
|
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 __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/modules/ScanOrderLogger/index.ts
|
|
31
|
+
var ScanOrderLogger_exports = {};
|
|
32
|
+
__export(ScanOrderLogger_exports, {
|
|
33
|
+
ScanOrderLoggerModule: () => ScanOrderLoggerModule
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(ScanOrderLogger_exports);
|
|
36
|
+
var import_dayjs = __toESM(require("dayjs"));
|
|
37
|
+
var import_BaseModule = require("../BaseModule");
|
|
38
|
+
var import_feishu = require("./providers/feishu");
|
|
39
|
+
var import_grafana = require("./providers/grafana");
|
|
40
|
+
__reExport(ScanOrderLogger_exports, require("./types"), module.exports);
|
|
41
|
+
var defaultProviderConfig = {
|
|
42
|
+
feishu: {
|
|
43
|
+
webhook: "https://open.feishu.cn/open-apis/bot/v2/hook/REPLACE_ME"
|
|
44
|
+
},
|
|
45
|
+
grafana: {
|
|
46
|
+
endpoint: "https://grafana.example.com/collect"
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
var providerMap = {
|
|
50
|
+
feishu: import_feishu.feishuLoggerProvider,
|
|
51
|
+
grafana: import_grafana.grafanaLoggerProvider
|
|
52
|
+
};
|
|
53
|
+
var ScanOrderLoggerModule = class extends import_BaseModule.BaseModule {
|
|
54
|
+
constructor() {
|
|
55
|
+
super(...arguments);
|
|
56
|
+
this.defaultName = "scanOrderLogger";
|
|
57
|
+
this.defaultVersion = "1.0.0";
|
|
58
|
+
}
|
|
59
|
+
async initialize(core, options = {}) {
|
|
60
|
+
var _a, _b, _c;
|
|
61
|
+
this.core = core;
|
|
62
|
+
this.store = options.store;
|
|
63
|
+
const provider = ((_a = options.otherParams) == null ? void 0 : _a.provider) || "feishu";
|
|
64
|
+
const providerConfig = ((_b = options.otherParams) == null ? void 0 : _b.providerConfig) || {};
|
|
65
|
+
const context = ((_c = options.otherParams) == null ? void 0 : _c.context) || {};
|
|
66
|
+
this.store.provider = provider;
|
|
67
|
+
this.store.providerConfig = {
|
|
68
|
+
...defaultProviderConfig,
|
|
69
|
+
...providerConfig,
|
|
70
|
+
feishu: {
|
|
71
|
+
...defaultProviderConfig.feishu,
|
|
72
|
+
...providerConfig.feishu || {}
|
|
73
|
+
},
|
|
74
|
+
grafana: {
|
|
75
|
+
...defaultProviderConfig.grafana,
|
|
76
|
+
...providerConfig.grafana || {}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
this.store.context = context;
|
|
80
|
+
}
|
|
81
|
+
setContext(context) {
|
|
82
|
+
this.store.context = {
|
|
83
|
+
...this.store.context,
|
|
84
|
+
...context
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
setProvider(provider) {
|
|
88
|
+
this.store.provider = provider;
|
|
89
|
+
}
|
|
90
|
+
setProviderConfig(providerConfig) {
|
|
91
|
+
this.store.providerConfig = {
|
|
92
|
+
...this.store.providerConfig,
|
|
93
|
+
...providerConfig,
|
|
94
|
+
feishu: {
|
|
95
|
+
...this.store.providerConfig.feishu || {},
|
|
96
|
+
...providerConfig.feishu || {}
|
|
97
|
+
},
|
|
98
|
+
grafana: {
|
|
99
|
+
...this.store.providerConfig.grafana || {},
|
|
100
|
+
...providerConfig.grafana || {}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
buildRecord(params) {
|
|
105
|
+
return {
|
|
106
|
+
level: params.level || "info",
|
|
107
|
+
title: params.title,
|
|
108
|
+
timestamp: params.timestamp || (0, import_dayjs.default)().format("YYYY-MM-DD HH:mm:ss"),
|
|
109
|
+
payload: params.payload || {},
|
|
110
|
+
extra: params.extra || {},
|
|
111
|
+
context: this.store.context || {}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
async addLog(params) {
|
|
115
|
+
if (!params.title) {
|
|
116
|
+
console.warn("[ScanOrderLogger] 缺少日志标题,已跳过");
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const provider = providerMap[this.store.provider] || import_feishu.feishuLoggerProvider;
|
|
120
|
+
const record = this.buildRecord(params);
|
|
121
|
+
try {
|
|
122
|
+
await provider.send({
|
|
123
|
+
record,
|
|
124
|
+
providerConfig: this.store.providerConfig
|
|
125
|
+
});
|
|
126
|
+
} catch (error) {
|
|
127
|
+
console.warn("[ScanOrderLogger] 日志上报失败", error);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
132
|
+
0 && (module.exports = {
|
|
133
|
+
ScanOrderLoggerModule,
|
|
134
|
+
...require("./types")
|
|
135
|
+
});
|
|
@@ -0,0 +1,82 @@
|
|
|
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);
|
|
18
|
+
|
|
19
|
+
// src/modules/ScanOrderLogger/providers/feishu.ts
|
|
20
|
+
var feishu_exports = {};
|
|
21
|
+
__export(feishu_exports, {
|
|
22
|
+
feishuLoggerProvider: () => feishuLoggerProvider
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(feishu_exports);
|
|
25
|
+
function safeStringify(payload) {
|
|
26
|
+
if (payload === void 0 || payload === null)
|
|
27
|
+
return "";
|
|
28
|
+
try {
|
|
29
|
+
return JSON.stringify(payload);
|
|
30
|
+
} catch (error) {
|
|
31
|
+
return `[unserializable: ${String(error)}]`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
function createFeishuMessageContent(contentArr) {
|
|
35
|
+
return JSON.stringify(
|
|
36
|
+
contentArr.map((item) => [
|
|
37
|
+
{ tag: "text", text: `${item.key}: ` },
|
|
38
|
+
{ tag: "text", text: item.value }
|
|
39
|
+
])
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
var feishuLoggerProvider = {
|
|
43
|
+
async send(payload) {
|
|
44
|
+
var _a, _b;
|
|
45
|
+
const webhook = (_b = (_a = payload.providerConfig) == null ? void 0 : _a.feishu) == null ? void 0 : _b.webhook;
|
|
46
|
+
if (webhook && webhook.includes("REPLACE_ME"))
|
|
47
|
+
return;
|
|
48
|
+
if (!webhook) {
|
|
49
|
+
console.warn("[ScanOrderLogger] Feishu webhook 未配置,跳过日志上报");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
if (typeof fetch !== "function") {
|
|
53
|
+
console.warn("[ScanOrderLogger] 当前环境不支持 fetch,跳过 Feishu 日志上报");
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const { record } = payload;
|
|
57
|
+
const contentArr = [
|
|
58
|
+
{ key: "日志级别", value: record.level },
|
|
59
|
+
{ key: "日志时间", value: record.timestamp },
|
|
60
|
+
{ key: "日志标题", value: record.title },
|
|
61
|
+
{ key: "缓存标识", value: record.context.cacheId || "" },
|
|
62
|
+
{ key: "日志来源", value: safeStringify(record.context) },
|
|
63
|
+
{ key: "日志内容", value: safeStringify(record.payload) },
|
|
64
|
+
{ key: "扩展信息", value: safeStringify(record.extra) }
|
|
65
|
+
];
|
|
66
|
+
const contentStr = createFeishuMessageContent(contentArr);
|
|
67
|
+
await fetch(webhook, {
|
|
68
|
+
headers: {
|
|
69
|
+
"Content-Type": "application/json"
|
|
70
|
+
},
|
|
71
|
+
method: "POST",
|
|
72
|
+
body: JSON.stringify({
|
|
73
|
+
msg_type: "post",
|
|
74
|
+
content: `{"post":{"zh_cn":{"title":"${record.title}","content":${contentStr}}}}`
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
80
|
+
0 && (module.exports = {
|
|
81
|
+
feishuLoggerProvider
|
|
82
|
+
});
|
|
@@ -0,0 +1,52 @@
|
|
|
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);
|
|
18
|
+
|
|
19
|
+
// src/modules/ScanOrderLogger/providers/grafana.ts
|
|
20
|
+
var grafana_exports = {};
|
|
21
|
+
__export(grafana_exports, {
|
|
22
|
+
grafanaLoggerProvider: () => grafanaLoggerProvider
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(grafana_exports);
|
|
25
|
+
var grafanaLoggerProvider = {
|
|
26
|
+
async send(payload) {
|
|
27
|
+
var _a, _b, _c, _d;
|
|
28
|
+
const endpoint = (_b = (_a = payload.providerConfig) == null ? void 0 : _a.grafana) == null ? void 0 : _b.endpoint;
|
|
29
|
+
if (!endpoint) {
|
|
30
|
+
console.warn("[ScanOrderLogger] Grafana endpoint 未配置,跳过日志上报");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (typeof fetch !== "function") {
|
|
34
|
+
console.warn("[ScanOrderLogger] 当前环境不支持 fetch,跳过 Grafana 日志上报");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
await fetch(endpoint, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: {
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
...((_d = (_c = payload.providerConfig) == null ? void 0 : _c.grafana) == null ? void 0 : _d.headers) || {}
|
|
42
|
+
},
|
|
43
|
+
body: JSON.stringify({
|
|
44
|
+
record: payload.record
|
|
45
|
+
})
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
50
|
+
0 && (module.exports = {
|
|
51
|
+
grafanaLoggerProvider
|
|
52
|
+
});
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type ScanOrderLogLevel = 'info' | 'warning' | 'error' | 'debug';
|
|
2
|
+
export type ScanOrderLoggerProviderType = 'feishu' | 'grafana';
|
|
3
|
+
export interface ScanOrderLoggerProviderFeishuConfig {
|
|
4
|
+
webhook?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ScanOrderLoggerProviderGrafanaConfig {
|
|
7
|
+
endpoint?: string;
|
|
8
|
+
headers?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
export interface ScanOrderLoggerProviderConfig {
|
|
11
|
+
feishu?: ScanOrderLoggerProviderFeishuConfig;
|
|
12
|
+
grafana?: ScanOrderLoggerProviderGrafanaConfig;
|
|
13
|
+
}
|
|
14
|
+
export interface ScanOrderLoggerContext {
|
|
15
|
+
cacheId?: string;
|
|
16
|
+
solutionName?: string;
|
|
17
|
+
moduleName?: string;
|
|
18
|
+
[key: string]: any;
|
|
19
|
+
}
|
|
20
|
+
export interface ScanOrderLogInput {
|
|
21
|
+
level?: ScanOrderLogLevel;
|
|
22
|
+
title: string;
|
|
23
|
+
payload?: Record<string, any>;
|
|
24
|
+
extra?: Record<string, any>;
|
|
25
|
+
timestamp?: string;
|
|
26
|
+
}
|
|
27
|
+
export interface ScanOrderLogRecord {
|
|
28
|
+
level: ScanOrderLogLevel;
|
|
29
|
+
title: string;
|
|
30
|
+
timestamp: string;
|
|
31
|
+
payload: Record<string, any>;
|
|
32
|
+
extra: Record<string, any>;
|
|
33
|
+
context: ScanOrderLoggerContext;
|
|
34
|
+
}
|
|
35
|
+
export interface ScanOrderLoggerDispatchPayload {
|
|
36
|
+
record: ScanOrderLogRecord;
|
|
37
|
+
providerConfig?: ScanOrderLoggerProviderConfig;
|
|
38
|
+
}
|
|
39
|
+
export interface ScanOrderLoggerProvider {
|
|
40
|
+
send: (payload: ScanOrderLoggerDispatchPayload) => Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export interface ScanOrderLoggerState {
|
|
43
|
+
provider: ScanOrderLoggerProviderType;
|
|
44
|
+
providerConfig: ScanOrderLoggerProviderConfig;
|
|
45
|
+
context: ScanOrderLoggerContext;
|
|
46
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/modules/ScanOrderLogger/types.ts
|
|
16
|
+
var types_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(types_exports);
|
|
@@ -7,8 +7,8 @@ export declare const calculatePriceDetails: (shopInfo: any, items: CartItem[], i
|
|
|
7
7
|
* @param item
|
|
8
8
|
*/
|
|
9
9
|
export declare const getBundleDiscountList: (bundle: any[]) => any[];
|
|
10
|
-
export declare const calcDiscountListDifference: (discountList: any[]) =>
|
|
11
|
-
export declare const getProductDiscountProductDiscountDifference: (item: CartItem) =>
|
|
10
|
+
export declare const calcDiscountListDifference: (discountList: any[]) => number;
|
|
11
|
+
export declare const getProductDiscountProductDiscountDifference: (item: CartItem) => number;
|
|
12
12
|
/**
|
|
13
13
|
* 计算订单税费(折扣前/折扣后),并把单品税费信息回写到商品数据上(用于明细展示/后续计算)。
|
|
14
14
|
*
|
|
@@ -100,7 +100,7 @@ export declare const calculateDeposit: (items: CartItem[]) => {
|
|
|
100
100
|
export declare const getSurchargeAmount: ({ bookingDetail, bookingId }: {
|
|
101
101
|
bookingDetail?: any;
|
|
102
102
|
bookingId?: number | undefined;
|
|
103
|
-
}, surcharge: any[], options: any) =>
|
|
103
|
+
}, surcharge: any[], options: any) => number;
|
|
104
104
|
/**
|
|
105
105
|
* 订单附加费各项信息
|
|
106
106
|
*
|
|
@@ -91,8 +91,8 @@ var getBundleDiscountList = (bundle) => {
|
|
|
91
91
|
var calcDiscountListDifference = (discountList) => {
|
|
92
92
|
return discountList.reduce((pre, cur) => {
|
|
93
93
|
var _a;
|
|
94
|
-
return pre
|
|
95
|
-
}, 0);
|
|
94
|
+
return pre.plus(((_a = cur == null ? void 0 : cur.metadata) == null ? void 0 : _a.product_discount_difference) || 0);
|
|
95
|
+
}, new import_decimal.default(0)).toNumber();
|
|
96
96
|
};
|
|
97
97
|
var getProductDiscountProductDiscountDifference = (item) => {
|
|
98
98
|
var _a, _b, _c, _d;
|
|
@@ -422,8 +422,8 @@ var getSurchargeAmount = ({ bookingDetail, bookingId }, surcharge, options) => {
|
|
|
422
422
|
if (!Array.isArray(surcharge))
|
|
423
423
|
return 0;
|
|
424
424
|
return surcharge.reduce((total, item) => {
|
|
425
|
-
return total
|
|
426
|
-
}, 0);
|
|
425
|
+
return total.plus(item.value || 0);
|
|
426
|
+
}, new import_decimal.default(0)).toNumber();
|
|
427
427
|
};
|
|
428
428
|
var getBundleItemIsOriginalPrice = (item) => {
|
|
429
429
|
return (item == null ? void 0 : item.price_type) === "markup" && (item == null ? void 0 : item.price_type_ext) === "product_price";
|
package/lib/modules/index.d.ts
CHANGED
|
@@ -11,4 +11,8 @@ export * from './Payment';
|
|
|
11
11
|
export * from './Resource';
|
|
12
12
|
export * from './Step';
|
|
13
13
|
export * from './Summary';
|
|
14
|
+
export * from './SalesSummary';
|
|
14
15
|
export * from './Schedule';
|
|
16
|
+
export * from './Quotation';
|
|
17
|
+
export * from './ScanOrderLogger';
|
|
18
|
+
export * from './OpenData';
|
package/lib/modules/index.js
CHANGED
|
@@ -29,7 +29,11 @@ __reExport(modules_exports, require("./Payment"), module.exports);
|
|
|
29
29
|
__reExport(modules_exports, require("./Resource"), module.exports);
|
|
30
30
|
__reExport(modules_exports, require("./Step"), module.exports);
|
|
31
31
|
__reExport(modules_exports, require("./Summary"), module.exports);
|
|
32
|
+
__reExport(modules_exports, require("./SalesSummary"), module.exports);
|
|
32
33
|
__reExport(modules_exports, require("./Schedule"), module.exports);
|
|
34
|
+
__reExport(modules_exports, require("./Quotation"), module.exports);
|
|
35
|
+
__reExport(modules_exports, require("./ScanOrderLogger"), module.exports);
|
|
36
|
+
__reExport(modules_exports, require("./OpenData"), module.exports);
|
|
33
37
|
// Annotate the CommonJS export names for ESM import in node:
|
|
34
38
|
0 && (module.exports = {
|
|
35
39
|
...require("./Product"),
|
|
@@ -45,5 +49,9 @@ __reExport(modules_exports, require("./Schedule"), module.exports);
|
|
|
45
49
|
...require("./Resource"),
|
|
46
50
|
...require("./Step"),
|
|
47
51
|
...require("./Summary"),
|
|
48
|
-
...require("./
|
|
52
|
+
...require("./SalesSummary"),
|
|
53
|
+
...require("./Schedule"),
|
|
54
|
+
...require("./Quotation"),
|
|
55
|
+
...require("./ScanOrderLogger"),
|
|
56
|
+
...require("./OpenData")
|
|
49
57
|
});
|
|
@@ -358,7 +358,7 @@ export declare class BookingByStepImpl extends BaseModule implements Module {
|
|
|
358
358
|
};
|
|
359
359
|
setOtherData(key: string, value: any): void;
|
|
360
360
|
getOtherData(key: string): any;
|
|
361
|
-
getProductTypeById(id: number): Promise<"
|
|
361
|
+
getProductTypeById(id: number): Promise<"duration" | "session" | "normal">;
|
|
362
362
|
/**
|
|
363
363
|
* 提供给 UI 的方法,减轻 UI 层的计算压力,UI 层只需要传递 cartItemId 和 resourceCode 即返回对应的 renderList
|
|
364
364
|
*
|
|
@@ -1237,7 +1237,7 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
1237
1237
|
}
|
|
1238
1238
|
);
|
|
1239
1239
|
cartItems2.forEach((item, index) => {
|
|
1240
|
-
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
1240
|
+
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
|
|
1241
1241
|
const { currentCapacity } = (0, import_capacity.getCapacityInfoByCartItem)(item);
|
|
1242
1242
|
const hasOriginTimeSlot = Boolean(item._origin.start_time) && Boolean(item._origin.end_time) && !(timeSlots == null ? void 0 : timeSlots.start_time);
|
|
1243
1243
|
if (hasOriginTimeSlot) {
|
|
@@ -1370,7 +1370,9 @@ var BookingByStepImpl = class extends import_BaseModule.BaseModule {
|
|
|
1370
1370
|
const fastestResource = (0, import_timeslots.findFastestAvailableResource)({
|
|
1371
1371
|
resources: targetRenderList,
|
|
1372
1372
|
currentCapacity,
|
|
1373
|
-
countMap: selectResourcesMap
|
|
1373
|
+
countMap: selectResourcesMap,
|
|
1374
|
+
targetDate: (_k = dateRange == null ? void 0 : dateRange[0]) == null ? void 0 : _k.date,
|
|
1375
|
+
durationMinutes: ((_l = item == null ? void 0 : item.duration) == null ? void 0 : _l.value) || ((_n = (_m = item == null ? void 0 : item._productOrigin) == null ? void 0 : _m.duration) == null ? void 0 : _n.value) || 10
|
|
1374
1376
|
});
|
|
1375
1377
|
const targetResource = fastestResource || targetRenderList[0];
|
|
1376
1378
|
targetResource.capacity = currentCapacity;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, ScheduleModule } from '../../modules';
|
|
1
|
+
import { ProductList, CartModule, ProductData, AccountModule, AccountListModule, DateModule, GuestListModule, OrderModule, PaymentModule, ResourceListModule, StepModule, SummaryModule, SalesSummaryModule, ScheduleModule, ScanOrderLoggerModule } from '../../modules';
|
|
2
2
|
export interface BookingByStepState {
|
|
3
3
|
cart: CartModule;
|
|
4
4
|
summary: SummaryModule;
|
|
@@ -14,6 +14,8 @@ export interface BookingByStepState {
|
|
|
14
14
|
currentProduct?: ProductData;
|
|
15
15
|
currentProductMeta?: Record<string, any>;
|
|
16
16
|
schedule: ScheduleModule;
|
|
17
|
+
salesSummary?: SalesSummaryModule;
|
|
18
|
+
scanOrderLogger?: ScanOrderLoggerModule;
|
|
17
19
|
}
|
|
18
20
|
export declare function createModule<T extends keyof BookingByStepState>(moduleName: T, solutionName: string, name?: string, version?: string): BookingByStepState[T];
|
|
19
21
|
export declare enum BookingByStepHooks {
|
|
@@ -36,6 +36,11 @@ function createModule(moduleName, solutionName, name, version) {
|
|
|
36
36
|
`${solutionName}_${name || moduleName}`,
|
|
37
37
|
version
|
|
38
38
|
);
|
|
39
|
+
case "salesSummary":
|
|
40
|
+
return new import_modules.SalesSummaryModule(
|
|
41
|
+
`${solutionName}_${name || moduleName}`,
|
|
42
|
+
version
|
|
43
|
+
);
|
|
39
44
|
case "step":
|
|
40
45
|
return new import_modules.StepModule(
|
|
41
46
|
`${solutionName}_${name || moduleName}`,
|
|
@@ -71,6 +76,11 @@ function createModule(moduleName, solutionName, name, version) {
|
|
|
71
76
|
`${solutionName}_${name || moduleName}`,
|
|
72
77
|
version
|
|
73
78
|
);
|
|
79
|
+
case "scanOrderLogger":
|
|
80
|
+
return new import_modules.ScanOrderLoggerModule(
|
|
81
|
+
`${solutionName}_${name || moduleName}`,
|
|
82
|
+
version
|
|
83
|
+
);
|
|
74
84
|
default:
|
|
75
85
|
throw new Error(`Unknown module type: ${moduleName}`);
|
|
76
86
|
}
|
|
@@ -19,10 +19,12 @@ export declare function calculateResourceAvailableTime({ resource, timeSlots, cu
|
|
|
19
19
|
* @param countMap 已预约数量映射
|
|
20
20
|
* @returns 最快可用的资源
|
|
21
21
|
*/
|
|
22
|
-
export declare function findFastestAvailableResource({ resources, currentCapacity, countMap, }: {
|
|
22
|
+
export declare function findFastestAvailableResource({ resources, currentCapacity, countMap, targetDate, durationMinutes, }: {
|
|
23
23
|
resources: ResourceItem[];
|
|
24
24
|
currentCapacity?: number;
|
|
25
25
|
countMap?: Record<number, number>;
|
|
26
|
+
targetDate?: string | Dayjs;
|
|
27
|
+
durationMinutes?: number;
|
|
26
28
|
}): ResourceItem | null;
|
|
27
29
|
/**
|
|
28
30
|
* 给定一个时间列表,通过开始和结束时间过滤出符合条件的时间段
|
|
@@ -77,10 +77,15 @@ function calculateResourceAvailableTime({
|
|
|
77
77
|
function findFastestAvailableResource({
|
|
78
78
|
resources,
|
|
79
79
|
currentCapacity = 1,
|
|
80
|
-
countMap = {}
|
|
80
|
+
countMap = {},
|
|
81
|
+
targetDate,
|
|
82
|
+
durationMinutes = 30
|
|
81
83
|
}) {
|
|
82
84
|
var _a, _b, _c;
|
|
83
85
|
const currentTime = (0, import_dayjs.default)();
|
|
86
|
+
const resolvedDuration = durationMinutes > 0 ? durationMinutes : 30;
|
|
87
|
+
const targetDay = targetDate ? (0, import_dayjs.default)(targetDate) : currentTime;
|
|
88
|
+
const isTargetDayToday = targetDay.isSame(currentTime, "day");
|
|
84
89
|
let fastestTime = null;
|
|
85
90
|
let fastestResources = [];
|
|
86
91
|
console.log("[TimeslotUtils] 查找最快可用资源:", {
|
|
@@ -90,19 +95,22 @@ function findFastestAvailableResource({
|
|
|
90
95
|
countMap
|
|
91
96
|
});
|
|
92
97
|
for (const resource of resources) {
|
|
93
|
-
const
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
98
|
+
const targetDayTimes = resource.times.filter((time) => {
|
|
99
|
+
const isSameTargetDay = (0, import_dayjs.default)(time.start_at).isSame(targetDay, "day");
|
|
100
|
+
if (!isSameTargetDay)
|
|
101
|
+
return false;
|
|
102
|
+
if (!isTargetDayToday)
|
|
103
|
+
return true;
|
|
104
|
+
return (0, import_dayjs.default)(time.end_at).isAfter(currentTime);
|
|
97
105
|
});
|
|
98
|
-
if (
|
|
106
|
+
if (targetDayTimes.length === 0) {
|
|
99
107
|
console.log(`[TimeslotUtils] 资源 ${resource.id}(${resource.main_field}) 今日无可用时间段`);
|
|
100
108
|
continue;
|
|
101
109
|
}
|
|
102
|
-
for (const time of
|
|
110
|
+
for (const time of targetDayTimes) {
|
|
103
111
|
const workStartTime = (0, import_dayjs.default)(time.start_at);
|
|
104
112
|
const workEndTime = (0, import_dayjs.default)(time.end_at);
|
|
105
|
-
let nextAvailableTime = currentTime.
|
|
113
|
+
let nextAvailableTime = isTargetDayToday && currentTime.isAfter(workStartTime) ? currentTime : workStartTime;
|
|
106
114
|
console.log(`[TimeslotUtils] 检查资源 ${resource.id}(${resource.main_field}):`, {
|
|
107
115
|
workTime: `${workStartTime.format("HH:mm")}-${workEndTime.format("HH:mm")}`,
|
|
108
116
|
checkStartTime: nextAvailableTime.format("HH:mm:ss"),
|
|
@@ -126,7 +134,7 @@ function findFastestAvailableResource({
|
|
|
126
134
|
pax: event.pax || 1
|
|
127
135
|
});
|
|
128
136
|
if (resource.resourceType === "single" || (resource.capacity || 1) === 1) {
|
|
129
|
-
if (finalAvailableTime.isBefore(eventEnd) && eventStart.isBefore(finalAvailableTime.add(
|
|
137
|
+
if (finalAvailableTime.isBefore(eventEnd) && eventStart.isBefore(finalAvailableTime.add(resolvedDuration, "minute"))) {
|
|
130
138
|
finalAvailableTime = eventEnd;
|
|
131
139
|
console.log(`[TimeslotUtils] 发现时间冲突,调整到: ${finalAvailableTime.format("HH:mm:ss")}`);
|
|
132
140
|
}
|
|
@@ -134,7 +142,7 @@ function findFastestAvailableResource({
|
|
|
134
142
|
const totalCapacity = resource.capacity || 0;
|
|
135
143
|
const currentUsedCapacity = countMap[resource.id] || 0;
|
|
136
144
|
const eventUsedCapacity = event.pax || 1;
|
|
137
|
-
if (finalAvailableTime.isBefore(eventEnd) && eventStart.isBefore(finalAvailableTime.add(
|
|
145
|
+
if (finalAvailableTime.isBefore(eventEnd) && eventStart.isBefore(finalAvailableTime.add(resolvedDuration, "minute"))) {
|
|
138
146
|
const totalRequiredCapacity = currentUsedCapacity + currentCapacity + eventUsedCapacity;
|
|
139
147
|
if (totalRequiredCapacity > totalCapacity) {
|
|
140
148
|
finalAvailableTime = eventEnd;
|
|
@@ -143,7 +151,7 @@ function findFastestAvailableResource({
|
|
|
143
151
|
}
|
|
144
152
|
}
|
|
145
153
|
}
|
|
146
|
-
if (finalAvailableTime.isAfter(workEndTime)) {
|
|
154
|
+
if (finalAvailableTime.add(resolvedDuration, "minute").isAfter(workEndTime)) {
|
|
147
155
|
console.log(`[TimeslotUtils] 资源 ${resource.id} 可用时间超出工作时间,跳过`);
|
|
148
156
|
continue;
|
|
149
157
|
}
|
|
@@ -131,7 +131,7 @@ export declare class BookingTicketImpl extends BaseModule implements Module {
|
|
|
131
131
|
* 获取当前的客户搜索条件
|
|
132
132
|
* @returns 当前搜索条件
|
|
133
133
|
*/
|
|
134
|
-
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "
|
|
134
|
+
getCurrentCustomerSearchParams(): Omit<import("../../modules").ShopGetCustomerListParams, "num" | "skip">;
|
|
135
135
|
/**
|
|
136
136
|
* 获取客户列表状态(包含滚动加载相关状态)
|
|
137
137
|
* @returns 客户状态
|