From e4eaabefaaa2ca95f809c47a11712c3bee56e1b5 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期四, 20 二月 2025 15:07:09 +0800
Subject: [PATCH] 修改物流信息导入模板

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  411 ++++++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 271 insertions(+), 140 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 1e6b3f8..51203ac 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,10 +1,8 @@
 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.*;
@@ -22,24 +20,34 @@
 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 org.apache.poi.ss.usermodel.*;
+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.jetbrains.annotations.Nullable;
 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;
@@ -47,15 +55,18 @@
 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;
 
 /**
  * <p>
- *  服务实现类
+ * 服务实现类
  * </p>
  *
  * @author luodangjia
@@ -79,22 +90,22 @@
     private CommissionService commissionService;
     @Resource
     private BaseSettingClient baseSettingClient;
-    
+
     @Resource
     private SysUserClient sysUserClient;
-    
+
     @Resource
     private BalanceChangeRecordClient balanceChangeRecordClient;
-    
+
     @Resource
     private UserPointClient userPointClient;
-    
+
     @Resource
     private OrderBalancePaymentService orderBalancePaymentService;
-    
+
     @Resource
     private VipSettingClient vipSettingClient;
-    
+
     @Resource
     private GoodsClient goodsClient;
 
@@ -104,20 +115,21 @@
     private TechnicianSubscribeClient technicianSubscribeClient;
     @Resource
     private ShopBalanceStatementClient shopBalanceStatementClient;
-    
+
     @Resource
     private RedisTemplate redisTemplate;
-    
+
     @Resource
     private SystemConfigClient systemConfigClient;
 
     @Resource
     private UserCouponClient userCouponClient;
-    
+
     @Resource
     private UserChangeLogClient userChangeLogClient;
-    
-    
+
+    @Resource
+    private RegionClient regionClient;
 
 
     @Override
@@ -126,16 +138,14 @@
     }
 
 
-
-
     @Override
     public OrderDetailVO getOrderDetail(Long orderId) {
         Order order = orderMapper.selectById(orderId);
-        if (order == null){
+        if (order == null) {
             throw new ServiceException("订单不存在");
         }
         R<Shop> shopR = shopClient.getShopById(order.getShopId());
-        if (!R.isSuccess(shopR)){
+        if (!R.isSuccess(shopR)) {
             throw new ServiceException("获取门店信息失败");
         }
 
@@ -161,20 +171,20 @@
         // 收货地址
         String addressJson = order.getAddressJson();
         UserAddress userAddress = new UserAddress();
-        if (2 == order.getDistributionMode()){
+        if (2 == order.getDistributionMode()) {
             userAddress = JSONObject.parseObject(addressJson, UserAddress.class);
         }
         // 优惠券
         String couponJson = order.getCouponJson();
         CouponInfo couponInfo = new CouponInfo();
-        if (StringUtils.isNotEmpty(couponJson)){
+        if (StringUtils.isNotEmpty(couponJson)) {
             couponInfo = JSONObject.parseObject(couponJson, CouponInfo.class);
         }
 
         // 参与活动
         String activityJson = order.getActivityJson();
         OrderActivityInfo orderActivityInfo = new OrderActivityInfo();
-        if (StringUtils.isNotEmpty(activityJson)){
+        if (StringUtils.isNotEmpty(activityJson)) {
             orderActivityInfo = JSONObject.parseObject(activityJson, OrderActivityInfo.class);
         }
         OrderDetailVO orderDetailVO = new OrderDetailVO();
@@ -203,15 +213,15 @@
         orderDetailVO.setLongitude(shop.getLongitude());
         orderDetailVO.setLatitude(shop.getLatitude());
         orderDetailVO.setShopId(shop.getId());
-        if(StringUtils.isNotEmpty(order.getExpressResult())){
+        if (StringUtils.isNotEmpty(order.getExpressResult())) {
             MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
             List<QueryKD100ListVo> data = mapTrackKD100Vo.getData();
             orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : "");
         }
-        
-        if(order.getOrderType() == 1){
+
+        if (order.getOrderType() == 1) {
             List<TechnicianSubscribe> data = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData();
-            if(data.size() > 0){
+            if (data.size() > 0) {
                 Long id = data.get(0).getId();
                 orderDetailVO.setTechnicianSubscribeId(id.toString());
                 Technician technician = technicianClient.shopdetail(order.getTechnicianId()).getData();
@@ -233,11 +243,11 @@
     @Override
     public boolean check(Order order, Integer shopId, Long userId) {
         R<List<AppUserShop>> r = appUserClient.getAppUserShop(userId);
-        if (r.getCode() != R.SUCCESS){
+        if (r.getCode() != R.SUCCESS) {
             throw new ServiceException("获取用户门店信息失败");
         }
         List<AppUserShop> appUserShopList = r.getData();
-        if (appUserShopList == null || appUserShopList.isEmpty()){
+        if (appUserShopList == null || appUserShopList.isEmpty()) {
             return false;
         }
 
@@ -245,12 +255,12 @@
         List<AppUserShop> userShopList = appUserShopList.stream()
                 .filter(appUserShop -> appUserShop.getShopId().equals(shopId))
                 .collect(Collectors.toList());
-        if (userShopList.isEmpty()){
+        if (userShopList.isEmpty()) {
             return false;
         }
 
         // 判断订单是否属于该门店
-        if (order == null){
+        if (order == null) {
             throw new ServiceException("订单不存在");
         }
 
@@ -263,7 +273,7 @@
         LoginUser loginUserApplet = tokenService.getLoginUserApplet();
         Order order = orderMapper.selectById(id);
         boolean check = check(order, shopId, loginUserApplet.getUserid());
-        if (!check){
+        if (!check) {
             throw new ServiceException("该订单与当前扫码门店不一致");
         }
 
@@ -284,16 +294,17 @@
         order.setAfterSaleTime(LocalDateTime.now().plusDays(days));
         order.setEndTime(LocalDateTime.now());
         order.setCancellerAppUserId(loginUserApplet.getUserid());
-        if(StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)){
+        if (StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)) {
             order.setTechnicianId(Integer.valueOf(technicianId));
         }
         // TODO
         orderMapper.updateById(order);
     }
-    
-    
+
+
     /**
      * 管理后台获取订单列表数据
+     *
      * @param orderPageList
      * @return
      */
@@ -301,41 +312,55 @@
     public PageInfo<OrderPageListVo> getOrderPageList(OrderPageList orderPageList) {
         Long userid = tokenService.getLoginUser().getUserid();
         SysUser sysUser = sysUserClient.getSysUser(userid).getData();
-        if(2 == sysUser.getRoleType()){
+        if (2 == sysUser.getRoleType()) {
             orderPageList.setShopId(sysUser.getObjectId());
         }
         //搜索条件,用户姓名
-        if(StringUtils.isNotEmpty(orderPageList.getUserName())){
-            List<AppUser> data = appUserClient.getAppUserByName(orderPageList.getUserName()).getData();
+        if (StringUtils.isNotEmpty(orderPageList.getUserName())) {
+            List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPageList.getUserName()).getData();
             List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if(null != orderPageList.getAppUserIds()){
+            if (CollectionUtils.isEmpty(collect)) {
+                return new PageInfo<>();
+            }
+            if (null != orderPageList.getAppUserIds()) {
                 List<Long> appUserIds = orderPageList.getAppUserIds();
                 appUserIds.addAll(collect);
                 orderPageList.setAppUserIds(appUserIds);
-            }else{
+            } else {
                 orderPageList.setAppUserIds(collect);
             }
         }
         //搜索条件,用户电话
-        if(StringUtils.isNotEmpty(orderPageList.getPhone())){
-            List<AppUser> data = appUserClient.getAppUserByPhone(orderPageList.getPhone()).getData();
+        if (StringUtils.isNotEmpty(orderPageList.getPhone())) {
+            List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPageList.getPhone()).getData();
             List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
-            if(null != orderPageList.getAppUserIds()){
+            if (CollectionUtils.isEmpty(collect)) {
+                return new PageInfo<>();
+            }
+
+            if (null != orderPageList.getAppUserIds()) {
                 List<Long> appUserIds = orderPageList.getAppUserIds();
+                if (!containsAny(appUserIds, collect)) {
+                    return new PageInfo<>();
+                }
                 appUserIds.addAll(collect);
                 orderPageList.setAppUserIds(appUserIds);
-            }else{
+            } else {
                 orderPageList.setAppUserIds(collect);
             }
         }
-        
-        PageInfo<OrderPageListVo> pageInfo = new PageInfo(orderPageList.getPageCurr(), orderPageList.getPageSize());
-        
+        if (null != orderPageList.getAppUserIds()) {
+            orderPageList.setAppUserIds(orderPageList.getAppUserIds().stream().distinct().collect(Collectors.toList()));
+        }
+
+
+        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){
+            if (null != appUser) {
                 orderPageListVo.setUserName(appUser.getName());
                 orderPageListVo.setPhone(appUser.getPhone());
             }
@@ -348,7 +373,7 @@
             orderPageListVo.setGetCommission(reduce);
 
             String expressJson = orderPageListVo.getExpressJson();
-            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")){
+            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")) {
                 JSONObject jsonObject = null;
                 try {
                     jsonObject = JSONObject.parseObject(expressJson);
@@ -363,33 +388,55 @@
         }
         return pageInfo.setRecords(list);
     }
-    
+
+    /**
+     * 判断 list1 是否包含 list2 中的至少一个元素
+     *
+     * @param list1 第一个列表
+     * @param list2 第二个列表
+     * @return 如果 list1 包含 list2 中的至少一个元素,返回 true;否则返回 false
+     */
+    private boolean containsAny(List<Long> list1, List<Long> list2) {
+        // 将 list1 转换为 HashSet 以提高查询效率
+        Set<Long> set1 = new HashSet<>(list1);
+
+        // 遍历 list2,检查是否有元素存在于 set1 中
+        for (Long element : list2) {
+            if (set1.contains(element)) {
+                return true;
+            }
+        }
+
+        // 如果没有找到共同元素,返回 false
+        return false;
+    }
 
 
     /**
      * 小程序取消订单
+     *
      * @param orderId
      * @return
      */
     @Override
     public R cancel(Long orderId) {
         Order order = this.getById(orderId);
-        if(null == order){
+        if (null == order) {
             return R.fail("取消失败");
         }
         Long userid = tokenService.getLoginUserApplet().getUserid();
-        if(!order.getAppUserId().equals(userid)){
+        if (!order.getAppUserId().equals(userid)) {
             return R.fail("取消失败");
         }
-        if(!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())){
+        if (!Arrays.asList(1, 2, 3).contains(order.getOrderStatus())) {
             return R.fail("订单取消失败");
         }
-        if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){
+        if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) {
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
         R r = refundPayMoney(order);
-        if(200 == r.getCode()){
+        if (200 == r.getCode()) {
             this.updateById(order);
         }
         return r;
@@ -397,18 +444,19 @@
 
     /**
      * 确认发货操作
+     *
      * @return
      */
     @Override
     public R confirmDelivery(ConfirmDelivery confirmDelivery) {
         Order order = this.getById(confirmDelivery.getOrderId());
-        if(1 == order.getPayStatus()){
+        if (1 == order.getPayStatus()) {
             return R.fail("订单还未完成支付");
         }
-        if(1 == order.getOrderType() || null == order.getAddressJson()){
+        if (1 == order.getOrderType() || null == order.getAddressJson()) {
             return R.fail("该订单不支付快递配送");
         }
-        if(1 != order.getOrderStatus()){
+        if (1 != order.getOrderStatus()) {
             return R.fail("无效的操作");
         }
         //添加快递号和修改订单状态
@@ -426,7 +474,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");
@@ -437,55 +485,57 @@
         this.updateById(order);
         return R.ok();
     }
-    
-    
+
+
     /**
      * 取消订单操作
+     *
      * @param orderId
      * @return
      */
     @Override
     public R cancelOrder(Long orderId) {
         Order order = this.getById(orderId);
-        if(Arrays.asList(5, 6, 7).contains(order.getOrderStatus())){
+        if (Arrays.asList(5, 6, 7).contains(order.getOrderStatus())) {
             return R.fail("无效的操作");
         }
-        if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){
+        if (null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())) {
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
         R r = refundPayMoney(order);
-        if(200 == r.getCode()){
+        if (200 == r.getCode()) {
             this.updateById(order);
         }
         return r;
     }
-    
-    
+
+
     /**
      * 返回订单支付金额和回退积分和会员等级
+     *
      * @param order
      */
-    public R refundPayMoney(Order order){
+    public R refundPayMoney(Order order) {
         //开始退款
         Integer payMethod = order.getPayMethod();
         BigDecimal paymentAmount = order.getPaymentAmount();
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
-        if(1 == payMethod){
+        if (1 == payMethod) {
             //微信退款
             RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), paymentAmount.doubleValue(), "/order/order/refundPayMoneyCallback");
-            if("100".equals(refund.getRa_Status())){
+            if ("100".equals(refund.getRa_Status())) {
                 order.setRefundStatus(1);
                 return R.ok();
-            }else{
+            } else {
                 return R.fail(refund.getRc_CodeMsg());
             }
         }
-        if(2 == payMethod){
+        if (2 == payMethod) {
             //余额退款
             OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId()));
             BigDecimal balance = appUser.getBalance();
-            if(null != orderBalancePayment){
+            if (null != orderBalancePayment) {
                 appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN));
 //                appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
             }
@@ -494,12 +544,12 @@
             //查询最后一次的消费订单
             Order order1 = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getAppUserId, order.getAppUserId()).eq(Order::getPayStatus, 2)
                     .eq(Order::getDelFlag, 0).in(Order::getOrderStatus, Arrays.asList(1, 2, 3, 4, 8)).ne(Order::getId, order.getId()).last(" order by create_time desc limit 0, 1"));
-            if(null != order1){
+            if (null != order1) {
                 appUser.setLastShopTime(order1.getCreateTime());
-            }else{
+            } else {
                 appUser.setLastShopTime(null);
             }
-        
+
             //构建账户余额流水明细
             BalanceChangeRecord balanceChangeRecord = new BalanceChangeRecord();
             balanceChangeRecord.setOrderId(order.getId());
@@ -530,13 +580,13 @@
             appUser.setLavePoint(appUser.getLavePoint() - shopPoint);
             appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint);
             appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint);
-            if(null != transferablePoint){
+            if (null != transferablePoint) {
                 appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint);
             }
             appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
             //构建积分流水明细
-            if(shopPoint > 0){
+            if (shopPoint > 0) {
                 UserPoint userPoint = new UserPoint();
                 userPoint.setType(1);
                 userPoint.setHistoricalPoint(lavePoint);
@@ -548,37 +598,37 @@
                 userPointClient.saveUserPoint(userPoint);
             }
             appUserClient.editAppUserById(appUser);
-    
+
             //降级检测
-            if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+            if (1 < appUser.getVipId() && appUser.getVipId() < 4) {
                 appUserClient.vipDemotion(appUser.getId());
             }
             //回退优惠券状态
-            if(null != order.getUserCouponId()){
+            if (null != order.getUserCouponId()) {
                 UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
                 userCoupon.setUseTime(null);
                 userCouponClient.editReturnUse(userCoupon);
             }
         }
-        if(3 == payMethod){
+        if (3 == payMethod) {
             //开始运费退款,积分支付,运费是单独进行支付的,所以需要单独退款
-            if(null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0){
+            if (null != order.getExpressAmount() && BigDecimal.ZERO.compareTo(order.getExpressAmount()) < 0) {
                 BigDecimal expressAmount = order.getExpressAmount();
-                if(1 == order.getExpressPayMethod()){
+                if (1 == order.getExpressPayMethod()) {
                     //微信退款
                     RefundResult refund = PaymentUtil.refund(order.getOrderNumber(), "R" + order.getOrderNumber(), expressAmount.doubleValue(), "/order/order/refundExpressPayMoneyCallback");
-                    if("100".equals(refund.getRa_Status())){
+                    if ("100".equals(refund.getRa_Status())) {
                         order.setRefundStatus(1);
                         return R.ok();
-                    }else{
+                    } else {
                         return R.fail(refund.getRc_CodeMsg());
                     }
                 }
-                if(2 == order.getExpressPayMethod()){
+                if (2 == order.getExpressPayMethod()) {
                     //余额退款
                     OrderBalancePayment orderBalancePayment = orderBalancePaymentService.getOne(new LambdaQueryWrapper<OrderBalancePayment>().eq(OrderBalancePayment::getOrderId, order.getId()));
                     BigDecimal balance = appUser.getBalance();
-                    if(null != orderBalancePayment){
+                    if (null != orderBalancePayment) {
                         appUser.setTotalRedPacketAmount(appUser.getTotalRedPacketAmount().add(orderBalancePayment.getRedPacketAmount()).setScale(2, RoundingMode.HALF_EVEN));
 //                        appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
                     }
@@ -607,14 +657,14 @@
             userPoint1.setObjectId(order.getId());
             List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
             Integer transferablePoint = order.getPoint();
-            if(data.size() > 0){
+            if (data.size() > 0) {
                 UserPoint userPoint = data.get(0);
                 transferablePoint = Integer.valueOf(userPoint.getExtention());
             }
             appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
             //构建积分流水明细
-            if(order.getPoint() > 0){
+            if (order.getPoint() > 0) {
                 UserPoint userPoint = new UserPoint();
                 userPoint.setType(11);
                 userPoint.setHistoricalPoint(lavePoint);
@@ -636,13 +686,14 @@
 
     /**
      * 取消订单后回调处理
+     *
      * @return
      */
     @Override
     public R refundPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
         String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
         Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code));
-        if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){
+        if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) {
             return R.ok();
         }
         order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
@@ -666,13 +717,13 @@
         appUser.setLavePoint(appUser.getLavePoint() - shopPoint);
         appUser.setAvailablePoint(appUser.getAvailablePoint() - availablePoint);
         appUser.setTotalAvailablePoint(appUser.getTotalAvailablePoint() - availablePoint);
-        if(null != transferablePoint){
+        if (null != transferablePoint) {
             appUser.setTransferablePoint(appUser.getTransferablePoint() - transferablePoint);
         }
         appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
         //构建积分流水明细
-        if(shopPoint > 0){
+        if (shopPoint > 0) {
             UserPoint userPoint = new UserPoint();
             userPoint.setType(1);
             userPoint.setHistoricalPoint(lavePoint);
@@ -684,14 +735,14 @@
             userPointClient.saveUserPoint(userPoint);
         }
         appUserClient.editAppUserById(appUser);
-    
+
         //降级检测
-        if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+        if (1 < appUser.getVipId() && appUser.getVipId() < 4) {
             appUserClient.vipDemotion(appUser.getId());
         }
 
         //回退优惠券状态
-        if(null != order.getUserCouponId()){
+        if (null != order.getUserCouponId()) {
             UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
             userCoupon.setUseTime(null);
             userCouponClient.editReturnUse(userCoupon);
@@ -702,13 +753,14 @@
 
     /**
      * 取消订单快递费回退
+     *
      * @return
      */
     @Override
     public R refundExpressPayMoneyCallback(RefundCallbackResult refundCallbackResult) {
         String code = refundCallbackResult.getR3_RefundOrderNo().substring(1);
         Order order = this.getOne(new LambdaQueryWrapper<Order>().eq(Order::getOrderNumber, code));
-        if(null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6){
+        if (null == order || order.getPayStatus() == 1 || order.getOrderStatus() == 6) {
             return R.ok();
         }
         order.setRefundCode(refundCallbackResult.getR5_RefundTrxNo());
@@ -726,14 +778,14 @@
         userPoint1.setObjectId(order.getId());
         List<UserPoint> data = userPointClient.getUserPointList(userPoint1).getData();
         Integer transferablePoint = order.getPoint();
-        if(data.size() > 0){
+        if (data.size() > 0) {
             UserPoint userPoint = data.get(0);
             transferablePoint = Integer.valueOf(userPoint.getExtention());
         }
         appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
         //构建积分流水明细
-        if(order.getPoint() > 0){
+        if (order.getPoint() > 0) {
             UserPoint userPoint = new UserPoint();
             userPoint.setType(11);
             userPoint.setHistoricalPoint(lavePoint);
@@ -747,18 +799,17 @@
         return R.ok();
     }
 
-    
-    
-    
+
     /**
      * 收货操作
+     *
      * @param orderId
      * @return
      */
     @Override
     public R receivingOperation(Long orderId) {
         Order order = this.getById(orderId);
-        if(order.getOrderStatus() != 2){
+        if (order.getOrderStatus() != 2) {
             return R.fail("无效的操作");
         }
         order.setOrderStatus(4);
@@ -777,10 +828,11 @@
         this.updateById(order);
         return R.ok();
     }
-    
-    
+
+
     /**
      * 获取订单详情
+     *
      * @param orderId
      * @return
      */
@@ -793,18 +845,18 @@
         orderInfo.setOrderStatus(order.getOrderStatus());
         orderInfo.setCreateTime(order.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         AppUser appUser = appUserClient.getAppUserById(order.getAppUserId());
-        if(null != appUser){
+        if (null != appUser) {
             orderInfo.setUserName(appUser.getName());
             orderInfo.setPhone(appUser.getPhone());
         }
         orderInfo.setOrderType(order.getOrderType() == 1 ? "服务" : (StringUtils.isNotEmpty(order.getAddressJson()) ? "单品-快递配送" : "单品-上门自提"));
         Shop shop = shopClient.getShopById(order.getShopId()).getData();
-        if(null != shop){
+        if (null != shop) {
             orderInfo.setShopName(shop.getName());
         }
         orderInfo.setPaymentMethod(order.getPayMethod());
         orderInfo.setTotalAmount(order.getTotalAmount());
-        if(StringUtils.isNotEmpty(order.getCouponJson())){
+        if (StringUtils.isNotEmpty(order.getCouponJson())) {
             CouponInfo couponInfo = JSON.parseObject(order.getCouponJson(), CouponInfo.class);
             orderInfo.setCouponName(couponInfo.getCouponName());
         }
@@ -812,7 +864,7 @@
         orderInfo.setExpressAmount(order.getExpressAmount());
         orderInfo.setPaymentAmount(order.getPaymentAmount());
         orderInfo.setGetPoint(order.getGetPoint());
-        if(2 == order.getDistributionMode()){
+        if (2 == order.getDistributionMode()) {
             UserAddress userAddress = JSON.parseObject(order.getAddressJson(), UserAddress.class);
             orderInfo.setRecipient(userAddress.getRecieveName() + "-" + userAddress.getRecievePhone());
             userAddress.setRecieveAddress(userAddress.getProvince() + userAddress.getCity() + userAddress.getDistrict() + userAddress.getRecieveAddress());
@@ -820,9 +872,14 @@
             MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
             orderInfo.setExpress(mapTrackKD100Vo);
         }
+        if (StringUtils.isNotEmpty(order.getExpressJson()) && !order.getExpressJson().equals("NULL")){
+            JSONObject jsonObject = JSON.parseObject(order.getExpressJson());
+            orderInfo.setExpressCompany(jsonObject.getString("com"));
+            orderInfo.setExpressNumber(jsonObject.getString("num"));
+        }
+
         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) {
@@ -835,21 +892,21 @@
         }
         orderInfo.setGoodsJson(JSON.toJSONString(goodsJson));
         orderInfo.setPoint(order.getPoint());
-        if(null != order.getAfterSaleTime()){
+        if (null != order.getAfterSaleTime()) {
             orderInfo.setAfterSaleTime(order.getAfterSaleTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
-        if(StringUtils.isNotEmpty(order.getActivityJson())){
+        if (StringUtils.isNotEmpty(order.getActivityJson())) {
             OrderActivityInfo activityInfo = JSON.parseObject(order.getActivityJson(), OrderActivityInfo.class);
             orderInfo.setActivityName(activityInfo.getActivityName());
         }
-        if(null != order.getEndTime()){
+        if (null != order.getEndTime()) {
             AppUser user = appUserClient.getAppUserById(order.getCancellerAppUserId());
             orderInfo.setCanceller(user.getName());
             orderInfo.setWriteOffTime(order.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
         }
-        if(order.getOrderType() == 1){
+        if (order.getOrderType() == 1) {
             List<TechnicianSubscribe> technicianSubscribes = technicianSubscribeClient.getTechnicianSubscribeList(order.getId()).getData();
-            if(technicianSubscribes.size() > 0){
+            if (technicianSubscribes.size() > 0) {
                 Set<Integer> collect = technicianSubscribes.stream().map(TechnicianSubscribe::getTechnicianId).collect(Collectors.toSet());
                 List<Technician> data = technicianClient.getTechnicianByIds(collect).getData();
                 orderInfo.setTechnicianName(data.stream().map(Technician::getName).collect(Collectors.joining(",")));
@@ -864,6 +921,7 @@
 
     /**
      * 获取商品销售数量
+     *
      * @param goodsId
      * @return
      */
@@ -875,6 +933,7 @@
 
     /**
      * 获取店铺订单数量
+     *
      * @param shopId
      * @param type
      * @return
@@ -883,23 +942,23 @@
     public Integer getShopSaleNum(Integer shopId, Integer type) {
         return this.baseMapper.getShopSaleNum(shopId, type);
     }
-    
-    
+
+
     /**
      * 定时查询快递信息
      */
     @Override
     public void taskExpress() {
         Set<Long> order_express = redisTemplate.opsForZSet().rangeByScore("order_express", 0, LocalDateTime.now().toEpochSecond(ZoneOffset.UTC));
-        if(order_express.size() > 0){
+        if (order_express.size() > 0) {
             for (Long id : order_express) {
                 Order order = this.getById(id);
-                if(order.getOrderStatus() != 2){
+                if (order.getOrderStatus() != 2) {
                     redisTemplate.opsForZSet().remove("order_express", id);
                     continue;
                 }
                 String expressJson = order.getExpressJson();
-                if(StringUtils.isEmpty(expressJson)){
+                if (StringUtils.isEmpty(expressJson)) {
                     redisTemplate.opsForZSet().remove("order_express", id);
                     continue;
                 }
@@ -921,13 +980,96 @@
         }
     }
 
+    @SneakyThrows
     @Override
-    public void importExpress(MultipartFile file) {
-        try (InputStream inputStream = file.getInputStream()) {
-            Workbook workbook = WorkbookFactory.create(inputStream);
+    @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();
                 // 快递单号
@@ -938,26 +1080,15 @@
                 String provinceCode = row.getCell(10).getStringCellValue();
                 // 市区划代码
                 String cityCode = row.getCell(12).getStringCellValue();
-                Order order = this.getOne(new LambdaQueryWrapper<Order>()
-                        .eq(Order::getOrderNumber, orderNum)
-                        .eq(Order::getOrderType, 1)
-                        .eq(Order::getDistributionMode,2)
-                        .eq(Order::getOrderStatus, 1)
-                );
-                if (order != null){
-                    JSONObject jsonObject = new JSONObject();
-                    jsonObject.put("com", expressName);
-                    jsonObject.put("num", expressNum);
-                    order.setExpressJson(jsonObject.toJSONString());
-                    order.setDeliverProvinceCode(provinceCode);
-                    order.setDeliverCityCode(cityCode);
-                    order.setOrderStatus(2);
-                    this.updateById(order);
-                }
             }
 
         } catch (IOException e) {
-            throw new RuntimeException(e);
+            throw new ServiceException(e.getMessage());
         }
     }
+
+    @Override
+    public Integer getShopSaleNumByShopIds(List<Integer> shopIds, Integer type) {
+        return this.baseMapper.getShopSaleNumByShopIds(shopIds, type);
+    }
 }

--
Gitblit v1.7.1