From c9f0611f690b3fb0cb120f5b6799f94977d3f129 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 20 四月 2026 11:34:23 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java |   87 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 87 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 5c292e9..8110145 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
@@ -21,8 +21,11 @@
 import com.doumee.dao.business.OrdersDetailMapper;
 import com.doumee.dao.business.RevenueMapper;
 import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.biz.system.OperationConfigBiz;
+import com.doumee.dao.business.OrderLogMapper;
 import com.doumee.dao.business.model.Category;
 import com.doumee.dao.business.model.DriverInfo;
+import com.doumee.dao.business.model.OrderLog;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.business.model.Multifile;
 import com.doumee.dao.business.model.Smsrecord;
@@ -98,6 +101,12 @@
 
     @Autowired
     private SystemDictDataBiz systemDictDataBiz;
+
+    @Autowired
+    private OrderLogMapper orderLogMapper;
+
+    @Autowired
+    private OperationConfigBiz operationConfigBiz;
 
     @Override
     public Integer create(DriverInfo driverInfo) {
@@ -660,6 +669,9 @@
         if (driver == null) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "鍙告満淇℃伅涓嶅瓨鍦�");
         }
+        if (!Constants.THREE.equals(driver.getAuditStatus())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇峰厛瀹屾垚鎶奸噾鏀粯");
+        }
         driverInfoMapper.update(new UpdateWrapper<DriverInfo>().lambda()
                 .set(DriverInfo::getAcceptingStatus, status)
                 .eq(DriverInfo::getId, driver.getId()));
@@ -763,6 +775,10 @@
         if (driver == null || driver.getLatitude() == null || driver.getLongitude() == null) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鍙告満浣嶇疆淇℃伅缂哄け锛岃鍏堝紑鍚畾浣�");
         }
+        // 鏍¢獙鍙告満宸叉敮浠樻娂閲�
+        if (!Constants.THREE.equals(driver.getAuditStatus())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "璇峰厛瀹屾垚鎶奸噾鏀粯");
+        }
         double driverLat = driver.getLatitude();
         double driverLng = driver.getLongitude();
 
@@ -807,6 +823,11 @@
         wrapper.eq(Orders::getType, Constants.ONE)
                 .eq(Orders::getStatus, Constants.TWO)
                 .eq(Orders::getDeleted, Constants.ZERO);
+
+        // 鍙告満绾у埆 >= 璁㈠崟鐗╁搧绾у埆
+        if (driver.getDriverLevel() != null) {
+            wrapper.apply("t.GOOD_LEVEL <= {0}", driver.getDriverLevel());
+        }
 
         // 鍔犳�� OR 鍦ㄩ厤閫佽寖鍥村唴
         wrapper.and(w -> w
@@ -1046,6 +1067,72 @@
         return vo;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void cancelOrder(Integer driverId, Integer orderId, String reason) {
+        // 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 (!Constants.TWO.equals(order.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽鍙栨秷");
+        }
+        if (!driverId.equals(order.getAcceptDriver())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+        }
+
+        // 3. 姣忔棩鍙栨秷娆℃暟闄愬埗
+        String limitStr = operationConfigBiz.getConfig().getDriverDailyCancelLimit();
+        int limit = 3;
+        if (StringUtils.isNotBlank(limitStr)) {
+            try { limit = Integer.parseInt(limitStr); } catch (NumberFormatException ignored) {}
+        }
+        Calendar cal = Calendar.getInstance();
+        cal.set(Calendar.HOUR_OF_DAY, 0);
+        cal.set(Calendar.MINUTE, 0);
+        cal.set(Calendar.SECOND, 0);
+        cal.set(Calendar.MILLISECOND, 0);
+        Date todayStart = cal.getTime();
+        Long todayCancelCount = orderLogMapper.selectCount(new QueryWrapper<OrderLog>().lambda()
+                .eq(OrderLog::getOptUserId, driver.getMemberId())
+                .eq(OrderLog::getObjType, Constants.ORDER_LOG_CANCEL)
+                .eq(OrderLog::getOptUserType, Constants.ONE)
+                .ge(OrderLog::getCreateTime, todayStart));
+        if (todayCancelCount != null && todayCancelCount >= limit) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "浠婃棩鍙栨秷娆℃暟宸茶揪涓婇檺");
+        }
+
+        // 4. 閲嶇疆璁㈠崟鍙告満瀛楁锛堜繚鎸乻tatus=2锛岄噴鏀惧洖鎶㈠崟澶у巺锛�
+        ordersMapper.update(new UpdateWrapper<Orders>().lambda()
+                .set(Orders::getAcceptDriver, null)
+                .set(Orders::getAcceptTime, null)
+                .set(Orders::getAcceptType, null)
+                .eq(Orders::getId, orderId));
+
+        // 5. 鍐欏叆鍙栨秷鏃ュ織
+        OrderLog log = new OrderLog();
+        log.setOrderId(orderId);
+        log.setTitle("鍙告満鍙栨秷璁㈠崟");
+        log.setLogInfo(StringUtils.isNotBlank(reason) ? reason : "鍙告満鍙栨秷鎺ュ崟");
+        log.setObjType(Constants.ORDER_LOG_CANCEL);
+        log.setOptUserId(driver.getMemberId());
+        log.setOptUserType(Constants.ONE);
+        log.setOrderStatus(order.getStatus());
+        log.setCreateTime(new Date());
+        log.setDeleted(Constants.ZERO);
+        orderLogMapper.insert(log);
+    }
+
     private List<String> getFileUrls(Integer orderId, int objType, String prefix) {
         List<Multifile> files = multifileMapper.selectList(
                 new QueryWrapper<Multifile>().lambda()

--
Gitblit v1.9.3