四好公路
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
5.8 KiB

try {
const { Pool, Client } = require('pg')
const XLSX = require('xlsx')
const path = require('path')
const fs = require("fs");
// 测试环境
const pool = new Pool({
user: 'postgres',
host: '10.8.30.32',
database: 'highways4good',
password: '123',
port: 5432,
})
const fun = async () => {
// note: we don't try/catch this because if connecting throws an exception
// we don't need to dispose of the client (it will be undefined)
const client = await pool.connect()
try {
await client.query('BEGIN')
console.log(`开始`);
let allVillageRes = (await client.query(`SELECT * FROM village`)).rows
// console.log(allVillageRes);
// 读取数据文件
let workbook = XLSX.readFile(path.join(__dirname, './data/村道(新)(2).xlsx'));
let firstSheetName = workbook.SheetNames[0];
let worksheet = workbook.Sheets[firstSheetName];
let res = XLSX.utils.sheet_to_json(worksheet, {
defval: ''
});
let workbook2 = XLSX.readFile(path.join(__dirname, './data/县道(新).xlsx'));
let firstSheetName2 = workbook2.SheetNames[0];
let worksheet2 = workbook2.Sheets[firstSheetName2];
let res2 = XLSX.utils.sheet_to_json(worksheet2, {
defval: ''
});
let workbook3 = XLSX.readFile(path.join(__dirname, './data/乡道(新).xlsx'));
let firstSheetName3 = workbook3.SheetNames[0];
let worksheet3 = workbook3.Sheets[firstSheetName3];
let res3 = XLSX.utils.sheet_to_json(worksheet3, {
defval: ''
});
let villageSql = ''
let noExistVillage = ''
let noExistVillageObj = {}
for (let r of [...res, ...res2, ...res3]) {
console.log(r);
// if (r.id == 3259) {
// console.log(r);
// }
let villageId = null
if (r['所属行政村']) {
let v = r['所属行政村']
v = v.split(' ')[0]
v = v.trim()
if (v) {
let noExist = false
let corV = allVillageRes.find(village => village.name === v)
if (corV) {
villageId = corV.id
} else {
if (!v.endsWith('村')) {
v += '村'
let corV = allVillageRes.find(village => village.name === v)
if (corV) {
villageId = corV.id
} else {
noExist = true
}
} else {
noExist = true
}
}
if (noExist) {
if (!noExistVillageObj[v]) {
noExistVillage += `${v}\n`
noExistVillageObj[v] = true
}
}
}
}
let del = false
let spot = true
let isDel = r['isdelete']
if (isDel) {
isDel = isDel.toString()
isDel = isDel.trim()
if (isDel) {
if (isDel == 1) {
del = true
} else if (isDel == 2) {
spot = false
}
}
}
let rId = r.id
if (rId) {
rId = rId.toString()
rId = rId.trim()
if (rId) {
r.id = rId
}
}
if (r.id) {
villageSql += `UPDATE road SET village_id = ${villageId}, "del" = ${del}, spot = ${spot} WHERE id = ${r.id};\n`
} else {
villageSql += `
INSERT INTO road (
route_name,
village_id,
"del",
spot,
route_code,
section_no,
township_code,
stop_station,
section_type
) VALUES (
'${r.route_name}',
${villageId || `null`},
${del},
${spot},
${r.route_code ? `'${r.route_code}'` : `null`},
${r.section_no ? `'${r.section_no}'` : `null`},
${r.township_code ? `'${r.township_code}'` : `null`},
${r.stop_station ? `'${r.stop_station}'` : `null`},
${r.section_type ? `'${r.section_type}'` : `null`}
);\n`
}
}
fs.writeFileSync('village_update.sql', villageSql, 'utf-8');
fs.writeFileSync('no_exist_village.txt', noExistVillage, 'utf-8');
// await client.query('ROLLBACK')
await client.query('COMMIT')
console.log('执行完毕~')
} catch (e) {
await client.query('ROLLBACK')
console.log('执行错误~')
throw e
} finally {
client.release();
}
}
fun()
} catch (error) {
console.error(error)
}