taoapigoods

This commit is contained in:
启航 2024-03-01 18:43:36 +08:00
parent a2d4e766cb
commit 6a64f38cd5
6 changed files with 270 additions and 155 deletions

View File

@ -0,0 +1,98 @@
package com.qihang.tao.api;
import com.qihang.tao.domain.TaoGoods;
import com.qihang.tao.domain.TaoGoodsSku;
import com.qihang.tao.domain.TaoOrder;
import com.taobao.api.ApiException;
import com.taobao.api.DefaultTaobaoClient;
import com.taobao.api.TaobaoClient;
import com.taobao.api.domain.Item;
import com.taobao.api.request.ItemSkusGetRequest;
import com.taobao.api.request.ItemsOnsaleGetRequest;
import com.taobao.api.response.ItemSkusGetResponse;
import com.taobao.api.response.ItemsOnsaleGetResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.StringUtils;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
public class GoodsApiHelper {
private static Logger log = LoggerFactory.getLogger(GoodsApiHelper.class);
private static final String LIST_FIELDS = "approve_status,num_iid,title,nick,type,cid,pic_url,num,props,props_name,valid_thru,list_time,price,has_discount,has_invoice,has_warranty," +
"has_showcase,modified,delist_time,postage_id,seller_cids,outer_id,sold_quantity,skus";
public static ApiResult<TaoGoods> pullGoods(Long pageNo, Long pageSize, String url, String appKey, String appSecret, String sessionKey) throws ApiException {
log.info("=======开始全量商品数据{}=========", LocalDateTime.now());
TaobaoClient client = new DefaultTaobaoClient(url, appKey, appSecret);
ItemsOnsaleGetRequest req = new ItemsOnsaleGetRequest();
req.setFields(LIST_FIELDS);
req.setPageNo(pageNo);
req.setPageSize(pageSize);
ItemsOnsaleGetResponse rsp = client.execute(req, sessionKey);
if (rsp.getItems() == null) {
return new ApiResult(0, new ArrayList());
}
List<TaoGoods> goodsList = new ArrayList<>();
for (Item item : rsp.getItems()) {
TaoGoods goods = new TaoGoods();
goods.setNumIid(item.getNumIid());
goods.setTitle(item.getTitle());
goods.setNick(item.getNick());
goods.setType(item.getType());
goods.setCid(item.getCid());
goods.setSellerCids(item.getSellerCids());
goods.setPicUrl(item.getPicUrl());
goods.setNum(item.getNum().intValue());
goods.setValidThru(item.getValidThru().intValue());
goods.setHasDiscount(item.getHasDiscount() + "");
goods.setHasInvoice(item.getHasInvoice() + "");
goods.setHasWarranty(item.getHasWarranty() + "");
goods.setHasShowcase(item.getHasShowcase() + "");
goods.setModified(item.getModified());
goods.setCreateTime(item.getCreated());
goods.setDelistTime(item.getDelistTime());
goods.setPostageId(item.getPostageId() != null ? item.getPostageId().intValue() : 0);
goods.setOuterId(item.getOuterId());
goods.setListTime(item.getListTime());
goods.setPrice(item.getPrice());
goods.setSoldQuantity(item.getSoldQuantity() == null ? 0 : item.getSoldQuantity().intValue());
goods.setFirstStartsTime(item.getFirstStartsTime());
goods.setSkus(pullSku(client, sessionKey, item.getNumIid()));
goodsList.add(goods);
}
return new ApiResult(rsp.getTotalResults().intValue(), goodsList);
}
private static List<TaoGoodsSku> pullSku(TaobaoClient client, String sessionKey, Long numIid) {
try {
List<TaoGoodsSku> skus = new ArrayList<>();
ItemSkusGetRequest req1 = new ItemSkusGetRequest();
req1.setFields("sku_id,num_iid,properties,properties_name,quantity,price,outer_id,created,modified,status,sku_spec_id,barcode");
req1.setNumIids(numIid + "");
ItemSkusGetResponse rsp1 = client.execute(req1, sessionKey);
if (rsp1.getSkus() != null) {
for (var s : rsp1.getSkus()) {
TaoGoodsSku sku = new TaoGoodsSku();
sku.setNumIid(s.getNumIid());
sku.setSkuId(s.getSkuId());
sku.setProperties(s.getProperties());
sku.setPropertiesName(s.getPropertiesName());
sku.setQuantity(s.getQuantity());
sku.setPrice(StringUtils.hasText(s.getPrice())?Double.parseDouble(s.getPrice()):0.0);
sku.setOuterId(s.getOuterId());
sku.setStatus(s.getStatus());
sku.setCreated(s.getCreated());
sku.setModified(s.getModified());
skus.add(sku);
}
return skus;
} else return null;
} catch (Exception e) {
return null;
}
}
}

View File

@ -1,149 +1,105 @@
//package com.qihang.tao.controller; package com.qihang.tao.controller;
//
//import com.qihang.tao.common.ApiResult; import com.qihang.common.common.EnumResultVo;
//import org.springframework.util.StringUtils; import com.qihang.common.enums.HttpStatus;
//import org.springframework.web.bind.annotation.RequestBody; import com.qihang.tao.api.ApiCommon;
//import org.springframework.web.bind.annotation.RequestMapping; import com.qihang.tao.api.ApiResult;
//import org.springframework.web.bind.annotation.RequestMethod; import com.qihang.tao.api.GoodsApiHelper;
//import org.springframework.web.bind.annotation.RestController; import com.qihang.tao.api.OrderApiHelper;
// import com.qihang.tao.common.TaoRequest;
//import java.util.Map; import com.qihang.tao.domain.TaoGoods;
// import com.qihang.tao.domain.TaoOrder;
//@RestController import com.qihang.tao.service.TaoGoodsService;
//public class GoodsApiController { import lombok.AllArgsConstructor;
///** import org.springframework.util.StringUtils;
// * @api {post} /api/v1/pull_goods 更新店铺商品列表 import org.springframework.web.bind.annotation.RequestBody;
// * @apiVersion 1.0.0 import org.springframework.web.bind.annotation.RequestMapping;
// * @apiName pullGoods import org.springframework.web.bind.annotation.RequestMethod;
// * @apiGroup taoGood import org.springframework.web.bind.annotation.RestController;
// * @apiParam {String} startTime 开始时间
// * @apiParam {String} endTime 结束时间 import java.util.List;
// * @apiParam {Number} shopId 店铺id(东方符号7) import java.util.Map;
// * @apiSuccessExample {json} Success-Response:
// * HTTP/1.1 200 OK{ @RequestMapping("/goods")
// "code": "0成功其他失败", @RestController
// "msg": "成功或失败信息" @AllArgsConstructor
// } public class GoodsApiController {
// */ private final ApiCommon apiCommon;
// @RequestMapping(value = "/pull_goods", method = RequestMethod.POST) private final TaoGoodsService goodsService;
// public ApiResult<Integer> getOrderList(@RequestBody DataRow reqData) throws Exception {
// String startDate = reqData.getString("startTime"); /**
// String endDate = reqData.getString("endTime"); * @api {post} /api/v1/pull_goods 更新店铺商品列表
// Integer shopId=reqData.getInt("shopId"); * @apiVersion 1.0.0
// var checkResult = this.check(shopId); * @apiName pullGoods
// if (checkResult.getCode() != EnumResultVo.SUCCESS.getIndex()) { * @apiGroup taoGood
// return new ApiResult<>(checkResult.getCode(), checkResult.getMsg()); * @apiParam {String} startTime 开始时间
// } * @apiParam {String} endTime 结束时间
// Integer pageIndex = 1; * @apiParam {Number} shopId 店铺id(东方符号7)
// Integer pageSize = 40; * @apiSuccessExample {json} Success-Response:
// Long endTime = System.currentTimeMillis() / 1000;//更新结束时间 * HTTP/1.1 200 OK{
// Long startTime = endTime-(60 * 60 * 24 * 7);//更新开始时间 "code": "0成功其他失败",
// if(!StringUtils.isEmpty(startDate))startTime = DateUtil.dateToStamp(startDate).longValue(); "msg": "成功或失败信息"
// }
// if (!StringUtils.isEmpty(endDate)) endTime = DateUtil.dateTimeToStamp(endDate + " 23:59:00").longValue(); */
// @RequestMapping(value = "/pull_goods", method = RequestMethod.POST)
// long kaishidaojiesu = endTime - startTime; public ApiResult<Integer> pullGoodsList(@RequestBody TaoRequest req) throws Exception {
// long forSize = (kaishidaojiesu % (60 * 60 * 24 * 7) == 0) ? kaishidaojiesu / (60 * 60 * 24 * 7) : kaishidaojiesu / (60 * 60 * 24 * 7) + 1;//计算需要循环的次数 if (req.getShopId() == null || req.getShopId() <= 0) {
// for (int i = 0; i < forSize; i++) { return new ApiResult(HttpStatus.PARAMS_ERROR, "参数错误没有店铺Id");
// Long startTime1 = startTime + i * 60 * 60 * 24 * 7; }
// Long endTime1 = startTime1 + 60 * 60 * 24 * 7; var checkResult = apiCommon.checkBefore(req.getShopId());
// Integer totalCount = pullGoods(checkResult.getData(),pageIndex,pageSize,startTime1,endTime1); if (checkResult.getCode() != HttpStatus.SUCCESS) {
// int totalPage = (totalCount % pageSize == 0) ? totalCount / pageSize : (totalCount / pageSize) + 1; return new ApiResult(checkResult.getCode(), checkResult.getMsg());
// while (pageIndex < totalPage) { }
// pageIndex++; String sessionKey = checkResult.getData().getAccessToken();
// pullGoods(checkResult.getData(),pageIndex,pageSize,startTime1,endTime1); String url = checkResult.getData().getApiRequestUrl();
// } String appKey = checkResult.getData().getAppKey();
// pageIndex=1; String appSecret = checkResult.getData().getAppSecret();
// }
// return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(), "SUCCESS"); Long pageIndex = 1L;
// } Long pageSize = 40L;
//
// public Integer pullGoods(DcSysThirdSettingEntity result, Integer pageNo, Integer pageSize, Long startTime, Long endTime) throws Exception{ ApiResult<TaoGoods> listApiResult = GoodsApiHelper.pullGoods(pageIndex, pageSize, url, appKey, appSecret, sessionKey);
// String sendUrl="http://gw.api.taobao.com/router/rest";
// Map<String, String> params = new HashMap<>(); int insertSuccess = 0;//新增成功的订单
// params.put("method","taobao.items.onsale.get"); int totalError = 0;
// params.put("app_key",result.getAppKey()); int hasExistOrder = 0;//已存在的订单数
// params.put("sign_method","md5");
// params.put("timestamp",String.valueOf(System.currentTimeMillis())); for (var goods:listApiResult.getList()) {
// params.put("session",result.getAccess_token()); int result = goodsService.saveAndUpdateGoods(req.getShopId(), goods);
// params.put("v","2.0"); if (result == EnumResultVo.DataExist.getIndex()) {
// params.put("fields","approve_status,num_iid,title,pic_url,num,list_time,price,delist_time,outer_id,sold_quantity,modified"); //已经存在
// params.put("nick",result.getName()); hasExistOrder++;
// params.put("page_no",String.valueOf(pageNo)); } else if (result == EnumResultVo.SUCCESS.getIndex()) {
// params.put("page_size",String.valueOf(pageSize)); insertSuccess++;
// params.put("start_modified",DateUtil.stampToDateTime(startTime)); }else {
// params.put("end_modified",DateUtil.stampToDateTime(endTime)); totalError++;
// params.put("sign",ExpressClient.buildSign(params,result.getAppSecret())); }
// HttpResponse<String> response = HttpUtil.doPost(sendUrl,HttpUtil.map2Url(params)); }
// var dd = XmlUtil.xmlToJson(response.body()); //计算总页数
// if(dd.getInteger("total_results").intValue()>0){ int totalPage = (listApiResult.getTotalRecords() % pageSize == 0) ? listApiResult.getTotalRecords() / pageSize.intValue() : (listApiResult.getTotalRecords() / pageSize.intValue()) + 1;
// var jsonArray= dd.getJSONObject("items").getJSONArray("item"); pageIndex++;
// taoGoodService.addTaoGoods(jsonArray);
// } while (pageIndex <= totalPage) {
// return dd.getInteger("total_results");
// } ApiResult<TaoGoods> result1 = GoodsApiHelper.pullGoods(pageIndex, pageIndex, url, appKey, appSecret, sessionKey);
// //循环插入订单数据到数据库
// /** for (var goods:listApiResult.getList()) {
// * @api {post} /pull_goods_comment 更新商品评价 int result = goodsService.saveAndUpdateGoods(req.getShopId(), goods);
// * @apiVersion 1.0.0 if (result == EnumResultVo.DataExist.getIndex()) {
// * @apiName pullGoodsComment //已经存在
// * @apiGroup taoGood hasExistOrder++;
// * @apiSuccessExample {json} Success-Response: } else if (result == EnumResultVo.SUCCESS.getIndex()) {
// * HTTP/1.1 200 OK insertSuccess++;
// * { }else {
// * "code": 0:成功, totalError++;
// * "msg": "信息" }
// * } }
// */ pageIndex++;
///* @RequestMapping(value = "/pull_goods_comment", method = RequestMethod.POST) }
// public ApiResult<Integer> pullGoodsComments(HttpServletRequest request){
// Integer shopId=7; String msg = "成功,总共找到:" + listApiResult.getTotalRecords() + "条订单,新增:" + insertSuccess + "条,添加错误:" + totalError + "条,更新:" + hasExistOrder + "";
// Integer pageIndex = 1; return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(), msg);
// Integer pageSize = 100;
// Date startDate=StringUtils.isEmpty(taoGoodService.getGoodCommentDate()) ? DateUtil.beforeDayDate(180) : taoGoodService.getGoodCommentDate(); }
// System.out.println(startDate);
// var result = pullTaoGoodsComment(shopId,pageIndex,pageSize,startDate); }
// if(result.getCode()==0){
// while (result.getData().intValue()>pageSize.intValue()) {
// pageIndex++;
// System.out.println(pageIndex);
// pullTaoGoodsComment(shopId,pageIndex,pageSize,startDate);
// }
// return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(),"成功");
// }else return new ApiResult<>(EnumResultVo.Fail.getIndex(),"失败");
//
// }*/
///* public ApiResult<Integer> pullTaoGoodsComment(Integer shopId,Integer pageIndex,Integer pageSize,Date startDate){
// var result = this.check(shopId).getData();
// TaobaoClient client = new DefaultTaobaoClient(result.getRequest_url(), result.getAppKey(), result.getAppSecret());
// TraderatesGetRequest req = new TraderatesGetRequest();
// req.setFields("tid,oid,role,nick,result,totalResults,hasNext,created,rated_nick,item_title,item_price,content,reply,num_iid");
// req.setRateType("get");
// req.setRole("buyer");
// req.setStartDate(startDate);
// req.setPageNo(pageIndex.longValue());
// req.setPageSize(pageSize.longValue());
// req.setUseHasNext(true);
// try {
// TraderatesGetResponse rsp = client.execute(req, result.getAccess_token());
// if(rsp.getTradeRates().size()>0){
// List<DcTaoGoodsCommentEntity> list =new ArrayList<>();
// rsp.getTradeRates().forEach(c->{
// DcTaoGoodsCommentEntity comment=new DcTaoGoodsCommentEntity();
// comment.setNumIid(c.getNumIid());
// comment.setBuyer(c.getNick());
// comment.setCreated(c.getCreated());
// comment.setTid(c.getTid());
// comment.setOid(c.getOid());
// comment.setComment(c.getContent());
// comment.setResult(c.getResult());
// list.add(comment);
// });
// taoGoodService.addGoodComment(list);
// return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(),"成功",rsp.getTradeRates().size());
// }else return new ApiResult<>(EnumResultVo.SUCCESS.getIndex(),"失败");
// }catch (Exception e){
// return new ApiResult<>(EnumResultVo.Fail.getIndex(),"失败",0);
// }
// }*/
//}

View File

@ -1,7 +1,10 @@
package com.qihang.tao.domain; package com.qihang.tao.domain;
import com.baomidou.mybatisplus.annotation.TableField;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* *
@ -168,8 +171,19 @@ public class TaoGoods implements Serializable {
*/ */
private Date createTime; private Date createTime;
@TableField(exist = false)
private List<TaoGoodsSku> skus;
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
public List<TaoGoodsSku> getSkus() {
return skus;
}
public void setSkus(List<TaoGoodsSku> skus) {
this.skus = skus;
}
/** /**
* *
*/ */

View File

@ -66,12 +66,12 @@ public class TaoGoodsSku implements Serializable {
/** /**
* sku创建日期 时间格式yyyy-MM-dd HH:mm:ss * sku创建日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
private Date created; private String created;
/** /**
* sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss * sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
private Date modified; private String modified;
/** /**
* sku状态 normal * sku状态 normal
@ -262,28 +262,28 @@ public class TaoGoodsSku implements Serializable {
/** /**
* sku创建日期 时间格式yyyy-MM-dd HH:mm:ss * sku创建日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
public Date getCreated() { public String getCreated() {
return created; return created;
} }
/** /**
* sku创建日期 时间格式yyyy-MM-dd HH:mm:ss * sku创建日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
public void setCreated(Date created) { public void setCreated(String created) {
this.created = created; this.created = created;
} }
/** /**
* sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss * sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
public Date getModified() { public String getModified() {
return modified; return modified;
} }
/** /**
* sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss * sku最后修改日期 时间格式yyyy-MM-dd HH:mm:ss
*/ */
public void setModified(Date modified) { public void setModified(String modified) {
this.modified = modified; this.modified = modified;
} }

View File

@ -13,4 +13,6 @@ import com.qihang.tao.domain.bo.TaoGoodsBo;
*/ */
public interface TaoGoodsService extends IService<TaoGoods> { public interface TaoGoodsService extends IService<TaoGoods> {
PageResult<TaoGoods> queryPageList(TaoGoodsBo bo, PageQuery pageQuery); PageResult<TaoGoods> queryPageList(TaoGoodsBo bo, PageQuery pageQuery);
int saveAndUpdateGoods(Integer shopId,TaoGoods goods);
} }

View File

@ -3,14 +3,21 @@ package com.qihang.tao.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qihang.common.common.EnumResultVo;
import com.qihang.tao.common.PageQuery; import com.qihang.tao.common.PageQuery;
import com.qihang.tao.common.PageResult; import com.qihang.tao.common.PageResult;
import com.qihang.tao.domain.TaoGoods; import com.qihang.tao.domain.TaoGoods;
import com.qihang.tao.domain.TaoGoodsSku;
import com.qihang.tao.domain.bo.TaoGoodsBo; import com.qihang.tao.domain.bo.TaoGoodsBo;
import com.qihang.tao.mapper.TaoGoodsSkuMapper;
import com.qihang.tao.service.TaoGoodsService; import com.qihang.tao.service.TaoGoodsService;
import com.qihang.tao.mapper.TaoGoodsMapper; import com.qihang.tao.mapper.TaoGoodsMapper;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
/** /**
* @author TW * @author TW
@ -23,6 +30,7 @@ public class TaoGoodsServiceImpl extends ServiceImpl<TaoGoodsMapper, TaoGoods>
implements TaoGoodsService { implements TaoGoodsService {
private final TaoGoodsMapper mapper; private final TaoGoodsMapper mapper;
private final TaoGoodsSkuMapper skuMapper;
@Override @Override
public PageResult<TaoGoods> queryPageList(TaoGoodsBo bo, PageQuery pageQuery) { public PageResult<TaoGoods> queryPageList(TaoGoodsBo bo, PageQuery pageQuery) {
@ -31,6 +39,43 @@ public class TaoGoodsServiceImpl extends ServiceImpl<TaoGoodsMapper, TaoGoods>
return PageResult.build(taoGoodsPage); return PageResult.build(taoGoodsPage);
} }
@Transactional
@Override
public int saveAndUpdateGoods(Integer shopId, TaoGoods goods) {
List<TaoGoods> goodsList = mapper.selectList(new LambdaQueryWrapper<TaoGoods>().eq(TaoGoods::getNumIid, goods.getNumIid()));
if(goodsList!=null && goodsList.size()>0){
// 存在更新
goods.setShopId(shopId);
goods.setId(goodsList.get(0).getId());
mapper.updateById(goods);
// 删除sku
skuMapper.delete(new LambdaQueryWrapper<TaoGoodsSku>().eq(TaoGoodsSku::getTaoGoodsId,goods.getId()));
// 重新插入sku
if(goods.getSkus()!=null) {
for (var sku : goods.getSkus()) {
sku.setTaoGoodsId(goods.getId());
skuMapper.insert(sku);
}
}
return EnumResultVo.DataExist.getIndex();
}else {
// 不存在新增
goods.setShopId(shopId);
goods.setCreateTime(new Date());
mapper.insert(goods);
// 插入sku
if(goods.getSkus()!=null) {
for (var sku : goods.getSkus()) {
sku.setTaoGoodsId(goods.getId());
skuMapper.insert(sku);
}
}
return 0;
}
}
} }