@Override
public void exportInventoryUserInfoData(String param, HttpServletResponse response) {
HSSFWorkbook wb=null;
OutputStream os=null;
List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
int sheetCount=0;
try {
TCBmUserInfo tcBmUserInfo1 = JSONObject.parseObject(param).getObject("TCBmUserInfo", TCBmUserInfo.class);
//根据查询条件 从数据库中获取所有数据
List<Map<String,Object>> userInfos=userInfoDao.queryUserInfoData(tcBmUserInfo1);
logger.info(" exportInventoryUserInfoData is userInfos :"+userInfos);
wb=new HSSFWorkbook();
//总共多少个sheet页 能被5整除
if (userInfos.size()%65536==0){
sheetCount = userInfos.size()/65536;
}else {
//总共多少个sheet页 不能被5整除
sheetCount = userInfos.size()/65536 + 1;
}
//对sheet页进行遍历
for (int i = 0 ; i < sheetCount ; i++){
list.clear();
//采用Math.min方法获取较小的值,防止空指针异常
int minNumber = Math.min((i + 1) * 65536, userInfos.size());
for (int j = i*5 ; j < minNumber ; j++){
list.add(userInfos.get(j));
}
//创建sheet页
HSSFSheet sheet1 = wb.createSheet(excelInfoProperties.getSheet() + (i+1));
//调用往sheet页中写入数据的方法
eachInfo(list,sheet1);
}
//获取输出流
os=response.getOutputStream();
//定义输出Excel文件名,防止中文乱码
String encode = URLEncoder.encode(excelInfoProperties.getFileName(), excelInfoProperties.getEncode());
response.setContentType("application/msexcel");// 定义输出类型
response.setHeader("Content-disposition", "attachment;filename=" + encode+ ".xls;filename*=utf-8''"+encode+".xls"); //兼容不同浏览器的中文乱码问题
response.setCharacterEncoding(excelInfoProperties.getEncode());
wb.write(os);
}catch (IOException e){
logger.error("exportInventoryUserInfoData:" +e.getMessage());
}finally {
if (wb!=null){
try {
wb.close();
} catch (IOException e) {
logger.error("exportInventoryUserInfoData wb :" +e.getMessage());
}
}
if(os!=null){
try{
os.flush();
}catch(Exception e) {
logger.error("exportInventoryUserInfoData os.flush():" +e.getMessage());
}
try {
//关闭流
os.close();
} catch (IOException e) {
logger.error("exportInventoryUserInfoData os.close():" +e.getMessage());
}
}
}
}
@Override
public Object doLogin(String param) {
JSONObject jsonObject = JSONObject.parseObject(param);
String username = jsonObject.getString("username");
String password = jsonObject.getString("password");
if ("admin".equals(username) && "admin123".equals(password)){
return null;
}else {
throw new RuntimeException("账号不存在");
}
}
/**
* 往Excel里插入数据
* @param userInfos
* @param sheet
*/
private void eachInfo(List<Map<String,Object>> userInfos,HSSFSheet sheet){
HSSFRow row=null;
//参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列
CellRangeAddress region1 = new CellRangeAddress(0, 0, (short) 0, excelInfoProperties.getTerminateColumn() );
sheet.addMergedRegion(region1);
//创建第一个单元格
row=sheet.createRow(0);
row.setHeight((short)(excelInfoProperties.getHight()));
row.createCell(0).setCellValue(excelInfoProperties.getCellValue());
//Excel标题行插入数据
row=sheet.createRow(1);
//表行值用一个字符串变量来代替
String key = excelInfoProperties.getKey();
//对字符串变量进行分割
String[] keySplit = key.split(",");
//对数组进行遍历,并设置表行值
for (int i = 0; i < keySplit.length; i++) {
row.createCell(i).setCellValue(keySplit[i]);
}
List<String> list=new ArrayList<String>();
//对所有数据进行遍历
for (int i = 0; i < userInfos.size(); i++) {
//创建单元格
row = sheet.createRow( i+2);
Map<String,Object> map = userInfos.get(i);
//每次循环前对数组进行清空
list.clear();
list.add((String) map.get("username"));
list.add((String) map.get("phone_number"));
list.add((String) map.get("address"));
list.add((String) map.get("speed_progress"));
list.add((String) map.get("handl_bank"));
list.add((String) map.get("recommend_people"));
list.add( map.get("create_time").toString().substring(0,19));
list.add((String) map.get("repayment_method"));
list.add((String) map.get("repayment_period"));
list.add((String) map.get("property_info"));
list.add((String) map.get("social_info"));
//j代表固定的单元格个数,list.get(j) 代表的是每个单元格所对应的对象属性值
for (int j = 0; j <list.size(); j++) {
row.createCell(j).setCellValue(list.get(j));
}
}
//设置默认行高
sheet.setDefaultRowHeight((short) (excelInfoProperties.getDefaultHight()));
//列宽自适应
for (int i = 0; i <= excelInfoProperties.getiValue(); i++) {
sheet.autoSizeColumn(i);
sheet.setColumnWidth(i, excelInfoProperties.getColumnWidth());
}
}