You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
741 lines
37 KiB
741 lines
37 KiB
package com.hfkj.jd.Impl;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.hfkj.common.utils.RedisUtil;
|
|
import com.hfkj.common.utils.ResponseMsgUtil;
|
|
import com.hfkj.dao.JdSkuMapper;
|
|
import com.hfkj.dao.JdSkuMapperExt;
|
|
import com.hfkj.entity.*;
|
|
import com.hfkj.jd.JdPostService;
|
|
import com.hfkj.jd.JdService;
|
|
import com.hfkj.service.BsMerService;
|
|
import com.hfkj.service.BsProductConfigService;
|
|
import com.hfkj.service.goods.*;
|
|
import com.hfkj.sysenum.order.OrderChildProductTypeEnum;
|
|
import com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryDeliveryInfo.DeliveryInfoQueryOpenResp;
|
|
import com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryDeliveryInfo.LogisticInfoOrderOpenResp;
|
|
import com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryDeliveryInfo.TrackInfoOrderOpenResp;
|
|
import com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryOrderDetail.QueryOrderOpenResp;
|
|
import com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryOrderDetail.StateOrderOpenResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSellPrice.GetSellPriceGoodsResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSellPrice.OpenRpcResult;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSkuDetailInfo.GetSkuPoolInfoGoodsResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSkuImageList.GetSkuImageGoodsResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSkuImageList.SkuImageItemGoodsResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuPoolGoodsProvider.response.getSkuPoolInfo.GetSkuPoolInfoItemGoodsResp;
|
|
import com.jd.open.api.sdk.domain.vopsp.SkuPoolGoodsProvider.response.querySkuByPage.OpenPagingResult;
|
|
import com.jd.open.api.sdk.domain.vopxx.MsgRecordProvider.response.queryTransByVopNormal.VopBizTransMessage;
|
|
import com.jd.open.api.sdk.response.vopdd.VopOrderQueryDeliveryInfoResponse;
|
|
import com.jd.open.api.sdk.response.vopdd.VopOrderQueryOrderDetailResponse;
|
|
import com.jd.open.api.sdk.response.vopsh.VopAfsCreateAfsApplyResponse;
|
|
import com.jd.open.api.sdk.response.vopsp.VopGoodsGetSkuDetailInfoResponse;
|
|
import com.jd.open.api.sdk.response.vopsp.VopGoodsGetSkuImageListResponse;
|
|
import com.jd.open.api.sdk.response.vopsp.VopGoodsGetSkuPoolInfoResponse;
|
|
import com.jd.open.api.sdk.response.vopsp.VopGoodsGetSkuStateListResponse;
|
|
import com.jd.open.api.sdk.response.vopxx.VopMessageQueryTransByVopNormalResponse;
|
|
import org.apache.commons.collections4.ListUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import javax.annotation.Resource;
|
|
import java.math.BigDecimal;
|
|
import java.math.RoundingMode;
|
|
import java.util.*;
|
|
import java.util.concurrent.*;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service("jdService")
|
|
public class JdServiceImpl implements JdService {
|
|
|
|
@Autowired
|
|
private RedisUtil redisUtil;
|
|
|
|
@Resource
|
|
private BsMerService bsMerService;
|
|
|
|
@Resource
|
|
private GoodsTypeService goodsTypeService;
|
|
|
|
@Resource
|
|
private GoodsBrandService goodsBrandService;
|
|
|
|
@Resource
|
|
private BsProductConfigService productConfigService;
|
|
|
|
@Resource
|
|
private GoodsMsgService goodsMsgService;
|
|
|
|
@Resource
|
|
private GoodsSpecsService goodsSpecsService;
|
|
|
|
@Resource
|
|
private BsOrderGoodsService bsOrderGoodsService;
|
|
|
|
@Resource
|
|
private JdSkuMapper jdSkuMapper;
|
|
|
|
private final List<Long> skuListIds = new ArrayList<>();
|
|
|
|
|
|
static int cpuCoreCnt = Runtime.getRuntime().availableProcessors(); //获取服务器CPU核心数
|
|
static int corePoolSize = cpuCoreCnt; // 核心线程数
|
|
static int maximumPoolSize = cpuCoreCnt; // 最大线程数
|
|
static int keepAliveTime = 30; // 非核心线程的空闲存活时长(分钟)
|
|
static int queueCapacity = 9999; // 队列最大长度
|
|
public static BlockingQueue<Runnable> queue = new LinkedBlockingQueue<Runnable>(queueCapacity);
|
|
static ThreadPoolExecutor threadPool;
|
|
static {
|
|
threadPool = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, TimeUnit.MINUTES, queue);
|
|
}
|
|
|
|
@Override
|
|
public String getToken() throws Exception {
|
|
Object token = redisUtil.get("jd_access_token");
|
|
if (token == null) {
|
|
// 请求回调 会在回调存入参数
|
|
JdPostService.getAccessToken();
|
|
}
|
|
return token.toString();
|
|
}
|
|
|
|
/**
|
|
* 处理数据
|
|
* @param handleList
|
|
*/
|
|
public void task(List<Long> handleList , String token , BsProductConfig productConfig , BsMer bsMer) {
|
|
//处理数据
|
|
handleList.forEach(item->{
|
|
try {
|
|
|
|
for (Long aLong : handleList) {
|
|
|
|
// 根据skuId 查询商品详情
|
|
VopGoodsGetSkuDetailInfoResponse skuDetail = JdPostService.getSkuDetailInfo(token, aLong);
|
|
GetSkuPoolInfoGoodsResp detail = skuDetail.getOpenRpcResult().getResult();
|
|
if (detail != null) {
|
|
// 根据skuId 查询商品售价
|
|
OpenRpcResult priceResponse = JdPostService.getSellPrice(token, String.valueOf(aLong)).getOpenRpcResult();
|
|
if (priceResponse.getSuccess()) {
|
|
GetSellPriceGoodsResp price = priceResponse.getResult().get(0);
|
|
// 根据skuId 查询商品图片
|
|
|
|
com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSkuImageList.OpenRpcResult imageListResponse = JdPostService.getSkuImageList(token, String.valueOf(aLong)).getOpenRpcResult();
|
|
if (imageListResponse.getSuccess()) {
|
|
GetSkuImageGoodsResp img = imageListResponse.getResult().get(0);
|
|
// 查询分类
|
|
String[] categoryS = detail.getCategory().split(";");
|
|
|
|
// 查询一级分类
|
|
String category1 = JdPostService.getCategoryInfoList(token, categoryS[0]).getOpenRpcResult().getResult().get(0).getCategoryName();
|
|
// 查询二级分类
|
|
String category2 = JdPostService.getCategoryInfoList(token, categoryS[1]).getOpenRpcResult().getResult().get(0).getCategoryName();
|
|
|
|
GoodsType goodsType1 = goodsTypeService.queryDetail(category1);
|
|
GoodsType goodsType2 = goodsTypeService.queryDetail(category2);
|
|
|
|
// 如果goodsType1为null,则创建一个新的GoodsType对象
|
|
if (goodsType1 == null) {
|
|
goodsType1 = new GoodsType();
|
|
// 设置title为category1
|
|
goodsType1.setTitle(category1);
|
|
// 设置status为1
|
|
goodsType1.setStatus(1);
|
|
goodsType1.setBusinessType(1);
|
|
// 设置sort为8
|
|
goodsType1.setSort(8);
|
|
// 设置createTime为当前时间
|
|
goodsType1.setCreateTime(new Date());
|
|
// 设置updateTime为当前时间
|
|
goodsType1.setUpdateTime(new Date());
|
|
// 调用goodsTypeService的create方法,将goodsType1对象保存到数据库中
|
|
goodsTypeService.create(goodsType1);
|
|
} else {
|
|
// 设置updateTime为当前时间
|
|
goodsType1.setUpdateTime(new Date());
|
|
// 调用goodsTypeService的update方法,将goodsType1对象更新到数据库中
|
|
goodsTypeService.update(goodsType1);
|
|
}
|
|
if (goodsType2 == null) {
|
|
goodsType2 = new GoodsType();
|
|
// 设置title为category2
|
|
goodsType2.setTitle(category2);
|
|
goodsType2.setParentId(goodsType1.getId());
|
|
// 设置status为1
|
|
goodsType2.setStatus(1);
|
|
// 设置businessType为1
|
|
goodsType2.setBusinessType(1);
|
|
// 设置sort为8
|
|
goodsType2.setSort(1);
|
|
// 设置createTime为当前时间
|
|
goodsType2.setCreateTime(new Date());
|
|
// 设置updateTime为当前时间
|
|
goodsType2.setUpdateTime(new Date());
|
|
// 调用goodsTypeService的create方法,将goodsType2对象保存到数据库中
|
|
goodsTypeService.create(goodsType2);
|
|
} else {
|
|
goodsType2.setParentId(goodsType1.getId());
|
|
goodsType2.setUpdateTime(new Date());
|
|
goodsTypeService.update(goodsType2);
|
|
}
|
|
// 从brands中筛选出title等于detail.getBrandName()的元素,并返回第一个元素,如果没有找到则返回null
|
|
GoodsBrand goodsBrand = goodsBrandService.queryDetail(detail.getBrandName());
|
|
// 如果goodsBrand为null,则创建一个新的GoodsBrand对象
|
|
if (goodsBrand == null) {
|
|
goodsBrand = new GoodsBrand();
|
|
// 设置title为detail.getBrandName()
|
|
goodsBrand.setTitle(detail.getBrandName());
|
|
// 设置status为1
|
|
goodsBrand.setStatus(1);
|
|
// 设置createTime为当前时间
|
|
goodsBrand.setCreateTime(new Date());
|
|
// 设置updateTime为当前时间
|
|
goodsBrand.setUpdateTime(new Date());
|
|
// 调用goodsBrandService的create方法,将goodsBrand对象保存到数据库中
|
|
goodsBrandService.create(goodsBrand);
|
|
} else {
|
|
goodsBrand.setUpdateTime(new Date());
|
|
goodsBrandService.update(goodsBrand);
|
|
}
|
|
|
|
// 创建一个GoodsMsg对象
|
|
GoodsMsg goodsMsg = goodsMsgService.queryDetail(aLong.toString());
|
|
|
|
if (goodsMsg == null) {
|
|
goodsMsg = new GoodsMsg();
|
|
}
|
|
|
|
// 设置商家ID为bsMer的ID
|
|
goodsMsg.setMerId(bsMer.getId());
|
|
// 设置商家名称为bsMer的名称
|
|
goodsMsg.setMerName(bsMer.getMerName());
|
|
// 设置商品名称为detail.getGoodsName()
|
|
goodsMsg.setTitle(detail.getSkuName());
|
|
// 设置商品类型为1
|
|
goodsMsg.setType(1);
|
|
// 设置商品状态为1
|
|
goodsMsg.setStatus(1);
|
|
// 设置商品子类型为1
|
|
goodsMsg.setChildType(1);
|
|
// 设置商品品牌ID
|
|
goodsMsg.setGoodsBrand(goodsBrand.getId());
|
|
// 设置商品品牌名称
|
|
goodsMsg.setGoodsBrandName(goodsBrand.getTitle());
|
|
// 设置商品类型ID
|
|
goodsMsg.setGoodsType(goodsType2.getId());
|
|
// 设置商品类型名称
|
|
goodsMsg.setGoodsTypeName(goodsType2.getTitle());
|
|
// 设置商品类型父级ID
|
|
goodsMsg.setGoodsTypeParent(goodsType1.getId());
|
|
// 设置商品类型父级名称
|
|
goodsMsg.setGoodsTypeParentName(goodsType1.getTitle());
|
|
goodsMsg.setThirdId(aLong.toString());
|
|
StringBuilder imgS = new StringBuilder();
|
|
// 遍历商品图片列表
|
|
for (SkuImageItemGoodsResp skuImage : img.getSkuImageList()) {
|
|
// 如果图片是主图
|
|
if (skuImage.getIsPrimary() == 1) {
|
|
// 设置主图
|
|
goodsMsg.setListImg("https://img13.360buyimg.com/n1/" + skuImage.getShortPath());
|
|
}
|
|
// 如果图片不是主图
|
|
if (skuImage.getIsPrimary() == 0) {
|
|
|
|
imgS.append("https://img13.360buyimg.com/n1/").append(skuImage.getShortPath()).append(",");
|
|
|
|
}
|
|
}
|
|
|
|
if (imgS.length() > 0) {
|
|
imgS.deleteCharAt(imgS.length() - 1);
|
|
}
|
|
|
|
// 设置轮播图
|
|
goodsMsg.setBannerImg(String.valueOf(imgS));
|
|
// 设置详情图
|
|
goodsMsg.setDetailImg(String.valueOf(imgS));
|
|
|
|
if (goodsMsg.getId() != null) {
|
|
// 设置更新时间为当前时间
|
|
goodsMsg.setUpdateTime(new Date());
|
|
// 更新商品信息
|
|
goodsMsgService.update(goodsMsg);
|
|
} else {
|
|
// 设置销售数量为0
|
|
goodsMsg.setSaleNum(0);
|
|
goodsMsg.setCreateTime(new Date());
|
|
// 创建商品信息
|
|
goodsMsgService.create(goodsMsg);
|
|
|
|
}
|
|
|
|
// 创建商品规格
|
|
GoodsSpecs goodsSpecs = goodsSpecsService.queryDetailByThirdId(aLong.toString());
|
|
if (goodsSpecs == null) {
|
|
goodsSpecs = new GoodsSpecs();
|
|
}
|
|
goodsSpecs.setGoodsId(goodsMsg.getId());
|
|
// 设置商品ID
|
|
goodsSpecs.setGoodsId(goodsMsg.getId());
|
|
// 设置商品名称
|
|
goodsSpecs.setName(detail.getSpuName());
|
|
// 设置更新时间
|
|
goodsSpecs.setUpdateTime(new Date());
|
|
// 设置采购限制
|
|
goodsSpecs.setPurLimit(99999);
|
|
// 设置状态
|
|
goodsSpecs.setStatus(1);
|
|
goodsSpecs.setThirdId(aLong.toString());
|
|
// 设置库存
|
|
goodsSpecs.setStock(10000);
|
|
BigDecimal profitPrice = price.getSalePrice().multiply(productConfig.getDiscount().divide(new BigDecimal(100) , 2, RoundingMode.HALF_UP));
|
|
// 设置销售价格
|
|
goodsSpecs.setSalePrice(profitPrice.add(price.getSalePrice()));
|
|
// 设置原价
|
|
goodsSpecs.setOriginalPrice(price.getMarketPrice());
|
|
goodsSpecs.setThirdPrice(price.getJdPrice());
|
|
// 设置展示图片
|
|
goodsSpecs.setShowImg(goodsMsg.getListImg());
|
|
|
|
|
|
if (goodsSpecs.getId() != null) {
|
|
// 更新商品规格
|
|
goodsSpecsService.update(goodsSpecs);
|
|
} else {
|
|
// 设置创建时间
|
|
goodsSpecs.setCreateTime(new Date());
|
|
// 创建商品规格
|
|
goodsSpecsService.create(goodsSpecs);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
throw new RuntimeException(e);
|
|
}
|
|
});
|
|
}
|
|
|
|
|
|
@Override
|
|
public void getGoodsJd() throws Exception {
|
|
String token = getToken();
|
|
// 获取京东商品池
|
|
VopGoodsGetSkuPoolInfoResponse sku = JdPostService.getSkuPoolInfo(token);
|
|
// 获取京东商品池编码
|
|
List<GetSkuPoolInfoItemGoodsResp> skuPoolList = sku.getOpenRpcResult().getResult().getSkuPoolList();
|
|
|
|
skuListIds.clear();
|
|
|
|
BsProductConfig productConfig = productConfigService.queryDetail(OrderChildProductTypeEnum.type6.getCode());
|
|
BsMer bsMer = bsMerService.getDetail("166241009282");
|
|
|
|
// 循环商品池变化获取sku
|
|
for (GetSkuPoolInfoItemGoodsResp skuPoolInfoItemGoodsResp : skuPoolList) {
|
|
getSkuList(token , skuPoolInfoItemGoodsResp.getBizPoolId() , 0L);
|
|
}
|
|
|
|
List<Long> sku1 = jdSkuMapper.getJdList();
|
|
|
|
List<Long> skuList = skuListIds.stream()
|
|
.filter(e -> !sku1.contains(e))
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
System.out.println("=========================当前cpu核数:{}" + cpuCoreCnt);
|
|
//通过对核心数取余来计算每个线程需要处理的数据量大小
|
|
int size = skuList.size() % cpuCoreCnt > 0 ? skuList.size() / cpuCoreCnt +1 : skuList.size() / cpuCoreCnt;
|
|
// 用于存储所有任务的Future
|
|
List<Future> futureList = new ArrayList<>();
|
|
|
|
// 记录开始时间
|
|
long startTime = System.currentTimeMillis();
|
|
|
|
for (int i = 0; i < cpuCoreCnt; i++) {
|
|
//获取每个线程要处理的数据集
|
|
List<Long> handleList = skuList.subList(i * size, Math.min(skuList.size(), i * size + size));
|
|
//创建异步任务添加到线程池,这里使用jdk8的CompletableFuture
|
|
CompletableFuture<Void> completableFuture = CompletableFuture.runAsync(() -> {
|
|
//数据集处理任务
|
|
task(handleList , token , productConfig , bsMer);
|
|
}, threadPool);
|
|
//将CompletableFuture添加到futureList用于计算耗时
|
|
futureList.add(completableFuture);
|
|
}
|
|
|
|
// 非阻塞等待所有任务完成
|
|
CompletableFuture.allOf(futureList.toArray(new CompletableFuture[0])).thenRunAsync(() -> {
|
|
long endTime = System.currentTimeMillis();
|
|
long totalTime = endTime - startTime;
|
|
System.out.println("处理完成,耗时: " + totalTime + "毫秒");
|
|
//关闭线程池
|
|
threadPool.shutdown();
|
|
}, threadPool);
|
|
System.out.println(skuList.size());
|
|
}
|
|
|
|
@Override
|
|
public List<Long> skuList() {
|
|
return jdSkuMapper.getJdList();
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* @MethodName getSkuList
|
|
* @Description: 获取全量商品池
|
|
* @param token
|
|
* @param bizPoolId
|
|
* @param offset
|
|
* @return: java.util.List<java.lang.Long>
|
|
* @Author: Sum1Dream
|
|
* @Date: 2024/11/27 上午10:41
|
|
*/
|
|
private List<Long> getSkuList(String token , String bizPoolId , Long offset) throws Exception {
|
|
OpenPagingResult result = JdPostService.querySkuByPage(token, bizPoolId, offset).getOpenRpcResult().getResult();
|
|
if (result != null) {
|
|
skuListIds.addAll(result.getSkus());
|
|
if (result.getRemainPage() > 0) {
|
|
getSkuList(token, bizPoolId, result.getOffset());
|
|
}
|
|
}
|
|
return skuListIds;
|
|
}
|
|
|
|
@Override
|
|
public Boolean checkSkuSale(GoodsMsg goodsMsg) throws Exception {
|
|
|
|
// 查询商品是否下架
|
|
VopGoodsGetSkuStateListResponse skuStateListResponse = JdPostService.getSkuState(getToken(), goodsMsg.getThirdId());
|
|
|
|
if (skuStateListResponse.getOpenRpcResult().getResult().get(0).getSkuState() == 0) {
|
|
deleteMsg(goodsMsg.getThirdId());
|
|
return true;
|
|
}
|
|
|
|
updatePrice(goodsMsg);
|
|
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public Boolean checkGoods(BsOrder bsOrder) throws Exception {
|
|
|
|
BsOrderGoods orderGoods = bsOrderGoodsService.findGoodsOrder(bsOrder.getOrderNo());
|
|
if (orderGoods != null) {
|
|
GoodsMsg goodsMsg = goodsMsgService.queryDetail(orderGoods.getGoodsId());
|
|
|
|
if (orderGoods.getThirdOrderNo() == null) {
|
|
return false;
|
|
}
|
|
// 查询上游订单
|
|
VopOrderQueryOrderDetailResponse orderDetailResponse = JdPostService.queryOrderDetail(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo());
|
|
|
|
QueryOrderOpenResp resp = orderDetailResponse.getOpenRpcResult().getResult().get(0);
|
|
|
|
if (resp.getSkuInfoList().get(0).getSkuId() != Long.parseLong(goodsMsg.getThirdId())) {
|
|
JdPostService.cancelOrder(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo() , "skuId编码错误");
|
|
return true;
|
|
}
|
|
if (!goodsMsg.getTitle().equals(resp.getSkuInfoList().get(0).getSkuName())) {
|
|
JdPostService.cancelOrder(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo() , "商品错误!");
|
|
return true;
|
|
}
|
|
|
|
if (resp.getOrderPrice().getOrderTotalPrice().compareTo(bsOrder.getTotalPrice()) > 0) {
|
|
JdPostService.cancelOrder(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo() , "商品价格错误");
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public void cancelOrder(String childNo){
|
|
try {
|
|
BsOrderGoods orderGoods = bsOrderGoodsService.findGoodsOrderByChild(childNo);
|
|
if (orderGoods.getThirdOrderNo() != null) {
|
|
JdPostService.cancelOrder(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo() , "取消订单!");
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void deleteMsg() throws Exception {
|
|
|
|
String token = getToken();
|
|
|
|
VopMessageQueryTransByVopNormalResponse msgList = JdPostService.queryTransByVopNormal(token);
|
|
|
|
List<VopBizTransMessage> messages = msgList.getOpenRpcResult().getResult();
|
|
|
|
StringBuilder stringBuffer = new StringBuilder();
|
|
if (messages != null) {
|
|
for (VopBizTransMessage message : messages) {
|
|
|
|
JSONObject jsonObj = JSONObject.parseObject(message.getContent());
|
|
|
|
//商品上下架变更消息
|
|
if (message.getType() == 4) {
|
|
// state:1代表在主站(jd.com)上架; state:0代表下架
|
|
if (jsonObj.getInteger("state") == 0) {
|
|
deleteMsg(jsonObj.getString("skuId"));
|
|
}
|
|
}
|
|
|
|
// 商品池内商品添加、删除消息
|
|
if (message.getType() == 6) {
|
|
if (jsonObj.getInteger("state") == 2) {
|
|
deleteMsg(jsonObj.getString("skuId"));
|
|
}
|
|
}
|
|
//商品信息变更消息
|
|
if (message.getType() == 16) {
|
|
updateGoodsMsg(token , jsonObj.getLong("skuId"));
|
|
}
|
|
|
|
|
|
if (stringBuffer.length() == 0) {
|
|
stringBuffer.append(message.getId());
|
|
} else {
|
|
stringBuffer.append(",").append(message.getId());
|
|
}
|
|
}
|
|
JdPostService.deleteClientMsgByIdList(token , stringBuffer.toString());
|
|
if (!messages.isEmpty()){
|
|
deleteMsg();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public void confirmOrder(BsOrderGoods orderGoods) throws Exception {
|
|
JdPostService.confirmOrder(getToken() , Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo() , "确认订单");
|
|
}
|
|
|
|
// 更新商品价格
|
|
private void updatePrice(GoodsMsg goodsMsg) throws Exception {
|
|
BsProductConfig productConfig = productConfigService.queryDetail(OrderChildProductTypeEnum.type6.getCode());
|
|
// 查询规格
|
|
GoodsSpecs specs = goodsSpecsService.queryDetailByThirdId(goodsMsg.getThirdId());
|
|
|
|
// 根据skuId 查询商品详情
|
|
// 根据skuId 查询商品售价
|
|
OpenRpcResult priceResponse = JdPostService.getSellPrice(getToken(), String.valueOf(goodsMsg.getThirdId())).getOpenRpcResult();
|
|
GetSellPriceGoodsResp price = priceResponse.getResult().get(0);
|
|
// 设置涨价
|
|
BigDecimal profitPrice = price.getSalePrice().multiply(productConfig.getDiscount().divide(new BigDecimal(100) , 2, RoundingMode.HALF_UP));
|
|
// 设置销售价格
|
|
specs.setSalePrice(profitPrice.add(price.getSalePrice()));
|
|
// 设置原价
|
|
specs.setOriginalPrice(price.getMarketPrice());
|
|
specs.setThirdPrice(price.getJdPrice());
|
|
specs.setExt3(price.getSalePrice().toString());
|
|
// 设置展示图片
|
|
goodsSpecsService.update(specs);
|
|
}
|
|
|
|
@Override
|
|
public VopOrderQueryDeliveryInfoResponse queryDeliveryInfo(BsOrderGoods orderGoods) throws Exception{
|
|
return JdPostService.queryDeliveryInfo(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo());
|
|
}
|
|
|
|
// 更新商品信息
|
|
private void updateGoodsMsg(String token , Long aLong) throws Exception {
|
|
// 根据skuId 查询商品详情
|
|
VopGoodsGetSkuDetailInfoResponse skuDetail = JdPostService.getSkuDetailInfo(token, aLong);
|
|
GetSkuPoolInfoGoodsResp detail = skuDetail.getOpenRpcResult().getResult();
|
|
// 根据skuId 查询商品图片
|
|
com.jd.open.api.sdk.domain.vopsp.SkuInfoGoodsProvider.response.getSkuImageList.OpenRpcResult imageListResponse = JdPostService.getSkuImageList(token, String.valueOf(aLong)).getOpenRpcResult();
|
|
|
|
// 创建一个GoodsMsg对象
|
|
GoodsMsg goodsMsg = goodsMsgService.queryDetail(aLong.toString());
|
|
GetSkuImageGoodsResp img = imageListResponse.getResult().get(0);
|
|
StringBuilder imgS = new StringBuilder();
|
|
// 遍历商品图片列表
|
|
for (SkuImageItemGoodsResp skuImage : img.getSkuImageList()) {
|
|
// 如果图片是主图
|
|
if (skuImage.getIsPrimary() == 1) {
|
|
// 设置主图
|
|
goodsMsg.setListImg("https://img13.360buyimg.com/n1/" + skuImage.getShortPath());
|
|
}
|
|
// 如果图片不是主图
|
|
if (skuImage.getIsPrimary() == 0) {
|
|
imgS.append("https://img13.360buyimg.com/n1/").append(skuImage.getShortPath()).append(",");
|
|
}
|
|
}
|
|
|
|
if (imgS.length() > 0) {
|
|
imgS.deleteCharAt(imgS.length() - 1);
|
|
}
|
|
goodsMsg.setTitle(detail.getSkuName());
|
|
// 设置轮播图
|
|
goodsMsg.setBannerImg(String.valueOf(imgS));
|
|
// 设置详情图
|
|
goodsMsg.setDetailImg(String.valueOf(imgS));
|
|
|
|
// 更新商品信息
|
|
goodsMsgService.update(goodsMsg);
|
|
|
|
}
|
|
|
|
|
|
// 下架商品
|
|
private void deleteMsg(String aLong) {
|
|
GoodsMsg goodsMsg = goodsMsgService.queryDetail(aLong);
|
|
|
|
if (goodsMsg != null) {
|
|
goodsMsg.setStatus(0);
|
|
goodsMsg.setUpdateTime(new Date());
|
|
goodsMsgService.update(goodsMsg);
|
|
|
|
GoodsSpecs specs = goodsSpecsService.queryDetailByThirdId(goodsMsg.getThirdId());
|
|
|
|
if (specs != null) {
|
|
specs.setStatus(0);
|
|
specs.setUpdateTime(new Date());
|
|
goodsSpecsService.update(specs);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public GoodsLogistics updateDeliveryInfo(BsOrderGoods orderGoods) throws Exception {
|
|
// 查询京东物流
|
|
VopOrderQueryDeliveryInfoResponse deliveryInfoResponse = queryDeliveryInfo(orderGoods);
|
|
com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryDeliveryInfo.OpenRpcResult result = deliveryInfoResponse.getOpenRpcResult();
|
|
|
|
if (result.getSuccess()) {
|
|
DeliveryInfoQueryOpenResp deliveryInfo = result.getResult();
|
|
|
|
// 判断物流信息是否与订单相同
|
|
if (Objects.equals(deliveryInfo.getThirdOrderId(), orderGoods.getChildOrderNo())) {
|
|
// 查询物流信息是否存在
|
|
if (!deliveryInfo.getTrackInfoList().isEmpty()) {
|
|
LogisticInfoOrderOpenResp logisticInfo = deliveryInfo.getLogisticInfoList().get(0);
|
|
// 查询物流信息
|
|
GoodsLogistics logistics = new GoodsLogistics();
|
|
if (logisticInfo.getDeliveryOrderId() != null) {
|
|
// 查询物流信息
|
|
logistics = bsOrderGoodsService.findGoodsLogisticsByNum(logisticInfo.getDeliveryOrderId());
|
|
}
|
|
|
|
// 获取物流信息列表
|
|
List<TrackInfoOrderOpenResp> trackInfoList = deliveryInfo.getTrackInfoList();
|
|
// 创建一个JSON对象列表
|
|
List<JSONObject> objects = new ArrayList<>();
|
|
// 遍历物流信息列表
|
|
for (TrackInfoOrderOpenResp trackInfo : trackInfoList) {
|
|
// 创建一个JSON对象
|
|
JSONObject object = new JSONObject();
|
|
// 将物流信息时间放入JSON对象
|
|
object.put("time", trackInfo.getTrackMsgTime());
|
|
// 将物流信息内容放入JSON对象
|
|
object.put("desc", trackInfo.getTrackContent());
|
|
// 将JSON对象添加到列表中
|
|
objects.add(object);
|
|
}
|
|
// 获取京东物流状态
|
|
JSONObject jsonObject = jdLogisticsStatus(orderGoods);
|
|
// 如果物流信息为空
|
|
if (logistics == null) {
|
|
// 创建一个新的物流信息对象
|
|
logistics = new GoodsLogistics();
|
|
// 设置物流信息订单号
|
|
logistics.setNumber(logisticInfo.getDeliveryOrderId());
|
|
// 设置物流信息任务号
|
|
logistics.setTaskNo(logisticInfo.getJdOrderId().toString());
|
|
// 设置物流状态
|
|
logistics.setLogisticsStatus(jsonObject.getString("logisticsStatus"));
|
|
// 设置物流状态描述
|
|
logistics.setLogisticsStatusDesc(jsonObject.getString("logisticsStatusDesc"));
|
|
// 设置物流跟踪详情
|
|
logistics.setLogisticsTraceDetails(objects.toString());
|
|
// 设置物流公司名称
|
|
logistics.setExpressCompanyName(logisticInfo.getDeliveryCarrier());
|
|
// 设置创建时间
|
|
logistics.setCreateTime(new Date());
|
|
// 创建物流信息
|
|
bsOrderGoodsService.create(logistics);
|
|
} else {
|
|
// 设置物流状态
|
|
logistics.setLogisticsStatus(jsonObject.getString("logisticsStatus"));
|
|
// 设置物流状态描述
|
|
logistics.setLogisticsStatusDesc(jsonObject.getString("logisticsStatusDesc"));
|
|
// 设置物流跟踪详情
|
|
logistics.setLogisticsTraceDetails(objects.toString());
|
|
// 更新物流信息
|
|
bsOrderGoodsService.update(logistics);
|
|
}
|
|
|
|
|
|
orderGoods.setLogisticsStatus(jsonObject.getString("logisticsStatus"));
|
|
orderGoods.setLogisticsStatusDesc(jsonObject.getString("logisticsStatusDesc"));
|
|
orderGoods.setLogisticsNo(logisticInfo.getDeliveryOrderId());
|
|
bsOrderGoodsService.update(orderGoods);
|
|
return logistics;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public VopOrderQueryOrderDetailResponse queryOrderDetail(BsOrderGoods orderGoods) throws Exception {
|
|
return JdPostService.queryOrderDetail(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo());
|
|
}
|
|
|
|
@Override
|
|
public VopAfsCreateAfsApplyResponse createAfsApply(String questionPic,String packageDesc, String thirdApplyId, Integer customerExpect, Long wareId, String wareName, Integer wareNum, Long jdOrderId, String customerName, String customerMobilePhone , Integer pickWareProvince, Integer pickWareCounty, Integer pickWareCity, Integer pickWareVillage , String pickWareAddress, Integer returnWareProvince, Integer returnWareCounty, Integer returnWareCity, Integer returnWareVillage, String returnWareAddress) throws Exception {
|
|
return JdPostService.createAfsApply(
|
|
getToken(), questionPic, packageDesc ,
|
|
thirdApplyId, customerExpect, wareId, wareName, wareNum, jdOrderId, customerName, customerMobilePhone, pickWareProvince, pickWareCounty, pickWareCity , pickWareVillage, pickWareAddress, returnWareProvince, returnWareCounty, returnWareCity , returnWareVillage, returnWareAddress);
|
|
}
|
|
|
|
private JSONObject jdLogisticsStatus(BsOrderGoods orderGoods) throws Exception {
|
|
JSONObject jsonObject = new JSONObject();
|
|
// 查询上游订单
|
|
VopOrderQueryOrderDetailResponse orderDetailResponse = JdPostService.queryOrderDetail(getToken(), Long.valueOf(orderGoods.getThirdOrderNo()), orderGoods.getChildOrderNo());
|
|
com.jd.open.api.sdk.domain.vopdd.QueryOrderOpenProvider.response.queryOrderDetail.OpenRpcResult result = orderDetailResponse.getOpenRpcResult();
|
|
if (result.getSuccess()) {
|
|
QueryOrderOpenResp queryOrderOpenResp = result.getResult().get(0);
|
|
StateOrderOpenResp stateOrderOpenResp = queryOrderOpenResp.getOrderState();
|
|
// 查看订单是否已确认
|
|
if (stateOrderOpenResp.getConfirmState() == 1) {
|
|
jsonObject.put("logisticsStatus", "SIGN");
|
|
jsonObject.put("logisticsStatusDesc", "已签收");
|
|
}
|
|
// 订单状态为567为待揽收
|
|
if (stateOrderOpenResp.getConfirmState() == 5 || stateOrderOpenResp.getConfirmState() == 6 || stateOrderOpenResp.getConfirmState() == 7) {
|
|
jsonObject.put("logisticsStatus", "WAIT_ACCEPT");
|
|
jsonObject.put("logisticsStatusDesc", "待揽收");
|
|
}
|
|
// 订单状态为8,9,10为待发货
|
|
if (stateOrderOpenResp.getConfirmState() == 8 || stateOrderOpenResp.getConfirmState() == 9 || stateOrderOpenResp.getConfirmState() == 10) {
|
|
jsonObject.put("logisticsStatus", "ACCEPT");
|
|
jsonObject.put("logisticsStatusDesc", "已揽件");
|
|
}
|
|
// 订单状态为11,12,13,14为运输中
|
|
if (stateOrderOpenResp.getConfirmState() == 11 || stateOrderOpenResp.getConfirmState() == 12 || stateOrderOpenResp.getConfirmState() == 13 || stateOrderOpenResp.getConfirmState() == 14) {
|
|
jsonObject.put("logisticsStatus", "TRANSPORT");
|
|
jsonObject.put("logisticsStatusDesc", "运输中");
|
|
}
|
|
// 订单状态为16为派件中
|
|
if (stateOrderOpenResp.getConfirmState() == 16) {
|
|
jsonObject.put("logisticsStatus", "DELIVERING");
|
|
jsonObject.put("logisticsStatusDesc", "派件中");
|
|
}
|
|
}
|
|
return jsonObject;
|
|
}
|
|
}
|
|
|