grouped object parameters

This commit is contained in:
2025-10-24 15:43:39 +09:00
parent 99bce93c86
commit 84a82c38eb
8 changed files with 334 additions and 131 deletions

View File

@ -181,20 +181,81 @@ export class GeneralService {
}
async getValuesByObjectId(object_id: string): Promise<any[]> {
const generalDatabase = 'nGeneral'
const generalDatabase = 'nGeneral';
const result = await this.dataSource.query(`
SELECT id_object, id_param, CAST(v.value AS varchar(max)) AS value,
date_s,
date_po,
id_user
FROM ${generalDatabase}..tValues v
JOIN ${generalDatabase}..tParameters p ON v.id_param = p.id
const parameters = await this.dataSource.query(`
SELECT
pt.id_param,
p.name AS name,
p.id_group,
p.format,
p.vtable,
p.unit,
p.exact_format
FROM ${generalDatabase}..ParametersType pt
JOIN ${generalDatabase}..tParameters p
ON pt.id_param = p.id
WHERE pt.id_type = (
SELECT TOP 1 CAST(value AS int)
FROM ${generalDatabase}..tValues
WHERE id_object = '${object_id}'
`)
return result
AND id_param = 3
ORDER BY date_s DESC
)
ORDER BY pt.id_order;
`);
const values = await this.dataSource.query(`
SELECT
v.id_param,
CAST(v.value AS varchar(max)) AS value,
v.date_s,
v.date_po,
v.id_user
FROM ${generalDatabase}..tValues v
WHERE v.id_object = '${object_id}';
`);
const valuesByParam = values.reduce((acc, v) => {
if (!acc[v.id_param]) acc[v.id_param] = [];
acc[v.id_param].push({
value: v.value,
date_s: v.date_s,
date_po: v.date_po,
id_user: v.id_user
});
return acc;
}, {} as Record<number, any[]>);
const grouped = parameters
.filter(p => p.id_group == null)
.map(parent => ({
id_param: parent.id_param,
name: parent.name,
format: parent.format,
vtable: parent.vtable,
unit: parent.unit,
exact_format: parent.exact_format,
values: valuesByParam[parent.id_param] || [],
parameters: parameters
.filter(child => child.id_group === parent.id_param)
.map(child => ({
id_param: child.id_param,
name: child.name,
id_group: child.id_group,
format: child.format,
vtable: child.vtable,
unit: child.unit,
exact_format: child.exact_format,
values: valuesByParam[child.id_param] || []
}))
}));
return grouped;
}
async getParamsById(param_id: number): Promise<any[]> {
const generalDatabase = 'nGeneral'