24282 9 月之前
父节点
当前提交
9070b645c3

+ 4 - 2
hx-purchase/src/main/java/com/fjhx/purchase/service/purchase/impl/PurchaseServiceImpl.java

@@ -777,7 +777,9 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
         //预处理采购明细信息
         List<Long> purchaseIds = list.stream().map(Purchase::getId).distinct().collect(Collectors.toList());
 
-        List<PurchaseDetail> purchaseDetailLists = purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIds));
+        List<PurchaseDetail> purchaseDetailLists = purchaseIds.isEmpty() ? Collections.emptyList() :
+                purchaseDetailService.list(q -> q.in(PurchaseDetail::getPurchaseId, purchaseIds));
+
         productInfoService.attributeAssign(purchaseDetailLists, PurchaseDetail::getBussinessId, (item, productInfo) -> {
             //产品编号
             item.setProductCode(productInfo.getCustomCode());
@@ -820,7 +822,7 @@ public class PurchaseServiceImpl extends ServiceImpl<PurchaseMapper, Purchase>
             purchaseBackDetails.addAll(wdlyService.getPurchaseBackDetails(longs));
 
         }
-//        List<PurchaseBackDetailsBo> purchaseBackDetails = wdlyService.getPurchaseBackDetails(purchaseDetailIds);
+
         Map<Long, List<PurchaseBackDetailsBo>> purchaseBackDetailsMap = purchaseBackDetails.stream()
                 .collect(Collectors.groupingBy(PurchaseBackDetailsBo::getPurchaseDetailsId));
 

+ 144 - 162
hx-victoriatourist/src/main/java/com/fjhx/victoriatourist/service/jd/impl/JdApiServiceImpl.java

@@ -284,9 +284,12 @@ public class JdApiServiceImpl implements JdApiService {
         if (ObjectUtil.isNull(jdInfoVo)) {
             return;
         }
-
-        saveJdOrder(jdInfoVo);
-        log.info("京东订单采集完成");
+        try {
+            saveJdOrder(jdInfoVo);
+            log.info("京东订单采集完成");
+        } catch (Exception e) {
+            log.error("京东订单采集出错:{}", e.getMessage(), e);
+        }
     }
 
     /**
@@ -298,9 +301,12 @@ public class JdApiServiceImpl implements JdApiService {
         if (ObjectUtil.isNull(jdInfoVo)) {
             return;
         }
-
-        getJdBackOrder(jdInfoVo);
-        log.info("京东退货单采集完成");
+        try {
+            getJdBackOrder(jdInfoVo);
+            log.info("京东退货单采集完成");
+        } catch (Exception e) {
+            log.error("京东退货单采集出错:{}", e.getMessage(), e);
+        }
     }
 
     /**
@@ -312,9 +318,12 @@ public class JdApiServiceImpl implements JdApiService {
         if (ObjectUtil.isNull(jdInfoVo)) {
             return;
         }
-
-        handleRefreshDate();
-        log.info("刷新京东状态完成");
+        try {
+            handleRefreshDate();
+            log.info("刷新京东状态完成");
+        } catch (Exception e) {
+            log.error("刷新京东状态失败", e);
+        }
     }
 
     /**
@@ -331,8 +340,6 @@ public class JdApiServiceImpl implements JdApiService {
         } finally {
             DynamicDataSourceContextHolder.poll();
         }
-
-
         log.info("字典初始化完成");
     }
 
@@ -401,8 +408,7 @@ public class JdApiServiceImpl implements JdApiService {
     /**
      * 处理刷新token数据
      */
-    private void handleRefreshDate() {
-
+    private void handleRefreshDate() throws Exception {
         Date endDate = new Date();
         Date startDate = DateUtil.offsetMonth(endDate, -3);
 
@@ -422,63 +428,56 @@ public class JdApiServiceImpl implements JdApiService {
         // 2.按50个订单查询京东订单状态
         List<List<JdOrder>> splitJdOrder = ListUtil.split(jdOrders, 50);
 
-        try {
-
-            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());
-                        }
+        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);
 
-                        if (hasExFlag) {
-                            jdOrder.setHasEx(RunParamConstant.EXCEPTION);
-                            jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
-                        } else {
-                            jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
-                            jdOrder.setHandleStatus(null);
-                        }
+            //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());
+                    }
 
-                        jdOrderDetailsService.updateBatchById(dbJdOrderDetails);
+                    if (hasExFlag) {
+                        jdOrder.setHasEx(RunParamConstant.EXCEPTION);
+                        jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
+                    } else {
+                        jdOrder.setHasEx(RunParamConstant.NO_EXCEPTION);
+                        jdOrder.setHandleStatus(null);
                     }
-                    jdOrderService.updateById(jdOrder);
-                }
 
+                    jdOrderDetailsService.updateBatchById(dbJdOrderDetails);
+                }
+                jdOrderService.updateById(jdOrder);
             }
-
-        } catch (Exception e) {
-            log.error("刷新京东状态失败", e);
         }
     }
 
@@ -496,16 +495,14 @@ public class JdApiServiceImpl implements JdApiService {
             List<PurchaseAllocationDetailDto> purchaseAllocationDetailList = josDetailResultDto.getPurchaseAllocationDetailList();
             List<JdOrderDetails> jdOrderDetails = BeanUtil.copyToList(purchaseAllocationDetailList, JdOrderDetails.class);
 
+            Set<String> wareIdSet = jdOrderDetails.stream().map(item -> item.getWareId().toString()).collect(Collectors.toSet());
+            Map<String, Long> productMap = productInfoService.mapKV(ProductInfo::getCustomCode, ProductInfo::getId,
+                    q -> q.in(ProductInfo::getCustomCode, wareIdSet));
+
             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());
-                }
+                item.setProductId(productMap.get(item.getWareId().toString()));
+
                 if (JdParamConstant.JD_ORDER_STATE_FINISH.equals(jdOrder.getState())) {
                     //如果京东采购单状态 = 已完成  &  明细数据中存在 实收 != 回告 & 分流类型 == 仓库发货(10),则给京东采购单打上【异常】标记
                     //如果实收>回告,则:给对应的明细打上【多货】标记;如果实收<回告,则:给对应的明细打上【少货】标记
@@ -657,7 +654,7 @@ public class JdApiServiceImpl implements JdApiService {
     /**
      * 获取京东订单
      */
-    private void saveJdOrder(JdInfoVo jdInfoVo) {
+    private void saveJdOrder(JdInfoVo jdInfoVo) throws Exception {
         //获取开始同步的时间
         Date startTime = jdInfoVo.getInitQueryDate();
         Date endTime = new Date();
@@ -668,120 +665,105 @@ public class JdApiServiceImpl implements JdApiService {
             startTime = lastJdOrder.getCreatedDate();
         }
 
-        try {
-            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());
+        List<PurchaseOrderDto> purchaseOrderDtoList = getJdOrderInfo(startTime, endTime, null);
 
-            // 过滤已同步的订单
-            purchaseOrderDtoList = purchaseOrderDtoList.stream()
-                    .filter(item -> !existOrderIdSet.contains(item.getOrderId()))
-                    .collect(Collectors.toList());
+        if (CollectionUtil.isEmpty(purchaseOrderDtoList)) {
+            return;
+        }
 
-            //转为系统自己的实体类
-            List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderDtoList, JdOrder.class);
+        // 订单id集合
+        Set<Long> orderIdSet = purchaseOrderDtoList.stream().map(PurchaseOrderDto::getOrderId).collect(Collectors.toSet());
 
-            //获取明细
-            List<JdOrderDetails> jdOrderDetailsList = new ArrayList<>();
+        // 获取已同步的京东订单id
+        Set<Long> existOrderIdSet = jdOrderService.list(q -> q.select(JdOrder::getOrderId).in(JdOrder::getOrderId, orderIdSet))
+                .stream().map(JdOrder::getOrderId).collect(Collectors.toSet());
 
-            for (JdOrder jdOrder : jdOrderList) {
-                jdOrder.setId(IdWorker.getId());
-                jdOrder.setTenantId(RunParamConstant.tenantId);
+        // 过滤已同步的订单
+        purchaseOrderDtoList = purchaseOrderDtoList.stream()
+                .filter(item -> !existOrderIdSet.contains(item.getOrderId()))
+                .collect(Collectors.toList());
 
-                boolean hasExFlag = dealOrderDetail(jdOrder, jdOrderDetailsList);
+        // 转为系统自己的实体类
+        List<JdOrder> jdOrderList = BeanUtil.copyToList(purchaseOrderDtoList, JdOrder.class);
 
-                if (hasExFlag) {
-                    jdOrder.setHasEx(RunParamConstant.EXCEPTION);
-                    jdOrder.setHandleStatus(RunParamConstant.EXCEPTION_STATE_UNTREATED);
-                }
+        // 获取明细
+        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);
-
-        } catch (Exception e) {
-            log.error("获取京东订单出错:{}", e.getMessage(), e);
         }
 
+        // 将数据存储到库
+        jdOrderService.saveBatch(jdOrderList);
+        jdOrderDetailsService.saveOrUpdateBatch(jdOrderDetailsList);
     }
 
     /**
      * 获取京东退货订单
      */
-    private void getJdBackOrder(JdInfoVo jdInfoVo) {
-        try {
-            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());
+    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<JdBack> jdBackList = BeanUtil.copyToList(roDtoList, JdBack.class);
+        List<RoDto> roDtoList = getJdBackInfo(startTime, endTime);
+        if (CollectionUtil.isEmpty(roDtoList)) {
+            return;
+        }
 
-            //获取明细
-            List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
+        //过滤出不在数据库里的新数据
+        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());
 
-            Set<Long> wareIdSet = new HashSet<>();
+        //转成我们自己的实体类
+        List<JdBack> jdBackList = BeanUtil.copyToList(roDtoList, JdBack.class);
 
-            for (JdBack jdBack : jdBackList) {
-                jdBack.setId(IdWorker.getId());
+        //获取明细
+        List<JdBackDetails> JdBackDetailsList = new ArrayList<>();
 
-                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);
+        Set<Long> wareIdSet = new HashSet<>();
 
-                jdBackDetails.forEach(item -> {
-                    item.setJdBackId(jdBack.getId());
-                    wareIdSet.add(item.getWareId());
-                });
-                JdBackDetailsList.addAll(jdBackDetails);
-            }
+        for (JdBack jdBack : jdBackList) {
+            jdBack.setId(IdWorker.getId());
 
-            // 赋值产品编码
-            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();
-            }
+            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);
 
-            jdBackService.saveBatch(jdBackList);
-            jdBackDetailsService.saveBatch(JdBackDetailsList);
+            jdBackDetails.forEach(item -> {
+                item.setJdBackId(jdBack.getId());
+                wareIdSet.add(item.getWareId());
+            });
+            JdBackDetailsList.addAll(jdBackDetails);
+        }
 
-        } catch (Exception e) {
-            log.error("获取京东退货订单出错:{}", e.getMessage(), e);
+        // 赋值产品编码
+        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);
     }
 
     /**