diff --git a/script/2.0.0/data/1_reset_project_bind_point/.vscode/launch.json b/script/2.0.0/data/1_reset_project_bind_point/.vscode/launch.json new file mode 100644 index 0000000..3a3fcba --- /dev/null +++ b/script/2.0.0/data/1_reset_project_bind_point/.vscode/launch.json @@ -0,0 +1,17 @@ +{ + // 使用 IntelliSense 了解相关属性。 + // 悬停以查看现有属性的描述。 + // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "启动程序", + "skipFiles": [ + "/**" + ], + "program": "${workspaceFolder}\\index.js" + } + ] +} \ No newline at end of file diff --git a/script/2.0.0/data/1_reset_project_bind_point/index.js b/script/2.0.0/data/1_reset_project_bind_point/index.js new file mode 100644 index 0000000..dff1b2c --- /dev/null +++ b/script/2.0.0/data/1_reset_project_bind_point/index.js @@ -0,0 +1,100 @@ +try { + const { Pool, Client } = require('pg') + const path = require('path') + const fs = require("fs"); + + //! 定义变更数据 数据为想要达到的结果 + //! 只筛选 管廊 结构物 + //! projectId 是目标结构物 + //! points 是要归属到这个结构物下的点位 id + const resetBing = [ + { + projectId: 1, + points: [1, 2, 3] + } + ] + + // 测试环境 + const pool = new Pool({ + user: 'FashionAdmin', + host: '10.8.30.39', + database: 'Inspection_20231016', + password: '123456', + port: 5432, + }) + + // 商用环境 + // const pool = new Pool({ + // user: '', + // host: '', + // database: '', + // password: '', + // 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() + client.on('error', err => { + console.error(err); + }) + try { + await client.query('BEGIN') + console.log(`开始`); + + let index = 0 + for (let r of resetBing) { + if (!r.projectId || !r.points || !r.points.length) { + throw `参数错误 index=${index}`; + } + + for (let i = index + 1; i < resetBing.length; i++) { + if (resetBing[i].projectId == r.projectId) { + throw `重复项目 index= ${index} / ${i} `; + } + for (let j = 0; j < r.points.length; j++) { + if (resetBing[i].points.some(item => item == r.points[j])) { + throw `重复点位 pointIndex= ${j} / project ${i} `; + } + } + } + + const targetProject = (await client.query(` + SELECT * FROM project WHERE id=$1; + `, [r.projectId] + )).rows[0] + if (!targetProject) { + throw `目标项目不存在 index= ${index} `; + } + if (targetProject.type != '管廊') { + throw `目标项目不是管廊 index= ${index} `; + } + console.log(targetProject); + + let updatePointSql = `UPDATE point SET project_id=${r.projectId} WHERE id IN (${r.points.join(',')},-1);` + console.log(updatePointSql); + // 变更点位 + await client.query(updatePointSql) + + index++ + } + + // 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) +} diff --git a/script/2.0.0/data/1_reset_project_bind_point/package.json b/script/2.0.0/data/1_reset_project_bind_point/package.json new file mode 100644 index 0000000..da145d7 --- /dev/null +++ b/script/2.0.0/data/1_reset_project_bind_point/package.json @@ -0,0 +1,15 @@ +{ + "name": "appkey-generator", + "version": "1.0.0", + "description": "tool", + "main": "index.js", + "scripts": { + "test": "mocha", + "start": "set NODE_ENV=development&&node index" + }, + "author": "liu", + "license": "ISC", + "dependencies": { + "pg": "^7.18.2" + } +} \ No newline at end of file