ExcelUtil.java 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914
  1. package com.iamberry.rst.utils;
  2. import com.iamberry.rst.core.order.EfastOrder;
  3. import com.iamberry.rst.core.order.ProductColor;
  4. import com.iamberry.rst.core.pts.PtsBomComponents;
  5. import com.iamberry.rst.faces.cm.SalesOrderService;
  6. import com.iamberry.wechat.tools.AddrUtil;
  7. import org.apache.commons.lang3.StringUtils;
  8. import org.apache.poi.hssf.usermodel.HSSFCell;
  9. import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  10. import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
  11. import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  12. import org.apache.poi.ss.usermodel.*;
  13. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Component;
  17. import java.io.*;
  18. import java.text.DecimalFormat;
  19. import java.text.SimpleDateFormat;
  20. import java.util.*;
  21. /**
  22. * Excel工具类
  23. *
  24. * @author 献
  25. * @company 深圳爱贝源科技有限公司
  26. * @website www.iamberry.com
  27. * @tel 18271840547
  28. * @date 2017/5/25
  29. */
  30. @Component
  31. public class ExcelUtil {
  32. private static final org.slf4j.Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
  33. @Autowired
  34. private SalesOrderService salesOrderService;
  35. /**
  36. * 读取Excel文件头
  37. *
  38. * @param filePath
  39. * @return
  40. */
  41. public static List<String> readExcelHead(String filePath) throws IOException {
  42. List<String> heads = new ArrayList<String>();
  43. // 判断文件是否存在
  44. File file = new File(filePath);
  45. if (!file.exists()) {
  46. return null;
  47. }
  48. // 获取Workbook
  49. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  50. Workbook wb = null;
  51. if (filePath.endsWith("xls")) {
  52. wb = new HSSFWorkbook(inputStream);
  53. } else {
  54. wb = new XSSFWorkbook(inputStream);
  55. }
  56. inputStream.close();
  57. // 获取Sheet
  58. Sheet sheet = wb.getSheetAt(0);
  59. // 获取第一行数据
  60. Row row = sheet.rowIterator().next();
  61. Iterator<Cell> cells = row.cellIterator();
  62. // 获得第一行的迭代器,并遍历cell
  63. while (cells.hasNext()) {
  64. Cell cell = cells.next();
  65. heads.add(cell.getStringCellValue());
  66. }
  67. return heads;
  68. }
  69. /**
  70. * 读取Excel内容
  71. * 去除重复
  72. *
  73. * @param filePath
  74. * @return
  75. */
  76. public static List<String> readCell(String filePath, String cellName) throws IOException {
  77. // 判断文件是否存在
  78. File file = new File(filePath);
  79. if (!file.exists()) {
  80. return null;
  81. }
  82. // 获取Workbook
  83. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  84. Workbook wb = null;
  85. if (filePath.endsWith("xls")) {
  86. wb = new HSSFWorkbook(inputStream);
  87. } else {
  88. wb = new XSSFWorkbook(inputStream);
  89. }
  90. inputStream.close();
  91. // 获取Sheet
  92. Sheet sheet = wb.getSheetAt(0);
  93. Iterator<Row> rows = sheet.rowIterator();
  94. // 获取第一行的数据,匹配到表头
  95. int cellNum = -1;
  96. Row row = rows.next();
  97. Iterator<Cell> cells = row.cellIterator();
  98. while (cells.hasNext()) {
  99. Cell cell = cells.next();
  100. if (cellName.trim().equals(cell.getStringCellValue().trim())) {
  101. cellNum = cell.getColumnIndex();
  102. break;
  103. }
  104. }
  105. if (cellNum == -1) return null;
  106. // 读取数据
  107. Map<String, String> map = new HashMap<>();
  108. while (rows.hasNext()) {
  109. Row temp = rows.next();
  110. Cell cell = temp.getCell(cellNum);
  111. // 非空的列需要使用
  112. if (cell == null) {
  113. continue;
  114. }
  115. String name = getValue(cell);
  116. if (name != null && !"".equals(name.trim())) {
  117. String cellValue = getValue(cell);
  118. if (map.get(cellValue) == null) {
  119. map.put(cellValue, cellValue);
  120. }
  121. }
  122. }
  123. // Map to List
  124. Collection<String> valueCollection = map.values();
  125. return new ArrayList<String>(valueCollection);
  126. }
  127. /**
  128. * 读取Excel内容 -- 行数是否超过100,超过false 不超过true;
  129. * @param filePath
  130. * @return
  131. */
  132. public static boolean readExcelNumber(String filePath,Integer maxNuber) throws IOException {
  133. // 判断文件是否存在
  134. File file = new File(filePath);
  135. if (!file.exists()) {
  136. return false;
  137. }
  138. // 获取Workbook
  139. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  140. Workbook wb = null;
  141. if (filePath.endsWith("xls")) {
  142. wb = new HSSFWorkbook(inputStream);
  143. } else {
  144. wb = new XSSFWorkbook(inputStream);
  145. }
  146. inputStream.close();
  147. // 获取Sheet
  148. Sheet sheet = wb.getSheetAt(0);
  149. Integer number = 0; //控制有效行数在maxNumber之内
  150. Integer i = 0; //控制总行数在MaxNumber之内,因为会出现无效行数的问题,如果一直循环,会循环65535行
  151. Iterator<Row> rows = sheet.rowIterator();
  152. while (rows.hasNext()) {
  153. Row row = rows.next();
  154. Cell cell = row.getCell(0);
  155. // 非空的列需要使用
  156. if (cell == null) {
  157. continue;
  158. }
  159. String name = getValue(cell);
  160. String cellValue = "";
  161. if (name != null && !"".equals(name.trim())) {
  162. cellValue = getValue(cell);
  163. }
  164. if (cellValue != null && !"".equals(cellValue)) {
  165. number ++;
  166. }
  167. i++;
  168. if(number > maxNuber+1){
  169. return false;
  170. }
  171. if(i > maxNuber+1){
  172. break;
  173. }
  174. }
  175. return true;
  176. }
  177. /**
  178. * 读取Excel内容
  179. * 读取bom单excel的内容
  180. *
  181. * @param filePath
  182. * @return
  183. */
  184. public static Map<String, Object> readExcelBom(String filePath) throws IOException {
  185. // 判断文件是否存在
  186. File file = new File(filePath);
  187. if (!file.exists()) {
  188. return null;
  189. }
  190. // 获取Workbook
  191. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  192. Workbook wb = null;
  193. if (filePath.endsWith("xls")) {
  194. wb = new HSSFWorkbook(inputStream);
  195. } else {
  196. wb = new XSSFWorkbook(inputStream);
  197. }
  198. inputStream.close();
  199. // 获取Sheet
  200. Sheet sheet = wb.getSheetAt(0);
  201. //获取bom单名称
  202. Row rows = sheet.getRow(1);// 获取行
  203. Cell cell = null;
  204. cell = rows.getCell(1);//列
  205. String bomName = "";
  206. if(cell != null){
  207. bomName = cell.getStringCellValue();
  208. }
  209. //获取产品名称
  210. rows = sheet.getRow(2);// 获取行
  211. cell = rows.getCell(1);//列
  212. String produceName = "";
  213. if(cell != null){
  214. produceName = cell.getStringCellValue();
  215. }
  216. //硬件版本号
  217. rows = sheet.getRow(3);// 获取行
  218. cell = rows.getCell(1);//列
  219. String bomVersion = "";
  220. if(cell != null){
  221. bomVersion = cell.getStringCellValue();
  222. }
  223. //软件版本号
  224. rows = sheet.getRow(4);// 获取行
  225. cell = rows.getCell(1);//列
  226. String machineVersionNo = "";
  227. if(cell != null){
  228. machineVersionNo = cell.getStringCellValue();
  229. }
  230. //备注
  231. rows = sheet.getRow(5);// 获取行
  232. cell = rows.getCell(1);//列
  233. String bomRemarks = "";
  234. if(cell != null){
  235. bomRemarks = cell.getStringCellValue();
  236. }
  237. List<PtsBomComponents> componentsList = new ArrayList<PtsBomComponents>();
  238. Iterator<Row> rowss = sheet.rowIterator();
  239. int i = 0;
  240. while (rowss.hasNext()) {
  241. Row ro = rowss.next();
  242. if(i>7){
  243. Iterator<Cell> cells = ro.cellIterator();
  244. if(ro == null){
  245. break;
  246. }
  247. int j=0;
  248. PtsBomComponents bomComponents = new PtsBomComponents();
  249. String componentsNo = "";
  250. String bomComponentsQuantity = "";
  251. while (cells.hasNext()) {
  252. Cell ce = cells.next();
  253. if (ce == null){
  254. break;
  255. }
  256. if(j == 0){
  257. componentsNo = ce.getStringCellValue();
  258. }else if(j == 1){
  259. bomComponentsQuantity = ce.getStringCellValue();
  260. }
  261. j++;
  262. }
  263. bomComponents.setComponentsNo(componentsNo);
  264. bomComponents.setBomComponentsQuantity(Integer.valueOf(bomComponentsQuantity) * 100);
  265. componentsList.add(bomComponents);
  266. }
  267. i++;
  268. }
  269. Map<String,Object> map = new HashMap<String, Object>();
  270. map.put("bomName",bomName);
  271. map.put("produceName",produceName);
  272. map.put("bomVersion",bomVersion);
  273. map.put("machineVersionNo",machineVersionNo);
  274. map.put("bomRemarks",bomRemarks);
  275. map.put("componentsList",componentsList);
  276. return map;
  277. }
  278. /**
  279. * 读取Excel内容
  280. * 不去除重复
  281. *
  282. * @param filePath
  283. * @return
  284. */
  285. public static List<String> readCell2(String filePath, String cellName) throws IOException {
  286. // 判断文件是否存在
  287. File file = new File(filePath);
  288. if (!file.exists()) {
  289. return null;
  290. }
  291. // 获取Workbook
  292. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  293. Workbook wb = null;
  294. if (filePath.endsWith("xls")) {
  295. wb = new HSSFWorkbook(inputStream);
  296. } else {
  297. wb = new XSSFWorkbook(inputStream);
  298. }
  299. inputStream.close();
  300. // 获取Sheet
  301. Sheet sheet = wb.getSheetAt(0);
  302. Iterator<Row> rows = sheet.rowIterator();
  303. // 获取第一行的数据,匹配到表头
  304. int cellNum = -1;
  305. Row row = rows.next();
  306. Iterator<Cell> cells = row.cellIterator();
  307. while (cells.hasNext()) {
  308. Cell cell = cells.next();
  309. if (cellName.trim().equals(cell.getStringCellValue().trim())) {
  310. cellNum = cell.getColumnIndex();
  311. break;
  312. }
  313. }
  314. if (cellNum == -1) return null;
  315. // 读取数据
  316. ArrayList<String> arreyMap = new ArrayList<String>();
  317. while (rows.hasNext()) {
  318. Row temp = rows.next();
  319. Cell cell = temp.getCell(cellNum);
  320. // 非空的列需要使用
  321. if (cell == null) {
  322. continue;
  323. }
  324. String name = getValue(cell);
  325. if (name != null && !"".equals(name.trim())) {
  326. String cellValue = getValue(cell);
  327. arreyMap.add(cellValue);
  328. }
  329. }
  330. // Map to List
  331. /*Collection<String> valueCollection = map.values();*/
  332. return arreyMap;
  333. }
  334. public List<EfastOrder> readCell(String filePath, String productName, String[] maps,
  335. String[] infos, String tel, String name,String platformOrder, String num,String remark,
  336. Map<String, ProductColor> price, String postType, String orderStoreInfoSt, Integer isOtherStore,String[] storeArray)
  337. throws IOException {
  338. Map<String, String> map = new HashMap<>();
  339. for (String t : maps) {
  340. String[] temp = StringUtils.split(t, "_");
  341. map.put((temp[1].trim()), (temp[0].trim()));
  342. }
  343. // 判断文件是否存在
  344. File file = new File(filePath);
  345. if (!file.exists()) {
  346. return null;
  347. }
  348. // 获取Workbook
  349. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  350. Workbook wb = null;
  351. if (filePath.endsWith("xls")) {
  352. wb = new HSSFWorkbook(inputStream);
  353. } else {
  354. wb = new XSSFWorkbook(inputStream);
  355. }
  356. inputStream.close();
  357. // 获取Sheet
  358. Sheet sheet = wb.getSheetAt(0);
  359. Iterator<Row> rows = sheet.rowIterator();
  360. // 获取第一行的数据,匹配到表头
  361. int nameColumnIndex = -1;
  362. int platformOrderColumnIndex = -1;
  363. int telColumnIndex = -1;
  364. int productColumnIndex = -1;
  365. int numColumnIndex = -1;
  366. int remarkColumnIndex = -1;
  367. int orderStoreInfoStColumnIndex = -1;
  368. int[] infoColumnIndex = new int[infos.length];
  369. int infoCount = 0;
  370. // 读取数据
  371. Row row = rows.next();
  372. Iterator<Cell> cells = row.cellIterator();
  373. while (cells.hasNext()) {
  374. Cell cell = cells.next();
  375. if (name.trim().equals(cell.getStringCellValue().trim())) {
  376. // 匹配姓名列
  377. nameColumnIndex = cell.getColumnIndex();
  378. }
  379. if (platformOrder.trim().equals(cell.getStringCellValue().trim())) {
  380. // 匹配订单编号
  381. platformOrderColumnIndex = cell.getColumnIndex();
  382. }
  383. if (tel.trim().equals(cell.getStringCellValue().trim())) {
  384. // 匹配电话
  385. telColumnIndex = cell.getColumnIndex();
  386. }
  387. if (productName.trim().equals(cell.getStringCellValue().trim())) {
  388. // 匹配产品列
  389. productColumnIndex = cell.getColumnIndex();
  390. }
  391. if (num.trim().equals(cell.getStringCellValue().trim())) {
  392. // 匹配购买数量
  393. numColumnIndex = cell.getColumnIndex();
  394. }
  395. if (remark.trim().equals(cell.getStringCellValue().trim())) {
  396. // 匹配备注
  397. remarkColumnIndex = cell.getColumnIndex();
  398. }
  399. if (orderStoreInfoSt.trim().equals(cell.getStringCellValue().trim())) {
  400. // 匹配店铺名称
  401. orderStoreInfoStColumnIndex = cell.getColumnIndex();
  402. }
  403. // 匹配地址(可能是多个,需要组合连接)
  404. for (int i = 0; i < infos.length; i++) {
  405. if (infos[i].equals(cell.getStringCellValue())) {
  406. infoColumnIndex[i] = cell.getColumnIndex();
  407. }
  408. }
  409. }
  410. List<EfastOrder> orderEfasts = new ArrayList<>();
  411. // 样式
  412. HSSFCellStyle cellStyle = (HSSFCellStyle) wb.createCellStyle();
  413. cellStyle.setFillForegroundColor(IndexedColors.RED.getIndex());
  414. cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
  415. // 读取数据
  416. int oid = 0;
  417. int errorNum = 0;
  418. while (rows.hasNext()) {
  419. Row temp = rows.next();
  420. try {
  421. if(errorNum > 5){
  422. break;
  423. }
  424. EfastOrder order = new EfastOrder();
  425. // 读取name
  426. String nameValue = getValue(temp.getCell(nameColumnIndex));
  427. // 读取平台id
  428. String platformOrderIdValue = getValue(temp.getCell(platformOrderColumnIndex));
  429. //获取手机号码
  430. //String userTel = getValue(temp.getCell(telColumnIndex)).trim(); // 读取tel
  431. Cell telCell = temp.getCell(telColumnIndex);
  432. String userTel = String.valueOf(getExcelCell(telCell));
  433. // 读取对应的产品id
  434. String OrderProductBarCodeValue = map.get(getValue(temp.getCell(productColumnIndex)).trim());
  435. if(StringUtils.isEmpty(nameValue)){
  436. errorNum ++;
  437. order.setReturnStatus("error");
  438. order.setReturnMsg("姓名为空-交易号:"+platformOrderIdValue);
  439. order.setPlatformOrderId("1");
  440. }
  441. if(StringUtils.isEmpty(userTel) ){
  442. errorNum ++;
  443. order.setReturnStatus("error");
  444. order.setReturnMsg("手机号码为空-交易号:"+platformOrderIdValue);
  445. order.setPlatformOrderId("1");
  446. }
  447. if(StringUtils.isEmpty(OrderProductBarCodeValue)){
  448. errorNum ++;
  449. order.setReturnStatus("error");
  450. order.setReturnMsg("交易号出错-交易号:"+platformOrderIdValue);
  451. order.setPlatformOrderId("1");
  452. }
  453. order.setOrderAddressName(nameValue);
  454. if(!StringUtils.isEmpty(platformOrderIdValue)){
  455. if (!ValidateUtil.checkString(platformOrderIdValue.trim())) {
  456. order.setReturnStatus("error");
  457. order.setReturnMsg("交易号出错-交易号:"+platformOrderIdValue);
  458. order.setPlatformOrderId("1");
  459. }else{
  460. Integer flag = salesOrderService.getOrderBySalesDealCodeNum(platformOrderIdValue.trim());
  461. if(flag > 0){
  462. order.setReturnStatus("error");
  463. order.setReturnMsg("交易号重复");
  464. }
  465. order.setPlatformOrderId(platformOrderIdValue.trim());
  466. }
  467. }else{
  468. order.setReturnStatus("error");
  469. order.setReturnMsg("订单交易号不正确");
  470. order.setPlatformOrderId("1");
  471. }
  472. // 如果手机号码校验不通过,则应该不录入
  473. if (userTel.trim().length() < 11 || userTel.trim().length() > 15) {
  474. order.setReturnStatus("error");
  475. order.setReturnMsg("手机号码不正确");
  476. order.setPlatformOrderId("1");
  477. }
  478. order.setOrderAddressTel(userTel.trim());
  479. order.setOrderProductBarCode(OrderProductBarCodeValue);
  480. String orderNum = getValue(temp.getCell(numColumnIndex)).trim();
  481. String orderRemark = getValue(temp.getCell(remarkColumnIndex));
  482. if(orderNum != null && !"".equals(orderNum)){
  483. orderNum = orderNum.replaceAll("\\r|\\r|\\n","");
  484. }
  485. if(orderNum == null || "".equals(orderNum) || Integer.valueOf(orderNum) == 0){
  486. order.setReturnStatus("error");
  487. order.setReturnMsg("数量不正确");
  488. // 读取购买数量
  489. order.setOrderNum(0);
  490. }else{
  491. // 读取购买数量
  492. order.setOrderNum(Integer.valueOf(orderNum));
  493. }
  494. order.setOrderRemark(orderRemark);
  495. if (infoColumnIndex.length == 1){
  496. // 如果infoColumnIndex = 1, 则表示需要截取(可能是-、“ ”)
  497. Cell cell = temp.getCell(infoColumnIndex[0]);
  498. String addrInfo = getValue(cell);
  499. if (addrInfo == null || "".equals(addrInfo)) {
  500. // 地址为空
  501. cell.setCellStyle(cellStyle);
  502. continue;
  503. }
  504. // 处理地址信息
  505. String[] addrs = splitAddress(addrInfo);
  506. if (addrs == null && addrs.length < 4) {
  507. // 地址不合法
  508. cell.setCellStyle(cellStyle);
  509. continue;
  510. }
  511. try{
  512. order.setOrderProvince(addrs[0].trim());
  513. order.setOrderCity(addrs[1].trim());
  514. order.setOrderArea(addrs[2].trim());
  515. order.setOrderAddress(addrInfo.trim());
  516. }catch (Exception e){
  517. order.setReturnStatus("error");
  518. order.setReturnMsg("地址错误:"+ addrInfo);
  519. order.setPlatformOrderId("1");
  520. }
  521. } else if (infoColumnIndex.length == 4) {
  522. order.setOrderProvince(getValue(temp.getCell(infoColumnIndex[0])).trim());
  523. order.setOrderCity(getValue(temp.getCell(infoColumnIndex[1])).trim());
  524. order.setOrderArea(getValue(temp.getCell(infoColumnIndex[2])).trim());
  525. order.setOrderAddress(getValue(temp.getCell(infoColumnIndex[3])).trim());
  526. } else if (infoColumnIndex.length == 3) {
  527. order.setOrderProvince(getValue(temp.getCell(infoColumnIndex[0])).trim());
  528. order.setOrderCity(getValue(temp.getCell(infoColumnIndex[1])).trim());
  529. order.setOrderArea(getValue(temp.getCell(infoColumnIndex[1])).trim());
  530. order.setOrderAddress(getValue(temp.getCell(infoColumnIndex[2])).trim());
  531. } else {
  532. for (int i : infoColumnIndex) {
  533. temp.getCell(infoColumnIndex[i]).setCellStyle(cellStyle);
  534. }
  535. continue;
  536. }
  537. // 支付方式
  538. order.setOrderPayType(1);
  539. order.setOrderPayMoney(price.get(order.getOrderProductBarCode()).getColorDiscount() * order.getOrderNum());
  540. order.setOrderAmount(price.get(order.getOrderProductBarCode()).getColorDiscount() * order.getOrderNum());
  541. order.setOrderOpenId(order.getOrderAddressTel());
  542. order.setOrderProductName(price.get(order.getOrderProductBarCode()).getColorName());
  543. order.setOrderId(OrderNoUtil.createOrderCode(Math.abs(new Random().nextInt(1000))));
  544. if(isOtherStore == 2){
  545. // 读取店铺
  546. String storeValue = getValue(temp.getCell(orderStoreInfoStColumnIndex)).trim();
  547. for (int k=0;k<storeArray.length;k++){
  548. String[] stores = storeArray[k].split("_");
  549. if(stores[0].trim().equals(storeValue.trim())){
  550. //店铺
  551. order.setStoreId(Integer.valueOf(stores[1]));
  552. }
  553. }
  554. }else{
  555. //店铺
  556. order.setStoreId(Integer.valueOf(storeArray[0]));
  557. }
  558. order.setOid(oid);
  559. try{
  560. if (postType.equals("ems")) {
  561. if (order.getOrderProvince().contains("广东")) {
  562. order.setOrderPostType("ems");
  563. } else {
  564. order.setOrderPostType("eyb");
  565. }
  566. } else {
  567. order.setOrderPostType(postType);
  568. }
  569. }catch (Exception e){
  570. order.setOrderPostType("ems");
  571. e.printStackTrace();
  572. logger.info("匹配快递公司失败");
  573. }
  574. // 保存
  575. orderEfasts.add(order);
  576. } catch (Exception e) {
  577. row.getCell(0).setCellStyle(cellStyle);
  578. errorNum ++;
  579. logger.error(e.getMessage(), e);
  580. }
  581. // 迭代
  582. oid++;
  583. }
  584. // 写入
  585. OutputStream output = new BufferedOutputStream(new FileOutputStream(filePath));
  586. wb.write(output);
  587. output.close();
  588. return orderEfasts;
  589. }
  590. /**
  591. * 读取Excel内容(上传excel文档)
  592. * 不去除重复
  593. *
  594. * @param filePath
  595. * @return
  596. */
  597. public static List<String> readCell3(String filePath) throws IOException {
  598. // 判断文件是否存在
  599. File file = new File(filePath);
  600. if (!file.exists()) {
  601. return null;
  602. }
  603. // 获取Workbook
  604. InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
  605. Workbook wb = null;
  606. if (filePath.endsWith("xls")) {
  607. wb = new HSSFWorkbook(inputStream);
  608. } else {
  609. wb = new XSSFWorkbook(inputStream);
  610. }
  611. inputStream.close();
  612. // 获取Sheet
  613. Sheet sheet = wb.getSheetAt(0);
  614. Iterator<Row> rows = sheet.rowIterator();
  615. // 获取第一行的数据,匹配到表头
  616. int cellNum = -1;
  617. Row row = rows.next();
  618. Iterator<Cell> cells = row.cellIterator();
  619. while (cells.hasNext()) {
  620. Cell cell = cells.next();
  621. cellNum = cell.getColumnIndex();
  622. break;
  623. }
  624. if (cellNum == -1) return null;
  625. // 读取数据
  626. ArrayList<String> arreyMap = new ArrayList<String>();
  627. while (rows.hasNext()) {
  628. Row temp = rows.next();
  629. Cell cell = temp.getCell(cellNum);
  630. // 非空的列需要使用
  631. if (cell == null) {
  632. continue;
  633. }
  634. String name = getValue(cell);
  635. if (name != null && !"".equals(name.trim())) {
  636. String cellValue = getValue(cell);
  637. arreyMap.add(cellValue);
  638. }
  639. }
  640. // Map to List
  641. /*Collection<String> valueCollection = map.values();*/
  642. return arreyMap;
  643. }
  644. /**
  645. *获取值
  646. * @param cell
  647. * @return
  648. */
  649. private static Object getExcelCell(Cell cell){
  650. Object obj;
  651. if (null != cell) {
  652. switch (cell.getCellType()) {
  653. // 数字
  654. case HSSFCell.CELL_TYPE_NUMERIC:
  655. double cellValue = cell.getNumericCellValue();
  656. obj = new DecimalFormat("#").format(cellValue);
  657. break;
  658. // 字符串
  659. case HSSFCell.CELL_TYPE_STRING:
  660. obj = cell.getStringCellValue();
  661. break;
  662. // Boolean
  663. case HSSFCell.CELL_TYPE_BOOLEAN:
  664. obj = cell.getBooleanCellValue();
  665. break;
  666. // 公式
  667. case HSSFCell.CELL_TYPE_FORMULA:
  668. obj = cell.getCellFormula();
  669. break;
  670. // 空值
  671. case HSSFCell.CELL_TYPE_BLANK:
  672. obj = "";
  673. break;
  674. // 故障
  675. case HSSFCell.CELL_TYPE_ERROR:
  676. obj = "";
  677. break;
  678. default:
  679. obj = "";
  680. break;
  681. }
  682. } else {
  683. obj = "";
  684. }
  685. return obj;
  686. }
  687. /**
  688. * 地址 - 整体切割符
  689. */
  690. private static String[] ENTIRETY_SPLIT;
  691. /**
  692. * 地址 - 省份数据切割符
  693. */
  694. private static String[][] PROVINCE_CITY_AERA_SPLIT;
  695. static {
  696. ENTIRETY_SPLIT = new String[]{" ", "-", "_", "*"};
  697. PROVINCE_CITY_AERA_SPLIT = new String[][]{
  698. {"省", "市", "区"},
  699. {"省", "市", "县"},
  700. {"省", "市", "乡"},
  701. {"省", "市", "镇"},
  702. {"省", "市", "市"},
  703. {"自治区", "市", "区"},
  704. {"自治区", "市", "县"},
  705. {"自治区", "市", "乡"},
  706. {"自治区", "市", "镇"},
  707. {"自治区", "市", "市"},
  708. {"省", "州", "区"},
  709. {"省", "州", "县"},
  710. {"省", "州", "乡"},
  711. {"省", "州", "市"},
  712. {"省", "州", "镇"},
  713. {"市", "市", "区"},
  714. {"市", "市", "县"},
  715. {"市", "市", "镇"},
  716. {"市", "市", "乡"},
  717. {"市", "区"},
  718. {"市", "乡"},
  719. {"市", "镇"},
  720. {"市", "县"},
  721. {"省", "县", "镇"}
  722. };
  723. }
  724. /**
  725. * 切割地址
  726. */
  727. private static String[] splitAddress(String addrInfo) {
  728. String[] addrs = null;
  729. String splitCharTemp = null;
  730. // 首先通过整体切割符合切割
  731. for (String charSplit : ENTIRETY_SPLIT) {
  732. addrs = StringUtils.split(addrInfo, charSplit);
  733. splitCharTemp = charSplit;
  734. if (addrs != null && addrs.length >= 4) {
  735. break;
  736. } else if (addrs != null && addrs.length == 3 && !addrs[0].contains("省")) {
  737. break;
  738. }
  739. }
  740. // 详细地址不能直接切割
  741. if (addrs != null && addrs.length >= 4) {
  742. // 防止区域数据出现小区 扰乱数据
  743. if (!addrs[2].contains("小区")) {
  744. String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), addrInfo, splitCharTemp, false);
  745. return new String[]{addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), address};
  746. }
  747. } else if (addrs != null && addrs.length == 3) {
  748. // 防止区域数据出现小区 扰乱数据
  749. if (!addrs[1].contains("小区")) {
  750. String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), addrInfo, splitCharTemp, true);
  751. return new String[]{addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), address};
  752. }
  753. }
  754. for (String[] splits : PROVINCE_CITY_AERA_SPLIT) {
  755. // 每组独立切割字符单独循环
  756. String tempInfo = addrInfo;
  757. addrs = new String[splits.length + 1];
  758. boolean isNext = false;
  759. for (int i = 0; i < splits.length; i++) {
  760. String splitChar = splits[i];
  761. String[] temps = StringUtils.split(tempInfo, splitChar);
  762. if (temps.length >= 2) {
  763. // 获取到第一个地址
  764. addrs[i] = temps[0] + splitChar;
  765. // 下一次迭代内容
  766. tempInfo = StringUtils.substring(tempInfo, temps[0].length() + splitChar.length());
  767. } else {
  768. // 如果首次匹配失败,则停止匹配
  769. isNext = true;
  770. break;
  771. }
  772. }
  773. if (!isNext) {
  774. if ((addrs.length - 1) == 2) {
  775. // 防止区域数据出现小区 扰乱数据
  776. if (addrs[1].contains("小区")) {
  777. continue;
  778. }
  779. // 只有两级地址
  780. String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), addrInfo, null, true);
  781. return new String[]{addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), address};
  782. } else if ((addrs.length - 1) == 3) {
  783. // 防止区域数据出现小区 扰乱数据
  784. if (addrs[2].contains("小区")) {
  785. continue;
  786. }
  787. // 三级地址
  788. String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), addrInfo, null, false);
  789. return new String[]{addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), address};
  790. }
  791. }
  792. }
  793. return addrs;
  794. }
  795. public static void main(String[] args) throws IOException {
  796. String[] add = splitAddress("北京 北京市 昌平区 回龙观街道回龙观 冠庭园5号楼2单元502");
  797. if (add == null) {
  798. System.out.println("切割失败...");
  799. }
  800. for (String i : add) {
  801. System.out.println(i);
  802. }
  803. }
  804. private static SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
  805. public static String getValue(Cell cell) {
  806. if (cell == null) return null;
  807. switch (cell.getCellType()) {
  808. case Cell.CELL_TYPE_STRING: //文本
  809. return cell.getStringCellValue();
  810. case Cell.CELL_TYPE_NUMERIC: //数字、日期
  811. if (DateUtil.isCellDateFormatted(cell)) {
  812. return fmt.format(cell.getDateCellValue()); //日期型
  813. }
  814. DecimalFormat df = new DecimalFormat("#");
  815. return df.format(new Double(cell.getNumericCellValue())); //数字
  816. case Cell.CELL_TYPE_BOOLEAN: //布尔型
  817. return String.valueOf(cell.getBooleanCellValue());
  818. case Cell.CELL_TYPE_BLANK: //空白
  819. return cell.getStringCellValue();
  820. default: //错误
  821. return "ERROR";
  822. }
  823. }
  824. /**
  825. * excel 强制获取text文本
  826. * @param cell
  827. * @return
  828. */
  829. public static String getTextValue(Cell cell) {
  830. if (cell == null) return null;
  831. return cell.getStringCellValue();
  832. }
  833. }