|
@@ -3,13 +3,11 @@ package com.ruoyi.logistics.service.impl;
|
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
import java.time.LocalDate;
|
|
|
-import java.time.format.DateTimeFormatter;
|
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
-import java.util.Comparator;
|
|
|
|
|
import java.util.HashMap;
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
-import java.util.stream.Collectors;
|
|
|
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
@@ -19,29 +17,32 @@ import com.ruoyi.common.core.utils.DateUtils;
|
|
|
import com.ruoyi.common.datascope.annotation.DataScope;
|
|
import com.ruoyi.common.datascope.annotation.DataScope;
|
|
|
import com.ruoyi.common.redis.service.RedisIdGenerator;
|
|
import com.ruoyi.common.redis.service.RedisIdGenerator;
|
|
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
|
import com.ruoyi.common.security.utils.SecurityUtils;
|
|
|
|
|
+import com.ruoyi.logistics.constant.RedisCacheConstants;
|
|
|
|
|
+import com.ruoyi.logistics.domain.BizAddressBook;
|
|
|
import com.ruoyi.logistics.domain.BizWaybillCostDetails;
|
|
import com.ruoyi.logistics.domain.BizWaybillCostDetails;
|
|
|
import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
|
|
import com.ruoyi.logistics.domain.dto.OrderStatisticsDto;
|
|
|
|
|
+import com.ruoyi.logistics.domain.dto.RecentAddressDto;
|
|
|
import com.ruoyi.logistics.enums.OrderStatusEnum;
|
|
import com.ruoyi.logistics.enums.OrderStatusEnum;
|
|
|
import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
|
|
import com.ruoyi.logistics.mapper.BizWaybillCostDetailsMapper;
|
|
|
import com.ruoyi.logistics.service.LogisticsOrderService;
|
|
import com.ruoyi.logistics.service.LogisticsOrderService;
|
|
|
import com.ruoyi.system.api.model.LoginUser;
|
|
import com.ruoyi.system.api.model.LoginUser;
|
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
-import org.checkerframework.checker.units.qual.A;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import com.ruoyi.common.redis.service.RedisService;
|
|
|
import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
|
|
import com.ruoyi.logistics.mapper.BizWaybillOrderMapper;
|
|
|
import com.ruoyi.logistics.domain.BizWaybillOrder;
|
|
import com.ruoyi.logistics.domain.BizWaybillOrder;
|
|
|
import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
|
|
import com.ruoyi.logistics.domain.dto.DailyOrderStatisticsDto;
|
|
|
import com.ruoyi.logistics.service.IBizWaybillOrderService;
|
|
import com.ruoyi.logistics.service.IBizWaybillOrderService;
|
|
|
|
|
|
|
|
-import java.util.List;
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 运单管理Service业务层处理
|
|
* 运单管理Service业务层处理
|
|
|
*
|
|
*
|
|
|
* @author RuiJing
|
|
* @author RuiJing
|
|
|
* @date 2026-01-29
|
|
* @date 2026-01-29
|
|
|
*/
|
|
*/
|
|
|
|
|
+@Slf4j
|
|
|
@Service
|
|
@Service
|
|
|
public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
{
|
|
{
|
|
@@ -56,6 +57,9 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private BizWaybillCostDetailsMapper bizWaybillCostDetailsMapper;
|
|
private BizWaybillCostDetailsMapper bizWaybillCostDetailsMapper;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private RedisService redisService;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 查询运单管理
|
|
* 查询运单管理
|
|
|
*
|
|
*
|
|
@@ -116,10 +120,16 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
bizWaybillOrder.setPickupType(1);
|
|
bizWaybillOrder.setPickupType(1);
|
|
|
bizWaybillOrder.setCreateTime(DateUtils.getNowDate());
|
|
bizWaybillOrder.setCreateTime(DateUtils.getNowDate());
|
|
|
bizWaybillOrder.setUserId(loginUser.getUserid());
|
|
bizWaybillOrder.setUserId(loginUser.getUserid());
|
|
|
bizWaybillOrder.setDeptId(loginUser.getSysUser().getDeptId());
|
|
bizWaybillOrder.setDeptId(loginUser.getSysUser().getDeptId());
|
|
|
|
|
+
|
|
|
|
|
+ // 保存寄件地址和收件地址到Redis作为用户最近使用地址
|
|
|
|
|
+ saveRecentAddresses(bizWaybillOrder, loginUser.getUserid());
|
|
|
|
|
+
|
|
|
return bizWaybillOrderMapper.insertBizWaybillOrder(bizWaybillOrder);
|
|
return bizWaybillOrderMapper.insertBizWaybillOrder(bizWaybillOrder);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -228,4 +238,85 @@ public class BizWaybillOrderServiceImpl implements IBizWaybillOrderService
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 保存寄件地址和收件地址到Redis作为用户最近使用地址
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ */
|
|
|
|
|
+ private void saveRecentAddresses(BizWaybillOrder bizWaybillOrder, Long userId) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 保存寄件地址
|
|
|
|
|
+ saveRecentAddressToRedis(bizWaybillOrder.getSenderProvince(),
|
|
|
|
|
+ bizWaybillOrder.getSenderCity(),
|
|
|
|
|
+ bizWaybillOrder.getSenderCounty(),
|
|
|
|
|
+ bizWaybillOrder.getSenderAddress(),
|
|
|
|
|
+ bizWaybillOrder.getSenderName(),
|
|
|
|
|
+ bizWaybillOrder.getSenderPhone(),
|
|
|
|
|
+ "sender", userId);
|
|
|
|
|
+
|
|
|
|
|
+ // 保存收件地址
|
|
|
|
|
+ saveRecentAddressToRedis(bizWaybillOrder.getReceiverProvince(),
|
|
|
|
|
+ bizWaybillOrder.getReceiverCity(),
|
|
|
|
|
+ bizWaybillOrder.getReceiverCounty(),
|
|
|
|
|
+ bizWaybillOrder.getReceiverAddress(),
|
|
|
|
|
+ bizWaybillOrder.getReceiverName(),
|
|
|
|
|
+ bizWaybillOrder.getReceiverPhone(),
|
|
|
|
|
+ "receiver", userId);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ //记录日志但不影响主流程
|
|
|
|
|
+ log.info("保存最近使用地址到Redis失败: ", e);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 保存单个地址到Redis
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ */
|
|
|
|
|
+ private void saveRecentAddressToRedis(String provinceName, String cityName, String countyName,
|
|
|
|
|
+ String detailedAddress, String contactName, String contactPhone,
|
|
|
|
|
+ String addressType, Long userId) {
|
|
|
|
|
+ if (provinceName == null || cityName == null || contactName == null || contactPhone == null) {
|
|
|
|
|
+ return; //基信息不完整,不保存
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //构造Redis key
|
|
|
|
|
+ String redisKey = RedisCacheConstants.USER_RECENT_ADDRESS_CACHE_KEY + userId;
|
|
|
|
|
+
|
|
|
|
|
+ // 创建地址对象
|
|
|
|
|
+ RecentAddressDto addressDto = new RecentAddressDto();
|
|
|
|
|
+ addressDto.setProvinceName(provinceName);
|
|
|
|
|
+ addressDto.setCityName(cityName);
|
|
|
|
|
+ addressDto.setCountyName(countyName);
|
|
|
|
|
+ addressDto.setDetailedAddress(detailedAddress);
|
|
|
|
|
+ addressDto.setContactName(contactName);
|
|
|
|
|
+ addressDto.setContactPhone(contactPhone);
|
|
|
|
|
+
|
|
|
|
|
+ // 获取当前列表
|
|
|
|
|
+ List<RecentAddressDto> addressList = redisService.getCacheList(redisKey);
|
|
|
|
|
+ if (addressList == null) {
|
|
|
|
|
+ addressList = new ArrayList<>();
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ //移除相同的地址(如果已存在)
|
|
|
|
|
+ addressList.removeIf(addr ->
|
|
|
|
|
+ addr.getProvinceName().equals(provinceName) &&
|
|
|
|
|
+ addr.getCityName().equals(cityName) &&
|
|
|
|
|
+ addr.getCountyName().equals(countyName) &&
|
|
|
|
|
+ addr.getDetailedAddress().equals(detailedAddress) &&
|
|
|
|
|
+ addr.getContactName().equals(contactName) &&
|
|
|
|
|
+ addr.getContactPhone().equals(contactPhone)
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ //将新地址添加到列表开头
|
|
|
|
|
+ addressList.add(0, addressDto);
|
|
|
|
|
+
|
|
|
|
|
+ // 保持最多5个地址
|
|
|
|
|
+ if (addressList.size() > 5) {
|
|
|
|
|
+ addressList = addressList.subList(0, 5);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 保存到Redis,设置过期时间30天
|
|
|
|
|
+ redisService.setCacheList(redisKey, addressList);
|
|
|
|
|
+ redisService.expire(redisKey, 30, TimeUnit.DAYS);
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|