前端数据:
<a class="button_type1 addTabPage" ng-click="importDatas()"><i
class="iconfont"></i>导入</a>
<!-- 配置信息表模态框(Modal) -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog"
aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"
aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">导入信息</h4>
</div>
<div class="modal-body">
<div ng-if="importFineshed == '0'">
<div style="margin-left: 50px;">
<input type="hidden" ng-model="purchProjectId"> <font
style="font-weight: bold; float: left">请选择文件 :</font><input
type="file" class="file" id="inputFile" style="float: left">
<!-- 这里是你的模板坐在的位置,不要使用中文字符 -->
<a
href="downloadFile/UserSummaryTable5GTechnologyAndApplicationCompetition.xlsx"
download="导入模板.xls">下载导入模板</a>
</div>
<br> <br>
<div style="width: 200px; margin-left: 200px;">
<button class="btn btn-primary" ng-click="uploadFile()">确认</button>
<button class="btn btn-warning" ng-click="cancel()">取消</button>
</div>
<br> <br> <br>
<div>
<h5>
<font color="red">1.excel中数据行数不能超过1000行,大小不超过10M! </font>
</h5>
<h5>
<font color="red">2.请参照模板说明进行导入,特别是必输项以及某些有选择范围的数据 </font>
</h5>
<h5>
<font color="red">3.导入过程可能需要两三分钟,请在本页耐心等待!</font>
</h5>
<h5>
<font color="red">4.数据如果导入成功,表明excel上的数据全部导入了系统,如果导入失败,请全部重新导入!</font>
</h5>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 配置信息表模态框(Modal) -->
<div class="modal fade" id="myModal1" tabindex="-1" role="dialog"
aria-labelledby="myModalLabe2" aria-hidden="true">
<div class="modal-dialog">
<div class="maxbox edit_type1">
<div class="baibox" id="myModal1">
<div class="tips">
<span class="active">导入情况信息</span>
</div>
<div class="lists">
<div class="list_box">
<div class="hang">
<div class="lie"
style='width: 100%; height: 400px; overflow-y: scroll; zoom: 1;'>
<label>错误信息:</label> <font color="red"> {{importMsg}}</font>
</div>
</div>
</div>
<div class="form_buts">
<span class="style" ng-click="close()">关闭</span>
</div>
</div>
</div>
</div>
</div>
</div>
2.前端controller.js
toggle指的是,点击的时候触发和当前模态窗口状态相反的操作。比如现在模态窗口是关闭的,那么点击按钮,就打开窗口。如果当前窗口是打开的,那么点击按钮就会关闭。
show,指的是点击的时候触发打开窗口。
hide,指的是点击的时候触发关闭模态窗。
//点击关闭按钮
$scope.close = function(){
$("#myModal1").modal("hide");
$scope.searchData($scope.searchWhere);
}
// 点击导入按钮
$scope.importDatas = function() {
$("#myModal").modal("show");
$scope.importFineshed = '0';
}
// 点击取消按钮
$scope.cancel = function() {
$("#myModal").modal("hide");
}
// 点击确定按钮
$scope.uploadFile = function() {
var fd = new FormData();
var file = document.querySelector('input[type=file]').files[0];
fd.append('file', file);
$http(
{
method : 'POST',
url : Constants.API.INTERFACE_URL
+ "a/xf4g/xfUser/importXfUserData",
data : fd,
headers : {
'Content-Type' : undefined
},
transformRequest : angular.identity
}).success(function(response) {
$scope.importMsg = response;
$("#myModal").modal("hide");
$("#myModal1").modal("show");
});
}
3.后端的controller层的代码主要是用于把从excel中获取的数据进行判定,
并且数据中的teamName,schoolName需要进行再次查询,获取到数据中的teamId
和officeId,获取到数据之后,需要根据loginName来查询是否重复,重复的执行update,
不重复的执行save(获取一个UUID赋值给XfUser对象)
@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping(value = "importXfUserData", method = RequestMethod.POST)
@ResponseBody
public String importXfUserData(@RequestParam("file") MultipartFile file) {
String failureMsg = "";
int successNum = 0;
int failureNum = 0;
try {
ImportExcel ei = new ImportExcel(file, 1, 0);
List<XfUser> list = ei.getDataList(XfUser.class);
if (list != null && list.size() > 0) {
for (int i = 0; i < list.size(); i++) {
boolean bl = true;
if (list.get(i).getName() == null || "".equals(list.get(i).getName())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据姓名为空,未能导入!";
bl = false;
}
if (list.get(i).getLoginName() == null || "".equals(list.get(i).getLoginName())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据登录名称为空,未能导入!";
bl = false;
}
if (list.get(i).getPassWord() == null || "".equals(list.get(i).getPassWord())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据密码为空,未能导入!";
bl = false;
}
if (list.get(i).getTeamName() == null || "".equals(list.get(i).getTeamName())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据战队名称为空,未能导入!";
bl = false;
}
//查询teamId
String teamId = xfTeamService.findTeamIdByTeamName(list.get(i).getTeamName());
list.get(i).setTeamId(teamId);
if (list.get(i).getDyfield5() == null || "".equals(list.get(i).getDyfield5())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据用户类型为空,未能导入!";
bl = false;
}
if (list.get(i).getSchoolName() == null || "".equals(list.get(i).getSchoolName())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据学校名称为空,未能导入!";
bl = false;
}
//查询officeId
String officeId = xfSchoolService.findOfficeIdBySchoolName(list.get(i).getSchoolName());
list.get(i).setOfficeId(officeId);
if (list.get(i).getProjectType() == null || "".equals(list.get(i).getProjectType())) {
failureMsg = failureMsg + "第" + (i + 1) + "条数据账号类型为空,未能导入!";
bl = false;
}
if (bl == false) {
failureNum++;
continue;
}
XfUser xfUser = list.get(i);
String name = xfUser.getName();
//检查登录名是否重复
int result1 = xfUserService.checkByLoginName(name);
int result = 0;
if (result1 > 0) {
//登录名重复则执行更新操作
result = xfUserService.updateXfUser(xfUser);
} else {
//登录名不重复则执行新增操作
//获取一个UUID作为User的Id
String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase();
xfUser.setId(uuid);
result = xfUserService.savexfUser(xfUser);
}
if (result > 0) {
successNum++;
} else {
failureMsg = failureMsg + "第" + (i + 1) + "条数据添加失败,未能添加!";
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
failureMsg = "成功导入" + successNum + "条数据," + "导入失败" + failureNum + "条数据。失败信息:" + failureMsg;
return failureMsg;
}