1、pom文件加入,此处目前测试3.0.3版本可以无bug,3.2.0不行
http://easypoi.mydoc.io/#text_202979
cn.afterturn
easypoi-base
3.0.3
cn.afterturn
easypoi-web
3.0.3
cn.afterturn
easypoi-annotation
3.0.3
2、
3、实体类
package com.ps.uzkefu.apps.callcenter.entity;
import java.text.SimpleDateFormat;
import java.util.Date;
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.annotation.ExcelTarget;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.ps.uzkefu.base.BaseEntity;
import com.ps.uzkefu.util.DateUtil;
/**
*
* 通话记录
*
*
* @author ZhuShangJin
* @since 2018-06-27
*/
@TableName("t_call_call_record")
@ExcelTarget("id")
public class CallRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 外呼或来电的唯一id
*/
@TableField("call_id")
public String callId;
/**
* 坐席的用户id
*/
@TableField("user_name")
public String userName;
/**
* 呼叫类型 0:呼出 1:呼入
*/
@TableField("call_type")
public int callType;
/**
* 主叫号码
*/
@TableField("from_num")
@Excel(name = "来电号码")
public String fromNum;
/**
* 被叫号码
*/
@TableField("to_num")
public String toNum;
/**
* 呼叫开始时间
*/
@Excel(name = "来电时间", format = "yyyy-MM-dd HH:mm:ss")
@TableField("call_time")
public Date callTime;
/**
* ivr语音导航开始时间
*/
@TableField("ivr_time")
public Date ivrTime;
/**
* 应答时间
*/
@TableField("answered_time")
public Date answeredTime;
/**
* 挂机时间
*/
@Excel(name = "挂断时间",format = "yyyy-MM-dd HH:mm:ss")
@TableField("hangup_time")
public Date hangupTime;
/**
* 振铃时长
*/
@Excel(name = "振铃时长(秒)")
@TableField("ring_length")
public int ringLength;
/**
* ivr语音导航时长
*/
@TableField("ivr_length")
public int ivrLength;
/**
* 来电在队列中等待的时间
*/
@TableField("queue_length")
public int queueLength;
/**
* 通话时长
*/
@TableField("talk_length")
public Integer talkLength;
/**
* 通话录音文件
*/
public String record;
/**
* 用户满意度 -1:未评价 其余为用户评价时的按键
*/
@Excel(name = "满意度",replace = {"未评价_1", "不满意_2"})
public Integer satisfaction;
/**
* 分机号码
*/
@TableField("extension_num")
public int extensionNum;
/**
* 中继号
*/
@TableField("trunk_num")
public String trunkNum;
/**
* 客户id
*/
@TableField("customer_id")
public String customerId;
/**
* 客户电话
*/
@TableField("customer_phone")
public String customerPhone;
/**
* 客户电话归属地
*/
@TableField("customer_city")
public String customerCity;
@TableField("group_num")
public int groupNum;
@TableField("queue_time")
public Date queueTime;
@TableField("ring_time")
public Date ringTime;
@TableField("customer_province")
public String customerProvince;
@TableField(exist = false)
private String callTimeStart;
@TableField(exist = false)
private String talkLengthStart;
@TableField(exist = false)
private String callTimeEnd;
@TableField(exist = false)
private String talkLengthEnd;
@TableField(exist = false)
private String callTimeText;
@TableField(exist = false)
private String hangupTimeText;
@TableField(exist = false)
private String province;
@TableField(exist = false)
private String city;
@TableField("handle_time")
private Date handleTime; //呼损处理时间
@TableField("handle_status")
private Integer handleStatus; //呼损处理状态 0 未处理 1 已处理
@TableField(exist = false)
private String handleTimeText;
@TableField(exist = false)
private String satisfactionText;
@TableField(exist = false)
private String handleStatusText;
public String getCallId() {
return callId;
}
public String getUserName() {
return userName;
}
public int getCallType() {
return callType;
}
public String getFromNum() {
return fromNum;
}
public String getToNum() {
return toNum;
}
public Date getCallTime() {
return callTime;
}
public Date getIvrTime() {
return ivrTime;
}
public Date getAnsweredTime() {
return answeredTime;
}
public Date getHangupTime() {
return hangupTime;
}
public int getRingLength() {
return ringLength;
}
public int getIvrLength() {
return ivrLength;
}
public int getQueueLength() {
return queueLength;
}
public Integer getTalkLength() {
return talkLength;
}
public String getRecord() {
return record;
}
public Integer getSatisfaction() {
return satisfaction;
}
public int getExtensionNum() {
return extensionNum;
}
public String getTrunkNum() {
return trunkNum;
}
public String getCustomerId() {
return customerId;
}
public String getCustomerPhone() {
return customerPhone;
}
public String getCustomerCity() {
return customerCity;
}
public int getGroupNum() {
return groupNum;
}
public Date getQueueTime() {
return queueTime;
}
public Date getRingTime() {
return ringTime;
}
public String getCustomerProvince() {
return customerProvince;
}
public String getCallTimeStart() {
return callTimeStart;
}
public String getTalkLengthStart() {
return talkLengthStart;
}
public String getCallTimeEnd() {
return callTimeEnd;
}
public String getTalkLengthEnd() {
return talkLengthEnd;
}
public String getCallTimeText() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(callTime);
}
public String getHangupTimeText() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(hangupTime);
}
public void setCallId(String callId) {
this.callId = callId;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setCallType(int callType) {
this.callType = callType;
}
public void setFromNum(String fromNum) {
this.fromNum = fromNum;
}
public void setToNum(String toNum) {
this.toNum = toNum;
}
public void setCallTime(Date callTime) {
this.callTime = callTime;
}
public void setIvrTime(Date ivrTime) {
this.ivrTime = ivrTime;
}
public void setAnsweredTime(Date answeredTime) {
this.answeredTime = answeredTime;
}
public void setHangupTime(Date hangupTime) {
this.hangupTime = hangupTime;
}
public void setRingLength(int ringLength) {
this.ringLength = ringLength;
}
public void setIvrLength(int ivrLength) {
this.ivrLength = ivrLength;
}
public void setQueueLength(int queueLength) {
this.queueLength = queueLength;
}
public void setTalkLength(Integer talkLength) {
this.talkLength = talkLength;
}
public void setRecord(String record) {
this.record = record;
}
public void setSatisfaction(Integer satisfaction) {
this.satisfaction = satisfaction;
}
public void setExtensionNum(int extensionNum) {
this.extensionNum = extensionNum;
}
public void setTrunkNum(String trunkNum) {
this.trunkNum = trunkNum;
}
public void setCustomerId(String customerId) {
this.customerId = customerId;
}
public void setCustomerPhone(String customerPhone) {
this.customerPhone = customerPhone;
}
public void setCustomerCity(String customerCity) {
this.customerCity = customerCity;
}
public void setGroupNum(int groupNum) {
this.groupNum = groupNum;
}
public void setQueueTime(Date queueTime) {
this.queueTime = queueTime;
}
public void setRingTime(Date ringTime) {
this.ringTime = ringTime;
}
public void setCustomerProvince(String customerProvince) {
this.customerProvince = customerProvince;
}
public void setCallTimeStart(String callTimeStart) {
this.callTimeStart = callTimeStart;
}
public void setTalkLengthStart(String talkLengthStart) {
this.talkLengthStart = talkLengthStart;
}
public void setCallTimeEnd(String callTimeEnd) {
this.callTimeEnd = callTimeEnd;
}
public void setTalkLengthEnd(String talkLengthEnd) {
this.talkLengthEnd = talkLengthEnd;
}
public void setCallTimeText(String callTimeText) {
this.callTimeText = callTimeText;
}
public void setHangupTimeText(String hangupTimeText) {
this.hangupTimeText = hangupTimeText;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public Date getHandleTime() {
return handleTime;
}
public void setHandleTime(Date handleTime) {
this.handleTime = handleTime;
}
public Integer getHandleStatus() {
return handleStatus;
}
public void setHandleStatus(Integer handleStatus) {
this.handleStatus = handleStatus;
}
public String getHandleTimeText() {
if (this.handleTime == null){
return "";
}else {
return DateUtil.convert(this.handleTime,"yyyy-MM-dd HH:mm:ss");
}
}
public void setHandleTimeText(String handleTimeText) {
this.handleTimeText = handleTimeText;
}
public String getSatisfactionText() {
if (satisfaction == null || satisfaction == -1){
return "未评价";
}else if(satisfaction==0){
return "不满意";
}else{
return "满意";
}
}
public void setSatisfactionText(String satisfactionText) {
this.satisfactionText = satisfactionText;
}
public String getHandleStatusText() {
if (satisfaction == null || satisfaction == 0){
return "未处理";
}else if (satisfaction == 1){
return "已处理";
}else {
return "未处理";
}
}
public void setHandleStatusText(String handleStatusText) {
this.handleStatusText = handleStatusText;
}
@Override
public String toString() {
return "CallRecord{" +
", callId=" + callId +
", userName=" + userName +
", callType=" + callType +
", fromNum=" + fromNum +
", toNum=" + toNum +
", callTime=" + callTime +
", ivrTime=" + ivrTime +
", answeredTime=" + answeredTime +
", hangupTime=" + hangupTime +
", ringLength=" + ringLength +
", ivrLength=" + ivrLength +
", queueLength=" + queueLength +
", talkLength=" + talkLength +
", record=" + record +
", satisfaction=" + satisfaction +
", extensionNum=" + extensionNum +
", trunkNum=" + trunkNum +
", customerId=" + customerId +
", customerPhone=" + customerPhone +
", customerCity=" + customerCity +
"}";
}
}
4、工具类
package com.ps.uzkefu.util;
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import cn.afterturn.easypoi.excel.ExcelImportUtil;
import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.afterturn.easypoi.excel.entity.ImportParams;
import cn.afterturn.easypoi.excel.entity.enmus.ExcelType;
import com.ps.uzkefu.apps.callcenter.entity.CallRecord;
import net.sf.jxls.transformer.XLSTransformer;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.NoSuchElementException;
/**
* Excel模板导出工具类
*
* @author WuZhiWei@HF
* @since 2015-4-16
*/
@Component
public class ExcelTemplateExportUtil {
static Log log = LogFactory.getLog(ExcelTemplateExportUtil.class);
/**
* 生成导出的Excel文件,并返回导出Excel文件的输入流
* 生成的Excel文件是Excel 2003版本的
*
* @param tmpFilePath 临时文件存储路径
* @param templateFilePath 导出模版的路径地址,例如:/WEB-INF/page/export/***.xls
* @param dataList 要导出的数据列表
* @param fileName 文件名称
*/
public static void export(HttpServletRequest request, HttpServletResponse response, String tmpFilePath, String templateFilePath, List> dataList,String fileName) {
Assert.hasLength(templateFilePath, "Template file path is empty while get export excel file input stream !");
Assert.notNull(dataList, "Data list is empty while get export excel file input stream !");
Map paramMap = new HashMap();
paramMap.put("dataList", dataList);
XLSTransformer transformer = new XLSTransformer();
try {
String tempFilePath = tmpFilePath +"/"+ UUIDUtil.genUUID() + ".xls";
templateFilePath = ClassUtils.getDefaultClassLoader().getResource("").getPath() + templateFilePath;
transformer.transformXLS(templateFilePath, paramMap, tempFilePath);
FileInputStream inputStream = new FileInputStream(tempFilePath);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes(),"ISO8859-1"));
OutputStream outputStream = response.getOutputStream();
int ch;
while ((ch = inputStream.read()) != -1) {
outputStream.write(ch);
}
outputStream.flush();
outputStream.close();
} catch (Exception e) {
log.error("Exception occurred while get export excel file input stream !", e);
}
}
/**
*
* @param list 导出的数据
* @param title excel文件内容的标题
* @param sheetName sheet 名称
* @param pojoClass 对应的实体类
* @param fileName 文件名 包含后缀名
* @param isCreateHeader
* @param response 响应对象 用于下载
*/
public static void exportExcel(List> list, String title, String sheetName, Class> pojoClass,String fileName,boolean isCreateHeader, HttpServletResponse response){
ExportParams exportParams = new ExportParams(title, sheetName);
exportParams.setCreateHeadRows(isCreateHeader);
defaultExport(list, pojoClass, fileName, response, exportParams);
}
public static void exportExcel(List> list, String title, String sheetName, Class> pojoClass,String fileName, HttpServletResponse response){
defaultExport(list, pojoClass, fileName, response, new ExportParams(title, sheetName));
}
public static void exportExcel(List
5、导入的文件
2.5 Map导入,自由发挥
这天,老师把路飞叫到办公室,总是被叫,能者的悲哀啊,让他临时导入一批数据,到数据库,但是中间需要处理一些字段逻辑没办法直接导入到数据库, 这时路飞首先想到构造一个bean然后标记注解,导入处理对象,但是想想一次的对象太过于浪费,不如用map试试,获取map处理map也是一样的 导入的逻辑就变成了
ImportParams params = new ImportParams();
long start = new Date().getTime();
List> list = ExcelImportUtil.importExcel(
new File(PoiPublicUtil.getWebRootPath("import/check.xls")), Map.class, params);
导入后,处理每个map,然后入库完美的解决了老师的需求,简单更快捷,和bean导入基础没有区别,省去了bean的构造时间