|
@@ -73,7 +73,8 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
private static final String DOMAIN = "http://www.victoriatourist.ltd/prod-api";
|
|
private static final String DOMAIN = "http://www.victoriatourist.ltd/prod-api";
|
|
private static final String redirect_uri = DOMAIN + "/open/jd/callback";
|
|
private static final String redirect_uri = DOMAIN + "/open/jd/callback";
|
|
- private final String tenantId = "prod".equals(SpringUtil.getActiveProfile()) ? "wdly" : "wdlytest";
|
|
|
|
|
|
+// private final String tenantId = "prod".equals(SpringUtil.getActiveProfile()) ? "wdly" : "wdlytest";
|
|
|
|
+ private final String tenantId = "wdly";
|
|
private static final String ACCESS_TOKEN = "access_token";
|
|
private static final String ACCESS_TOKEN = "access_token";
|
|
private static final String REFRESH_TOKEN = "refresh_token";
|
|
private static final String REFRESH_TOKEN = "refresh_token";
|
|
|
|
|
|
@@ -242,11 +243,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
ThreadUtil.safeSleep(10000);
|
|
ThreadUtil.safeSleep(10000);
|
|
continue;
|
|
continue;
|
|
}
|
|
}
|
|
- try {
|
|
|
|
- getJdOrderList(jdClient, jdInfoVo);
|
|
|
|
- }catch (Exception e){
|
|
|
|
- log.error("获取京东订单列表出错:" + e.getMessage(), e);
|
|
|
|
- }
|
|
|
|
|
|
+ getJdOrderList(jdClient, jdInfoVo);
|
|
ThreadUtil.safeSleep(10000);
|
|
ThreadUtil.safeSleep(10000);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -467,69 +464,80 @@ public class JdApiServiceImpl implements JdApiService {
|
|
/**
|
|
/**
|
|
* 获取京东订单
|
|
* 获取京东订单
|
|
*/
|
|
*/
|
|
- private void getJdOrderList(JdClient client, JdInfoVo jdInfoVo) throws Exception {
|
|
|
|
- int pageIndex = 1;
|
|
|
|
- int totalPage = 1;
|
|
|
|
- int pageSize = 50;
|
|
|
|
- do{
|
|
|
|
- //获取开始同步的时间
|
|
|
|
- Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
|
- Date endTime = new Date();
|
|
|
|
- //根据下单时间获取数据库里最后一个订单
|
|
|
|
- JdOrder lastJdOrder = jdOrderService.getLastJdOrder();
|
|
|
|
- if (ObjectUtil.isNotNull(lastJdOrder)) {
|
|
|
|
- //将最后一个下单时间减1个小时设置为开始时间
|
|
|
|
- startTime = DateUtil.offsetHour(lastJdOrder.getCreatedDate(), -1);
|
|
|
|
- }
|
|
|
|
- //计算总页数
|
|
|
|
- JOSOrderResultDto josOrderResultDto = getJdOrderInfo(pageIndex, pageSize, startTime, endTime, client, null);
|
|
|
|
- totalPage = (josOrderResultDto.getRecordCount()/pageSize)+(josOrderResultDto.getRecordCount()%pageSize>0?1:0);
|
|
|
|
-
|
|
|
|
- //数据返回订单是倒序反过来按正顺保存
|
|
|
|
- List<PurchaseOrderDto> purchaseOrderList = josOrderResultDto.getPurchaseOrderList();
|
|
|
|
- //京东回来的数据是按时间倒序的,使用reverse方法将list中的数据翻转为正序
|
|
|
|
- Collections.reverse(purchaseOrderList);
|
|
|
|
-
|
|
|
|
- //处理数据(过滤已存在的数据)
|
|
|
|
- List<Long> jdOrderIds = purchaseOrderList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toList());
|
|
|
|
- //获取已同步的京东订单id
|
|
|
|
- List<Long> jdOrderIds1 = jdOrderService.listObject(JdOrder::getOrderId, q -> q.in(JdOrder::getOrderId, jdOrderIds));
|
|
|
|
- //过滤出未同步的数据
|
|
|
|
- List<PurchaseOrderDto> purchaseOrderListFilter = purchaseOrderList.stream().filter(item -> !jdOrderIds1.contains(item.getOrderId())).collect(Collectors.toList());
|
|
|
|
- //转为系统自己的实体类
|
|
|
|
- List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderListFilter, JdOrder.class);
|
|
|
|
- //赋值租户id
|
|
|
|
- jdOrderList.forEach(item -> item.setTenantId(tenantId));
|
|
|
|
- //将数据存储到库
|
|
|
|
- jdOrderService.saveBatch(jdOrderList);
|
|
|
|
- //获取明细
|
|
|
|
- List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
|
- for (JdOrder jdOrder : jdOrderList) {
|
|
|
|
- VcGetdetailbyorderidRequest request = new VcGetdetailbyorderidRequest();
|
|
|
|
- request.setOrderId(jdOrder.getOrderId());
|
|
|
|
- request.setIsPage(false);
|
|
|
|
- VcGetdetailbyorderidResponse response = client.execute(request);
|
|
|
|
- JOSDetailResultDto josDetailResultDto = response.getJosDetailResultDto();
|
|
|
|
- List<PurchaseAllocationDetailDto> purchaseAllocationDetailList = josDetailResultDto.getPurchaseAllocationDetailList();
|
|
|
|
- List<JdOrderDetails> jdOrderDetails = BeanUtil.copyToList(purchaseAllocationDetailList, JdOrderDetails.class);
|
|
|
|
- jdOrderDetails.forEach(item -> {
|
|
|
|
- item.setJdOrderId(jdOrder.getId());
|
|
|
|
- //产品编码
|
|
|
|
- Long wareId = item.getWareId();
|
|
|
|
- List<ProductInfo> list = productInfoService.lambdaQuery().eq(ProductInfo::getCustomCode, wareId).list();
|
|
|
|
- if(CollectionUtil.isEmpty(list)){
|
|
|
|
- //TODO 没有产品触发异常;
|
|
|
|
- }else {
|
|
|
|
- item.setProductId(list.get(0).getId());
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
- jdOrderDetailsList.addAll(jdOrderDetails);
|
|
|
|
- }
|
|
|
|
-// //赋值租户id
|
|
|
|
-// jdOrderList.forEach(item -> item.setTenantId(tenantId));
|
|
|
|
- jdOrderDetailsService.saveBatch(jdOrderDetailsList);
|
|
|
|
- pageIndex++;
|
|
|
|
- } while (pageIndex <= totalPage);
|
|
|
|
|
|
+ private void getJdOrderList(JdClient client, JdInfoVo jdInfoVo){
|
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
|
|
+ SecurityUtils.setTenantId(tenantId);
|
|
|
|
+ try {
|
|
|
|
+ int pageIndex = 1;
|
|
|
|
+ int totalPage = 1;
|
|
|
|
+ int pageSize = 50;
|
|
|
|
+ do {
|
|
|
|
+ //获取开始同步的时间
|
|
|
|
+ Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
|
+ Date endTime = new Date();
|
|
|
|
+ //根据下单时间获取数据库里最后一个订单
|
|
|
|
+ JdOrder lastJdOrder = jdOrderService.lambdaQuery().isNotNull(JdOrder::getCreatedDate).orderByDesc(JdOrder::getCreatedDate).last("limit 1").oneOpt().orElse(null);
|
|
|
|
+ if (ObjectUtil.isNotNull(lastJdOrder)) {
|
|
|
|
+ //将最后一个下单时间减1个小时设置为开始时间
|
|
|
|
+ startTime = DateUtil.offsetHour(lastJdOrder.getCreatedDate(), -1);
|
|
|
|
+ }
|
|
|
|
+ //计算总页数
|
|
|
|
+ JOSOrderResultDto josOrderResultDto = getJdOrderInfo(pageIndex, pageSize, startTime, endTime, client, null);
|
|
|
|
+ totalPage = (josOrderResultDto.getRecordCount() / pageSize) + (josOrderResultDto.getRecordCount() % pageSize > 0 ? 1 : 0);
|
|
|
|
+
|
|
|
|
+ //数据返回订单是倒序反过来按正顺保存
|
|
|
|
+ List<PurchaseOrderDto> purchaseOrderList = josOrderResultDto.getPurchaseOrderList();
|
|
|
|
+ //京东回来的数据是按时间倒序的,使用reverse方法将list中的数据翻转为正序
|
|
|
|
+ Collections.reverse(purchaseOrderList);
|
|
|
|
+
|
|
|
|
+ //处理数据(过滤已存在的数据)
|
|
|
|
+ List<Long> jdOrderIds = purchaseOrderList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toList());
|
|
|
|
+ //获取已同步的京东订单id
|
|
|
|
+ List<Long> jdOrderIds1 = jdOrderService.lambdaQuery().select(JdOrder::getOrderId).in(JdOrder::getOrderId, jdOrderIds).list().stream().map(JdOrder::getOrderId).collect(Collectors.toList());
|
|
|
|
+ //过滤出未同步的数据
|
|
|
|
+ List<PurchaseOrderDto> purchaseOrderListFilter = purchaseOrderList.stream().filter(item -> !jdOrderIds1.contains(item.getOrderId())).collect(Collectors.toList());
|
|
|
|
+ //转为系统自己的实体类
|
|
|
|
+ List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderListFilter, JdOrder.class);
|
|
|
|
+ //赋值租户id
|
|
|
|
+ jdOrderList.forEach(item -> item.setTenantId(tenantId));
|
|
|
|
+ //将数据存储到库
|
|
|
|
+ jdOrderService.saveBatch(jdOrderList);
|
|
|
|
+ //获取明细
|
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
|
+ for (JdOrder jdOrder : jdOrderList) {
|
|
|
|
+ VcGetdetailbyorderidRequest request = new VcGetdetailbyorderidRequest();
|
|
|
|
+ request.setOrderId(jdOrder.getOrderId());
|
|
|
|
+ request.setIsPage(false);
|
|
|
|
+ VcGetdetailbyorderidResponse response = client.execute(request);
|
|
|
|
+ JOSDetailResultDto josDetailResultDto = response.getJosDetailResultDto();
|
|
|
|
+ List<PurchaseAllocationDetailDto> purchaseAllocationDetailList = josDetailResultDto.getPurchaseAllocationDetailList();
|
|
|
|
+ List<JdOrderDetails> jdOrderDetails = BeanUtil.copyToList(purchaseAllocationDetailList, JdOrderDetails.class);
|
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
|
|
|
|
+ jdOrderDetails.forEach(item -> {
|
|
|
|
+ item.setJdOrderId(jdOrder.getId());
|
|
|
|
+ //产品编码
|
|
|
|
+ Long wareId = item.getWareId();
|
|
|
|
+ List<ProductInfo> list = productInfoService.lambdaQuery().eq(ProductInfo::getCustomCode, wareId).list();
|
|
|
|
+ if (CollectionUtil.isEmpty(list)) {
|
|
|
|
+ //TODO 没有产品触发异常;
|
|
|
|
+ } else {
|
|
|
|
+ item.setProductId(list.get(0).getId());
|
|
|
|
+ }
|
|
|
|
+ });
|
|
|
|
+ jdOrderDetailsList.addAll(jdOrderDetails);
|
|
|
|
+ }
|
|
|
|
+ // //赋值租户id
|
|
|
|
+ // jdOrderList.forEach(item -> item.setTenantId(tenantId));
|
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
|
|
|
|
+ jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
|
|
|
|
+ pageIndex++;
|
|
|
|
+ } while (pageIndex <= totalPage);
|
|
|
|
+ } catch (Exception e){
|
|
|
|
+ log.error("获取京东订单出错:" + e.getMessage(), e);
|
|
|
|
+ }finally {
|
|
|
|
+ SecurityUtils.clearTenantId();
|
|
|
|
+ DynamicDataSourceContextHolder.poll();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -798,7 +806,7 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
|
|
|
void validSuccess(AbstractResponse response, String method){
|
|
void validSuccess(AbstractResponse response, String method){
|
|
String code = response.getCode();
|
|
String code = response.getCode();
|
|
- if(!"200".equals(code)){
|
|
|
|
|
|
+ if(!"0".equals(code)){
|
|
log.error("获取{}失败:{}", method ,response.getZhDesc());
|
|
log.error("获取{}失败:{}", method ,response.getZhDesc());
|
|
throw new RuntimeException("获取"+ method +"失败:" + response.getZhDesc());
|
|
throw new RuntimeException("获取"+ method +"失败:" + response.getZhDesc());
|
|
}
|
|
}
|