已实现导入excel,包括前端js,ajax代码
js代码、
window.uploadRegisterTableRest = function () {
//获取文件输入框对象
var fileInput = $('#getFile_registerTable');
if (!fileInput.val()) {
$FN.alert('请选则要上传的Excel文件');
return;
}
// Get the server URL.
var serverUrl = location.origin + "/" + location.pathname.split('/')[1];
var parts = fileInput[0].value.split('\\');
var fileName = parts[parts.length - 1];
// Construct the endpoint.
var fileCollectionEndpoint = serverUrl + "/api/petitionLetter/upload/registerTable/" + fileName;
var file = $('#getFile_registerTable')[0].files[0];
$('#leadInPL_Y').attr("disabled",true); //设置导入按钮不可用
$.ajax({
url: fileCollectionEndpoint,
type: 'POST',
data: file,
contentType: "multipart/form-data",
processData: false,
cache: false
}).always(function (response, textStatus, error) {
if ('success' == textStatus) {
$FN.alert("导入成功");
$('#query_button').click();
} else {
$FN.alert("导入失败");
}
fileInput.val('');
$('#leadInPL_Y').attr("disabled",false);
});
}
HTML代码
<input id="getFile_br" type="file" class="btn-info" accept="application/vnd.ms-excel" />
<f:ajax execute="js-reset-file-name">
<h:commandButton id="leadInBR" value="导入信息" title="导入信息"
οnclick="uploadBreakRuleFileRest()" styleClass="btn btn-sm btn-info btn-round" type="button">
</h:commandButton>
</f:ajax>
Java代码
package com.taiji.apps.petition.extend;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import com.taiji.apps.Global;
import com.taiji.apps.base.comm.CalculateEventCountThread;
import com.taiji.apps.base.jw.br.domain.BreakRule;
import com.taiji.apps.base.jw.br.service.BreakRuleService;
import com.taiji.apps.base.personnel.domain.Personnel;
import com.taiji.apps.base.personnel.domain.PersonnelVO;
import com.taiji.apps.base.personnel.service.PersonnelService;
import com.taiji.apps.base.utility.DateUtil;
@Path("/breakRule")
public class BreakRuleRest implements Serializable {
private static final long serialVersionUID = 272848829992274622L;
@EJB
private BreakRuleService breakRuleService;
@EJB
private PersonnelService perService;
/*@Inject
private CommService commService;*/
@EJB
private CalculateEventCountThread eCThread;
@POST
@Path("/upload/{filename}")
@Produces(MediaType.TEXT_PLAIN + ";charset=utf-8")
@Consumes({ "application/x-www-form-urlencoded", "multipart/form-data" })
public Object uploadFile(InputStream uploadInputStream,
@PathParam("filename") String filename) {
File file = new File(filename);
FileOutputStream outputStream = null;
FileInputStream inputStream = null;
try {
outputStream = new FileOutputStream(file);
int read = 0;
byte[] bytes = new byte[1024];
while ((read = uploadInputStream.read(bytes)) != -1) {
outputStream.write(bytes, 0, read);
}
inputStream = new FileInputStream(file);
POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream);
Workbook workbook = new HSSFWorkbook(poifsFileSystem);
Sheet sheet = workbook.getSheetAt(0);
int rowStart = sheet.getFirstRowNum() + 1;
int rowEnd = sheet.getLastRowNum();
for (int i = rowStart; i <= rowEnd; i++) {
Row row = sheet.getRow(i);
BreakRule breakRule = this.getBreakRuleFromRow(row);
if (breakRule != null) {
//与用户信息匹配
breakRule = matchPersonnel(breakRule);
this.breakRuleService.saveBreakRule(breakRule);
}
}
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
if (inputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (uploadInputStream != null) {
try {
uploadInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return true;
}
/**
* 根据人员的单位、姓名匹配人员信息
*/
private BreakRule matchPersonnel(BreakRule breakRule){
String name = breakRule.getName();
String departmentName = breakRule.getUnit();
PersonnelVO vo = new PersonnelVO(name, departmentName);
List<Personnel> perList = perService.getPersonnels(vo);
if (null!=perList && perList.size()==1) {
breakRule.setPerId(perList.get(0).getId());
breakRule.setUnitId(perList.get(0).getDepartment().getId());
//维护数量信息
//commService.calculateEventCount(perList.get(0).getId(), Global.DATA_TYPE_BR);
eCThread.queueAddElement(perList.get(0).getId(), Global.DATA_TYPE_BR);
}
return breakRule;
}
private BreakRule getBreakRuleFromRow(Row row) {
if (row == null)
return null;
int current = row.getFirstCellNum();
Cell cell = row.getCell(current);
if (null != cell && StringUtils.isNotBlank(cell.toString())) {
BreakRule breakRule = new BreakRule();
breakRule.setLeadInTimeStamp(new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date()));
breakRule.setType(Global.DATA_TYPE_BR);
breakRule.setName(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setUnit(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setPostLevel(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setPost(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setSex(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setQueType(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setEnteringDate(DateUtil.parse(readStringExcelCell(cell)));
current++;
cell = row.getCell(current);
breakRule.setBasicLeaderType(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setBreakRuleDate(DateUtil.parse(readStringExcelCell(cell)));
current++;
cell = row.getCell(current);
breakRule.setQueDetail(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setPartyDisposal(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setPartyDispDate(DateUtil.parse(readStringExcelCell(cell)));
current++;
cell = row.getCell(current);
breakRule.setPartyDispUnit(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setOrgDisposal(readStringExcelCell(cell));
current++;
cell = row.getCell(current);
breakRule.setOrgDispDate(DateUtil.parse(readStringExcelCell(cell)));
current++;
cell = row.getCell(current);
breakRule.setOrgDispUnit(readStringExcelCell(cell));
return breakRule;
}
return null;
}
private String readStringExcelCell(Cell cell) {
String strExcelCell = "";
if (null != cell) { // add this condition
switch (cell.getCellType()) {
case Cell.CELL_TYPE_FORMULA:
strExcelCell = "FORMULA";
break;
case Cell.CELL_TYPE_NUMERIC:
if (org.apache.poi.ss.usermodel.DateUtil
.isCellDateFormatted(cell)) {
double d = cell.getNumericCellValue();
Date date = org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(d);
strExcelCell = DateUtil.format(date, DateUtil.timePattern2);
break;
}
strExcelCell = String.valueOf(cell.getNumericCellValue());
break;
case Cell.CELL_TYPE_STRING:
strExcelCell = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BLANK:
strExcelCell = "";
break;
default:
strExcelCell = "";
break;
}
}
return strExcelCell;
}
}
public class BreakRule implements Serializable {
private static final long serialVersionUID = 1L;
@Getter @Setter
@Id
@GeneratedValue(generator = "generator")
@GenericGenerator(name = "generator", strategy = "uuid2")
private String id;
@Getter @Setter
@Column(name = "POST_LEVEL")
private String postLevel;
@Getter @Setter
@Column(name = "PARTY_DISPOSAL")
private String partyDisposal;
@Getter @Setter
@Column(name = "QUE_DETAIL")
private String queDetail;
@Getter @Setter
@Column(name = "QUE_TYPE")
private String queType;
@Getter @Setter
@Column(name = "BREAK_RULE_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date breakRuleDate;
@Getter @Setter
@Column(name = "ORG_DISPOSAL")
private String orgDisposal;
@Getter @Setter
private String unit;
@Getter @Setter
@Column(name = "ENTERING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date enteringDate;
@Getter @Setter
@Column(name = "BASIC_LEADER_TYPE")
private String basicLeaderType;
@Getter @Setter
@Column(name = "PARTY_DISP_UNIT")
private String partyDispUnit;
@Getter @Setter
@Column(name = "ORG_DISP_UNIT")
private String orgDispUnit;
@Getter @Setter
@Column(name = "ORG_DISP_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date orgDispDate;
@Getter @Setter
private String sex;
@Getter @Setter
private String post;
@Getter @Setter
private String name;
@Getter @Setter
private String type;
@Getter @Setter
@Column(name = "PARTY_DISP_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date partyDispDate;
@Getter @Setter
@Column(name = "LEAD_IN_TIME_STAMP")
private String leadInTimeStamp;
@Getter @Setter
@Column(name="USER_ID")
private String perId;
@Getter @Setter
@Column(name="UNIT_ID")
private String unitId;
@Override
public Object retrieveId() {
return this.id;
}
}