当前位置: 首页 > news >正文

(sprint)第4天:后端API开发(应急预案模块)

昨天的成就

  • 完成评估反馈API的完善工作
  • 实现问题记录的关联接口
  • 创建应急预案模块的基础CRUD接口
  • 关键功能 :实现模板下载和批量导入功能
  • 耗时 :4小时 | 剩余时间 :6天
    遇到的困难
  • Excel文件解析需要引入额外依赖(xlsx库)
  • 批量导入的数据校验逻辑复杂
  • 模板格式与数据库字段的映射关系
    今天的任务
  1. 完善应急预案的导入导出功能
  2. 添加数据校验和错误处理
  3. 开始前端页面开发
    代码签入
// server/routes/emergency-plans.js
router.get('/template', (req, res) => {
  const template = [
    { title: '预案标题', category: '预案类别', content: '预
    案内容', version: '版本号' }
  ];
  
  const worksheet = XLSX.utils.json_to_sheet(template);
  const workbook = XLSX.utils.book_new();
  XLSX.utils.book_append_sheet(workbook, worksheet, '应急
  预案模板');
  
  const buffer = XLSX.write(workbook, { type: 'buffer', 
  bookType: 'xlsx' });
  
  res.setHeader('Content-Type', 'application/vnd.
  openxmlformats-officedocument.spreadsheetml.sheet');
  res.setHeader('Content-Disposition', 'attachment; 
  filename=emergency_plan_template.xlsx');
  res.send(buffer);
});router.post('/import', async (req, res) => {
  try {
    const file = req.files?.file;
    if (!file) {
      return res.status(400).json({ message: '请上传文件
      ' });
    }
    
    const workbook = XLSX.read(file.data, { type: 
    'buffer' });
    const worksheet = workbook.Sheets[workbook.SheetNames
    [0]];
    const data = XLSX.utils.sheet_to_json(worksheet, { 
    header: 1 });
    
    const plans = data.slice(1).map(row => ({
      title: row[0],
      category: row[1],
      content: row[2],
      version: row[3] || '1.0.0',
      status: 'draft'
    }));
    
    await pool.query('INSERT INTO emergency_plans 
    (title, category, content, version, status) VALUES ?
    ',
      [plans.map(p => [p.title, p.category, p.content, p.
      version, p.status])]
    );
    
    res.json({ message: '导入成功', count: plans.
    length });
  } catch (error) {
    res.status(500).json({ message: error.message });
  }
});
http://www.jsqmd.com/news/823591/

相关文章:

  • 无锡 CPPM 证书报考常见问题(含金量 / 通过率和费用) - 众智商学院课程中心
  • 基于Taotoken构建每日大赛自动评分与反馈Agent工作流
  • 你的企业知识库,何必自己折腾?Tablestore 知识库服务帮你一站式搞定
  • AI驱动的工业预测性维护技术实践:AI驱动的预测性维护系统通过多传感器融合(振动、温度、电流等)实时监测设备健康状态,结合TSN网络实现毫秒级数据传输
  • 对比直接采购,使用聚合平台在模型选型上带来的灵活性体验
  • 2026年|全网10款降AI率工具大盘点,高效降低AI率至10%以下【附功能看点】 - 降AI实验室
  • 2026 年合肥验配医院哪家好:安徽医科大学康视眼科医院专业 - 19120507004
  • AI》》人工智能 》》机器学习框架 TensorFlow
  • 为什么92%的AI音频项目在ElevenLabs声音库选型阶段就失败?——资深AI音频架构师12年踩坑复盘
  • 广东工业冷水机厂家实测排行:核心指标横向对比 - 奔跑123
  • STM32存储性能对决:SDIO总线三种传输模式读写SD/TF卡实战评测
  • DevChat:无缝集成IDE的开源AI编程助手,提升开发效率
  • 2026 年合肥验配医院哪家靠谱:安徽医科大学康视眼科医院正 - 17329971652
  • 2026断桥门窗品牌排行:多场景适配与性能实测盘点 - 奔跑123
  • 【Midjourney未来主义风格终极指南】:20年AI视觉设计专家亲授7大核心参数调优法与3类稀缺提示词模板
  • 玩转 CTF 拿下好工作!网络安全大赛全流程解析,入门实战到就业全覆盖
  • 别再被GLIBCXX版本报错搞懵了!手把手教你用find和ln搞定Node.js依赖库问题
  • 5分钟掌握NCM音乐格式转换:ncmppGui完全指南
  • Shadow 还是 Shiply?安卓插件化终极选型指南 - 领先技术探路人
  • 武汉家长亲述:如何跳过中介,直接给孩子找到华中师大在校大学生上门家教 - 教育信息速递
  • 厦门考点 SCMP 证书关于(含金量和通过率及费用)详细解读 - 众智商学院课程中心
  • 基于SpringBoot+Vue的CRM客户管理系统毕设
  • Perplexity免费版突然限流?揭秘后台动态配额机制:3类触发阈值+2种自救方案
  • 2026产业数据与人工智能服务商选型指南|行业筛选标准+优质企业推荐
  • 大连考点 SCMP 证书关于(含金量和通过率及费用)详细解读 - 众智商学院课程中心
  • 福州家长找家教平台推荐:为什么越来越多家长选择不抽成的福建师大家教网? - 教育信息速递
  • 工程定制丙级管道井门 物业机房通用款式
  • Spring Boot安全脚手架实战:快速集成认证授权与API防护
  • 别再只盯着AES了!用Python实现一个简单的混沌文本加密(Logistic映射实战)
  • 2026 年合肥验配医院哪家专业:安徽医科大学康视眼科医院专 - 13724980961