From 8ffeb751b3a694e8d1cb6a21bec855f6c49b31b6 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期五, 07 二月 2025 15:38:46 +0800
Subject: [PATCH] 修改物流信息导入模板

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  306 +++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 238 insertions(+), 68 deletions(-)

diff --git a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
index 117cf9b..81f0d2c 100644
--- a/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java
@@ -1,13 +1,12 @@
 package com.ruoyi.order.service.impl;
 
-import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.account.api.feignClient.*;
 import com.ruoyi.account.api.model.*;
+import com.ruoyi.common.core.constant.ExpressCompanyMap;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.ServiceException;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -21,32 +20,47 @@
 import com.ruoyi.order.model.OrderBalancePayment;
 import com.ruoyi.order.model.OrderGood;
 import com.ruoyi.order.model.RefundPass;
-import com.ruoyi.order.service.*;
+import com.ruoyi.order.service.CommissionService;
+import com.ruoyi.order.service.OrderBalancePaymentService;
+import com.ruoyi.order.service.OrderService;
+import com.ruoyi.order.service.RefundPassService;
 import com.ruoyi.order.util.ExpressDeliveryUtil;
 import com.ruoyi.order.util.payment.PaymentUtil;
 import com.ruoyi.order.util.payment.model.RefundCallbackResult;
 import com.ruoyi.order.util.payment.model.RefundResult;
 import com.ruoyi.order.util.vo.MapTrackKD100Vo;
 import com.ruoyi.order.util.vo.QueryKD100ListVo;
-import com.ruoyi.order.util.vo.QueryKD100Vo;
 import com.ruoyi.order.vo.*;
 import com.ruoyi.other.api.domain.*;
 import com.ruoyi.other.api.feignClient.*;
 import com.ruoyi.system.api.domain.SysUser;
 import com.ruoyi.system.api.feignClient.SysUserClient;
 import com.ruoyi.system.api.model.LoginUser;
+import lombok.SneakyThrows;
+import org.apache.poi.ss.usermodel.CellType;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.xssf.streaming.SXSSFWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import java.io.IOException;
+import java.io.InputStream;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
+import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
@@ -112,7 +126,9 @@
     
     @Resource
     private UserChangeLogClient userChangeLogClient;
-    
+
+    @Resource
+    private RegionClient regionClient;
     
 
 
@@ -295,56 +311,113 @@
      */
     @Override
     public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) {
-        Long userid = tokenService.getLoginUser().getUserid();
-        SysUser sysUser = sysUserClient.getSysUser(userid).getData();
-        if(2 == sysUser.getRoleType()){
+        Long userId = tokenService.getLoginUser().getUserid();
+        SysUser sysUser = sysUserClient.getSysUser(userId).getData();
+
+        // 设置店铺ID
+        if (sysUser.getRoleType() == 2) {
             orderPageList.setShopId(sysUser.getObjectId());
         }
-        //搜索条件,用户姓名
-        if(StringUtils.isNotEmpty(orderPageList.getUserName())){
-            List<AppUser> data = appUserClient.getAppUserByName(orderPageList.getUserName()).getData();
-            List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if(null != orderPageList.getAppUserIds()){
-                List<Long> appUserIds = orderPageList.getAppUserIds();
-                appUserIds.addAll(collect);
-                orderPageList.setAppUserIds(appUserIds);
-            }else{
-                orderPageList.setAppUserIds(collect);
-            }
-        }
-        //搜索条件,用户电话
-        if(StringUtils.isNotEmpty(orderPageList.getPhone())){
-            List<AppUser> data = appUserClient.getAppUserByPhone(orderPageList.getPhone()).getData();
-            List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if(null != orderPageList.getAppUserIds()){
-                List<Long> appUserIds = orderPageList.getAppUserIds();
-                appUserIds.addAll(collect);
-                orderPageList.setAppUserIds(appUserIds);
-            }else{
-                orderPageList.setAppUserIds(collect);
-            }
-        }
-        
-        PageInfo<OrderPageListVo> pageInfo = new PageInfo(orderPageList.getPageCurr(), orderPageList.getPageSize());
-        
-        List<OrderPageListVo> list = this.baseMapper.getOrderPageList(pageInfo, orderPageList);
-        for (OrderPageListVo orderPageListVo : list) {
-            Long appUserId = orderPageListVo.getAppUserId();
-            AppUser appUser = appUserClient.getAppUserById(appUserId);
-            if(null != appUser){
-                orderPageListVo.setUserName(appUser.getName());
-                orderPageListVo.setPhone(appUser.getPhone());
-            }
-            RefundPass one = refundPassService.getOne(new LambdaQueryWrapper<RefundPass>().eq(RefundPass::getOrderId, orderPageListVo.getId()).eq(RefundPass::getDelFlag, 0).last(" order by create_time desc limit 0,1"));
-            orderPageListVo.setRefundPassId(null != one ? one.getId().toString() : null);
 
-            // 平台分佣
-            List<ShopBalanceStatement> data = shopBalanceStatementClient.getShopBalanceStatementList(Arrays.asList(1, 2, 3), Long.valueOf(orderPageListVo.getId())).getData();
-            BigDecimal reduce = data.stream().map(ShopBalanceStatement::getVariableAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
-            orderPageListVo.setGetCommission(reduce);
-        }
+        // 处理用户姓名搜索条件
+        processAppUserIds(orderPageList, orderPageList.getUserName(), appUserClient::getAppUserByNameNoFilter);
+
+        // 处理用户电话搜索条件
+        processAppUserIds(orderPageList, orderPageList.getPhone(), appUserClient::getAppUserByPhoneNoFilter);
+
+        // 去重 appUserIds
+        Optional.ofNullable(orderPageList.getAppUserIds())
+                .ifPresent(ids -> orderPageList.setAppUserIds(ids.stream().distinct().collect(Collectors.toList())));
+
+        log.error("orderPageList:"+orderPageList.getAppUserIds());
+        // 分页查询订单列表
+        PageInfo<OrderPageListVo> pageInfo = new PageInfo<>(orderPageList.getPageCurr(), orderPageList.getPageSize());
+        List<OrderPageListVo> list = this.baseMapper.getOrderPageList(pageInfo, orderPageList);
+
+        // 处理订单列表中的每个订单
+        list.forEach(this::processOrderPageListVo);
+
         return pageInfo.setRecords(list);
     }
+
+
+
+    private void processAppUserIds(OrderPageList orderPageList, String searchKey, Function<String, R<List<AppUser>>> userSearchFunction) {
+        if (StringUtils.isNotEmpty(searchKey)) {
+            List<Long> userIds = Optional.ofNullable(userSearchFunction.apply(searchKey).getData())
+                    .orElse(Collections.emptyList())
+                    .stream()
+                    .map(AppUser::getId)
+                    .collect(Collectors.toList());
+
+            if (CollectionUtils.isEmpty(userIds)) {
+                return;
+            }
+
+            List<Long> existingUserIds = orderPageList.getAppUserIds();
+            if (existingUserIds != null) {
+                if (!containsAny(existingUserIds, userIds)) {
+                    return;
+                }
+                existingUserIds.addAll(userIds);
+            } else {
+                orderPageList.setAppUserIds(userIds);
+            }
+        }
+    }
+
+    private void processOrderPageListVo(OrderPageListVo orderPageListVo) {
+        Long appUserId = orderPageListVo.getAppUserId();
+        Optional.ofNullable(appUserClient.getAppUserById(appUserId))
+                .ifPresent(appUser -> {
+                    orderPageListVo.setUserName(appUser.getName());
+                    orderPageListVo.setPhone(appUser.getPhone());
+                });
+
+        Optional.ofNullable(refundPassService.getOne(new LambdaQueryWrapper<RefundPass>()
+                        .eq(RefundPass::getOrderId, orderPageListVo.getId())
+                        .eq(RefundPass::getDelFlag, 0)
+                        .orderByDesc(RefundPass::getCreateTime)
+                        .last("limit 1")))
+                .ifPresent(refundPass -> orderPageListVo.setRefundPassId(refundPass.getId().toString()));
+
+        // 平台分佣
+        BigDecimal commission = Optional.ofNullable(shopBalanceStatementClient.getShopBalanceStatementList(Arrays.asList(1, 2, 3), Long.valueOf(orderPageListVo.getId())).getData())
+                .orElse(Collections.emptyList())
+                .stream()
+                .map(ShopBalanceStatement::getVariableAmount)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+        orderPageListVo.setGetCommission(commission);
+
+        // 处理快递信息
+        Optional.ofNullable(orderPageListVo.getExpressJson())
+                .filter(expressJson -> !expressJson.equals("NULL"))
+                .ifPresent(expressJson -> {
+                    try {
+                        JSONObject jsonObject = JSONObject.parseObject(expressJson);
+                        orderPageListVo.setExpressCompany(ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com")));
+                        orderPageListVo.setExpressNum(jsonObject.getString("num"));
+                    } catch (Exception e) {
+                    }
+                });
+    }
+
+    /**
+     * 判断两个列表中是否至少有一个相同的元素
+     * 此方法用于检查两个长整型列表之间的元素交集
+     * 主要解决的问题是确定两个列表是否有共同的元素,用于避免潜在的数据不一致或错误
+     *
+     * @param list1 第一个列表,包含一系列长整型数值
+     * @param list2 第二个列表,同样包含一系列长整型数值
+     * @return 返回一个布尔值,如果两个列表中至少有一个相同的元素,则返回true,否则返回false
+     */
+    private boolean containsAny(List<Long> list1, List<Long> list2) {
+        return list1.stream().anyMatch(list2::contains) || list2.stream().anyMatch(list1::contains);
+    }
+
+
+
+
 
 
     /**
@@ -407,7 +480,7 @@
         JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
         Integer waitTime = jsonObject.getInteger("waitTime");
         redisTemplate.opsForZSet().add("order_express", order.getId(), LocalDateTime.now().plusHours(waitTime).toEpochSecond(ZoneOffset.UTC));
-    
+
         JSONObject jsonObject1 = JSON.parseObject(confirmDelivery.getCode());
         String com = jsonObject1.getString("com");
         String num = jsonObject1.getString("num");
@@ -418,7 +491,8 @@
         this.updateById(order);
         return R.ok();
     }
-    
+
+
     
     /**
      * 取消订单操作
@@ -531,8 +605,7 @@
             appUserClient.editAppUserById(appUser);
     
             //降级检测
-            boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
-            if(vipDemotion){
+            if(1 < appUser.getVipId() && appUser.getVipId() < 4){
                 appUserClient.vipDemotion(appUser.getId());
             }
             //回退优惠券状态
@@ -668,8 +741,7 @@
         appUserClient.editAppUserById(appUser);
     
         //降级检测
-        boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
-        if(vipDemotion){
+        if(1 < appUser.getVipId() && appUser.getVipId() < 4){
             appUserClient.vipDemotion(appUser.getId());
         }
 
@@ -730,18 +802,7 @@
         return R.ok();
     }
 
-    /**
-     * 会员降级检测
-     */
-    public boolean vipDemotion(Integer shopPoint, Integer vipId){
-        if(vipId == 1 || vipId > 3){
-            return false;
-        }
-        VipSetting vipSetting = vipSettingClient.getVipSetting(vipId).getData();
-        Integer vipLevelUpShopRole = vipSetting.getVipLevelUpShopRole();
-        Integer vipLevelUpShop = vipSetting.getVipLevelUpShop();
-        return 1 == vipLevelUpShopRole && shopPoint < vipLevelUpShop;
-    }
+    
     
     
     /**
@@ -816,6 +877,7 @@
         }
         List<OrderGood> orderGoods = orderGoodMapper.selectList(new LambdaQueryWrapper<OrderGood>().eq(OrderGood::getOrderId, orderId).eq(OrderGood::getDelFlag, 0));
         int sum = orderGoods.stream().mapToInt(OrderGood::getNum).sum();
+        System.out.println("111111111111222");
         orderInfo.setGoodsNum(sum);
         List<Object> goodsJson = new ArrayList<>();
         for (OrderGood orderGood : orderGoods) {
@@ -913,4 +975,112 @@
             }
         }
     }
+
+    @SneakyThrows
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void importExpress(String url) {
+        URL url1 = new URL(url);
+        try (InputStream  fileInputStream = url1.openStream()) {
+            Workbook workbook = new XSSFWorkbook(fileInputStream);
+            Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
+            int lastRowNum = sheet.getLastRowNum();
+            for (int i = 1; i <= lastRowNum; i++) {
+                Row row = sheet.getRow(i);
+                // 订单编号
+                row.getCell(0).setCellType(CellType.STRING);
+                String orderNum = row.getCell(0).getStringCellValue();
+                // 快递单号
+                row.getCell(1).setCellType(CellType.STRING);
+                String expressNum = row.getCell(1).getStringCellValue();
+                // 快递公司名称
+                row.getCell(2).setCellType(CellType.STRING);
+                String expressName = row.getCell(2).getStringCellValue();
+                // 省区划代码
+                row.getCell(3).setCellType(CellType.STRING);
+                String provinceCode = row.getCell(3).getStringCellValue();
+                // 市区划代码
+                row.getCell(4).setCellType(CellType.STRING);
+                String cityCode = row.getCell(4).getStringCellValue();
+                Order order = this.getOne(new LambdaQueryWrapper<Order>()
+                        .eq(Order::getOrderNumber, orderNum)
+                );
+                if (order == null){
+                    throw new ServiceException("订单不存在:"+orderNum, 500);
+                }
+
+                Integer orderType = order.getOrderType();
+                if (orderType != 2){
+                    throw new ServiceException("该订单:"+orderNum+"类型不为单品订单", 500);
+                }
+                if (order.getDistributionMode() != 2){
+                    throw new ServiceException("该订单:"+orderNum+"配送方式不为快递", 500);
+                }
+                Integer orderStatus = order.getOrderStatus();
+                if (orderStatus != 1){
+                    throw new ServiceException("该订单:"+orderNum+"状态不为待发货", 500);
+                }
+
+                String companyNameByCode = ExpressCompanyMap.getCodeByCompanyName(expressName);
+                if(StringUtils.isEmpty(companyNameByCode)){
+                    throw new ServiceException("快递公司名称错误:"+expressName, 500);
+                }
+
+                R<Region> regionBiCode = regionClient.getRegionBiCode(provinceCode);
+                if (regionBiCode.getData() == null) {
+                    throw new ServiceException("省份编码错误:"+provinceCode, 500);
+                }
+                R<Region> regionBiCode1 = regionClient.getRegionBiCode(cityCode);
+                if (regionBiCode1.getData() == null) {
+                    throw new ServiceException("城市编码错误:"+cityCode, 500);
+                }
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("com", companyNameByCode);
+                jsonObject.put("num", expressNum);
+                ConfirmDelivery confirmDelivery =new ConfirmDelivery();
+                confirmDelivery.setOrderId(order.getId());
+                confirmDelivery.setCode(jsonObject.toJSONString());
+                confirmDelivery.setDeliverProvince(regionBiCode.getData().getName());
+                confirmDelivery.setDeliverProvinceCode(regionBiCode.getData().getCode());
+                confirmDelivery.setDeliverCity(regionBiCode1.getData().getName());
+                confirmDelivery.setDeliverCityCode(regionBiCode1.getData().getCode());
+                confirmDelivery(confirmDelivery);
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            throw new ServiceException(e.getMessage());
+        }
+
+
+    }
+
+
+    public static void importExpress2(String filePath) throws MalformedURLException {
+        // 从网络地址读取
+        URL url = new URL(filePath);
+        try (InputStream  fileInputStream = url.openStream()) {
+            Workbook workbook = new XSSFWorkbook(fileInputStream);
+
+            Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet
+            int lastRowNum = sheet.getLastRowNum();
+
+            for (int i = 2; i <= lastRowNum; i++) {
+                Row row = sheet.getRow(i);
+                String orderNum = row.getCell(1).getStringCellValue();
+                // 快递单号
+                String expressNum = row.getCell(7).getStringCellValue();
+                // 快递公司名称
+                String expressName = row.getCell(8).getStringCellValue();
+                // 省区划代码
+                String provinceCode = row.getCell(10).getStringCellValue();
+                // 市区划代码
+                String cityCode = row.getCell(12).getStringCellValue();
+            }
+
+        } catch (IOException e) {
+            throw new ServiceException(e.getMessage());
+        }
+    }
+
 }

--
Gitblit v1.7.1