v1.0.0
This commit is contained in:
BIN
scripts/entrances.xlsx
Normal file
BIN
scripts/entrances.xlsx
Normal file
Binary file not shown.
123
scripts/generatorExcel.js
Normal file
123
scripts/generatorExcel.js
Normal file
@@ -0,0 +1,123 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
const ExcelJS = require('exceljs');
|
||||
|
||||
async function exportData() {
|
||||
const db = new sqlite3.Database('database.sqlite');
|
||||
const workbook = new ExcelJS.Workbook();
|
||||
|
||||
// выгрузка подъездов
|
||||
await new Promise((resolve, reject) => {
|
||||
db.all(`
|
||||
SELECT
|
||||
e.id as entrance_id,
|
||||
e.entrance_number as entrance_title,
|
||||
h.number as house_number,
|
||||
h.title as house_title
|
||||
FROM entrance e
|
||||
JOIN house h ON e.house_id = h.id
|
||||
`, async (err, entrances) => {
|
||||
if (err) return reject(err);
|
||||
|
||||
for (const entrance of entrances) {
|
||||
let title = String(entrance.house_title)
|
||||
.replace('вул. ', '')
|
||||
.replace('Проспект ', '');
|
||||
|
||||
const sheet = workbook.addWorksheet(
|
||||
`${title} ${entrance.house_number} ( П. ${entrance.entrance_title + 1} )`
|
||||
);
|
||||
|
||||
sheet.columns = [
|
||||
{ header: 'ID', key: 'id', width: 10 },
|
||||
{ header: 'Вістник / Група', key: 'name', width: 30 },
|
||||
{ header: 'Початок', key: 'start', width: 20 },
|
||||
{ header: 'Кінець', key: 'end', width: 20 }
|
||||
];
|
||||
sheet.getColumn('start').numFmt = 'dd.mm.yyyy';
|
||||
sheet.getColumn('end').numFmt = 'dd.mm.yyyy';
|
||||
|
||||
await new Promise((resolve2, reject2) => {
|
||||
db.all(`
|
||||
SELECT id, name, date_start, date_end, group_id
|
||||
FROM entrance_history
|
||||
WHERE entrance_id = ?
|
||||
`, [entrance.entrance_id], (err, rows) => {
|
||||
if (err) return reject2(err);
|
||||
|
||||
rows.forEach(row => {
|
||||
const startDate = row.date_start ? new Date(row.date_start) : null;
|
||||
const endDate = row.date_end ? new Date(row.date_end) : null;
|
||||
|
||||
let name = row.name;
|
||||
if (row.name === 'Групова') {
|
||||
name = `${row.name} (${row.group_id})`;
|
||||
}
|
||||
|
||||
sheet.addRow({ id: row.id, name, start: startDate, end: endDate });
|
||||
});
|
||||
resolve2();
|
||||
});
|
||||
});
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
// выгрузка участков
|
||||
await new Promise((resolve, reject) => {
|
||||
db.all(`
|
||||
SELECT
|
||||
homestead.id as homestead_id,
|
||||
homestead.number as homestead_number,
|
||||
homestead.title as homestead_title
|
||||
FROM homestead
|
||||
`, async (err, homesteads) => {
|
||||
if (err) return reject(err);
|
||||
|
||||
for (const homestead of homesteads) {
|
||||
const sheet = workbook.addWorksheet(`${homestead.homestead_title} ${homestead.homestead_number}`);
|
||||
|
||||
sheet.columns = [
|
||||
{ header: 'ID', key: 'id', width: 10 },
|
||||
{ header: 'Вістник / Група', key: 'name', width: 30 },
|
||||
{ header: 'Початок', key: 'start', width: 20 },
|
||||
{ header: 'Кінець', key: 'end', width: 20 }
|
||||
];
|
||||
sheet.getColumn('start').numFmt = 'dd.mm.yyyy';
|
||||
sheet.getColumn('end').numFmt = 'dd.mm.yyyy';
|
||||
|
||||
await new Promise((resolve2, reject2) => {
|
||||
db.all(`
|
||||
SELECT id, name, date_start, date_end, group_id
|
||||
FROM homestead_history
|
||||
WHERE homestead_id = ?
|
||||
`, [homestead.homestead_id], (err, rows) => {
|
||||
if (err) return reject2(err);
|
||||
|
||||
rows.forEach(row => {
|
||||
const startDate = row.date_start ? new Date(row.date_start) : null;
|
||||
const endDate = row.date_end ? new Date(row.date_end) : null;
|
||||
|
||||
let name = row.name;
|
||||
if (row.name === 'Групова') {
|
||||
name = `${row.name} (${row.group_id})`;
|
||||
}
|
||||
|
||||
sheet.addRow({ id: row.id, name, start: startDate, end: endDate });
|
||||
});
|
||||
resolve2();
|
||||
});
|
||||
});
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
|
||||
// сохраняем один раз
|
||||
await workbook.xlsx.writeFile('Території.xlsx');
|
||||
console.log('Файл создан: entrances.xlsx');
|
||||
|
||||
db.close();
|
||||
}
|
||||
|
||||
exportData();
|
||||
@@ -1,7 +1,7 @@
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
|
||||
const db = new sqlite3.Database('database.sqlite');
|
||||
const db_old = new sqlite3.Database('old_db.sqlite');
|
||||
const db_old = new sqlite3.Database('db_old.sqlite');
|
||||
|
||||
|
||||
// Створення підїздів
|
||||
@@ -57,7 +57,7 @@ const db_old = new sqlite3.Database('old_db.sqlite');
|
||||
|
||||
|
||||
// Міграція історії з старої БД в нову
|
||||
// const sql_1 = `SELECT * FROM history ORDER BY date_start`;
|
||||
// const sql_1 = `SELECT * FROM history WHERE date_start >= 1737667735000 ORDER BY date_start`;
|
||||
// db_old.all(sql_1, [], (err, historys) => {
|
||||
// if (err) {
|
||||
// throw err;
|
||||
@@ -98,7 +98,7 @@ const db_old = new sqlite3.Database('old_db.sqlite');
|
||||
|
||||
// console.log(entrance.id, house.title, house.number, entrance.title);
|
||||
|
||||
// db.run(`INSERT INTO entrance_history(entrance_id, name, date_start, date_end, group_number, working) VALUES(?, ?, ?, ?, ?, ?)`,
|
||||
// db.run(`INSERT INTO entrance_history(entrance_id, name, date_start, date_end, group_id, working) VALUES(?, ?, ?, ?, ?, ?)`,
|
||||
// [
|
||||
// entrance.id,
|
||||
// history.name,
|
||||
@@ -127,7 +127,7 @@ const db_old = new sqlite3.Database('old_db.sqlite');
|
||||
// } else {
|
||||
// // console.log(house.id, house.title, house.number);
|
||||
|
||||
// db.run(`INSERT INTO homestead_history(homestead_id, name, date_start, date_end, group_number, working) VALUES(?, ?, ?, ?, ?, ?)`,
|
||||
// db.run(`INSERT INTO homestead_history(homestead_id, name, date_start, date_end, group_id, working) VALUES(?, ?, ?, ?, ?, ?)`,
|
||||
// [
|
||||
// homestead.id,
|
||||
// history.name,
|
||||
@@ -159,3 +159,50 @@ const db_old = new sqlite3.Database('old_db.sqlite');
|
||||
// }
|
||||
// });
|
||||
|
||||
|
||||
// Додавання ID вісника в entrance_history
|
||||
// Оновлення кожного запису в entrance_history
|
||||
db.serialize(() => {
|
||||
db.all(`SELECT id, name FROM entrance_history`, (err, rows) => {
|
||||
if (err) return console.error('Read error:', err.message);
|
||||
|
||||
const updateStmt = db.prepare(`UPDATE entrance_history SET sheep_id = ? WHERE id = ?`);
|
||||
let pending = rows.length;
|
||||
|
||||
if (pending === 0) {
|
||||
updateStmt.finalize();
|
||||
db.close();
|
||||
console.log('Нема записів для оновлення.');
|
||||
return;
|
||||
}
|
||||
|
||||
rows.forEach((row) => {
|
||||
db.get(`SELECT id FROM sheeps WHERE name = ?`, [row.name], (err, sheep) => {
|
||||
if (err) {
|
||||
console.error('Search error:', err.message);
|
||||
if (--pending === 0) {
|
||||
updateStmt.finalize();
|
||||
db.close();
|
||||
console.log('Оновлення завершено (з помилками).');
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const sheepId = sheep ? sheep.id : 0;
|
||||
|
||||
updateStmt.run(sheepId, row.id, (err) => {
|
||||
if (err) {
|
||||
console.error(`Помилка оновлення запису ID ${row.id}:`, err.message);
|
||||
}
|
||||
|
||||
if (--pending === 0) {
|
||||
updateStmt.finalize();
|
||||
db.close();
|
||||
console.log('Оновлення завершено');
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
1969
scripts/package-lock.json
generated
Normal file
1969
scripts/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,14 +1,15 @@
|
||||
{
|
||||
"name": "import",
|
||||
"version": "1.0.0",
|
||||
"main": "import.js",
|
||||
"main": "generatorExcel.js",
|
||||
"scripts": {
|
||||
"start": "node import.js"
|
||||
"start": "node generatorExcel.js"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"description": "",
|
||||
"dependencies": {
|
||||
"exceljs": "^4.4.0",
|
||||
"sqlite3": "^5.1.7"
|
||||
}
|
||||
}
|
||||
|
||||
BIN
scripts/table.xlsx
Normal file
BIN
scripts/table.xlsx
Normal file
Binary file not shown.
BIN
scripts/Території.xlsx
Normal file
BIN
scripts/Території.xlsx
Normal file
Binary file not shown.
Reference in New Issue
Block a user