From a5068173471dc2560d94626ad5866c6ec5f2caf3 Mon Sep 17 00:00:00 2001
From: Smile <2767057906@qq.com>
Date: Fri, 7 Mar 2025 18:48:27 +0800
Subject: [PATCH] =?UTF-8?q?bug312=20APP/WEB=E6=8E=A7=E8=B4=A7=E8=AE=A2?=
 =?UTF-8?q?=E5=8D=95=E4=B8=8B=E8=BD=BD=E6=8F=90=E5=8D=95=E6=B7=BB=E5=8A=A0?=
 =?UTF-8?q?=E9=99=90=E5=88=B6=E6=9D=A1=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../service/order/OrderQueryService.java      |  5 +-
 .../order/impl/OrderQueryServiceImpl.java     | 47 +++++++++++++++++++
 .../app/order/MyOrderController.java          |  9 +++-
 3 files changed, 58 insertions(+), 3 deletions(-)

diff --git a/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/OrderQueryService.java b/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/OrderQueryService.java
index b73491a7..a2c1ce4a 100644
--- a/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/OrderQueryService.java
+++ b/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/OrderQueryService.java
@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.order.service.order;
 
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
@@ -407,8 +408,8 @@ public interface OrderQueryService {
     OrderDetailSummaryDto orderDetailSummaryByOrderId(Long orderId);
 
     List<OrderDO> getAirRefreshOrderPrice(List<Integer> transportIdList);
-
-
+    //是否能下载提单
+    CommonResult<Boolean> getOrderShowLadingStateStatus(Long orderId);
     /**
      * 是否拆单子订单
      *
diff --git a/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/impl/OrderQueryServiceImpl.java b/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/impl/OrderQueryServiceImpl.java
index 4d0e2ace..55fd9215 100644
--- a/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/impl/OrderQueryServiceImpl.java
+++ b/yudao-module-order/yudao-module-order-core/src/main/java/cn/iocoder/yudao/module/order/service/order/impl/OrderQueryServiceImpl.java
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.apollo.core.event.Order.OrderApprovalTypeCheckEvent;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
@@ -17,6 +18,7 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
 import cn.iocoder.yudao.framework.security.core.LoginUser;
 import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.customer.dal.dataobject.customer.CustomerDO;
+import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO;
 import cn.iocoder.yudao.module.customer.service.customer.CustomerService;
 import cn.iocoder.yudao.module.customer.service.customerContacts.CustomerContactsService;
 import cn.iocoder.yudao.module.customer.service.zhongPao.ZhongPaoService;
@@ -49,6 +51,7 @@ import cn.iocoder.yudao.module.order.dal.dataobject.approval.OrderApprovalDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.order.OrderDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.orderConsignee.OrderConsigneeDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.orderConsignor.OrderConsignorDO;
+import cn.iocoder.yudao.module.order.dal.dataobject.orderControlLog.OrderControlLogDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.orderDeparture.OrderDepartureDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.orderException.OrderExceptionDO;
 import cn.iocoder.yudao.module.order.dal.dataobject.orderItem.OrderItemDO;
@@ -67,6 +70,7 @@ import cn.iocoder.yudao.module.order.enums.OrderApprovalTypeEnum;
 import cn.iocoder.yudao.module.order.enums.OrderExceptionEnum;
 import cn.iocoder.yudao.module.order.enums.TransportTypeShortEnum;
 import cn.iocoder.yudao.module.order.service.order.*;
+import cn.iocoder.yudao.module.order.service.orderControlLog.OrderControlLogService;
 import cn.iocoder.yudao.module.order.service.orderException.OrderExceptionService;
 import cn.iocoder.yudao.module.order.service.orderWarehouseIn.OrderWarehouseInService;
 import cn.iocoder.yudao.module.order.service.orderWarehousePicture.OrderWarehousePictureService;
@@ -121,6 +125,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.excel.constant.ExportConstant.*;
 import static cn.iocoder.yudao.module.order.enums.ErrorCodeConstants.*;
 import static cn.iocoder.yudao.module.order.enums.OrderApprovalTypeEnum.ORDER_UPDATE;
@@ -138,6 +143,7 @@ import static cn.iocoder.yudao.module.product.enums.ErrorCodeConstants.NOT_FIND_
 public class OrderQueryServiceImpl implements OrderQueryService {
 
     private final OrderMapper orderMapper;
+    private final OrderControlLogService orderControlLogService;
     private final OrderItemMapper orderItemMapper;
     private final OrderTimeMapper orderTimeMapper;
     private final OrderDepartureService orderDepartureService;
@@ -3842,6 +3848,47 @@ public class OrderQueryServiceImpl implements OrderQueryService {
         return orderMapper.getAirRefreshOrderPrice(transportIdList);
     }
 
+    @Override
+    public CommonResult<Boolean> getOrderShowLadingStateStatus(Long orderId) {
+        LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
+        UserRespDTO user = memberUserApi.getUser(loginUser.getId());
+        assert user != null;
+        Long userId = user.getId();
+        OrderBackInfoDto dto = this.info(orderId);
+        if (Objects.isNull(dto)){
+            return success(false);
+        }
+        // 判断发货人是否是当前登录人
+        Long customerId = dto.getConsignorVO().getCustomerId();
+        List<CustomerContactsDO> consigneeCustomerList = customerContactsService.getCustomerContactsListByCustomerId(customerId);
+        CustomerContactsDO customerContactsDO = consigneeCustomerList.stream().filter(val -> Objects.equals(val.getIsDefault(), 1)).findFirst().orElse(null);
+        if (Objects.equals(customerContactsDO.getPhoneNew(),user.getMobile())){
+            return success(true);
+        }
+        Long customerId1 = dto.getConsigneeVO().getCustomerId();
+        List<CustomerContactsDO> consignorCustomerList1 = customerContactsService.getCustomerContactsListByCustomerId(customerId1);
+        CustomerContactsDO customerContactsDO1 = consignorCustomerList1.stream().filter(val -> Objects.equals(val.getIsDefault(), 1)).findFirst().orElse(null);
+        List<OrderControlLogDO> orderControlLogListByOrderIdList = orderControlLogService.getOrderControlLogListByOrderId(orderId, null);
+        boolean isFirstAllAllow = false;
+        int count = 0; // 新增计数器
+        String msg="";
+        for (int i = 0; i < orderControlLogListByOrderIdList.size(); i++) {
+            if (orderControlLogListByOrderIdList.get(i).getTypeKey() == 4) {
+                msg=orderControlLogListByOrderIdList.get(i).getMsg();
+                count++;
+                // 如果发现超过1个,提前终止循环优化性能
+                if (count > 1) {
+                    break;
+                }
+            }
+        }
+        isFirstAllAllow = (count == 1); // 最终判断是否严格等于1
+        if (dto.getSumNum()==dto.getReleaseNum()&&dto.getCargoControlStatus()==1&&isFirstAllAllow&& msg.contains(String.valueOf(customerContactsDO1.getPhoneNew())) && customerContactsDO1.getPhoneNew().equals(user.getMobile())){
+            return success(true);
+        }
+        return success(false);
+    }
+
     @Override
     public boolean isSplitOrderChildren(OrderDO orderDO) {
         boolean isSplitSeparateOrder = orderDO.getSplitSeparateOrder();
diff --git a/yudao-module-order/yudao-module-order-rest/src/main/java/cn/iocoder/yudao/module/order/controller/app/order/MyOrderController.java b/yudao-module-order/yudao-module-order-rest/src/main/java/cn/iocoder/yudao/module/order/controller/app/order/MyOrderController.java
index 893e4c29..274ce0d3 100644
--- a/yudao-module-order/yudao-module-order-rest/src/main/java/cn/iocoder/yudao/module/order/controller/app/order/MyOrderController.java
+++ b/yudao-module-order/yudao-module-order-rest/src/main/java/cn/iocoder/yudao/module/order/controller/app/order/MyOrderController.java
@@ -4,13 +4,13 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.io.file.FileNameUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.code.CodeUtils;
 import cn.iocoder.yudao.framework.common.util.date.DateUtils;
 import cn.iocoder.yudao.framework.common.util.object.JavaBeanUtils;
+import cn.iocoder.yudao.framework.common.util.spring.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
 import cn.iocoder.yudao.framework.excel.util.ExcelUtils;
 import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
@@ -507,6 +507,13 @@ public class MyOrderController {
         }
         return success(pageResult);
     }
+    //是否能下载提单
+    @GetMapping("/getOrderShowLadingStateStatus/{orderId}")
+    @PreAuthenticated
+    @ApiOperation("是否能下载提单")
+    public CommonResult<Boolean> getOrderShowLadingStateStatus(@PathVariable("orderId") Long orderId) {
+        return orderQueryService.getOrderShowLadingStateStatus(orderId);
+    }
 
     @GetMapping("/cargo/control/page")
     @ApiOperation("获得我控货的订单分页")
-- 
2.22.0