entity.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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('/getChildList', async (req, res) => {
  44. let user = await utils.getUserInfo({ req, res }),
  45. obj = req.body
  46. let sql = `SELECT id AS entityId,name,introduce,is_show,parent_id AS parentId,color FROM entity_t WHERE parent_id=?`
  47. let { total } = await utils.getSumWhere({ sql: '', val: [obj.parentId], name: 'entity_t', res, req }) // 执行SQL查询并获取结果中的总数
  48. sql += ` ORDER BY id ASC` // 在SQL查询语句的末尾添加了一个ORDER BY子句,用于根据id字段排序结果 ASC升序、DESC降序
  49. // sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
  50. let { result } = await pools({ sql, val: [obj.parentId], req })
  51. result = result.map((item) => ({
  52. ...item,
  53. is_show: item.is_show === 1
  54. // color: item.color.substring(1)
  55. }))
  56. res.send(utils.returnData({ data: result, total }))
  57. })
  58. //修改
  59. router.post('/updataEntity', async (req, res) => {
  60. let sql = 'UPDATE entity_t SET name=?,introduce=?,is_show=?,parent_id=?,color=? WHERE id=?',
  61. obj = req.body
  62. await pools({ sql, val: [obj.name, obj.introduce, obj.is_show, obj.parentId, obj.color, obj.entityId], run: false, res, req })
  63. })
  64. //删除
  65. router.post('/delEntity', async (req, res) => {
  66. // await utils.checkPermi({ req, res, role: [systemSettings.menus.menuDelte] }) //检查是否有删除权限
  67. let obj = req.body // 假设这是一个包含所有要删除的entityId的数组
  68. let hasChildren = false
  69. let selectSql = 'SELECT id FROM entity_t WHERE parent_id=?'
  70. // 检查是否有子项
  71. for (let id of obj) {
  72. let { result } = await pools({ sql: selectSql, val: [id], res, req })
  73. if (result.length !== 0) {
  74. hasChildren = true
  75. break
  76. }
  77. }
  78. if (hasChildren) {
  79. return res.send(utils.returnData({ code: -1, msg: '删除失败,请先删除子级', req }))
  80. } else {
  81. // 构建参数化查询的参数
  82. let placeholders = obj.map(() => '?').join(',')
  83. let sql = `DELETE FROM entity_t WHERE id in (${placeholders})`
  84. await pools({ sql, val: obj, run: false, res, req }) // 注意这里直接传递obj数组作为参数
  85. }
  86. })
  87. // 导入
  88. router.post('/importEntity', async (req, res) => {
  89. let sql = 'INSERT INTO entity_t(`name`,`introduce`,is_show,parent_id,color) VALUES ?'
  90. let fileArr = await fileEvent(req, res)
  91. let filename = fileArr[0].filename
  92. //配置获取文件路径
  93. // let xlsxRes = xlsx.parse(`${path.join(__dirname, '../../', 'public/uploadFile/')}${filename}`, { cellDates: true })
  94. let uploadAddress = 'D:/dataMark/uploadFile'
  95. let xlsxRes = xlsx.parse(`${uploadAddress}/${filename}`, { cellDates: true })
  96. let list = xlsxRes[0].data
  97. list.splice(0, 1)
  98. for (let i = 0; i < list.length; i++) {
  99. let item = list[i]
  100. if (item[item.length - 1] === 0) {
  101. let res1 = await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的一级节点的值没有问题!!!' })
  102. } else {
  103. let parentName = item[item.length - 1]
  104. let parentSql = 'SELECT id FROM entity_t WHERE `name` = ?'
  105. let parentId
  106. try {
  107. let result = await pools({ sql: parentSql, val: [parentName], run: true, res, req })
  108. parentId = result.result[0].id
  109. } catch (error) {
  110. res.status(500).send('获取父节点id失败')
  111. return
  112. }
  113. // 将父节点id添加到item中替换父节点名称
  114. item[item.length - 1] = parentId
  115. // 插入数据库
  116. try {
  117. if (i === list.length - 1) {
  118. await pools({ sql, val: [[item]], run: false, res, req, msg: '请确认导入的节点的值没有问题!!!' })
  119. } else {
  120. await pools({ sql, val: [[item]], run: true, res, req, msg: '请确认导入的节点的值没有问题!!!' })
  121. }
  122. } catch (error) {
  123. console.log('插入数据失败', error)
  124. res.status(500).send('插入数据失败')
  125. return
  126. }
  127. }
  128. }
  129. })
  130. module.exports = router