From 32c6afd546e8ba7c8fd97be0b37550c797bc8162 Mon Sep 17 00:00:00 2001
From: luofl <1442745593@qq.com>
Date: 星期三, 12 二月 2025 09:25:40 +0800
Subject: [PATCH] 修改物流信息导入模板
---
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/OrderServiceImpl.java | 222 ++++++++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 194 insertions(+), 28 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 dd54a11..b1ad99e 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,48 @@
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.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;
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 +127,9 @@
@Resource
private UserChangeLogClient userChangeLogClient;
-
+
+ @Resource
+ private RegionClient regionClient;
@@ -302,8 +319,11 @@
}
//搜索条件,用户姓名
if(StringUtils.isNotEmpty(orderPageList.getUserName())){
- List<AppUser> data = appUserClient.getAppUserByName(orderPageList.getUserName()).getData();
+ List<AppUser> data = appUserClient.getAppUserByNameNoFilter(orderPageList.getUserName()).getData();
List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
+ if (CollectionUtils.isEmpty(collect)){
+ return new PageInfo<>();
+ }
if(null != orderPageList.getAppUserIds()){
List<Long> appUserIds = orderPageList.getAppUserIds();
appUserIds.addAll(collect);
@@ -314,19 +334,31 @@
}
//搜索条件,用户电话
if(StringUtils.isNotEmpty(orderPageList.getPhone())){
- List<AppUser> data = appUserClient.getAppUserByPhone(orderPageList.getPhone()).getData();
+ List<AppUser> data = appUserClient.getAppUserByPhoneNoFilter(orderPageList.getPhone()).getData();
List<Long> collect = data.stream().map(AppUser::getId).collect(Collectors.toList());
+ 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{
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();
@@ -342,9 +374,47 @@
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);
}
+
+ /**
+ * 判断 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;
+ }
+
+
/**
@@ -407,7 +477,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 +488,8 @@
this.updateById(order);
return R.ok();
}
-
+
+
/**
* 取消订单操作
@@ -531,8 +602,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 +738,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 +799,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;
- }
+
/**
@@ -914,4 +972,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