ruoyi-flowable-plus Excel 导入数据 Demo

发布于:2025-07-22 ⋅ 阅读:(24) ⋅ 点赞:(0)

📁 项目结构简述

ruoyi-flowable-plus 是基于 RuoYi 的扩展项目,使用:

  • 后端:Spring Boot + MyBatis + Flowable
  • 前端:Vue.js

📥 Excel 导入功能 Demo

导入用户数据为例,展示完整导入流程。

✅ 后端实现(Java)

1. Maven 依赖(pom.xml)

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

2. 控制器层(UserController.java)

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/import")
    public AjaxResult importUser(@RequestParam("file") MultipartFile file) {
        try {
            List<User> userList = userService.importExcel(file.getInputStream());
            return AjaxResult.success("导入成功", userService.saveBatch(userList));
        } catch (Exception e) {
            return AjaxResult.error("导入失败:" + e.getMessage());
        }
    }
}

3. 服务层(UserService.java)

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> importExcel(InputStream inputStream) throws Exception {
        Workbook workbook = new XSSFWorkbook(inputStream);
        Sheet sheet = workbook.getSheetAt(0);
        List<User> list = new ArrayList<>();

        for (int i = 1; i <= sheet.getLastRowNum(); i++) {
            Row row = sheet.getRow(i);
            User user = new User();
            user.setUserName(getCellValue(row, 0));
            user.setNickName(getCellValue(row, 1));
            user.setEmail(getCellValue(row, 2));
            user.setPassword(getCellValue(row, 3));
            list.add(user);
        }
        return list;
    }

    private String getCellValue(Row row, int cellIndex) {
        Cell cell = row.getCell(cellIndex);
        if (cell == null) return "";
        return cell.toString();
    }

    public boolean saveBatch(List<User> list) {
        return userMapper.insertBatch(list) > 0;
    }
}

4. Mapper 层(UserMapper.java)

public interface UserMapper {
    int insertBatch(@Param("list") List<User> list);
}

5. Mapper XML(UserMapper.xml)

<insert id="insertBatch">
    INSERT INTO sys_user (user_name, nick_name, email, password)
    VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.userName}, #{item.nickName}, #{item.email}, #{item.password})
    </foreach>
</insert>

✅ 前端实现(Vue.js)

1. 页面组件(user/import.vue)

<template>
  <div>
    <el-upload
      action="/api/user/import"
      :headers="headers"
      :on-success="handleSuccess"
      :on-error="handleError"
      :limit="1"
      accept=".xlsx,.xls"
    >
      <el-button type="primary">导入Excel</el-button>
    </el-upload>
  </div>
</template>

<script>
export default {
  data() {
    return {
      headers: {
        Authorization: 'Bearer ' + this.$store.getters.token
      }
    };
  },
  methods: {
    handleSuccess(response) {
      this.$message.success("导入成功");
      console.log(response);
    },
    handleError(error) {
      this.$message.error("导入失败:" + error.message);
    }
  }
};
</script>

🧪 示例 Excel 表格格式

用户名 昵称 邮箱 密码
admin 管理员 admin@example.com 123456
user1 用户1 user1@example.com 123456

✅ 总结

模块 内容
后端技术 Spring Boot + MyBatis + Apache POI
前端技术 Vue + Element UI
核心功能 Excel 数据导入数据库
示例实体 User 对象
示例接口 /user/import

提示:如需集成到其他模块(如部门、岗位、流程等),可复用此结构,仅需替换实体类和Mapper。


网站公告

今日签到

点亮在社区的每一天
去签到