1.由于采用的Js是ExtJs,故前端引入的应该是:{text : ' 导入 ', action:' payImport '}
2.在MainController中,写入 " button[action=payImport] ":{click:this.payImport},由此引入
payImport : function(button){
Ext.widget(" importPayWindow ");
}
3.在Ext中创立ImportPayWindow.js ,并创建以下代码:
Ext.define(' yucen.view.main.pay.ImportPayWindow ' ,{
extend: 'Ext.window.Window',
alias: 'widget.importPayWindow',
title: '导入内容',
id:'importPayWindow',
modal:true,
width:500,
layout: 'form',
autoShow: true,
functionModulesComp:null,
initComponent: function() {
var me=this;
this.items =[
{
xtype: 'form',
border: false,
layout: {
type: 'vbox',
align: 'center'
},
items: [
{xtype:'label',id:'importPayShowLabel',margin:'20 0 40 0',html:'批量导入前请先下载模板文件<br>请按照模板格式编辑设备内容'},
{xtype:'label',id:'importPayHref',margin:'0 0 40 00',html:'<a href="'+ctx+'/paymentOrder/exportPayModel'+'">下载模板</a>'},
{xtype:'button',margin:'0 0 100 00',text:'下一步',
handler:function(){
Ext.getCmp('importPayShowLabel').setText('请选择您编辑好的模板并上传');
Ext.getCmp('importPayHref').setVisible(false);
this.setVisible(false);
Ext.getCmp('importPayUpLoad').setVisible(true);
}},
{xtype:'button',margin:'0 0 100 00',id:'importPayUpLoad',hidden:true,text:'上传',
handler:function(){
Ext.query('input[name="importPaysXls"]')[0].click();
}},
{
xtype: 'fileuploadfield',
width: 295,
emptyText: '',
hidden:true,
name:'importPaysXls',
buttonCfg: {
text: '浏览',
iconCls: 'icon-upload'
},
listeners: {
'change': function () {
var uploadForm = this.up('form')
.getForm();
var form = this.up('form');
if (uploadForm.isValid()) {
uploadForm.submit({
url: ctx+'/paymentOrder/importPays',
method: 'post',
//waitMsg: '正在上传...',
success: function (form, action) {
Ext.getStore('Message').load();
var result = Ext.decode(action.response.responseText);
console.log(result);
var successNumber = result.successNumber;
var failureNumber = result.failureNumber;
var data = "";
me.destroy();
var usernameField=result.usernameField;
if (data == "") {
Ext.Msg.alert('确认', '成功上传' + successNumber + '条数据,失败' + failureNumber + '条数据');
} else {
Ext.Msg.alert('警告', '成功上传' + successNumber + '条数据,失败' + failureNumber + '条数据' + data);
}
}
});
} else {
Ext.Msg.alert("", "");
}
}
}
}
]
}
];
this.callParent(arguments);
}
});
4.创建一个Controllor,比如 PaymentOrderController,则需要写入两个接口。分别是 exportPayModel和importPays。
@RequestMapping("/exportPayModel")
@ResponseBody
public void exportPayModel(HttpServletRespose response){
//生成提示信息
response.setContentType(" application/vnd.ms-excel ");
String codedFileName = null;
OutputStream fOut = null;
SimpleDateFormat yyyyMMddHHmmss = new SimpleDateFormat(Constants.SHORT_DATE_FORMAT);
String date= yyyyMMddHHmmss.format(System.currentTimeMillis()) ;
try{
//进行转码,使其支持中文文件名
codeFileName = java.net.URLEncoder.encode(" 信息导入模板 "," UTF-8 ");
response.setHeader(" content-disposition " , " attachment : filename = " + codeFileName + " .xlsx ");
//产生工作簿对象
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFCellStyle stringStyle = workbook.createCellStyle();
stringStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
XSSFDataFormat format = workbook.createDataFormat();
Font ztFont = workbook.createFont();
ztFont.setFontHeightInPoints((short)16); //设置字体大小
ztFont.setColor(Font.COLOR_NORMAL);
ztFont.setFontName("宋体");
stringStyle.setFont(ztFont);
//产生工作表对象
Sheet sheet = workbook.createSheet();
sheet.setDefaultColumnWidth(20);
Row header = sheet.createRow(0); //第0行
//产生标题列
Cell headerCell = header.createCell(0);
Cell headerCell1 = header.createCell(1);
Cell headerCell2 = header.createCell(2);
Cell headerCell3 = header.createCell(3);
Cell headerCell4 = header.createCell(4);
headerCell.setCellValue(" 手机号码 ");
headerCell1.setCellValue(" 姓名 ");
headerCell2.setCellValue(" 楼盘名称 ");
headerCell3.setCellValue(" 支付方式 ");
headerCell4.setCellValue(" 支付金额 ");
// headerCell.setCellStyle(stringStyle);
// headerCell1.setCellStyle(stringStyle);
// headerCell2.setCellStyle(stringStyle);
// headerCell3.setCellStyle(stringStyle);
// headerCell4.setCellStyle(stringStyle);
Row row1 = sheet.createRow(1); //创建一行
row1.createCell(0).setCellValue(" 第一条 ");
Row row2 = sheet.createRow(2); //创建一行
row2.createCell(0).setCellValue(" 第二条 ");
Row row3 = sheet.createRow(3); //创建一行
row3.createCell(0).setCellValue(" 第三条 ");
// System.out.println("size="+stocks.size());
// for (int i = 0; i < 3; i++) {
//
// Row row = sheet.createRow(i + 1);//创建一行
// row.createCell(0).setCellValue("内容"+(i+1));
//
//
// }
fOut = response.getOutputStream();
workbook.write(fOut);
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try{
fOut.flush();
fOut.close();
} catch (IOException e){
e.printSatckTrace();
} catch (NullPointerException ne){
ne.printStackTrace();
}
}
}
@RequestMapping("/importPays")
public void importCommentSensitiveWord(@RequestParam(value = " importPaysXls ",required = false) MultipartFile file ,HttpServletResponse response) throws Exception{
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.length() - 3 , fileName.length());
int successNumber = 0;
int failureNumber = 0;
String dataField ="";
if("xls".equals(fileType)||"lsx".equals(fileType)) { // 上传文件是excel时 文件文件后缀名为xls
List<String[]> list = new UpLoadExcel().getExcelTest(file.getInputStream());
if(list.size() > 0){
String[] str = null;
if (dataField.equals("")) {
for (int i = 1; i < list.size(); i++) {
str = list.get(i);
if (str[0] != null && !"".equals(str[0])) {
PaymentOrder paymentOrder=new PaymentOrder();
paymentOrder.setClientUserPhoneNumber(str[0]);
paymentOrder.setClientUserName(str[1]);
paymentOrder.setPrice(Double.valueOf(str[4]));
paymentOrderManager.createPaymentOrderOffline(paymentOrder);
successNumber += 1;
}
}
}
}
}
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("text/html;charset=UTF-8");
response.getOutputStream().println("{\"success\":true,\"successNumber\":" + successNumber + ",\"failureNumber\":\"" + failureNumber + "\",\"data\":\"" + dataField + "\"}");
}
5.在第二个接口中,即/importPays,有用到过1个方法: paymentOrderManager.createPaymentOrderOffline(paymentOrder);
因此需要创建一个service和hibernate来实现这个方法。接口均给予省略。
service的Impl中:
@Override
public PaymentOrder createPaymentOrderOffline(PaymentOrder paymentOrder){
paymentOrder.setPayment(true);
paymentOrder.setCreationTime(new Date());
paymentOrder.setId(null);
paymentOrder.setPaymentSource(PaymentOrder.PaymentSource.none);
paymentOrder.setPaymentType(PaymentOrder.PaymentType.offline);
return paymentOrderDao.save(paymentOrder);
之后的save方法在hibernate中实现即可。
以下为效果图: