@yjzf/mcp-server-yjzf 0.3.1 → 0.4.0
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/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/contract/lease_sale_contract_export.js +2 -2
- package/dist/tools/contract/lease_sale_contract_export.js.map +1 -1
- package/dist/tools/contract/new_house_contract_export.js +2 -2
- package/dist/tools/contract/new_house_contract_export.js.map +1 -1
- package/dist/tools/data/count_all_statement.d.ts +13 -2
- package/dist/tools/data/count_all_statement.d.ts.map +1 -1
- package/dist/tools/data/count_all_statement.js +61 -21
- package/dist/tools/data/count_all_statement.js.map +1 -1
- package/dist/tools/data/investment_follow_up_export.js +2 -2
- package/dist/tools/data/investment_follow_up_export.js.map +1 -1
- package/dist/tools/data/investment_opportunities_export.js +3 -3
- package/dist/tools/data/investment_opportunities_export.js.map +1 -1
- package/dist/tools/data/new_house_competitor_data_export.d.ts +36 -0
- package/dist/tools/data/new_house_competitor_data_export.d.ts.map +1 -0
- package/dist/tools/data/new_house_competitor_data_export.js +177 -0
- package/dist/tools/data/new_house_competitor_data_export.js.map +1 -0
- package/dist/tools/data/new_house_project_data_export.d.ts +35 -0
- package/dist/tools/data/new_house_project_data_export.d.ts.map +1 -0
- package/dist/tools/data/new_house_project_data_export.js +166 -0
- package/dist/tools/data/new_house_project_data_export.js.map +1 -0
- package/dist/tools/data/platform_prospects_export.d.ts +34 -0
- package/dist/tools/data/platform_prospects_export.d.ts.map +1 -0
- package/dist/tools/data/platform_prospects_export.js +157 -0
- package/dist/tools/data/platform_prospects_export.js.map +1 -0
- package/dist/tools/data/public_business_opportunities_export.d.ts +24 -0
- package/dist/tools/data/public_business_opportunities_export.d.ts.map +1 -0
- package/dist/tools/data/public_business_opportunities_export.js +107 -0
- package/dist/tools/data/public_business_opportunities_export.js.map +1 -0
- package/dist/tools/data/statement_query.d.ts +4 -1
- package/dist/tools/data/statement_query.d.ts.map +1 -1
- package/dist/tools/data/statement_query.js +170 -28
- package/dist/tools/data/statement_query.js.map +1 -1
- package/dist/tools/data/switch_store_management_export.js +3 -3
- package/dist/tools/data/switch_store_management_export.js.map +1 -1
- package/dist/tools/util/date_to_timestamp.d.ts.map +1 -1
- package/dist/tools/util/date_to_timestamp.js +10 -1
- package/dist/tools/util/date_to_timestamp.js.map +1 -1
- package/dist/tools/util/get_current_time.d.ts.map +1 -1
- package/dist/tools/util/get_current_time.js +8 -2
- package/dist/tools/util/get_current_time.js.map +1 -1
- package/dist/utils/env.js +1 -1
- package/dist/utils/env.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { buildGatewayHeaders, createErrorResult } from "../../utils/http.js";
|
|
3
|
+
import { getGatewayBaseUrl, generateDatedFileName } from "../../utils/env.js";
|
|
4
|
+
import { debug } from "../../utils/debug.js";
|
|
5
|
+
import { pollAsyncExport, downloadToDataDir } from "../../utils/async-export.js";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// 常量
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// 统计维度映射(SOP:department=按部门, projectManager=按项目负责人, onSite=按驻场)
|
|
10
|
+
const DIMENSION_MAP = {
|
|
11
|
+
department: 1,
|
|
12
|
+
projectManager: 2,
|
|
13
|
+
onSite: 4,
|
|
14
|
+
};
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// 工具函数
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
/**
|
|
19
|
+
* 获取默认统计时间范围:本月第一天 00:00:00 → 今天 23:59:59.999
|
|
20
|
+
*/
|
|
21
|
+
function getDefaultTimeRange() {
|
|
22
|
+
const now = new Date();
|
|
23
|
+
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0, 0);
|
|
24
|
+
const todayEnd = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999);
|
|
25
|
+
return {
|
|
26
|
+
startTime: monthStart.getTime(),
|
|
27
|
+
endTime: todayEnd.getTime(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 生成唯一 fileName,用于在异步导出列表中精确匹配。
|
|
32
|
+
*/
|
|
33
|
+
function generateUniqueFileName(branchName) {
|
|
34
|
+
const ts = Date.now();
|
|
35
|
+
const rand = Math.random().toString(36).slice(2, 8);
|
|
36
|
+
return `MCP_competitor_${branchName}_${ts}_${rand}`;
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// 工具导出(三件套:name + schema + handler)
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
export const name = "new_house_competitor_data_export";
|
|
42
|
+
export const schema = {
|
|
43
|
+
description: "从ERP系统导出新房竞对对比数据,生成Excel文件。必须先调用 branch_select 获取 branchId 和 cityCode。支持2个action: get_competitors获取竞对列表, export执行导出(异步模式:提交任务→轮询状态→下载文件)。",
|
|
44
|
+
inputSchema: z.object({
|
|
45
|
+
action: z.enum(["get_competitors", "export"])
|
|
46
|
+
.describe("要执行的动作:get_competitors=获取竞对列表,export=执行导出"),
|
|
47
|
+
// 城市公司参数(所有 action 都需要,必须通过 branch_select 工具获取)
|
|
48
|
+
branchId: z.string()
|
|
49
|
+
.describe("城市公司ID(即organId),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
50
|
+
cityCode: z.string()
|
|
51
|
+
.describe("城市编码,必须通过 branch_select 工具获取,禁止自行编造"),
|
|
52
|
+
branchName: z.string()
|
|
53
|
+
.describe("城市公司名称,必须通过 branch_select 工具获取,用于文件命名"),
|
|
54
|
+
// 以下仅 export action 使用
|
|
55
|
+
dimensionType: z.enum(["department", "projectManager", "onSite"]).optional()
|
|
56
|
+
.describe("统计维度:department=按部门统计(默认), projectManager=按项目负责人统计, onSite=按驻场统计"),
|
|
57
|
+
startTime: z.number().optional()
|
|
58
|
+
.describe("统计开始时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp 转换,严禁自行估算。不传默认本月第一天 00:00:00"),
|
|
59
|
+
endTime: z.number().optional()
|
|
60
|
+
.describe("统计结束时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp(endOfDay=true) 转换,严禁自行估算。不传默认今天 23:59:59.999"),
|
|
61
|
+
competitorList: z.array(z.string()).optional()
|
|
62
|
+
.describe("竞对ID列表(必填,1~10个),必须传 get_competitors 返回的 val 字段值,禁止传中文名称(name)"),
|
|
63
|
+
}),
|
|
64
|
+
};
|
|
65
|
+
export async function handler(args) {
|
|
66
|
+
debug("new_house_competitor_data_export args", args);
|
|
67
|
+
switch (args.action) {
|
|
68
|
+
case "get_competitors":
|
|
69
|
+
return await fetchCompetitors(args.branchId, args.cityCode);
|
|
70
|
+
case "export":
|
|
71
|
+
return await executeExport(args);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Action 实现:获取竞对列表
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
async function fetchCompetitors(branchId, cityCode) {
|
|
78
|
+
const headers = buildGatewayHeaders();
|
|
79
|
+
const resp = await fetch(`${getGatewayBaseUrl()}/new_house_competitor/competitors`, {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers,
|
|
82
|
+
body: JSON.stringify({ branchId, cityCode }),
|
|
83
|
+
});
|
|
84
|
+
if (!resp.ok) {
|
|
85
|
+
return createErrorResult(`获取竞对列表失败: ${resp.status} ${resp.statusText}`);
|
|
86
|
+
}
|
|
87
|
+
const data = await resp.json();
|
|
88
|
+
debug("fetchCompetitors response", data);
|
|
89
|
+
if (!data.succeed) {
|
|
90
|
+
return createErrorResult(`获取竞对列表失败: ${data.msg}`);
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
content: [{ type: "text", text: JSON.stringify(data.data) }],
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Action 实现:导出竞对数据(异步轮询)
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
async function executeExport(args) {
|
|
100
|
+
const { branchId, cityCode, branchName } = args;
|
|
101
|
+
const defaults = getDefaultTimeRange();
|
|
102
|
+
const summaryType = DIMENSION_MAP[args.dimensionType ?? "department"] ?? 1;
|
|
103
|
+
const startTime = args.startTime ?? defaults.startTime;
|
|
104
|
+
const endTime = args.endTime ?? defaults.endTime;
|
|
105
|
+
const rivalIds = args.competitorList ?? [];
|
|
106
|
+
const headers = buildGatewayHeaders();
|
|
107
|
+
const uniqueFileName = generateUniqueFileName(branchName);
|
|
108
|
+
try {
|
|
109
|
+
// 1. 提交异步导出任务
|
|
110
|
+
const exportBody = {
|
|
111
|
+
branchId,
|
|
112
|
+
cityCode,
|
|
113
|
+
summaryType,
|
|
114
|
+
rivalIds,
|
|
115
|
+
startTime,
|
|
116
|
+
endTime,
|
|
117
|
+
fileName: uniqueFileName,
|
|
118
|
+
};
|
|
119
|
+
debug("export body", exportBody);
|
|
120
|
+
const submitResp = await fetch(`${getGatewayBaseUrl()}/new_house_competitor/export`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers,
|
|
123
|
+
body: JSON.stringify(exportBody),
|
|
124
|
+
});
|
|
125
|
+
if (!submitResp.ok) {
|
|
126
|
+
return createErrorResult(`提交导出任务失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
127
|
+
}
|
|
128
|
+
const submitResult = await submitResp.json();
|
|
129
|
+
if (!submitResult.succeed) {
|
|
130
|
+
return createErrorResult(`提交导出任务失败: ${submitResult.msg}`);
|
|
131
|
+
}
|
|
132
|
+
console.error(`[new_house_competitor_data_export] 任务已提交,fileName=${uniqueFileName},开始轮询...`);
|
|
133
|
+
// 2. 轮询状态
|
|
134
|
+
const submittedAt = Date.now();
|
|
135
|
+
const downloadUrl = await pollAsyncExport({
|
|
136
|
+
logTag: "new_house_competitor_data_export",
|
|
137
|
+
checkStatus: async () => {
|
|
138
|
+
const statusResp = await fetch(`${getGatewayBaseUrl()}/new_house_competitor/export_status`, {
|
|
139
|
+
method: "POST",
|
|
140
|
+
headers,
|
|
141
|
+
body: JSON.stringify({
|
|
142
|
+
startInc: submittedAt - 10 * 60 * 1000,
|
|
143
|
+
endExc: Date.now(),
|
|
144
|
+
cityCode,
|
|
145
|
+
organId: branchId,
|
|
146
|
+
}),
|
|
147
|
+
});
|
|
148
|
+
if (!statusResp.ok) {
|
|
149
|
+
throw new Error(`查询导出状态失败: ${statusResp.status} ${statusResp.statusText}`);
|
|
150
|
+
}
|
|
151
|
+
const json = await statusResp.json();
|
|
152
|
+
if (!json.succeed) {
|
|
153
|
+
throw new Error(`查询导出状态接口返回失败: ${json.msg}`);
|
|
154
|
+
}
|
|
155
|
+
const match = json.data?.find((item) => item.fileName === uniqueFileName);
|
|
156
|
+
if (!match || !match.finishTm) {
|
|
157
|
+
return { state: "pending" };
|
|
158
|
+
}
|
|
159
|
+
if (match.source) {
|
|
160
|
+
return { state: "success", downloadUrl: match.source };
|
|
161
|
+
}
|
|
162
|
+
return { state: "failed", reason: "ERP导出任务执行失败" };
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
// 3. 下载文件
|
|
166
|
+
const localFileName = generateDatedFileName(`${branchName}_新房竞对对比`, "xlsx", false);
|
|
167
|
+
const filePath = await downloadToDataDir(downloadUrl, localFileName);
|
|
168
|
+
return {
|
|
169
|
+
content: [{ type: "text", text: `成功导出新房竞对数据!\n文件路径: ${filePath}` }],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
174
|
+
return createErrorResult(`执行过程中发生错误: ${errorMessage}`);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=new_house_competitor_data_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new_house_competitor_data_export.js","sourceRoot":"","sources":["../../../src/tools/data/new_house_competitor_data_export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
type Action = "get_competitors" | "export";
|
|
3
|
+
interface NewHouseProjectDataExportArgs {
|
|
4
|
+
action: Action;
|
|
5
|
+
branchId: string;
|
|
6
|
+
cityCode: string;
|
|
7
|
+
branchName: string;
|
|
8
|
+
dealDateType?: "subscribeDate" | "signDate";
|
|
9
|
+
startTime?: number;
|
|
10
|
+
endTime?: number;
|
|
11
|
+
competitorList?: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const name = "new_house_project_data_export";
|
|
14
|
+
export declare const schema: {
|
|
15
|
+
description: string;
|
|
16
|
+
inputSchema: z.ZodObject<{
|
|
17
|
+
action: z.ZodEnum<{
|
|
18
|
+
export: "export";
|
|
19
|
+
get_competitors: "get_competitors";
|
|
20
|
+
}>;
|
|
21
|
+
branchId: z.ZodString;
|
|
22
|
+
cityCode: z.ZodString;
|
|
23
|
+
branchName: z.ZodString;
|
|
24
|
+
dealDateType: z.ZodOptional<z.ZodEnum<{
|
|
25
|
+
subscribeDate: "subscribeDate";
|
|
26
|
+
signDate: "signDate";
|
|
27
|
+
}>>;
|
|
28
|
+
startTime: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
endTime: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
competitorList: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
};
|
|
33
|
+
export declare function handler(args: NewHouseProjectDataExportArgs): Promise<import("../../utils/http.js").ToolResult>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=new_house_project_data_export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new_house_project_data_export.d.ts","sourceRoot":"","sources":["../../../src/tools/data/new_house_project_data_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAU5B,KAAK,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAc3C,UAAU,6BAA6B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,eAAe,GAAG,UAAU,CAAC;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAgCD,eAAO,MAAM,IAAI,kCAAkC,CAAC;AAEpD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,6BAA6B,qDAShE"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { buildGatewayHeaders, createErrorResult, createSuccessResult } from "../../utils/http.js";
|
|
3
|
+
import { getGatewayBaseUrl, generateDatedFileName } from "../../utils/env.js";
|
|
4
|
+
import { debug } from "../../utils/debug.js";
|
|
5
|
+
import { pollAsyncExport, downloadToDataDir } from "../../utils/async-export.js";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// 工具函数
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
/**
|
|
10
|
+
* 获取默认统计时间范围:本月第一天 00:00:00 → 今天 23:59:59.999
|
|
11
|
+
*/
|
|
12
|
+
function getDefaultTimeRange() {
|
|
13
|
+
const now = new Date();
|
|
14
|
+
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1, 0, 0, 0, 0);
|
|
15
|
+
const todayEnd = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999);
|
|
16
|
+
return {
|
|
17
|
+
startTime: monthStart.getTime(),
|
|
18
|
+
endTime: todayEnd.getTime(),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 生成唯一 fileName,用于在异步导出列表中精确匹配。
|
|
23
|
+
*/
|
|
24
|
+
function generateUniqueFileName(branchName) {
|
|
25
|
+
const ts = Date.now();
|
|
26
|
+
const rand = Math.random().toString(36).slice(2, 8);
|
|
27
|
+
return `MCP_newhouse_${branchName}_${ts}_${rand}`;
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// 工具导出(三件套:name + schema + handler)
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
export const name = "new_house_project_data_export";
|
|
33
|
+
export const schema = {
|
|
34
|
+
description: "从ERP系统导出新房项目数据(项目概览)Excel文件。必须先调用 branch_select 获取 branchId 和 cityCode。支持2个action: get_competitors获取竞对列表, export执行导出。导出为异步模式:提交任务 → 轮询状态 → 下载文件。",
|
|
35
|
+
inputSchema: z.object({
|
|
36
|
+
action: z.enum(["get_competitors", "export"])
|
|
37
|
+
.describe("要执行的动作"),
|
|
38
|
+
// 城市公司参数(所有 action 都需要,必须通过 branch_select 工具获取)
|
|
39
|
+
branchId: z.string()
|
|
40
|
+
.describe("城市公司ID(即organId),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
41
|
+
cityCode: z.string()
|
|
42
|
+
.describe("城市编码,必须通过 branch_select 工具获取,禁止自行编造"),
|
|
43
|
+
branchName: z.string()
|
|
44
|
+
.describe("城市公司名称,必须通过 branch_select 工具获取,用于文件命名"),
|
|
45
|
+
// 以下仅 export action 使用
|
|
46
|
+
dealDateType: z.enum(["subscribeDate", "signDate"]).optional()
|
|
47
|
+
.describe("成交算法: subscribeDate=按认购日期算(默认), signDate=按签约日期算"),
|
|
48
|
+
startTime: z.number().optional()
|
|
49
|
+
.describe("统计开始时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp 转换,严禁自行估算。不传默认本月第一天"),
|
|
50
|
+
endTime: z.number().optional()
|
|
51
|
+
.describe("统计结束时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp(endOfDay=true) 转换,严禁自行估算。不传默认今天结束"),
|
|
52
|
+
competitorList: z.array(z.string()).optional()
|
|
53
|
+
.describe("竞对ID列表,必须传 get_competitors 返回的 val 字段值,禁止传中文名称(name)。不传则不展示竞对列"),
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
export async function handler(args) {
|
|
57
|
+
debug("new_house_project_data_export args", args);
|
|
58
|
+
switch (args.action) {
|
|
59
|
+
case "get_competitors":
|
|
60
|
+
return await fetchCompetitors(args.branchId, args.cityCode);
|
|
61
|
+
case "export":
|
|
62
|
+
return await executeExport(args);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Action 实现:获取竞对列表
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
async function fetchCompetitors(branchId, cityCode) {
|
|
69
|
+
const headers = buildGatewayHeaders();
|
|
70
|
+
const resp = await fetch(`${getGatewayBaseUrl()}/new_house_project/competitors`, {
|
|
71
|
+
method: "POST",
|
|
72
|
+
headers,
|
|
73
|
+
body: JSON.stringify({ branchId, cityCode }),
|
|
74
|
+
});
|
|
75
|
+
if (!resp.ok) {
|
|
76
|
+
return createErrorResult(`获取竞对列表失败: ${resp.status} ${resp.statusText}`);
|
|
77
|
+
}
|
|
78
|
+
const data = await resp.json();
|
|
79
|
+
debug("fetchCompetitors response", data);
|
|
80
|
+
if (!data.succeed) {
|
|
81
|
+
return createErrorResult(`获取竞对列表失败: ${data.msg}`);
|
|
82
|
+
}
|
|
83
|
+
return {
|
|
84
|
+
content: [{ type: "text", text: JSON.stringify(data.data) }],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// ---------------------------------------------------------------------------
|
|
88
|
+
// Action 实现:导出新房项目数据(异步轮询)
|
|
89
|
+
// ---------------------------------------------------------------------------
|
|
90
|
+
async function executeExport(args) {
|
|
91
|
+
const { branchId, cityCode, branchName } = args;
|
|
92
|
+
// 处理默认值
|
|
93
|
+
const defaults = getDefaultTimeRange();
|
|
94
|
+
const edition = args.dealDateType === "signDate" ? 1 : 0;
|
|
95
|
+
const startTime = args.startTime ?? defaults.startTime;
|
|
96
|
+
const endTime = args.endTime ?? defaults.endTime;
|
|
97
|
+
const headers = buildGatewayHeaders();
|
|
98
|
+
const uniqueFileName = generateUniqueFileName(branchName);
|
|
99
|
+
try {
|
|
100
|
+
// 1. 提交异步导出任务
|
|
101
|
+
const exportBody = {
|
|
102
|
+
branchId,
|
|
103
|
+
cityCode,
|
|
104
|
+
edition,
|
|
105
|
+
startTime,
|
|
106
|
+
endTime,
|
|
107
|
+
rivalIds: args.competitorList ?? [],
|
|
108
|
+
fileName: uniqueFileName,
|
|
109
|
+
};
|
|
110
|
+
debug("export body", exportBody);
|
|
111
|
+
const submitResp = await fetch(`${getGatewayBaseUrl()}/new_house_project/export`, {
|
|
112
|
+
method: "POST",
|
|
113
|
+
headers,
|
|
114
|
+
body: JSON.stringify(exportBody),
|
|
115
|
+
});
|
|
116
|
+
if (!submitResp.ok) {
|
|
117
|
+
return createErrorResult(`提交导出任务失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
118
|
+
}
|
|
119
|
+
const submitResult = await submitResp.json();
|
|
120
|
+
if (!submitResult.succeed) {
|
|
121
|
+
return createErrorResult(`提交导出任务失败: ${submitResult.msg}`);
|
|
122
|
+
}
|
|
123
|
+
console.error(`[new_house_project_data_export] 任务已提交,fileName=${uniqueFileName},开始轮询...`);
|
|
124
|
+
// 2. 轮询状态
|
|
125
|
+
const submittedAt = Date.now();
|
|
126
|
+
const downloadUrl = await pollAsyncExport({
|
|
127
|
+
logTag: "new_house_project_data_export",
|
|
128
|
+
checkStatus: async () => {
|
|
129
|
+
const statusResp = await fetch(`${getGatewayBaseUrl()}/new_house_project/export_status`, {
|
|
130
|
+
method: "POST",
|
|
131
|
+
headers,
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
startInc: submittedAt - 10 * 60 * 1000,
|
|
134
|
+
endExc: Date.now(),
|
|
135
|
+
cityCode,
|
|
136
|
+
organId: branchId,
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
if (!statusResp.ok) {
|
|
140
|
+
throw new Error(`查询导出状态失败: ${statusResp.status} ${statusResp.statusText}`);
|
|
141
|
+
}
|
|
142
|
+
const json = await statusResp.json();
|
|
143
|
+
if (!json.succeed) {
|
|
144
|
+
throw new Error(`查询导出状态接口返回失败: ${json.msg}`);
|
|
145
|
+
}
|
|
146
|
+
const match = json.data?.find((item) => item.fileName === uniqueFileName);
|
|
147
|
+
if (!match || !match.finishTm) {
|
|
148
|
+
return { state: "pending" };
|
|
149
|
+
}
|
|
150
|
+
if (match.source) {
|
|
151
|
+
return { state: "success", downloadUrl: match.source };
|
|
152
|
+
}
|
|
153
|
+
return { state: "failed", reason: "ERP导出任务执行失败" };
|
|
154
|
+
},
|
|
155
|
+
});
|
|
156
|
+
// 3. 下载文件
|
|
157
|
+
const localFileName = generateDatedFileName(`${branchName}_新房项目概览`, "xlsx", false);
|
|
158
|
+
const filePath = await downloadToDataDir(downloadUrl, localFileName);
|
|
159
|
+
return createSuccessResult(`成功导出新房项目数据!\n文件路径: ${filePath}`);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
163
|
+
return createErrorResult(`执行过程中发生错误: ${errorMessage}`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=new_house_project_data_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new_house_project_data_export.js","sourceRoot":"","sources":["../../../src/tools/data/new_house_project_data_export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
type Action = "query" | "export";
|
|
3
|
+
interface ToolArgs {
|
|
4
|
+
action: Action;
|
|
5
|
+
branchId: string;
|
|
6
|
+
cityCode: string;
|
|
7
|
+
branchName: string;
|
|
8
|
+
commercialStatus?: number;
|
|
9
|
+
createdTmStart?: number;
|
|
10
|
+
createdTmEnd?: number;
|
|
11
|
+
pageNo?: number;
|
|
12
|
+
pageSize?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare const name = "platform_prospects_export";
|
|
15
|
+
export declare const schema: {
|
|
16
|
+
description: string;
|
|
17
|
+
inputSchema: z.ZodObject<{
|
|
18
|
+
action: z.ZodEnum<{
|
|
19
|
+
export: "export";
|
|
20
|
+
query: "query";
|
|
21
|
+
}>;
|
|
22
|
+
branchId: z.ZodString;
|
|
23
|
+
cityCode: z.ZodString;
|
|
24
|
+
branchName: z.ZodString;
|
|
25
|
+
commercialStatus: z.ZodOptional<z.ZodNumber>;
|
|
26
|
+
createdTmStart: z.ZodOptional<z.ZodNumber>;
|
|
27
|
+
createdTmEnd: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
pageNo: z.ZodOptional<z.ZodNumber>;
|
|
29
|
+
pageSize: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
};
|
|
32
|
+
export declare function handler(args: ToolArgs): Promise<import("../../utils/http.js").ToolResult>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=platform_prospects_export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform_prospects_export.d.ts","sourceRoot":"","sources":["../../../src/tools/data/platform_prospects_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAY5B,KAAK,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEjC,UAAU,QAAQ;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AA4CD,eAAO,MAAM,IAAI,8BAA8B,CAAC;AAEhD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CA+BlB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,qDAS3C"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { buildGatewayHeaders, createErrorResult, createSuccessResult } from "../../utils/http.js";
|
|
5
|
+
import { getGatewayBaseUrl, getDataDir } from "../../utils/env.js";
|
|
6
|
+
import { debug } from "../../utils/debug.js";
|
|
7
|
+
import { convertOle2ToXlsx } from "../../utils/excel.js";
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// 工具函数
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* 获取默认的时间范围(近12个月)
|
|
13
|
+
* - start: 12个月前的今天 00:00:00.000(北京时间)
|
|
14
|
+
* - end: 今天 23:59:59.999(北京时间)
|
|
15
|
+
*/
|
|
16
|
+
function getDefaultTimeRange() {
|
|
17
|
+
const now = new Date();
|
|
18
|
+
// 结束时间:今天 23:59:59.999(北京时间 UTC+8)
|
|
19
|
+
const endLocal = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 23, 59, 59, 999);
|
|
20
|
+
// 开始时间:12个月前 00:00:00.000(北京时间 UTC+8)
|
|
21
|
+
const startLocal = new Date(now.getFullYear(), now.getMonth() - 12, now.getDate(), 0, 0, 0, 0);
|
|
22
|
+
return {
|
|
23
|
+
createdTmStart: startLocal.getTime(),
|
|
24
|
+
createdTmEnd: endLocal.getTime(),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 生成本地文件命名:平台潜客明细_{branchName}_{YYYYMMDD}_{HHmmss}.xlsx
|
|
29
|
+
*/
|
|
30
|
+
function generateLocalFileName(branchName) {
|
|
31
|
+
const now = new Date();
|
|
32
|
+
const year = now.getFullYear();
|
|
33
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
34
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
35
|
+
const hours = String(now.getHours()).padStart(2, "0");
|
|
36
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
37
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
38
|
+
return `平台潜客明细_${branchName}_${year}${month}${day}_${hours}${minutes}${seconds}.xlsx`;
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// 工具导出(三件套:name + schema + handler)
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
export const name = "platform_prospects_export";
|
|
44
|
+
export const schema = {
|
|
45
|
+
description: "从ERP系统导出平台潜客明细Excel文件。必须先调用 branch_select 获取 branchId 和 cityCode。"
|
|
46
|
+
+ "支持2个action: query预览数据, export执行导出。"
|
|
47
|
+
+ "确认城市公司(必填,支持多选)、商机状态(选填,单选)、新增时间(选填,默认近12个月)。",
|
|
48
|
+
inputSchema: z.object({
|
|
49
|
+
action: z.enum(["query", "export"])
|
|
50
|
+
.describe("要执行的动作"),
|
|
51
|
+
// 城市公司参数(所有 action 都需要,必须通过 branch_select 工具获取)
|
|
52
|
+
branchId: z.string()
|
|
53
|
+
.describe("城市公司ID(即organId),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
54
|
+
cityCode: z.string()
|
|
55
|
+
.describe("城市编码,必须通过 branch_select 工具获取,禁止自行编造"),
|
|
56
|
+
branchName: z.string()
|
|
57
|
+
.describe("城市公司名称(用于文件命名),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
58
|
+
// 筛选条件
|
|
59
|
+
commercialStatus: z.number().optional()
|
|
60
|
+
.describe("商机状态(选填,单选)。用户未指定状态时不要传此参数(默认待解锁);仅当用户明确说'全部状态'时传-1。可选值: -1=全部状态, 0=待解锁, 1=待处理, 2=已录入, 3=已被抢"),
|
|
61
|
+
createdTmStart: z.number().optional()
|
|
62
|
+
.describe("新增开始时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp 转换,严禁自行估算。不传默认12个月前"),
|
|
63
|
+
createdTmEnd: z.number().optional()
|
|
64
|
+
.describe("新增结束时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp(endOfDay=true) 转换,严禁自行估算。不传默认今天结束"),
|
|
65
|
+
// 仅 query action 使用
|
|
66
|
+
pageNo: z.number().optional()
|
|
67
|
+
.describe("页码,仅 query 时使用,不传默认1"),
|
|
68
|
+
pageSize: z.number().optional()
|
|
69
|
+
.describe("每页条数,仅 query 时使用,不传默认20"),
|
|
70
|
+
}),
|
|
71
|
+
};
|
|
72
|
+
export async function handler(args) {
|
|
73
|
+
debug("platform_prospects_export args", args);
|
|
74
|
+
switch (args.action) {
|
|
75
|
+
case "query":
|
|
76
|
+
return await executeQuery(args);
|
|
77
|
+
case "export":
|
|
78
|
+
return await executeExport(args);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Action 实现:查询分页数据
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
async function executeQuery(args) {
|
|
85
|
+
const { branchId, cityCode } = args;
|
|
86
|
+
const defaults = getDefaultTimeRange();
|
|
87
|
+
const headers = buildGatewayHeaders();
|
|
88
|
+
const resp = await fetch(`${getGatewayBaseUrl()}/platform_prospects/query`, {
|
|
89
|
+
method: "POST",
|
|
90
|
+
headers,
|
|
91
|
+
body: JSON.stringify({
|
|
92
|
+
branchId,
|
|
93
|
+
cityCode,
|
|
94
|
+
commercialStatus: args.commercialStatus ?? 0,
|
|
95
|
+
createdTmStart: args.createdTmStart ?? defaults.createdTmStart,
|
|
96
|
+
createdTmEnd: args.createdTmEnd ?? defaults.createdTmEnd,
|
|
97
|
+
pageNo: args.pageNo ?? 1,
|
|
98
|
+
pageSize: args.pageSize ?? 20,
|
|
99
|
+
}),
|
|
100
|
+
});
|
|
101
|
+
if (!resp.ok) {
|
|
102
|
+
return createErrorResult(`查询平台潜客明细失败: ${resp.status} ${resp.statusText}`);
|
|
103
|
+
}
|
|
104
|
+
const data = await resp.json();
|
|
105
|
+
debug("executeQuery response", data);
|
|
106
|
+
if (!data.succeed) {
|
|
107
|
+
return createErrorResult(`查询平台潜客明细失败: ${data.msg}`);
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: "text", text: JSON.stringify(data.data) }],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
// ---------------------------------------------------------------------------
|
|
114
|
+
// Action 实现:同步导出(ERP 返回二进制 → base64 → 解码 → OLE2 转换 → 保存)
|
|
115
|
+
// ---------------------------------------------------------------------------
|
|
116
|
+
async function executeExport(args) {
|
|
117
|
+
const { branchId, cityCode, branchName } = args;
|
|
118
|
+
const defaults = getDefaultTimeRange();
|
|
119
|
+
const headers = buildGatewayHeaders();
|
|
120
|
+
const exportBody = {
|
|
121
|
+
branchId,
|
|
122
|
+
cityCode,
|
|
123
|
+
commercialStatus: args.commercialStatus ?? 0,
|
|
124
|
+
createdTmStart: args.createdTmStart ?? defaults.createdTmStart,
|
|
125
|
+
createdTmEnd: args.createdTmEnd ?? defaults.createdTmEnd,
|
|
126
|
+
};
|
|
127
|
+
debug("export body", exportBody);
|
|
128
|
+
const submitResp = await fetch(`${getGatewayBaseUrl()}/platform_prospects/export`, {
|
|
129
|
+
method: "POST",
|
|
130
|
+
headers,
|
|
131
|
+
body: JSON.stringify(exportBody),
|
|
132
|
+
});
|
|
133
|
+
if (!submitResp.ok) {
|
|
134
|
+
return createErrorResult(`导出请求失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
135
|
+
}
|
|
136
|
+
// Gateway 返回 JSON:{ succeed: boolean, data?: string (base64), msg?: string }
|
|
137
|
+
const result = await submitResp.json();
|
|
138
|
+
debug("export result", { succeed: result.succeed, hasData: !!result.data });
|
|
139
|
+
if (!result.succeed || !result.data) {
|
|
140
|
+
return createErrorResult(`导出失败: ${result.msg || "ERP返回无数据"}`);
|
|
141
|
+
}
|
|
142
|
+
// base64 解码为二进制
|
|
143
|
+
const rawBuffer = Buffer.from(result.data, "base64");
|
|
144
|
+
// 检测 OLE2 格式(ERP 可能返回 .xls 格式),转换为真正的 xlsx
|
|
145
|
+
const isOle2 = rawBuffer.length >= 4
|
|
146
|
+
&& rawBuffer[0] === 0xD0 && rawBuffer[1] === 0xCF
|
|
147
|
+
&& rawBuffer[2] === 0x11 && rawBuffer[3] === 0xE0;
|
|
148
|
+
const finalBuffer = isOle2 ? convertOle2ToXlsx(rawBuffer).xlsxBuffer : rawBuffer;
|
|
149
|
+
// 保存到本地
|
|
150
|
+
const localFileName = generateLocalFileName(branchName);
|
|
151
|
+
const dataDir = getDataDir();
|
|
152
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
153
|
+
const filePath = path.join(dataDir, localFileName);
|
|
154
|
+
fs.writeFileSync(filePath, finalBuffer);
|
|
155
|
+
return createSuccessResult(`成功导出平台潜客明细!\n文件路径: ${filePath}`);
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=platform_prospects_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform_prospects_export.js","sourceRoot":"","sources":["../../../src/tools/data/platform_prospects_export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
interface PublicBusinessOpportunitiesExportArgs {
|
|
3
|
+
branchId: string;
|
|
4
|
+
cityCode: string;
|
|
5
|
+
branchName: string;
|
|
6
|
+
businessState?: number[];
|
|
7
|
+
createdTmStart?: number;
|
|
8
|
+
createdTmEnd?: number;
|
|
9
|
+
}
|
|
10
|
+
export declare const name = "public_business_opportunities_export";
|
|
11
|
+
export declare const schema: {
|
|
12
|
+
description: string;
|
|
13
|
+
inputSchema: z.ZodObject<{
|
|
14
|
+
branchId: z.ZodString;
|
|
15
|
+
cityCode: z.ZodString;
|
|
16
|
+
branchName: z.ZodString;
|
|
17
|
+
businessState: z.ZodOptional<z.ZodArray<z.ZodNumber>>;
|
|
18
|
+
createdTmStart: z.ZodOptional<z.ZodNumber>;
|
|
19
|
+
createdTmEnd: z.ZodOptional<z.ZodNumber>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
};
|
|
22
|
+
export declare function handler(args: PublicBusinessOpportunitiesExportArgs): Promise<import("../../utils/http.js").ToolResult>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=public_business_opportunities_export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public_business_opportunities_export.d.ts","sourceRoot":"","sources":["../../../src/tools/data/public_business_opportunities_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAY5B,UAAU,qCAAqC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AA4CD,eAAO,MAAM,IAAI,yCAAyC,CAAC;AAE3D,eAAO,MAAM,MAAM;;;;;;;;;;CAkBlB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,qCAAqC,qDAGxE"}
|