//1.解决跨域
@CrossOrigin
//2.声明restContoller
@RestController
//3.设置父路径
@RequestMapping(value="/sys")
public class UserController {
@Autowired
private UserService userService;
/**
* 导入Excel,添加用户
* 文件上传:springboot
* 接收字段名name为file传过来的文件
*/
@RequestMapping(value="/user/import",method = RequestMethod.POST)
public Result importUser(@RequestParam(name="file") MultipartFile file) throws Exception {
//1.根据Excel文件创建工作簿
Workbook wb = new XSSFWorkbook(file.getInputStream());
//2.获取Sheet
Sheet sheet = wb.getSheetAt(0);//参数:索引,0表示第一个sheet
//3.获取Sheet中的每一行,和每一个单元格,并封装到list
List<User> list = new ArrayList<>();
//第一行是标题所以rowNum=1
for (int rowNum = 1; rowNum<= sheet.getLastRowNum() ;rowNum ++) {
Row row = sheet.getRow(rowNum);//根据索引获取每一个行
//构造一个数组存储数据
Object [] values = new Object[row.getLastCellNum()];
for(int cellNum=0;cellNum< row.getLastCellNum(); cellNum ++) {//从第一列开始
Cell cell = row.getCell(cellNum);
Object value = getCellValue(cell);
values[cellNum] = value;
}
//User类添加构造方法,完成数据组装
User user = new User(values);
list.add(user);
}
//4.传递集合对象,批量保存用户
userService.saveAll(list);
return new Result(ResultCode.SUCCESS);
}
/**
* 获取excel单元格数据
*/
public static Object getCellValue(Cell cell) {
//1.获取到单元格的属性类型
CellType cellType = cell.getCellType();
//2.根据单元格数据类型获取数据
Object value = null;
switch (cellType) {
case STRING:
value = cell.getStringCellValue();
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case NUMERIC:
if(DateUtil.isCellDateFormatted(cell)) {
//日期格式
value = cell.getDateCellValue();
}else{
//数字
value = cell.getNumericCellValue();
}
break;
case FORMULA: //公式
value = cell.getCellFormula();
break;
default:
break;
}
return value;
}
}
/**
* 用户实体类
* lombokz注解:Getter,Setter编译时自动生成getter和setter方法;
* NoArgsConstructor编译时自动生成无参数构造函数
*/
@Entity
@Table(name = "sys_user")
@Getter
@Setter
@NoArgsConstructor
public class User implements Serializable {
private static final long serialVersionUID = 1106454283013182419L;
//Id
@id
private String id;
//用户名称
private String username;
//手机号码
private String mobile;
//工号
private String account;
//性别 1男 0女
private Integer sexId;
//出生日期
private Date birthday;
public User(Object [] values) {
//excel里表格标题顺序依次为:用户名;手机号;工号;性别;出生日期
this.username = values[0].toString();
this.mobile = values[1].toString();
//double带.0,所以需要去掉小数点及以后的
this.account = new DecimalFormat("#").format(values[2]).toString();
//因为性别这里用1和0存,识别的excel是double类型,所以需要处理
this.sexId =((Double) values[3]).intValue();
this.birthday = (Date) values[4];
}
}