package com.bonus.seat.service; import java.io.InputStream; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; 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.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.multipart.MultipartFile; import com.bonus.score.beans.ScoreBean; import com.bonus.seat.beans.SeatBean; import com.bonus.seat.dao.SeatDao; import com.bonus.sys.AjaxRes; import com.bonus.sys.BaseServiceImp; import com.bonus.sys.GlobalConst; import com.bonus.sys.beans.UserBean; import com.bonus.sys.dao.UserDao; @Service("SeatService") public class SeatServiceImp extends BaseServiceImp implements SeatService { @Autowired SeatDao dao; @Autowired private UserDao userDao; @Override public List findRoomInfo() { return dao.finRoomInfo(); } @Override public Integer insertInfo(SeatBean o) { Integer res = 0; res = dao.insertInfo(o); return res; } @Override public List checkSeat(SeatBean o) { return dao.checkSeat(o); } @Override public SeatBean findSeatByIp(String ipAddress) { return dao.findSeatByIp(ipAddress); } @Override public SeatBean findPersonBySeat(SeatBean seat) { return dao.findPersonBySeat(seat); } @Override public void insertNowIdcard(SeatBean pSeat) { dao.insertNowIdcard(pSeat); } @Override public void updateIsActive(ScoreBean o) { dao.updateIsActive(o); } @Transactional public AjaxRes addRegistration(SeatBean o) { AjaxRes ar = getAjaxRes(); try { int count = dao.insertInfo(o); if(count == 1) ar.setSucceedMsg("新增成功"); else ar.setFailMsg("新增失败!"); } catch(Exception e) { e.printStackTrace(); ar.setFailMsg("新增失败"); } return ar; } @Override public AjaxRes deleteApply(SeatBean o) { AjaxRes ar = getAjaxRes(); try { int count = dao.deleteApply(o); if(count == 1) ar.setSucceedMsg("删除成功"); else ar.setFailMsg("删除失败!"); } catch(Exception e) { e.printStackTrace(); ar.setFailMsg("删除失败"); } return ar; } @Override @Transactional(rollbackFor=Exception.class) public AjaxRes export(MultipartFile file) { AjaxRes ar = getAjaxRes(); Integer result = 0; int team=1; try { // @RequestParam("file") MultipartFile file 是用来接收前端传递过来的文件 // 1.创建workbook对象,读取整个文档 InputStream inputStream = file.getInputStream(); POIFSFileSystem poifsFileSystem = new POIFSFileSystem(inputStream); HSSFWorkbook wb = new HSSFWorkbook(poifsFileSystem); // 2.读取页脚sheet HSSFSheet hssfSheet = wb.getSheetAt(0); // 判断Sheet是否为空 if (hssfSheet != null) { System.out.println(hssfSheet.getLastRowNum()); // 获得数据的总行数 int totalRowNum = hssfSheet.getLastRowNum(); // 要获得属性 String specialty = ""; // 遍历行row,continue只是终止本次循环,接着还执行后面的循环 for (int rownum = 1; rownum <= hssfSheet.getLastRowNum(); rownum++) { // 获取到每一行 HSSFRow sheetRow = hssfSheet.getRow(rownum); if (sheetRow != null && !isRowEmpty(sheetRow)) { // 保存数据到数据库 System.out.println(sheetRow); // 获得第i行对象 Row row = hssfSheet.getRow(rownum); // 获得获得第i行第0列的 String类型对象 Cell cell = row.getCell((short) 0); // 获得获得第i行第2列的对象并转为int类型 Cell cell1 = row.getCell((short) 1); if (row.getCell(4) != null) { row.getCell(4).setCellType(Cell.CELL_TYPE_STRING); specialty = (row.getCell(4).getStringCellValue()); } /* * boolean isRule = isSpecialtyRule(specialty); * * if (!isRule) { ar.setSucceedMsg("专业id不符合规则,请更改"); result = 3; break; } */ } } // if (result != 3) { for (int rownums = 1; rownums <= hssfSheet.getLastRowNum(); rownums++) { // 获取到每一行 HSSFRow sheetRows = hssfSheet.getRow(rownums); if (sheetRows != null && !isRowEmpty(sheetRows)) { team = addSaveData(sheetRows); } } //ar.setSucceedMsg(GlobalConst.IMP_SUCCEED); // } if(team ==1 ) { ar.setSucceedMsg(GlobalConst.IMP_SUCCEED); }else { ar.setFailMsg(GlobalConst.IMP_FAIL); } } } catch (Exception e) { logger.error(e.toString(), e); ar.setFailMsg(GlobalConst.IMP_FAIL); } return ar; } private boolean isSpecialtyRule(String specialty) { boolean tf = true; try { int orgId = Integer.parseInt(specialty); UserBean bean = userDao.findOrgId(orgId); if(bean == null){ tf = false; } } catch (Exception e) { logger.error(e.toString()); tf = false; } return tf; } private static String getValue(HSSFCell hssfCell) { // hssfCell.getCellType() 获取当前列的类型 if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { return String.valueOf(hssfCell.getNumericCellValue()); } else { return String.valueOf(hssfCell.getStringCellValue()); } } // 将double类型字符串转化为整型 private static String change(String str) { if (str.indexOf('.') != -1) { return str.substring(0, str.indexOf('.')); } else { return str; } } private int addSaveData(HSSFRow sheetRow) throws Exception { // 保存数据到数据库 int team=1; try { SeatBean bean = new SeatBean(); bean.setRoomId(getValue(sheetRow.getCell(0))); bean.setName(getValue(sheetRow.getCell(1))); bean.setIdcard(change(getValue(sheetRow.getCell(2)))); bean.setRoomSession(change(getValue(sheetRow.getCell(3)))); bean.setSeatNum(change(getValue(sheetRow.getCell(4)))); bean.setDepartment(change(getValue(sheetRow.getCell(5)))); bean.setSpecialty(change(getValue(sheetRow.getCell(6)))); bean.setAuthIdentity(getValue(sheetRow.getCell(7))); int i=dao.insertInfo(bean); if(i != 1) { team=0; throw new RuntimeException("插入座位号失败!"); } } catch (Exception e) { team=0; TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); e.printStackTrace(); } return team; } // 判断该行是否为空 public static boolean isRowEmpty(Row row) { for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) { Cell cell = row.getCell(c); if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) { return false; } } return true; } @Override public SeatBean findById(SeatBean o) { // TODO Auto-generated method stub return dao.findById(o); } @Override public int updateBykc(SeatBean bean) { // TODO Auto-generated method stub return dao.updateBykc(bean); } @Override public int findCount() { // TODO Auto-generated method stub return dao.findCount(); } @Override public void insertlogo(SeatBean bean) { // TODO Auto-generated method stub dao.insertlogo(bean); } @Override public void deletebyTime(String currentDateTime) { // TODO Auto-generated method stub dao.deletebyTime(currentDateTime); } }