|
@@ -1,6 +1,7 @@
|
|
|
package com.iotechn.unimall.admin;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.mapper.EntityWrapper;
|
|
|
import com.baomidou.mybatisplus.mapper.Wrapper;
|
|
|
import com.dangdang.openplatform.openapi.sdk.ApiException;
|
|
@@ -39,6 +40,18 @@ import com.iotechn.unimall.data.mapper.shop.ShopAccountMapper;
|
|
|
import com.iotechn.unimall.data.mapper.shop.ShopOrderMapper;
|
|
|
import com.iotechn.unimall.data.mapper.shop.ShopTranMapper;
|
|
|
import com.iotechn.unimall.data.util.XMLUtil;
|
|
|
+import org.apache.commons.httpclient.Cookie;
|
|
|
+import org.apache.commons.httpclient.HttpClient;
|
|
|
+import org.apache.commons.httpclient.NameValuePair;
|
|
|
+import org.apache.commons.httpclient.cookie.CookiePolicy;
|
|
|
+import org.apache.commons.httpclient.methods.GetMethod;
|
|
|
+import org.apache.commons.httpclient.methods.PostMethod;
|
|
|
+import org.apache.http.HttpResponse;
|
|
|
+import org.apache.http.HttpStatus;
|
|
|
+import org.apache.http.client.methods.HttpGet;
|
|
|
+import org.apache.http.impl.client.CloseableHttpClient;
|
|
|
+import org.apache.http.impl.client.HttpClientBuilder;
|
|
|
+import org.apache.http.util.EntityUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -54,6 +67,8 @@ import org.springframework.util.CollectionUtils;
|
|
|
import java.io.*;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.*;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
@@ -69,23 +84,11 @@ public class AdminCheckQuartz {
|
|
|
private static final String GROUP_SHOP_END_LOCK = "GROUP_SHOP_END_LOCK";
|
|
|
private static final String GROUP_SHOP_LOCK_LOCK = "GROUP_SHOP_LOCK_LOCK";
|
|
|
@Autowired
|
|
|
- private OrderMapper orderMapper;
|
|
|
- @Autowired
|
|
|
private ShopOrderMapper shopOrderMapper;
|
|
|
@Autowired
|
|
|
private ShopAccountMapper shopAccountMapper;
|
|
|
@Autowired
|
|
|
private ShopTranMapper shopTranMapper;
|
|
|
- @Autowired
|
|
|
- private OrderBizService orderBizService;
|
|
|
- @Autowired
|
|
|
- private GroupShopMapper groupShopMapper;
|
|
|
- @Autowired
|
|
|
- private SpuMapper spuMapper;
|
|
|
- @Autowired
|
|
|
- private LockComponent lockComponent;
|
|
|
- @Autowired
|
|
|
- private TransactionTemplate transactionTemplate;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -95,15 +98,152 @@ public class AdminCheckQuartz {
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void dealOrder() throws Exception {
|
|
|
Wrapper wrapper = new EntityWrapper();
|
|
|
- wrapper.eq("order_status_name","卖家已发货");
|
|
|
+ wrapper.ne("order_status_name","卖家已发货");
|
|
|
wrapper.eq("dang_order_status","未发货");
|
|
|
List<ShopOrder> list = shopOrderMapper.selectList(wrapper);
|
|
|
for (ShopOrder shopOrder: list
|
|
|
) {
|
|
|
ShopAccount shopAccount = shopAccountMapper.selectById(shopOrder.getAccountId());
|
|
|
+ flushCookie(shopAccount);
|
|
|
+ CloseableHttpClient httpClient = HttpClientBuilder.create().build();
|
|
|
+ HttpGet get = new HttpGet("https://shop.kongfz.com/buyer/order/getOrderInfo/?orderId="+shopOrder.getOrderId());
|
|
|
+ try{
|
|
|
+ //这里可以设置请求参数,token等
|
|
|
+ get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
|
|
|
+ get.addHeader("cookie",shopAccount.getFuziCookie());
|
|
|
+ HttpResponse response = httpClient.execute(get);//执行获取响应
|
|
|
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//根据状态码处理
|
|
|
+ //返回字符串
|
|
|
+ String res = unicodeToString(EntityUtils.toString(response.getEntity(),"UTF-8"));
|
|
|
+ System.out.println(res);
|
|
|
+ JSONObject datas = JSONObject.parseObject(res);//转换成JSON格式
|
|
|
+ Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
|
|
|
+ ShopOrder data = JSONObject.parseObject(datas.get("data").toString(),ShopOrder.class);//"data"是根据返回值设定
|
|
|
+ ShopOrder tmp = new ShopOrder();
|
|
|
+ tmp.setOrderId(data.getOrderId());
|
|
|
+ tmp = shopOrderMapper.selectOne(tmp);
|
|
|
+ data.setAccountId(shopAccount.getId());
|
|
|
+ if(tmp == null){
|
|
|
+ data.setDangOrder(shopOrder.getOrderId());
|
|
|
+ data.setGmtCreate(new Date());
|
|
|
+ data.setGmtUpdate(new Date());
|
|
|
+ shopOrderMapper.insert(data);
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ data.setDangOrder(shopOrder.getOrderId());
|
|
|
+ data.setGmtUpdate(new Date());
|
|
|
+ shopOrderMapper.update(data,new EntityWrapper<ShopOrder>().eq("order_id",tmp.getOrderId()));
|
|
|
+ }
|
|
|
+ tmp = new ShopOrder();
|
|
|
+ tmp.setOrderId(data.getOrderId());
|
|
|
+ tmp = shopOrderMapper.selectOne(tmp);
|
|
|
+
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return ;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Wrapper wrapper1 = new EntityWrapper();
|
|
|
+ wrapper1.eq("order_status_name","卖家已发货");
|
|
|
+ wrapper1.eq("dang_order_status","未发货");
|
|
|
+ List<ShopOrder> list1 = shopOrderMapper.selectList(wrapper);
|
|
|
+ for (ShopOrder shopOrder: list1
|
|
|
+ ) {
|
|
|
+ ShopAccount shopAccount = shopAccountMapper.selectById(shopOrder.getAccountId());
|
|
|
dangOrderDeal(shopAccount,shopOrder);
|
|
|
}
|
|
|
}
|
|
|
+ public void flushCookie(ShopAccount shopAccount){
|
|
|
+ try{
|
|
|
+ HttpClient httpClient = new HttpClient();
|
|
|
+ GetMethod getMethod = new GetMethod("https://shop.kongfz.com/buyer/order/index/?pageCurr=1&pageShow=30");
|
|
|
+ // 每次访问需授权的网址时需带上前面的 cookie 作为通行证
|
|
|
+ getMethod.setRequestHeader("cookie", shopAccount.getFuziCookie());
|
|
|
+ // 你还可以通过 PostMethod/GetMethod 设置更多的请求后数据
|
|
|
+ // 例如,referer 从哪里来的,UA 像搜索引擎都会表名自己是谁,无良搜索引擎除外
|
|
|
+ getMethod.setRequestHeader("Referer", "https://shop.kongfz.com/");
|
|
|
+ getMethod.setRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36");
|
|
|
+ httpClient.executeMethod(getMethod);
|
|
|
+ // 打印出返回数据,检验一下是否成功
|
|
|
+ String text = getMethod.getResponseBodyAsString();
|
|
|
+ try{
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(text);
|
|
|
+ System.out.println(jsonObject);
|
|
|
+ if(jsonObject.getBoolean("status")){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception exception){
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ System.out.println("原cookies = "+shopAccount.getFuziCookie());
|
|
|
+
|
|
|
+ // 登陆 Url
|
|
|
+ String loginUrl = "https://login.kongfz.com/Pc/Login/account";
|
|
|
+ httpClient = new HttpClient();
|
|
|
+ // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
|
|
|
+ PostMethod postMethod = new PostMethod(loginUrl);
|
|
|
+
|
|
|
+ // 设置登陆时要求的信息,用户名和密码
|
|
|
+ NameValuePair[] data = { new NameValuePair("loginName", shopAccount.getFuziAccount()), new NameValuePair("loginPass", shopAccount.getFuziPassword()) };
|
|
|
+ postMethod.setRequestBody(data);
|
|
|
+ try {
|
|
|
+ // 设置 HttpClient 接收 Cookie,用与浏览器一样的策略
|
|
|
+ httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
|
|
|
+ int statusCode=httpClient.executeMethod(postMethod);
|
|
|
+ text = unicodeToString(postMethod.getResponseBodyAsString());
|
|
|
+ System.out.println("登录返回值 = "+text);
|
|
|
+ if(statusCode == 302){
|
|
|
+ // 获得登陆后的 Cookie
|
|
|
+ Cookie[] cookies = httpClient.getState().getCookies();
|
|
|
+ StringBuffer tmpcookies = new StringBuffer();
|
|
|
+ for (Cookie c : cookies) {
|
|
|
+ tmpcookies.append(c.toString() + ";");
|
|
|
+ }
|
|
|
+ System.out.println("新cookies = "+tmpcookies.toString());
|
|
|
+ shopAccount.setFuziCookie(tmpcookies.toString());
|
|
|
+ shopAccountMapper.updateById(shopAccount);
|
|
|
+ // 进行登陆后的操作
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * Unicode转 汉字字符串
|
|
|
+ *
|
|
|
+ * @param str
|
|
|
+ * \u6728
|
|
|
+ * @return '木' 26408
|
|
|
+ */
|
|
|
+ public static String unicodeToString(String str) {
|
|
|
+
|
|
|
+ Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))");
|
|
|
+ Matcher matcher = pattern.matcher(str);
|
|
|
+ char ch;
|
|
|
+ while (matcher.find()) {
|
|
|
+ // group 6728
|
|
|
+ String group = matcher.group(2);
|
|
|
+ // ch:'木' 26408
|
|
|
+ ch = (char) Integer.parseInt(group, 16);
|
|
|
+ // group1 \u6728
|
|
|
+ String group1 = matcher.group(1);
|
|
|
+ str = str.replace(group1, ch + "");
|
|
|
+ }
|
|
|
+ return str;
|
|
|
+ }
|
|
|
public void dangOrderDeal(ShopAccount shopAccount, ShopOrder shopOrder) throws Exception {
|
|
|
/**
|
|
|
* 获取一下店铺的所有静态参数
|