Procházet zdrojové kódy

Merge remote-tracking branch 'origin/dev' into dev

jinshihui před 1 týdnem
rodič
revize
ec33bd64b6

+ 7 - 0
nightFragrance-massage/src/main/java/com/ylx/order/controller/MerchantOrderController.java

@@ -36,6 +36,13 @@ public class MerchantOrderController {
         return R.ok(page);
     }
 
+    @ApiOperation("商户端接单接口")
+    @PostMapping("/accept")
+    public R<Void> acceptOrder(@Validated @RequestBody OrderAcceptDTO dto) {
+        this.orderService.acceptOrder(dto);
+        return R.ok();
+    }
+
     @ApiOperation("商户端拒绝接单接口")
     @PostMapping("/reject")
     public R<Void> rejectOrder(@Validated @RequestBody OrderRejectDTO dto) {

+ 26 - 0
nightFragrance-massage/src/main/java/com/ylx/order/enums/DispatchedStatusEnum.java

@@ -0,0 +1,26 @@
+package com.ylx.order.enums;
+
+import lombok.Getter;
+
+@Getter
+public enum DispatchedStatusEnum {
+
+    /**
+     * 0:未派单
+     */
+    UN_DISPATCHED(0, "未派单"),
+
+    /**
+     * 1:已派单
+     */
+    DISPATCHED(1, "已派单");
+
+
+    private final Integer code;
+    private final String desc;
+
+    DispatchedStatusEnum(Integer code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+}

+ 75 - 21
nightFragrance-massage/src/main/java/com/ylx/order/service/impl/TOrderServiceImpl.java

@@ -36,10 +36,7 @@ import com.ylx.order.domain.vo.OrderStatusFlowVO;
 import com.ylx.order.domain.vo.merchant.MerchantCancelOrderDTO;
 import com.ylx.order.domain.vo.merchant.OrderCustomerPhoneVO;
 import com.ylx.order.domain.vo.merchant.OrderPageVO;
-import com.ylx.order.enums.AfterSaleServiceStatusEnum;
-import com.ylx.order.enums.CustomerTagEnum;
-import com.ylx.order.enums.OrderStatusEnum;
-import com.ylx.order.enums.PaymentMethodEnum;
+import com.ylx.order.enums.*;
 import com.ylx.order.mapper.TOrderMapper;
 import com.ylx.order.service.IAfterSaleDisplay;
 import com.ylx.order.service.IAfterSalesServiceService;
@@ -540,9 +537,9 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         order.setFinalAmount(finalAmount);
         order.setCouponId(dto.getCouponId());
         order.setCreateTime(DateUtils.getNowDate());
-        order.setStatus(0);
+        order.setStatus(OrderStatusEnum.PENDING_PAYMENT.getCode());
         order.setExecStatus(0);
-        order.setDispatchedStatus(0);
+        order.setDispatchedStatus(DispatchedStatusEnum.UN_DISPATCHED.getCode());
         order.setPaymentMethod(dto.getPaymentMethod());
 
         // 经纬度安全赋值
@@ -912,6 +909,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         Long orderId = dto.getId();
         TOrder order = validateAndGetOrder(dto.getId(), userId);
 
+        // 判断当前订单状态是否为【待接单】,非待接单直接抛出异常(前端toast提示操作失败)
+        if (!ObjectUtil.equals(order.getStatus(), OrderStatusEnum.PENDING_ACCEPT.getCode())) {
+            throw new ServiceException("操作失败,请重试");
+        }
+
         if (ObjectUtil.equals(order.getStatus(), OrderStatusEnum.REJECTED.getCode())) {
             throw new ServiceException("无需重复拒绝接单");
         }
@@ -948,6 +950,7 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         TOrder updateOrder = new TOrder();
         updateOrder.setId(orderId);
         updateOrder.setStatus(OrderStatusEnum.PENDING_SERVICE.getCode());
+        updateOrder.setDispatchedStatus(DispatchedStatusEnum.DISPATCHED.getCode());
         updateOrder.setConfirmedTime(DateUtils.getNowLocalDateTime());
         updateOrder.setUpdateBy(wxLoginUser.getCNickName());
         updateOrder.setUpdateTime(DateUtils.getNowDate());
@@ -963,7 +966,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         Long orderId = dto.getOrderId();
 
         // 2. 查询订单:只查归属商户、未删除、手机号字段
-        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class).select(TOrder::getId, TOrder::getMerchantId, TOrder::getContactPhoneNumber).eq(TOrder::getId, orderId).eq(TOrder::getMerchantId, merchantId).eq(TOrder::getIsDelete, NOT_DELETE));
+        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class)
+                .select(TOrder::getId, TOrder::getMerchantId, TOrder::getContactPhoneNumber)
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getMerchantId, merchantId)
+                .eq(TOrder::getIsDelete, NOT_DELETE));
 
         // 3. 校验订单
         if (ObjectUtil.isNull(order)) {
@@ -990,7 +997,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         String cancelReason = dto.getCancelReason();
 
         // 2. 查询订单基础信息
-        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class).select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getUserId, TOrder::getFinalAmount, TOrder::getProjectId).eq(TOrder::getId, orderId).eq(TOrder::getMerchantId, merchantId).eq(TOrder::getIsDelete, NOT_DELETE));
+        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class)
+                .select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getUserId, TOrder::getFinalAmount, TOrder::getProjectId)
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getMerchantId, merchantId)
+                .eq(TOrder::getIsDelete, NOT_DELETE));
 
         // 订单不存在/不属于当前商户
         if (ObjectUtil.isNull(order)) {
@@ -1008,7 +1019,15 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         // 4. 更新订单为售后状态,并发乐观锁校验
         if (OrderStatusEnum.PENDING_SERVICE.getCode().equals(statusCode)) {
             // ========== 分支1:待服务 → 退回待派单,无售后、无退款 ==========
-            LambdaUpdateWrapper<TOrder> updateWrapper = Wrappers.lambdaUpdate(TOrder.class).set(TOrder::getStatus, OrderStatusEnum.PENDING_DISPATCH.getCode()).set(TOrder::getCancelledTime, LocalDateTime.now()).set(TOrder::getCancelledReason, cancelReason).set(TOrder::getUpdateTime, LocalDateTime.now()).set(TOrder::getUpdateBy, loginUser.getCNickName()).eq(TOrder::getId, orderId).eq(TOrder::getStatus, statusCode);
+            LambdaUpdateWrapper<TOrder> updateWrapper = Wrappers.lambdaUpdate(TOrder.class)
+                    .set(TOrder::getStatus, OrderStatusEnum.PENDING_DISPATCH.getCode())
+                    .set(TOrder::getCancelledTime, LocalDateTime.now())
+                    .set(TOrder::getCancelledReason, cancelReason)
+                    .set(TOrder::getUpdateTime, LocalDateTime.now())
+                    .set(TOrder::getUpdateBy, loginUser.getCNickName())
+                    .set(TOrder::getDispatchedStatus,DispatchedStatusEnum.UN_DISPATCHED.getCode())
+                    .eq(TOrder::getId, orderId)
+                    .eq(TOrder::getStatus, statusCode);
             int row = baseMapper.update(null, updateWrapper);
             if (row <= 0) {
                 throw new ServiceException("订单状态已变更,请刷新重试");
@@ -1016,7 +1035,13 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         } else if (OrderStatusEnum.IN_SERVICE.getCode().equals(statusCode)) {
             // ========== 分支2:服务中 → 转售后、生成售后单、发起退款 ==========
             // 1. 更新订单信息
-            LambdaUpdateWrapper<TOrder> updateWrapper = Wrappers.lambdaUpdate(TOrder.class).set(TOrder::getCancelledTime, LocalDateTime.now()).set(TOrder::getCancelledReason, cancelReason).set(TOrder::getUpdateTime, LocalDateTime.now()).set(TOrder::getUpdateBy, loginUser.getCNickName()).eq(TOrder::getId, orderId).eq(TOrder::getStatus, statusCode);
+            LambdaUpdateWrapper<TOrder> updateWrapper = Wrappers.lambdaUpdate(TOrder.class)
+                    .set(TOrder::getCancelledTime, LocalDateTime.now())
+                    .set(TOrder::getCancelledReason, cancelReason)
+                    .set(TOrder::getUpdateTime, LocalDateTime.now())
+                    .set(TOrder::getUpdateBy, loginUser.getCNickName())
+                    .eq(TOrder::getId, orderId)
+                    .eq(TOrder::getStatus, statusCode);
             int row = baseMapper.update(null, updateWrapper);
             if (row <= 0) {
                 throw new ServiceException("订单状态已变更,请刷新重试");
@@ -1040,23 +1065,33 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         Long merchantId = Long.parseLong(loginUser.getId());
         Long orderId = dto.getOrderId();
 
-        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class).select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getArrivedTime).eq(TOrder::getId, orderId).eq(TOrder::getMerchantId, merchantId).eq(TOrder::getIsDelete, NOT_DELETE));
+        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class)
+                .select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getArrivedTime)
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getMerchantId, merchantId)
+                .eq(TOrder::getIsDelete, NOT_DELETE));
         if (ObjectUtil.isNull(order)) {
             throw new ServiceException("订单不存在或不属于当前商户");
         }
 
+        // 判断当前订单状态判断是否为【已到达】的订单,非【已到达】订单直接抛出异常(前端toast提示操作失败)
+        if (ObjectUtil.isNull(order.getArrivedTime())) {
+            throw new ServiceException("操作失败,请重试");
+        }
+
         Integer status = order.getStatus();
         if (!OrderStatusEnum.PENDING_SERVICE.getCode().equals(status)) {
             throw new ServiceException("仅【待服务】订单可开始服务,当前状态:" + OrderStatusEnum.getInfoByCode(status));
         }
 
-        // 可选强校验:必须先签到到达才能开始服务
-        if (ObjectUtil.isNull(order.getArrivedTime())) {
-            throw new ServiceException("请先完成到达签到,再开始服务");
-        }
-
         // 更新状态+服务开始时间
-        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class).set(TOrder::getStatus, OrderStatusEnum.IN_SERVICE.getCode()).set(TOrder::getStartTime, LocalDateTime.now()).set(TOrder::getUpdateTime, LocalDateTime.now()).eq(TOrder::getId, orderId).set(TOrder::getUpdateBy, loginUser.getCNickName()).eq(TOrder::getStatus, status);
+        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class)
+                .set(TOrder::getStatus, OrderStatusEnum.IN_SERVICE.getCode())
+                .set(TOrder::getStartTime, LocalDateTime.now())
+                .set(TOrder::getUpdateTime, LocalDateTime.now())
+                .eq(TOrder::getId, orderId)
+                .set(TOrder::getUpdateBy, loginUser.getCNickName())
+                .eq(TOrder::getStatus, status);
         int count = baseMapper.update(null, update);
         if (count <= 0) {
             throw new ServiceException("订单状态已变更,请刷新重试");
@@ -1072,7 +1107,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         Long merchantId = Long.parseLong(loginUser.getId());
         Long orderId = dto.getOrderId();
 
-        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class).select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getStartTime).eq(TOrder::getId, orderId).eq(TOrder::getMerchantId, merchantId).eq(TOrder::getIsDelete, NOT_DELETE));
+        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class)
+                .select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus, TOrder::getStartTime)
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getMerchantId, merchantId)
+                .eq(TOrder::getIsDelete, NOT_DELETE));
         if (ObjectUtil.isNull(order)) {
             throw new ServiceException("订单不存在或不属于当前商户");
         }
@@ -1088,7 +1127,13 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
 
         // 更新状态、结束时间
-        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class).set(TOrder::getStatus, OrderStatusEnum.COMPLETED.getCode()).set(TOrder::getCompletedTime, LocalDateTime.now()).set(TOrder::getUpdateTime, LocalDateTime.now()).eq(TOrder::getId, orderId).set(TOrder::getUpdateBy, loginUser.getCNickName()).eq(TOrder::getStatus, status);
+        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class)
+                .set(TOrder::getStatus, OrderStatusEnum.COMPLETED.getCode())
+                .set(TOrder::getCompletedTime, LocalDateTime.now())
+                .set(TOrder::getUpdateTime, LocalDateTime.now())
+                .eq(TOrder::getId, orderId)
+                .set(TOrder::getUpdateBy, loginUser.getCNickName())
+                .eq(TOrder::getStatus, status);
         int count = baseMapper.update(null, update);
         if (count <= 0) {
             throw new ServiceException("订单状态已变更,请刷新重试");
@@ -1116,7 +1161,11 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
 
         // 查询订单
-        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class).select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus).eq(TOrder::getId, orderId).eq(TOrder::getMerchantId, merchantId).eq(TOrder::getIsDelete, NOT_DELETE));
+        TOrder order = baseMapper.selectOne(Wrappers.lambdaQuery(TOrder.class)
+                .select(TOrder::getId, TOrder::getMerchantId, TOrder::getStatus)
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getMerchantId, merchantId)
+                .eq(TOrder::getIsDelete, NOT_DELETE));
         if (ObjectUtil.isNull(order)) {
             throw new ServiceException("订单不存在或不属于当前商户");
         }
@@ -1128,7 +1177,12 @@ public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> impleme
         }
 
         // 更新到达信息
-        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class).set(TOrder::getArrivedTime, LocalDateTime.now()).set(TOrder::getUpdateTime, LocalDateTime.now()).set(TOrder::getUpdateBy, loginUser.getCNickName()).eq(TOrder::getId, orderId).eq(TOrder::getStatus, status);
+        LambdaUpdateWrapper<TOrder> update = Wrappers.lambdaUpdate(TOrder.class)
+                .set(TOrder::getArrivedTime, LocalDateTime.now())
+                .set(TOrder::getUpdateTime, LocalDateTime.now())
+                .set(TOrder::getUpdateBy, loginUser.getCNickName())
+                .eq(TOrder::getId, orderId)
+                .eq(TOrder::getStatus, status);
         int count = baseMapper.update(null, update);
         if (count <= 0) {
             throw new ServiceException("订单状态已变更,请刷新重试");