mcp-xdx-schema-ctx 1.1.9
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/.env.example +43 -0
- package/README.md +269 -0
- package/dist/config.d.ts +131 -0
- package/dist/config.js +138 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto-utils.d.ts +29 -0
- package/dist/crypto-utils.js +118 -0
- package/dist/crypto-utils.js.map +1 -0
- package/dist/db.d.ts +10 -0
- package/dist/db.js +149 -0
- package/dist/db.js.map +1 -0
- package/dist/diff-utils.d.ts +42 -0
- package/dist/diff-utils.js +130 -0
- package/dist/diff-utils.js.map +1 -0
- package/dist/encrypt-secrets.d.ts +12 -0
- package/dist/encrypt-secrets.js +190 -0
- package/dist/encrypt-secrets.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/migrate-utils.d.ts +91 -0
- package/dist/migrate-utils.js +399 -0
- package/dist/migrate-utils.js.map +1 -0
- package/dist/schema-compat.d.ts +46 -0
- package/dist/schema-compat.js +169 -0
- package/dist/schema-compat.js.map +1 -0
- package/dist/shared.d.ts +70 -0
- package/dist/shared.js +197 -0
- package/dist/shared.js.map +1 -0
- package/dist/sql-build.d.ts +121 -0
- package/dist/sql-build.js +254 -0
- package/dist/sql-build.js.map +1 -0
- package/dist/tool-availability.d.ts +35 -0
- package/dist/tool-availability.js +90 -0
- package/dist/tool-availability.js.map +1 -0
- package/dist/tools/data-tools.d.ts +2 -0
- package/dist/tools/data-tools.js +243 -0
- package/dist/tools/data-tools.js.map +1 -0
- package/dist/tools/dataflow-tools.d.ts +2 -0
- package/dist/tools/dataflow-tools.js +434 -0
- package/dist/tools/dataflow-tools.js.map +1 -0
- package/dist/tools/dbo-tools.d.ts +2 -0
- package/dist/tools/dbo-tools.js +228 -0
- package/dist/tools/dbo-tools.js.map +1 -0
- package/dist/tools/diff-tools.d.ts +2 -0
- package/dist/tools/diff-tools.js +224 -0
- package/dist/tools/diff-tools.js.map +1 -0
- package/dist/tools/form-tools.d.ts +2 -0
- package/dist/tools/form-tools.js +715 -0
- package/dist/tools/form-tools.js.map +1 -0
- package/dist/tools/migrate-tools.d.ts +2 -0
- package/dist/tools/migrate-tools.js +423 -0
- package/dist/tools/migrate-tools.js.map +1 -0
- package/dist/tools/system-tools.d.ts +2 -0
- package/dist/tools/system-tools.js +1102 -0
- package/dist/tools/system-tools.js.map +1 -0
- package/dist/tools/table-tools.d.ts +2 -0
- package/dist/tools/table-tools.js +1322 -0
- package/dist/tools/table-tools.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { T, WARNING, envelope, ok, sqlPagination } from "../shared.js";
|
|
3
|
+
import { getTableInfo, hasCol, resolveSelect, tableExists, tryQuery, } from "../schema-compat.js";
|
|
4
|
+
import { buildWhere, buildOrderBy, buildPagedQuery } from "../sql-build.js";
|
|
5
|
+
/** 子模块不可用时返回统一结构 */
|
|
6
|
+
function unavailable(module, tableRef, warnings) {
|
|
7
|
+
const reason = `环境库缺少 ${tableRef}`;
|
|
8
|
+
warnings.push({
|
|
9
|
+
module,
|
|
10
|
+
message: reason,
|
|
11
|
+
hint: "可用 get_capabilities 查看本环境支持的元数据表",
|
|
12
|
+
fallback: "get_capabilities",
|
|
13
|
+
});
|
|
14
|
+
return { module, available: false, reason };
|
|
15
|
+
}
|
|
16
|
+
export function registerDboTools(server) {
|
|
17
|
+
// ============================================================
|
|
18
|
+
// get_dbo_detail
|
|
19
|
+
// ============================================================
|
|
20
|
+
server.registerTool("get_dbo_detail", {
|
|
21
|
+
description: WARNING +
|
|
22
|
+
"\n\n获取数据库对象(DBO)完整定义,串联: DBO定义→字段→操作方案→操作字段→操作参数。用于理解后端数据操作逻辑。\n" +
|
|
23
|
+
"每个子模块独立探测依赖表:缺失时返回 { module, available:false, reason },不会因某张子表缺失导致整体失败。",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
dboName: z.string().max(128).optional().describe("DBO名称"),
|
|
26
|
+
keyword: z.string().max(200).optional().describe("模糊搜索DBO名称/描述"),
|
|
27
|
+
modular: z.string().max(50).optional().describe("模块过滤"),
|
|
28
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
29
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
30
|
+
},
|
|
31
|
+
}, async ({ dboName, keyword, modular, page = 1, pageSize = 50 }) => {
|
|
32
|
+
const warnings = [];
|
|
33
|
+
if (!(await tableExists(T("dboSet")))) {
|
|
34
|
+
return ok(envelope({
|
|
35
|
+
items: [],
|
|
36
|
+
pagination: sqlPagination(page, pageSize, 0),
|
|
37
|
+
warnings: [
|
|
38
|
+
{
|
|
39
|
+
module: "get_dbo_detail",
|
|
40
|
+
message: `环境库缺少 ${T("dboSet")}`,
|
|
41
|
+
hint: "可用 get_capabilities 查看本环境支持的元数据表",
|
|
42
|
+
fallback: "get_capabilities",
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
const info = await getTableInfo(T("dboSet"));
|
|
48
|
+
const rs = await resolveSelect(T("dboSet"), [
|
|
49
|
+
"XDID",
|
|
50
|
+
"AutoID",
|
|
51
|
+
"DBOName",
|
|
52
|
+
"DBODesc",
|
|
53
|
+
"DBOType",
|
|
54
|
+
"Modular1",
|
|
55
|
+
"Modular2",
|
|
56
|
+
"Remark",
|
|
57
|
+
]);
|
|
58
|
+
if (rs.missing.length > 0) {
|
|
59
|
+
warnings.push({
|
|
60
|
+
module: "get_dbo_detail",
|
|
61
|
+
message: `以下列在本环境库不存在,已置空: ${rs.missing.join(", ")}`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
const groups = [];
|
|
65
|
+
if (dboName)
|
|
66
|
+
groups.push({ filters: [{ col: "DBOName", op: "eq", value: dboName }] });
|
|
67
|
+
if (keyword) {
|
|
68
|
+
const filters = ["DBOName", "DBODesc"]
|
|
69
|
+
.filter((c) => hasCol(info.columns, c))
|
|
70
|
+
.map((c) => ({ col: c, op: "like", value: keyword }));
|
|
71
|
+
if (filters.length > 0)
|
|
72
|
+
groups.push({ logic: "or", filters });
|
|
73
|
+
}
|
|
74
|
+
if (modular)
|
|
75
|
+
groups.push({ filters: [{ col: "Modular1", op: "eq", value: modular }] });
|
|
76
|
+
const { where, skipped } = buildWhere(info.columns, groups);
|
|
77
|
+
if (skipped.length > 0) {
|
|
78
|
+
warnings.push({
|
|
79
|
+
module: "get_dbo_detail",
|
|
80
|
+
message: `以下列在本环境库不存在,条件已跳过: ${skipped.join(", ")}`,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const order = buildOrderBy(info.columns, ["DBOName"]);
|
|
84
|
+
const q = buildPagedQuery({
|
|
85
|
+
table: T("dboSet"),
|
|
86
|
+
cols: rs.present.length > 0
|
|
87
|
+
? rs.present.map((c) => `[${c}]`)
|
|
88
|
+
: ["[DBOName]"],
|
|
89
|
+
where,
|
|
90
|
+
orderBy: order.orderBy,
|
|
91
|
+
page,
|
|
92
|
+
pageSize,
|
|
93
|
+
});
|
|
94
|
+
const cnt = await tryQuery("get_dbo_detail.count", q.countSql, warnings);
|
|
95
|
+
const total = Number(cnt[0]?.Total ?? 0);
|
|
96
|
+
const dbos = total > 0
|
|
97
|
+
? (await tryQuery("get_dbo_detail", q.sql, warnings))
|
|
98
|
+
: [];
|
|
99
|
+
const result = [];
|
|
100
|
+
for (const d of dbos) {
|
|
101
|
+
const name = String(d.DBOName ?? "").replace(/'/g, "''");
|
|
102
|
+
const dboKey = String(d.XDID ?? d.AutoID ?? "").replace(/'/g, "''");
|
|
103
|
+
// --- 字段 ---
|
|
104
|
+
let fields;
|
|
105
|
+
if (await tableExists(T("dboSetField"))) {
|
|
106
|
+
const frs = await resolveSelect(T("dboSetField"), [
|
|
107
|
+
"DBOName",
|
|
108
|
+
"FieldName",
|
|
109
|
+
"FieldType",
|
|
110
|
+
"FieldSize",
|
|
111
|
+
"IPrecision",
|
|
112
|
+
"IScale",
|
|
113
|
+
"bAllowNull",
|
|
114
|
+
"iLineNo",
|
|
115
|
+
]);
|
|
116
|
+
fields = {
|
|
117
|
+
module: "fields",
|
|
118
|
+
available: true,
|
|
119
|
+
items: await tryQuery("get_dbo_detail.fields", `SELECT ${frs.select} FROM ${T("dboSetField")} WHERE [DBOName]='${name}'`, warnings),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
fields = unavailable("fields", T("dboSetField"), warnings);
|
|
124
|
+
}
|
|
125
|
+
// --- 操作方案 ---
|
|
126
|
+
let operations = [];
|
|
127
|
+
let operationsModule;
|
|
128
|
+
if (await tableExists(T("dboPrSetHed"))) {
|
|
129
|
+
if (!hasCol(info.columns, "XDID")) {
|
|
130
|
+
operationsModule = {
|
|
131
|
+
module: "operations",
|
|
132
|
+
available: false,
|
|
133
|
+
reason: "DBOSetTB 缺少 XDID,无法关联 DBOPrSetHedTB.PRXDID",
|
|
134
|
+
};
|
|
135
|
+
warnings.push({
|
|
136
|
+
module: "get_dbo_detail.operations",
|
|
137
|
+
message: "DBOSetTB 缺少 XDID,无法关联操作方案",
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
const ors = await resolveSelect(T("dboPrSetHed"), [
|
|
142
|
+
"XDID",
|
|
143
|
+
"Name",
|
|
144
|
+
"BindTableName",
|
|
145
|
+
"SchemeDesc",
|
|
146
|
+
"PRXDID",
|
|
147
|
+
]);
|
|
148
|
+
operations = (await tryQuery("get_dbo_detail.operations", `SELECT ${ors.select} FROM ${T("dboPrSetHed")} WHERE [PRXDID]='${dboKey}'`, warnings));
|
|
149
|
+
operationsModule = {
|
|
150
|
+
module: "operations",
|
|
151
|
+
available: true,
|
|
152
|
+
items: [],
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
operationsModule = unavailable("operations", T("dboPrSetHed"), warnings);
|
|
158
|
+
}
|
|
159
|
+
const opIds = operations
|
|
160
|
+
.map((o) => `'${String(o.XDID).replace(/'/g, "''")}'`)
|
|
161
|
+
.filter((s) => s !== "'undefined'");
|
|
162
|
+
let params = { module: "params", available: true, items: [] };
|
|
163
|
+
if (opIds.length > 0) {
|
|
164
|
+
if (await tableExists(T("dboPrSetParam"))) {
|
|
165
|
+
const prs = await resolveSelect(T("dboPrSetParam"), [
|
|
166
|
+
"PXDID",
|
|
167
|
+
"ParamName",
|
|
168
|
+
"DataType",
|
|
169
|
+
"Mode",
|
|
170
|
+
"Ordinal",
|
|
171
|
+
"ParamData",
|
|
172
|
+
]);
|
|
173
|
+
params = {
|
|
174
|
+
module: "params",
|
|
175
|
+
available: true,
|
|
176
|
+
items: await tryQuery("get_dbo_detail.params", `SELECT ${prs.select} FROM ${T("dboPrSetParam")} WHERE [PXDID] IN (${opIds.join(",")})`, warnings),
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
params = unavailable("params", T("dboPrSetParam"), warnings);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
let fieldMappings = {
|
|
184
|
+
module: "fieldMappings",
|
|
185
|
+
available: true,
|
|
186
|
+
items: [],
|
|
187
|
+
};
|
|
188
|
+
if (opIds.length > 0) {
|
|
189
|
+
if (await tableExists(T("dboPrSetField"))) {
|
|
190
|
+
const mrs = await resolveSelect(T("dboPrSetField"), [
|
|
191
|
+
"PXDID",
|
|
192
|
+
"TableIndex",
|
|
193
|
+
"TableName",
|
|
194
|
+
"ColumnName",
|
|
195
|
+
"DBType",
|
|
196
|
+
"Type",
|
|
197
|
+
"iLineNo",
|
|
198
|
+
]);
|
|
199
|
+
fieldMappings = {
|
|
200
|
+
module: "fieldMappings",
|
|
201
|
+
available: true,
|
|
202
|
+
items: await tryQuery("get_dbo_detail.fieldMappings", `SELECT ${mrs.select} FROM ${T("dboPrSetField")} WHERE [PXDID] IN (${opIds.join(",")})`, warnings),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
fieldMappings = unavailable("fieldMappings", T("dboPrSetField"), warnings);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
result.push({
|
|
210
|
+
dbo: {
|
|
211
|
+
DBOName: d.DBOName,
|
|
212
|
+
DBODesc: d.DBODesc,
|
|
213
|
+
DBOType: d.DBOType,
|
|
214
|
+
},
|
|
215
|
+
fields,
|
|
216
|
+
operations: operationsModule,
|
|
217
|
+
params,
|
|
218
|
+
fieldMappings,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
return ok(envelope({
|
|
222
|
+
items: result,
|
|
223
|
+
pagination: sqlPagination(page, pageSize, total),
|
|
224
|
+
warnings,
|
|
225
|
+
}));
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=dbo-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dbo-tools.js","sourceRoot":"","sources":["../../src/tools/dbo-tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { query, table } from "../db.js";
|
|
3
|
+
import { isSystemBConfigured } from "../config.js";
|
|
4
|
+
import { T, T2, userName, userName2, WARNING, escapeSql, safeJson, paginate } from "../shared.js";
|
|
5
|
+
import { diffTable } from "../diff-utils.js";
|
|
6
|
+
function ensureSystemB() {
|
|
7
|
+
if (!isSystemBConfigured()) {
|
|
8
|
+
throw new Error("系统 B 未配置。请在 .env 中设置 DB_B_SERVER、DB_B_USER、DB_B_PASSWORD、DB_B_DATABASE 等参数。");
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/** 简化的单键 diff 辅助 */
|
|
12
|
+
async function simpleDiff(tableKey, bkField, cmpFields, keyword, page, pageSize) {
|
|
13
|
+
if (keyword) {
|
|
14
|
+
const k = escapeSql(keyword);
|
|
15
|
+
return diffTable(tableKey, [bkField], cmpFields, `SELECT * FROM ${T(tableKey)} WHERE ${bkField} LIKE N'%${k}%'`, `SELECT * FROM ${T2(tableKey)} WHERE ${bkField} LIKE N'%${k}%'`, page, pageSize);
|
|
16
|
+
}
|
|
17
|
+
return diffTable(tableKey, [bkField], cmpFields, undefined, undefined, page, pageSize);
|
|
18
|
+
}
|
|
19
|
+
export function registerDiffTools(server) {
|
|
20
|
+
// ==========================================
|
|
21
|
+
// diff_tables
|
|
22
|
+
// ==========================================
|
|
23
|
+
server.registerTool("diff_tables", {
|
|
24
|
+
description: WARNING + "\n\n比对两套 XDX 系统的表定义(TableSetTB)和字段定义(TableFieldSetTB)差异。" +
|
|
25
|
+
"按 TableName 匹配,返回新增/删除/修改的详细对比。",
|
|
26
|
+
inputSchema: {
|
|
27
|
+
keyword: z.string().max(200).optional().describe("按表名或描述关键词过滤"),
|
|
28
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
29
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
30
|
+
},
|
|
31
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
32
|
+
ensureSystemB();
|
|
33
|
+
const tableDiff = await diffTable("tableDef", ["TableName"], ["TableDesc", "ModuleID", "TableKind", "IsVirtual", "IsSystem"], keyword ? `SELECT * FROM ${T("tableDef")} WHERE TableName LIKE N'%${escapeSql(keyword)}%' OR TableDesc LIKE N'%${escapeSql(keyword)}%'` : undefined, keyword ? `SELECT * FROM ${T2("tableDef")} WHERE TableName LIKE N'%${escapeSql(keyword)}%' OR TableDesc LIKE N'%${escapeSql(keyword)}%'` : undefined);
|
|
34
|
+
const { page: pagedDetails, pagination: tablePagination } = paginate(tableDiff.details, page, pageSize);
|
|
35
|
+
const fds = [];
|
|
36
|
+
for (const d of tableDiff.details) {
|
|
37
|
+
if (d.status !== "modified")
|
|
38
|
+
continue;
|
|
39
|
+
const tn = escapeSql(d.businessKey);
|
|
40
|
+
const fd = await diffTable("fieldDef", ["TableName", "FieldName"], ["FieldDesc", "FieldType", "FieldLen", "FieldDecimal", "IsNull", "IsPrimaryKey", "DefaultValue"], `SELECT f.* FROM ${T("fieldDef")} f INNER JOIN ${T("tableDef")} t ON f.TableName=t.TableName WHERE f.TableName=N'${tn}'`, `SELECT f.* FROM ${T2("fieldDef")} f INNER JOIN ${T2("tableDef")} t ON f.TableName=t.TableName WHERE f.TableName=N'${tn}'`);
|
|
41
|
+
if (fd.details.length > 0)
|
|
42
|
+
fds.push(...fd.details);
|
|
43
|
+
}
|
|
44
|
+
const { page: pagedFields, pagination: fieldPagination } = paginate(fds, page, pageSize);
|
|
45
|
+
return { content: [{ type: "text", text: safeJson({
|
|
46
|
+
tables: tableDiff.summary,
|
|
47
|
+
_pagination: tablePagination,
|
|
48
|
+
tableDetails: pagedDetails,
|
|
49
|
+
fieldDetails: pagedFields.length > 0 ? pagedFields : undefined,
|
|
50
|
+
_fieldPagination: fieldPagination,
|
|
51
|
+
fieldDiffCount: fds.length,
|
|
52
|
+
}) }] };
|
|
53
|
+
});
|
|
54
|
+
// ==========================================
|
|
55
|
+
// diff_forms
|
|
56
|
+
// ==========================================
|
|
57
|
+
server.registerTool("diff_forms", {
|
|
58
|
+
description: WARNING + "\n\n比对两套系统的窗体定义(FormSetTB)及核心子表差异。" +
|
|
59
|
+
"按 FormName 匹配,含 FormRuleSetHedTB/DetTB/ButtonTB 的子表差异。",
|
|
60
|
+
inputSchema: {
|
|
61
|
+
keyword: z.string().max(200).optional().describe("按窗体名关键词过滤"),
|
|
62
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
63
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
64
|
+
},
|
|
65
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
66
|
+
ensureSystemB();
|
|
67
|
+
const formDiff = await simpleDiff("formDef", "FormName", ["FormDesc", "LinkTable", "FormType", "ModuleID"], keyword, page, pageSize);
|
|
68
|
+
// 对 modified 的窗体,比对 FormRule 子表
|
|
69
|
+
const subDiffs = [];
|
|
70
|
+
for (const d of formDiff.details) {
|
|
71
|
+
if (d.status !== "modified")
|
|
72
|
+
continue;
|
|
73
|
+
const fn = escapeSql(d.businessKey);
|
|
74
|
+
const rh = await diffTable("formRuleHed", ["FormID", "RuleName"], ["RuleType", "IsEnable"], `SELECT h.* FROM ${T("formRuleHed")} h INNER JOIN ${T("formDef")} f ON h.FormID=f.FormID WHERE f.FormName=N'${fn}'`, `SELECT h.* FROM ${T2("formRuleHed")} h INNER JOIN ${T2("formDef")} f ON h.FormID=f.FormID WHERE f.FormName=N'${fn}'`);
|
|
75
|
+
if (rh.details.length > 0)
|
|
76
|
+
subDiffs.push({ form: fn, subTable: "FormRuleSetHedTB", ...rh.summary, details: rh.details.slice(0, 20) });
|
|
77
|
+
}
|
|
78
|
+
const { page: pagedRules, pagination: rulePagination } = paginate(subDiffs, page, pageSize);
|
|
79
|
+
return { content: [{ type: "text", text: safeJson({
|
|
80
|
+
forms: formDiff.summary,
|
|
81
|
+
_pagination: formDiff.pagination,
|
|
82
|
+
formDetails: formDiff.page,
|
|
83
|
+
ruleDiffs: pagedRules,
|
|
84
|
+
_rulePagination: rulePagination,
|
|
85
|
+
ruleDiffsCount: subDiffs.length,
|
|
86
|
+
}) }] };
|
|
87
|
+
});
|
|
88
|
+
// ==========================================
|
|
89
|
+
// diff_dbos
|
|
90
|
+
// ==========================================
|
|
91
|
+
server.registerTool("diff_dbos", {
|
|
92
|
+
description: WARNING + "\n\n比对两套系统的 DBO 定义(DBOSetTB)差异,按 DBOName 匹配。",
|
|
93
|
+
inputSchema: {
|
|
94
|
+
keyword: z.string().max(200).optional().describe("按 DBO 名称关键词过滤"),
|
|
95
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
96
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
97
|
+
},
|
|
98
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
99
|
+
ensureSystemB();
|
|
100
|
+
const dboDiff = await simpleDiff("dboSet", "DBOName", ["DBODesc", "LinkTable", "DBOType", "ModuleID"], keyword, page, pageSize);
|
|
101
|
+
return { content: [{ type: "text", text: safeJson({
|
|
102
|
+
dbos: dboDiff.summary,
|
|
103
|
+
_pagination: dboDiff.pagination,
|
|
104
|
+
details: dboDiff.page,
|
|
105
|
+
}) }] };
|
|
106
|
+
});
|
|
107
|
+
// ==========================================
|
|
108
|
+
// diff_dataflows
|
|
109
|
+
// ==========================================
|
|
110
|
+
server.registerTool("diff_dataflows", {
|
|
111
|
+
description: WARNING + "\n\n比对两套系统的数据流定义(DataFlowHedTB)差异,按 DataFlowName 匹配。",
|
|
112
|
+
inputSchema: {
|
|
113
|
+
keyword: z.string().max(200).optional().describe("按数据流名称关键词过滤"),
|
|
114
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
115
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
116
|
+
},
|
|
117
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
118
|
+
ensureSystemB();
|
|
119
|
+
const dfDiff = await simpleDiff("dataFlowHed", "DataFlowName", ["DataFlowDesc", "ModuleID"], keyword, page, pageSize);
|
|
120
|
+
return { content: [{ type: "text", text: safeJson({
|
|
121
|
+
dataflows: dfDiff.summary,
|
|
122
|
+
_pagination: dfDiff.pagination,
|
|
123
|
+
details: dfDiff.page,
|
|
124
|
+
}) }] };
|
|
125
|
+
});
|
|
126
|
+
// ==========================================
|
|
127
|
+
// diff_functions
|
|
128
|
+
// ==========================================
|
|
129
|
+
server.registerTool("diff_functions", {
|
|
130
|
+
description: WARNING + "\n\n比对两套系统的功能菜单(FunctionTB)差异,按 FunctionName 匹配。",
|
|
131
|
+
inputSchema: {
|
|
132
|
+
keyword: z.string().max(200).optional().describe("按功能名称关键词过滤"),
|
|
133
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
134
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
135
|
+
},
|
|
136
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
137
|
+
ensureSystemB();
|
|
138
|
+
const fnDiff = await simpleDiff("function", "FunctionName", ["FunctionDesc", "FunctionKind", "ModuleID", "FormID", "IsEnable"], keyword, page, pageSize);
|
|
139
|
+
return { content: [{ type: "text", text: safeJson({
|
|
140
|
+
functions: fnDiff.summary,
|
|
141
|
+
_pagination: fnDiff.pagination,
|
|
142
|
+
details: fnDiff.page,
|
|
143
|
+
}) }] };
|
|
144
|
+
});
|
|
145
|
+
// ==========================================
|
|
146
|
+
// diff_sys_dict
|
|
147
|
+
// ==========================================
|
|
148
|
+
server.registerTool("diff_sys_dict", {
|
|
149
|
+
description: WARNING + "\n\n比对两套系统用户库的系统字典(SysDbType/SyDbValue)差异。",
|
|
150
|
+
inputSchema: {
|
|
151
|
+
keyword: z.string().max(200).optional().describe("按字典类型或值关键词过滤"),
|
|
152
|
+
page: z.number().int().min(1).default(1).describe("页码"),
|
|
153
|
+
pageSize: z.number().int().min(1).max(200).default(50).describe("每页数量"),
|
|
154
|
+
},
|
|
155
|
+
}, async ({ keyword, page, pageSize }) => {
|
|
156
|
+
ensureSystemB();
|
|
157
|
+
// 用户库表不在 tableNames 中,直接用 table() 构造
|
|
158
|
+
const sqlTypesA = keyword
|
|
159
|
+
? `SELECT * FROM ${table(userName, "SysDbType")} WHERE DbType LIKE N'%${escapeSql(keyword)}%'`
|
|
160
|
+
: `SELECT * FROM ${table(userName, "SysDbType")}`;
|
|
161
|
+
const sqlTypesB = keyword
|
|
162
|
+
? `SELECT * FROM ${table(userName2, "SysDbType")} WHERE DbType LIKE N'%${escapeSql(keyword)}%'`
|
|
163
|
+
: `SELECT * FROM ${table(userName2, "SysDbType")}`;
|
|
164
|
+
const rowsA = await query(sqlTypesA, "default");
|
|
165
|
+
const rowsB = await query(sqlTypesB, "b");
|
|
166
|
+
const mapB = new Map(rowsB.map(r => [String(r.DbType ?? ""), r]));
|
|
167
|
+
const aSet = new Set(rowsA.map(r => String(r.DbType ?? "")));
|
|
168
|
+
const details = [];
|
|
169
|
+
for (const ra of rowsA) {
|
|
170
|
+
const k = String(ra.DbType ?? "");
|
|
171
|
+
const rb = mapB.get(k);
|
|
172
|
+
if (!rb)
|
|
173
|
+
details.push({ businessKey: k, status: "removed", sourceRow: ra });
|
|
174
|
+
else {
|
|
175
|
+
// compare DbDesc
|
|
176
|
+
if (String(ra.DbDesc ?? "") !== String(rb.DbDesc ?? "")) {
|
|
177
|
+
details.push({ businessKey: k, status: "modified", diffFields: [
|
|
178
|
+
{ field: "DbDesc", valueA: ra.DbDesc, valueB: rb.DbDesc }
|
|
179
|
+
] });
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
for (const rb of rowsB) {
|
|
184
|
+
if (!aSet.has(String(rb.DbType ?? ""))) {
|
|
185
|
+
details.push({ businessKey: String(rb.DbType ?? ""), status: "added", targetRow: rb });
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
const ident = rowsA.length - details.filter(d => d.status === "removed" || d.status === "modified").length;
|
|
189
|
+
const { page: pagedDetails, pagination: dictPagination } = paginate(details, page, pageSize);
|
|
190
|
+
return { content: [{ type: "text", text: safeJson({
|
|
191
|
+
summary: { totalCompared: rowsA.length + rowsB.length - ident, identical: ident,
|
|
192
|
+
addedInB: details.filter(d => d.status === "added").length,
|
|
193
|
+
removedInB: details.filter(d => d.status === "removed").length,
|
|
194
|
+
modified: details.filter(d => d.status === "modified").length },
|
|
195
|
+
_pagination: dictPagination,
|
|
196
|
+
details: pagedDetails,
|
|
197
|
+
}) }] };
|
|
198
|
+
});
|
|
199
|
+
// ==========================================
|
|
200
|
+
// diff_all
|
|
201
|
+
// ==========================================
|
|
202
|
+
server.registerTool("diff_all", {
|
|
203
|
+
description: WARNING + "\n\n运行全部比对,返回各模块的差异摘要汇总。",
|
|
204
|
+
inputSchema: {},
|
|
205
|
+
}, async () => {
|
|
206
|
+
ensureSystemB();
|
|
207
|
+
// 并行运行 6 个主比对(不含子表深度展开,仅主表级)
|
|
208
|
+
const [tables, forms, dbos, dataflows, functions] = await Promise.all([
|
|
209
|
+
simpleDiff("tableDef", "TableName", ["TableDesc", "ModuleID", "TableKind"]),
|
|
210
|
+
simpleDiff("formDef", "FormName", ["FormDesc", "LinkTable", "FormType"]),
|
|
211
|
+
simpleDiff("dboSet", "DBOName", ["DBODesc", "LinkTable", "DBOType"]),
|
|
212
|
+
simpleDiff("dataFlowHed", "DataFlowName", ["DataFlowDesc"]),
|
|
213
|
+
simpleDiff("function", "FunctionName", ["FunctionDesc", "FunctionKind"]),
|
|
214
|
+
]);
|
|
215
|
+
return { content: [{ type: "text", text: safeJson({
|
|
216
|
+
tables: tables.summary,
|
|
217
|
+
forms: forms.summary,
|
|
218
|
+
dbos: dbos.summary,
|
|
219
|
+
dataflows: dataflows.summary,
|
|
220
|
+
functions: functions.summary,
|
|
221
|
+
}) }] };
|
|
222
|
+
});
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=diff-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff-tools.js","sourceRoot":"","sources":["../../src/tools/diff-tools.ts"],"names":[],"mappings":"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"}
|