@yjzf/mcp-server-yjzf 0.2.8 → 0.3.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 +9 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/contract/new_house_commission_export.d.ts +49 -0
- package/dist/tools/contract/new_house_commission_export.d.ts.map +1 -0
- package/dist/tools/contract/new_house_commission_export.js +249 -0
- package/dist/tools/contract/new_house_commission_export.js.map +1 -0
- package/dist/tools/contract/new_house_developer_repayment_export.d.ts +40 -0
- package/dist/tools/contract/new_house_developer_repayment_export.d.ts.map +1 -0
- package/dist/tools/contract/new_house_developer_repayment_export.js +200 -0
- package/dist/tools/contract/new_house_developer_repayment_export.js.map +1 -0
- package/dist/tools/house/umai_good_house_export.d.ts +22 -0
- package/dist/tools/house/umai_good_house_export.d.ts.map +1 -0
- package/dist/tools/house/umai_good_house_export.js +143 -0
- package/dist/tools/house/umai_good_house_export.js.map +1 -0
- package/package.json +1 -1
- package/dist/tools/count_all_statement.d.ts +0 -46
- package/dist/tools/count_all_statement.d.ts.map +0 -1
- package/dist/tools/count_all_statement.js +0 -334
- package/dist/tools/count_all_statement.js.map +0 -1
- package/dist/tools/date_to_timestamp.d.ts +0 -19
- package/dist/tools/date_to_timestamp.d.ts.map +0 -1
- package/dist/tools/date_to_timestamp.js +0 -45
- package/dist/tools/date_to_timestamp.js.map +0 -1
- package/dist/tools/get_current_time.d.ts +0 -13
- package/dist/tools/get_current_time.d.ts.map +0 -1
- package/dist/tools/get_current_time.js +0 -23
- package/dist/tools/get_current_time.js.map +0 -1
- package/dist/tools/hello_world.d.ts +0 -20
- package/dist/tools/hello_world.d.ts.map +0 -1
- package/dist/tools/hello_world.js +0 -47
- package/dist/tools/hello_world.js.map +0 -1
- package/dist/tools/investment_contract.d.ts +0 -8
- package/dist/tools/investment_contract.d.ts.map +0 -1
- package/dist/tools/investment_contract.js +0 -106
- package/dist/tools/investment_contract.js.map +0 -1
- package/dist/tools/new_house_contract_export.d.ts +0 -14
- package/dist/tools/new_house_contract_export.d.ts.map +0 -1
- package/dist/tools/new_house_contract_export.js +0 -242
- package/dist/tools/new_house_contract_export.js.map +0 -1
- package/dist/tools/overview_by_c.d.ts +0 -26
- package/dist/tools/overview_by_c.d.ts.map +0 -1
- package/dist/tools/overview_by_c.js +0 -204
- package/dist/tools/overview_by_c.js.map +0 -1
- package/dist/tools/statement_query.d.ts +0 -43
- package/dist/tools/statement_query.d.ts.map +0 -1
- package/dist/tools/statement_query.js +0 -430
- package/dist/tools/statement_query.js.map +0 -1
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { buildGatewayHeaders, createErrorResult, createSuccessResult } from "../../utils/http.js";
|
|
3
|
+
import { getGatewayBaseUrl } 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
|
+
* 生成唯一 fileName,用于在导出状态列表中精确匹配
|
|
11
|
+
*/
|
|
12
|
+
function generateUniqueExportName() {
|
|
13
|
+
const ts = Date.now();
|
|
14
|
+
const rand = Math.random().toString(36).slice(2, 6);
|
|
15
|
+
return `MCP_优卖好房明细_${ts}_${rand}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* 生成导出文件名,格式:优卖好房明细{YYYY-MM-DD HH_mm_ss}.xlsx
|
|
19
|
+
*/
|
|
20
|
+
function generateExportFileName() {
|
|
21
|
+
const now = new Date();
|
|
22
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
23
|
+
const timeStamp = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}_${pad(now.getMinutes())}_${pad(now.getSeconds())}`;
|
|
24
|
+
return `优卖好房明细${timeStamp}.xlsx`;
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// 工具导出
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
export const name = "umai_good_house_export";
|
|
30
|
+
export const schema = {
|
|
31
|
+
description: "从ERP系统导出优卖好房明细Excel文件。必须先调用 branch_select 获取 branchId。支持2个action: get_filter_options获取筛选选项(优卖状态), export执行导出。多城市时将所有 branchId 一起传入,只调用一次工具。",
|
|
32
|
+
inputSchema: z.object({
|
|
33
|
+
action: z.enum(["get_filter_options", "export"])
|
|
34
|
+
.describe("要执行的动作"),
|
|
35
|
+
branchId: z.array(z.string())
|
|
36
|
+
.describe("城市公司ID数组(即organId),必须通过 branch_select 工具获取,可多选,禁止自行编造"),
|
|
37
|
+
// 以下仅 export action 使用
|
|
38
|
+
status: z.array(z.number())
|
|
39
|
+
.describe("优卖状态筛选,必填,必须传 get_filter_options 返回的 val 字段值,禁止传中文名称(name)"),
|
|
40
|
+
}),
|
|
41
|
+
};
|
|
42
|
+
export async function handler(args) {
|
|
43
|
+
debug("umai_good_house_export args", args);
|
|
44
|
+
switch (args.action) {
|
|
45
|
+
case "get_filter_options":
|
|
46
|
+
return await fetchFilterOptions(args.branchId);
|
|
47
|
+
case "export":
|
|
48
|
+
return await executeExport(args);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Action 实现
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
async function fetchFilterOptions(branchId) {
|
|
55
|
+
const headers = buildGatewayHeaders();
|
|
56
|
+
const resp = await fetch(`${getGatewayBaseUrl()}/umai_good_house_export/filter_options`, {
|
|
57
|
+
method: "POST",
|
|
58
|
+
headers,
|
|
59
|
+
body: JSON.stringify({ branchId }),
|
|
60
|
+
});
|
|
61
|
+
if (!resp.ok) {
|
|
62
|
+
return createErrorResult(`获取筛选选项失败: ${resp.status} ${resp.statusText}`);
|
|
63
|
+
}
|
|
64
|
+
const data = await resp.json();
|
|
65
|
+
debug("fetchFilterOptions response", data);
|
|
66
|
+
if (!data.succeed) {
|
|
67
|
+
return createErrorResult(`获取筛选选项失败: ${data.msg}`);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
content: [{ type: "text", text: JSON.stringify(data.data) }],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
async function executeExport(args) {
|
|
74
|
+
const { branchId } = args;
|
|
75
|
+
// 生成唯一 fileName 用于状态匹配
|
|
76
|
+
const uniqueName = generateUniqueExportName();
|
|
77
|
+
debug("export uniqueName", uniqueName);
|
|
78
|
+
const headers = buildGatewayHeaders();
|
|
79
|
+
const gatewayBaseUrl = getGatewayBaseUrl();
|
|
80
|
+
// 提交导出任务
|
|
81
|
+
const exportBody = {
|
|
82
|
+
branchId,
|
|
83
|
+
fileName: uniqueName,
|
|
84
|
+
status: args.status,
|
|
85
|
+
};
|
|
86
|
+
debug("export body", exportBody);
|
|
87
|
+
const submitResp = await fetch(`${gatewayBaseUrl}/umai_good_house_export/export`, {
|
|
88
|
+
method: "POST",
|
|
89
|
+
headers,
|
|
90
|
+
body: JSON.stringify(exportBody),
|
|
91
|
+
});
|
|
92
|
+
if (!submitResp.ok) {
|
|
93
|
+
return createErrorResult(`提交导出任务失败: ${submitResp.status} ${submitResp.statusText}`);
|
|
94
|
+
}
|
|
95
|
+
const submitResult = await submitResp.json();
|
|
96
|
+
debug("export submit result", submitResult);
|
|
97
|
+
if (!submitResult.succeed) {
|
|
98
|
+
return createErrorResult(`提交导出任务失败: ${submitResult.msg}`);
|
|
99
|
+
}
|
|
100
|
+
// 轮询导出状态
|
|
101
|
+
try {
|
|
102
|
+
const submittedAt = Date.now();
|
|
103
|
+
const downloadUrl = await pollAsyncExport({
|
|
104
|
+
logTag: "umai_good_house_export",
|
|
105
|
+
checkStatus: async () => {
|
|
106
|
+
const statusBody = {
|
|
107
|
+
branchId: branchId[0],
|
|
108
|
+
startInc: submittedAt - 5 * 60 * 1000,
|
|
109
|
+
endExc: Date.now(),
|
|
110
|
+
};
|
|
111
|
+
const statusResp = await fetch(`${gatewayBaseUrl}/umai_good_house_export/export_status`, {
|
|
112
|
+
method: "POST",
|
|
113
|
+
headers,
|
|
114
|
+
body: JSON.stringify(statusBody),
|
|
115
|
+
});
|
|
116
|
+
if (!statusResp.ok) {
|
|
117
|
+
throw new Error(`查询导出状态失败: ${statusResp.status}`);
|
|
118
|
+
}
|
|
119
|
+
const statusData = await statusResp.json();
|
|
120
|
+
if (!statusData.succeed) {
|
|
121
|
+
throw new Error("查询导出状态接口返回失败");
|
|
122
|
+
}
|
|
123
|
+
const match = statusData.data?.find((item) => item.fileName === uniqueName);
|
|
124
|
+
if (!match || !match.finishTm) {
|
|
125
|
+
return { state: "pending" };
|
|
126
|
+
}
|
|
127
|
+
if (match.source) {
|
|
128
|
+
return { state: "success", downloadUrl: match.source };
|
|
129
|
+
}
|
|
130
|
+
return { state: "failed", reason: "ERP导出任务执行失败" };
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
// 下载文件(命名格式:优卖好房明细{YYYY-MM-DD HH_mm_ss}.xlsx)
|
|
134
|
+
const localFileName = generateExportFileName();
|
|
135
|
+
const filePath = await downloadToDataDir(downloadUrl, localFileName);
|
|
136
|
+
return createSuccessResult(`成功导出优卖好房明细!\n文件路径: ${filePath}`);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
140
|
+
return createErrorResult(`导出过程中发生错误: ${errorMessage}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=umai_good_house_export.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"umai_good_house_export.js","sourceRoot":"","sources":["../../../src/tools/house/umai_good_house_export.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
import * as z from "zod/v4";
|
|
2
|
-
export declare const name = "count_all_statement";
|
|
3
|
-
export declare const schema: {
|
|
4
|
-
description: string;
|
|
5
|
-
inputSchema: z.ZodObject<{
|
|
6
|
-
statisticsScope: z.ZodOptional<z.ZodNumber>;
|
|
7
|
-
branchIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
8
|
-
bizlineIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
9
|
-
storeManagerIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
10
|
-
districtCodes: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
11
|
-
tradingAreaIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
12
|
-
subBranchIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
13
|
-
agentCodeQueries: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
14
|
-
startTime: z.ZodOptional<z.ZodNumber>;
|
|
15
|
-
endTime: z.ZodOptional<z.ZodNumber>;
|
|
16
|
-
status: z.ZodOptional<z.ZodString>;
|
|
17
|
-
isEnabled: z.ZodOptional<z.ZodString>;
|
|
18
|
-
}, z.core.$strip>;
|
|
19
|
-
};
|
|
20
|
-
export declare function handler(args: {
|
|
21
|
-
statisticsScope?: number;
|
|
22
|
-
branchIds?: string[];
|
|
23
|
-
bizlineIds?: string[];
|
|
24
|
-
storeManagerIds?: string[];
|
|
25
|
-
districtCodes?: string[];
|
|
26
|
-
tradingAreaIds?: string[];
|
|
27
|
-
subBranchIds?: string[];
|
|
28
|
-
agentCodeQueries?: string[];
|
|
29
|
-
startTime?: number;
|
|
30
|
-
endTime?: number;
|
|
31
|
-
status?: string;
|
|
32
|
-
isEnabled?: string;
|
|
33
|
-
}): Promise<{
|
|
34
|
-
content: {
|
|
35
|
-
type: "text";
|
|
36
|
-
text: string;
|
|
37
|
-
}[];
|
|
38
|
-
isError?: undefined;
|
|
39
|
-
} | {
|
|
40
|
-
content: {
|
|
41
|
-
type: "text";
|
|
42
|
-
text: string;
|
|
43
|
-
}[];
|
|
44
|
-
isError: boolean;
|
|
45
|
-
}>;
|
|
46
|
-
//# sourceMappingURL=count_all_statement.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"count_all_statement.d.ts","sourceRoot":"","sources":["../../src/tools/count_all_statement.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAuL5B,eAAO,MAAM,IAAI,wBAAwB,CAAC;AAE1C,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;CA4ClB,CAAC;AAsEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;;;;;;;;;;;;GA8BA"}
|
|
@@ -1,334 +0,0 @@
|
|
|
1
|
-
import * as fs from "node:fs";
|
|
2
|
-
import * as path from "node:path";
|
|
3
|
-
import * as xlsx from "xlsx";
|
|
4
|
-
import * as z from "zod/v4";
|
|
5
|
-
import { getDataDir, getGatewayBaseUrl, generateDatedFileName } from "../utils/env.js";
|
|
6
|
-
import { buildGatewayHeaders } from "../utils/http.js";
|
|
7
|
-
import { debug } from "../utils/debug.js";
|
|
8
|
-
// Phase 1 原有: 城市公司/营销线层级维度的固定展示列
|
|
9
|
-
const CITY_FIXED_COLUMNS = [
|
|
10
|
-
["城市公司", "orgLevelSimpleName"],
|
|
11
|
-
["创建日期", "createTmStr"],
|
|
12
|
-
["类型", "businessTypeName"],
|
|
13
|
-
["城市总经理", "managerName"],
|
|
14
|
-
];
|
|
15
|
-
const MKT_FIXED_COLUMNS = [
|
|
16
|
-
["姓名", "userName"],
|
|
17
|
-
["员工id", "employeesId"],
|
|
18
|
-
["工号", "employeesNo"],
|
|
19
|
-
["手机号", "phone"],
|
|
20
|
-
["管理层级名称", "bizlineName"],
|
|
21
|
-
["城市公司", "branchSimpleName"],
|
|
22
|
-
];
|
|
23
|
-
// Phase 2: 行政区/商圈/小区维度的固定展示列
|
|
24
|
-
const DISTRICT_FIXED_COLUMNS = [
|
|
25
|
-
["行政区", "districtName"],
|
|
26
|
-
["城市公司", "orgLevelSimpleName"],
|
|
27
|
-
];
|
|
28
|
-
const TRADING_AREA_FIXED_COLUMNS = [
|
|
29
|
-
["商圈", "tradingAreaName"],
|
|
30
|
-
["行政区", "districtName"],
|
|
31
|
-
["城市公司", "orgLevelSimpleName"],
|
|
32
|
-
];
|
|
33
|
-
const ESTATE_FIXED_COLUMNS = [
|
|
34
|
-
["小区", "estateName"],
|
|
35
|
-
["商圈", "tradingAreaName"],
|
|
36
|
-
["行政区", "districtName"],
|
|
37
|
-
["城市公司", "orgLevelSimpleName"],
|
|
38
|
-
];
|
|
39
|
-
// 经纪人维度(scope=1)的固定展示列:经纪人身份信息及归属组织
|
|
40
|
-
const AGENT_FIXED_COLUMNS = [
|
|
41
|
-
["经纪人姓名", "agentName"],
|
|
42
|
-
["员工ID", "agentId"],
|
|
43
|
-
["工号", "employeesNo"],
|
|
44
|
-
["手机号", "agentPhone"],
|
|
45
|
-
["支队", "teamName"],
|
|
46
|
-
["门店", "storeName"],
|
|
47
|
-
["经纪公司", "franchName"],
|
|
48
|
-
["城市公司", "branchSimpleName"],
|
|
49
|
-
];
|
|
50
|
-
// 子公司维度(scope=17)的固定展示列:子公司基础信息及负责人
|
|
51
|
-
const SUB_BRANCH_FIXED_COLUMNS = [
|
|
52
|
-
["子公司名称", "subBranchName"],
|
|
53
|
-
["子公司ID", "subBranchId"],
|
|
54
|
-
["负责人姓名", "managerName"],
|
|
55
|
-
["负责人账号", "managerPhone"],
|
|
56
|
-
["城市公司", "branchSimpleName"],
|
|
57
|
-
];
|
|
58
|
-
function buildStatsHeaders(statisticsItems) {
|
|
59
|
-
const headers = [];
|
|
60
|
-
for (const item of statisticsItems) {
|
|
61
|
-
if (item.hasChild === 1 && item.childNode) {
|
|
62
|
-
for (const child of item.childNode) {
|
|
63
|
-
headers.push(`${item.topCodeName}_${item.codeName}_${child.name}`);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
headers.push(`${item.topCodeName}_${item.codeName}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return headers;
|
|
71
|
-
}
|
|
72
|
-
function buildStatsValues(statisticsItems) {
|
|
73
|
-
const values = [];
|
|
74
|
-
for (const item of statisticsItems) {
|
|
75
|
-
if (item.hasChild === 1 && item.childNode) {
|
|
76
|
-
for (const child of item.childNode) {
|
|
77
|
-
values.push(child.count);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
values.push(item.count ?? "");
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return values;
|
|
85
|
-
}
|
|
86
|
-
function buildSheetData(list, fixedColumns) {
|
|
87
|
-
if (list.length === 0)
|
|
88
|
-
return [];
|
|
89
|
-
const fixedHeaders = fixedColumns.map(([label]) => label);
|
|
90
|
-
const statsHeaders = buildStatsHeaders(list[0].statisticsItems);
|
|
91
|
-
const headers = [...fixedHeaders, ...statsHeaders];
|
|
92
|
-
const rows = list.map((item) => {
|
|
93
|
-
const fixedValues = fixedColumns.map(([, field]) => String(item[field] ?? ""));
|
|
94
|
-
const statsValues = buildStatsValues(item.statisticsItems);
|
|
95
|
-
return [...fixedValues, ...statsValues];
|
|
96
|
-
});
|
|
97
|
-
return [headers, ...rows];
|
|
98
|
-
}
|
|
99
|
-
export const name = "count_all_statement";
|
|
100
|
-
export const schema = {
|
|
101
|
-
description: `获取总部数据指标报表,生成 Excel 文件。支持两种模式:
|
|
102
|
-
1. 旧模式(不传 statisticsScope):固定查询城市公司+营销线层级两个维度,使用默认20项指标
|
|
103
|
-
2. 动态模式(传入 statisticsScope):按指定维度和条件进行单轮查询,支持自定义指标
|
|
104
|
-
|
|
105
|
-
⚠️ 动态模式的所有参数值(branchIds、bizlineIds、storeManagerIds、agentCodeQueries 等)必须先通过 statement_query 工具查询获取真实值,严禁自行编造或猜测 ID/code。
|
|
106
|
-
调用顺序:statement_query(get_query_guide) → statement_query(get_branches) → [维度专属查询] → statement_query(get_statistics_targets) → 本工具。
|
|
107
|
-
用户说某个指标大类名称(如"房源库存指标")时,必须传入该大类下返回的所有父级 code,不可只传一个。
|
|
108
|
-
不传时间参数时默认查询当月第一天到昨天,最大时间间隔 12 个月。不需要自行计算时间戳,不传即可使用默认值。
|
|
109
|
-
|
|
110
|
-
🔁 后续/重复导出规则:当用户要求"把其他城市也导一份"或"换个城市再导一次"时:
|
|
111
|
-
- agentCodeQueries 必须与上一次成功导出使用的完全相同(同样的 code 列表、同样的数量)
|
|
112
|
-
- statisticsScope 必须与上一次相同
|
|
113
|
-
- 仅 branchIds、bizlineIds、storeManagerIds 需要根据新城市重新通过 statement_query 查询
|
|
114
|
-
- 禁止从上下文中随意挑选 code,必须原样复用上次的完整 agentCodeQueries 数组`,
|
|
115
|
-
inputSchema: z.object({
|
|
116
|
-
// 动态模式参数
|
|
117
|
-
statisticsScope: z.number().optional()
|
|
118
|
-
.describe("统计维度: 5=城市公司, 7=营销线层级, 51=行政区, 52=商圈, 53=小区, 1=经纪人, 17=子公司。不传则走旧的固定查询逻辑"),
|
|
119
|
-
branchIds: z.array(z.string()).optional()
|
|
120
|
-
.describe("城市公司 ID 列表。必须通过 statement_query({ action: 'get_branches', preset: '直营' }) 获取,从结果中匹配目标城市的 branchId。禁止用 keyword 搜索直营城市,禁止编造"),
|
|
121
|
-
bizlineIds: z.array(z.string()).optional()
|
|
122
|
-
.describe("营销线层级 ID 列表,仅维度=7 时必传。必须通过 statement_query({ action: 'get_hierarchies' }) 获取真实 key 值,禁止编造"),
|
|
123
|
-
storeManagerIds: z.array(z.string()).optional()
|
|
124
|
-
.describe("管理人员 ID 列表,仅维度=7 时使用。必须通过 statement_query({ action: 'get_store_managers' }) 获取。不传或空数组=全选"),
|
|
125
|
-
districtCodes: z.array(z.string()).optional()
|
|
126
|
-
.describe("行政区编码列表,仅维度 51/52/53 时使用。必须通过 statement_query({ action: 'get_districts', branchIds }) 获取真实 districtCode,禁止编造"),
|
|
127
|
-
tradingAreaIds: z.array(z.string()).optional()
|
|
128
|
-
.describe("商圈 ID 列表,仅维度 52/53 时使用。必须通过 statement_query({ action: 'get_trading_areas', branchIds, districtCodes }) 获取真实 tradingAreaId,禁止编造"),
|
|
129
|
-
subBranchIds: z.array(z.string()).optional()
|
|
130
|
-
.describe("子公司 ID 列表,仅维度 17 时使用。必须通过 statement_query({ action: 'get_sub_branches', branchIds }) 获取真实 subBranchId,禁止编造"),
|
|
131
|
-
agentCodeQueries: z.array(z.string()).optional()
|
|
132
|
-
.describe(`统计指标 code 列表。必须通过 statement_query({ action: 'get_statistics_targets', statisticsScope, topName }) 获取真实 code,禁止编造。
|
|
133
|
-
- 用户说某个指标大类名称(如"房源库存指标")时,传入该大类下所有父级 code。
|
|
134
|
-
- 用户说某个父级指标(如"上架房源数")且未指定子项时,传父级 code(如 "55"),会导出该父级下所有子项。
|
|
135
|
-
- 用户明确指定子项/口径(如"上架房源数-二手房"、"签单量-买卖")时,必须传对应 childNodes 里的子项 code(如 "301"),不要传父级 code。`),
|
|
136
|
-
// 时间参数
|
|
137
|
-
startTime: z.number().optional().describe("开始时间(毫秒时间戳)。不传则默认当月第一天,无需自行计算"),
|
|
138
|
-
endTime: z.number().optional().describe("结束时间(毫秒时间戳)。不传则默认昨天23:59:59,无需自行计算"),
|
|
139
|
-
// 其他
|
|
140
|
-
status: z.string().optional().describe("状态筛选,仅经纪人维度(1)使用。1=在职,2=离职"),
|
|
141
|
-
isEnabled: z.string().optional().describe("启用状态筛选,仅经纪人维度(1)使用。1=启用,0=禁用"),
|
|
142
|
-
}),
|
|
143
|
-
};
|
|
144
|
-
const MAX_INTERVAL_MS = 366 * 24 * 3600 * 1000; // 12 个月(约 366 天)
|
|
145
|
-
function getDefaultTimeRange() {
|
|
146
|
-
const now = new Date();
|
|
147
|
-
const monthStart = new Date(now.getFullYear(), now.getMonth(), 1);
|
|
148
|
-
const yesterday = new Date(now.getFullYear(), now.getMonth(), now.getDate() - 1, 23, 59, 59, 999);
|
|
149
|
-
return {
|
|
150
|
-
startTime: monthStart.getTime(),
|
|
151
|
-
endTime: yesterday.getTime(),
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
const SCOPE_FIXED_COLUMNS = {
|
|
155
|
-
// Phase 1 原有
|
|
156
|
-
5: CITY_FIXED_COLUMNS,
|
|
157
|
-
7: MKT_FIXED_COLUMNS,
|
|
158
|
-
// Phase 2 新增: 行政区/商圈/小区维度
|
|
159
|
-
51: DISTRICT_FIXED_COLUMNS,
|
|
160
|
-
52: TRADING_AREA_FIXED_COLUMNS,
|
|
161
|
-
53: ESTATE_FIXED_COLUMNS,
|
|
162
|
-
// Phase 3 新增: 经纪人/子公司维度
|
|
163
|
-
1: AGENT_FIXED_COLUMNS,
|
|
164
|
-
17: SUB_BRANCH_FIXED_COLUMNS,
|
|
165
|
-
};
|
|
166
|
-
const DEFAULT_FIXED_COLUMNS = [
|
|
167
|
-
["名称", "orgLevelSimpleName"],
|
|
168
|
-
];
|
|
169
|
-
function getDimensionLabel(scope) {
|
|
170
|
-
const labels = {
|
|
171
|
-
5: "城市公司", 7: "营销线层级", 51: "行政区",
|
|
172
|
-
52: "商圈", 53: "小区", 1: "经纪人", 17: "子公司",
|
|
173
|
-
};
|
|
174
|
-
return labels[scope] ?? `维度${scope}`;
|
|
175
|
-
}
|
|
176
|
-
// ---------------------------------------------------------------------------
|
|
177
|
-
// Handler
|
|
178
|
-
// ---------------------------------------------------------------------------
|
|
179
|
-
export async function handler(args) {
|
|
180
|
-
const defaults = getDefaultTimeRange();
|
|
181
|
-
const startTime = args.startTime ?? defaults.startTime;
|
|
182
|
-
const endTime = args.endTime ?? defaults.endTime;
|
|
183
|
-
// Phase 2: 小区(53)维度不使用时间参数,跳过时间间隔校验
|
|
184
|
-
if (args.statisticsScope !== 53 && endTime - startTime > MAX_INTERVAL_MS) {
|
|
185
|
-
return {
|
|
186
|
-
content: [{ type: "text", text: `时间间隔超过 12 个月限制,请缩小查询范围` }],
|
|
187
|
-
isError: true,
|
|
188
|
-
};
|
|
189
|
-
}
|
|
190
|
-
debug("date range", { startTime, endTime });
|
|
191
|
-
const headers = buildGatewayHeaders();
|
|
192
|
-
try {
|
|
193
|
-
if (args.statisticsScope != null) {
|
|
194
|
-
return await handleDynamicQuery(args, startTime, endTime, headers);
|
|
195
|
-
}
|
|
196
|
-
else {
|
|
197
|
-
return await handleLegacyQuery(startTime, endTime, headers);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
202
|
-
return {
|
|
203
|
-
content: [{ type: "text", text: `执行过程中发生错误: ${errorMessage}` }],
|
|
204
|
-
isError: true,
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
// ---------------------------------------------------------------------------
|
|
209
|
-
// 动态模式
|
|
210
|
-
// ---------------------------------------------------------------------------
|
|
211
|
-
async function handleDynamicQuery(args, startTime, endTime, headers) {
|
|
212
|
-
const payload = {
|
|
213
|
-
statisticsScope: args.statisticsScope,
|
|
214
|
-
branchIds: args.branchIds,
|
|
215
|
-
bizlineIds: args.bizlineIds,
|
|
216
|
-
storeManagerIds: args.storeManagerIds,
|
|
217
|
-
districtCodes: args.districtCodes,
|
|
218
|
-
tradingAreaIds: args.tradingAreaIds,
|
|
219
|
-
subBranchIds: args.subBranchIds,
|
|
220
|
-
agentCodeQueries: args.agentCodeQueries,
|
|
221
|
-
status: args.status,
|
|
222
|
-
isEnabled: args.isEnabled,
|
|
223
|
-
};
|
|
224
|
-
// Phase 2: 小区(53)维度不传时间参数(ERP 只查截止当前的存量数据)
|
|
225
|
-
if (args.statisticsScope !== 53) {
|
|
226
|
-
payload.startTime = startTime;
|
|
227
|
-
payload.endTime = endTime;
|
|
228
|
-
}
|
|
229
|
-
debug("dynamic query payload", payload);
|
|
230
|
-
const resp = await fetch(`${getGatewayBaseUrl()}/count_all_statement`, {
|
|
231
|
-
method: "POST",
|
|
232
|
-
headers,
|
|
233
|
-
body: JSON.stringify(payload),
|
|
234
|
-
});
|
|
235
|
-
if (!resp.ok) {
|
|
236
|
-
return {
|
|
237
|
-
content: [{ type: "text", text: `请求 count_all_statement 失败: ${resp.status} ${resp.statusText}` }],
|
|
238
|
-
isError: true,
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
const apiResponse = await resp.json();
|
|
242
|
-
debug("dynamic query response", { succeed: apiResponse.succeed, msg: apiResponse.msg });
|
|
243
|
-
if (!apiResponse.succeed) {
|
|
244
|
-
return {
|
|
245
|
-
content: [{ type: "text", text: `网关返回错误: ${apiResponse.msg}` }],
|
|
246
|
-
isError: true,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
// 生成 Excel
|
|
250
|
-
const workbook = xlsx.utils.book_new();
|
|
251
|
-
const fixedColumns = SCOPE_FIXED_COLUMNS[args.statisticsScope] ?? DEFAULT_FIXED_COLUMNS;
|
|
252
|
-
const sheetData = buildSheetData(apiResponse.data.queryData.data.list, fixedColumns);
|
|
253
|
-
const sheet = xlsx.utils.aoa_to_sheet(sheetData);
|
|
254
|
-
const dimensionLabel = getDimensionLabel(args.statisticsScope);
|
|
255
|
-
xlsx.utils.book_append_sheet(workbook, sheet, dimensionLabel);
|
|
256
|
-
const fileName = generateDatedFileName(`数据指标报表_${dimensionLabel}`, "xlsx");
|
|
257
|
-
const dataDir = getDataDir();
|
|
258
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
259
|
-
const filePath = path.join(dataDir, fileName);
|
|
260
|
-
xlsx.writeFile(workbook, filePath);
|
|
261
|
-
const listCount = apiResponse.data.queryData.data.list.length;
|
|
262
|
-
return {
|
|
263
|
-
content: [{
|
|
264
|
-
type: "text",
|
|
265
|
-
text: `成功生成${dimensionLabel}维度指标报表!共 ${listCount} 条数据。\n文件路径: ${filePath}`,
|
|
266
|
-
}],
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
// ---------------------------------------------------------------------------
|
|
270
|
-
// 旧模式
|
|
271
|
-
// ---------------------------------------------------------------------------
|
|
272
|
-
async function handleLegacyQuery(startTime, endTime, headers) {
|
|
273
|
-
// Step 1: Fetch cities1 and cities2 in parallel
|
|
274
|
-
const [cities1Response, cities2Response] = await Promise.all([
|
|
275
|
-
fetch("https://mcp.yjzf.com/zy_cities.json", { method: "GET", headers }),
|
|
276
|
-
fetch("https://mcp.yjzf.com/count_all_step2.json", { method: "GET", headers }),
|
|
277
|
-
]);
|
|
278
|
-
if (!cities1Response.ok) {
|
|
279
|
-
return {
|
|
280
|
-
content: [{ type: "text", text: `获取 zy_cities 数据失败: ${cities1Response.status} ${cities1Response.statusText}` }],
|
|
281
|
-
isError: true,
|
|
282
|
-
};
|
|
283
|
-
}
|
|
284
|
-
if (!cities2Response.ok) {
|
|
285
|
-
return {
|
|
286
|
-
content: [{ type: "text", text: `获取 count_all_step2 数据失败: ${cities2Response.status} ${cities2Response.statusText}` }],
|
|
287
|
-
isError: true,
|
|
288
|
-
};
|
|
289
|
-
}
|
|
290
|
-
const cities1 = await cities1Response.json();
|
|
291
|
-
debug("zy_cities.json (cities1)", cities1);
|
|
292
|
-
const cities2 = await cities2Response.json();
|
|
293
|
-
debug("count_all_step2.json (cities2)", cities2);
|
|
294
|
-
// Step 2: POST to count_all_statement
|
|
295
|
-
const payload = { cities1, cities2, startTime, endTime };
|
|
296
|
-
const statementResponse = await fetch(`${getGatewayBaseUrl()}/count_all_statement`, {
|
|
297
|
-
method: "POST",
|
|
298
|
-
headers,
|
|
299
|
-
body: JSON.stringify(payload),
|
|
300
|
-
});
|
|
301
|
-
if (!statementResponse.ok) {
|
|
302
|
-
return {
|
|
303
|
-
content: [{ type: "text", text: `请求 count_all_statement 失败: ${statementResponse.status} ${statementResponse.statusText}` }],
|
|
304
|
-
isError: true,
|
|
305
|
-
};
|
|
306
|
-
}
|
|
307
|
-
// Step 3: Parse JSON response and generate Excel
|
|
308
|
-
const apiResponse = await statementResponse.json();
|
|
309
|
-
debug("count_all_statement response", apiResponse);
|
|
310
|
-
if (!apiResponse.succeed) {
|
|
311
|
-
return {
|
|
312
|
-
content: [{ type: "text", text: `网关返回错误: ${apiResponse.msg}` }],
|
|
313
|
-
isError: true,
|
|
314
|
-
};
|
|
315
|
-
}
|
|
316
|
-
// Step 4: Build Excel workbook with two sheets
|
|
317
|
-
const workbook = xlsx.utils.book_new();
|
|
318
|
-
const citySheetData = buildSheetData(apiResponse.data.cityData.data.list, CITY_FIXED_COLUMNS);
|
|
319
|
-
const citySheet = xlsx.utils.aoa_to_sheet(citySheetData);
|
|
320
|
-
xlsx.utils.book_append_sheet(workbook, citySheet, "城市公司维度");
|
|
321
|
-
const mktSheetData = buildSheetData(apiResponse.data.marketingData.data.list, MKT_FIXED_COLUMNS);
|
|
322
|
-
const mktSheet = xlsx.utils.aoa_to_sheet(mktSheetData);
|
|
323
|
-
xlsx.utils.book_append_sheet(workbook, mktSheet, "营销线层级维度");
|
|
324
|
-
// Step 5: Save xlsx file
|
|
325
|
-
const fileName = generateDatedFileName("城市指标统计", "xlsx");
|
|
326
|
-
const dataDir = getDataDir();
|
|
327
|
-
fs.mkdirSync(dataDir, { recursive: true });
|
|
328
|
-
const filePath = path.join(dataDir, fileName);
|
|
329
|
-
xlsx.writeFile(workbook, filePath);
|
|
330
|
-
return {
|
|
331
|
-
content: [{ type: "text", text: `成功生成城市指标统计报表!\n文件路径: ${filePath}` }],
|
|
332
|
-
};
|
|
333
|
-
}
|
|
334
|
-
//# sourceMappingURL=count_all_statement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"count_all_statement.js","sourceRoot":"","sources":["../../src/tools/count_all_statement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import * as z from "zod/v4";
|
|
2
|
-
export declare const name = "date_to_timestamp";
|
|
3
|
-
export declare const schema: {
|
|
4
|
-
description: string;
|
|
5
|
-
inputSchema: z.ZodObject<{
|
|
6
|
-
date: z.ZodString;
|
|
7
|
-
endOfDay: z.ZodOptional<z.ZodBoolean>;
|
|
8
|
-
}, z.core.$strip>;
|
|
9
|
-
};
|
|
10
|
-
export declare function handler(args: {
|
|
11
|
-
date: string;
|
|
12
|
-
endOfDay?: boolean;
|
|
13
|
-
}): Promise<{
|
|
14
|
-
content: {
|
|
15
|
-
type: "text";
|
|
16
|
-
text: string;
|
|
17
|
-
}[];
|
|
18
|
-
}>;
|
|
19
|
-
//# sourceMappingURL=date_to_timestamp.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date_to_timestamp.d.ts","sourceRoot":"","sources":["../../src/tools/date_to_timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,eAAO,MAAM,IAAI,sBAAsB,CAAC;AAExC,eAAO,MAAM,MAAM;;;;;;CAUlB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;;;;;GAgCvE"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import * as z from "zod/v4";
|
|
2
|
-
export const name = "date_to_timestamp";
|
|
3
|
-
export const schema = {
|
|
4
|
-
description: "将 yyyymmdd 格式的日期转换为毫秒时间戳(北京时间)。默认返回当天 00:00:00 的时间戳,传 endOfDay=true 返回当天 23:59:59.999 的时间戳。用于 startTime 时不传 endOfDay,用于 endTime 时传 endOfDay=true",
|
|
5
|
-
inputSchema: z.object({
|
|
6
|
-
date: z.string()
|
|
7
|
-
.length(8, "日期必须是 8 位数字格式")
|
|
8
|
-
.regex(/^\d{8}$/, "日期必须是 yyyymmdd 格式,如 20250416")
|
|
9
|
-
.describe("yyyymmdd 格式的日期字符串,例如 20250416"),
|
|
10
|
-
endOfDay: z.boolean().optional()
|
|
11
|
-
.describe("是否返回当天结束时间(23:59:59.999)。用于 endTime 时传 true,用于 startTime 时不传或传 false"),
|
|
12
|
-
}),
|
|
13
|
-
};
|
|
14
|
-
export async function handler(args) {
|
|
15
|
-
const { date, endOfDay } = args;
|
|
16
|
-
// 解析 yyyymmdd 格式
|
|
17
|
-
const year = parseInt(date.substring(0, 4), 10);
|
|
18
|
-
const month = parseInt(date.substring(4, 6), 10) - 1; // 月份从 0 开始
|
|
19
|
-
const day = parseInt(date.substring(6, 8), 10);
|
|
20
|
-
// 创建北京时间(UTC+8)的日期对象
|
|
21
|
-
// 使用 Date.UTC 创建 UTC 时间,然后减去 8 小时偏移量来得到北京时间的起始点
|
|
22
|
-
let beijingTimestamp;
|
|
23
|
-
if (endOfDay) {
|
|
24
|
-
// 当天 23:59:59.999 北京时间
|
|
25
|
-
beijingTimestamp = Date.UTC(year, month, day, -8 + 23, 59, 59, 999);
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
// 当天 00:00:00.000 北京时间
|
|
29
|
-
beijingTimestamp = Date.UTC(year, month, day, -8, 0, 0, 0);
|
|
30
|
-
}
|
|
31
|
-
return {
|
|
32
|
-
content: [
|
|
33
|
-
{
|
|
34
|
-
type: "text",
|
|
35
|
-
text: JSON.stringify({
|
|
36
|
-
date: date,
|
|
37
|
-
endOfDay: !!endOfDay,
|
|
38
|
-
timestamp: beijingTimestamp,
|
|
39
|
-
formattedTime: new Date(beijingTimestamp).toISOString(),
|
|
40
|
-
}, null, 2),
|
|
41
|
-
},
|
|
42
|
-
],
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
//# sourceMappingURL=date_to_timestamp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"date_to_timestamp.js","sourceRoot":"","sources":["../../src/tools/date_to_timestamp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAExC,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,WAAW,EAAE,kJAAkJ;IAC/J,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;aACb,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC;aAC1B,KAAK,CAAC,SAAS,EAAE,8BAA8B,CAAC;aAChD,QAAQ,CAAC,+BAA+B,CAAC;QAC5C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;aAC7B,QAAQ,CAAC,sEAAsE,CAAC;KACpF,CAAC;CACH,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAA0C;IACtE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAEhC,iBAAiB;IACjB,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW;IACjE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE/C,qBAAqB;IACrB,gDAAgD;IAChD,IAAI,gBAAwB,CAAC;IAC7B,IAAI,QAAQ,EAAE,CAAC;QACb,uBAAuB;QACvB,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,CAAC,CAAC,QAAQ;oBACpB,SAAS,EAAE,gBAAgB;oBAC3B,aAAa,EAAE,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE;iBACxD,EAAE,IAAI,EAAE,CAAC,CAAC;aACZ;SACF;KACF,CAAC;AACJ,CAAC"}
|