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/OrdersServiceImpl.java |   65 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 0 deletions(-)

diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 3e2c1ce..8fa0b27 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -536,6 +536,33 @@
         result.setUrgentFee(urgentFeeFen);
         result.setTotalPrice(totalPrice);
         result.setDistance(distanceKm);
+
+        // 7. 棰勮閫佽揪鏃堕暱锛歱ricing_rule type=2锛坒ieldA=1鏍囬�熻揪锛宖ieldA=2鏋侀�熻揪锛�
+        List<PricingRule> timeRules = pricingRuleMapper.selectList(new QueryWrapper<PricingRule>().lambda()
+                .eq(PricingRule::getDeleted, Constants.ZERO)
+                .eq(PricingRule::getType, Constants.TWO)
+                .eq(PricingRule::getCityId, dto.getCityId())
+                .in(PricingRule::getFieldA, Arrays.asList("1", "2")));
+        for (PricingRule tr : timeRules) {
+            BigDecimal baseKm = new BigDecimal(tr.getFieldB());
+            int baseHours = Integer.parseInt(tr.getFieldC());
+            BigDecimal extraKm = new BigDecimal(tr.getFieldD());
+            int extraHours = Integer.parseInt(tr.getFieldE());
+            int hours;
+            if (distanceKm.compareTo(baseKm) <= 0) {
+                hours = baseHours;
+            } else {
+                BigDecimal overDistance = distanceKm.subtract(baseKm);
+                int extraCount = overDistance.divide(extraKm, 0, RoundingMode.CEILING).intValue();
+                hours = baseHours + extraCount * extraHours;
+            }
+            if ("1".equals(tr.getFieldA())) {
+                result.setStandardHours(hours);
+            } else if ("2".equals(tr.getFieldA())) {
+                result.setUrgentHours(hours);
+            }
+        }
+
         return result;
     }
 
@@ -742,6 +769,7 @@
 
         // 鐗╁搧淇℃伅
         orders.setGoodType(dto.getGoodType());
+        orders.setGoodLevel(goodTypeCategory.getRelationId());
         // 鎷兼帴鐗╁搧淇℃伅锛氱墿鍝佺被鍨嬪悕绉般�佸昂瀵稿悕绉�*鏁伴噺锛堟暟缁勫瓧绗︿覆锛�
         List<String> goodsParts = new ArrayList<>();
         for (ItemPriceVO itemVO : priceResult.getItemList()) {
@@ -2339,6 +2367,43 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void memberConfirmReceipt(Integer orderId, Integer memberId) {
+        // 1. 鏌ヨ璁㈠崟
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        // 2. 鏍¢獙褰掑睘
+        if (!memberId.equals(order.getMemberId())) {
+            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+        }
+        // 3. 鏍¢獙璁㈠崟绫诲瀷锛氬紓鍦板瘎瀛�
+        if (!Constants.ONE.equals(order.getType())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浠呭紓鍦板瘎瀛樿鍗曞彲鎿嶄綔");
+        }
+        // 4. 鏍¢獙鏃犲彇浠堕棬搴�
+        if (order.getTakeShopId() != null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇ヨ鍗曟湁鍙栦欢闂ㄥ簵锛岄渶闂ㄥ簵纭鍑哄簱");
+        }
+        // 5. 鏍¢獙鐘舵�侊細宸查�佽揪(5)
+        if (!Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠璁㈠崟鐘舵�佷笉鍏佽纭鏀惰揣");
+        }
+
+        // 6. 鏇存柊璁㈠崟鐘舵�佷负宸插畬鎴�
+        Date now = new Date();
+        order.setStatus(Constants.OrderStatus.finished.getStatus());
+        order.setFinishTime(now);
+        order.setUpdateTime(now);
+        ordersMapper.updateById(order);
+
+        // 7. 鐢熸垚鏀剁泭璁板綍
+        calculateAndSaveOrderFees(orderId);
+        generateRevenueRecords(orderId);
+    }
+
+    @Override
     public void calculateAndSaveOrderFees(Integer orderId) {
         Orders order = ordersMapper.selectById(orderId);
         if (order == null || Constants.equalsInteger(order.getDeleted(), Constants.ONE)) {

--
Gitblit v1.9.3