package com.cme.core; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.cme.core.entity.CountryMapping; import com.cme.core.entity.Currency; import com.cme.core.entity.EnterpriseAddressInfo; import com.cme.core.entity.IndustryInfo; import com.cme.utils.JdbcUtils; /** * Hello world! * */ public class AppOld { //產業行業分類 private static Map<String,List<IndustryInfo>> infos = new HashMap<String, List<IndustryInfo>>(); //企業類型 private static Map<String,String> enterpriseTypes = new HashMap<String, String>(); //城市 private static List<CountryMapping> cms = new ArrayList<CountryMapping>(); //幣種 private static Map<String,String> currencys = new HashMap<String, String>(); static{ infos = getIndustryInfos(); enterpriseTypes = getEnterpriseTypes(); cms = getCountryMappings(); currencys = getCurrencys(); } public static void main( String[] args ) { long beginTime = System.currentTimeMillis(); exec(args[0]); long endTime = System.currentTimeMillis(); System.out.println(endTime - beginTime); } /** * 递归读取excel文件 * @param pathName */ public static void exec(String pathName){ File file = new File(pathName); if(file.isDirectory()){ File[] childs = file.listFiles(); for(File child : childs){ exec(child.getPath()); } }else if(file.getName().endsWith(".xls") || file.getName().endsWith(".xlsx")){ //读取并导入excel文件 readExcel(file); }else{ System.out.println("不需要导入的文件:" + file.getName()); } } /** * 读取并导入excel文件 * @param file */ public static void readExcel(File file){ try { Workbook workBook = null; if(file.getName().endsWith(".xls")){ workBook = new HSSFWorkbook(new FileInputStream(file)); }else if(file.getName().endsWith(".xlsx")){ workBook = new XSSFWorkbook(new FileInputStream(file)); } int numberOfSheets = workBook.getNumberOfSheets(); //一次读取3000条数据 int pageSize = 3000; //依次导入每个sheet里面的数据 for(int i =0 ;i< numberOfSheets; i++){ Sheet sheet = workBook.getSheetAt(i); //算出总记录数 int totalCount = sheet.getLastRowNum(); //算出总页数 int totalPage = getTotalPage(totalCount, pageSize); Row header = sheet.getRow(1); if(header != null){ int celNum = 23; //int celNum = header.getPhysicalNumberOfCells(); List<List<Object>> datas = null; List<Object> data = null; for(int j = 1 ;j <= totalPage; j++){ datas = new ArrayList<List<Object>>(); int firstResult = j==1 ? 1:getFirstResult(j, pageSize)+1 ; int lastResult = pageSize * j > totalCount ? totalCount : pageSize * j; for(int k = firstResult ; k <= lastResult; k++){ Row row = sheet.getRow(k); if(row != null){ data = new ArrayList<Object>(); for(int t = 0 ; t < celNum ; t++){ Cell cell = row.getCell(t); if(cell == null){ data.add(null); }else{ cell.setCellType(CellType.STRING); String value = cell.getStringCellValue(); if(StringUtils.isNotBlank(value)) value = value.trim(); data.add(cell.getStringCellValue()); } } data.add(file.getPath()); datas.add(data); } } //导入数据 System.out.println("filePath=" + file.getPath()); importData(datas); } } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 导入数据 * @param datas */ public static void importData(List<List<Object>> datas){ Connection conn = null; PreparedStatement ps = null; String column = "enterpriseName,contactPerson,contactNum,phoneNum,fax,email,zipCode,provinceName,cityName,countyName,addressNameT,businessScope,enterpriseTypeText,registeredCapitalT,website,businessState,setupTime,businessPeriod,enterpriseRegistration,divide,businessIntroduction,qqNum,weChat,filePath,industry,industryCode,enterpriseType,provinceCode,cityCode,countyCode,address,registerProvinceCode,registerProvinceName,registerCityCode,registerCityName,registerCountyCode,registerCountyName,enterpriseGJ,enterpriseNationalityCode,currency,currencyCode,registeredCapital"; StringBuffer sb = new StringBuffer("insert into cme_enterprise_imp(").append(column).append(") values ("); String[] columns = column.split(","); for(int i = 0; i < columns.length ; i++){ if(i != 0){ sb.append(","); } sb.append("?"); } sb.append(")"); String sql = sb.toString(); System.out.println(sql); try { // 2.建立连接 conn = JdbcUtils.getConnection(); conn.setAutoCommit(false); for(int i = 0 ; i < datas.size() ; i++){ // 3.创建语句 ps = conn.prepareStatement(sql); List<Object> data = datas.get(i); //經營範圍 String businessSope = null; //企業類型名稱 String enterpriseTypeName = null; int j = 0; int provIndex = 7; int cityIndex = 8; int countryIndex = 9; int registeredCapital = 13; int registerAddress = 18; String provNameT = null; String cityNameT = null; String countryNameT = null; EnterpriseAddressInfo eai = null; EnterpriseAddressInfo registerEai = null; Currency currency = null; int tmpIndex =1; for(; j < data.size() ; j ++){ Object o = data.get(j); ps.setObject(tmpIndex, o); if(j == provIndex && o != null && StringUtils.isNotBlank(o.toString())){ provNameT = o.toString(); } if(j == cityIndex && o != null && StringUtils.isNotBlank(o.toString())){ cityNameT = o.toString(); } if(j == countryIndex && o != null && StringUtils.isNotBlank(o.toString())){ countryNameT = o.toString(); } //处理地址 if(j == 10 && o != null){ eai = getEnterpriseCountry(o.toString(),provNameT,cityNameT,countryNameT); } //处理注册地 if(j == registerAddress && o != null){ registerEai = getEnterpriseCountry(o.toString(),null,null,null); } //處理注冊資金 if(j == registeredCapital && o!= null){ currency = getCurrency(o.toString()); } if(j == 11 && o != null){ businessSope = o.toString(); } if(j == 12 && o != null){ enterpriseTypeName = o.toString(); } tmpIndex++; } //根據經營範圍獲取產業行業 IndustryInfo info = getEnterpriseIndustry(businessSope); String industryName = info != null ? info.getName() : null; String industryCode = info != null ? info.getCode() : null; ps.setObject(tmpIndex++, industryName); ps.setObject(tmpIndex++, industryCode); ps.setObject(tmpIndex++, getEnterpriseTypeCode(enterpriseTypeName)); //处理地址 if(eai != null && StringUtils.isNotBlank(eai.getProvId())){ ps.setObject(provIndex+1, eai.getProvName()); ps.setObject(tmpIndex++, eai.getProvId()); }else{ ps.setObject(tmpIndex++, null); } if(eai != null && StringUtils.isNotBlank(eai.getCityId())){ ps.setObject(cityIndex+1, eai.getCityName()); ps.setObject(tmpIndex++, eai.getCityId()); }else{ ps.setObject(tmpIndex++, null); } if(eai != null && StringUtils.isNotBlank(eai.getCountryId())){ ps.setObject(countryIndex+1, eai.getCountryName()); ps.setObject(tmpIndex++, eai.getCountryId()); }else{ ps.setObject(tmpIndex++, null); } if(eai != null && StringUtils.isNotBlank(eai.getAddress())){ ps.setObject(tmpIndex++, eai.getAddress()); }else{ ps.setObject(tmpIndex++, null); } //处理注册地 if(registerEai !=null && StringUtils.isNotBlank(registerEai.getProvId())){ ps.setObject(tmpIndex++, registerEai.getProvId()); ps.setObject(tmpIndex++, registerEai.getProvName()); }else{ ps.setObject(tmpIndex++, null); ps.setObject(tmpIndex++, null); } if(registerEai !=null && StringUtils.isNotBlank(registerEai.getCityId())){ ps.setObject(tmpIndex++, registerEai.getCityId()); ps.setObject(tmpIndex++, registerEai.getCityName()); }else{ ps.setObject(tmpIndex++, null); ps.setObject(tmpIndex++, null); } if(registerEai !=null && StringUtils.isNotBlank(registerEai.getCountryId())){ ps.setObject(tmpIndex++, registerEai.getCountryId()); ps.setObject(tmpIndex++, registerEai.getCountryName()); }else{ ps.setObject(tmpIndex++, null); ps.setObject(tmpIndex++, null); } ps.setObject(tmpIndex++, "中国"); ps.setObject(tmpIndex++, "RE01-001"); if(currency != null){ ps.setObject(tmpIndex++, currency.getCode()); ps.setObject(tmpIndex++, currency.getName()); ps.setObject(tmpIndex++, currency.getRegisteredCapital()); }else{ ps.setObject(tmpIndex++, null); ps.setObject(tmpIndex++, null); ps.setObject(tmpIndex++, null); } // 4.执行语句 ps.execute(); } conn.commit(); }catch(Exception e){ JdbcUtils.rollback(conn); e.printStackTrace(); }finally{ JdbcUtils.free(null, ps, conn); } } /** * 根據經營範圍獲取企業行業產業分類 * @param businessScope * @return */ public static IndustryInfo getEnterpriseIndustry(String businessScope){ if(StringUtils.isBlank(businessScope)){ return null; } for(String key : infos.keySet()){ if(businessScope.contains(key)){ return infos.get(key).get(0); } } return null; } /** * 根据企业类型获取企业类型编码 * @param enterpriseTypeName * @return */ public static String getEnterpriseTypeCode(String enterpriseTypeName){ if(StringUtils.isBlank(enterpriseTypeName)){ return null; } for(Entry<String, String> entry : enterpriseTypes.entrySet()){ String typeName = entry.getValue(); if(enterpriseTypeName.startsWith(typeName)){ return entry.getKey(); } for(int i = typeName.length()-1; i >0; i--){ if(enterpriseTypeName.startsWith(typeName.substring(0,i))){ return entry.getKey(); } } if(enterpriseTypeName.contains(typeName)){ return entry.getKey(); } } return null; } public static Currency getCurrency(String registeredCapital){ if(StringUtils.isBlank(registeredCapital)){ return null; } boolean flag = false; Currency c = new Currency(); for(Entry<String,String> entry : currencys.entrySet()){ String name = entry.getValue(); if(registeredCapital.contains(name)){ registeredCapital = registeredCapital.replace(name, ""); flag = true; } if(!flag){ for(int i = name.length()-1; i >0; i--){ String tmp = name.substring(0,i); if(registeredCapital.contains(tmp)){ registeredCapital = registeredCapital.replace(tmp, ""); flag = true; break; } } } if(flag){ c.setCode(entry.getKey()); c.setName(name); c.setRegisteredCapital(registeredCapital.trim()); break; } } return c; } /** * 根据地址获取省-市-县-街道地址 * @param address * @param provNameT * @param cityNameT * @param countryNameT * @return */ public static EnterpriseAddressInfo getEnterpriseCountry(String address,String provNameT,String cityNameT,String countryNameT){ String provName = null; String provId = null; String countryName = null; String countryId = null; String cityName = null; String cityId = null; boolean hasProv = false; boolean hasCity = false; boolean hasCountry = false; if(StringUtils.isBlank(address)){ return null; } for(CountryMapping cm : cms){ if(StringUtils.isNotBlank(provNameT) &&(cm.getProvName().contains(provNameT) || provNameT.contains(cm.getProvName()))){ hasProv = true; } address = address.trim(); //获取省 if(!hasProv && address.startsWith(getShortProvName(cm.getProvName()))){ hasProv = true; } if(hasProv){ provId = cm.getProvId(); provName = cm.getProvName(); address = address.replaceAll(getShortProvName(cm.getProvName()).concat("省"), ""); address = address.replaceAll(getShortProvName(cm.getProvName()).concat("市"), ""); address = address.replaceAll(cm.getProvName(), ""); break; } } for(CountryMapping cm : cms){ if(StringUtils.isNotBlank(cityNameT) && (cm.getCityName().contains(cityNameT) || cityNameT.contains(cm.getCityName()))){ hasCity = true; } address = address.trim(); if(!hasCity && address.startsWith(getShortCityName(cm.getCityName()))){ hasCity = true; } if(hasCity){ address = address.replaceAll(getShortCityName(cm.getCityName()).concat("市"), ""); address = address.replaceAll(getShortCityName(cm.getCityName()).concat("区"), ""); address = address.replaceAll(cm.getCityName(), ""); cityId = cm.getCityId(); cityName = cm.getCityName(); if(!hasProv){ provId = cm.getProvId(); provName = cm.getProvName(); hasProv = true; } break; } } for(CountryMapping cm : cms){ if(StringUtils.isNotBlank(countryNameT) &&StringUtils.isNotBlank(cm.getCountryName()) && (cm.getCountryName().contains(countryNameT) || countryNameT.contains(cm.getCountryName()))){ hasCountry = true; } //获取县 address = address.trim(); if(!hasCountry && StringUtils.isNotBlank(cm.getCountryName()) && address.startsWith(getShortCountryName(cm.getCountryName()))){ hasCountry = true; } if(hasCountry){ address = address.replaceAll(getShortCountryName(cm.getCountryName()).concat("县"), ""); address = address.replaceAll(getShortCountryName(cm.getCountryName()).concat("区"), ""); address = address.replaceAll(cm.getCountryName(), ""); countryId = cm.getCountryId(); countryName = cm.getCountryName(); if(!hasProv){ provId = cm.getProvId(); provName = cm.getProvName(); hasProv = true; } if(!hasCity){ cityId = cm.getCityId(); cityName = cm.getCityName(); hasCity = true; } break; } } EnterpriseAddressInfo eai = new EnterpriseAddressInfo(); eai.setProvId(provId); eai.setProvName(provName); eai.setCityId(cityId); eai.setCityName(cityName); eai.setCountryId(countryId); eai.setCountryName(countryName); eai.setAddress(address.trim()); return eai; } public static String getShortProvName(String provName){ if(StringUtils.isBlank(provName)){ return null; } if(provName.length() == 2){ return provName; } return provName.replace("省", "").replace("市", ""); } public static String getShortCityName(String cityName){ if(StringUtils.isBlank(cityName)){ return null; } if(cityName.length() == 2){ return cityName; } return cityName.replace("市", "").replace("区", ""); } public static String getShortCountryName(String countryName){ if(StringUtils.isBlank(countryName)){ return null; } if(countryName.length() == 2){ return countryName; } return countryName.replace("县", "").replace("区", ""); } /** * 获取所有企业类型 * @return */ public static Map<String,String> getEnterpriseTypes(){ Map<String,String> result = new HashMap<String, String>(); String sql = "select *from cme_treedictionary_info where pid = 'FE01'"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ String code = rs.getString("dkey"); String name = rs.getString("dvalue"); result.put(code, name); } }catch(Exception e){ JdbcUtils.rollback(conn); e.printStackTrace(); }finally{ JdbcUtils.free(rs, ps, conn); } return result; } public static Map<String,String> getCurrencys(){ Map<String,String> result = new HashMap<String, String>(); String sql = "select *from cme_treedictionary_info where pid = 'CT01'"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ String code = rs.getString("dkey"); String name = rs.getString("dvalue"); result.put(code, name); } }catch(Exception e){ JdbcUtils.rollback(conn); e.printStackTrace(); }finally{ JdbcUtils.free(rs, ps, conn); } return result; } /** * 获取地区(省-市-县) * @return */ public static List<CountryMapping> getCountryMappings(){ List<CountryMapping> result = new ArrayList<CountryMapping>(); String sql = "select *from t_country_mapping"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ String provId = rs.getString("provId"); String provName = rs.getString("provName"); String cityId = rs.getString("cityId"); String cityName = rs.getString("cityName"); String countryId = rs.getString("countryId"); String countryName = rs.getString("countryName"); CountryMapping cm = new CountryMapping(); cm.setProvId(provId); cm.setProvName(provName); cm.setCityId(cityId); cm.setCityName(cityName); cm.setCountryId(countryId); cm.setCountryName(countryName); result.add(cm); } }catch(Exception e){ JdbcUtils.rollback(conn); e.printStackTrace(); }finally{ JdbcUtils.free(rs, ps, conn); } return result; } /** * 获取行业分类 * @return */ public static Map<String, List<IndustryInfo>> getIndustryInfos(){ Map<String,List<IndustryInfo>> result = new HashMap<String, List<IndustryInfo>>(); String sql = "select *from cme_industry_import"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 2.建立连接 conn = JdbcUtils.getConnection(); ps = conn.prepareStatement(sql); rs = ps.executeQuery(); while(rs.next()){ String code = rs.getString("code"); String name = rs.getString("name"); String desc = rs.getString("description"); IndustryInfo info = new IndustryInfo(); info.setCode(code); info.setName(name); if(StringUtils.isNotBlank(desc)){ String[] keys = desc.split(","); for(String key : keys){ if(result.get(key) != null){ result.get(key).add(info); }else{ List<IndustryInfo> infos = new ArrayList<IndustryInfo>(); infos.add(info); result.put(key, infos); } } } } }catch(Exception e){ JdbcUtils.rollback(conn); e.printStackTrace(); }finally{ JdbcUtils.free(rs, ps, conn); } return result; } public static int getTotalPage(int totalCount,int pageSize){ return (totalCount + pageSize - 1)/pageSize; } public static int getFirstResult(int pageNo,int pageSize){ return (pageNo -1) * pageSize; } }