package com.bashao.flex4server.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.bashao.flex4server.poi.ReadExcelUtil;
import com.ibeifeng.po.Employee;
import com.ibeifeng.po.Organise;
import com.ibeifeng.po.Question;
import com.ibeifeng.po.Role;
import com.ibeifeng.po.Store;
import com.ibeifeng.service.IEmployeeService;
import com.ibeifeng.service.IOrganiseService;
import com.ibeifeng.service.IRoleService;
/**
* \ 使用中
*
* @author Administrator
*
*/
public class FileUploadForUser extends HttpServlet {
private IOrganiseService organiseService;
private IEmployeeService employeeService;
private IRoleService roleService;
// private IExamService examService;
// private IPointService pointService;
// private ITypeService typeService;
// private IStoreService storeService;
private int maxPostSize = 10 * 1024 * 1024 * 100; // 最大1000M
public FileUploadForUser() {
super();
}
public void destroy() {
super.destroy(); //
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String uploadPath = "";
System.out.println("开始上传==============");
response.setContentType("text/html;charset=UTF-8");
// uploadPath=request.getContextPath();
uploadPath = request.getRealPath("/") + "/uploadfile";
System.out.println("uploadPath====" + uploadPath);
File file = new File(uploadPath);
if (!file.exists()) {
try {
file.mkdir();
} catch (Exception e) {
e.printStackTrace();
uploadPath = "c:\\flex_upload\\";
file = new File(uploadPath);
if (!file.exists()) {
file.mkdir();
}
}
}
File folder = new File(uploadPath);
if (!folder.exists()) {
folder.mkdir();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
upload.setSizeMax(maxPostSize);
try {// 请求过来的 元素; 可能不止是一个;有其他元素;
List<FileItem> fileItems = upload.parseRequest(request);
Iterator<FileItem> iter = fileItems.iterator();
String aaaaa = request.getParameter("storeid");
System.out.println(aaaaa);
String path = request.getRequestURI();
System.out.println("requesturl=" + path);
Store store = null;
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {// 按照顺序排序的; form 表单里面 先写的input hidden ;
// 后写的excel;
// String name = item.getFieldName();
// String storeID = item.getString();
// storeID = storeID.replaceAll("node_", "");
// System.out.println("---------------" + storeID);
// store = (Store) this.storeService.findById(Integer
// .parseInt(storeID));
}
if (!item.isFormField()) {// isFormField判断是不是普通字段; 普通返回true
String name = item.getName();// 也就是excel文件名字上传字段的文件名;EXCEL12.xls
System.out.println(name);
String newFileName = "people"
+ name.substring(name.indexOf('.'));
try {
File excel = new File(uploadPath + newFileName);
List<String> msgList = new ArrayList<String>();
item.write(excel);// 将FeileiTem 保存的主体内容保存到指定文件中; 拷贝;
Integer successNumber = 0;
successNumber = readDataFromExcel(msgList, excel,
store, successNumber, request, response);
response.setContentType("text/html;charset=UTF-8");
// response.getWriter().print(
// "<script>window.parent.uploadSuccess('上传成功');</script>");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String alertInfo = "";
alertInfo = "本次人员上传数量为:" + successNumber;
if (msgList.size() > 0) {
alertInfo += " 系统提示:";
}
if (msgList.size() > 0) {
for (String info : msgList) {
alertInfo += info + ",";
}
alertInfo = alertInfo.substring(0,
alertInfo.length() - 1);
}
// request.setAttribute("alertInfo", alertInfo);
//
// request.getRequestDispatcher("/exam2/admin/user/addUser.jsp").forward(request,
// response);
// out
// .println("<script>alert(\""
// + alertInfo
// + "\");"
// +
// "window.location='../admin/user/addUser.jsp';</script>");
// out.println("<script>alert(\""
// + alertInfo
// + "\");" +
// "window.location='../admin/question/addUser.jsp';</script>");
out.println("<script>alert(\""
+ alertInfo
+ "\");"
+ "window.location='../admin/question/addUser.jsp';</script>");
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传失败==============");
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(\"上传失败。"
+ e.getMessage()
+ "\");window.location='../admin/user/addUser.jsp'</script>");
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(\"上传失败。" + e.getMessage()
+ "\")</script>");
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (Exception e) {
}
// Date date = new Date();
// response.sendRedirect("/admin/user/addUser.jsp?date=" +
// date.getTime());
}
private Organise hasSameOrgName(String name, List<Organise> orglist) {
if (orglist != null && orglist.size() > 0) {
for (Organise org : orglist) {
if (org.getName().equals(name)) {
return org;
}
}
}
return null;
}
private Integer readDataFromExcel(List<String> msgList, File excel,
Store store, Integer successNumer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
List<Question> questionlist = new ArrayList<Question>();// 用于盛放question;
List<String> workTypeList = (List<String>) request.getSession()
.getAttribute("workTypeList");
if (workTypeList == null || workTypeList.size() == 0) {
return 0;
}
DetachedCriteria dc = DetachedCriteria.forClass(Organise.class);
List<Organise> organiseList = (List<Organise>) this.organiseService
.findByCriteria(0, Integer.MAX_VALUE, dc);
try {
// 最后update;setStore();
List<Object> list = new ArrayList<Object>();
File f = excel;
HSSFWorkbook workbook = null;
HSSFSheet sheet = null;// 工作表;
FileInputStream fis = null;
List<String> titleList = new ArrayList<String>();
try {
fis = new FileInputStream(f);
workbook = new HSSFWorkbook(fis);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
msgList.add("请检查excel版本是否符合要求");
if (fis != null) {
try {
fis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return 0;
}
int sheetCount = workbook.getNumberOfSheets();// 页数 sheet 数 12页
for (int sheetindex = 0; sheetindex < 1; sheetindex++) {
sheet = workbook.getSheetAt(sheetindex);
int rows = sheet.getPhysicalNumberOfRows();// rows==6
rows = sheet.getLastRowNum() + 1;// 否则会少一条数据;
HSSFRow firstRow = sheet.getRow(0);
if (firstRow == null) {
msgList.add("第一行必须是标题且不能为空");
// throw new RuntimeException("第一行必须是标题且不能为空");
return 0;
}
Integer cellCount = 0;
if (firstRow != null) {
Integer cellLength = sheet.getRow(0)
.getPhysicalNumberOfCells();
for (int i = 0; i < cellLength; i++) {
// firstRow.getCell(i);
String cellStr = ReadExcelUtil.getStringByCell(
firstRow.getCell(i)).trim();
if ("".equals(cellStr)) {
continue;
}
cellCount++;
System.out.println(i + cellStr + "\t");
}
if (cellCount == null || (cellCount != 10)) {
msgList.add("列数不正确,根据模板要求,列数必须是10列");
return 0;
} else {
for (int i = 0; i < cellCount; i++) {
String cellStr = ReadExcelUtil.getStringByCell(
firstRow.getCell(i)).trim();
switch (i) {
case 0:
// first row;
if (cellStr.indexOf("工号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 1:
if (cellStr.indexOf("车间") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是车间");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 2:
if (cellStr.indexOf("班组") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是班组");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 3:
if (cellStr.indexOf("姓名") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是姓名");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 4:
if (cellStr.indexOf("性别") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是性别");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
}
break;
case 5:
if (cellStr.indexOf("出生日期") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是出生日期");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 6:
if (cellStr.indexOf("职务") >= 0
|| cellStr.indexOf("工种") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是职务/工种");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
}
break;
case 7:
if (cellStr.indexOf("身份证号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是身份证号");
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 8:
if (cellStr.indexOf("工作证号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工作证号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 9:
if (cellStr.indexOf("工作证编号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工作证编号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
default:
break;
}
}
}
boolean flagerror = false;
outer: for (int i = 1; i < rows; i++) {
Integer optionSize = 0;
HSSFRow row = sheet.getRow(i);
if (i == 7) {
System.out.println();
}
// System.out.println("----------" + (i + 1) +
// "行begin");
// // 如果中间有列为空; 也不计算在内;
if (row == null) {
// continue;
break;
}
System.out.println("---------");
for (int temp = 0; temp < cellCount; temp++) {
System.out.print((i + 1)
+ "测试行"
+ temp
+ "测试列 "
+ ReadExcelUtil.getStringByCell(
row.getCell(temp)).trim() + "\t");
;
}
System.out.println("---------");
// System.out.println("row======" + i + "sheet"
// + sheetindex);
if (row != null) {
Employee employee = null;
List<String> questionOptionlist = null;
for (int temp = 0; temp < cellCount; temp++) {
try {
if (true) {
System.out.print(ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim()
+ "\t");
// String questionOption="";//
// 选项对单选多选有效,其他题型无效。
// 格式为:xx1|xx2|xx3|xx4
System.out.print(i + "haang " + temp
+ "lie ");
switch (temp) {
case 0:
String str0 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str0 == null || str0.equals("")) {
flagerror = true;
msgList.add("工号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
employee = new Employee();
// employeeNumber 工号
str0 = str0.replaceAll("\\.0",
"");
employee.setEmployeeNumber(str0);
}
break;
case 1:
String str1 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str1 == null || str1.equals("")) {
flagerror = true;
msgList.add("车间不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else if (hasSameOrgName(str1,
organiseList) == null) {
flagerror = true;
msgList.add("车间名称在数据库中不存在,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
Organise tempOrg = hasSameOrgName(
str1, organiseList);
if (employee != null) {
employee.setOrganise(tempOrg);
}
}
break;
case 2:
// 班组
String str2 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str2 == null || str2.equals("")) {
flagerror = true;
msgList.add("班组不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
employee.setBanZu(str2);
}
}
break;
case 3:
// 姓名
String str3 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str3 == null || str3.equals("")) {
flagerror = true;
msgList.add("姓名不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
employee.setName(str3);
}
}
break;
case 4:// sex
String str4 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
String questionType = ReadExcelUtil
.getStringByCell(
row.getCell(5))
.trim();
if (str4 == null
|| str4.equals("")
|| (!str4.equals("男") && !str4
.equals("女"))) {
flagerror = true;
msgList.add("性别不能为空且只能为男或者女,请检查第"
+ (i + 1)
+ "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
if ("男".equals(str4)) {
employee.setSex(1);
} else if ("女".equals(str4)) {
employee.setSex(0);
}
}
}
break;
case 5:
String str5 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str5 == null || str5.equals("")) {
// flagerror = true;
//
// msgList.add("出生日期不能为空,请检查第"
// + (i + i) + "行第"
// + (temp + 1) + "列");
// break outer;
}
else {
try {
String data = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")
.format(new SimpleDateFormat(
"yyyy-MM-dd")
.parse(str5));
employee.setBirthday(Timestamp
.valueOf(data));
// employee.setBirthday(new
// Timestamp(new
// SimpleDateFormat("yyyyMMdd").parse(str5).getTime()));
} catch (Exception e) {
// TODO Auto-generated catch
// block
try {
String data = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")
.format(new SimpleDateFormat(
"yyyyMMdd")
.parse(str5));
employee.setBirthday(Timestamp
.valueOf(data));
} catch (Exception e1) {
// TODO Auto-generated
// cat
e1.printStackTrace();
flagerror = true;
msgList.add("出生日期格式有误,请检查第"
+ (i + i)
+ "行第"
+ (temp + 1)
+ "列");
if (fis != null) {
fis.close();
}
break outer;
}
}
}
break;
case 6:
// worktype
String str6 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str6 == null || "".equals(str6)) {
flagerror = true;
msgList.add("职务不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else if (!workTypeList
.contains(str6.trim())) {
// workTypeList.add(str6.trim());
// employee.setWorkType(str6);
flagerror = true;
msgList.add("该工种/职务 未找到,请检查第"
+ (i + 1) + "行第"
+ (temp + 1)
+ "列,工种名称:" + str6);
if (fis != null) {
fis.close();
}
break outer;
} else {
employee.setWorkType(str6);
}
break;
case 7:
String str7 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str7 == null || "".equals(str7)) {
flagerror = true;
msgList.add("身份证号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str7 = str7.replaceAll(
"\\.0", "");
employee.setIdenty(str7);
}
}
break;
case 8:
// option 3
String str8 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str8 == null || "".equals(str8)) {
flagerror = true;
msgList.add("工作证号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str8 = str8.replaceAll(
"\\.0", "");
employee.setWorkNumber(str8);
}
}
break;
case 9:
// option4
String str9 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str9 == null || "".equals(str9)) {
flagerror = true;
msgList.add("工作证编号" + (i + 1)
+ "行第" + (temp + 1)
+ "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str9 = str9.replaceAll(
"\\.0", "");
employee.setGongZuoZhengBianHao(str9);
employee.setState(1);
// 设置为普通用户
Role commonRole = (Role) this.roleService
.findById(1);
employee.setRole(commonRole);
}
this.employeeService
.save(employee);
successNumer++;
}
break;
default:
break;
}
}
// try end;
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("----------");
}
}
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 更新 worktype 的xml 以及session 的 work type
// List<String> workTypeList = (List<String>) request.getSession()
// .getAttribute("workTypeList");
// String xmlPath = request.getRealPath("/") + "\\worktype.xml";
// File file = new File(xmlPath);
// if (!file.exists()) {
// file.mkdirs();
// File file = new File("c:/catalog");
//
// if (!file.exists()) {
// file.mkdirs();
// }
// Document document = DocumentHelper.createDocument();
// Element catalogElement = document.addElement("worktypes");
// document.setXMLEncoding("GBK");
// if (workTypeList != null && workTypeList.size() > 0) {
// for (String str : workTypeList) {
// Element worktypeElement = catalogElement
// .addElement("worktype");
// worktypeElement.setText(str);
// }
// }else{
// Element worktypeElement = catalogElement
// .addElement("worktype");
// worktypeElement.setText("系统初始化工种一");
// }
//
// try {
// XMLWriter output = new XMLWriter(new FileWriter(new File(
// xmlPath)));
// output.write(document);
// output.close();
// } catch (IOException e) {
// System.out.println(e.getMessage());
// }
// try {
// XMLWriter output = new XMLWriter(new FileWriter(new File(
// xmlPath)));
// output.write(document);
// output.close();
// request.getSession().setAttribute("workTypeList", workTypeList);
//
// } catch (IOException e) {
// System.out.println(e.getMessage());
// }
}
return successNumer;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public void init() throws ServletException {
// private IOrganiseService organiseServiceService;
organiseService = (IOrganiseService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"organiseService");
employeeService = (IEmployeeService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"employeeService");
roleService = (IRoleService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"roleService");
}
}
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.XMLWriter;
import org.hibernate.criterion.DetachedCriteria;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.bashao.flex4server.poi.ReadExcelUtil;
import com.ibeifeng.po.Employee;
import com.ibeifeng.po.Organise;
import com.ibeifeng.po.Question;
import com.ibeifeng.po.Role;
import com.ibeifeng.po.Store;
import com.ibeifeng.service.IEmployeeService;
import com.ibeifeng.service.IOrganiseService;
import com.ibeifeng.service.IRoleService;
/**
* \ 使用中
*
* @author Administrator
*
*/
public class FileUploadForUser extends HttpServlet {
private IOrganiseService organiseService;
private IEmployeeService employeeService;
private IRoleService roleService;
// private IExamService examService;
// private IPointService pointService;
// private ITypeService typeService;
// private IStoreService storeService;
private int maxPostSize = 10 * 1024 * 1024 * 100; // 最大1000M
public FileUploadForUser() {
super();
}
public void destroy() {
super.destroy(); //
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
String uploadPath = "";
System.out.println("开始上传==============");
response.setContentType("text/html;charset=UTF-8");
// uploadPath=request.getContextPath();
uploadPath = request.getRealPath("/") + "/uploadfile";
System.out.println("uploadPath====" + uploadPath);
File file = new File(uploadPath);
if (!file.exists()) {
try {
file.mkdir();
} catch (Exception e) {
e.printStackTrace();
uploadPath = "c:\\flex_upload\\";
file = new File(uploadPath);
if (!file.exists()) {
file.mkdir();
}
}
}
File folder = new File(uploadPath);
if (!folder.exists()) {
folder.mkdir();
}
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(4096);
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
upload.setSizeMax(maxPostSize);
try {// 请求过来的 元素; 可能不止是一个;有其他元素;
List<FileItem> fileItems = upload.parseRequest(request);
Iterator<FileItem> iter = fileItems.iterator();
String aaaaa = request.getParameter("storeid");
System.out.println(aaaaa);
String path = request.getRequestURI();
System.out.println("requesturl=" + path);
Store store = null;
while (iter.hasNext()) {
FileItem item = iter.next();
if (item.isFormField()) {// 按照顺序排序的; form 表单里面 先写的input hidden ;
// 后写的excel;
// String name = item.getFieldName();
// String storeID = item.getString();
// storeID = storeID.replaceAll("node_", "");
// System.out.println("---------------" + storeID);
// store = (Store) this.storeService.findById(Integer
// .parseInt(storeID));
}
if (!item.isFormField()) {// isFormField判断是不是普通字段; 普通返回true
String name = item.getName();// 也就是excel文件名字上传字段的文件名;EXCEL12.xls
System.out.println(name);
String newFileName = "people"
+ name.substring(name.indexOf('.'));
try {
File excel = new File(uploadPath + newFileName);
List<String> msgList = new ArrayList<String>();
item.write(excel);// 将FeileiTem 保存的主体内容保存到指定文件中; 拷贝;
Integer successNumber = 0;
successNumber = readDataFromExcel(msgList, excel,
store, successNumber, request, response);
response.setContentType("text/html;charset=UTF-8");
// response.getWriter().print(
// "<script>window.parent.uploadSuccess('上传成功');</script>");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
String alertInfo = "";
alertInfo = "本次人员上传数量为:" + successNumber;
if (msgList.size() > 0) {
alertInfo += " 系统提示:";
}
if (msgList.size() > 0) {
for (String info : msgList) {
alertInfo += info + ",";
}
alertInfo = alertInfo.substring(0,
alertInfo.length() - 1);
}
// request.setAttribute("alertInfo", alertInfo);
//
// request.getRequestDispatcher("/exam2/admin/user/addUser.jsp").forward(request,
// response);
// out
// .println("<script>alert(\""
// + alertInfo
// + "\");"
// +
// "window.location='../admin/user/addUser.jsp';</script>");
// out.println("<script>alert(\""
// + alertInfo
// + "\");" +
// "window.location='../admin/question/addUser.jsp';</script>");
out.println("<script>alert(\""
+ alertInfo
+ "\");"
+ "window.location='../admin/question/addUser.jsp';</script>");
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传失败==============");
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(\"上传失败。"
+ e.getMessage()
+ "\");window.location='../admin/user/addUser.jsp'</script>");
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
out.println("<script>alert(\"上传失败。" + e.getMessage()
+ "\")</script>");
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (Exception e) {
}
// Date date = new Date();
// response.sendRedirect("/admin/user/addUser.jsp?date=" +
// date.getTime());
}
private Organise hasSameOrgName(String name, List<Organise> orglist) {
if (orglist != null && orglist.size() > 0) {
for (Organise org : orglist) {
if (org.getName().equals(name)) {
return org;
}
}
}
return null;
}
private Integer readDataFromExcel(List<String> msgList, File excel,
Store store, Integer successNumer, HttpServletRequest request,
HttpServletResponse response) throws Exception {
List<Question> questionlist = new ArrayList<Question>();// 用于盛放question;
List<String> workTypeList = (List<String>) request.getSession()
.getAttribute("workTypeList");
if (workTypeList == null || workTypeList.size() == 0) {
return 0;
}
DetachedCriteria dc = DetachedCriteria.forClass(Organise.class);
List<Organise> organiseList = (List<Organise>) this.organiseService
.findByCriteria(0, Integer.MAX_VALUE, dc);
try {
// 最后update;setStore();
List<Object> list = new ArrayList<Object>();
File f = excel;
HSSFWorkbook workbook = null;
HSSFSheet sheet = null;// 工作表;
FileInputStream fis = null;
List<String> titleList = new ArrayList<String>();
try {
fis = new FileInputStream(f);
workbook = new HSSFWorkbook(fis);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
msgList.add("请检查excel版本是否符合要求");
if (fis != null) {
try {
fis.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return 0;
}
int sheetCount = workbook.getNumberOfSheets();// 页数 sheet 数 12页
for (int sheetindex = 0; sheetindex < 1; sheetindex++) {
sheet = workbook.getSheetAt(sheetindex);
int rows = sheet.getPhysicalNumberOfRows();// rows==6
rows = sheet.getLastRowNum() + 1;// 否则会少一条数据;
HSSFRow firstRow = sheet.getRow(0);
if (firstRow == null) {
msgList.add("第一行必须是标题且不能为空");
// throw new RuntimeException("第一行必须是标题且不能为空");
return 0;
}
Integer cellCount = 0;
if (firstRow != null) {
Integer cellLength = sheet.getRow(0)
.getPhysicalNumberOfCells();
for (int i = 0; i < cellLength; i++) {
// firstRow.getCell(i);
String cellStr = ReadExcelUtil.getStringByCell(
firstRow.getCell(i)).trim();
if ("".equals(cellStr)) {
continue;
}
cellCount++;
System.out.println(i + cellStr + "\t");
}
if (cellCount == null || (cellCount != 10)) {
msgList.add("列数不正确,根据模板要求,列数必须是10列");
return 0;
} else {
for (int i = 0; i < cellCount; i++) {
String cellStr = ReadExcelUtil.getStringByCell(
firstRow.getCell(i)).trim();
switch (i) {
case 0:
// first row;
if (cellStr.indexOf("工号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 1:
if (cellStr.indexOf("车间") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是车间");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 2:
if (cellStr.indexOf("班组") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是班组");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 3:
if (cellStr.indexOf("姓名") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是姓名");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 4:
if (cellStr.indexOf("性别") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是性别");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
}
break;
case 5:
if (cellStr.indexOf("出生日期") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是出生日期");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 6:
if (cellStr.indexOf("职务") >= 0
|| cellStr.indexOf("工种") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是职务/工种");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
}
break;
case 7:
if (cellStr.indexOf("身份证号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是身份证号");
// throw new
// RuntimeException("表头不正确,请检查第1行第"
// + (i + 1) + "列");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 8:
if (cellStr.indexOf("工作证号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工作证号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
case 9:
if (cellStr.indexOf("工作证编号") >= 0) {
titleList.add(cellStr);
} else {
titleList = new ArrayList<String>();
// msgList.add("表头不正确,请检查第1行第" + (i + 1) +
// "列");
msgList.add("表头不正确,请检查第1行第" + (i + 1)
+ "列必须是工作证编号");
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 0;
}
break;
default:
break;
}
}
}
boolean flagerror = false;
outer: for (int i = 1; i < rows; i++) {
Integer optionSize = 0;
HSSFRow row = sheet.getRow(i);
if (i == 7) {
System.out.println();
}
// System.out.println("----------" + (i + 1) +
// "行begin");
// // 如果中间有列为空; 也不计算在内;
if (row == null) {
// continue;
break;
}
System.out.println("---------");
for (int temp = 0; temp < cellCount; temp++) {
System.out.print((i + 1)
+ "测试行"
+ temp
+ "测试列 "
+ ReadExcelUtil.getStringByCell(
row.getCell(temp)).trim() + "\t");
;
}
System.out.println("---------");
// System.out.println("row======" + i + "sheet"
// + sheetindex);
if (row != null) {
Employee employee = null;
List<String> questionOptionlist = null;
for (int temp = 0; temp < cellCount; temp++) {
try {
if (true) {
System.out.print(ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim()
+ "\t");
// String questionOption="";//
// 选项对单选多选有效,其他题型无效。
// 格式为:xx1|xx2|xx3|xx4
System.out.print(i + "haang " + temp
+ "lie ");
switch (temp) {
case 0:
String str0 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str0 == null || str0.equals("")) {
flagerror = true;
msgList.add("工号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
employee = new Employee();
// employeeNumber 工号
str0 = str0.replaceAll("\\.0",
"");
employee.setEmployeeNumber(str0);
}
break;
case 1:
String str1 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str1 == null || str1.equals("")) {
flagerror = true;
msgList.add("车间不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else if (hasSameOrgName(str1,
organiseList) == null) {
flagerror = true;
msgList.add("车间名称在数据库中不存在,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
Organise tempOrg = hasSameOrgName(
str1, organiseList);
if (employee != null) {
employee.setOrganise(tempOrg);
}
}
break;
case 2:
// 班组
String str2 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str2 == null || str2.equals("")) {
flagerror = true;
msgList.add("班组不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
employee.setBanZu(str2);
}
}
break;
case 3:
// 姓名
String str3 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str3 == null || str3.equals("")) {
flagerror = true;
msgList.add("姓名不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
employee.setName(str3);
}
}
break;
case 4:// sex
String str4 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
String questionType = ReadExcelUtil
.getStringByCell(
row.getCell(5))
.trim();
if (str4 == null
|| str4.equals("")
|| (!str4.equals("男") && !str4
.equals("女"))) {
flagerror = true;
msgList.add("性别不能为空且只能为男或者女,请检查第"
+ (i + 1)
+ "行第"
+ (temp + 1) + "列");
break outer;
} else {
if (employee != null) {
if ("男".equals(str4)) {
employee.setSex(1);
} else if ("女".equals(str4)) {
employee.setSex(0);
}
}
}
break;
case 5:
String str5 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str5 == null || str5.equals("")) {
// flagerror = true;
//
// msgList.add("出生日期不能为空,请检查第"
// + (i + i) + "行第"
// + (temp + 1) + "列");
// break outer;
}
else {
try {
String data = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")
.format(new SimpleDateFormat(
"yyyy-MM-dd")
.parse(str5));
employee.setBirthday(Timestamp
.valueOf(data));
// employee.setBirthday(new
// Timestamp(new
// SimpleDateFormat("yyyyMMdd").parse(str5).getTime()));
} catch (Exception e) {
// TODO Auto-generated catch
// block
try {
String data = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")
.format(new SimpleDateFormat(
"yyyyMMdd")
.parse(str5));
employee.setBirthday(Timestamp
.valueOf(data));
} catch (Exception e1) {
// TODO Auto-generated
// cat
e1.printStackTrace();
flagerror = true;
msgList.add("出生日期格式有误,请检查第"
+ (i + i)
+ "行第"
+ (temp + 1)
+ "列");
if (fis != null) {
fis.close();
}
break outer;
}
}
}
break;
case 6:
// worktype
String str6 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str6 == null || "".equals(str6)) {
flagerror = true;
msgList.add("职务不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
break outer;
} else if (!workTypeList
.contains(str6.trim())) {
// workTypeList.add(str6.trim());
// employee.setWorkType(str6);
flagerror = true;
msgList.add("该工种/职务 未找到,请检查第"
+ (i + 1) + "行第"
+ (temp + 1)
+ "列,工种名称:" + str6);
if (fis != null) {
fis.close();
}
break outer;
} else {
employee.setWorkType(str6);
}
break;
case 7:
String str7 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str7 == null || "".equals(str7)) {
flagerror = true;
msgList.add("身份证号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str7 = str7.replaceAll(
"\\.0", "");
employee.setIdenty(str7);
}
}
break;
case 8:
// option 3
String str8 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str8 == null || "".equals(str8)) {
flagerror = true;
msgList.add("工作证号不能为空,请检查第"
+ (i + 1) + "行第"
+ (temp + 1) + "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str8 = str8.replaceAll(
"\\.0", "");
employee.setWorkNumber(str8);
}
}
break;
case 9:
// option4
String str9 = ReadExcelUtil
.getStringByCell(
row.getCell(temp))
.trim();
if (str9 == null || "".equals(str9)) {
flagerror = true;
msgList.add("工作证编号" + (i + 1)
+ "行第" + (temp + 1)
+ "列");
if (fis != null) {
fis.close();
}
break outer;
} else {
if (employee != null) {
str9 = str9.replaceAll(
"\\.0", "");
employee.setGongZuoZhengBianHao(str9);
employee.setState(1);
// 设置为普通用户
Role commonRole = (Role) this.roleService
.findById(1);
employee.setRole(commonRole);
}
this.employeeService
.save(employee);
successNumer++;
}
break;
default:
break;
}
}
// try end;
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("----------");
}
}
try {
if (fis != null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// 更新 worktype 的xml 以及session 的 work type
// List<String> workTypeList = (List<String>) request.getSession()
// .getAttribute("workTypeList");
// String xmlPath = request.getRealPath("/") + "\\worktype.xml";
// File file = new File(xmlPath);
// if (!file.exists()) {
// file.mkdirs();
// File file = new File("c:/catalog");
//
// if (!file.exists()) {
// file.mkdirs();
// }
// Document document = DocumentHelper.createDocument();
// Element catalogElement = document.addElement("worktypes");
// document.setXMLEncoding("GBK");
// if (workTypeList != null && workTypeList.size() > 0) {
// for (String str : workTypeList) {
// Element worktypeElement = catalogElement
// .addElement("worktype");
// worktypeElement.setText(str);
// }
// }else{
// Element worktypeElement = catalogElement
// .addElement("worktype");
// worktypeElement.setText("系统初始化工种一");
// }
//
// try {
// XMLWriter output = new XMLWriter(new FileWriter(new File(
// xmlPath)));
// output.write(document);
// output.close();
// } catch (IOException e) {
// System.out.println(e.getMessage());
// }
// try {
// XMLWriter output = new XMLWriter(new FileWriter(new File(
// xmlPath)));
// output.write(document);
// output.close();
// request.getSession().setAttribute("workTypeList", workTypeList);
//
// } catch (IOException e) {
// System.out.println(e.getMessage());
// }
}
return successNumer;
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
public void init() throws ServletException {
// private IOrganiseService organiseServiceService;
organiseService = (IOrganiseService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"organiseService");
employeeService = (IEmployeeService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"employeeService");
roleService = (IRoleService) WebApplicationContextUtils
.getRequiredWebApplicationContext(getServletContext()).getBean(
"roleService");
}
}