作为Java程序员如果所在公司主要是做商用系统的,那么在肯定会要求做模板的导入和导出的功能,这是除增删改查外最基本最简单的需求了。本小白之前做的项目中基本上都有要求做(不过都是项目一开始自带的大佬写好封装的工具类或者自己在网上直接CV大法拷一个代码,具体也没怎么研究),今天写个博客把之前的仔细研究一下
首先看这个项目有一个人员信息的模板导入,其格式是xls和xlsx两种类型。
首先在controller层进行权限和格式校验
@RestController
@RequestMapping(value = "/personnel",produces = Constants.PRODUCES)
public class personnelController {
private static final Logger logging = LoggerFactory.getLogger(personnelController.class);
@Autowired
PersonnelService personnelService;
@Autowired
AuthorityRoleService authorityRoleService;
//文件导入
@PostMapping("/fileImport.do")
public Result fileImport(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){
Result result = new Result();
String operator = request.getHeader("remoteUser");
Long companyId = Long.valueOf(request.getHeader("companyId"));
if(StringUtils.isBlank(operator)){
String message = "缺少操作用户,导入失败";
logging.info(message);
result.addError("-1", message);
return result;
}
if(!authorityRoleService.isTogetherStatus(operator)){
String message = "该账户所在公司冻结,暂无权限";
logging.info(message);
result.addError("-2", message);
return result;
}
if (!authorityRoleService.isAuthorityRole(operator,"4")){
String message = "暂无此页面权限,请核对";
logging.info(message);
result.addError("-2", message);
return result;
}
// 文件不正确
if (!file.getOriginalFilename().contains(".xls") && !file.getOriginalFilename().contains(".xlsx")) {
logging.info(Constants.ERROR_FILE_MSG);
result.addError("-1",Constants.ERROR_FILE_MSG);
return result;
}
//经营者信息批量导入
try {
return personnelService.fileImport(file,operator,companyId);
} catch (Exception e) {
String message = "导入经营者异常,导入失败";
logging.info(message+": " + JSON.toJSONString(e));
result.addError("-1", message);
return result;
}
}
}
然后是service和serviceimpl层
public interface PersonnelService {
//文件导入
Result fileImport(MultipartFile file, String operator,Long companyId)throws Exception;
}
model模板是这样子
然后看一下具体解析和获取数据的代码是怎么实现的
@Override
@Transactional(rollbackFor = Exception.class)
public Result fileImport(MultipartFile file, String operator,Long companyId) throws Exception {
Result result = new Result();
Date time = new Date();
List<AddPersonnelReqDto> list = new ArrayList<>();
// 文件为空直接返回
if (null == file) {
String message = "模板为空,无法导入";
logging.info(message);
result.addError("-1", "模板为空,无法导入");