From 2ab42edae9d271f5f464b7be475e217752dacb38 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期三, 22 四月 2026 09:24:47 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 115 insertions(+), 0 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
index 920b9e6..b0b876c 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -141,6 +141,27 @@
         noticeService.create(notice);
     }
 
+    /**
+     * 鍙戦�佸徃鏈虹珯鍐呬俊閫氱煡
+     */
+    private void sendDriverNotice(Integer driverId, Constants.DriverOrderNotify notify, Integer orderId, String... params) {
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null || driver.getMemberId() == null) {
+            return;
+        }
+        Notice notice = new Notice();
+        notice.setUserType(1); // 1=鍙告満
+        notice.setUserId(driver.getMemberId());
+        notice.setTitle(notify.getTitle());
+        notice.setContent(notify.format(params));
+        notice.setObjId(orderId);
+        notice.setObjType(0); // 0=璁㈠崟
+        notice.setStatus(0);  // 0=鏈
+        notice.setIsdeleted(Constants.ZERO);
+        notice.setCreateDate(new Date());
+        noticeService.create(notice);
+    }
+
     @Override
     public Integer create(DriverInfo driverInfo) {
         driverInfoMapper.insert(driverInfo);
@@ -1169,6 +1190,12 @@
         // 閫氱煡浼氬憳锛氬徃鏈哄彉鏇�
         sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.DRIVER_CHANGED, orderId,
                 "orderNo", order.getCode());
+
+        // 閫氱煡鍙告満锛氬彇娑堟垚鍔�
+        int remainLimit = limit - (todayCancelCount != null ? todayCancelCount.intValue() + 1 : 1);
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.CANCELLED, orderId,
+                "orderNo", order.getCode(),
+                "cancelLimit", String.valueOf(Math.max(remainLimit, 0)));
     }
 
     @Override
@@ -1243,6 +1270,12 @@
             sendShopNotice(order.getDepositShopId(), Constants.ShopOrderNotify.WAIT_PICKUP, orderId,
                     "orderNo", order.getCode());
         }
+
+        // 閫氱煡鍙告満锛氭姠鍗曟垚鍔�
+        String shopName = order.getDepositShopName() != null ? order.getDepositShopName() : order.getDepositLocation();
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.WAIT_DELIVER, orderId,
+                "orderNo", order.getCode(),
+                "shopName", shopName != null ? shopName : "");
     }
 
     @Override
@@ -1318,6 +1351,88 @@
                     "orderNo", order.getCode(),
                     "driverName", driver.getName());
         }
+
+        // 閫氱煡鍙告満锛氬凡鍙栦欢閰嶉�佷腑
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.DELIVERING, orderId,
+                "orderNo", order.getCode());
+    }
+
+    @Override
+    @Transactional
+    public void confirmDeliver(Integer driverId, DriverDeliverDTO dto) {
+        Integer orderId = dto.getOrderId();
+
+        // 1. 鏍¢獙鍙告満
+        DriverInfo driver = driverInfoMapper.selectById(driverId);
+        if (driver == null) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
+        }
+
+        // 2. 鏍¢獙璁㈠崟
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || Constants.ONE.equals(order.getDeleted())) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        if (!Constants.ONE.equals(order.getType())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曟敮鎸佹鎿嶄綔");
+        }
+        if (order.getTakeShopId() != null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏈夊彇浠堕棬搴楃殑璁㈠崟璇烽�佽揪鑷抽棬搴楁牳閿�");
+        }
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽纭閫佽揪");
+        }
+        if (!driverId.equals(order.getAcceptDriver())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+        }
+
+        // 3. 淇濆瓨閫佽揪鍥剧墖
+        Date now = new Date();
+        if (dto.getImages() != null && !dto.getImages().isEmpty()) {
+            int sortNum = 0;
+            for (String url : dto.getImages()) {
+                Multifile multifile = new Multifile();
+                multifile.setObjId(orderId);
+                multifile.setObjType(Constants.FileType.DRIVER_DONE.getKey());
+                multifile.setType(Constants.ZERO);
+                multifile.setFileurl(url);
+                multifile.setIsdeleted(Constants.ZERO);
+                multifile.setCreateDate(now);
+                multifile.setSortnum(sortNum++);
+                multifileMapper.insert(multifile);
+            }
+        }
+
+        // 4. 鏇存柊璁㈠崟鐘舵�佷负宸查�佽揪(5)
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())
+                .set(Orders::getArriveTime, now)
+                .set(Orders::getUpdateTime, now)
+                .eq(Orders::getId, orderId));
+
+        // 5. 鍐欏叆鎿嶄綔鏃ュ織
+        OrderLog log = new OrderLog();
+        log.setOrderId(orderId);
+        log.setTitle("鍙告満纭閫佽揪");
+        log.setLogInfo(StringUtils.isNotBlank(dto.getRemark()) ? dto.getRemark() : "鍙告満銆�" + driver.getName() + "銆戝凡閫佽揪");
+        log.setObjType(Constants.ORDER_LOG_DRIVER_DELIVER);
+        log.setOptUserId(driver.getMemberId());
+        log.setOptUserType(Constants.ONE);
+        log.setOrderStatus(Constants.OrderStatus.arrived.getStatus());
+        log.setCreateTime(now);
+        log.setDeleted(Constants.ZERO);
+        orderLogMapper.insert(log);
+
+        // 6. 閫氱煡浼氬憳锛氳鍗曞凡閫佽揪锛堟棤鍙栦欢闂ㄥ簵锛�
+        String destination = StringUtils.isNotBlank(order.getTakeShopAddress()) ? order.getTakeShopAddress() : "鐩殑鍦�";
+        sendOrderNotice(order.getMemberId(), Constants.MemberOrderNotify.ARRIVED_NO_SHOP, orderId,
+                "orderNo", order.getCode(),
+                "destination", destination);
+
+        // 閫氱煡鍙告満锛氬凡閫佽揪
+        sendDriverNotice(driverId, Constants.DriverOrderNotify.ARRIVED, orderId,
+                "orderNo", order.getCode(),
+                "destination", destination);
     }
 
     private List<String> getFileUrls(Integer orderId, int objType, String prefix) {

--
Gitblit v1.9.3