Browse Source

订单修正

1018653686@qq.com 1 year ago
parent
commit
27939f7325

+ 78 - 70
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdApiServiceImpl.java

@@ -73,7 +73,8 @@ public class JdApiServiceImpl implements JdApiService {
 
     private static final String DOMAIN = "http://www.victoriatourist.ltd/prod-api";
     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 REFRESH_TOKEN = "refresh_token";
 
@@ -242,11 +243,7 @@ public class JdApiServiceImpl implements JdApiService {
                 ThreadUtil.safeSleep(10000);
                 continue;
             }
-            try {
-                getJdOrderList(jdClient, jdInfoVo);
-            }catch (Exception e){
-                log.error("获取京东订单列表出错:" + e.getMessage(), e);
-            }
+            getJdOrderList(jdClient, jdInfoVo);
             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){
         String code = response.getCode();
-        if(!"200".equals(code)){
+        if(!"0".equals(code)){
             log.error("获取{}失败:{}", method ,response.getZhDesc());
             throw new RuntimeException("获取"+ method +"失败:" + response.getZhDesc());
         }

+ 2 - 0
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdOrderServiceImpl.java

@@ -691,6 +691,8 @@ public class JdOrderServiceImpl extends ServiceImpl<JdOrderMapper, JdOrder> impl
 
     @Override
     public JdOrder getLastJdOrder() {
+        Page<JdOrder> page = this.page(new Page<>(1, 1), q -> q.isNotNull(JdOrder::getCreatedDate).orderByDesc(JdOrder::getCreatedDate));
+        List<JdOrder> list = this.list(q -> q.isNotNull(JdOrder::getCreatedDate).orderByDesc(JdOrder::getCreatedDate));
         JdOrder one = this.getOne(q->q.isNotNull(JdOrder::getCreatedDate).orderByDesc(JdOrder::getCreatedDate));
         return one;
     }