@SuppressWarnings("deprecation")
@RequestMapping(value = "/importBrandSorts", method = RequestMethod.POST)
@ResponseBody
public AjaxJson importBrandSorts(@RequestParam("filename") MultipartFile file,
HttpServletRequest request,HttpServletResponse response)
{
AjaxJson ajaxJson = new AjaxJson();
String parameter = request.getParameter("contentsName");
String id = request.getParameter("id");
String temp = request.getSession().getServletContext().getRealPath(File.separator)
+ "temp"; // 临时目录
File tempFile = new File(temp);
if (!tempFile.exists()) {
tempFile.mkdirs();
}
DiskFileUpload fu = new DiskFileUpload();
fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
if (file == null)
{
ajaxJson.setCode("0");
ajaxJson.setMessage("请选择需要导入的表格!");
return ajaxJson;
}
String name = file.getOriginalFilename();// 获取上传文件名,包括路径
//name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名
long size = file.getSize();
if ((name == null || name.equals("")) && size == 0)
{
ajaxJson.setCode("0");
ajaxJson.setMessage("你需要导入的文件不存在数据或获取你要导入的文件名称失败!");
return ajaxJson;
}
try {
InputStream is = file.getInputStream();
//导入后验证数据是否符合要求
int count = invItemDbItateService.exlImprot3(is,name,getCurLoginUser(),parameter,id);
ajaxJson.setMessage("成功导入【"+count+"】条数据!");
//通过验证字段判断是否导入可用
// invItemDbItateService.exlImprot2(is,name,getCurLoginUser(),parameter,id);//验证后导入
// invItemDbItateService.exlImprot(is,name,getCurLoginUser(),parameter,id);
} catch (IOException e) {
e.printStackTrace();
ajaxJson.setCode("0");
ajaxJson.setMessage("导入信息失败!");
}
return ajaxJson;
}
/**
* 导入数据信息在同一张表
* @param is
* @param name
* @param user
* @param parameter
* @param id
* @throws IOException
*/
public int exlImprot3(InputStream is, String name,LoginUser user,String parameter,String id) throws IOException
{
//读取excel的信息
boolean isExcel2003 = true;
List<List<String>> dataLst = null;
try
{
/** 判断文件的类型,是2003还是2007 */
if (WDWUtil.isExcel2007(name))
{
isExcel2003 = false;
}
dataLst = invItemDirlistBoxService.importBrandPeriodSort2(is,isExcel2003);
is.close();
} catch (Exception ex){
ex.printStackTrace();
throw new IOException("notData");
} finally {
if (is != null)
{
try {
is.close();
}catch (IOException e) {
is = null;
e.printStackTrace();
throw new IOException("notData");
}
}
}
//去除dataLst重复元素
List<List<String>> datas = new ArrayList<List<String>>(); //datas是最终要导入的数据集合
if(dataLst != null && dataLst.size() > 0) {
Set<List<String>> idSet = new HashSet<List<String>>(dataLst);
datas.addAll(idSet);
}
/////////////////////////////去重复begin//////////////////////////////////
//获取已导入的数据
List<InvItemDirlistBox> iidbList = new ArrayList<>();
//用于存储之前导入的数据
List<List<String>> beforedatas = new ArrayList<List<String>>();
List<String> items = new ArrayList<>();//用于记录物资编码
if(!StringUtils.isEmpty(id))
{
iidbList = invItemDirlistBoxDao.getBySqlKey("findItemnumByDbid", id);
for (InvItemDirlistBox invidb : iidbList) {
items.add(invidb.getItemnum());
List<String> beforeList = new ArrayList<>();
beforeList.add(invidb.getItemnum());
beforeList.add(invidb.getDescription());
beforeList.add(invidb.getModel());
beforeList.add(invidb.getTechparameters());
beforeList.add(invidb.getItemPrice().toString());
beforeList.add(invidb.getCompaniesid());
beforeList.add(invidb.getBuyerCode());
beforeList.add(invidb.getCompanyId());
beforeList.add(invidb.getContent());
beforeList.add(invidb.getBrand());
beforeList.add(invidb.getUnit());
beforedatas.add(beforeList);
}
}
//重复导入时去除已有的数据和未做改变的数据
datas.removeAll(beforedatas);
/////////////////////////////去重复end//////////////////////////////////
if (CollectionUtils.isNotEmpty(datas))
{
//对父表先行插入
InvItemDbItate invItemDbItate = new InvItemDbItate();
invItemDbItate.setStatus("INVALID");
invItemDbItate.setContentsName(parameter);
if(!StringUtils.isEmpty(id))
{
invItemDbItate.setId(id);
}
invItemDbItateDao.saveOrUpdate(invItemDbItate, user);
String dbId = invItemDbItate.getId();
//导入到数据表中
for(int i=0,n=datas.size();i<n;i++)
{
List<String> error = datas.get(i);
InvItemDirlistBox invItemDirlistBox = new InvItemDirlistBox();
invItemDirlistBox.setDbId(dbId);
for (InvItemDirlistBox invidb : iidbList) {
String itemnum = invidb.getItemnum();
String anObject = error.get(0);
if (itemnum.equals(anObject)) {
invItemDirlistBox.setId(invidb.getId());
invItemDirlistBox.setValidation(null);
Map<String, Object> params = new HashMap<>();
params.put("id", invidb.getId());
params.put("validation", null);
invItemDirlistBoxDao.updateBySqlKey("updateByIdChangVali", params);
}
}
invItemDirlistBox.setItemnum(error.get(0));
invItemDirlistBox.setDescription(error.get(1)==""?null:error.get(1));
invItemDirlistBox.setModel(error.get(2)==""?null:error.get(2));
invItemDirlistBox.setTechparameters(error.get(3)==""?null:error.get(3));
invItemDirlistBox.setItemPrice(Double.parseDouble(error.get(4)));
invItemDirlistBox.setCompaniesid(error.get(5));
invItemDirlistBox.setBuyerCode(error.get(6));
invItemDirlistBox.setCompanyId(error.get(7));
invItemDirlistBox.setContent(error.get(8)==""?null:error.get(8));
invItemDirlistBox.setBrand(error.get(9)==""?null:error.get(9));
invItemDirlistBox.setUnit(error.get(10)==""?null:error.get(10));
invItemDirlistBox.setItemnumed(error.get(0));
invItemDirlistBox.setState("TOMATCH");
invItemDirlistBox.setValidTime(null);
invItemDirlistBox.setItemnumrep(null);
invItemDirlistBox.setReplaceway(null);
// invItemDirlistBox.setSitecode("0");
invItemDirlistBoxDao.saveOrUpdate(invItemDirlistBox, user);
}
}
return datas.size();
}
public List<List<String>> importBrandPeriodSort2(InputStream in, boolean isExcel2003) throws Exception {
List<List<String>> lists = readBrandPeriodSorXlsAndXlsx(in,isExcel2003);
return lists;
}
private List<List<String>> readBrandPeriodSorXlsAndXlsx(InputStream is,boolean isExcel2003) throws IOException {
/** 根据版本选择创建Workbook的方式 */
Workbook wb = null;
if (isExcel2003)
{
wb = new HSSFWorkbook(is);
} else {
wb = new XSSFWorkbook(is);
}
List<List<String>> dataLst = new ArrayList<List<String>>();
Sheet sheet = wb.getSheetAt(0);
// 循环行Row
for (int rowNum = 1; rowNum < sheet.getPhysicalNumberOfRows(); rowNum++) {// 获取总行数
Row row = sheet.getRow(rowNum);
List<String> rowLst = new ArrayList<String>();
for (int i = 0; i < sheet.getRow(0).getPhysicalNumberOfCells(); i++) {// 获取总列数
Cell cell = row.getCell(i);//获取列
if (cell != null) {
rowLst.add(getValue(cell));
}
}
dataLst.add(rowLst);
}
return dataLst;
}
注:有不理解的及时留言;
有调用查数据库的地方请忽略!!!