package com.uas.eis.serviceImpl; import com.taobao.api.DefaultTaobaoClient; import com.taobao.api.TaobaoClient; import com.taobao.api.domain.Order; import com.taobao.api.domain.Trade; import com.taobao.api.internal.util.StringUtils; import com.uas.eis.dao.BaseDao; import com.uas.eis.service.InsertService; import net.sf.json.JSON; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.*; import com.taobao.api.request.TradesSoldGetRequest; import com.taobao.api.response.TradesSoldGetResponse; import com.taobao.api.request.TradesSoldIncrementGetRequest; import com.taobao.api.response.TradesSoldIncrementGetResponse; import com.uas.eis.utils.HttpUtil; import com.uas.eis.utils.HttpUtil.Response; @Service public class InsertServiceImpl implements InsertService { // TOP服务地址,正式环境需要设置为http://gw.api.taobao.com/router/rest public static final String serverUrl = "gw.api.taobao.com/router/rest"; // private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest"; public static final String appKey = "31921866"; // 可替换为您的沙箱环境应用的appKey /* 待修改 */ public static final String appSecret = "7121c52d4c9970ba08bf09e2f525acd0"; // 可替换为您的沙箱环境应用的appSecret /* 待修改 */ public static final String sessionKey = "61024291979328cd09f0ba138f79236d66bd313f3364cf148715824"; // 必须替换为沙箱账号授权得到的真实有效sessionKey /* 待修改 */ public static Logger logger = Logger.getLogger(InsertServiceImpl.class); @Autowired private BaseDao baseDao; @Override public String Insert(String code, String param) { try { Timer timer = new Timer();//实例化Timer类 timer.schedule(new TimerTask() { public void run() { getAllDate(); } }, 600000);//10分钟 } catch (Exception e) { logger.info(this.getClass() + "服务挂掉"); return e.getMessage(); } return null; } @Autowired @Scheduled(cron = "0 0 0/1 * * ?") public void getAllDate() { // 1.无淘宝自动抓取的 订单 ,则正常备份历史订单 // 有淘宝自动抓取的 订单 ,则调用增量备份 List trades = new ArrayList(); String sa_remark = baseDao.queryForObject("select distinct sa_remark from sale where sa_remark ='淘宝自动抓取' ", String.class); String session_Key = baseDao.queryForObject(" select tb_code from ( select row_number() over( order by tb_date desc ) xuhao , tb_code from tbauthorization ) where xuhao=1 ", String.class); if (sa_remark == null || sa_remark == "") { TaobaoClient client = new DefaultTaobaoClient("http://gw.api.taobao.com/router/rest", "31921866", "7121c52d4c9970ba08bf09e2f525acd0"); TradesSoldGetRequest req = new TradesSoldGetRequest(); //正常备份接口 req.setFields("tid,type,status,payment,orders,rx_audit_status,trades"); req.setStartCreated(StringUtils.parseDateTime("1990-01-01 00:00:00")); Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); Date endtime = calendar.getTime(); req.setEndCreated(endtime); // req.setEndCreated(StringUtils.parseDateTime("2020-12-01 00:00:00")); try { TradesSoldGetResponse rsp = client.execute(req, session_Key); trades = rsp.getTrades(); } catch (Exception e) { logger.info( new SimpleDateFormat("YYYY-MM-DD hh24:mi:ss").format(new Date())+ this.getClass() + "淘宝未响应并返回订单数据"); } } else { TaobaoClient client2 = new DefaultTaobaoClient("http://gw.api.taobao.com/router/rest", "31921866", "7121c52d4c9970ba08bf09e2f525acd0"); TradesSoldIncrementGetRequest req2 = new TradesSoldIncrementGetRequest(); //增量备份接口 req2.setFields("tid,type,status,payment,orders,rx_audit_status,trades"); Date date2 = new Date(); Calendar calendar2 = Calendar.getInstance(); calendar2.setTime(new Date()); calendar2.set(Calendar.HOUR_OF_DAY, 0); calendar2.set(Calendar.MINUTE, 0); calendar2.set(Calendar.SECOND, 0); Date zero = calendar2.getTime(); req2.setStartModified(zero); calendar2.set(Calendar.HOUR_OF_DAY, 23); calendar2.set(Calendar.MINUTE, 59); calendar2.set(Calendar.SECOND, 59); Date endtime = calendar2.getTime(); req2.setEndModified(endtime); try { TradesSoldIncrementGetResponse rsp2 = client2.execute(req2, session_Key); trades = rsp2.getTrades(); } catch (Exception e) { logger.info(this.getClass() + "淘宝未响应并返回订单数据"); } } List insertSqlsList = new ArrayList(); if (trades ==null || trades.size() == 0) { logger.info(this.getClass() + " 未录入淘宝订单 "); } else { int L=0; //SDID 不能重复,得自增1次 for (int i = 0; i < trades.size(); i++) { // /* 插入淘宝订单ID sa_tradeid 字段 alter table sale add sa_tradeid number; */ Long said = baseDao.queryForObject("select sale_seq.nextval from dual", Long.class); said = said + i ; String sa_code = baseDao.sGetMaxNumber("Sale", 2); String INSERTSALESql = "insert into sale( sa_custcode,sa_paymentscode,SA_TAOBAOID,sa_payments,sa_custname,sa_kind,sa_wwh_user,sa_need15,sa_id,sa_tradeid,sa_code,sa_date,sa_recorder,sa_recorddate,sa_currency,sa_rate" + ",sa_apcustname,sa_shcustname,sa_toplace" + ",sa_transport,sa_seller,sa_updatedate" + ",sa_enddate,sa_statuscode,sa_status,sa_fare,sa_total" + ",sa_recamount,sa_plandelivery,sa_printstatuscode,sa_remark)" + " SELECT 'GN0008358','P001', " + trades.get(i).getTid() + " , '现结','HLK淘宝','国内标准销售订单', " + trades.get(i).getReceiverName() + " , " + trades.get(i).getReceiverPhone() + "," + said + "," + trades.get(i).getTid() + "," + sa_code + " ," + trades.get(i).getCreated() + "," + trades.get(i).getBuyerNick() + ",sysdate,'RMB','1'," + trades.get(i).getReceiverName() + "," + trades.get(i).getBuyerNick() + "," + trades.get(i).getReceiverState() + " || " + trades.get(i).getReceiverAddress() + "," + trades.get(i).getShippingType() + "," + trades.get(i).getO2oGuideName() + "," + trades.get(i).getModified() + "," + trades.get(i).getEndTime() + ",'entering','在录入'," + trades.get(i).getPostFee() + "," + trades.get(i).getPayment() + "," + trades.get(i).getTotalFee() + "," + trades.get(i).getConsignTime() + ",'unprint', '淘宝自动抓取' FROM DUAL " + " WHERE NOT EXISTS ( select sa_id from sale WHERE SA_iD=" + said + " ) AND NOT EXISTS ( select SA_TAOBAOID from sale WHERE SA_TAOBAOID=" + trades.get(i).getTid() + " ) "; insertSqlsList.add(INSERTSALESql); List orders = trades.get(i).getOrders(); for (int j = 0; j < orders.size(); j++) { int k = j + 1; L++; //sd_enddate ,sd_senddate ,to_date(' "+orders.get(j).getEndTime()+ "','yyyy-MM-dd hh24:mi:ss'),to_date('" +orders.get(j).getConsignTime()+"','yyyy-MM-dd hh24:mi:ss'), // Long sdid = baseDao.queryForObject("select saledetail_seq.nextval from dual", Long.class); sdid = sdid +L; String INSERTSALEDETAILSql = "insert into saledetail(sd_remark,sd_id,sd_said,sd_code,sd_detno,sd_prodcode,sd_qty,sd_price,sd_total" + ",sd_statuscode,sd_status,sd_discount)" + " SELECT ' " + orders.get(j).getTitle() + " ' , " + sdid + " ," + said + " ,' " + sdid + " '," + k + "," + orders.get(j).getNumIid() + "," + orders.get(j).getNum() + "," + orders.get(j).getPrice() + " ," + orders.get(j).getTotalFee() + ",'entering','在录入'," + orders.get(j).getDiscountFee() + " FROM DUAL WHERE NOT EXISTS ( select sd_id from saledetail " + "WHERE sd_id=" + sdid + " ) AND NOT EXISTS ( select sd_id from sale left join saledetail on sa_id=sd_said " + "WHERE SA_TAOBAOID = " + trades.get(i).getTid() + " and sd_detno = " + k +" ) "; insertSqlsList.add(INSERTSALEDETAILSql); } } System.out.println(insertSqlsList); baseDao.execute(insertSqlsList); logger.info(this.getClass() + "插入销售明细成功"); } } }