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 | 223 ++++++++++++++++++++++++++++++++++--------------------- 1 files changed, 139 insertions(+), 84 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 adae034..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 @@ -46,6 +46,7 @@ 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; @@ -59,6 +60,7 @@ import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -309,70 +311,112 @@ */ @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()); - + + // 处理用户姓名搜索条件 + 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); - 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); + // 处理订单列表中的每个订单 + list.forEach(this::processOrderPageListVo); - 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); } + + + + 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); + } + + + @@ -436,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"); @@ -447,7 +491,8 @@ this.updateById(order); return R.ok(); } - + + /** * 取消订单操作 @@ -940,35 +985,45 @@ Workbook workbook = new XSSFWorkbook(fileInputStream); Sheet sheet = workbook.getSheetAt(0); // 获取第一个Sheet int lastRowNum = sheet.getLastRowNum(); - for (int i = 2; i <= lastRowNum; i++) { + for (int i = 1; i <= lastRowNum; i++) { Row row = sheet.getRow(i); - row.getCell(1).setCellType(CellType.STRING); - String orderNum = row.getCell(1).getStringCellValue(); + // 订单编号 + row.getCell(0).setCellType(CellType.STRING); + String orderNum = row.getCell(0).getStringCellValue(); // 快递单号 - row.getCell(7).setCellType(CellType.STRING); - String expressNum = row.getCell(7).getStringCellValue(); + row.getCell(1).setCellType(CellType.STRING); + String expressNum = row.getCell(1).getStringCellValue(); // 快递公司名称 - row.getCell(8).setCellType(CellType.STRING); - String expressName = row.getCell(8).getStringCellValue(); + row.getCell(2).setCellType(CellType.STRING); + String expressName = row.getCell(2).getStringCellValue(); // 省区划代码 - row.getCell(10).setCellType(CellType.STRING); - String provinceCode = row.getCell(10).getStringCellValue(); + row.getCell(3).setCellType(CellType.STRING); + String provinceCode = row.getCell(3).getStringCellValue(); // 市区划代码 - row.getCell(12).setCellType(CellType.STRING); - String cityCode = row.getCell(12).getStringCellValue(); + row.getCell(4).setCellType(CellType.STRING); + String cityCode = row.getCell(4).getStringCellValue(); Order order = this.getOne(new LambdaQueryWrapper<Order>() .eq(Order::getOrderNumber, orderNum) - .eq(Order::getOrderType, 2) - .eq(Order::getDistributionMode,2) - .eq(Order::getOrderStatus, 1) ); if (order == null){ throw new ServiceException("订单不存在:"+orderNum, 500); } - String companyNameByCode = ExpressCompanyMap.getCompanyNameByCode(expressName); + 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); + throw new ServiceException("快递公司名称错误:"+expressName, 500); } R<Region> regionBiCode = regionClient.getRegionBiCode(provinceCode); @@ -980,13 +1035,16 @@ throw new ServiceException("城市编码错误:"+cityCode, 500); } JSONObject jsonObject = new JSONObject(); - jsonObject.put("com", expressName); + jsonObject.put("com", companyNameByCode); jsonObject.put("num", expressNum); - order.setExpressJson(jsonObject.toJSONString()); - order.setDeliverProvinceCode(provinceCode); - order.setDeliverCityCode(cityCode); - order.setOrderStatus(2); - this.updateById(order); + 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) { @@ -1025,7 +1083,4 @@ } } - public static void main(String[] args) throws MalformedURLException { - importExpress2("http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/69c1fcbe5c114f2a9f38703e4f5e1af0.xlsx"); - } } -- Gitblit v1.7.1