浏览代码

RST修改优化地址选项

xian 6 年之前
父节点
当前提交
2bee2ac5d6

+ 27 - 5
watero-common-tool/src/main/java/com/iamberry/wechat/tools/AddrUtil.java

@@ -68,16 +68,38 @@ public class AddrUtil {
 			String url = "http://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=" + URLEncoder.encode(addr + "邮编", "UTF-8");
 			Document doc = Jsoup.parse(HttpClient431Util.doGet(null, url));
 			Elements rows = doc.select(".op_exactqa_s_answer");
-			return rows.text().trim();
+			String result = rows.text().trim();
+			if (result.isEmpty() || result.length() >= 7) {
+				LOGGER.error("{} 查询邮政编码失败 {}", addr, result);
+				return null;
+			}
+			return result;
 		} catch (Exception e) {
 			LOGGER.error("", e);
 		}
 		return null;
 	}
 
-	public static String dealCite(String cite) {
-		//
-
-		return null;
+	/**
+	 * 处理系统中地址数据信息,因为各个地址上传的城市数据不一致,所以系统需要进行处理
+	 * @param pro 省份
+	 * @param city 城市
+	 * @param area 区域
+	 * @param address 详细地址
+	 * @param splitChar 分隔符
+	 * @return
+	 */
+	public static String dealAddress(String pro, String city, String area, String address, String splitChar, boolean append) {
+		// 判断是否通过分隔符来处理的
+		if (splitChar != null) {
+			String start = pro + splitChar + city + splitChar + area + splitChar;
+			return pro + " " + (append ? "" : (city + " ")) + area + " " + address.substring(start.length(), address.length());
+		}
+		String result = address.substring(pro.length()).trim();
+		if (!append) {
+			result = result.substring(city.length()).trim();
+		}
+		result = result.substring(area.length()).trim();
+		return pro + " " + (append ? "" : (city + " ")) + area + " " + result;
 	}
 }

+ 2 - 2
watero-rst-web/src/main/java/com/iamberry/rst/controllers/order/AwaitSendController.java

@@ -266,9 +266,9 @@ public class AwaitSendController {
         }
         LOGGER.info( "===salesId:" + salesId + "快递方式:" + post+ "订单编号:"+ orderId);
         // 收件人信息
-        String[] addrs = salesOrderInfo.getSalesAddressInfo().split("-");
+        String[] addrs = salesOrderInfo.getSalesAddressInfo().split(" ");
         if (addrs.length <= 3) {
-            addrs = salesOrderInfo.getSalesAddressInfo().split(" ");
+            addrs = salesOrderInfo.getSalesAddressInfo().split("-");
         }
         // 获取收件人邮编
         String postCode = AddrUtil.getPostCode(addrs[2]);

+ 42 - 26
watero-rst-web/src/main/java/com/iamberry/rst/utils/ExcelUtil.java

@@ -4,6 +4,7 @@ import com.iamberry.rst.core.order.EfastOrder;
 import com.iamberry.rst.core.order.ProductColor;
 import com.iamberry.rst.core.pts.PtsBomComponents;
 import com.iamberry.rst.faces.cm.SalesOrderService;
+import com.iamberry.wechat.tools.AddrUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFCellStyle;
@@ -470,14 +471,16 @@ public class ExcelUtil {
                     break;
                 }
                 EfastOrder order = new EfastOrder();
-
-                String nameValue = getValue(temp.getCell(nameColumnIndex));  // 读取name
-                String platformOrderIdValue = getValue(temp.getCell(platformOrderColumnIndex));  // 读取平台id
+                // 读取name
+                String nameValue = getValue(temp.getCell(nameColumnIndex));
+                // 读取平台id
+                String platformOrderIdValue = getValue(temp.getCell(platformOrderColumnIndex));
                 //获取手机号码
                 //String userTel = getValue(temp.getCell(telColumnIndex)).trim();   // 读取tel
                 Cell telCell = temp.getCell(telColumnIndex);
                 String userTel = String.valueOf(getExcelCell(telCell));
-                String OrderProductBarCodeValue = map.get(getValue(temp.getCell(productColumnIndex)).trim()); // 读取对应的产品id
+                // 读取对应的产品id
+                String OrderProductBarCodeValue = map.get(getValue(temp.getCell(productColumnIndex)).trim());
                 if(StringUtils.isEmpty(nameValue)){
                     errorNum ++;
                     order.setReturnStatus("error");
@@ -519,7 +522,6 @@ public class ExcelUtil {
 
                 // 如果手机号码校验不通过,则应该不录入
                 if (userTel.trim().length() < 11 || userTel.trim().length() > 15) {
-                    //temp.getCell(telColumnIndex).setCellStyle(cellStyle);
                     order.setReturnStatus("error");
                     order.setReturnMsg("手机号码不正确");
                     order.setPlatformOrderId("1");
@@ -535,9 +537,11 @@ public class ExcelUtil {
                 if(orderNum == null || "".equals(orderNum) || Integer.valueOf(orderNum) == 0){
                     order.setReturnStatus("error");
                     order.setReturnMsg("数量不正确");
-                    order.setOrderNum(0);               // 读取购买数量
+                    // 读取购买数量
+                    order.setOrderNum(0);
                 }else{
-                    order.setOrderNum(Integer.valueOf(orderNum));               // 读取购买数量
+                    // 读取购买数量
+                    order.setOrderNum(Integer.valueOf(orderNum));
                 }
                 order.setOrderRemark(orderRemark);
                 if (infoColumnIndex.length == 1){
@@ -585,7 +589,7 @@ public class ExcelUtil {
                     continue;
                 }
                 // 支付方式
-                order.setOrderPayType(1);               // 微信支付
+                order.setOrderPayType(1);
                 order.setOrderPayMoney(price.get(order.getOrderProductBarCode()).getColorDiscount() * order.getOrderNum());
                 order.setOrderAmount(price.get(order.getOrderProductBarCode()).getColorDiscount() * order.getOrderNum());
                 order.setOrderOpenId(order.getOrderAddressTel());
@@ -593,17 +597,20 @@ public class ExcelUtil {
                 order.setOrderId(OrderNoUtil.createOrderCode(Math.abs(new Random().nextInt(1000))));
 
                 if(isOtherStore == 2){
-                    String storeValue = getValue(temp.getCell(orderStoreInfoStColumnIndex)).trim();  // 读取店铺
+                    // 读取店铺
+                    String storeValue = getValue(temp.getCell(orderStoreInfoStColumnIndex)).trim();
                     for (int k=0;k<storeArray.length;k++){
                        String[] stores = storeArray[k].split("_");
                        if(stores[0].trim().equals(storeValue.trim())){
-                           order.setStoreId(Integer.valueOf(stores[1]));           //店铺
+                           //店铺
+                           order.setStoreId(Integer.valueOf(stores[1]));
                        }
                     }
                 }else{
-                    order.setStoreId(Integer.valueOf(storeArray[0]));           //店铺
+                    //店铺
+                    order.setStoreId(Integer.valueOf(storeArray[0]));
                 }
-                order.setOid(oid);                       // oid
+                order.setOid(oid);
                 try{
                     if (postType.equals("ems")) {
                         if (order.getOrderProvince().contains("广东")) {
@@ -706,23 +713,29 @@ public class ExcelUtil {
         Object obj;
         if (null != cell) {
             switch (cell.getCellType()) {
-                case HSSFCell.CELL_TYPE_NUMERIC: // 数字
+                // 数字
+                case HSSFCell.CELL_TYPE_NUMERIC:
                     double cellValue = cell.getNumericCellValue();
                     obj = new DecimalFormat("#").format(cellValue);
                     break;
-                case HSSFCell.CELL_TYPE_STRING: // 字符串
+                // 字符串
+                case HSSFCell.CELL_TYPE_STRING:
                     obj = cell.getStringCellValue();
                     break;
-                case HSSFCell.CELL_TYPE_BOOLEAN: // Boolean
+                // Boolean
+                case HSSFCell.CELL_TYPE_BOOLEAN:
                     obj = cell.getBooleanCellValue();
                     break;
-                case HSSFCell.CELL_TYPE_FORMULA: // 公式
+                // 公式
+                case HSSFCell.CELL_TYPE_FORMULA:
                     obj = cell.getCellFormula();
                     break;
-                case HSSFCell.CELL_TYPE_BLANK: // 空值
+                // 空值
+                case HSSFCell.CELL_TYPE_BLANK:
                     obj = "";
                     break;
-                case HSSFCell.CELL_TYPE_ERROR: // 故障
+                // 故障
+                case HSSFCell.CELL_TYPE_ERROR:
                     obj = "";
                     break;
                 default:
@@ -785,10 +798,11 @@ public class ExcelUtil {
      */
     private static String[] splitAddress(String addrInfo) {
         String[] addrs = null;
-
+        String splitCharTemp = null;
         // 首先通过整体切割符合切割
         for (String charSplit : ENTIRETY_SPLIT) {
             addrs = StringUtils.split(addrInfo, charSplit);
+            splitCharTemp = charSplit;
             if (addrs != null && addrs.length >= 4) {
                 break;
             } else if (addrs != null && addrs.length == 3 && !addrs[0].contains("省")) {
@@ -800,18 +814,18 @@ public class ExcelUtil {
         if (addrs != null && addrs.length >= 4) {
             // 防止区域数据出现小区 扰乱数据
             if (!addrs[2].contains("小区")) {
-                return new String[]{addrs[0], addrs[1], addrs[2], addrInfo};
+                String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), addrInfo, splitCharTemp, false);
+                return new String[]{addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), address};
             }
-
         } else if (addrs != null && addrs.length == 3) {
             // 防止区域数据出现小区 扰乱数据
             if (!addrs[1].contains("小区")) {
-                return new String[]{addrs[0], addrs[0], addrs[1], addrInfo};
+                String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), addrInfo, splitCharTemp, true);
+                return new String[]{addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), address};
             }
         }
 
         for (String[] splits : PROVINCE_CITY_AERA_SPLIT) {
-
             // 每组独立切割字符单独循环
             String tempInfo = addrInfo;
             addrs = new String[splits.length + 1];
@@ -837,14 +851,16 @@ public class ExcelUtil {
                         continue;
                     }
                     // 只有两级地址
-                    return new String[]{addrs[0], addrs[0], addrs[1], addrInfo};
+                    String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), addrInfo, null, true);
+                    return new String[]{addrs[0].trim(), addrs[0].trim(), addrs[1].trim(), address};
                 } else if ((addrs.length - 1) == 3) {
                     // 防止区域数据出现小区 扰乱数据
                     if (addrs[2].contains("小区")) {
                         continue;
                     }
                     // 三级地址
-                    return new String[]{addrs[0], addrs[1], addrs[2], addrInfo};
+                    String address = AddrUtil.dealAddress(addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), addrInfo, null, false);
+                    return new String[]{addrs[0].trim(), addrs[1].trim(), addrs[2].trim(), address};
                 }
             }
         }
@@ -853,7 +869,7 @@ public class ExcelUtil {
     }
 
     public static void main(String[] args) throws IOException {
-        String[] add = splitAddress("海南省 临高县 博厚镇衍宏海港小镇(303县道西)衍宏海港小镇37栋602");
+        String[] add = splitAddress("北京 北京市 昌平区 回龙观街道回龙观 冠庭园5号楼2单元502");
         if (add == null) {
             System.out.println("切割失败...");
         }