Browse Source

京东订单,详情,退货单,详情,字典初始化,状态更新

1018653686@qq.com 1 year ago
parent
commit
c7e15fef3c

+ 0 - 1
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/JdOrderService.java

@@ -66,5 +66,4 @@ public interface JdOrderService extends BaseService<JdOrder> {
 
     void tellBackOrer(JdOrderDto jdOrderDto);
 
-    JdOrder getLastJdOrder();
 }

+ 151 - 118
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdApiServiceImpl.java

@@ -226,7 +226,7 @@ public class JdApiServiceImpl implements JdApiService {
      * @author hj
      * @date 2023/12/13 22:30
      */
-    @PostConstruct
+//    @PostConstruct
     public void startJdOrder(){
         JdClient jdClient = jdClientFactory.getJdClient();
         while (true){
@@ -244,6 +244,7 @@ public class JdApiServiceImpl implements JdApiService {
                 continue;
             }
             getJdOrderList(jdClient, jdInfoVo);
+            log.info("京东订单采集完成");
             ThreadUtil.safeSleep(10000);
         }
     }
@@ -255,6 +256,7 @@ public class JdApiServiceImpl implements JdApiService {
      * @author hj
      * @date 2023/12/13 22:30
      */
+//    @PostConstruct
     public void startJdBackOrder(){
         JdClient jdClient = jdClientFactory.getJdClient();
         while (true){
@@ -271,11 +273,8 @@ public class JdApiServiceImpl implements JdApiService {
                 ThreadUtil.safeSleep(10000);
                 continue;
             }
-            try {
-                getJdBackOrder(jdClient, jdInfoVo);
-            }catch (Exception e){
-                log.error("获取京东订单列表出错:" + e.getMessage(), e);
-            }
+            getJdBackOrder(jdClient, jdInfoVo);
+            log.info("京东退货单采集完成");
             ThreadUtil.safeSleep(10000);
         }
     }
@@ -292,10 +291,12 @@ public class JdApiServiceImpl implements JdApiService {
     /**
      * 初始化租户字典表
      */
+//    @PostConstruct
     public void initTenantDict(){
         JdClient jdClient = jdClientFactory.getJdClient();
         handleDeliveryCenter(jdClient);
         handleComponent(jdClient);
+        System.out.println("字典初始化完成");
     }
 
     //订单状态:审核不通过/供应商驳回/已完成
@@ -309,6 +310,7 @@ public class JdApiServiceImpl implements JdApiService {
      * 刷新京东状态
      * @param
      */
+    @PostConstruct
     public void refreshJdState(){
         JdClient jdClient = jdClientFactory.getJdClient();
         while (true){
@@ -325,35 +327,48 @@ public class JdApiServiceImpl implements JdApiService {
                 ThreadUtil.safeSleep(10000);
                 continue;
             }
-            try {
-                handleRefreshDate(jdClient);
-            }catch (Exception e){
-                log.error("获取京东订单列表出错:" + e.getMessage(), e);
-            }
+            handleRefreshDate(jdClient);
+            log.info("刷新京东状态完成");
             ThreadUtil.safeSleep(10000);
         }
     }
 
 
-    public void handleRefreshDate(JdClient jdClient) throws Exception {
-        //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
-        int pageIndex = 1;
-        long totalPage = 1;
-        int pageSize = 30;
-        Page<JdOrder> page = new Page<>(1, 30);
-        do{
-            Page<JdOrder> jdOrderPage = jdOrderService.page(page, q->q.notIn(JdOrder::getState, notIn).orderByAsc(JdOrder::getCreatedDate));
-            //2.按每30个订单查询京东订单状态
-            totalPage = jdOrderPage.getTotal();
-            List<JdOrder> records = jdOrderPage.getRecords();
-            List<Long> orderIds = records.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
-            JOSOrderResultDto josOrderResultDto = getJdOrderInfo(pageIndex, pageSize + 20, records.get(0).getCreatedDate(), DateUtil.offsetDay(records.get(0).getCreatedDate(), 90), jdClient, orderIds);
-            List<PurchaseOrderDto> purchaseOrderList = josOrderResultDto.getPurchaseOrderList();
-            //3.更新订单信息
-            for (PurchaseOrderDto purchaseOrderDto : purchaseOrderList) {
-                jdOrderService.lambdaUpdate().eq(JdOrder::getOrderId, purchaseOrderDto.getOrderId());
-            }
-        }while (pageIndex <= totalPage);
+    public void handleRefreshDate(JdClient jdClient) {
+        DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
+        SecurityUtils.setTenantId(tenantId);
+        try {
+            //1.查询列表订单状态不为审核不通过/供应商驳回/已完成
+            int pageIndex = 1;
+            long totalPage = 1;
+            int pageSize = 30;
+            Page<JdOrder> page = new Page<>(1, 30);
+            do {
+                Page<JdOrder> jdOrderPage = jdOrderService.lambdaQuery().notIn(JdOrder::getState, notIn).orderByAsc(JdOrder::getCreatedDate).page(page);
+                //2.按每30个订单查询京东订单状态
+                List<JdOrder> records = jdOrderPage.getRecords();
+                totalPage = (jdOrderPage.getTotal() / pageSize) + (jdOrderPage.getTotal() % pageSize > 0 ? 1 : 0);
+                List<Long> orderIds = records.stream().map(JdOrder::getOrderId).collect(Collectors.toList());
+                JOSOrderResultDto josOrderResultDto = getJdOrderInfo(pageIndex, pageSize + 20, records.get(0).getCreatedDate(), DateUtil.offsetDay(records.get(0).getCreatedDate(), 90), jdClient, orderIds);
+                List<PurchaseOrderDto> purchaseOrderList = josOrderResultDto.getPurchaseOrderList();
+                List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderList, JdOrder.class);
+                Map<Long, JdOrder> collect = records.stream().collect(Collectors.toMap(JdOrder::getOrderId, o -> o));
+                //3.更新订单信息
+                for (JdOrder jdOrder : jdOrderList) {
+                    Long id = collect.get(jdOrder.getOrderId()).getId();
+                    jdOrder.setId(id);
+                    System.out.println(123);
+                    DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
+                    jdOrderService.saveOrUpdate(jdOrder);
+                }
+                pageIndex++;
+            } while (pageIndex <= totalPage);
+        }catch (Exception e){
+            log.error("刷新京东状态失败", e);
+        }finally {
+            DynamicDataSourceContextHolder.poll();
+            SecurityUtils.clearTenantId();
+        }
     }
 
     /**
@@ -378,6 +393,9 @@ public class JdApiServiceImpl implements JdApiService {
                 for (Component component : arg89) {
                     commonDictDataList.add(new CommonDictData(component.getKey(), component.getName()));
                 }
+                if ("orderAttribute".equals(k)){
+                    System.out.println(123);
+                }
                 handleDictData(commonDictDataList, dictTenantType);
 
             } catch (Exception e) {
@@ -492,44 +510,46 @@ public class JdApiServiceImpl implements JdApiService {
 
                 //处理数据(过滤已存在的数据)
                 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);
+                if(CollectionUtil.isNotEmpty(jdOrderIds)){
+                    //获取已同步的京东订单id
+                    List<Long> existOrderIds = jdOrderService.lambdaQuery().select(JdOrder::getOrderId).in(JdOrder::getOrderId, jdOrderIds).list().stream().map(JdOrder::getOrderId).collect(Collectors.toList());
+                    //过滤出未同步的数据
+                    List<PurchaseOrderDto> purchaseOrderListFilter = purchaseOrderList.stream().filter(item -> !existOrderIds.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);
                 }
-                //            //赋值租户id
-                //            jdOrderList.forEach(item -> item.setTenantId(tenantId));
-                DynamicDataSourceContextHolder.push(SourceConstant.VICTORIATOURIST);
-                jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
                 pageIndex++;
             } while (pageIndex <= totalPage);
         } catch (Exception e){
@@ -545,59 +565,72 @@ public class JdApiServiceImpl implements JdApiService {
     /**
      * 获取京东退货订单
      */
-    private void getJdBackOrder(JdClient client, JdInfoVo jdInfoVo) throws Exception {
-        int pageIndex = 1;
-        int totalPage = 1;
-        int pageSize = 50;
-        do {
-            Date startTime = jdInfoVo.getInitQueryDate();
-            Date endTime = new Date();
-            //根据下单时间获取数据库里最后一个订单
-            JdBack lastJdBack = jdBackService.getOne(q -> q.isNotNull(JdBack::getCreateDate).orderByDesc(JdBack::getCreateDate));
-            if (ObjectUtil.isNotEmpty(lastJdBack)) {
-                //将最后一个下单时间减1个小时设置为开始时间
-                startTime = DateUtil.offsetHour(lastJdBack.getCreateDate(), -1);
-            }
-            //计算总页数
-            RoResultDto jdBackOrderInfo = getJdBackInfo(pageIndex, pageSize, startTime, endTime, client);
-            totalPage = (jdBackOrderInfo.getRecordCount()/pageSize)+(jdBackOrderInfo.getRecordCount()%pageSize>0?1:0);
-            Integer recordCount = jdBackOrderInfo.getRecordCount();
-            List<RoDto> roDtoList = jdBackOrderInfo.getRoDtoList();
-            //京东回来的数据是按时间倒序的,使用reverse方法将list中的数据翻转为正序
-            Collections.reverse(roDtoList);
-
-            //过滤出不在数据库里的新数据
-            List<Long> returnIds = roDtoList.stream().map(RoDto::getReturnId).collect(Collectors.toList());
-            List<Long> existReturnIds = jdBackService.listObject(JdBack::getReturnId, q -> q.in(JdBack::getReturnId, returnIds));
-            roDtoList = roDtoList.stream().filter(item -> !existReturnIds.contains(item.getReturnId())).collect(Collectors.toList());
-            //转成我们自己的实体类
-            List<JdBack> jdBackList = BeanUtil.copyToList(roDtoList, JdBack.class);
-            jdBackService.saveBatch(jdBackList);
-//            //获取明细
-            List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
-            for (JdBack jdBack : jdBackList) {
-                VcGetReturnOrderDetailRequest request = new VcGetReturnOrderDetailRequest();
-                request.setReturnId(jdBack.getReturnId());
-                VcGetReturnOrderDetailResponse response = client.execute(request);
-                DetailResultDto detailResultDto = response.getDetailResultDto();
+    private void getJdBackOrder(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();
+                //根据下单时间获取数据库里最后一个订单
+                JdBack lastJdBack = jdBackService.lambdaQuery().isNotNull(JdBack::getCreateDate).orderByDesc(JdBack::getCreateDate).last("limit 1").oneOpt().orElse(null);
+                if (ObjectUtil.isNotNull(lastJdBack)) {
+                    //将最后一个下单时间减1个小时设置为开始时间
+                    startTime = DateUtil.offsetHour(lastJdBack.getCreateDate(), -1);
+                }
+                //计算总页数
+                RoResultDto jdBackOrderInfo = getJdBackInfo(pageIndex, pageSize, startTime, endTime, client);
+                totalPage = (jdBackOrderInfo.getRecordCount() / pageSize) + (jdBackOrderInfo.getRecordCount() % pageSize > 0 ? 1 : 0);
 
-                List<JdBackDetails> jdBackDetails = BeanUtil.copyToList(detailResultDto.getDetailDtoList(), JdBackDetails.class);
-                jdBackDetails.forEach(item -> {
-                    item.setJdBackId(jdBack.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());
+                //京东回来的数据是按时间倒序的,使用reverse方法将list中的数据翻转为正序
+                List<RoDto> roDtoList = jdBackOrderInfo.getRoDtoList();
+                Collections.reverse(roDtoList);
+
+                //过滤出不在数据库里的新数据
+                List<Long> returnIds = roDtoList.stream().map(RoDto::getReturnId).collect(Collectors.toList());
+                if(CollectionUtil.isNotEmpty(returnIds)){
+                    List<Long> existReturnIds = jdBackService.lambdaQuery().select(JdBack::getReturnId).in(JdBack::getReturnId, returnIds).list().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);
+                    //赋值租户id
+                    //jdBackList.forEach(item -> item.setTenantId(tenantId));
+                    jdBackService.saveBatch(jdBackList);
+                    //获取明细
+                    List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
+                    for (JdBack jdBack : jdBackList) {
+                        VcGetReturnOrderDetailRequest request = new VcGetReturnOrderDetailRequest();
+                        request.setReturnId(jdBack.getReturnId());
+                        VcGetReturnOrderDetailResponse response = client.execute(request);
+                        DetailResultDto detailResultDto = response.getDetailResultDto();
+                        List<JdBackDetails> jdBackDetails = BeanUtil.copyToList(detailResultDto.getDetailDtoList(), JdBackDetails.class);
+                        DynamicDataSourceContextHolder.push(SourceConstant.ITEM);
+                        jdBackDetails.forEach(item -> {
+                            item.setJdBackId(jdBack.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());
+                            }
+                        });
+                        JdBackDetailsList.addAll(jdBackDetails);
                     }
-                });
-                JdBackDetailsList.addAll(jdBackDetails);
-            }
-            jdBackDetailsService.saveBatch(JdBackDetailsList);
-            pageIndex++;
-        } while (pageIndex <= totalPage);
+                    jdBackDetailsService.saveBatch(JdBackDetailsList);
+                }
+                pageIndex++;
+            } while (pageIndex <= totalPage);
+        }catch (Exception e){
+            log.error("获取京东退货订单出错:" + e.getMessage(), e);
+        }finally {
+            SecurityUtils.clearTenantId();
+            DynamicDataSourceContextHolder.poll();
+        }
 
     }
 

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

@@ -689,11 +689,4 @@ 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;
-    }
 }