POI导入excel,包括前端js代码

已实现导入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;
    }

}









  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值