Просмотр исходного кода

订单/骑手开始结束接单

licailing 5 лет назад
Родитель
Сommit
cb12efe3a9

+ 2 - 0
src/main/java/com/izouma/dingdong/domain/OrderInfo.java

@@ -93,6 +93,8 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "骑手状态", name = "riderStatus")
     private RiderStatus riderStatus;
 
+    @ApiModelProperty(value = "取货照片", name = "pickupPhotos")
+    private String pickupPhotos;
 
     //订单信息
     @ApiModelProperty(value = "订单号", name = "orderNo")

+ 39 - 5
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -2,6 +2,7 @@ package com.izouma.dingdong.service;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.merchant.Merchant;
@@ -268,10 +269,13 @@ public class OrderInfoService {
             throw new BusinessException("订单已取消");
         }
 
-        //RiderStatus riderStatus = orderInfo.getRiderStatus();
+        RiderStatus riderStatus = orderInfo.getRiderStatus();
         switch (status) {
             //已接单状态 待取餐
             case ARRIVE:
+                if (!RiderStatus.RECEIVED.equals(riderStatus)) {
+                    throw new BusinessException("订单状态错误");
+                }
                 //判断是否到达商家位置
                 Merchant merchant = orderInfo.getMerchant();
                 Double latitude1 = merchant.getLatitude();
@@ -282,13 +286,23 @@ public class OrderInfoService {
                 //待取餐
                 orderInfo.setRiderStatus(RiderStatus.ARRIVE);
                 break;
-            case TAKE_MEAL:
+            /*case TAKE_MEAL:
+                if (!RiderStatus.ARRIVE.equals(riderStatus)) {
+                    throw new BusinessException("订单状态错误");
+                }
+                if (StrUtil.isEmpty(img)) {
+                    throw new BusinessException("照片不能为空");
+                }
+                orderInfo.setPickupPhotos(img);
                 //已取餐 待送达
                 orderInfo.setRiderStatus(RiderStatus.TAKE_MEAL);
                 //商家状态已完成
                 orderInfo.setMerchantStatus(MerchantStatus.CARRY_OUT);
-                break;
+                break;*/
             case CARRY_OUT:
+                if (!RiderStatus.TAKE_MEAL.equals(riderStatus)) {
+                    throw new BusinessException("订单状态错误");
+                }
                 //确认是否到达用户地址位置
                 Address address = addressRepo.findById(orderInfo.getAddressId())
                         .orElseThrow(new BusinessException("地址不存在"));
@@ -311,6 +325,28 @@ public class OrderInfoService {
         orderInfoRepo.save(orderInfo);
     }
 
+    /*
+    骑手到店拍照取货
+     */
+    public void pickupPhotos(Long orderId, RiderStatus status, String img) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+        if (!RiderStatus.TAKE_MEAL.equals(status)) {
+            throw new BusinessException("状态错误");
+        }
+        if (StrUtil.isEmpty(img)) {
+            throw new BusinessException("照片不能为空");
+        }
+        if (!RiderStatus.ARRIVE.equals(orderInfo.getRiderStatus())) {
+            throw new BusinessException("订单状态错误");
+        }
+        //已取餐 待送达
+        orderInfo.setRiderStatus(RiderStatus.TAKE_MEAL);
+        //商家状态已完成
+        orderInfo.setMerchantStatus(MerchantStatus.CARRY_OUT);
+        orderInfo.setPickupPhotos(img);
+        orderInfoRepo.save(orderInfo);
+    }
+
     /**
      * 按用户ID查出用户/商家/骑手订单
      *
@@ -394,8 +430,6 @@ public class OrderInfoService {
     }*/
 
 
-
-
     /*
     支付倒计时
      */

+ 22 - 5
src/main/java/com/izouma/dingdong/service/rider/RiderSignService.java

@@ -1,11 +1,12 @@
 package com.izouma.dingdong.service.rider;
 
-import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.rider.RiderSign;
 import com.izouma.dingdong.repo.rider.RiderSignRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+
 @Service
 @AllArgsConstructor
 public class RiderSignService {
@@ -16,11 +17,27 @@ public class RiderSignService {
     /*
     骑手开始停止接单
     */
-    public void riderOrder(Long riderId,Boolean isStart) {
-        if (isStart){
-
+    public void riderOrder(Long riderId, Boolean isStart, Double longitude, Double latitude) {
+        RiderSign sign = riderSignRepo.findByRiderIdAndTakingOrders(riderId, true);
+        if (isStart) {
+            if (sign != null) {
+                return;
+            }
+            sign = RiderSign.builder()
+                    .takingOrders(true)
+                    .signTime(LocalDateTime.now())
+                    .riderId(riderId)
+                    .longitude(longitude)
+                    .latitude(latitude)
+                    .build();
+        } else {
+            if (sign == null) {
+                return;
+            } else {
+                sign.setTakingOrders(false);
+            }
         }
-
+        riderSignRepo.save(sign);
     }
 
 }

+ 6 - 8
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -119,14 +119,6 @@ public class OrderInfoController extends BaseController {
         return new PageImpl<>(collect, toPageRequest(pageQuery), pageQuery.getSize());*/
     }
 
-
-/*    @PostMapping("/list")
-    @ApiOperation("/按userId查订单")
-    public Page<OrderInfoDTO> list(Long id, PageQuery pageQuery) {
-        //        new PageImpl<>(list,toPageRequest(pageQuery),pageQuery.getSize())
-        return new PageImpl<>(orderInfoService.my(id), toPageRequest(pageQuery), pageQuery.getSize()).map(orderInfoService::toDto);
-    }*/
-
     @GetMapping("/received")
     @ApiOperation("商家手动接单")
     public OrderInfo received(Long orderId, Boolean pass) {
@@ -180,5 +172,11 @@ public class OrderInfoController extends BaseController {
         return orderInfoRepo.findAll(toSpecification(pageQuery, OrderInfo.class), toPageRequest(pageQuery))
                 .map(orderInfoService::toDto);
     }
+
+    @GetMapping("/pickupPhotos")
+    @ApiOperation("到店拍照取货")
+    public void pickupPhotos(Long orderId, RiderStatus status, String img) {
+        orderInfoService.pickupPhotos(orderId, status, img);
+    }
 }
 

+ 14 - 2
src/main/java/com/izouma/dingdong/web/rider/RiderSignController.java

@@ -1,5 +1,7 @@
 package com.izouma.dingdong.web.rider;
 
+import com.izouma.dingdong.repo.rider.RiderRepo;
+import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.rider.RiderSign;
 import com.izouma.dingdong.service.rider.RiderSignService;
@@ -9,6 +11,7 @@ import com.izouma.dingdong.repo.rider.RiderSignRepo;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -23,7 +26,8 @@ import java.util.List;
 @AllArgsConstructor
 public class RiderSignController extends BaseController {
     private RiderSignService riderSignService;
-    private RiderSignRepo riderSignRepo;
+    private RiderSignRepo    riderSignRepo;
+    private RiderRepo        riderRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -40,7 +44,7 @@ public class RiderSignController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     public Page<RiderSign> all(PageQuery pageQuery) {
-        return riderSignRepo.findAll(toSpecification(pageQuery,RiderSign.class), toPageRequest(pageQuery));
+        return riderSignRepo.findAll(toSpecification(pageQuery, RiderSign.class), toPageRequest(pageQuery));
     }
 
     @GetMapping("/get/{id}")
@@ -59,5 +63,13 @@ public class RiderSignController extends BaseController {
         List<RiderSign> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @GetMapping("/riderOrder")
+    @ApiOperation("开始/停止接单")
+    public void riderOrder(Boolean isStart, Double longitude, Double latitude) {
+        Long id = SecurityUtils.getAuthenticatedUser().getId();
+        Long riderId = riderRepo.findByUserId(id).orElseThrow(new BusinessException("无骑手")).getId();
+        riderSignService.riderOrder(riderId, isStart, longitude, latitude);
+    }
 }