@ResponseBody @RequestMapping(value = "export", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"}) public void export(@RequestParam(value = "settleId", required = true) Integer settleId, HttpServletResponse response) { String fileName = "export_" + BaseUtil.nowDateToStr() + ".xls"; File f = new File(fileName); JSONArray paymentDetails; JSONObject settlement = new JSONObject(); String[] fields = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"}; BaseUtil.FieldTypes[] types = {BaseUtil.FieldTypes.STRINGTOSTRING, BaseUtil.FieldTypes.STRINGTOSTRING, BaseUtil.FieldTypes.UNCHANGE,BaseUtil.FieldTypes.UNCHANGE,BaseUtil.FieldTypes.UNCHANGE, BaseUtil.FieldTypes.STRINGTOSTRING,BaseUtil.FieldTypes.UNCHANGE,BaseUtil.FieldTypes.UNCHANGE, BaseUtil.FieldTypes.UNCHANGE,BaseUtil.FieldTypes.UNCHANGE,BaseUtil.FieldTypes.UNCHANGE,}; try { paymentDetails = settlementService.exportSettlement(settlement, fields, types, settleId); //获取Excel所需的字段 if (!f.exists()) { f.createNewFile(); } String sourceFileName = this.getClass().getResource("/template").getPath() + "exportSettlement.xls"; File sf = new File(sourceFileName); ExcelUtil.copyTo(sf, f); Workbook wb = ExcelUtil.openForWrite(fileName); Sheet sheet = wb.getSheetAt(0); if (wb != null) { //表头 //Row 1 String v; Row row = sheet.getRow(1); Cell cell = row.getCell(2);//organizationName v = settlement.getString("enrollBatch"); cell.setCellValue(v); cell = row.getCell(7);//remittanceName v = settlement.getString("settlementName"); cell.setCellValue(v); cell = row.getCell(12); v = settlement.getString("operator"); cell.setCellValue(v); // //Row 2 row = sheet.getRow(2); cell = row.getCell(2);//payBeginDate v = settlement.getString("studyCenterName"); cell.setCellValue(v); cell = row.getCell(7); v = settlement.getString("settleDate"); cell.setCellValue(v); cell = row.getCell(12); v = settlement.getString("auditor"); cell.setCellValue(v); // // //Row 3 row = sheet.getRow(3); cell = row.getCell(2); v = settlement.getString("paySchoolYear"); cell.setCellValue(v); cell = row.getCell(7); v = settlement.getString("remitBeginDate"); cell.setCellValue(v); //Row 4 row = sheet.getRow(4); cell = row.getCell(2); v = settlement.getString("projectType"); cell.setCellValue(v); cell = row.getCell(7); v = settlement.getString("remitEndDate"); cell.setCellValue(v); //Row 5 row = sheet.getRow(5); cell = row.getCell(2); v = settlement.getString("serialNumber"); cell.setCellValue(v); //缴费详情 if (paymentDetails != null) { for (int i = 0; i < paymentDetails.size(); i++) { JSONObject jo = paymentDetails.getJSONObject(i); row = sheet.createRow(i + 7); ExcelUtil.writeRow(wb, row, jo, fields); } } } ExcelUtil.saveAsNewFile(fileName, wb); String contentType = "application/vnd.ms-excel;charset=utf-8"; DownloadUtil.download(response, f, contentType, new String(f.getName().getBytes("UTF-8"))); } catch (Exception e) { logger.error("打款单下载报错", e); } finally { try { if (f != null) { f.delete(); } } catch (Exception e) { e.printStackTrace(); } } }
//sql语句
StringBuffer sql = new StringBuffer( "select s.student_name, s.identity_card, p.pay_school_year, p.pay_tuition, sum(p.pay_money) as pay_money, e.student_source, sum(p.channel_deduct) as channel_deduct, cpr.current_percentage, ((p.pay_tuition - sum(case when p.discount_type = '高校优惠' then p.discount_money else 0 end)) * current_percentage / 100) as channel_amount, 0 as channel_payback, ((sum(p.pay_money) - sum(case when p.discount_type = '中心优惠' then p.discount_money else 0 end)) * current_percentage / 100 - sum(p.channel_deduct)) as channel_need_payback, sum(case when p.discount_type = '高校优惠' then p.discount_money else 0 end) as discount_money"); sql.append(" from student s left join student_enroll e on s.student_id = e.student_id left join payment_detail p on s.student_id = p.student_id left join channel_protocol cp on s.channel_id = cp.channel_id left join channel_protocol_reward cpr on cp.protocol_id = cpr.channel_protocol_id"); sql.append(" where p.settlement_id = " + settleId); sql.append(" group by s.student_name, s.identity_card, p.pay_school_year, p.pay_tuition, e.student_source, cpr.current_percentage"); List resultList = settlementDao.findBySql(sql.toString()); return BaseUtil.convertSqlResultToJson(fields,types,resultList);
//转化sql,拿到List集合
@Override public List findBySql(String sql) { return getEntityManager().createNativeQuery(sql).getResultList(); }
//转换converSqlFieldToJson
public static JSONObject convertSqlFieldToJson(String[] keys,FieldTypes[] types,Object[] values) throws ParseException { JSONObject o = new JSONObject(); for (int i = 0;i < keys.length;i++) { String key = keys[i]; FieldTypes type; if(types == null){ type = FieldTypes.UNCHANGE; } else { type = types[i]; } SimpleDateFormat sdf = null; Object value = values[i]; Date d = null; switch (type) { case INTEGERTOSTRING: if (value == null){ o.put(key,""); } else { Integer iv = (Integer) value; o.put(key, iv.toString()); } break; case FLOATTOSTRING: if (value == null){ o.put(key,""); } else { Float fv = (Float) value; o.put(key, fv.toString()); } break; case DATETOSTIRNGTIME: if (value == null){ o.put(key,""); } else { sdf = new SimpleDateFormat("HH:mm:ss"); java.sql.Date qtv = (java.sql.Date) value; d = new Date(qtv.getTime()); o.put(key, sdf.format(d)); } break; case DATETOSTRINGDATE: if (value == null){ o.put(key,""); } else { sdf = new SimpleDateFormat("yyyy-MM-dd"); java.sql.Date qdv = (java.sql.Date) value; d = new Date(qdv.getTime()); o.put(key, sdf.format(d)); } break; case DATETOSTRINGDATETIME: if (value == null){ o.put(key,""); } else { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); java.sql.Date qdtv = (java.sql.Date) value; d = new Date(qdtv.getTime()); o.put(key, sdf.format(d)); } break; case STRINGTOTIMESTAMP: case STRINGTODATE: if (value == null){ o.put(key,null); } else { sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sdv = (String) value; d = sdf.parse(sdv); o.put(key, d); } break; case STRINGTOFLOAT: if (value == null){ o.put(key,null); } else { String sfv = (String) value; o.put(key, new Float(sfv)); } break; case STRINGTOINTEGER: if (value == null){ o.put(key,null); } else { String siv = (String) value; o.put(key, new Integer(siv)); } break; case DATETODATE: if (value == null){ o.put(key,null); } else { java.sql.Date qd = (java.sql.Date) value; d = new Date(qd.getTime()); o.put(key, d); } break; case TIMESTAMPTODATE: if (value == null){ o.put(key,null); } else { java.sql.Timestamp qt = (Timestamp) value; d = new Date(qt.getTime()); o.put(key, d); } break; case STRINGTOSTRING: if (value == null){ o.put(key,""); } else { o.put(key, value); } break; case UNCHANGE: o.put(key, value); break; default: o.put(key, value); break; } } return o; }
//Excel 工具类
public static Workbook openForWrite(String fileName) throws IOException { File file = new File(fileName); Workbook wb; InputStream is; try { is = new FileInputStream(file); } catch (FileNotFoundException e) { return null; } String ext = BaseUtil.getExtendName(fileName); if (".xls".equals(ext)) { wb = new HSSFWorkbook(is); } else if (".xlsx".equals(ext)) { wb = new XSSFWorkbook(is); } else { return null; } return wb; }
//写入Row
public static void writeRow(Workbook wb,Row row,JSONObject value,String[] fields){ DataFormat format = wb.createDataFormat(); //--->单元格内容格式 //样式1 CellStyle style = wb.createCellStyle(); // 样式对象 style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直 style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平 style.setWrapText(true); //设置是否能够换行,能够换行为true style.setBorderBottom((short) 1); //设置下划线,参数是黑线的宽度 style.setBorderLeft((short) 1); //设置左边框 style.setBorderRight((short) 1); //设置有边框 style.setBorderTop((short) 1); //设置下边框 style.setDataFormat(format.getFormat("¥#,##0")); //--->设置为单元格内容为货币格式 style.setDataFormat(format.getFormat("@")); Font font = wb.createFont(); font.setFontHeightInPoints((short) 10); //--->设置字体大小 font.setFontName("Courier New"); //---》设置字体,是什么类型例如:宋体 font.setItalic(true); //--->设置是否是加粗 style.setFont(font); //--->将字体格式加入到style1中 for(int i = 0;i < fields.length;i++){ Cell cell = row.createCell(i); cell.setCellStyle(style); String key = fields[i]; String v = value.getString(key); cell.setCellValue(v); } }
//保存一个new File
public static void saveAsNewFile(String fileName,Workbook wb) throws IOException { OutputStream os = new FileOutputStream(fileName); wb.write(os); os.close(); }
//下载download
public static void download(HttpServletResponse response,File f,String contentType,String fileName){ download(response, f, contentType, fileName, 8192); }