Browse Source

Merge remote-tracking branch 'origin/master'

颜琼丽 14 hours ago
parent
commit
6d581779c9

+ 1 - 1
jd-logistics-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SpringDocAutoConfiguration.java

@@ -20,7 +20,7 @@ import io.swagger.v3.oas.models.servers.Server;
  * @author lydgt
  * @author lydgt
  */
  */
 @EnableConfigurationProperties(SpringDocProperties.class)
 @EnableConfigurationProperties(SpringDocProperties.class)
-@ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = true)
+@ConditionalOnProperty(name = "springdoc.api-docs.enabled", havingValue = "true", matchIfMissing = false)
 public class SpringDocAutoConfiguration
 public class SpringDocAutoConfiguration
 {
 {
     @Bean
     @Bean

+ 31 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/front/controller/AddressBookController.java

@@ -5,12 +5,16 @@ import com.ruoyi.common.core.web.domain.AjaxResult;
 import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.core.web.page.TableDataInfo;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.annotation.Log;
 import com.ruoyi.common.log.enums.BusinessType;
 import com.ruoyi.common.log.enums.BusinessType;
-import com.ruoyi.common.security.annotation.RequiresPermissions;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.logistics.constant.RedisCacheConstants;
 import com.ruoyi.logistics.domain.BizAddressBook;
 import com.ruoyi.logistics.domain.BizAddressBook;
+import com.ruoyi.logistics.domain.dto.RecentAddressDto;
 import com.ruoyi.logistics.service.IBizAddressBookService;
 import com.ruoyi.logistics.service.IBizAddressBookService;
+import com.ruoyi.common.redis.service.RedisService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
@@ -26,6 +30,9 @@ public class AddressBookController extends BaseController
     @Autowired
     @Autowired
     private IBizAddressBookService bizAddressBookService;
     private IBizAddressBookService bizAddressBookService;
 
 
+    @Autowired
+    private RedisService redisService;
+
     /**
     /**
      * 查询地址簿管理列表
      * 查询地址簿管理列表
      */
      */
@@ -83,4 +90,27 @@ public class AddressBookController extends BaseController
     public AjaxResult getDefaultAddress() {
     public AjaxResult getDefaultAddress() {
         return success(bizAddressBookService.selectDefaultAddressBook());
         return success(bizAddressBookService.selectDefaultAddressBook());
     }
     }
+
+    /**
+     * 获取用户最近使用的地址
+     * @return 最近使用的地址列表
+     */
+    @GetMapping("/getRecentAddresses")
+    public AjaxResult getRecentAddresses() {
+        // 获取当前登录用户ID
+        Long userId = SecurityUtils.getLoginUser().getUserid();
+
+        // 构造Redis key
+        String redisKey = RedisCacheConstants.USER_RECENT_ADDRESS_CACHE_KEY + userId;
+
+        // 从Redis获取最近使用的地址列表
+        List<RecentAddressDto> addressList =
+            redisService.getCacheList(redisKey);
+
+        if (addressList == null) {
+            addressList = new ArrayList<>();
+        }
+
+        return success(addressList);
+    }
 }
 }

+ 4 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/callback/JDPushOrderFeeCallback.java

@@ -12,6 +12,7 @@ import com.ruoyi.logistics.service.IBizWaybillOrderService;
 import com.ruoyi.system.api.domain.SysDept;
 import com.ruoyi.system.api.domain.SysDept;
 import com.ruoyi.system.service.ISysDeptService;
 import com.ruoyi.system.service.ISysDeptService;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -52,6 +53,9 @@ public class JDPushOrderFeeCallback {
         SysDept sysDept = sysDeptService.selectDeptById(bizWaybillOrder.getDeptId());
         SysDept sysDept = sysDeptService.selectDeptById(bizWaybillOrder.getDeptId());
 
 
         List<BizWaybillCostDetails> details = new ArrayList<>();
         List<BizWaybillCostDetails> details = new ArrayList<>();
+        if (CollectionUtils.isEmpty(request.getCommonActualFeeInfoDetails())) {
+            return AjaxResult.error("费用信息为空");
+        }
         request.getCommonActualFeeInfoDetails().forEach(item -> {
         request.getCommonActualFeeInfoDetails().forEach(item -> {
             BizWaybillCostDetails costDetail = new BizWaybillCostDetails();
             BizWaybillCostDetails costDetail = new BizWaybillCostDetails();
             costDetail.setWaybillId(bizWaybillOrder.getWaybillId());
             costDetail.setWaybillId(bizWaybillOrder.getWaybillId());

+ 5 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/constant/RedisCacheConstants.java

@@ -17,4 +17,9 @@ public class RedisCacheConstants {
      * 月结二维码缓存KEY
      * 月结二维码缓存KEY
      */
      */
     public static final String MONTH_QRCODE_CACHE_KEY = "month:qrcode:cache:";
     public static final String MONTH_QRCODE_CACHE_KEY = "month:qrcode:cache:";
+
+    /**
+     * 用户近期使用地址缓存
+     */
+    public static final String USER_RECENT_ADDRESS_CACHE_KEY = "user:recent:address:cache:";
 }
 }

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/controller/BizInvoiceController.java

@@ -36,7 +36,7 @@ public class BizInvoiceController {
         try {
         try {
             Map result = invoiceService.invoiceIssuance(invoiceRequest);
             Map result = invoiceService.invoiceIssuance(invoiceRequest);
             if("0".equals(result.get("code").toString())){
             if("0".equals(result.get("code").toString())){
-                AjaxResult.success("开票成功!");
+             return   AjaxResult.success("开票成功!");
             }
             }
             return AjaxResult.error("开票失败!  原因:"+result.get("renson").toString());
             return AjaxResult.error("开票失败!  原因:"+result.get("renson").toString());
         }
         }

+ 3 - 3
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/BizWaybillOrder.java

@@ -139,15 +139,15 @@ public class BizWaybillOrder extends BaseEntity
     private String cancelReason;
     private String cancelReason;
 
 
     /** 父运单ID */
     /** 父运单ID */
-    @Excel(name = "父运单ID")
+//    @Excel(name = "父运单ID")
     private Long parentWaybillId;
     private Long parentWaybillId;
 
 
     /** 是否结算开票 */
     /** 是否结算开票 */
-    @Excel(name = "是否结算开票")
+//    @Excel(name = "是否结算开票")
     private String invoiceFlag;
     private String invoiceFlag;
 
 
     /** 是否调账 */
     /** 是否调账 */
-    @Excel(name = "是否调账")
+//    @Excel(name = "是否调账")
     private String adjustFlag;
     private String adjustFlag;
 
 
     /** 删除标志 (0代表存在 2代表删除) */
     /** 删除标志 (0代表存在 2代表删除) */

+ 1 - 1
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/RptFinancialMonthSummary.java

@@ -30,7 +30,7 @@ public class RptFinancialMonthSummary extends BaseEntity
     private String payableAmount;
     private String payableAmount;
 
 
     /** 交易笔数 */
     /** 交易笔数 */
-    @Excel(name = "交易笔数")
+    @Excel(name = "订单笔数")
     private String transactionCount;
     private String transactionCount;
 
 
     /** 账单状态 1.待对账 2.已对账 3.待开票 4.已开票 */
     /** 账单状态 1.待对账 2.已对账 3.待开票 4.已开票 */

+ 28 - 0
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/domain/dto/RecentAddressDto.java

@@ -0,0 +1,28 @@
+package com.ruoyi.logistics.domain.dto;
+
+import com.ruoyi.common.core.annotation.Excel;
+import lombok.Data;
+
+@Data
+public class RecentAddressDto {
+
+
+    /** 联系人姓名 */
+    private String contactName;
+
+    /** 联系人电话 */
+    private String contactPhone;
+
+    /** 省 */
+    private String provinceName;
+
+    /** 市 */
+    private String cityName;
+
+    /** 区/县 */
+    private String countyName;
+
+    /** 详细地址 */
+    private String detailedAddress;
+
+}

+ 97 - 6
jd-logistics-modules/jd-logistics-system/src/main/java/com/ruoyi/logistics/service/impl/BizWaybillOrderServiceImpl.java

@@ -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);
+    }
 }
 }

+ 1 - 1
jd-logistics-ui-v3/src/views/logistics/monthSummary/index.vue

@@ -96,7 +96,7 @@
         </template>
         </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="应付金额" align="center" prop="payableAmount" />
       <el-table-column label="应付金额" align="center" prop="payableAmount" />
-      <el-table-column label="交易笔数" align="center" prop="transactionCount" />
+      <el-table-column label="订单笔数" align="center" prop="transactionCount" />
       <el-table-column label="账单状态" align="center" prop="status" width="120px" >
       <el-table-column label="账单状态" align="center" prop="status" width="120px" >
         <template #default="scope">
         <template #default="scope">
           <dict-tag :options="monthly_report_status" :value="scope.row.status" />
           <dict-tag :options="monthly_report_status" :value="scope.row.status" />