@yjzf/mcp-server-yjzf 0.2.0 → 0.2.1
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new_house_contract_export.d.ts","sourceRoot":"","sources":["../../src/tools/new_house_contract_export.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"new_house_contract_export.d.ts","sourceRoot":"","sources":["../../src/tools/new_house_contract_export.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAuE5B,eAAO,MAAM,IAAI,8BAA8B,CAAC;AAEhD,eAAO,MAAM,MAAM;;;;;;CAalB,CAAC;AAEF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB,kDA4EA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
2
3
|
import * as z from "zod/v4";
|
|
3
4
|
import { buildGatewayHeaders, createErrorResult, createSuccessResult } from "../utils/http.js";
|
|
4
|
-
import {
|
|
5
|
+
import { getDataDir } from "../utils/env.js";
|
|
5
6
|
import { debug } from "../utils/debug.js";
|
|
6
7
|
// ---------------------------------------------------------------------------
|
|
7
8
|
// 常量
|
|
@@ -9,20 +10,6 @@ import { debug } from "../utils/debug.js";
|
|
|
9
10
|
const BRAND_ID = "593347894961426496";
|
|
10
11
|
const CITY_CODE = "450100";
|
|
11
12
|
const ORGAN_ID = "625864877560328320";
|
|
12
|
-
const TARGET_SHEET = "合同明细";
|
|
13
|
-
const TARGET_COLUMNS = [
|
|
14
|
-
"合同编号",
|
|
15
|
-
"楼盘等级",
|
|
16
|
-
"基础应付金额",
|
|
17
|
-
"项目经理",
|
|
18
|
-
"项目部层级2",
|
|
19
|
-
"渠道专员",
|
|
20
|
-
"渠道部层级1",
|
|
21
|
-
"渠道部层级2",
|
|
22
|
-
"授权渠道专员",
|
|
23
|
-
"授权渠道部层级1",
|
|
24
|
-
"授权渠道部层级2",
|
|
25
|
-
];
|
|
26
13
|
// ---------------------------------------------------------------------------
|
|
27
14
|
// 工具函数
|
|
28
15
|
// ---------------------------------------------------------------------------
|
|
@@ -50,52 +37,23 @@ function getDefaultTimeRange() {
|
|
|
50
37
|
endTime: todayEnd.getTime(),
|
|
51
38
|
};
|
|
52
39
|
}
|
|
53
|
-
// 需要保持数值类型的列
|
|
54
|
-
const NUMERIC_COLUMNS = new Set(["基础应付金额"]);
|
|
55
40
|
/**
|
|
56
|
-
*
|
|
57
|
-
* 返回二维数组(含表头),如果目标 sheet 不存在则返回 null。
|
|
41
|
+
* 将 base64 编码的 Excel 数据保存为文件,返回文件绝对路径。
|
|
58
42
|
*/
|
|
59
|
-
function
|
|
43
|
+
function saveBase64ToFile(base64Data, fileName) {
|
|
44
|
+
const dataDir = getDataDir();
|
|
45
|
+
fs.mkdirSync(dataDir, { recursive: true });
|
|
46
|
+
const filePath = path.join(dataDir, fileName);
|
|
60
47
|
const buffer = Buffer.from(base64Data, "base64");
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
const sheet = workbook.Sheets[TARGET_SHEET];
|
|
66
|
-
const jsonData = xlsx.utils.sheet_to_json(sheet, {
|
|
67
|
-
defval: "",
|
|
68
|
-
});
|
|
69
|
-
if (jsonData.length === 0)
|
|
70
|
-
return [TARGET_COLUMNS];
|
|
71
|
-
// 按合同编号去重
|
|
72
|
-
const seen = new Set();
|
|
73
|
-
const uniqueRows = jsonData.filter((row) => {
|
|
74
|
-
const contractNo = String(row["合同编号"] ?? "");
|
|
75
|
-
if (!contractNo || seen.has(contractNo))
|
|
76
|
-
return false;
|
|
77
|
-
seen.add(contractNo);
|
|
78
|
-
return true;
|
|
79
|
-
});
|
|
80
|
-
const headerRow = TARGET_COLUMNS;
|
|
81
|
-
const dataRows = uniqueRows.map((row) => TARGET_COLUMNS.map((col) => {
|
|
82
|
-
const val = row[col];
|
|
83
|
-
if (val == null)
|
|
84
|
-
return "";
|
|
85
|
-
if (NUMERIC_COLUMNS.has(col)) {
|
|
86
|
-
const num = Number(val);
|
|
87
|
-
return isNaN(num) ? String(val) : num;
|
|
88
|
-
}
|
|
89
|
-
return String(val);
|
|
90
|
-
}));
|
|
91
|
-
return [headerRow, ...dataRows];
|
|
48
|
+
fs.writeFileSync(filePath, buffer);
|
|
49
|
+
return filePath;
|
|
92
50
|
}
|
|
93
51
|
// ---------------------------------------------------------------------------
|
|
94
52
|
// 工具导出
|
|
95
53
|
// ---------------------------------------------------------------------------
|
|
96
54
|
export const name = "new_house_contract_export";
|
|
97
55
|
export const schema = {
|
|
98
|
-
description: "从 ERP
|
|
56
|
+
description: "从 ERP 系统导出新房合同数据(认购合同、签约合同、解约合同),生成三个独立的 Excel 文件。不传时间时默认查询当月第一天到今天。",
|
|
99
57
|
inputSchema: z.object({
|
|
100
58
|
startTime: z
|
|
101
59
|
.number()
|
|
@@ -118,10 +76,11 @@ export async function handler(args) {
|
|
|
118
76
|
return createErrorResult("开始时间不能晚于结束时间");
|
|
119
77
|
}
|
|
120
78
|
try {
|
|
121
|
-
//
|
|
79
|
+
// 分别导出认购合同、签约合同和解约合同
|
|
122
80
|
const contractTypes = [
|
|
123
81
|
{ type: "subscription", label: "认购合同" },
|
|
124
82
|
{ type: "signed", label: "签约合同" },
|
|
83
|
+
{ type: "cancelled", label: "解约合同" },
|
|
125
84
|
];
|
|
126
85
|
const results = [];
|
|
127
86
|
for (const ct of contractTypes) {
|
|
@@ -152,20 +111,10 @@ export async function handler(args) {
|
|
|
152
111
|
if (!apiResponse.data?.base64) {
|
|
153
112
|
return createErrorResult(`${ct.label} 返回数据中缺少 base64 字段`);
|
|
154
113
|
}
|
|
155
|
-
//
|
|
156
|
-
const filteredData = filterExcel(apiResponse.data.base64);
|
|
157
|
-
if (filteredData === null) {
|
|
158
|
-
return createErrorResult(`${ct.label} Excel 中未找到 "${TARGET_SHEET}" 工作表`);
|
|
159
|
-
}
|
|
160
|
-
if (filteredData.length <= 1) {
|
|
161
|
-
results.push(`${ct.label}: 无数据`);
|
|
162
|
-
continue;
|
|
163
|
-
}
|
|
164
|
-
// 保存精简 Excel
|
|
114
|
+
// 直接保存原始 Excel 文件
|
|
165
115
|
const fileName = buildFileName(ct.label);
|
|
166
|
-
const
|
|
167
|
-
|
|
168
|
-
results.push(`${ct.label}: ${filteredData.length - 1} 条记录\n文件路径: ${filePath}`);
|
|
116
|
+
const filePath = saveBase64ToFile(apiResponse.data.base64, fileName);
|
|
117
|
+
results.push(`${ct.label}\n文件路径: ${filePath}`);
|
|
169
118
|
}
|
|
170
119
|
return createSuccessResult(`成功导出新房合同数据!\n\n${results.join("\n\n")}`);
|
|
171
120
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new_house_contract_export.js","sourceRoot":"","sources":["../../src/tools/new_house_contract_export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"new_house_contract_export.js","sourceRoot":"","sources":["../../src/tools/new_house_contract_export.ts"],"names":[],"mappings":"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"}
|