@yjzf/mcp-server-yjzf 0.3.0 → 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 +14 -2
- package/dist/index.js.map +1 -1
- package/dist/tools/contract/investment_contract.d.ts +10 -2
- package/dist/tools/contract/investment_contract.d.ts.map +1 -1
- package/dist/tools/contract/investment_contract.js +32 -86
- package/dist/tools/contract/investment_contract.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 +18 -15
- package/dist/tools/data/count_all_statement.d.ts.map +1 -1
- package/dist/tools/data/count_all_statement.js +170 -271
- package/dist/tools/data/count_all_statement.js.map +1 -1
- package/dist/tools/data/investment_follow_up_export.d.ts +30 -0
- package/dist/tools/data/investment_follow_up_export.d.ts.map +1 -0
- package/dist/tools/data/investment_follow_up_export.js +131 -0
- package/dist/tools/data/investment_follow_up_export.js.map +1 -0
- package/dist/tools/data/investment_opportunities_export.d.ts +22 -0
- package/dist/tools/data/investment_opportunities_export.d.ts.map +1 -0
- package/dist/tools/data/investment_opportunities_export.js +105 -0
- package/dist/tools/data/investment_opportunities_export.js.map +1 -0
- 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 +5 -1
- package/dist/tools/data/statement_query.d.ts.map +1 -1
- package/dist/tools/data/statement_query.js +207 -27
- package/dist/tools/data/statement_query.js.map +1 -1
- package/dist/tools/data/switch_store_management_export.d.ts +24 -0
- package/dist/tools/data/switch_store_management_export.d.ts.map +1 -0
- package/dist/tools/data/switch_store_management_export.js +102 -0
- package/dist/tools/data/switch_store_management_export.js.map +1 -0
- package/dist/tools/house/umai_good_house_export.d.ts.map +1 -1
- package/dist/tools/house/umai_good_house_export.js +4 -0
- package/dist/tools/house/umai_good_house_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/dist/utils/excel.d.ts +14 -0
- package/dist/utils/excel.d.ts.map +1 -1
- package/dist/utils/excel.js +35 -0
- package/dist/utils/excel.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,131 @@
|
|
|
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 { convertOle2ToXlsx } from "../../utils/excel.js";
|
|
7
|
+
import { debug } from "../../utils/debug.js";
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// 工具函数
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/**
|
|
12
|
+
* 生成本地保存文件名,格式:跟进记录_{branchName}_{YYYYMMDD}_{HHmmss}.xlsx
|
|
13
|
+
* 示例:跟进记录_优居贵阳_20260509_140301.xlsx
|
|
14
|
+
*/
|
|
15
|
+
function generateFollowUpFileName(branchName) {
|
|
16
|
+
const now = new Date();
|
|
17
|
+
const year = now.getFullYear();
|
|
18
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
19
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
20
|
+
const hours = String(now.getHours()).padStart(2, "0");
|
|
21
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
22
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
23
|
+
return `跟进记录_${branchName}_${year}${month}${day}_${hours}${minutes}${seconds}.xlsx`;
|
|
24
|
+
}
|
|
25
|
+
const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// 工具导出(三件套:name + schema + handler)
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export const name = "investment_follow_up_export";
|
|
30
|
+
export const schema = {
|
|
31
|
+
description: "从ERP系统导出招商跟进记录Excel文件。必须先调用 branch_select 获取 branchId 和 cityCode。支持2个action: get_followup_methods获取跟进方式选项, export执行导出。确认城市公司(必填)、确认跟进时间(必填)、选择跟进方式(选填,支持多选)。",
|
|
32
|
+
inputSchema: z.object({
|
|
33
|
+
action: z.enum(["get_followup_methods", "export"])
|
|
34
|
+
.describe("要执行的动作"),
|
|
35
|
+
// 城市公司参数(所有 action 都需要)
|
|
36
|
+
branchId: z.string()
|
|
37
|
+
.describe("城市公司ID(即organId),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
38
|
+
cityCode: z.string()
|
|
39
|
+
.describe("城市编码,必须通过 branch_select 工具获取,禁止自行编造"),
|
|
40
|
+
branchName: z.string()
|
|
41
|
+
.describe("城市公司名称(用于文件命名),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
42
|
+
// 以下仅 export action 使用
|
|
43
|
+
startFollowupTm: z.number().optional()
|
|
44
|
+
.describe("跟进开始时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp 转换,严禁自行估算。不提供默认值,必须让用户明确指定,时间范围最长不超过365天"),
|
|
45
|
+
endFollowupTm: z.number().optional()
|
|
46
|
+
.describe("跟进结束时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp(endOfDay=true) 转换,严禁自行估算。不提供默认值,必须让用户明确指定,时间范围最长不超过365天"),
|
|
47
|
+
followupMethod: z.array(z.string()).optional()
|
|
48
|
+
.describe("跟进方式列表(选填,支持多选),必须传 get_followup_methods 返回的 val 字段值,禁止传中文名称(name)"),
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
export async function handler(args) {
|
|
52
|
+
debug("investment_follow_up_export args", args);
|
|
53
|
+
switch (args.action) {
|
|
54
|
+
case "get_followup_methods":
|
|
55
|
+
return await fetchFollowupMethods(args.branchId, args.cityCode);
|
|
56
|
+
case "export":
|
|
57
|
+
return await executeExport(args);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// Action 实现
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
async function fetchFollowupMethods(branchId, cityCode) {
|
|
64
|
+
const headers = buildGatewayHeaders();
|
|
65
|
+
const resp = await fetch(`${getGatewayBaseUrl()}/investment_follow_up/followup_methods`, {
|
|
66
|
+
method: "POST",
|
|
67
|
+
headers,
|
|
68
|
+
body: JSON.stringify({ branchId, cityCode }),
|
|
69
|
+
});
|
|
70
|
+
if (!resp.ok) {
|
|
71
|
+
return createErrorResult(`获取跟进方式选项失败: ${resp.status} ${resp.statusText}`);
|
|
72
|
+
}
|
|
73
|
+
const data = await resp.json();
|
|
74
|
+
debug("fetchFollowupMethods response", data);
|
|
75
|
+
if (!data.succeed) {
|
|
76
|
+
return createErrorResult(`获取跟进方式选项失败: ${data.msg}`);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
content: [{ type: "text", text: JSON.stringify(data.data) }],
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
async function executeExport(args) {
|
|
83
|
+
const { branchId, cityCode, branchName, startFollowupTm, endFollowupTm, followupMethod } = args;
|
|
84
|
+
if (!startFollowupTm || !endFollowupTm) {
|
|
85
|
+
return createErrorResult("跟进时间(startFollowupTm 和 endFollowupTm)为必填参数,请让用户明确指定跟进时间范围");
|
|
86
|
+
}
|
|
87
|
+
// 校验时间范围不超过 365 天
|
|
88
|
+
if (endFollowupTm - startFollowupTm > ONE_YEAR_MS) {
|
|
89
|
+
return createErrorResult("跟进时间范围最长不超过365天,请缩短时间范围后重试");
|
|
90
|
+
}
|
|
91
|
+
const headers = buildGatewayHeaders();
|
|
92
|
+
const gatewayBaseUrl = getGatewayBaseUrl();
|
|
93
|
+
const exportBody = {
|
|
94
|
+
branchId,
|
|
95
|
+
cityCode,
|
|
96
|
+
startFollowupTm,
|
|
97
|
+
endFollowupTm,
|
|
98
|
+
};
|
|
99
|
+
if (followupMethod && followupMethod.length > 0) {
|
|
100
|
+
exportBody.followupMethod = followupMethod;
|
|
101
|
+
}
|
|
102
|
+
debug("export body", exportBody);
|
|
103
|
+
const submitResp = await fetch(`${gatewayBaseUrl}/investment_follow_up/export`, {
|
|
104
|
+
method: "POST",
|
|
105
|
+
headers,
|
|
106
|
+
body: JSON.stringify(exportBody),
|
|
107
|
+
});
|
|
108
|
+
if (!submitResp.ok) {
|
|
109
|
+
return createErrorResult(`提交导出任务失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
110
|
+
}
|
|
111
|
+
// 根据 Content-Type 判断响应类型
|
|
112
|
+
const contentType = submitResp.headers.get("content-type") || "";
|
|
113
|
+
if (contentType.includes("json")) {
|
|
114
|
+
// JSON 响应 → 导出失败
|
|
115
|
+
const result = await submitResp.json();
|
|
116
|
+
return createErrorResult(result.msg || "提交导出任务失败");
|
|
117
|
+
}
|
|
118
|
+
// 二进制响应 → 导出成功,OLE2 转换为 xlsx 后写入文件
|
|
119
|
+
const ole2Buffer = Buffer.from(await submitResp.arrayBuffer());
|
|
120
|
+
const { xlsxBuffer, isEmpty } = convertOle2ToXlsx(ole2Buffer);
|
|
121
|
+
const localFileName = generateFollowUpFileName(branchName);
|
|
122
|
+
const dataDir = getDataDir();
|
|
123
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
124
|
+
const filePath = path.join(dataDir, localFileName);
|
|
125
|
+
fs.writeFileSync(filePath, xlsxBuffer);
|
|
126
|
+
if (isEmpty) {
|
|
127
|
+
return createSuccessResult(`文件已生成,但暂无数据(0条记录)。\n文件路径: ${filePath}`);
|
|
128
|
+
}
|
|
129
|
+
return createSuccessResult(`成功导出招商跟进记录!\n文件路径: ${filePath}`);
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=investment_follow_up_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investment_follow_up_export.js","sourceRoot":"","sources":["../../../src/tools/data/investment_follow_up_export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
interface InvestmentOpportunitiesExportArgs {
|
|
3
|
+
branchId: string;
|
|
4
|
+
cityCode: string;
|
|
5
|
+
branchName: string;
|
|
6
|
+
startCreatedTm: number;
|
|
7
|
+
endCreatedEndTm: number;
|
|
8
|
+
}
|
|
9
|
+
export declare const name = "investment_opportunities_export";
|
|
10
|
+
export declare const schema: {
|
|
11
|
+
description: string;
|
|
12
|
+
inputSchema: z.ZodObject<{
|
|
13
|
+
branchId: z.ZodString;
|
|
14
|
+
cityCode: z.ZodString;
|
|
15
|
+
branchName: z.ZodString;
|
|
16
|
+
startCreatedTm: z.ZodNumber;
|
|
17
|
+
endCreatedEndTm: z.ZodNumber;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
};
|
|
20
|
+
export declare function handler(args: InvestmentOpportunitiesExportArgs): Promise<import("../../utils/http.js").ToolResult>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=investment_opportunities_export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investment_opportunities_export.d.ts","sourceRoot":"","sources":["../../../src/tools/data/investment_opportunities_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAY5B,UAAU,iCAAiC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CAC3B;AA+BD,eAAO,MAAM,IAAI,oCAAoC,CAAC;AAEtD,eAAO,MAAM,MAAM;;;;;;;;;CAelB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,iCAAiC,qDAGpE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
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 { convertOle2ToXlsx } from "../../utils/excel.js";
|
|
7
|
+
import { debug } from "../../utils/debug.js";
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// 常量
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
const ONE_YEAR_MS = 365 * 24 * 60 * 60 * 1000;
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// 工具函数
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* 生成本地保存文件名,格式:商机管理_{branchName}_{YYYYMMDD}_{HHmmss}.xlsx
|
|
17
|
+
* 示例:商机管理_优居南宁_20260509_140301.xlsx
|
|
18
|
+
*/
|
|
19
|
+
function generateExportFileName(branchName) {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
const year = now.getFullYear();
|
|
22
|
+
const month = String(now.getMonth() + 1).padStart(2, "0");
|
|
23
|
+
const day = String(now.getDate()).padStart(2, "0");
|
|
24
|
+
const hours = String(now.getHours()).padStart(2, "0");
|
|
25
|
+
const minutes = String(now.getMinutes()).padStart(2, "0");
|
|
26
|
+
const seconds = String(now.getSeconds()).padStart(2, "0");
|
|
27
|
+
return `商机管理_${branchName}_${year}${month}${day}_${hours}${minutes}${seconds}.xlsx`;
|
|
28
|
+
}
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// 工具导出
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
export const name = "investment_opportunities_export";
|
|
33
|
+
export const schema = {
|
|
34
|
+
description: "从ERP系统导出招商商机明细Excel文件。必须先调用 branch_select 获取 branchId 和 cityCode。支持1个action: export执行导出。时间维度固定为「创建时间」,时间范围必填且不提供默认值,必须让用户明确指定,最长不超过365天。",
|
|
35
|
+
inputSchema: z.object({
|
|
36
|
+
branchId: z.string()
|
|
37
|
+
.describe("城市公司ID(即organId),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
38
|
+
cityCode: z.string()
|
|
39
|
+
.describe("城市编码,必须通过 branch_select 工具获取,禁止自行编造"),
|
|
40
|
+
branchName: z.string()
|
|
41
|
+
.describe("城市公司名称(用于文件命名),必须通过 branch_select 工具获取,禁止自行编造"),
|
|
42
|
+
startCreatedTm: z.number()
|
|
43
|
+
.describe("创建开始时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp 转换,严禁自行估算。不提供默认值,必须让用户明确指定,时间范围最长不超过365天"),
|
|
44
|
+
endCreatedEndTm: z.number()
|
|
45
|
+
.describe("创建结束时间(毫秒时间戳)。用户有指定日期时,必须先调用 get_current_time 获取当前时间作为参考,再用 date_to_timestamp(endOfDay=true) 转换,严禁自行估算。不提供默认值,必须让用户明确指定,时间范围最长不超过365天"),
|
|
46
|
+
}),
|
|
47
|
+
};
|
|
48
|
+
export async function handler(args) {
|
|
49
|
+
debug("investment_opportunities_export args", args);
|
|
50
|
+
return await executeExport(args);
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// 导出实现
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
async function executeExport(args) {
|
|
56
|
+
const { branchId, cityCode, branchName, startCreatedTm, endCreatedEndTm } = args;
|
|
57
|
+
// 校验时间范围不超过 365 天
|
|
58
|
+
if (endCreatedEndTm - startCreatedTm > ONE_YEAR_MS) {
|
|
59
|
+
return createErrorResult("创建时间范围最长不超过365天,请缩短时间范围后重试");
|
|
60
|
+
}
|
|
61
|
+
const headers = buildGatewayHeaders();
|
|
62
|
+
const gatewayBaseUrl = getGatewayBaseUrl();
|
|
63
|
+
// 提交导出任务(Gateway 透传 ERP 返回的 Excel 二进制)
|
|
64
|
+
const exportBody = {
|
|
65
|
+
branchId,
|
|
66
|
+
cityCode,
|
|
67
|
+
startCreatedTm,
|
|
68
|
+
endCreatedEndTm,
|
|
69
|
+
fileName: `MCP_商机管理_${Date.now()}`,
|
|
70
|
+
};
|
|
71
|
+
debug("export body", exportBody);
|
|
72
|
+
const submitResp = await fetch(`${gatewayBaseUrl}/investment_opportunities/export`, {
|
|
73
|
+
method: "POST",
|
|
74
|
+
headers,
|
|
75
|
+
body: JSON.stringify(exportBody),
|
|
76
|
+
});
|
|
77
|
+
if (!submitResp.ok) {
|
|
78
|
+
return createErrorResult(`提交导出任务失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
79
|
+
}
|
|
80
|
+
// 根据 Content-Type 判断响应类型
|
|
81
|
+
const contentType = submitResp.headers.get("content-type") || "";
|
|
82
|
+
if (contentType.includes("json")) {
|
|
83
|
+
// JSON 响应 → 导出失败
|
|
84
|
+
const result = await submitResp.json();
|
|
85
|
+
const msg = result.msg || "提交导出任务失败";
|
|
86
|
+
// ERP 返回"ES没有需要导出的数据"时,替换为更友好的提示
|
|
87
|
+
if (msg.includes("没有需要导出的数据")) {
|
|
88
|
+
return createErrorResult("商机没有需要导出的数据(暂无商机记录)");
|
|
89
|
+
}
|
|
90
|
+
return createErrorResult(msg);
|
|
91
|
+
}
|
|
92
|
+
// 二进制响应 → 导出成功,OLE2 转换为 xlsx 后写入文件
|
|
93
|
+
const ole2Buffer = Buffer.from(await submitResp.arrayBuffer());
|
|
94
|
+
const { xlsxBuffer, isEmpty } = convertOle2ToXlsx(ole2Buffer);
|
|
95
|
+
const localFileName = generateExportFileName(branchName);
|
|
96
|
+
const dataDir = getDataDir();
|
|
97
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
98
|
+
const filePath = path.join(dataDir, localFileName);
|
|
99
|
+
fs.writeFileSync(filePath, xlsxBuffer);
|
|
100
|
+
if (isEmpty) {
|
|
101
|
+
return createSuccessResult(`文件已生成,但暂无数据(0条记录)。\n文件路径: ${filePath}`);
|
|
102
|
+
}
|
|
103
|
+
return createSuccessResult(`成功导出招商商机明细!\n文件路径: ${filePath}`);
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=investment_opportunities_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"investment_opportunities_export.js","sourceRoot":"","sources":["../../../src/tools/data/investment_opportunities_export.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
type Action = "get_competitors" | "export";
|
|
3
|
+
interface NewHouseCompetitorDataExportArgs {
|
|
4
|
+
action: Action;
|
|
5
|
+
branchId: string;
|
|
6
|
+
cityCode: string;
|
|
7
|
+
branchName: string;
|
|
8
|
+
dimensionType?: "department" | "projectManager" | "onSite";
|
|
9
|
+
startTime?: number;
|
|
10
|
+
endTime?: number;
|
|
11
|
+
competitorList?: string[];
|
|
12
|
+
}
|
|
13
|
+
export declare const name = "new_house_competitor_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
|
+
dimensionType: z.ZodOptional<z.ZodEnum<{
|
|
25
|
+
department: "department";
|
|
26
|
+
projectManager: "projectManager";
|
|
27
|
+
onSite: "onSite";
|
|
28
|
+
}>>;
|
|
29
|
+
startTime: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
endTime: z.ZodOptional<z.ZodNumber>;
|
|
31
|
+
competitorList: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
32
|
+
}, z.core.$strip>;
|
|
33
|
+
};
|
|
34
|
+
export declare function handler(args: NewHouseCompetitorDataExportArgs): Promise<import("../../utils/http.js").ToolResult>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=new_house_competitor_data_export.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"new_house_competitor_data_export.d.ts","sourceRoot":"","sources":["../../../src/tools/data/new_house_competitor_data_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAU5B,KAAK,MAAM,GAAG,iBAAiB,GAAG,QAAQ,CAAC;AAc3C,UAAU,gCAAgC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,YAAY,GAAG,gBAAgB,GAAG,QAAQ,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AA2CD,eAAO,MAAM,IAAI,qCAAqC,CAAC;AAEvD,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAyBlB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE,gCAAgC,qDASnE"}
|
|
@@ -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"}
|