package Dao;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
//import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;
import Entities.ImportMessage;
import Utils.ExcelUtil;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import Entities.HouseEntity;
import Entities.PageEntity;
import Utils.DBUtil;
import Utils.UUIDUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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 org.springframework.web.multipart.MultipartFile;
//import org.springframework.web.multipart.MultipartFile;
/**对房源信息进行操作的方法类
 * 
 * @author wentao
 */
public class HouseDao implements Serializable {
	Logger log= Logger.getLogger("houseCaoZuo-log");
	/**
	 * 小区名称正则
	 */
	private static final String CODE_HOUSE_NAME = "^[\\u4e00-\\u9fa5]{2,33}$";
	/**
	 * 栋号正则
	 */
	private static final String CODE_BUILDNUMBER = "^.{0,10}$";
	/**
	 * 房号正则
	 */
	private static final String CODE_ROOMNUMBER = "^.{0,10}$";
	/**
	 * 户型正则
	 */
	private static final String CODE_HOUSETYPE = "^[a-zA-Z0-9_\\u4e00-\\u9fa5]+$";
	/**
	 * 面积正则
	 */
	private static final String CODE_AREA = "^.{0,20}$";
	/**
	 * 价格正则
	 */
	private static final String CODE_PRICE = "^[0-9]+(.[0-9]{1,3})?$";
	/**
	 * 建成年限正则
	 */
	private static final String CODE_COMPLETEYEAR = "([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8])))";
	/**
	 * 手机号正则
	 */
	private static final String CODE_PHONE = "^.{0,50}$";
	/**
	 * 备注正则
	 */
	private static final String CODE_REMARKS = "^.{0,50}$";
	
	
	/**去重查询小区名称,用于筛选
	 * @author wentao
	 * @return
	 */
	public List<String> queryHouseName(){
		 List<String> house_names= new ArrayList<String>();
	        Connection conn=null;
			try {
				 conn=DBUtil.getConnection();
				 conn.setAutoCommit(false);
				String sql="SELECT DISTINCT HOUSE_NAME FROM HOUSE WHERE DELETE_FLAG='0' ORDER BY HOUSE_ID";
				PreparedStatement smt=conn.prepareStatement(sql);
				ResultSet rs=smt.executeQuery();
				conn.commit();
				while(rs.next()) {		
					house_names.add(rs.getString("house_name"));
				}
				return house_names;
			} catch (SQLException e) {
				log.error("去重查询房源小区名称信息失败",e);
				DBUtil.rollBack(conn);
				e.printStackTrace();
				return house_names;
				//throw new RuntimeException("分页查询房源信息失败",e);
			}finally {
				DBUtil.closeConnection(conn);
			}
	}
	
	/**去重查询房源栋号信息,用于筛选
	 * @author wentao
	 * @return
	 */
	public List<String> queryBuildNumber(){
		 List<String> buildNumbers= new ArrayList<String>();
	        Connection conn=null;
			try {
				 conn=DBUtil.getConnection();
				 conn.setAutoCommit(false);
				String sql="SELECT DISTINCT BUILD_NUMBER FROM HOUSE WHERE DELETE_FLAG='0' ORDER BY HOUSE_ID";
				PreparedStatement smt=conn.prepareStatement(sql);
				ResultSet rs=smt.executeQuery();
				conn.commit();
				while(rs.next()) {		
					buildNumbers.add(rs.getString("build_number"));
				}
				return buildNumbers;
			} catch (SQLException e) {
				log.error("去重查询房源栋号信息失败",e);
				DBUtil.rollBack(conn);
				e.printStackTrace();
				return buildNumbers;
				//throw new RuntimeException("分页查询房源信息失败",e);
			}finally {
				DBUtil.closeConnection(conn);
			}
	}
	
	/**去重查询房源户型信息,用于筛选
	 * @author wentao
	 * @return
	 */
	public List<String> queryHouseType(){
		 List<String> houseTypes= new ArrayList<String>();
	        Connection conn=null;
			try {
				 conn=DBUtil.getConnection();
				 conn.setAutoCommit(false);
				String sql="SELECT DISTINCT HOUSE_TYPE FROM HOUSE WHERE DELETE_FLAG='0' ORDER BY HOUSE_ID";
				PreparedStatement smt=conn.prepareStatement(sql);
				ResultSet rs=smt.executeQuery();
				conn.commit();
				while(rs.next()) {		
					houseTypes.add(rs.getString("house_type"));
				}
				return houseTypes;
			} catch (SQLException e) {
				log.error("去重查询房源户型信息失败",e);
				DBUtil.rollBack(conn);
				e.printStackTrace();
				return houseTypes;
				//throw new RuntimeException("分页查询房源信息失败",e);
			}finally {
				DBUtil.closeConnection(conn);
			}
	}
	
	/**去重查询房源装修程度信息,用于筛选
	 * @author wentao
	 * @return
	 */
	public List<String> queryRoomStatus(){
		 List<String> roomStatus= new ArrayList<String>();
	        Connection conn=null;
			try {
				 conn=DBUtil.getConnection();
				 conn.setAutoCommit(false);
				String sql="SELECT DISTINCT ROOM_STATUS FROM HOUSE WHERE DELETE_FLAG='0' ORDER BY HOUSE_ID";
				PreparedStatement smt=conn.prepareStatement(sql);
				ResultSet rs=smt.executeQuery();
				conn.commit();
				while(rs.next()) {		
					roomStatus.add(rs.getString("room_status"));
				}
				return roomStatus;
			} catch (SQLException e) {
				log.error("去重查询房源装修程度信息失败",e);
				DBUtil.rollBack(conn);
				e.printStackTrace();
				return roomStatus;
				//throw new RuntimeException("分页查询房源信息失败",e);
			}finally {
				DBUtil.closeConnection(conn);
			}
	}
	
	
	/**分页查询房源信息
	 * @author wentao
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	public List<HouseEntity> queryCurrentData(Integer currentPage,Integer pageSize,String queryCurrentDataSql){
		//计算查询的起始行  
        int startNo = (currentPage-1)*pageSize; 
        List<HouseEntity> houses= new ArrayList<HouseEntity>();
        Connection conn=null;
		try {
			 conn=DBUtil.getConnection();
			 conn.setAutoCommit(false);
			PreparedStatement smt=conn.prepareStatement(queryCurrentDataSql);
			smt.setInt(1,startNo);
			smt.setInt(2, pageSize);
			ResultSet rs=smt.executeQuery();
			conn.commit();
			while(rs.next()) {
				HouseEntity house=new HouseEntity();
				house.setHouseID(rs.getObject("house_id"));
				house.setHouseName(rs.getString("house_name"));
				house.setBuildNumber(rs.getString("build_number"));
				house.setRoomNumber(rs.getString("room_number"));
				house.setHouseType(rs.getString("house_type"));
				house.setArea(rs.getString("area"));
				house.setPrice(rs.getFloat("price"));
				house.setRoomStatus(rs.getInt("room_status"));
				house.setCompleteYear(rs.getDate("complete_year"));
				house.setPhone(rs.getString("phone"));
				house.setOrderName(rs.getString("order_name"));
				house.setRemarks(rs.getString("remarks"));
				houses.add(house);
			}
			return houses;
		} catch (SQLException e) {
			log.error("分页查询房源信息失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			return houses;
			//throw new RuntimeException("分页查询房源信息失败",e);
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	
	/**提供查询总记录数的方法 
	 * @author wentao
	 * @return
	 */
	public Integer queryTotalCount(String queryTotalCountSql){ 
		Integer count=0;
		Connection conn=null;
		try {
			 conn=DBUtil.getConnection();
			 conn.setAutoCommit(false);
			PreparedStatement smt=conn.prepareStatement(queryTotalCountSql);
			ResultSet rs=smt.executeQuery();
			conn.commit();
			while(rs.next()) {
				count=rs.getInt(1);
			}
			//System.out.println(count);
			return count;
		} catch (SQLException e) {
			log.error("查询房源全部信息失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			return count;
			//throw new RuntimeException("查询房源全部信息失败",e);
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	
	 /**向页面返回查询的结果实体
	 * @author wentao
	 * @param 
	 * @throws 
	 * @param currentPage
	 * @param pageSize
	 * @return
	 */
	public PageEntity queryPageEntity(Integer currentPage,Integer pageSize,String queryTotalCountSql,String queryCurrentDataSql){  
	        //封装PageBean分页对象数据  
		 PageEntity pageEntity = new PageEntity();     
	        //设置当前页  
		 pageEntity.setCurrentPage(currentPage);  
	        //设置每页显示的记录数  
		 pageEntity.setPageSize(pageSize);   
	        HouseDao houseDao = new HouseDao();  
	        /** 
	         * 从数据库中查询出总记录数 
	         */  
	        int totalCount = houseDao.queryTotalCount(queryTotalCountSql);  
	        //设置总记录数  
	        pageEntity.setTotalCount(totalCount);      
	        //设置当前页的数据  
	        /** 
	         * 从数据库中查询出当前页的房源数据 
	         */  
	        List<HouseEntity> list = houseDao.queryCurrentData(pageEntity.getCurrentPage(), pageEntity.getPageSize(),queryCurrentDataSql);  
	        pageEntity.setData(list);      
	        return pageEntity;  
	    } 
	
	/**根据houseid查询房源信息
	 * @author wentao
	 * @param house_id
	 * @return
	 */
	public HouseEntity queryHouseByID(String house_id){
    	HouseEntity house=new HouseEntity();
        Connection conn=null;
		try {
			 conn=DBUtil.getConnection();
			 conn.setAutoCommit(false);
			 //delete_flag:删除标记 0:未删除 1:已删除
			String sql="SELECT * FROM HOUSE WHERE HOUSE_ID=?";
			PreparedStatement smt=conn.prepareStatement(sql);
			smt.setString(1,house_id);
			ResultSet rs=smt.executeQuery();
			conn.commit();
			while(rs.next()) {
				house.setHouseID(rs.getObject("house_id"));
				house.setHouseName(rs.getString("house_name"));
				house.setBuildNumber(rs.getString("build_number"));
				house.setRoomNumber(rs.getString("room_number"));
				house.setHouseType(rs.getString("house_type"));
				house.setArea(rs.getString("area"));
				house.setPrice(rs.getFloat("price"));
				house.setRoomStatus(rs.getInt("room_status"));
				house.setCompleteYear(rs.getDate("complete_year"));
				house.setPhone(rs.getString("phone"));
				house.setOrderName(rs.getString("order_name"));
				house.setRemarks(rs.getString("remarks"));
			}
			return house;
		} catch (SQLException e) {
			log.error("根据UUID查询房源信息失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			return house;
			//throw new RuntimeException("分页查询房源信息失败",e);
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	/**
	 *查询房源信息是否存在
	 *
	 *
	 * @param houseName
	 * @param buildNumber
	 * @param roomNumber
	 * @return
	 * @author wentao
	 * @time 2018/2/20
	 */
	public List<HouseEntity> checkHouse(String houseName,String buildNumber,String roomNumber){
		List<HouseEntity> houseList=new ArrayList<HouseEntity>();
		//List<List<HouseEntity>> resultList=new ArrayList<List<HouseEntity>>();
		Connection conn=null;
		try {
			conn=DBUtil.getConnection();
			conn.setAutoCommit(false);
			//delete_flag:删除标记 0:未删除 1:已删除
			String sql="SELECT * FROM HOUSE WHERE HOUSE_NAME=? AND BUILD_NUMBER=? AND ROOM_NUMBER=? AND " +
					"DELETE_FLAG=0";
			PreparedStatement smt=conn.prepareStatement(sql);
			smt.setString(1,houseName);
			smt.setString(2,buildNumber);
			smt.setString(3,roomNumber);
			ResultSet rs=smt.executeQuery();
			conn.commit();
			while(rs.next()) {
				HouseEntity house=new HouseEntity();
				house.setHouseID(rs.getObject("house_id"));
				house.setHouseName(rs.getString("house_name"));
				house.setBuildNumber(rs.getString("build_number"));
				house.setRoomNumber(rs.getString("room_number"));
				houseList.add(house);
			}
			return houseList;
		} catch (SQLException e) {
			log.error("查询房源信息是否存在失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			HouseEntity house=new HouseEntity();
			house.setHouseName("温涛");
			houseList.add(house);
			return houseList;
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	/**编辑时查询房源信息是否存在
	 *
	 * @param houseName
	 * @param buildNumber
	 * @param roomNumber
	 * @param houseID
	 * @return
	 * @author wentao
	 * @time 2018/2/22 0022
	 */
	public List<HouseEntity> checkHouse(String houseName,String buildNumber,String roomNumber,String houseID){
		List<HouseEntity> houseList=new ArrayList<HouseEntity>();
		String house_ID=UUIDUtils.addSepc(houseID);
		Connection conn=null;
		try {
			conn=DBUtil.getConnection();
			conn.setAutoCommit(false);
			//delete_flag:删除标记 0:未删除 1:已删除
			String sql="SELECT * FROM HOUSE WHERE HOUSE_NAME=? AND BUILD_NUMBER=? AND ROOM_NUMBER=? AND " +
					"DELETE_FLAG=0 AND HOUSE_ID !=?";
			PreparedStatement smt=conn.prepareStatement(sql);
			smt.setString(1,houseName);
			smt.setString(2,buildNumber);
			smt.setString(3,roomNumber);
			smt.setString(4,house_ID);
			ResultSet rs=smt.executeQuery();
			conn.commit();
			while(rs.next()) {
				HouseEntity house=new HouseEntity();
				house.setHouseID(rs.getObject("house_id"));
				house.setHouseName(rs.getString("house_name"));
				house.setBuildNumber(rs.getString("build_number"));
				house.setRoomNumber(rs.getString("room_number"));
				houseList.add(house);
			}
			return houseList;
		} catch (SQLException e) {
			log.error("查询房源信息是否存在失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			HouseEntity house=new HouseEntity();
			house.setHouseName("温涛");
			houseList.add(house);
			return houseList;
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	/**删除房源信息
	 * @author wentao
	 * @param houseID
	 * @param userID
	 * @return
	 */
	public boolean delHouse(String houseID,String userID){
		Date deletime=new Date();
		SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		Connection conn=null;
		try {
			conn=DBUtil.getConnection();
			conn.setAutoCommit(false);
			String sql="update house set delete_flag='1',deleter_id=?,deletime=? where house_id=?";
			PreparedStatement smt=conn.prepareStatement(sql);
			smt.setString(1,userID);
			smt.setString(2, time.format(deletime));
			smt.setString(3, houseID);
			int delResult=smt.executeUpdate();
			conn.commit();
			if(delResult==1){
				return true;
			}else{
				return false;
			}
		} catch (SQLException e) {
			log.error("删除房源信息失败",e);
			DBUtil.rollBack(conn);
			e.printStackTrace();
			return false;
		}finally {
			DBUtil.closeConnection(conn);
		}
	}
	
	/**编辑房源信息
	 * @author wentao
	 * @param 
	 * @throws 
	 * @param edit_house
	 * @param user_id
	 * @return
	 */
	public boolean editHouse(HouseEntity edit_house,String user_id) {
		Date updatetime=new Date();
		SimpleDateFormat time = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
		 String houseID=UUIDUtils.addSepc(edit_house.getHouseID());
		Connection editHouseConn=null;
		try {
			editHouseConn=DBUtil.getConnection();
			editHouseConn.setAutoCommit(false);
			String editHouse="UPDATE HOUSE SET HOUSE_NAME=?,BUILD_NUMBER=?,ROOM_NUMBER=?,HOUSE_TYPE=?,AREA=?,PRICE=?,"
					+ "ROOM_STATUS=?,COMPLETE_YEAR=?,PHONE=?,REMARKS=?,UPDATER_ID=?,UPDATE_TIME=?"
					+ "WHERE HOUSE_ID=?";
			PreparedStatement smt=editHouseConn.prepareStatement(editHouse);
			smt.setString(1, edit_house.getHouseName());
			smt.setString(2, edit_house.getBuildNumber());
			smt.setString(3, edit_house.getRoomNumber());
			smt.setString(4, edit_house.getHouseType());
			smt.setString(5, edit_house.getArea());
			smt.setDouble(6, edit_house.getPrice());
			smt.setInt(7, edit_house.getRoomStatus());
			smt.setDate(8, edit_house.getCompleteYear());
			smt.setString(9, edit_house.getPhone());
			smt.setString(10, edit_house.getRemarks());
			smt.setString(11, user_id);
			smt.setString(12, time.format(updatetime));
			smt.setString(13, houseID);
			int editResult=smt.executeUpdate();
			editHouseConn.commit();
			if(editResult==1){
				return true;
			}else{
				return false;
			}	
		} catch (SQLException e) {
			DBUtil.rollBack(editHouseConn);
			log.error("修改房源信息失败",e);
			e.printStackTrace();
			return false;
		}finally{
			DBUtil.closeConnection(editHouseConn);
		}	
	}
/**添加房源信息实体方法
 * @author wentao
 * @param add_house
 * @return
 */
public boolean addHouse(HouseEntity add_house,String userID) {
	Connection addHouseConn=null;
	try {
		addHouseConn=DBUtil.getConnection();
		addHouseConn.setAutoCommit(false);
		String addHouse="INSERT INTO HOUSE (HOUSE_ID,HOUSE_NAME,BUILD_NUMBER,ROOM_NUMBER,HOUSE_TYPE,AREA,PRICE,"
				+ "ROOM_STATUS,COMPLETE_YEAR,PHONE,REMARKS,ORDER_NAME,CREATER_ID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
		PreparedStatement smt=addHouseConn.prepareStatement(addHouse,new String[]{"house_id"});
		smt.setString(1, UUIDUtils.addSepc(add_house.getHouseID()));
		//System.out.println(add_house.getHouseID());
		smt.setString(2, add_house.getHouseName());
		smt.setString(3, add_house.getBuildNumber());
		smt.setString(4, add_house.getRoomNumber());
		smt.setString(5, add_house.getHouseType());
		smt.setString(6, add_house.getArea());
		smt.setFloat(7, add_house.getPrice());
		smt.setInt(8, add_house.getRoomStatus());
		smt.setDate(9, add_house.getCompleteYear());
		smt.setString(10, add_house.getPhone());
		smt.setString(11, add_house.getRemarks());
		smt.setString(12, add_house.getOrderName());
		smt.setString(13,userID);
		smt.executeUpdate();
		addHouseConn.commit();
		//从smt中获取生成的主键
		//结果集中包含1行1列
		ResultSet rs = smt.getGeneratedKeys();
		if(rs.next()){
			//这种场景下的结果集,只能通过字段的序号获取值.
			String addSuccessID = rs.getString(1);	
			log.info("新增的房源主键id是"+addSuccessID);
			return true;
		}else{
			return false;
		}	
	} catch (SQLException e) {
		DBUtil.rollBack(addHouseConn);
		log.error("新增房源信息失败",e);
		e.printStackTrace();
		return false;
	}finally{
		DBUtil.closeConnection(addHouseConn);
	}	
}
	/**批量添加房源信息实体方法
	 * @author wentao
	 * @param
	 * @return
	 */
	public List<String>  addUploadFile(MultipartFile uploadFile,String userID) {
        Workbook wookbook = ExcelUtil.createWorkbook(uploadFile);
        //ImportMessage listMessage=new ImportMessage();
        List<String> errorList = new ArrayList<String>();
        int sheetNumber = wookbook.getNumberOfSheets();
        if (sheetNumber != 1) {
            errorList.add("该Excel【sheet】数量不正确,请下载【正确模板】进行上传操作");
            return errorList;
        }
        Sheet sheet = wookbook.getSheetAt(0);// 第一个sheet
        int rows = sheet.getPhysicalNumberOfRows();
        if (rows <= 3) {//数据条数校验,第一行为表头,第二行开始为数据
            errorList.add("您上传的表格数据为空!");
            return errorList;
        }
        Row cellsTitle = sheet.getRow(0);
        int cellNumber = cellsTitle.getLastCellNum();
        if (cellNumber != 8) {
            errorList.add("该Excel列数量不正确,请下载【正确模板】进行上传操作");
            return errorList;
        }
        String[] titles = {"小区名称", "栋号", "房号", "户型", "面积", "价格", "装修程度", "建成年限",
                "房主手机号", "备注"};
        List<HouseEntity> houseList = new ArrayList<HouseEntity>();
        //List<HouseEntity> houseList = new ArrayList<HouseEntity>();
        for (int i = 3; i < rows; i++) {//数据校验
            Row row = sheet.getRow(i);
            if (row == null){
                continue;}
            for (int c = 0; c < row.getLastCellNum(); c++) {//设置excel内容为String
                if (row.getCell(c) != null)
                    row.getCell(c).setCellType(Cell.CELL_TYPE_STRING);
            }
            HouseEntity house = new HouseEntity();
            int cellColumnIndex = 0;//从第一列开始读取数据
            // 小区名称列
            String houseName = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(houseName)) {
                errorList.add("第" + (i + 1) + "行小区名称是空的!");
            } else {
                house.setHouseName(houseName);
                if (!house.getHouseName().matches(CODE_HOUSE_NAME)) {
                    errorList.add("第" + (i + 1) + "行小区名称不符合规则!");
                }
            }
            // 栋号列
            String buildNumber = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(buildNumber)) {
                errorList.add("第" + (i + 1) + "行栋号是空的!");
            } else {
				if (!buildNumber.matches(CODE_BUILDNUMBER)) {
					errorList.add("第" + (i + 1) + "行栋号超出字数限制!");
				}else{
				try{
						house.setBuildNumber(buildNumber);
				}catch (NumberFormatException e){
					errorList.add("第" + (i + 1) + "行栋号不符合规则!");
				}}
            }
            // 房号列
            String roomNumber = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(roomNumber)) {
                errorList.add("第" + (i + 1) + "行房号是空的!");
            } else {
				if (!roomNumber.matches(CODE_ROOMNUMBER)) {
					errorList.add("第" + (i + 1) + "行房号超出字数限制!");
				}else{
                	try{
                        house.setRoomNumber(roomNumber);
                	}catch (NumberFormatException e){
                    errorList.add("第" + (i + 1) + "行房号不符合规则!");
                	}}
            }
            // 户型列
            String houseType = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(houseType)) {
                errorList.add("第" + (i + 1) + "行户型是空的!");
            } else {
                house.setHouseType(houseType);
                if (!house.getHouseType().matches(CODE_HOUSETYPE)) {
                    errorList.add("第" + (i + 1) + "行户型不符合规则!");
                }
            }
            // 面积列
            String area = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(area)) {
                errorList.add("第" + (i + 1) + "行面积是空的!");
            } else {
                try{
                    if (!area.matches(CODE_AREA)) {
                        errorList.add("第" + (i + 1) + "行面积不符合规则!");
                    }else{
                        house.setArea(area);
                    }
                }catch (NumberFormatException e){
                    errorList.add("第" + (i + 1) + "行面积不符合规则!");
                }
            }
            // 价格列
            String price = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(price)) {
                errorList.add("第" + (i + 1) + "行价格是空的!");
            } else {
                try{
                    if (!price.matches(CODE_PRICE)) {
                        errorList.add("第" + (i + 1) + "行价格不符合规则!");
                    }else{
                        house.setPrice(Float.valueOf(price));
                    }
                }catch (NumberFormatException e){
                    errorList.add("第" + (i + 1) + "行价格不符合规则!");
                }
            }
            // 装修程度列
            String roomStatus = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(roomStatus)) {
				house.setRoomStatus(5);
            } else {
               Integer status;
               if(roomStatus.equals("毛坯")){
                   status=0;
                   house.setRoomStatus(status);
               }else if(roomStatus.equals("简装")){
                   status=1;
                   house.setRoomStatus(status);
               }else if(roomStatus.equals("中装")){
                   status=2;
                   house.setRoomStatus(status);
               }else if(roomStatus.equals("精装")){
                   status=3;
                   house.setRoomStatus(status);
               }else if(roomStatus.equals("豪华装")){
                   status=4;
                   house.setRoomStatus(status);
               }else{
                   errorList.add("第" + (i + 1) + "行装修程度不是选择的!");
               }
            }
            // 建成年限列
            String completeYear = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
			DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
            if (StringUtils.isEmpty(completeYear)) {
				house.setCompleteYear(null);
            } else {
                try{
                    Double year=Double.parseDouble(completeYear);
					String time=formater.format(HSSFDateUtil.getJavaDate(year));
                    if (!time.matches(CODE_COMPLETEYEAR)) {
                        errorList.add("第" + (i + 1) + "行建成年限不符合规则!");
                    }else{
                        house.setCompleteYear(java.sql.Date.valueOf(time));
                    }
                }catch (NumberFormatException e){
                    errorList.add("第" + (i + 1) + "行建成年限不符合规则!");
                }
            }
            // 房主手机号列
            String phone = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (StringUtils.isEmpty(phone)) {
                errorList.add("第" + (i + 1) + "行房主手机号是空的!");
            } else {
				if (!phone.matches(CODE_PHONE)) {
					errorList.add("第" + (i + 1) + "行手机号超出字数限制!");
				}else{
                house.setPhone(phone);}
            }
            // 备注列
            String remarks = ExcelUtil.getCellValue(row.getCell(cellColumnIndex++));
            if (!StringUtils.isEmpty(remarks)) {
                house.setRemarks(remarks);
                if (!house.getRemarks().matches(CODE_REMARKS)) {
                    errorList.add("第" + (i + 1) + "行备注不符合规则!");
                }
            }
			if(errorList.size()==0) {
				for (HouseEntity houses : houseList) {
					if (houses.getHouseName().equals(house.getHouseName()) &&
							houses.getRoomNumber().equals(house.getRoomNumber())
							&& houses.getBuildNumber().equals(house.getBuildNumber())) {
						errorList.add("第" + (i + 1) + "行的信息已经在表格里存在!请检查表格内容。");
					}
				}
			}
			houseList.add(house);
        }
		if(errorList.size()==0) {
        	int i=4;
			for (HouseEntity houses : houseList) {
				List<HouseEntity> check = checkHouse(houses.getHouseName(), houses.getBuildNumber(), houses.getRoomNumber());
				if (check.size() > 0) {
					for (HouseEntity h : check) {
						if ("温涛".equals(h.getHouseName())) {
							errorList.add("第" + (i) + "行的信息查询是否存在时出错,请把表格重新上传一次。");
						} else {
							errorList.add("第" + (i) + "行的房源信息已经在系统中存在了!请检查表格内容是否跟系统中的房源信息重复了。");
						}
					}
				}
				i++;
			}
		}
        if (errorList.size() > 0)
            return errorList;
        else {
            Connection addHouseConn=null;
            try {
                addHouseConn = DBUtil.getConnection();
                addHouseConn.setAutoCommit(false);
                String addHouse = "INSERT INTO HOUSE (HOUSE_ID,HOUSE_NAME,BUILD_NUMBER,ROOM_NUMBER,HOUSE_TYPE,AREA,PRICE,"
                        + "ROOM_STATUS,COMPLETE_YEAR,PHONE,REMARKS,ORDER_NAME,CREATER_ID) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)";
                PreparedStatement smt = addHouseConn.prepareStatement(addHouse);
                List<String> correctList = new ArrayList<String>();
                int i=0;//用作控制多少条数据时往数据库里插
                for (HouseEntity houses : houseList) {
                    smt.setString(1, UUIDUtils.getUUIDStr());
                    smt.setString(2, houses.getHouseName());
                    smt.setString(3, houses.getBuildNumber());
                    smt.setString(4, houses.getRoomNumber());
                    smt.setString(5, houses.getHouseType());
                    smt.setString(6, houses.getArea());
                    smt.setFloat(7, houses.getPrice());
                    smt.setInt(8, houses.getRoomStatus());
                    smt.setDate(9, houses.getCompleteYear());
                    smt.setString(10, houses.getPhone());
                    smt.setString(11, houses.getRemarks());
                    smt.setString(12,"批量上传的房源");
                    smt.setString(13,userID);
                    smt.addBatch();
                    i++;
                    if(i%10==0){
                        smt.executeBatch();
                        //清空暂存的数据,便于下一批
                        smt.clearBatch();
                       // i=0;
                    }
                }
                smt.executeBatch();
                addHouseConn.commit();
                correctList.add("导入成功!");
                return correctList;
            }catch (SQLException e) {
                DBUtil.rollBack(addHouseConn);
                log.error("批量插入数据库失败",e);
                e.printStackTrace();
                errorList.add("批量插入数据库失败");
                return errorList;
            }finally{
                DBUtil.closeConnection(addHouseConn);
            }
        }
    }
}
 最近下载更多
最近下载更多
                
                908701380     LV2
                2023年6月3日
            
            
        
                hqy966     LV5
                2023年1月23日
            
            
        
                mmmmmmppp     LV10
                2022年12月7日
            
            
        
                aqin_qin     LV1
                2022年6月12日
            
            
        
                edward_vic     LV2
                2022年3月8日
            
            
        
                asddff     LV1
                2022年1月6日
            
            
        
                swl137985246     LV7
                2021年11月26日
            
            
        
                2754137495     LV6
                2021年7月20日
            
            
        
                Azuki1     LV6
                2021年6月20日
            
            
        
                裤裆很帅     LV16
                2021年5月28日
            
            
        
 
                 
                 
     最近浏览
最近浏览