diff --git a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/MeituanServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/MeituanServiceImpl.java index 19ba3cd..32353db 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/MeituanServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/business/service/impl/MeituanServiceImpl.java @@ -381,7 +381,7 @@ public class MeituanServiceImpl implements IMeituanService { */ @Override @Transactional(rollbackFor = Exception.class) - public R orderInfo(String wmPoiId, String date, String cookie) { //根据date,查询前一天的key,如果有,则删除 + public R orderInfo(String wmPoiId, String date, String cookie) { try { int pageNum = 1; String getUrl = proxyProperties.gettpsUrl(); @@ -390,13 +390,13 @@ public class MeituanServiceImpl implements IMeituanService { if ("0".equals(code)) { JSONArray array = jsonObject.getJSONObject("data").getJSONArray("wmOrderList"); -// boolean flag = false; -// String key = wmPoiId + date; -// String lastDayseq = Optional.ofNullable(redisTemplate.opsForValue().get(key)).orElse(null); + boolean flag = false; + String key = wmPoiId + date; + String lastDayseq = Optional.ofNullable(redisTemplate.opsForValue().get(key)).orElse(null); while (array != null && array.size() > 0) { -// if (flag) { -// break; -// } + if (flag) { + break; + } List list = new ArrayList<>(); for (int i = 0; i < array.size(); i++) { BusOrderInfo orderInfo = new BusOrderInfo(); @@ -415,7 +415,6 @@ public class MeituanServiceImpl implements IMeituanService { JSONObject userLabelVo = foodInfo.getJSONObject("userLabelVo"); JSONArray array1 = userLabelVo.getJSONArray("contents"); String info = array1.getJSONObject(0).getString("info"); - JSONObject expectTimeVo = order1.getJSONObject("expectTimeVo"); daySeq = order1.getString("dayseq"); wmOrderViewId = order1.getString("wmOrderViewId"); orderTimeFmt = "2024-"+order1.getString("orderTimeFmt"); @@ -439,18 +438,18 @@ public class MeituanServiceImpl implements IMeituanService { } -// String redisDaySeq = Optional.ofNullable(redisTemplate.opsForValue().get(key)).orElse(null); -// if (redisDaySeq == null) { -// redisTemplate.opsForValue().set(key, daySeq); -// } else { + String redisDaySeq = Optional.ofNullable(redisTemplate.opsForValue().get(key)).orElse(null); + if (redisDaySeq == null) { + redisTemplate.opsForValue().set(key, daySeq); + } else { // if (Integer.valueOf(daySeq) > Integer.valueOf(redisDaySeq)) { // redisTemplate.opsForValue().set(key, daySeq); // } -// if (daySeq.equals(lastDayseq)) { -// flag = true; -// break; -// } -// } + if (daySeq.equals(lastDayseq)) { + flag = true; + break; + } + } orderInfo.setStoreCode(wmPoiId); orderInfo.setDayseq(daySeq); orderInfo.setOrderNo(wmOrderViewId); @@ -461,7 +460,7 @@ public class MeituanServiceImpl implements IMeituanService { orderInfo.setStoreName(storeInfo1.getStoreName()); - String reachTime = receiveTime(getUrl,wmPoiId,cookie,wmOrderViewId); + String reachTime = receiveTime(wmPoiId,cookie,wmOrderViewId,getUrl); orderInfo.setCompleteTime(date+" "+reachTime); orderInfo.setOrderStatus(statusDesc); @@ -484,8 +483,7 @@ public class MeituanServiceImpl implements IMeituanService { list.add(orderInfo); } if (list.size() > 0) { - List newList = list.stream().collect(Collectors.toMap(BusOrderInfo::getOrderNo, p->p,(p1, p2)->p1)).values().stream().collect(Collectors.toList()); - + List newList = list.stream().distinct().collect(Collectors.toList()); priPhoneInfo(newList,cookie,getUrl); }else{ break; @@ -517,11 +515,117 @@ public class MeituanServiceImpl implements IMeituanService { } return R.fail(jsonObject.getString("msg")); }catch (Exception e){ - e.printStackTrace(); - return orderInfo(wmPoiId, date, cookie); + System.out.println("================拉取订单出错:==============="+e.getMessage()); +// return orderInfo(wmPoiId, date, cookie); + return R.fail("=====================拉取订单出错=================="); } } + /** + * 获取号码 + * + * @param cookie + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void priPhoneInfo(List ls, String cookie,String getUrl) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); + + List lsList = ls.stream().filter(x -> x.getPrivcyPhone() != null && x.getRecipientPhone() != null && x.getRecipientBindedPhone() != null).collect(Collectors.toList()); + List lsList1 = ls.stream().filter(x -> x.getPrivcyPhone() == null && x.getRecipientPhone() == null && x.getRecipientBindedPhone() == null).collect(Collectors.toList()); + + List lss = new ArrayList<>(); + for (BusOrderInfo info : lsList) { + BusReturnVisitInfo returnVisitInfo1 = new BusReturnVisitInfo(); + returnVisitInfo1.setStoreCode(info.getStoreCode()); + returnVisitInfo1.setStoreName(info.getStoreName()); + returnVisitInfo1.setPhoneEndNumber(info.getRecipientPhone()); + returnVisitInfo1.setPhoneNumber(info.getPrivcyPhone()); + lss.add(returnVisitInfo1); + } + for (BusOrderInfo orderInfo : lsList1) { + String url = "https://e.waimai.meituan.com/v2/order/history/r/search/ajax"; + String regionId = valueFromCookie("region_id", cookie); + String regionVersion = valueFromCookie("region_version", cookie); + Map params = new LinkedHashMap<>(); + params.put("searchItem", orderInfo.getOrderNo()); + params.put("region_id", regionId); + params.put("region_version", regionVersion); + params.put("yodaReady", "h5"); + params.put("csecplatform", 4); + params.put("csecversion", "2.4.0"); + String mtgsig = mtgsigInfo(getUrl,orderInfo.getOrderNo(), regionId, regionVersion,valueFromCookie("WEBDFPID",cookie)); + params.put("mtgsig", mtgsig); + url = appendParams(url, params); + MultipartEntityBuilder builder = MultipartEntityBuilder.create(); + builder.addTextBody("wmPoiId",orderInfo.getStoreCode()); + HttpPost httpPost = new HttpPost(url); + HttpEntity entity = builder.build(); + httpPost.setEntity(entity); + httpPost.setHeader("Cookie", cookie); + + CloseableHttpClient client = proxyHttpClient(getUrl); + + String code = null; + JSONObject jsonObject = new JSONObject(); + try { + HttpResponse response = client.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String resp = EntityUtils.toString(responseEntity); + jsonObject = JSONObject.parseObject(resp); + code = jsonObject.getString(("code")); + } catch (Exception e) { + System.out.println("===============订单解析号码出错:================"+e.getMessage()); + + client = localHttpClient(); + try { + HttpResponse response = client.execute(httpPost); + HttpEntity responseEntity = response.getEntity(); + String resp = EntityUtils.toString(responseEntity); + jsonObject = JSONObject.parseObject(resp); + code = jsonObject.getString(("code")); + }catch (Exception e1){ + System.out.println("===============本地订单解析号码出错:================"+e1.getMessage()); + } + } + if ("0".equals(code)) { + JSONArray array = jsonObject.getJSONArray("wmOrderList"); + + JSONObject oj = array.getJSONObject(0); + + String privacyPhone = oj.getString("privacy_phone"); + String recipientPhone = oj.getString("recipient_phone"); + String recipientBindedPhone = oj.getString("recipient_bindedPhone"); + orderInfo.setPrivcyPhone(privacyPhone); + orderInfo.setRecipientPhone(recipientPhone); + orderInfo.setRecipientBindedPhone(recipientBindedPhone); + lsList.add(orderInfo); + + BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); + returnVisitInfo.setStoreCode(orderInfo.getStoreCode()); + returnVisitInfo.setStoreName(orderInfo.getStoreName()); + returnVisitInfo.setPhoneEndNumber(orderInfo.getRecipientPhone()); + returnVisitInfo.setPhoneNumber(orderInfo.getPrivcyPhone()); + + try { + returnVisitInfo.setOrderCompleteTime(sdf.parse(orderInfo.getCompleteTime())); + } catch (ParseException e) { + e.printStackTrace(); + continue; + } + lss.add(returnVisitInfo); + } + } + System.out.println("********************************"+JSON.toJSONString(lsList)); +// if (lsList.size() > 0) { +// busOrderInfoMapper.batchInsertOrder(lsList); +// } +// if (lss.size() > 0) { +// busReturnVisitInfoMapper.batchInsertVisit(lss); +// } + } + private String getOrderCountByType(String getUrl, String wmOrderViewId,String cookie){ CloseableHttpClient httpClient = proxyHttpClient(); String url = "https://e.waimai.meituan.com/gw/phf/v2/order/receive/processed/r/orderAsyncInfos/v3"; @@ -594,15 +698,15 @@ public class MeituanServiceImpl implements IMeituanService { jsonObject = JSONObject.parseObject(resp); } catch (Exception e) { System.out.println(e.getMessage()); - orderInfo(valueFromCookie("wmPoiId", cookie), date, cookie); +// jsonObject.put("code","403"); } return jsonObject; } @Override - public String receiveTime(String getUrl,String storeCode,String cookie,String orderNo){ - CloseableHttpClient client = proxyHttpClient(getUrl); + public String receiveTime(String storeCode,String cookie,String orderNo,String getUrl){ + CloseableHttpClient client = proxyHttpClient1(getUrl); String url = "https://e.waimai.meituan.com/api/logistics/logs"; Map params = new LinkedHashMap<>(); params.put("region_id", valueFromCookie("region_id",cookie)); @@ -697,102 +801,7 @@ public class MeituanServiceImpl implements IMeituanService { } return null; } - /** - * 获取号码 - * - * @param cookie - * @return - */ - @Override - @Transactional(rollbackFor = Exception.class) - public void priPhoneInfo(List ls, String cookie,String getUrl) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - List lsList = ls.stream().filter(x -> x.getPrivcyPhone() != null && x.getRecipientPhone() != null && x.getRecipientBindedPhone() != null).collect(Collectors.toList()); - List lsList1 = ls.stream().filter(x -> x.getPrivcyPhone() == null && x.getRecipientPhone() == null && x.getRecipientBindedPhone() == null).collect(Collectors.toList()); - - List lss = new ArrayList<>(); - for (BusOrderInfo info : lsList) { - BusReturnVisitInfo returnVisitInfo1 = new BusReturnVisitInfo(); - returnVisitInfo1.setStoreCode(info.getStoreCode()); - returnVisitInfo1.setStoreName(info.getStoreName()); - returnVisitInfo1.setPhoneEndNumber(info.getRecipientPhone()); - returnVisitInfo1.setPhoneNumber(info.getPrivcyPhone()); - lss.add(returnVisitInfo1); - } - for (BusOrderInfo orderInfo : lsList1) { - String url = "https://e.waimai.meituan.com/v2/order/history/r/search/ajax"; - String regionId = valueFromCookie("region_id", cookie); - String regionVersion = valueFromCookie("region_version", cookie); - Map params = new LinkedHashMap<>(); - params.put("searchItem", orderInfo.getOrderNo()); - params.put("region_id", regionId); - params.put("region_version", regionVersion); - params.put("yodaReady", "h5"); - params.put("csecplatform", 4); - params.put("csecversion", "2.4.0"); - String mtgsig = mtgsigInfo(getUrl,orderInfo.getOrderNo(), regionId, regionVersion,valueFromCookie("WEBDFPID",cookie)); - System.out.println(mtgsig); - System.out.println(orderInfo.toString()); - params.put("mtgsig", mtgsig); - url = appendParams(url, params); - MultipartEntityBuilder builder = MultipartEntityBuilder.create(); - builder.addTextBody("wmPoiId",orderInfo.getStoreCode()); - HttpPost httpPost = new HttpPost(url); - HttpEntity entity = builder.build(); - httpPost.setEntity(entity); - httpPost.setHeader("Cookie", cookie); - - CloseableHttpClient client = proxyHttpClient(getUrl); - - String code = null; - JSONObject jsonObject = new JSONObject(); - try { - HttpResponse response = client.execute(httpPost); - HttpEntity responseEntity = response.getEntity(); - String resp = EntityUtils.toString(responseEntity); - jsonObject = JSONObject.parseObject(resp); - code = jsonObject.getString(("code")); - } catch (Exception e) { - e.printStackTrace(); - continue; - } - - if ("0".equals(code)) { - JSONArray array = jsonObject.getJSONArray("wmOrderList"); - - JSONObject oj = array.getJSONObject(0); - - String privacyPhone = oj.getString("privacy_phone"); - String recipientPhone = oj.getString("recipient_phone"); - String recipientBindedPhone = oj.getString("recipient_bindedPhone"); - orderInfo.setPrivcyPhone(privacyPhone); - orderInfo.setRecipientPhone(recipientPhone); - orderInfo.setRecipientBindedPhone(recipientBindedPhone); - lsList.add(orderInfo); - - BusReturnVisitInfo returnVisitInfo = new BusReturnVisitInfo(); - returnVisitInfo.setStoreCode(orderInfo.getStoreCode()); - returnVisitInfo.setStoreName(orderInfo.getStoreName()); - returnVisitInfo.setPhoneEndNumber(orderInfo.getRecipientPhone()); - returnVisitInfo.setPhoneNumber(orderInfo.getPrivcyPhone()); - - try { - returnVisitInfo.setOrderCompleteTime(sdf.parse(orderInfo.getCompleteTime())); - } catch (ParseException e) { - e.printStackTrace(); - continue; - } - lss.add(returnVisitInfo); - } - } - if (lsList.size() > 0) { - busOrderInfoMapper.batchInsertOrder(lsList); - } - if (lss.size() > 0) { - busReturnVisitInfoMapper.batchInsertVisit(lss); - } - } /** * 获取mtgsig @@ -1053,8 +1062,6 @@ public class MeituanServiceImpl implements IMeituanService { // private CloseableHttpClient proxyHttpClient() { private CloseableHttpClient proxyHttpClient(String ipPort) { - // JDK 8u111版本后,目标页面为HTTPS协议,启用proxy用户密码鉴权 - System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); String proxyHost = ipPort.split(":")[0]; int proxyPort = Integer.valueOf(ipPort.split(":")[1]); String username = proxyProperties.getAccount(); @@ -1107,8 +1114,6 @@ public class MeituanServiceImpl implements IMeituanService { // } } private CloseableHttpClient proxyHttpClient() { - // JDK 8u111版本后,目标页面为HTTPS协议,启用proxy用户密码鉴权 - System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); String proxyHost = proxyProperties.getProxyAddr(); int proxyPort = proxyProperties.getProxyPort(); String username = proxyProperties.getAccount(); @@ -1147,4 +1152,24 @@ public class MeituanServiceImpl implements IMeituanService { // CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(config).build(); return httpClient; } + + private CloseableHttpClient proxyHttpClient1(String ipPort) { + System.setProperty("jdk.http.auth.tunneling.disabledSchemes", ""); + String proxyHost = ipPort.split(":")[0]; + int proxyPort = Integer.valueOf(ipPort.split(":")[1]); + String username = proxyProperties.getAccount(); + String password = proxyProperties.getPwd(); + HttpHost proxy = new HttpHost(proxyHost, proxyPort); + CredentialsProvider credsProvider = new BasicCredentialsProvider(); + credsProvider.setCredentials(new AuthScope(proxyHost, proxyPort), + new UsernamePasswordCredentials(username, password)); + RequestConfig config = RequestConfig.custom().setProxy(proxy).build(); + CloseableHttpClient httpClient = HttpClients + .custom() + .setDefaultRequestConfig(config) + .setDefaultCredentialsProvider(credsProvider) + .build(); + return httpClient; + } + }