123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771 |
- package com.iotechn.unimall.admin;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONArray;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.mapper.EntityWrapper;
- import com.baomidou.mybatisplus.mapper.Wrapper;
- import com.dangdang.openplatform.openapi.sdk.ApiException;
- import com.dangdang.openplatform.openapi.sdk.SdkClient;
- import com.dangdang.openplatform.openapi.sdk.internal.util.FileItem;
- import com.dangdang.openplatform.openapi.sdk.request.order.OrderDetailsGetRequest;
- import com.dangdang.openplatform.openapi.sdk.request.order.OrderGoodsSendRequest;
- import com.dangdang.openplatform.openapi.sdk.request.order.OrdersContentDecryptRequest;
- import com.dangdang.openplatform.openapi.sdk.requestmodel.order.EncryptDTO;
- import com.dangdang.openplatform.openapi.sdk.requestmodel.order.OrderDetailsGet;
- import com.dangdang.openplatform.openapi.sdk.response.order.OrderDetailsGetResponse;
- import com.dangdang.openplatform.openapi.sdk.response.order.OrderGoodsSendResponse;
- import com.dangdang.openplatform.openapi.sdk.response.order.OrdersContentDecryptResponse;
- import com.dangdang.openplatform.openapi.sdk.responsemodel.order.CryptUserInfo;
- import com.dangdang.openplatform.openapi.sdk.responsemodel.order.OrdersContentDecryptDTO;
- import com.iotechn.unimall.admin.api.user.AdminUserServiceImpl;
- import com.iotechn.unimall.biz.service.order.OrderBizService;
- import com.iotechn.unimall.core.exception.AdminServiceException;
- import com.iotechn.unimall.core.exception.ExceptionDefinition;
- import com.iotechn.unimall.data.component.LockComponent;
- import com.iotechn.unimall.data.domain.GroupShopDO;
- import com.iotechn.unimall.data.domain.OrderDO;
- import com.iotechn.unimall.data.domain.SpuDO;
- import com.iotechn.unimall.data.domain.shop.ShopAccount;
- import com.iotechn.unimall.data.domain.shop.ShopLog;
- import com.iotechn.unimall.data.domain.shop.ShopOrder;
- import com.iotechn.unimall.data.domain.shop.ShopTran;
- import com.iotechn.unimall.data.dto.shop.XmlObject.OrderDetail;
- import com.iotechn.unimall.data.dto.shop.XmlObject.SendGood;
- import com.iotechn.unimall.data.dto.shop.XmlObject.SendGoodsInfo;
- import com.iotechn.unimall.data.enums.GroupShopAutomaticRefundType;
- import com.iotechn.unimall.data.enums.OrderStatusType;
- import com.iotechn.unimall.data.enums.StatusType;
- import com.iotechn.unimall.data.mapper.GroupShopMapper;
- import com.iotechn.unimall.data.mapper.OrderMapper;
- import com.iotechn.unimall.data.mapper.SpuMapper;
- import com.iotechn.unimall.data.mapper.shop.ShopAccountMapper;
- import com.iotechn.unimall.data.mapper.shop.ShopLogMapper;
- 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.HttpEntity;
- import org.apache.http.HttpResponse;
- import org.apache.http.HttpStatus;
- import org.apache.http.client.entity.UrlEncodedFormEntity;
- import org.apache.http.client.methods.CloseableHttpResponse;
- import org.apache.http.client.methods.HttpGet;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.impl.client.BasicCookieStore;
- import org.apache.http.impl.client.CloseableHttpClient;
- import org.apache.http.impl.client.HttpClientBuilder;
- import org.apache.http.impl.client.HttpClients;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.util.EntityUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.scheduling.annotation.EnableScheduling;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Component;
- import org.springframework.transaction.TransactionStatus;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.transaction.support.TransactionCallbackWithoutResult;
- import org.springframework.transaction.support.TransactionTemplate;
- import org.springframework.util.CollectionUtils;
- import java.io.*;
- import java.text.SimpleDateFormat;
- import java.util.*;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.Collectors;
- /**
- * Created by rize on 2019/7/21.
- */
- @Component
- @EnableScheduling
- public class AdminCheckQuartz {
- private static final Logger logger = LoggerFactory.getLogger(AdminCheckQuartz.class);
- private static final String ORDER_STATUS_LOCK = "ORDER_STATUS_QUARTZ_LOCK";
- private static final String GROUP_SHOP_START_LOCK = "GROUP_SHOP_START_LOCK";
- 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 ShopOrderMapper shopOrderMapper;
- @Autowired
- private ShopAccountMapper shopAccountMapper;
- @Autowired
- private ShopTranMapper shopTranMapper;
- @Autowired
- private ShopLogMapper shopLogMapper;
- ExecutorService pool = Executors.newFixedThreadPool(2);
- /**
- * 订单数据定时轮训处理 每小时执行一次
- */
- @Scheduled(cron = "0 0 7-22 * * ? ")
- public void task1(){
- new Thread(new Runnable() {
- @Override
- public void run() {
- doSomething1();
- }
- }).start();
- }
- /**
- * 订单数据定时轮训处理 每3小时执行一次
- */
- // @Scheduled(cron = "0 0 0 1/1 * ? ")
- public void task2(){
- new Thread(new Runnable() {
- @Override
- public void run() {
- doSomething2();
- }
- }).start();
- }
- public void dealOrder() throws Exception {
- try{
- List<ShopOrder> shopOrders = shopOrderMapper.selectList(new EntityWrapper<ShopOrder>()
- .eq("dang_order_status","未发货")
- .eq("order_status_name","卖家已发货"));
- for (ShopOrder qqq:shopOrders
- ) {
- ShopAccount shopAccount = shopAccountMapper.selectById(qqq.getAccountId());
- flushCookie(shopAccount);
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet get = new HttpGet("https://shop.kongfz.com/buyer/order/index/?pageCurr=1&pageShow=9999&orderId="+qqq.getOrderId());
- //这里可以设置请求参数,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());
- get.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
- CloseableHttpResponse response = httpClient.execute(get);//执行获取响应
- try{
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//根据状态码处理
- String strTmp= EntityUtils.toString(response.getEntity(),"UTF-8");
- //返回字符串
- String res = unicodeToString(strTmp);
- JSONObject datas = JSONObject.parseObject(res);//转换成JSON格式
- Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
- List<ShopOrder> data = JSONArray.parseArray(datas.get("data").toString(),ShopOrder.class);//"data"是根据返回值设定
- for (ShopOrder tmp: data
- ) {
- //正则表达式,用于匹配非数字串,+号用于匹配出多个非数字串
- String regEx="[^0-9]+";
- Pattern pattern = Pattern.compile(regEx);
- //用定义好的正则表达式拆分字符串,把字符串中的数字留出来
- String[] cs = pattern.split(tmp.getRemarkText());
- String dangOrder = "";
- for (String str:cs
- ) {
- if(dangOrder.length()>= 11 || str.equals("*")){
- break;
- }
- dangOrder += str;
- }
- tmp.setDangOrder(dangOrder);
- tmp.setAccountId(shopAccount.getId());
- Long time = Long.parseLong(tmp.getShippingTime())+8*60*60;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
- String time1 = sdf.format(new Date(time * 1000));
- tmp.setShippingTime(time1);
- tmp.setDeleteFlag(0);
- tmp.setGmtUpdate(new Date());
- tmp.setGmtCreate(new Date());
- if(tmp.getShippingComName().equals("快递包裹")||tmp.getShippingComName().equals("挂号印刷品")){
- tmp.setShippingComName("中国邮政");
- }
- ShopOrder tt = new ShopOrder();
- tt.setOrderId(tmp.getOrderId());
- tt = shopOrderMapper.selectOne(tt);
- if(tt == null){
- shopOrderMapper.insert(tmp);
- }
- else{
- if(!tt.getDangOrder().equals(tmp.getDangOrder())||!tt.getShippingComName().equals(tmp.getShippingComName())){
- shopOrderMapper.update(tmp,new EntityWrapper<ShopOrder>().eq("order_id",tt.getOrderId()));
- }
- dangOrderDeal(shopAccount,qqq);
- }
- }
- }
- } catch (IOException e) {
- throw e;
- }
- finally {
- response.close();
- httpClient.close();
- }
- }
- }
- catch (Exception e) {
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("同步定时任务异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- e.printStackTrace();
- }
- }
- public void pullOrderList() throws Exception {
- try{
- List<ShopAccount> listAccount = shopAccountMapper.selectList(new EntityWrapper<ShopAccount>().eq("delete_flag",0));
- for (ShopAccount shopAccount:listAccount
- ) {
- flushCookie(shopAccount);
- for(int i=1;i<=5;i++){
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet get = new HttpGet("https://shop.kongfz.com/buyer/order/index/?pageCurr="+i+"&pageShow=300&orderStatus=ShippedToReceipt");
- //这里可以设置请求参数,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());
- CloseableHttpResponse response = httpClient.execute(get);//执行获取响应
- try{
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//根据状态码处理
- String strTmp= EntityUtils.toString(response.getEntity(),"UTF-8");
- //返回字符串
- String res = unicodeToString(strTmp);
- JSONObject datas = JSONObject.parseObject(res);//转换成JSON格式
- Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
- List<ShopOrder> data = JSONArray.parseArray(datas.get("data").toString(),ShopOrder.class);//"data"是根据返回值设定
- if(data.size() == 0){
- break;
- }
- for (ShopOrder tmp: data
- ) {
- //正则表达式,用于匹配非数字串,+号用于匹配出多个非数字串
- String regEx="[^0-9]+";
- Pattern pattern = Pattern.compile(regEx);
- //用定义好的正则表达式拆分字符串,把字符串中的数字留出来
- String[] cs = pattern.split(tmp.getRemarkText());
- String dangOrder = "";
- for (String str:cs
- ) {
- if(dangOrder.length()>= 11 || str.equals("*")){
- break;
- }
- dangOrder += str;
- }
- tmp.setDangOrder(dangOrder);
- tmp.setAccountId(shopAccount.getId());
- Long time = Long.parseLong(tmp.getShippingTime())+8*60*60;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
- String time1 = sdf.format(new Date(time * 1000));
- tmp.setShippingTime(time1);
- tmp.setDeleteFlag(0);
- tmp.setGmtUpdate(new Date());
- tmp.setGmtCreate(new Date());
- if(tmp.getShippingComName().equals("快递包裹")||tmp.getShippingComName().equals("挂号印刷品")){
- tmp.setShippingComName("中国邮政");
- }
- ShopOrder tt = new ShopOrder();
- tt.setOrderId(tmp.getOrderId());
- tt = shopOrderMapper.selectOne(tt);
- if(tt == null){
- shopOrderMapper.insert(tmp);
- }
- else{
- if(tt.getDangOrderStatus().equals("未发货")&&!tt.getDangOrder().equals(tmp.getDangOrder())){
- shopOrderMapper.update(tmp,new EntityWrapper<ShopOrder>().eq("order_id",tt.getOrderId()));
- }
- }
- }
- }
- } catch (IOException e) {
- throw e;
- }
- finally {
- response.close();
- httpClient.close();
- }
- }
- }
- }
- catch (Exception e){
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("爬取定时任务异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- e.printStackTrace();
- }
- }
- public void flushCookie(ShopAccount shopAccount){
- try{
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet getMethod = new HttpGet("https://shop.kongfz.com/buyer/order/index/?pageCurr=1&pageShow=30");
- getMethod.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");
- getMethod.addHeader("cookie",shopAccount.getFuziCookie());
- httpClient.execute(getMethod);
- CloseableHttpResponse response = httpClient.execute(getMethod);//执行获取响应
- try{
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {//根据状态码处理
- String strTmp= EntityUtils.toString(response.getEntity(),"UTF-8");
- JSONObject datas = JSONObject.parseObject(strTmp);//转换成JSON格式
- Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
- if(status){
- return;
- }
- }
- }
- catch (Exception e){
- throw e;
- }
- finally {
- response.close();
- httpClient.close();
- }
- System.out.println("原cookies = "+shopAccount.getFuziCookie());
- // 登陆 Url
- String loginUrl = "https://login.kongfz.com/Pc/Login/account";
- BasicCookieStore store= new BasicCookieStore();
- httpClient =HttpClients.custom().setDefaultCookieStore(store).build();
- // 模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
- HttpPost httpPost = new HttpPost(loginUrl);
- // 装填参数
- List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
- nvps.add(new BasicNameValuePair("loginName", shopAccount.getFuziAccount()));
- nvps.add(new BasicNameValuePair("loginPass", shopAccount.getFuziPassword()));
- // 设置参数到请求对象中
- httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
- // 设置header信息
- // 指定报文头【Content-type】、【User-Agent】
- httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
- // 执行请求操作,并拿到结果(同步阻塞)
- response = httpClient.execute(httpPost);
- if(response.getStatusLine().getStatusCode() == 302){
- List<org.apache.http.cookie.Cookie> cookielist = store.getCookies();
- String nCookie = "";
- for(org.apache.http.cookie.Cookie cookie: cookielist){
- String name=cookie.getName();
- String value=cookie.getValue();
- nCookie += name + "="+value+";";
- }
- System.out.println("nCookie:" + nCookie);
- shopAccount.setFuziCookie(nCookie);
- shopAccountMapper.updateById(shopAccount);
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("更新cookie成功");
- shopLog.setContent("账号:"+shopAccount.getFuziAccount()+",cookie:"+nCookie);
- shopLogMapper.insert(shopLog);
- }
- else{
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("更新cookie失败");
- shopLog.setContent(response.toString());
- shopLogMapper.insert(shopLog);
- }
- // 释放链接
- response.close();
- }catch (Exception e) {
- e.printStackTrace();
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("更新cookie异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- }
- }
- /**
- * 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 {
- try{
- /**
- * 获取一下店铺的所有静态参数
- */
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- SdkClient sdkClient = new SdkClient(shopAccount.getDangAppKey(),shopAccount.getDangAppSecret(),shopAccount.getDangSession(),shopAccount.getDangVersion());
- OrderDetailsGetRequest ss = new OrderDetailsGetRequest();
- OrderDetailsGet orderDetailsGet = new OrderDetailsGet();
- orderDetailsGet.setO(shopOrder.getDangOrder());
- ss.setOrderDetailsGet(orderDetailsGet);
- OrderDetailsGetResponse resultt = null;
- try {
- resultt = sdkClient.excute(ss);
- if(resultt.getOrderID() == null){
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("当当订单编号错误");
- shopLog.setContent("店铺:"+shopAccount.getDangName()+",孔网订单:"+shopOrder.getOrderId()+",当当订单:"+shopOrder.getDangOrder());
- shopLogMapper.insert(shopLog);
- return;
- }
- } catch (ApiException e) {
- throw e;
- }
- /**
- * 从当当获取订单内应当有的所有图书
- */
- OrderDetailsGetRequest odgr = new OrderDetailsGetRequest();
- OrderDetailsGet ogg = new OrderDetailsGet();
- ogg.setO(shopOrder.getDangOrder());
- odgr.setOrderDetailsGet(ogg);
- OrderDetailsGetResponse odgrp = null;
- try {
- odgrp = sdkClient.excute(odgr);
- } catch (ApiException e) {
- throw e;
- }
- SdkClient jiemi = new SdkClient(shopAccount.getDangAppKey(),shopAccount.getDangAppSecret(),shopAccount.getDangSession(),shopAccount.getDangVersion());
- OrdersContentDecryptRequest ordersContentDecryptRequest=new OrdersContentDecryptRequest();
- List<EncryptDTO> encryptVOS = new ArrayList<EncryptDTO>();
- EncryptDTO encryptVO1 = new EncryptDTO();
- encryptVO1.setO(resultt.getOrderID().toString());
- encryptVO1.setEncrypt_content(resultt.getEncrypt_content());
- encryptVOS.add(encryptVO1);
- ordersContentDecryptRequest.setO_cryptStr(JSON.toJSONString(encryptVOS));
- OrdersContentDecryptResponse ordersContentDecryptResponse = null;
- try {
- ordersContentDecryptResponse=jiemi.excute(ordersContentDecryptRequest);
- } catch (ApiException e) {
- throw e;
- }
- List<OrdersContentDecryptDTO> data = ordersContentDecryptResponse.getData();
- CryptUserInfo cryptUserInfo = data.get(0).getCryptUserInfo();
- OrderDetail o = (OrderDetail) XMLUtil.convertXmlStrToObject(OrderDetail.class, odgrp.getBody());
- SendGoodsInfo sgi = new SendGoodsInfo();
- sgi.setConsigneeAddr(cryptUserInfo.getConsigneeAddr());
- sgi.setConsigneeMobileTel(cryptUserInfo.getConsigneeMobileTel());
- sgi.setConsigneeTel(cryptUserInfo.getConsigneeTel());
- sgi.setConsigneeName(cryptUserInfo.getConsigneeName());
- o.setSendGoodsInfo(sgi);
- List<com.iotechn.unimall.data.dto.shop.XmlObject.ItemInfo> itemInfo = o.getItemsList().getItemInfo();
- /**
- * 将多个图书拼接XML
- */
- String itemsStr = "";
- for (com.iotechn.unimall.data.dto.shop.XmlObject.ItemInfo ii : itemInfo) {
- Map<String, Object> hashMap = new HashMap<>();
- hashMap.put("DANG_DANG_ITEM_ID", ii.getItemID());
- hashMap.put("SHU_LIANG", ii.getOrderCount());
- hashMap.put("PRODUCT_ID", ii.getProductItemId());
- itemsStr += SendGood.processTemplate(SendGood.ONE_ITEM, hashMap);
- }
- /**
- * 组成OrderInfo
- */
- Wrapper wrapper = new EntityWrapper();
- wrapper.like("fuzi_name",shopOrder.getShippingComName());
- wrapper.eq("delete_flag",0);
- List<ShopTran> list = shopTranMapper.selectList(wrapper);
- HashMap<String, Object> stringObjectHashMap = new HashMap<>();
- stringObjectHashMap.put("DANG_DANG_ORDER", shopOrder.getDangOrder());
- if(list.size() == 0 ){
- // throw new Exception("物流公司不存在");
- System.out.println("物流公司不存在");
- stringObjectHashMap.put("KUAI_DI_GONG_SI", "99999");
- stringObjectHashMap.put("KUAI_DI_BIANMA", "99999");
- stringObjectHashMap.put("KUAI_DI_GONG_SI_DIAN_HUA", "99999");
- }
- else{
- stringObjectHashMap.put("KUAI_DI_GONG_SI", list.get(0).getName());
- stringObjectHashMap.put("KUAI_DI_BIANMA", list.get(0).getCode1());
- stringObjectHashMap.put("KUAI_DI_GONG_SI_DIAN_HUA", list.get(0).getPhone());
- }
- stringObjectHashMap.put("KUAI_DI_DAN_HAO", shopOrder.getShipmentNum());
- stringObjectHashMap.put("SEND_ITEMS", itemsStr);
- String orderListStr = SendGood.processTemplate(SendGood.ONE_ORDER, stringObjectHashMap);
- HashMap<String, Object> tmplHash = new HashMap<>();
- tmplHash.put("SEND_TIME", dateFormat.format(new Date()));
- tmplHash.put("ORDER_LIST", orderListStr);
- String xmlFileStr = SendGood.processTemplate(SendGood.TMPL, tmplHash);
- System.out.println(xmlFileStr);
- PrintWriter out = null;
- try {
- out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream("sendGoodNotPlat.xml"), "GBK")));
- }catch (Exception e) {
- throw e;
- }
- out.write(xmlFileStr);
- out.close();
- System.out.println("XML文件创建成功!");
- /**
- * 发货!!
- */
- OrderGoodsSendRequest sendGoodsRequest = new OrderGoodsSendRequest();
- sendGoodsRequest.setSendGoodsFile(new FileItem(new File("sendGoodNotPlat.xml")));
- OrderGoodsSendResponse result = null;
- try {
- result = sdkClient.excute(sendGoodsRequest);
- } catch (ApiException e) {
- throw e;
- }
- System.out.println(result.toString());
- if(result.getResult().getOrdersList().get(0).getOrderOperCode() == 0 || result.getResult().getOrdersList().get(0).getOrderOperCode() == 605){
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("当当订单发货成功");
- shopLog.setContent("店铺:"+shopAccount.getDangName()+",孔网订单:"+shopOrder.getOrderId()+",当当订单:"+shopOrder.getDangOrder());
- shopLogMapper.insert(shopLog);
- shopOrder.setDangOrderStatus("已发货");
- shopOrderMapper.update(shopOrder,new EntityWrapper<ShopOrder>().eq("order_id",shopOrder.getOrderId()));
- }
- else{
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("当当订单发货失败");
- shopLog.setContent("店铺:"+shopAccount.getDangName()+",孔网订单:"+shopOrder.getOrderId()+",当当订单:"+shopOrder.getDangOrder()+",快递:"+shopOrder.getShippingComName());
- shopLogMapper.insert(shopLog);
- }
- }
- catch (Exception e){
- e.printStackTrace();
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("当当发货异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- }
- }
- /**
- * 需要处理的任务
- * */
- private void doSomething1() {
- try{
- List<ShopAccount> list = shopAccountMapper.selectList(new EntityWrapper<>());
- for (ShopAccount shopAccount:list
- ) {
- flushCookie(shopAccount);
- List<ShopOrder> shopOrders = shopOrderMapper.selectList(new EntityWrapper<ShopOrder>()
- .eq("dang_order_status","未发货")
- .eq("account_id",shopAccount.getId())
- .eq("order_status_name","卖家已发货"));
- for (ShopOrder qqq:shopOrders
- ) {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet get = new HttpGet("https://shop.kongfz.com/buyer/order/index/?pageCurr=1&pageShow=9999&orderId="+qqq.getOrderId());
- //这里可以设置请求参数,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());
- get.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
- CloseableHttpResponse response = httpClient.execute(get);//执行获取响应
- try{
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){//根据状态码处理
- String strTmp= EntityUtils.toString(response.getEntity(),"UTF-8");
- //返回字符串
- String res = unicodeToString(strTmp);
- JSONObject datas = JSONObject.parseObject(res);//转换成JSON格式
- Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
- List<ShopOrder> data = JSONArray.parseArray(datas.get("data").toString(),ShopOrder.class);//"data"是根据返回值设定
- for (ShopOrder tmp: data
- ) {
- //正则表达式,用于匹配非数字串,+号用于匹配出多个非数字串
- String regEx="[^0-9]+";
- Pattern pattern = Pattern.compile(regEx);
- //用定义好的正则表达式拆分字符串,把字符串中的数字留出来
- String[] cs = pattern.split(tmp.getRemarkText());
- String dangOrder = "";
- for (String str:cs
- ) {
- if(dangOrder.length()>= 11 || str.equals("*")){
- break;
- }
- dangOrder += str;
- }
- tmp.setDangOrder(dangOrder);
- tmp.setAccountId(shopAccount.getId());
- Long time = Long.parseLong(tmp.getShippingTime())+8*60*60;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
- String time1 = sdf.format(new Date(time * 1000));
- tmp.setShippingTime(time1);
- tmp.setDeleteFlag(0);
- tmp.setGmtUpdate(new Date());
- tmp.setGmtCreate(new Date());
- if(tmp.getShippingComName().equals("快递包裹")||tmp.getShippingComName().equals("挂号印刷品")){
- tmp.setShippingComName("中国邮政");
- }
- ShopOrder tt = new ShopOrder();
- tt.setOrderId(tmp.getOrderId());
- tt = shopOrderMapper.selectOne(tt);
- if(tt == null){
- shopOrderMapper.insert(tmp);
- }
- else{
- if(!tt.getDangOrder().equals(tmp.getDangOrder())||!tt.getShippingComName().equals(tmp.getShippingComName())){
- shopOrderMapper.update(tmp,new EntityWrapper<ShopOrder>().eq("order_id",tt.getOrderId()));
- }
- dangOrderDeal(shopAccount,qqq);
- }
- }
- }
- } catch (IOException e) {
- throw e;
- }
- finally {
- response.close();
- httpClient.close();
- }
- }
- }
- }
- catch (Exception e) {
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("同步定时任务异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- e.printStackTrace();
- }
- }
- private void doSomething2() {
- try{
- List<ShopAccount> list = shopAccountMapper.selectList(new EntityWrapper<>());
- for (ShopAccount shopAccount:list
- ) {
- flushCookie(shopAccount);
- for (int i = 1; i <= 5; i++) {
- CloseableHttpClient httpClient = HttpClientBuilder.create().build();
- HttpGet get = new HttpGet("https://shop.kongfz.com/buyer/order/index/?pageCurr=" + i + "&pageShow=300&orderStatus=ShippedToReceipt");
- //这里可以设置请求参数,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());
- CloseableHttpResponse response = httpClient.execute(get);//执行获取响应
- try {
- if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {//根据状态码处理
- String strTmp = EntityUtils.toString(response.getEntity(), "UTF-8");
- //返回字符串
- String res = unicodeToString(strTmp);
- JSONObject datas = JSONObject.parseObject(res);//转换成JSON格式
- Boolean status = (Boolean) datas.get("status");//获取返回数据状态,get获取的字段需要根据提供的返回值去获取
- List<ShopOrder> data = JSONArray.parseArray(datas.get("data").toString(), ShopOrder.class);//"data"是根据返回值设定
- if (data.size() == 0) {
- break;
- }
- for (ShopOrder tmp : data
- ) {
- //正则表达式,用于匹配非数字串,+号用于匹配出多个非数字串
- String regEx = "[^0-9]+";
- Pattern pattern = Pattern.compile(regEx);
- //用定义好的正则表达式拆分字符串,把字符串中的数字留出来
- String[] cs = pattern.split(tmp.getRemarkText());
- String dangOrder = "";
- for (String str : cs
- ) {
- if (dangOrder.length() >= 11 || str.equals("*")) {
- break;
- }
- dangOrder += str;
- }
- tmp.setDangOrder(dangOrder);
- tmp.setAccountId(shopAccount.getId());
- Long time = Long.parseLong(tmp.getShippingTime())+8*60*60;
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
- String time1 = sdf.format(new Date(time * 1000));
- tmp.setShippingTime(time1);
- tmp.setDeleteFlag(0);
- tmp.setGmtUpdate(new Date());
- tmp.setGmtCreate(new Date());
- if (tmp.getShippingComName().equals("快递包裹") || tmp.getShippingComName().equals("挂号印刷品")) {
- tmp.setShippingComName("中国邮政");
- }
- ShopOrder tt = new ShopOrder();
- tt.setOrderId(tmp.getOrderId());
- tt = shopOrderMapper.selectOne(tt);
- if (tt == null) {
- shopOrderMapper.insert(tmp);
- } else {
- if (tt.getDangOrderStatus().equals("未发货") && !tt.getDangOrder().equals(tmp.getDangOrder())) {
- shopOrderMapper.update(tmp, new EntityWrapper<ShopOrder>().eq("order_id", tt.getOrderId()));
- }
- }
- }
- }
- } catch (IOException e) {
- throw e;
- } finally {
- response.close();
- httpClient.close();
- }
- }
- }
- doSomething2();
- }
- catch (Exception e){
- ShopLog shopLog = new ShopLog();
- shopLog.setGmtCreate(new Date());
- shopLog.setTitle("爬取定时任务异常");
- shopLog.setContent(e.getMessage());
- shopLogMapper.insert(shopLog);
- e.printStackTrace();
- }
- }
- }
|