|
@@ -25,6 +25,8 @@ import com.fjhx.victoriatourist.entity.jd.po.JdBack;
|
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdBackDetails;
|
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdOrder;
|
|
|
import com.fjhx.victoriatourist.entity.jd.po.JdOrderDetails;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.po.JdRefund;
|
|
|
+import com.fjhx.victoriatourist.entity.jd.po.JdRefundDetail;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.CommonDictData;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.JdInfoVo;
|
|
|
import com.fjhx.victoriatourist.entity.jd.vo.TellBackOrderVO;
|
|
@@ -34,9 +36,14 @@ import com.fjhx.victoriatourist.service.jd.JdBackService;
|
|
|
import com.fjhx.victoriatourist.service.jd.JdInfoService;
|
|
|
import com.fjhx.victoriatourist.service.jd.JdOrderDetailsService;
|
|
|
import com.fjhx.victoriatourist.service.jd.JdOrderService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdRefundDetailService;
|
|
|
+import com.fjhx.victoriatourist.service.jd.JdRefundService;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.InitDictConstant;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.JdParamConstant;
|
|
|
import com.fjhx.victoriatourist.service.jd.constants.RunParamConstant;
|
|
|
+import com.fjhx.victoriatourist.service.jd.entity.RefundDetailRequest;
|
|
|
+import com.fjhx.victoriatourist.service.jd.entity.RefundDetailResponse;
|
|
|
+import com.fjhx.victoriatourist.service.jd.entity.RefundDetailResult;
|
|
|
import com.google.common.collect.HashBasedTable;
|
|
|
import com.google.common.collect.Table;
|
|
|
import com.jd.open.api.sdk.JdClient;
|
|
@@ -49,6 +56,8 @@ import com.jd.open.api.sdk.domain.supplier.PoQueryForJosWebService.response.getp
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.detail.DetailResultDto;
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.get.RoDto;
|
|
|
import com.jd.open.api.sdk.domain.supplier.ReturnOrderForJosWebService.response.get.RoResultDto;
|
|
|
+import com.jd.open.api.sdk.domain.supplier.SparePartInventoryJosService.response.list.JosResult;
|
|
|
+import com.jd.open.api.sdk.request.supplier.EdiwsRoRefundInfoListRequest;
|
|
|
import com.jd.open.api.sdk.request.supplier.VcConfirmpurchaseorderRequest;
|
|
|
import com.jd.open.api.sdk.request.supplier.VcGetReturnOrderDetailRequest;
|
|
|
import com.jd.open.api.sdk.request.supplier.VcGetcomponentlistRequest;
|
|
@@ -57,6 +66,7 @@ import com.jd.open.api.sdk.request.supplier.VcGetpurchaseorderlistRequest;
|
|
|
import com.jd.open.api.sdk.request.supplier.VcGetwaredeliverdistinctlistRequest;
|
|
|
import com.jd.open.api.sdk.request.supplier.VcReturnOrderListPageGetRequest;
|
|
|
import com.jd.open.api.sdk.response.AbstractResponse;
|
|
|
+import com.jd.open.api.sdk.response.supplier.EdiwsRoRefundInfoListResponse;
|
|
|
import com.jd.open.api.sdk.response.supplier.VcConfirmpurchaseorderResponse;
|
|
|
import com.jd.open.api.sdk.response.supplier.VcGetReturnOrderDetailResponse;
|
|
|
import com.jd.open.api.sdk.response.supplier.VcGetcomponentlistResponse;
|
|
@@ -146,6 +156,10 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
@Resource
|
|
|
private DictTenantDataService dictTenantDataService;
|
|
|
@Resource
|
|
|
+ private JdRefundService jdRefundService;
|
|
|
+ @Resource
|
|
|
+ private JdRefundDetailService jdRefundDetailService;
|
|
|
+ @Resource
|
|
|
private JdClient jdClient;
|
|
|
|
|
|
//每小时执行一次
|
|
@@ -280,16 +294,57 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
*/
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
- public void startJdOrder(JdInfoVo jdInfoVo) {
|
|
|
+ public void startJdOrder(JdInfoVo jdInfoVo) throws Exception {
|
|
|
if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
return;
|
|
|
}
|
|
|
- try {
|
|
|
- saveJdOrder(jdInfoVo);
|
|
|
- log.info("京东订单采集完成");
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("京东订单采集出错:{}", e.getMessage(), e);
|
|
|
+ //获取开始同步的时间
|
|
|
+ Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
+ Date endTime = new Date();
|
|
|
+
|
|
|
+ //根据下单时间获取数据库里最后一个订单
|
|
|
+ JdOrder lastJdOrder = jdOrderService.getOne(q -> q.orderByDesc(JdOrder::getCreatedDate));
|
|
|
+ if (ObjectUtil.isNotNull(lastJdOrder)) {
|
|
|
+ startTime = lastJdOrder.getCreatedDate();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<PurchaseOrderDto> purchaseOrderDtoList = getJdOrderInfo(startTime, endTime, null);
|
|
|
+
|
|
|
+ if (CollectionUtil.isEmpty(purchaseOrderDtoList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 订单id集合
|
|
|
+ Set<Long> orderIdSet = purchaseOrderDtoList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 获取已同步的京东订单id
|
|
|
+ Set<Long> existOrderIdSet = jdOrderService.list(q -> q.select(JdOrder::getOrderId).in(JdOrder::getOrderId, orderIdSet))
|
|
|
+ .stream().map(JdOrder::getOrderId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ // 过滤已同步的订单
|
|
|
+ purchaseOrderDtoList = purchaseOrderDtoList.stream()
|
|
|
+ .filter(item -> !existOrderIdSet.contains(item.getOrderId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ // 转为系统自己的实体类
|
|
|
+ List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderDtoList, JdOrder.class);
|
|
|
+
|
|
|
+ // 获取明细
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ for (JdOrder jdOrder : jdOrderList) {
|
|
|
+ jdOrder.setId(IdWorker.getId());
|
|
|
+ jdOrder.setTenantId(RunParamConstant.tenantId);
|
|
|
+ boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
|
|
|
+ if (hasExFlag) {
|
|
|
+ jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
+ jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ // 将数据存储到库
|
|
|
+ jdOrderService.saveBatch(jdOrderList);
|
|
|
+ jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -297,16 +352,66 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
*/
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
- public void startJdBackOrder(JdInfoVo jdInfoVo) {
|
|
|
+ public void startJdBackOrder(JdInfoVo jdInfoVo) throws Exception {
|
|
|
if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
return;
|
|
|
}
|
|
|
+ Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
+ Date endTime = new Date();
|
|
|
+ //根据下单时间获取数据库里最后一个订单
|
|
|
+ JdBack lastJdBack = jdBackService.getOne(q -> q.orderByDesc(JdBack::getCreateDate));
|
|
|
+ if (ObjectUtil.isNotNull(lastJdBack)) {
|
|
|
+ //将最后一个下单时间设置为开始时间
|
|
|
+ startTime = lastJdBack.getCreateDate();
|
|
|
+ }
|
|
|
+
|
|
|
+ List<RoDto> roDtoList = getJdBackInfo(startTime, endTime);
|
|
|
+ if (CollectionUtil.isEmpty(roDtoList)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //过滤出不在数据库里的新数据
|
|
|
+ List<Long> returnIds = roDtoList.stream().map(RoDto::getReturnId).collect(Collectors.toList());
|
|
|
+ List<Long> existReturnIds = jdBackService.list(q -> q.select(JdBack::getReturnId).in(JdBack::getReturnId, returnIds))
|
|
|
+ .stream().map(JdBack::getReturnId).collect(Collectors.toList());
|
|
|
+ roDtoList = roDtoList.stream().filter(item -> !existReturnIds.contains(item.getReturnId())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ //转成我们自己的实体类
|
|
|
+ List<JdBack> jdBackList = BeanUtil.copyToList(roDtoList, JdBack.class);
|
|
|
+
|
|
|
+ //获取明细
|
|
|
+ List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ Set<Long> wareIdSet = new HashSet<>();
|
|
|
+
|
|
|
+ for (JdBack jdBack : jdBackList) {
|
|
|
+ jdBack.setId(IdWorker.getId());
|
|
|
+
|
|
|
+ VcGetReturnOrderDetailRequest request = new VcGetReturnOrderDetailRequest();
|
|
|
+ request.setReturnId(jdBack.getReturnId());
|
|
|
+ VcGetReturnOrderDetailResponse response = jdClient.execute(request);
|
|
|
+ DetailResultDto detailResultDto = response.getDetailResultDto();
|
|
|
+ List<JdBackDetails> jdBackDetails = BeanUtil.copyToList(detailResultDto.getDetailDtoList(), JdBackDetails.class);
|
|
|
+
|
|
|
+ jdBackDetails.forEach(item -> {
|
|
|
+ item.setJdBackId(jdBack.getId());
|
|
|
+ wareIdSet.add(item.getWareId());
|
|
|
+ });
|
|
|
+ JdBackDetailsList.addAll(jdBackDetails);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 赋值产品编码
|
|
|
try {
|
|
|
- getJdBackOrder(jdInfoVo);
|
|
|
- log.info("京东退货单采集完成");
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("京东退货单采集出错:{}", e.getMessage(), e);
|
|
|
+ DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
|
|
|
+ Map<String, Long> map = productInfoService.mapKV(ProductInfo::getCustomCode, BaseIdPo::getId,
|
|
|
+ q -> q.in(ProductInfo::getCustomCode, wareIdSet));
|
|
|
+ JdBackDetailsList.forEach(item -> item.setProductId(map.get(item.getWareId().toString())));
|
|
|
+ } finally {
|
|
|
+ DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
|
+
|
|
|
+ jdBackService.saveBatch(jdBackList);
|
|
|
+ jdBackDetailsService.saveBatch(JdBackDetailsList);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -314,15 +419,79 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
*/
|
|
|
@DSTransactional
|
|
|
@Override
|
|
|
- public void refreshJdState(JdInfoVo jdInfoVo) {
|
|
|
+ public void refreshJdState(JdInfoVo jdInfoVo) throws Exception {
|
|
|
if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
return;
|
|
|
}
|
|
|
- try {
|
|
|
- handleRefreshDate();
|
|
|
- log.info("刷新京东状态完成");
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("刷新京东状态失败", e);
|
|
|
+ Date endDate = new Date();
|
|
|
+ Date startDate = DateUtil.offsetMonth(endDate, -3);
|
|
|
+
|
|
|
+ //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
|
|
|
+ List<JdOrder> jdOrders = jdOrderService.list(q -> q
|
|
|
+ .notIn(JdOrder::getState, notIn)
|
|
|
+ .between(JdOrder::getCreatedDate, startDate, endDate)
|
|
|
+ .orderByDesc(JdOrder::getCreatedDate)
|
|
|
+ );
|
|
|
+
|
|
|
+ if (CollectionUtil.isEmpty(jdOrders)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<Long, JdOrder> jdOrderMap = jdOrders.stream().collect(Collectors.toMap(JdOrder::getOrderId, Function.identity()));
|
|
|
+
|
|
|
+ // 2.按50个订单查询京东订单状态
|
|
|
+ List<List<JdOrder>> splitJdOrder = ListUtil.split(jdOrders, 50);
|
|
|
+
|
|
|
+ for (List<JdOrder> orders : splitJdOrder) {
|
|
|
+ List<Long> orderIdList = orders.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
|
|
|
+ List<PurchaseOrderDto> jdOrderInfo = getJdOrderInfo(null, null, orderIdList);
|
|
|
+ List<JdOrder> jdOrderList = BeanUtil.copyToList(jdOrderInfo, JdOrder.class);
|
|
|
+
|
|
|
+ //3.更新订单信息
|
|
|
+ for (JdOrder jdOrder : jdOrderList) {
|
|
|
+ Long id = jdOrderMap.get(jdOrder.getOrderId()).getId();
|
|
|
+ jdOrder.setId(id);
|
|
|
+ if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
|
|
|
+ List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
+
|
|
|
+ //重新插入明细
|
|
|
+ boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
|
|
|
+
|
|
|
+ //获取当前明细记录
|
|
|
+ List<JdOrderDetails> dbJdOrderDetails = jdOrderDetailsService.list(q -> q.eq(JdOrderDetails::getJdOrderId, id));
|
|
|
+ Table<Long, Long, JdOrderDetails> jdOrderDetailsTable = HashBasedTable.create();
|
|
|
+ jdOrderDetailsList.forEach(item -> jdOrderDetailsTable.put(item.getOrderId(), item.getWareId(), item));
|
|
|
+
|
|
|
+ for (JdOrderDetails dbJdOrderDetail : dbJdOrderDetails) {
|
|
|
+ JdOrderDetails onlineJdOrderDetails = jdOrderDetailsTable.get(dbJdOrderDetail.getOrderId(), dbJdOrderDetail.getWareId());
|
|
|
+ dbJdOrderDetail.setDeliverCenterId(onlineJdOrderDetails.getDeliverCenterId());
|
|
|
+ dbJdOrderDetail.setDeliverCenterName(onlineJdOrderDetails.getDeliverCenterName());
|
|
|
+ dbJdOrderDetail.setWareName(onlineJdOrderDetails.getWareName());
|
|
|
+ dbJdOrderDetail.setPurchasePrice(onlineJdOrderDetails.getPurchasePrice());
|
|
|
+ dbJdOrderDetail.setOriginalNum(onlineJdOrderDetails.getOriginalNum());
|
|
|
+ dbJdOrderDetail.setConfirmNum(onlineJdOrderDetails.getConfirmNum());
|
|
|
+ dbJdOrderDetail.setActualNum(onlineJdOrderDetails.getActualNum());
|
|
|
+ dbJdOrderDetail.setNonDeliveryReason(onlineJdOrderDetails.getNonDeliveryReason());
|
|
|
+ dbJdOrderDetail.setTotoalPrice(onlineJdOrderDetails.getTotoalPrice());
|
|
|
+ dbJdOrderDetail.setStoreId(onlineJdOrderDetails.getStoreId());
|
|
|
+ dbJdOrderDetail.setStoreName(onlineJdOrderDetails.getStoreName());
|
|
|
+ dbJdOrderDetail.setHasEx(onlineJdOrderDetails.getHasEx());
|
|
|
+ dbJdOrderDetail.setExDesc(onlineJdOrderDetails.getExDesc());
|
|
|
+ dbJdOrderDetail.setHandleStatus(onlineJdOrderDetails.getHandleStatus());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (hasExFlag) {
|
|
|
+ jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
+ jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
+ } else {
|
|
|
+ jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
|
|
|
+ jdOrder.setHandleStatus(null);
|
|
|
+ }
|
|
|
+
|
|
|
+ jdOrderDetailsService.updateBatchById(dbJdOrderDetails);
|
|
|
+ }
|
|
|
+ jdOrderService.updateById(jdOrder);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -340,7 +509,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
} finally {
|
|
|
DynamicDataSourceContextHolder.poll();
|
|
|
}
|
|
|
- log.info("字典初始化完成");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -385,67 +553,98 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
|
|
|
jdOrderDetailsService.updateBatchById(updateList);
|
|
|
-
|
|
|
- log.info("补偿商品id完成");
|
|
|
}
|
|
|
|
|
|
+ @DSTransactional
|
|
|
@Override
|
|
|
- public void refundInfo(JdInfoVo jdInfoVo) {
|
|
|
+ public void refundInfo(JdInfoVo jdInfoVo) throws Exception {
|
|
|
if (ObjectUtil.isNull(jdInfoVo)) {
|
|
|
return;
|
|
|
}
|
|
|
- try {
|
|
|
- saveRefundInfo(jdInfoVo);
|
|
|
- log.info("京东收集售后退货列表完成");
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("京东收集售后退货列表出错:{}", e.getMessage(), e);
|
|
|
+
|
|
|
+ //获取开始同步的时间
|
|
|
+ Date startTime = DateUtil.parseDateTime("2024-09-20 00:00:00");
|
|
|
+ Date endTime = new Date();
|
|
|
+
|
|
|
+ //根据下单时间获取数据库里最后一个订单
|
|
|
+ JdRefund lastJdRefund = jdRefundService.getOne(q -> q.orderByDesc(JdRefund::getApplyDateTime));
|
|
|
+ if (ObjectUtil.isNotNull(lastJdRefund)) {
|
|
|
+ startTime = DateUtil.offsetSecond(lastJdRefund.getApplyDateTime(), 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ List<JdRefund> jdRefunds = getRefundInfoList(startTime, endTime);
|
|
|
+ jdRefundService.saveBatch(jdRefunds);
|
|
|
+
|
|
|
+ List<JdRefundDetail> jdRefundDetails = getJdRefundDetails(jdRefunds);
|
|
|
+ jdRefundDetailService.saveBatch(jdRefundDetails);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<JdRefundDetail> getJdRefundDetails(List<JdRefund> jdRefunds) throws Exception {
|
|
|
+
|
|
|
+ List<JdRefundDetail> jdRefundDetails = new ArrayList<>();
|
|
|
+ for (JdRefund jdRefund : jdRefunds) {
|
|
|
+ RefundDetailRequest request = new RefundDetailRequest();
|
|
|
+ request.setRefundId(jdRefund.getRefundId());
|
|
|
+ request.setVendorCode(RunParamConstant.VENDOR_CODE);
|
|
|
+
|
|
|
+ RefundDetailResponse response = jdClient.execute(request);
|
|
|
+ validSuccess(response, "获取京东售后退货详情");
|
|
|
+
|
|
|
+ RefundDetailResult result = response.getResult();
|
|
|
+
|
|
|
+ if (!result.getSuccess()) {
|
|
|
+ throw new RuntimeException("获取京东售后退货详情失败:" + result.getMessage());
|
|
|
+ }
|
|
|
+
|
|
|
+ List<JdRefundDetail> data = result.getData();
|
|
|
+ data.forEach(item -> item.setJdRefundId(jdRefund.getId()));
|
|
|
+ jdRefundDetails.addAll(data);
|
|
|
}
|
|
|
+
|
|
|
+ return jdRefundDetails;
|
|
|
}
|
|
|
|
|
|
- private void saveRefundInfo(JdInfoVo jdInfoVo) {
|
|
|
+ /**
|
|
|
+ * 获取京东订单信息分页
|
|
|
+ */
|
|
|
+ private JSONObject getRefundInfoList(Integer pageIndex, Integer pageSize, Date startTime, Date endTime) throws Exception {
|
|
|
+ EdiwsRoRefundInfoListRequest request = new EdiwsRoRefundInfoListRequest();
|
|
|
+ request.setApplyBeginTime(startTime);
|
|
|
+ request.setApplyEndTime(endTime);
|
|
|
+ request.setPageIndex(pageIndex);
|
|
|
+ request.setPageSize(pageSize);
|
|
|
+ request.setVendorCode(RunParamConstant.VENDOR_CODE);
|
|
|
+ EdiwsRoRefundInfoListResponse response = jdClient.execute(request);
|
|
|
+ validSuccess(response, "获取京东售后退货列表");
|
|
|
+ JosResult result = response.getResult();
|
|
|
+ boolean success = result.getSuccess();
|
|
|
+ if (!success) {
|
|
|
+ throw new RuntimeException("获取京东售后退货列表失败:" + result.getMessage());
|
|
|
+ }
|
|
|
|
|
|
+ return JSONObject.parseObject(response.getMsg())
|
|
|
+ .getJSONObject("jingdong_ediws_ro_refundInfo_list_responce")
|
|
|
+ .getJSONObject("result");
|
|
|
}
|
|
|
|
|
|
- ///**
|
|
|
- // * 获取京东订单信息分页
|
|
|
- // */
|
|
|
- //private JOSOrderResultDto getRefundInfoList(Integer pageIndex, Integer pageSize, Date startTime, Date endTime) throws Exception {
|
|
|
- // EdiwsRoRefundInfoListRequest request = new EdiwsRoRefundInfoListRequest();
|
|
|
- // request.setApplyBeginTime(startTime);
|
|
|
- // request.setApplyEndTime(endTime);
|
|
|
- // request.setPageIndex(pageIndex);
|
|
|
- // request.setPageSize(pageSize);
|
|
|
- // EdiwsRoRefundInfoListResponse response = jdClient.execute(request);
|
|
|
- //
|
|
|
- // validSuccess(response, "获取京东售后退货列表");
|
|
|
- // JOSOrderResultDto josOrderResultDto = response.getJosOrderResultDto();
|
|
|
- //
|
|
|
- // boolean success = josOrderResultDto.getSuccess();
|
|
|
- // if (!success) {
|
|
|
- // log.error("获取京东售后退货列表失败:{}", josOrderResultDto.getResultMessage());
|
|
|
- // throw new RuntimeException("获取京东售后退货列表失败:" + josOrderResultDto.getResultMessage());
|
|
|
- // }
|
|
|
- //
|
|
|
- // return josOrderResultDto;
|
|
|
- //}
|
|
|
- //
|
|
|
- //
|
|
|
- //private void getRefundInfoList(Date startTime, Date endTime) {
|
|
|
- // int pageIndex = 1;
|
|
|
- // int pageSize = 50;
|
|
|
- // int recordCount;
|
|
|
- //
|
|
|
- // List<PurchaseOrderDto> purchaseOrderDtoList = new ArrayList<>();
|
|
|
- // do {
|
|
|
- // JOSOrderResultDto jdOrderInfo = getJdOrderInfo(pageIndex, pageSize, startTime, endTime, orderIds);
|
|
|
- // pageIndex++;
|
|
|
- // purchaseOrderDtoList.addAll(jdOrderInfo.getPurchaseOrderList());
|
|
|
- // recordCount = jdOrderInfo.getRecordCount();
|
|
|
- // } while (recordCount > (pageIndex - 1) * pageSize);
|
|
|
- // Collections.reverse(purchaseOrderDtoList);
|
|
|
- //
|
|
|
- // return purchaseOrderDtoList;
|
|
|
- //}
|
|
|
+
|
|
|
+ private List<JdRefund> getRefundInfoList(Date startTime, Date endTime) throws Exception {
|
|
|
+ int pageIndex = 1;
|
|
|
+ int pageSize = 50;
|
|
|
+ long recordCount;
|
|
|
+
|
|
|
+ List<JdRefund> list = new ArrayList<>();
|
|
|
+ do {
|
|
|
+ JSONObject result = getRefundInfoList(pageIndex, pageSize, startTime, endTime);
|
|
|
+ pageIndex++;
|
|
|
+ list.addAll(result.getJSONArray("data").toList(JdRefund.class));
|
|
|
+ recordCount = result.getIntValue("recordCount");
|
|
|
+ } while (recordCount > (long) (pageIndex - 1) * pageSize);
|
|
|
+ Collections.reverse(list);
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* 请求API工具方法
|
|
@@ -463,82 +662,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
return JSONObject.parseObject(responseStr);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 处理刷新token数据
|
|
|
- */
|
|
|
- private void handleRefreshDate() throws Exception {
|
|
|
- Date endDate = new Date();
|
|
|
- Date startDate = DateUtil.offsetMonth(endDate, -3);
|
|
|
-
|
|
|
- //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
|
|
|
- List<JdOrder> jdOrders = jdOrderService.list(q -> q
|
|
|
- .notIn(JdOrder::getState, notIn)
|
|
|
- .between(JdOrder::getCreatedDate, startDate, endDate)
|
|
|
- .orderByDesc(JdOrder::getCreatedDate)
|
|
|
- );
|
|
|
-
|
|
|
- if (CollectionUtil.isEmpty(jdOrders)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- Map<Long, JdOrder> jdOrderMap = jdOrders.stream().collect(Collectors.toMap(JdOrder::getOrderId, Function.identity()));
|
|
|
-
|
|
|
- // 2.按50个订单查询京东订单状态
|
|
|
- List<List<JdOrder>> splitJdOrder = ListUtil.split(jdOrders, 50);
|
|
|
-
|
|
|
- for (List<JdOrder> orders : splitJdOrder) {
|
|
|
- List<Long> orderIdList = orders.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
|
|
|
- List<PurchaseOrderDto> jdOrderInfo = getJdOrderInfo(null, null, orderIdList);
|
|
|
- List<JdOrder> jdOrderList = BeanUtil.copyToList(jdOrderInfo, JdOrder.class);
|
|
|
-
|
|
|
- //3.更新订单信息
|
|
|
- for (JdOrder jdOrder : jdOrderList) {
|
|
|
- Long id = jdOrderMap.get(jdOrder.getOrderId()).getId();
|
|
|
- jdOrder.setId(id);
|
|
|
- if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
|
|
|
- List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
-
|
|
|
- //重新插入明细
|
|
|
- boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
|
|
|
-
|
|
|
- //获取当前明细记录
|
|
|
- List<JdOrderDetails> dbJdOrderDetails = jdOrderDetailsService.list(q -> q.eq(JdOrderDetails::getJdOrderId, id));
|
|
|
- Table<Long, Long, JdOrderDetails> jdOrderDetailsTable = HashBasedTable.create();
|
|
|
- jdOrderDetailsList.forEach(item -> jdOrderDetailsTable.put(item.getOrderId(), item.getWareId(), item));
|
|
|
-
|
|
|
- for (JdOrderDetails dbJdOrderDetail : dbJdOrderDetails) {
|
|
|
- JdOrderDetails onlineJdOrderDetails = jdOrderDetailsTable.get(dbJdOrderDetail.getOrderId(), dbJdOrderDetail.getWareId());
|
|
|
- dbJdOrderDetail.setDeliverCenterId(onlineJdOrderDetails.getDeliverCenterId());
|
|
|
- dbJdOrderDetail.setDeliverCenterName(onlineJdOrderDetails.getDeliverCenterName());
|
|
|
- dbJdOrderDetail.setWareName(onlineJdOrderDetails.getWareName());
|
|
|
- dbJdOrderDetail.setPurchasePrice(onlineJdOrderDetails.getPurchasePrice());
|
|
|
- dbJdOrderDetail.setOriginalNum(onlineJdOrderDetails.getOriginalNum());
|
|
|
- dbJdOrderDetail.setConfirmNum(onlineJdOrderDetails.getConfirmNum());
|
|
|
- dbJdOrderDetail.setActualNum(onlineJdOrderDetails.getActualNum());
|
|
|
- dbJdOrderDetail.setNonDeliveryReason(onlineJdOrderDetails.getNonDeliveryReason());
|
|
|
- dbJdOrderDetail.setTotoalPrice(onlineJdOrderDetails.getTotoalPrice());
|
|
|
- dbJdOrderDetail.setStoreId(onlineJdOrderDetails.getStoreId());
|
|
|
- dbJdOrderDetail.setStoreName(onlineJdOrderDetails.getStoreName());
|
|
|
- dbJdOrderDetail.setHasEx(onlineJdOrderDetails.getHasEx());
|
|
|
- dbJdOrderDetail.setExDesc(onlineJdOrderDetails.getExDesc());
|
|
|
- dbJdOrderDetail.setHandleStatus(onlineJdOrderDetails.getHandleStatus());
|
|
|
- }
|
|
|
-
|
|
|
- if (hasExFlag) {
|
|
|
- jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
- jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
- } else {
|
|
|
- jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
|
|
|
- jdOrder.setHandleStatus(null);
|
|
|
- }
|
|
|
-
|
|
|
- jdOrderDetailsService.updateBatchById(dbJdOrderDetails);
|
|
|
- }
|
|
|
- jdOrderService.updateById(jdOrder);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
private boolean dealOrderDetail(JdOrder jdOrder, List<JdOrderDetails> jdOrderDetailsList) throws Exception {
|
|
|
|
|
|
DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
|
|
@@ -710,121 +833,6 @@ public class JdApiServiceImpl implements JdApiService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 获取京东订单
|
|
|
- */
|
|
|
- private void saveJdOrder(JdInfoVo jdInfoVo) throws Exception {
|
|
|
- //获取开始同步的时间
|
|
|
- Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
- Date endTime = new Date();
|
|
|
-
|
|
|
- //根据下单时间获取数据库里最后一个订单
|
|
|
- JdOrder lastJdOrder = jdOrderService.getOne(q -> q.orderByDesc(JdOrder::getCreatedDate));
|
|
|
- if (ObjectUtil.isNotNull(lastJdOrder)) {
|
|
|
- startTime = lastJdOrder.getCreatedDate();
|
|
|
- }
|
|
|
-
|
|
|
- List<PurchaseOrderDto> purchaseOrderDtoList = getJdOrderInfo(startTime, endTime, null);
|
|
|
-
|
|
|
- if (CollectionUtil.isEmpty(purchaseOrderDtoList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- // 订单id集合
|
|
|
- Set<Long> orderIdSet = purchaseOrderDtoList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toSet());
|
|
|
-
|
|
|
- // 获取已同步的京东订单id
|
|
|
- Set<Long> existOrderIdSet = jdOrderService.list(q -> q.select(JdOrder::getOrderId).in(JdOrder::getOrderId, orderIdSet))
|
|
|
- .stream().map(JdOrder::getOrderId).collect(Collectors.toSet());
|
|
|
-
|
|
|
- // 过滤已同步的订单
|
|
|
- purchaseOrderDtoList = purchaseOrderDtoList.stream()
|
|
|
- .filter(item -> !existOrderIdSet.contains(item.getOrderId()))
|
|
|
- .collect(Collectors.toList());
|
|
|
-
|
|
|
- // 转为系统自己的实体类
|
|
|
- List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderDtoList, JdOrder.class);
|
|
|
-
|
|
|
- // 获取明细
|
|
|
- List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
|
|
|
-
|
|
|
- for (JdOrder jdOrder : jdOrderList) {
|
|
|
- jdOrder.setId(IdWorker.getId());
|
|
|
- jdOrder.setTenantId(RunParamConstant.tenantId);
|
|
|
- boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
|
|
|
- if (hasExFlag) {
|
|
|
- jdOrder.setHasEx(RunParamConstant.EXCEPTION);
|
|
|
- jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 将数据存储到库
|
|
|
- jdOrderService.saveBatch(jdOrderList);
|
|
|
- jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取京东退货订单
|
|
|
- */
|
|
|
- private void getJdBackOrder(JdInfoVo jdInfoVo) throws Exception {
|
|
|
- Date startTime = jdInfoVo.getInitQueryDate();
|
|
|
- Date endTime = new Date();
|
|
|
- //根据下单时间获取数据库里最后一个订单
|
|
|
- JdBack lastJdBack = jdBackService.getOne(q -> q.orderByDesc(JdBack::getCreateDate));
|
|
|
- if (ObjectUtil.isNotNull(lastJdBack)) {
|
|
|
- //将最后一个下单时间设置为开始时间
|
|
|
- startTime = lastJdBack.getCreateDate();
|
|
|
- }
|
|
|
-
|
|
|
- List<RoDto> roDtoList = getJdBackInfo(startTime, endTime);
|
|
|
- if (CollectionUtil.isEmpty(roDtoList)) {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- //过滤出不在数据库里的新数据
|
|
|
- List<Long> returnIds = roDtoList.stream().map(RoDto::getReturnId).collect(Collectors.toList());
|
|
|
- List<Long> existReturnIds = jdBackService.list(q -> q.select(JdBack::getReturnId).in(JdBack::getReturnId, returnIds))
|
|
|
- .stream().map(JdBack::getReturnId).collect(Collectors.toList());
|
|
|
- roDtoList = roDtoList.stream().filter(item -> !existReturnIds.contains(item.getReturnId())).collect(Collectors.toList());
|
|
|
-
|
|
|
- //转成我们自己的实体类
|
|
|
- List<JdBack> jdBackList = BeanUtil.copyToList(roDtoList, JdBack.class);
|
|
|
-
|
|
|
- //获取明细
|
|
|
- List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
|
|
|
-
|
|
|
- Set<Long> wareIdSet = new HashSet<>();
|
|
|
-
|
|
|
- for (JdBack jdBack : jdBackList) {
|
|
|
- jdBack.setId(IdWorker.getId());
|
|
|
-
|
|
|
- VcGetReturnOrderDetailRequest request = new VcGetReturnOrderDetailRequest();
|
|
|
- request.setReturnId(jdBack.getReturnId());
|
|
|
- VcGetReturnOrderDetailResponse response = jdClient.execute(request);
|
|
|
- DetailResultDto detailResultDto = response.getDetailResultDto();
|
|
|
- List<JdBackDetails> jdBackDetails = BeanUtil.copyToList(detailResultDto.getDetailDtoList(), JdBackDetails.class);
|
|
|
-
|
|
|
- jdBackDetails.forEach(item -> {
|
|
|
- item.setJdBackId(jdBack.getId());
|
|
|
- wareIdSet.add(item.getWareId());
|
|
|
- });
|
|
|
- JdBackDetailsList.addAll(jdBackDetails);
|
|
|
- }
|
|
|
-
|
|
|
- // 赋值产品编码
|
|
|
- try {
|
|
|
- DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
|
|
|
- Map<String, Long> map = productInfoService.mapKV(ProductInfo::getCustomCode, BaseIdPo::getId,
|
|
|
- q -> q.in(ProductInfo::getCustomCode, wareIdSet));
|
|
|
- JdBackDetailsList.forEach(item -> item.setProductId(map.get(item.getWareId().toString())));
|
|
|
- } finally {
|
|
|
- DynamicDataSourceContextHolder.poll();
|
|
|
- }
|
|
|
-
|
|
|
- jdBackService.saveBatch(jdBackList);
|
|
|
- jdBackDetailsService.saveBatch(JdBackDetailsList);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
* 将jd返回的json对象转换成jdInfoVo
|
|
|
*/
|
|
|
private void convertJdInfoVO(JSONObject responseJson, JdInfoVo jdInfoVo) {
|