dataset.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. const express = require('express')
  2. const router = express.Router()
  3. const utils = require('../../utils/index.js')
  4. const pools = require('../../utils/pools.js')
  5. const xlsx = require('node-xlsx')
  6. const path = require('path')
  7. const fileEvent = require('../../utils/file')
  8. const execTrans = require('../../utils/dbHelper.js')
  9. const getNewSqlParamEntity = require('../../utils/tool.js')
  10. const uuid = require('uuid')
  11. // 增加数据集
  12. router.post('/addDataset', async (req, res) => {
  13. let sql = 'INSERT INTO dataset_t(`name`,creator_id) VALUES (?,?)',
  14. obj = req.body
  15. await utils.existName({
  16. sql: 'SELECT name FROM dataset_t WHERE name=?',
  17. name: obj.name,
  18. res,
  19. msg: '该数据集名称已存在!',
  20. req
  21. })
  22. await pools({
  23. sql,
  24. val: [obj.name, obj.creatorId],
  25. run: false,
  26. res,
  27. req
  28. })
  29. })
  30. //查询
  31. router.post('/getDatasetList', async (req, res) => {
  32. let user = await utils.getUserInfo({ req, res }),
  33. obj = req.body
  34. let sql = `SELECT
  35. d.id,
  36. d.name,
  37. d.creator_id AS creatorId,
  38. u.name as creatorName,
  39. (SELECT count(*) from mark_data_t m where m.dataset_id = d.id AND m.state=1) as marked,
  40. (SELECT count(*) from mark_data_t m where m.dataset_id = d.id) as totalNumber
  41. FROM
  42. dataset_t d JOIN user u ON d.creator_id = u.id WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点 JOIN mark_data_t m ON d.id = m.dataset_id
  43. sql = utils.setLike(sql, 'd.name', obj.name) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
  44. sql = utils.setMoreId(sql, user)
  45. let { total } = await utils.getSum({ sql, name: 'dataset_t d', res, req }) // 执行SQL查询并获取结果中的总数
  46. sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
  47. let { result } = await pools({ sql, res, req })
  48. res.send(utils.returnData({ data: result, total }))
  49. })
  50. // 编辑
  51. router.post('/updataDataset', async (req, res) => {
  52. let sql = 'UPDATE dataset_t SET name=? WHERE id=?',
  53. obj = req.body
  54. await pools({ sql, val: [obj.name, obj.id], run: false, res, req })
  55. })
  56. //删除
  57. router.post('/delDataset', async (req, res) => {
  58. obj = req.body
  59. let placeholders = obj.map(() => '?').join(',')
  60. let sql = `DELETE FROM dataset_t WHERE id in (${placeholders})`
  61. await pools({ sql, val: obj, run: false, res, req }) // 注意这里直接传递obj数组作为参数
  62. })
  63. // 查询导入记录
  64. router.post('/getImportRecord', async (req, res) => {
  65. let user = await utils.getUserInfo({ req, res }),
  66. obj = req.body
  67. let sql = `SELECT id,name,importer_id,time,data_volume FROM file_import_t WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点
  68. sql = utils.setLike(sql, 'name', obj.name) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
  69. sql = utils.setMoreId(sql, user)
  70. let { total } = await utils.getSum({ sql, name: 'file_import_t', res, req }) // 执行SQL查询并获取结果中的总数
  71. sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
  72. let { result } = await pools({ sql, res, req })
  73. res.send(utils.returnData({ data: result, total }))
  74. })
  75. // 查询数据集数据
  76. router.post('/getDataList', async (req, res) => {
  77. let user = await utils.getUserInfo({ req, res }),
  78. obj = req.body
  79. let sql = `SELECT id,text,is_mark,state FROM mark_data_t WHERE 1=1` // WHERE 1=1是一个始终为真的条件,后续动态添加查询条件的起点
  80. sql = utils.setLike(sql, 'text', obj.text) // 添加一个基于name字段的模糊匹配条件,匹配的值来自obj.name
  81. sql = utils.setMoreId(sql, user)
  82. let { total } = await utils.getSum({ sql, name: 'mark_data_t', res, req }) // 执行SQL查询并获取结果中的总数
  83. sql = utils.pageSize(sql, obj.page, obj.size) // 函数来修改SQL语句,添加分页功能。它使用obj.page和obj.size来确定返回结果的范围。
  84. let { result } = await pools({ sql, res, req })
  85. res.send(utils.returnData({ data: result, total }))
  86. })
  87. // 导入数据
  88. router.post('/importData', async (req, res) => {
  89. var sqlParamsEntity = []
  90. let fileImportSql = 'INSERT INTO file_import_t(`id`,`name`,`importer_id`,`data_volume`,`dataset_id`) VALUES ?'
  91. // let sql1 = 'INSERT INTO mark_data_t(`text`,`file_id`,`time`,`data_volume`,`dataset_id`) VALUES ?'
  92. let fileArr = await fileEvent(req, res)
  93. let params = JSON.parse(fileArr[0].params.listType)
  94. const uniqueId = uuid.v4()
  95. console.log('fileArr', fileArr)
  96. let filename = fileArr[0].filename
  97. let name = fileArr[0].originalname
  98. //配置获取文件路径
  99. let xlsxRes = xlsx.parse(`${path.join(__dirname, '../../', 'public/uploadFile/')}${filename}`, { cellDates: true })
  100. let list = xlsxRes[0].data
  101. list.splice(0, 1)
  102. var fileImportParam = { id: uniqueId, name, importer_id: params.importer_id, data_volume: list.length, dataset_id: params.dataset_id }
  103. sqlParamsEntity.push(getNewSqlParamEntity({ sql: fileImportSql, fileImportParam }))
  104. let markDataSql = 'INSERT INTO file_import_t(text,`file_id`,`dataset_id`,is_mark,state) VALUES ?'
  105. for (let i = 0; i < list.length; i++) {
  106. let item = list[i]
  107. console.log('item', item)
  108. // var markDataParams = { id: uniqueId, name, importer_id: params.importer_id, data_volume: list.length, dataset_id: params.dataset_id }
  109. // sqlParamsEntity.push(getNewSqlParamEntity({ sql: fileImportSql, fileImportParam }))
  110. }
  111. // await pools({sql,val:[list],run:false,res,req,msg:"请确认文档导入值没有问题!!!"});
  112. execTrans(sqlParamsEntity, function (err, info) {
  113. if (err) {
  114. console.error('事务执行失败', err)
  115. } else {
  116. console.log('done.')
  117. }
  118. })
  119. })
  120. module.exports = router