entity.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. const express = require('express')
  2. const router = express.Router()
  3. const utils = require('../../utils/index.js')
  4. const pool = require('../../pool.js')
  5. const pools = require('../../utils/pools.js')
  6. const xlsx = require('node-xlsx')
  7. const path = require('path')
  8. const fileEvent = require('../../utils/file')
  9. const getNewSqlParamEntity = require('../../utils/tool.js')
  10. const execTrans = require('../../utils/dbHelper.js')
  11. // 增加实体
  12. router.post('/addEntity', async (req, res) => {
  13. let sql = 'INSERT INTO entity_t(`name`,`introduce`,is_show,parent_id,color) VALUES (?,?,?,?,?)',
  14. obj = req.body
  15. await pools({
  16. sql,
  17. val: [obj.name, obj.introduce, obj.is_show, obj.parentId, obj.color],
  18. run: false,
  19. res,
  20. req
  21. })
  22. })
  23. //查询
  24. router.post('/getEntityList', async (req, res) => {
  25. let user = await utils.getUserInfo({ req, res }),
  26. obj = req.body
  27. let sql = `SELECT id AS entityId,name,introduce,is_show,parent_id AS parentId,color FROM entity_t WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点
  28. sql = utils.setLike(sql, 'name', obj.name) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
  29. sql = utils.setMoreId(sql, user)
  30. sql = utils.setOr(sql, 'name', obj.name)
  31. let { total } = await utils.getSum({ sql, name: 'entity_t', res, req }) // 执行SQL查询并获取结果中的总数
  32. sql += ` ORDER BY id ASC` // 在SQL查询语句的末尾添加了一个ORDER BY子句,用于根据id字段排序结果 ASC升序、DESC降序
  33. // sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
  34. let { result } = await pools({ sql, res, req })
  35. result = result.map((item) => ({
  36. ...item,
  37. is_show: item.is_show === 1
  38. // color: item.color.substring(1)
  39. }))
  40. res.send(utils.returnData({ data: result, total }))
  41. })
  42. //修改
  43. router.post('/updataEntity', async (req, res) => {
  44. let sql = 'UPDATE entity_t SET name=?,introduce=?,is_show=?,parent_id=?,color=? WHERE id=?',
  45. obj = req.body
  46. await pools({ sql, val: [obj.name, obj.introduce, obj.is_show, obj.parentId, obj.color, obj.entityId], run: false, res, req })
  47. })
  48. //删除
  49. router.post('/delEntity', async (req, res) => {
  50. // await utils.checkPermi({ req, res, role: [systemSettings.menus.menuDelte] }) //检查是否有删除权限
  51. let obj = req.body // 假设这是一个包含所有要删除的entityId的数组
  52. let hasChildren = false
  53. let selectSql = 'SELECT id FROM entity_t WHERE parent_id=?'
  54. // 检查是否有子项
  55. for (let id of obj) {
  56. let { result } = await pools({ sql: selectSql, val: [id], res, req })
  57. if (result.length !== 0) {
  58. hasChildren = true
  59. break
  60. }
  61. }
  62. if (hasChildren) {
  63. return res.send(utils.returnData({ code: -1, msg: '删除失败,请先删除子级', req }))
  64. } else {
  65. // 构建参数化查询的参数
  66. let placeholders = obj.map(() => '?').join(',')
  67. let sql = `DELETE FROM entity_t WHERE id in (${placeholders})`
  68. await pools({ sql, val: obj, run: false, res, req }) // 注意这里直接传递obj数组作为参数
  69. }
  70. })
  71. // 导入
  72. router.post('/importEntity', async (req, res) => {
  73. let sql = 'INSERT INTO entity_t(`name`,`introduce`,is_show,parent_id,color) VALUES ?'
  74. let fileArr = await fileEvent(req, res)
  75. let filename = fileArr[0].filename
  76. //配置获取文件路径
  77. let xlsxRes = xlsx.parse(`${path.join(__dirname, '../../', 'public/uploadFile/')}${filename}`, { cellDates: true })
  78. let list = xlsxRes[0].data
  79. list.splice(0, 1)
  80. console.log('list', list)
  81. for (let i = 0; i < list.length; i++) {
  82. let item = list[i]
  83. if (item[item.length - 1] === 0) {
  84. let res1 = await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的一级节点的值没有问题!!!' })
  85. console.log('res1', res1)
  86. } else {
  87. let parentName = item[item.length - 1]
  88. let parentSql = 'SELECT id FROM entity_t WHERE `name` = ?'
  89. let parentId
  90. try {
  91. let result = await pools({ sql: parentSql, val: [parentName], run: true, res, req })
  92. console.log('result', result)
  93. parentId = result.result[0].id
  94. console.log('parentId', parentId)
  95. } catch (error) {
  96. console.log('获取父节点id失败', error)
  97. res.status(500).send('获取父节点id失败')
  98. return
  99. }
  100. // 将父节点id添加到item中替换父节点名称
  101. item[item.length - 1] = parentId
  102. // 插入数据库
  103. try {
  104. if (i === list.length - 1) {
  105. await pools({ sql, val: [[item]], run: false, res, req, msg: '请确认导入的节点的值没有问题!!!' })
  106. } else {
  107. await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的节点的值没有问题!!!' })
  108. }
  109. } catch (error) {
  110. console.log('插入数据失败', error)
  111. res.status(500).send('插入数据失败')
  112. return
  113. }
  114. }
  115. }
  116. })
  117. module.exports = router