订单拉取解析修改

This commit is contained in:
Lenovo 2024-08-01 06:17:42 +08:00
parent 49943af416
commit 39a9a5fd33
1 changed files with 149 additions and 124 deletions

View File

@ -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<BusOrderInfo> 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<BusOrderInfo> newList = list.stream().collect(Collectors.toMap(BusOrderInfo::getOrderNo, p->p,(p1, p2)->p1)).values().stream().collect(Collectors.toList());
List<BusOrderInfo> 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<BusOrderInfo> ls, String cookie,String getUrl) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
List<BusOrderInfo> lsList = ls.stream().filter(x -> x.getPrivcyPhone() != null && x.getRecipientPhone() != null && x.getRecipientBindedPhone() != null).collect(Collectors.toList());
List<BusOrderInfo> lsList1 = ls.stream().filter(x -> x.getPrivcyPhone() == null && x.getRecipientPhone() == null && x.getRecipientBindedPhone() == null).collect(Collectors.toList());
List<BusReturnVisitInfo> 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<String, Object> 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<String, Object> 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<BusOrderInfo> ls, String cookie,String getUrl) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
List<BusOrderInfo> lsList = ls.stream().filter(x -> x.getPrivcyPhone() != null && x.getRecipientPhone() != null && x.getRecipientBindedPhone() != null).collect(Collectors.toList());
List<BusOrderInfo> lsList1 = ls.stream().filter(x -> x.getPrivcyPhone() == null && x.getRecipientPhone() == null && x.getRecipientBindedPhone() == null).collect(Collectors.toList());
List<BusReturnVisitInfo> 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<String, Object> 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;
}
}