InsertServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. package com.uas.eis.serviceImpl;
  2. import com.taobao.api.DefaultTaobaoClient;
  3. import com.taobao.api.TaobaoClient;
  4. import com.taobao.api.domain.Order;
  5. import com.taobao.api.domain.Trade;
  6. import com.taobao.api.internal.util.StringUtils;
  7. import com.uas.eis.dao.BaseDao;
  8. import com.uas.eis.service.InsertService;
  9. import net.sf.json.JSON;
  10. import net.sf.json.JSONArray;
  11. import net.sf.json.JSONObject;
  12. import oracle.sql.DATE;
  13. import org.apache.log4j.Logger;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.scheduling.annotation.Scheduled;
  16. import org.springframework.stereotype.Service;
  17. import java.text.SimpleDateFormat;
  18. import com.uas.eis.utils.DateUtil;
  19. import java.util.*;
  20. import com.taobao.api.request.TradesSoldGetRequest;
  21. import com.taobao.api.response.TradesSoldGetResponse;
  22. import com.taobao.api.request.TradesSoldIncrementGetRequest;
  23. import com.taobao.api.response.TradesSoldIncrementGetResponse;
  24. import com.uas.eis.utils.HttpUtil;
  25. import com.uas.eis.utils.HttpUtil.Response;
  26. @Service
  27. public class InsertServiceImpl implements InsertService {
  28. // TOP服务地址,正式环境需要设置为http://gw.api.taobao.com/router/rest
  29. public static final String serverUrl = "gw.api.taobao.com/router/rest";
  30. // private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest";
  31. public static final String appKey = "31921866"; // 可替换为您的沙箱环境应用的appKey /* 待修改 */
  32. public static final String appSecret = "7121c52d4c9970ba08bf09e2f525acd0"; // 可替换为您的沙箱环境应用的appSecret /* 待修改 */
  33. // public static final String sessionKey = "61024291979328cd09f0ba138f79236d66bd313f3364cf148715824"; // 必须替换为沙箱账号授权得到的真实有效sessionKey /* 待修改 */
  34. public static Logger logger = Logger.getLogger(InsertServiceImpl.class);
  35. @Autowired
  36. private BaseDao baseDao;
  37. @Override
  38. public String Insert(String code, String param) {
  39. try {
  40. Timer timer = new Timer();//实例化Timer类
  41. timer.schedule(new TimerTask() {
  42. public void run() {
  43. getAllDate();
  44. }
  45. }, 600000);//10分钟
  46. } catch (Exception e) {
  47. logger.info(this.getClass() + "服务挂掉");
  48. return e.getMessage();
  49. }
  50. return null;
  51. }
  52. public String trimNull(String str){
  53. if("".equals(str)||str==null||"null".equals(str)){
  54. return "";
  55. }else{
  56. return str.trim();
  57. }
  58. }
  59. @Autowired
  60. @Scheduled(cron = "0 0 0/1 * * ?")
  61. public void getAllDate() {
  62. // 1.无淘宝自动抓取的 订单 ,则正常备份历史订单
  63. // 有淘宝自动抓取的 订单 ,则调用增量备份
  64. List<Trade> trades = new ArrayList<Trade>();
  65. String sa_remark = baseDao.queryForObject("select distinct sa_remark from sale where sa_remark ='淘宝自动抓取' ", String.class);
  66. //String session_Key = baseDao.queryForObject(" select tb_code from ( select row_number() over(partition by TB_OPENUID order by tb_date desc ) xuhao , tb_code from tbauthorization ) where xuhao=1 ", String.class);
  67. List<Map<String,Object>> list = baseDao.queryForList(" select tb_code from ( select row_number() over(partition by TB_OPENUID order by tb_date desc ) xuhao , tb_code from tbauthorization ) where xuhao=1");
  68. for (int z = 0; z < list.size(); z++) {
  69. String session_Key = list.get(z).get("tb_code").toString();
  70. if (sa_remark == null || sa_remark == "") {
  71. TaobaoClient client = new DefaultTaobaoClient("http://39.98.201.114:30001/router/rest", "31921866", "7121c52d4c9970ba08bf09e2f525acd0");
  72. TradesSoldGetRequest req = new TradesSoldGetRequest(); //正常备份接口
  73. req.setFields("tid,type,status,payment,orders,rx_audit_status,trades,receiver_name,receiver_mobile,created,buyer_nick,receiver_state" +
  74. ",receiver_address,shipping_type,o2o_guide_name,modified,end_time,post_fee,payment,total_fee,consign_time,sku_properties_name,seller_nick");
  75. req.setStartCreated(StringUtils.parseDateTime("1990-01-01 00:00:00"));
  76. Date date = new Date();
  77. Calendar calendar = Calendar.getInstance();
  78. calendar.setTime(new Date());
  79. calendar.set(Calendar.HOUR_OF_DAY, 23);
  80. calendar.set(Calendar.MINUTE, 59);
  81. calendar.set(Calendar.SECOND, 59);
  82. Date endtime = calendar.getTime();
  83. req.setEndCreated(endtime);
  84. try {
  85. TradesSoldGetResponse rsp = client.execute(req, session_Key);
  86. // TradesSoldGetResponse rsp = client.execute(req,"6101610227ce2081f21253411b0073fcb18b38a3a1b314f48715824");
  87. trades = rsp.getTrades();
  88. } catch (Exception e) {
  89. logger.info( new SimpleDateFormat("YYYY-MM-DD hh24:mi:ss").format(new Date())+ this.getClass() + "淘宝未响应并返回订单数据");
  90. }
  91. } else {
  92. TaobaoClient client2 = new DefaultTaobaoClient("http://39.98.201.114:30001/router/rest", "31921866", "7121c52d4c9970ba08bf09e2f525acd0");
  93. TradesSoldIncrementGetRequest req2 = new TradesSoldIncrementGetRequest(); //增量备份接口
  94. req2.setFields("tid,type,status,payment,orders,rx_audit_status,trades,receiver_name,receiver_mobile,created,buyer_nick,receiver_state" +
  95. ",receiver_address,shipping_type,o2o_guide_name,modified,end_time,post_fee,payment,total_fee,consign_time,sku_properties_name,seller_nick");
  96. Date date2 = new Date();
  97. Calendar calendar2 = Calendar.getInstance();
  98. calendar2.setTime(new Date());
  99. calendar2.set(Calendar.HOUR_OF_DAY, 0);
  100. calendar2.set(Calendar.MINUTE, 0);
  101. calendar2.set(Calendar.SECOND, 0);
  102. Date zero = calendar2.getTime();
  103. req2.setStartModified(zero);
  104. calendar2.set(Calendar.HOUR_OF_DAY, 23);
  105. calendar2.set(Calendar.MINUTE, 59);
  106. calendar2.set(Calendar.SECOND, 59);
  107. Date endtime = calendar2.getTime();
  108. req2.setEndModified(endtime);
  109. try {
  110. TradesSoldIncrementGetResponse rsp2 = client2.execute(req2, session_Key);
  111. trades = rsp2.getTrades();
  112. } catch (Exception e) {
  113. logger.info(this.getClass() + "淘宝未响应并返回订单数据");
  114. }
  115. }
  116. List<String> insertSqlsList = new ArrayList<String>();
  117. if (trades ==null || trades.size() == 0) {
  118. logger.info(this.getClass() + " 未录入淘宝订单 ");
  119. } else {
  120. int L=0; //SDID 不能重复,得自增1次
  121. for (int i = 0; i < trades.size(); i++) {
  122. //
  123. /* 插入淘宝订单ID sa_tradeid 字段 alter table sale add sa_tradeid number; */
  124. // logger.info(trades.get(i).getEndTime());
  125. // logger.info(new DATE());
  126. Long said = baseDao.queryForObject("select sale_seq.nextval from dual", Long.class);
  127. // said = said + i ;
  128. String sa_code = baseDao.sGetMaxNumber("Sale", 2);
  129. SimpleDateFormat formatdx = new SimpleDateFormat("yyyy-MM-dd HH:MM:ss");
  130. String createdtime="2020-11-25";
  131. if(trades.get(i).getCreated() == null ) {
  132. createdtime = formatdx.format(new DATE());
  133. // createdtime = new SimpleDateFormat("YYYY-MM-DD HH:mm:ss").format(new DATE());
  134. } else {
  135. createdtime = formatdx.format(trades.get(i).getCreated());
  136. }
  137. String modified="2020-11-25";
  138. if(trades.get(i).getModified() == null ) {
  139. modified = formatdx.format(trades.get(i).getCreated());
  140. } else {
  141. modified = formatdx.format(trades.get(i).getModified());
  142. }
  143. String end_time="2020-11-25";
  144. if(trades.get(i).getEndTime() == null ) {
  145. end_time = formatdx.format(trades.get(i).getCreated());
  146. } else {
  147. end_time = formatdx.format( trades.get(i).getEndTime() );
  148. }
  149. String consigntime="2020-11-25";
  150. if(trades.get(i).getConsignTime() == null ) {
  151. consigntime = formatdx.format(trades.get(i).getCreated());
  152. } else {
  153. consigntime = formatdx.format( trades.get(i).getConsignTime() );
  154. }
  155. if(trades.get(i).getConsignTime() == null ) {
  156. consigntime = formatdx.format(trades.get(i).getCreated());
  157. } else {
  158. consigntime = formatdx.format( trades.get(i).getConsignTime() );
  159. }
  160. // logger.info(createdtime);
  161. String INSERTSALESql = "insert into sale( sa_sellernick,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" +
  162. ",sa_apcustname,sa_shcustname,sa_toplace" +
  163. ",sa_transport,sa_seller,sa_updatedate" +
  164. ",sa_enddate,sa_statuscode,sa_status,sa_fare,sa_total" +
  165. ",sa_recamount,sa_plandelivery,sa_printstatuscode,sa_remark)" +
  166. " SELECT ' " + trimNull(trades.get(i).getSellerNick() ) + " ', 'GN0008358','P001', " + trades.get(i).getTid() + " , '现结','HLK淘宝','国内标准销售订单', ' " +trimNull( trades.get(i).getReceiverName() ) + " ' , ' " + trimNull(trades.get(i).getReceiverMobile()) + " ' , " + said + "," + trades.get(i).getTid() + "," + trades.get(i).getTid()
  167. + " , to_date ( '" + createdtime + "' ,'YYYY-MM-DD hh24:mi:ss') , '管理员',sysdate,'RMB','1','"
  168. + trimNull(trades.get(i).getReceiverName() )+ "','" + trimNull( trades.get(i).getBuyerNick() )+ "','" + trimNull(trades.get(i).getReceiverState() ) + " || " + trimNull( trades.get(i).getReceiverAddress() )+ " ', ' "
  169. + trimNull( trades.get(i).getShippingType() ) + " ', ' " + trimNull (trades.get(i).getO2oGuideName() ) + " ', to_date ( '" + modified
  170. + "','YYYY-MM-DD hh24:mi:ss') , to_date ( '" +end_time + "','YYYY-MM-DD hh24:mi:ss') ,'ENTERING','在录入'," + trimNull( trades.get(i).getPostFee() )+ "," +trimNull( trades.get(i).getPayment() ) + ","
  171. + trimNull(trades.get(i).getTotalFee() ) + " , to_date ( '" +consigntime + "','YYYY-MM-DD hh24:mi:ss') ,'unprint', '淘宝自动抓取' FROM DUAL " +
  172. " WHERE ' " + trimNull(trades.get(i).getStatus() ) + " ' NOT IN ( 'TRADE_NO_CREATE_PAY','WAIT_BUYER_PAY','PAY_PENDING' ) AND NOT EXISTS ( select sa_id from sale WHERE SA_iD=" + said + " ) AND NOT EXISTS ( select SA_CODE from sale WHERE SA_CODE= '" + trades.get(i).getTid() + "' ) AND NOT EXISTS ( select SA_TAOBAOID from sale WHERE SA_TAOBAOID=" + trades.get(i).getTid() + " ) ";
  173. insertSqlsList.add(INSERTSALESql);
  174. List<Order> orders = trades.get(i).getOrders();
  175. for (int j = 0; j < orders.size(); j++) {
  176. int k = j + 1;
  177. L++;
  178. //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'),
  179. //
  180. Long sdid = baseDao.queryForObject("select saledetail_seq.nextval from dual", Long.class);
  181. // sdid = sdid +L;
  182. String INSERTSALEDETAILSql = "insert into saledetail(SD_PROPERTIES,sd_remark,sd_id,sd_said,sd_code,sd_detno,sd_prodcode,sd_qty,sd_price,sd_total" +
  183. ",sd_statuscode,sd_status,sd_discount )" +
  184. " SELECT ' " + trimNull ( orders.get(j).getSkuPropertiesName() ) + " ' , ' " + orders.get(j).getTitle() + " ' , " + sdid + " ," + said + " ,' " + sdid + " '," + k + "," + orders.get(j).getNumIid() + "," + orders.get(j).getNum() + "," + orders.get(j).getPrice() + " ," + orders.get(j).getTotalFee() +
  185. ",'ENTERING','在录入', " + trimNull(orders.get(j).getDiscountFee() ) + " FROM DUAL WHERE NOT EXISTS ( select sd_id from saledetail " +
  186. "WHERE ' " + trimNull(trades.get(i).getStatus() ) + " ' NOT IN ( 'TRADE_NO_CREATE_PAY','WAIT_BUYER_PAY','PAY_PENDING' ) AND sd_id=" + sdid + " ) AND NOT EXISTS ( select sd_id from sale left join saledetail on sa_id=sd_said " +
  187. "WHERE SA_TAOBAOID = " + trades.get(i).getTid() + " and sd_detno = " + k +" ) ";
  188. insertSqlsList.add(INSERTSALEDETAILSql);
  189. }
  190. }
  191. System.out.println(insertSqlsList);
  192. try{
  193. baseDao.execute(insertSqlsList);
  194. baseDao.callProcedure("SP_UPDATE_SALE");
  195. }catch (Exception e) {
  196. logger.info( e.getMessage() );
  197. }
  198. }
  199. logger.info(this.getClass() + "插入销售明细成功");
  200. }
  201. }
  202. }