From f673fd85f198a8d99f531ae6ca16246bcc3bdea9 Mon Sep 17 00:00:00 2001
From: luodangjia <luodangjia>
Date: 星期日, 26 一月 2025 14:53:02 +0800
Subject: [PATCH] 12.18

---
 ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java |  285 +++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 208 insertions(+), 77 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 1fd2ef1..da4e94d 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,16 +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.AppUserClient;
-import com.ruoyi.account.api.feignClient.BalanceChangeRecordClient;
-import com.ruoyi.account.api.feignClient.UserCouponClient;
-import com.ruoyi.account.api.feignClient.UserPointClient;
+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;
@@ -24,28 +20,41 @@
 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.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;
@@ -89,9 +98,6 @@
     private UserPointClient userPointClient;
     
     @Resource
-    private PointSettingClient pointSettingClient;
-    
-    @Resource
     private OrderBalancePaymentService orderBalancePaymentService;
     
     @Resource
@@ -116,6 +122,11 @@
     @Resource
     private UserCouponClient userCouponClient;
     
+    @Resource
+    private UserChangeLogClient userChangeLogClient;
+
+    @Resource
+    private RegionClient regionClient;
     
 
 
@@ -205,7 +216,7 @@
         if(StringUtils.isNotEmpty(order.getExpressResult())){
             MapTrackKD100Vo mapTrackKD100Vo = JSON.parseObject(order.getExpressResult(), MapTrackKD100Vo.class);
             List<QueryKD100ListVo> data = mapTrackKD100Vo.getData();
-            orderDetailVO.setExpress(data.size() > 0 ? data.get(0).getContext() : "");
+            orderDetailVO.setExpress(null != data && data.size() > 0 ? data.get(0).getContext() : "");
         }
         
         if(order.getOrderType() == 1){
@@ -286,6 +297,7 @@
         if(StringUtils.isNotEmpty(technicianId) && !"null".equals(technicianId)){
             order.setTechnicianId(Integer.valueOf(technicianId));
         }
+        // TODO
         orderMapper.updateById(order);
     }
     
@@ -337,17 +349,31 @@
                 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"));
-            RefundPass one = refundPassService.lambdaQuery().eq(RefundPass::getOrderId, orderPageListVo.getId()).one();
+            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);
+
+            String expressJson = orderPageListVo.getExpressJson();
+            if (StringUtils.isNotEmpty(expressJson) && !expressJson.equals("NULL")){
+                JSONObject jsonObject = null;
+                try {
+                    jsonObject = JSONObject.parseObject(expressJson);
+                    String companyName = ExpressCompanyMap.getCompanyNameByCode(jsonObject.getString("com"));
+                    orderPageListVo.setExpressCompany(companyName);
+                    orderPageListVo.setExpressNum(jsonObject.getString("num"));
+                } catch (Exception e) {
+                }
+
+            }
+
         }
         return pageInfo.setRecords(list);
     }
+
 
 
     /**
@@ -434,7 +460,7 @@
         if(Arrays.asList(5, 6, 7).contains(order.getOrderStatus())){
             return R.fail("无效的操作");
         }
-        if(LocalDateTime.now().isAfter(order.getAfterSaleTime())){
+        if(null != order.getAfterSaleTime() && LocalDateTime.now().isAfter(order.getAfterSaleTime())){
             return R.fail("订单取消失败");
         }
         order.setOrderStatus(5);
@@ -471,7 +497,7 @@
             BigDecimal balance = appUser.getBalance();
             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));
+//                appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
             }
             appUser.setBalance(balance.add(paymentAmount).setScale(2, RoundingMode.HALF_EVEN));
             appUser.setShopAmount(appUser.getShopAmount().subtract(paymentAmount).setScale(2, RoundingMode.HALF_EVEN));
@@ -519,22 +545,24 @@
             }
             appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
-            boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
-            if(vipDemotion){
-                appUser.setVipId(appUser.getVipId() - 1);
-            }
-
             //构建积分流水明细
-            UserPoint userPoint = new UserPoint();
-            userPoint.setType(1);
-            userPoint.setHistoricalPoint(lavePoint);
-            userPoint.setVariablePoint(shopPoint);
-            userPoint.setBalance(appUser.getLavePoint());
-            userPoint.setCreateTime(LocalDateTime.now());
-            userPoint.setAppUserId(order.getAppUserId());
-            userPoint.setObjectId(order.getId());
-            userPointClient.saveUserPoint(userPoint);
+            if(shopPoint > 0){
+                UserPoint userPoint = new UserPoint();
+                userPoint.setType(1);
+                userPoint.setHistoricalPoint(lavePoint);
+                userPoint.setVariablePoint(shopPoint);
+                userPoint.setBalance(appUser.getLavePoint());
+                userPoint.setCreateTime(LocalDateTime.now());
+                userPoint.setAppUserId(order.getAppUserId());
+                userPoint.setObjectId(order.getId());
+                userPointClient.saveUserPoint(userPoint);
+            }
             appUserClient.editAppUserById(appUser);
+    
+            //降级检测
+            if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+                appUserClient.vipDemotion(appUser.getId());
+            }
             //回退优惠券状态
             if(null != order.getUserCouponId()){
                 UserCoupon userCoupon = userCouponClient.getUserCoupon(order.getUserCouponId()).getData();
@@ -562,7 +590,7 @@
                     BigDecimal balance = appUser.getBalance();
                     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));
+//                        appUser.setTotalDistributionAmount(appUser.getTotalDistributionAmount().add(orderBalancePayment.getDistributionAmount()).setScale(2, RoundingMode.HALF_EVEN));
                     }
                     appUser.setBalance(balance.add(expressAmount).setScale(2, RoundingMode.HALF_EVEN));
                     //构建账户余额流水明细
@@ -596,15 +624,17 @@
             appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
             //构建积分流水明细
-            UserPoint userPoint = new UserPoint();
-            userPoint.setType(11);
-            userPoint.setHistoricalPoint(lavePoint);
-            userPoint.setVariablePoint(order.getPoint());
-            userPoint.setBalance(appUser.getLavePoint());
-            userPoint.setCreateTime(LocalDateTime.now());
-            userPoint.setAppUserId(order.getAppUserId());
-            userPoint.setObjectId(order.getId());
-            userPointClient.saveUserPoint(userPoint);
+            if(order.getPoint() > 0){
+                UserPoint userPoint = new UserPoint();
+                userPoint.setType(11);
+                userPoint.setHistoricalPoint(lavePoint);
+                userPoint.setVariablePoint(order.getPoint());
+                userPoint.setBalance(appUser.getLavePoint());
+                userPoint.setCreateTime(LocalDateTime.now());
+                userPoint.setAppUserId(order.getAppUserId());
+                userPoint.setObjectId(order.getId());
+                userPointClient.saveUserPoint(userPoint);
+            }
             appUserClient.editAppUserById(appUser);
         }
 
@@ -651,22 +681,24 @@
         }
         appUser.setTotalPoint(appUser.getTotalPoint() - shopPoint);
 
-        boolean vipDemotion = vipDemotion(appUser.getShopPoint(), appUser.getVipId());
-        if(vipDemotion){
-            appUser.setVipId(appUser.getVipId() - 1);
-        }
-
         //构建积分流水明细
-        UserPoint userPoint = new UserPoint();
-        userPoint.setType(1);
-        userPoint.setHistoricalPoint(lavePoint);
-        userPoint.setVariablePoint(shopPoint);
-        userPoint.setBalance(appUser.getLavePoint());
-        userPoint.setCreateTime(LocalDateTime.now());
-        userPoint.setAppUserId(order.getAppUserId());
-        userPoint.setObjectId(order.getId());
-        userPointClient.saveUserPoint(userPoint);
+        if(shopPoint > 0){
+            UserPoint userPoint = new UserPoint();
+            userPoint.setType(1);
+            userPoint.setHistoricalPoint(lavePoint);
+            userPoint.setVariablePoint(shopPoint);
+            userPoint.setBalance(appUser.getLavePoint());
+            userPoint.setCreateTime(LocalDateTime.now());
+            userPoint.setAppUserId(order.getAppUserId());
+            userPoint.setObjectId(order.getId());
+            userPointClient.saveUserPoint(userPoint);
+        }
         appUserClient.editAppUserById(appUser);
+    
+        //降级检测
+        if(1 < appUser.getVipId() && appUser.getVipId() < 4){
+            appUserClient.vipDemotion(appUser.getId());
+        }
 
         //回退优惠券状态
         if(null != order.getUserCouponId()){
@@ -711,30 +743,21 @@
         appUser.setTransferablePoint(appUser.getTransferablePoint() + transferablePoint);
 
         //构建积分流水明细
-        UserPoint userPoint = new UserPoint();
-        userPoint.setType(11);
-        userPoint.setHistoricalPoint(lavePoint);
-        userPoint.setVariablePoint(order.getPoint());
-        userPoint.setBalance(appUser.getLavePoint());
-        userPoint.setCreateTime(LocalDateTime.now());
-        userPoint.setAppUserId(order.getAppUserId());
-        userPoint.setObjectId(order.getId());
-        userPointClient.saveUserPoint(userPoint);
+        if(order.getPoint() > 0){
+            UserPoint userPoint = new UserPoint();
+            userPoint.setType(11);
+            userPoint.setHistoricalPoint(lavePoint);
+            userPoint.setVariablePoint(order.getPoint());
+            userPoint.setBalance(appUser.getLavePoint());
+            userPoint.setCreateTime(LocalDateTime.now());
+            userPoint.setAppUserId(order.getAppUserId());
+            userPoint.setObjectId(order.getId());
+            userPointClient.saveUserPoint(userPoint);
+        }
         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;
-    }
+    
     
     
     /**
@@ -809,6 +832,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) {
@@ -854,8 +878,8 @@
      * @return
      */
     @Override
-    public Integer getGoodsSaleNum(Integer goodsId, Integer type) {
-        return this.baseMapper.getGoodsSaleNum(goodsId, type);
+    public Integer getGoodsSaleNum(Integer goodsId, Integer type, Long userId) {
+        return this.baseMapper.getGoodsSaleNum(goodsId, type, userId);
     }
 
 
@@ -906,4 +930,111 @@
             }
         }
     }
+
+    @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 = 2; i <= lastRowNum; i++) {
+                Row row = sheet.getRow(i);
+                row.getCell(1).setCellType(CellType.STRING);
+                String orderNum = row.getCell(1).getStringCellValue();
+                // 快递单号
+                row.getCell(7).setCellType(CellType.STRING);
+                String expressNum = row.getCell(7).getStringCellValue();
+                // 快递公司名称
+                row.getCell(8).setCellType(CellType.STRING);
+                String expressName = row.getCell(8).getStringCellValue();
+                // 省区划代码
+                row.getCell(10).setCellType(CellType.STRING);
+                String provinceCode = row.getCell(10).getStringCellValue();
+                // 市区划代码
+                row.getCell(12).setCellType(CellType.STRING);
+                String cityCode = row.getCell(12).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.getCompanyNameByCode(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", expressName);
+                jsonObject.put("num", expressNum);
+                order.setExpressJson(jsonObject.toJSONString());
+                order.setDeliverProvinceCode(provinceCode);
+                order.setDeliverCityCode(cityCode);
+                order.setOrderStatus(2);
+                this.updateById(order);
+            }
+
+        } 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());
+        }
+    }
+
+    public static void main(String[] args) throws MalformedURLException {
+        importExpress2("http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/69c1fcbe5c114f2a9f38703e4f5e1af0.xlsx");
+    }
 }

--
Gitblit v1.7.1