Forráskód Böngészése

骑手接单规则以及用户注册

licailing 5 éve
szülő
commit
e1d0a0331c
48 módosított fájl, 386 hozzáadás és 221 törlés
  1. 0 13
      pom.xml
  2. 6 4
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  3. 3 2
      src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java
  4. 18 10
      src/main/java/com/izouma/dingdong/domain/rider/Rider.java
  5. 0 37
      src/main/java/com/izouma/dingdong/dto/GoodsSpecDTO.java
  6. 30 0
      src/main/java/com/izouma/dingdong/dto/RiderDistanceDTO.java
  7. 6 1
      src/main/java/com/izouma/dingdong/enums/MerchantStatus.java
  8. 1 0
      src/main/java/com/izouma/dingdong/enums/RefundReason.java
  9. 10 5
      src/main/java/com/izouma/dingdong/enums/RiderStatus.java
  10. 14 1
      src/main/java/com/izouma/dingdong/repo/OrderInfoRepo.java
  11. 4 0
      src/main/java/com/izouma/dingdong/repo/user/AddressRepo.java
  12. 6 55
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  13. 3 1
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  14. 14 29
      src/main/java/com/izouma/dingdong/service/UserService.java
  15. 13 5
      src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java
  16. 5 7
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  17. 11 4
      src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java
  18. 146 3
      src/main/java/com/izouma/dingdong/service/rider/RiderService.java
  19. 2 2
      src/main/java/com/izouma/dingdong/web/AuthenticationController.java
  20. 31 5
      src/main/java/com/izouma/dingdong/web/OrderInfoController.java
  21. 7 5
      src/main/java/com/izouma/dingdong/web/OrderRefundApplyController.java
  22. 0 6
      src/main/java/com/izouma/dingdong/web/backstage/CategoryController.java
  23. 1 1
      src/main/java/com/izouma/dingdong/web/backstage/ComplaintController.java
  24. 1 0
      src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java
  25. 0 1
      src/main/java/com/izouma/dingdong/web/merchant/MerchantSettingsController.java
  26. 8 0
      src/main/java/com/izouma/dingdong/web/user/AddressController.java
  27. 20 20
      src/main/vue/src/router.js
  28. 0 0
      src/main/vue/src/views/merchant/CategoryEdit.vue
  29. 0 0
      src/main/vue/src/views/merchant/CategoryList.vue
  30. 0 0
      src/main/vue/src/views/merchant/MerchantNatureEdit.vue
  31. 0 0
      src/main/vue/src/views/merchant/MerchantNatureList.vue
  32. 0 0
      src/main/vue/src/views/merchant/PriorityEdit.vue
  33. 0 0
      src/main/vue/src/views/merchant/PriorityList.vue
  34. 0 0
      src/main/vue/src/views/merchant/SalesEdit.vue
  35. 0 0
      src/main/vue/src/views/merchant/SalesList.vue
  36. 0 0
      src/main/vue/src/views/merchant/VoiceEdit.vue
  37. 0 0
      src/main/vue/src/views/merchant/VoiceList.vue
  38. 0 0
      src/main/vue/src/views/rider/DeliveryFeeEdit.vue
  39. 0 0
      src/main/vue/src/views/rider/DeliveryFeeList.vue
  40. 0 0
      src/main/vue/src/views/user/ComplaintEdit.vue
  41. 0 0
      src/main/vue/src/views/user/ComplaintList.vue
  42. 0 0
      src/main/vue/src/views/user/CooperateApplyEdit.vue
  43. 0 0
      src/main/vue/src/views/user/CooperateApplyList.vue
  44. 0 0
      src/main/vue/src/views/user/ShoppingCartEdit.vue
  45. 0 0
      src/main/vue/src/views/user/ShoppingCartList.vue
  46. 10 0
      src/test/java/com/izouma/dingdong/repo/OrderInfoRepoTest.java
  47. 14 2
      src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java
  48. 2 2
      src/test/java/com/izouma/dingdong/service/OrderInfoServiceTest.java

+ 0 - 13
pom.xml

@@ -265,18 +265,5 @@
             <version>1.0.1</version>
         </dependency>
 
-        <!-- 腾讯定位 -->
-        <dependency>
-            <groupId>com.tencent.map.geolocation</groupId>
-            <artifactId>TencentLocationSdk-openplatform</artifactId>
-            <version>7.1.7</version>
-        </dependency>
-        <dependency>
-            <groupId>com.tencent.map.geolocation</groupId>
-            <artifactId>TencentLocationSdk-meituandispatch</artifactId>
-            <version>6.2.4</version>
-        </dependency>
-        <!-- 腾讯地图 -->
-
     </dependencies>
 </project>

+ 6 - 4
src/main/java/com/izouma/dingdong/domain/OrderInfo.java

@@ -40,9 +40,6 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "商家状态", name = "merchantStatus")
     private MerchantStatus merchantStatus;
 
-//    @ApiModelProperty(value = "商家地址", name = "merchantAddress")
-//    private String merchantAddress;
-
     @ApiModelProperty(value = "备注", name = "remark")
     private String remark;
 
@@ -86,6 +83,7 @@ public class OrderInfo extends BaseEntity {
 /*    @ApiModelProperty(value = "骑手工号", name = "jobNumber")
     private String jobNumber;*/
 
+    @ApiModelProperty(value = "骑手id", name = "riderId")
     private Long riderId;
 
     @Enumerated(EnumType.STRING)
@@ -99,6 +97,8 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "下单时间", name = "orderTime")
     private LocalDateTime orderTime;
 
+    private Long addressId;
+
     @ApiModelProperty(value = "配送地址", name = "userAddress")
     private String userAddress;
 
@@ -106,7 +106,6 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "支付方式", name = "payMethod")
     private PayMethod payMethod;
 
-
     @Column(nullable = false)
     @ApiModelProperty(value = "取消订单", name = "cancel")
     private Boolean cancel = false;
@@ -150,4 +149,7 @@ public class OrderInfo extends BaseEntity {
     @ApiModelProperty(value = "预计到达时间")
     private LocalDateTime timeOfArrival;
 
+    //不显示的骑手列表
+    private String NotDisplayRiderIds;
+
 }

+ 3 - 2
src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java

@@ -26,6 +26,7 @@ import java.time.LocalDateTime;
 @Where(clause = "enabled = 1")
 @ApiModel(value = "退款申请", description = "退款申请")
 public class OrderRefundApply extends BaseEntity {
+
     @ApiModelProperty(value = "订单ID", name = "orderId")
     private Long orderId;
 
@@ -35,8 +36,8 @@ public class OrderRefundApply extends BaseEntity {
     @ApiModelProperty(value = "商户ID", name = "merchantId")
     private Long merchantId;
 
-//    @ApiModelProperty(value = "图片")
-//    private String img;
+    @ApiModelProperty(value = "图片")
+    private String img;
 
     @Enumerated(EnumType.STRING)
     @ApiModelProperty(value = "理由", name = "reason")

+ 18 - 10
src/main/java/com/izouma/dingdong/domain/rider/Rider.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.domain.rider;
 
 import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.domain.User;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -9,8 +10,7 @@ import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.hibernate.annotations.Where;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
+import javax.persistence.*;
 import java.math.BigDecimal;
 
 @Data
@@ -33,14 +33,17 @@ public class Rider extends BaseEntity {
     @ApiModelProperty(value = "签到", name = "signIn")
     private Boolean signIn;
 
-    @ApiModelProperty(value = "经验值", name = "experience")
-    private String experience;
+    @ApiModelProperty(value = "准点率",name = "punctualityRate")
+    private Double punctualityRate;
 
-    @ApiModelProperty(value = "等级", name = "level")
-    private int level;
+//    @ApiModelProperty(value = "经验值", name = "experience")
+//    private String experience;
 
-    @ApiModelProperty(value = "货币", name = "monetary")
-    private BigDecimal monetary;
+//    @ApiModelProperty(value = "等级", name = "level")
+//    private int level;
+
+//    @ApiModelProperty(value = "货币", name = "monetary")
+//    private BigDecimal monetary;
 
     @ApiModelProperty(value = "成单数", name = "singular")
     private int singular;
@@ -54,8 +57,8 @@ public class Rider extends BaseEntity {
     @ApiModelProperty(value = "差评数", name = "badReview")
     private int badReview;
 
-    @ApiModelProperty(value = "操作",name = "operate")
-    private String operate;
+//    @ApiModelProperty(value = "操作",name = "operate")
+//    private String operate;
 
     @Column(nullable = false)
     @ApiModelProperty(value = "黑名单", name = "blacklist")
@@ -64,4 +67,9 @@ public class Rider extends BaseEntity {
     @Column(nullable = false)
     private Boolean enabled = true;
 
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
+    @JoinColumn(name = "userId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    private User user;
+
+
 }

+ 0 - 37
src/main/java/com/izouma/dingdong/dto/GoodsSpecDTO.java

@@ -1,37 +0,0 @@
-package com.izouma.dingdong.dto;
-
-import com.izouma.dingdong.domain.merchant.GoodsSpecification;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "订单商品及规格", description = "订单商品及规格")
-public class GoodsSpecDTO {
-/*    @ApiModelProperty(value = "订单ID", name = "orderId")
-    private Long orderId;*/
-
-    @ApiModelProperty(value = "商品ID", name = "goodsId")
-    private Long goodsId;
-
-//    private String goodsName;
-
-    @ApiModelProperty(value = "规格", name = "specification")
-    private List<GoodsSpecification> specification;
-
-    @ApiModelProperty(value = "数量", name = "num")
-    private Integer num;
-
-    @ApiModelProperty(value = "商品价格", name = "goodsPrice")
-    private BigDecimal goodsPrice;
-
-}

+ 30 - 0
src/main/java/com/izouma/dingdong/dto/RiderDistanceDTO.java

@@ -0,0 +1,30 @@
+package com.izouma.dingdong.dto;
+
+import com.izouma.dingdong.domain.merchant.GoodsSpecification;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "订单商品及规格", description = "订单商品及规格")
+public class RiderDistanceDTO {
+
+    @ApiModelProperty(value = "骑手ID", name = "riderId")
+    private Long riderId;
+
+    @ApiModelProperty(value = "经度", name = "longitude")
+    private Double longitude;
+
+    @ApiModelProperty(value = "纬度", name = "latitude")
+    private Double latitude;
+
+}

+ 6 - 1
src/main/java/com/izouma/dingdong/enums/MerchantStatus.java

@@ -14,7 +14,12 @@ public enum MerchantStatus {
     /*
     已拒单
      */
-    REJECTED("已拒单");
+    REJECTED("已拒单"),
+
+    /*
+    已完成
+     */
+    CARRY_OUT("已完成");
 
     private final String description;
 

+ 1 - 0
src/main/java/com/izouma/dingdong/enums/RefundReason.java

@@ -14,6 +14,7 @@ public enum RefundReason {
     MORE_POINTS("点多了/点错了/漏点了"),
     DO_NOT_WANT_SOMETHING_TEMPORARILY("临时有事不想要了"),
     USER_COMPLAINTS("用户投诉"),
+    RIDER_CANNOT_REACH_USER("骑手联系不上用户"),
     OTHER("其他原因");
     private final String description;
 

+ 10 - 5
src/main/java/com/izouma/dingdong/enums/RiderStatus.java

@@ -2,23 +2,28 @@ package com.izouma.dingdong.enums;
 
 public enum RiderStatus {
     /*
-    未接单
+    未接单 待接单
      */
     NOT_RECEIVED,
     /*
-    接单
+    接单 待取餐
      */
     RECEIVED,
     /*
-    取餐
+    到达 待取餐
+     */
+    ARRIVE,
+    /*
+    取餐 待送达
      */
     TAKE_MEAL,
     /*
     送餐
      */
-    MEAL_DELIVERY,
+   // MEAL_DELIVERY,
     /*
     送达
      */
-    CARRY_OUT
+    CARRY_OUT,
+
 }

+ 14 - 1
src/main/java/com/izouma/dingdong/repo/OrderInfoRepo.java

@@ -1,6 +1,9 @@
 package com.izouma.dingdong.repo;
 
 import com.izouma.dingdong.domain.OrderInfo;
+import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
+import com.izouma.dingdong.enums.RiderStatus;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
@@ -8,6 +11,7 @@ import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
 public interface OrderInfoRepo extends JpaRepository<OrderInfo, Long>, JpaSpecificationExecutor<OrderInfo> {
@@ -26,8 +30,11 @@ public interface OrderInfoRepo extends JpaRepository<OrderInfo, Long>, JpaSpecif
     //按骑手查找
     List<OrderInfo> findAllByRiderId(Long riderId);
 
+    //按骑手查找状态不为完成的订单
+    List<OrderInfo> findAllByRiderIdAndRiderStatusIsNot(Long riderId, RiderStatus riderStatus);
+
     //按商家和用户查找订单,判断是不是第一次购买
-    List<OrderInfo> findAllByUserIdAndMerchantId(Long userId,Long merchantId);
+    List<OrderInfo> findAllByUserIdAndMerchantId(Long userId, Long merchantId);
 
     @Query("select sum (t.realAmount) from OrderInfo t where t.userId = ?1")
     BigDecimal sumRealAmountByUserId(Long userId);
@@ -36,4 +43,10 @@ public interface OrderInfoRepo extends JpaRepository<OrderInfo, Long>, JpaSpecif
     @Modifying
     @Transactional
     void deleteAllByMerchantId(Long merchantId);
+
+    //查找所有五分钟内骑手未接单的订单
+    List<OrderInfo> findAllByStatusAndOrderTimeAfterAndMerchantStatus(OrderStatus status, LocalDateTime time, MerchantStatus merchantStatus);
+
+    //骑手未接单的订单
+    List<OrderInfo> findAllByStatusAndMerchantStatus(OrderStatus status, MerchantStatus merchantStatus);
 }

+ 4 - 0
src/main/java/com/izouma/dingdong/repo/user/AddressRepo.java

@@ -7,6 +7,7 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface AddressRepo extends JpaRepository<Address, Long>, JpaSpecificationExecutor<Address> {
     @Query("update Address t set t.enabled = false where t.id = ?1")
@@ -18,4 +19,7 @@ public interface AddressRepo extends JpaRepository<Address, Long>, JpaSpecificat
     @Modifying
     @Transactional
     void updateIsDefault(Long id, Long userId);
+
+    //查找用户所有地址
+    List<Address> findAllByUserIdAndEnabledTrue(Long userId);
 }

+ 6 - 55
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -199,45 +199,12 @@ public class OrderInfoService {
             orderInfo.setStatus(OrderStatus.CANCELLED);
             orderInfo.setReason(RefundReason.MERCHANT_REJECTION);
             //退款流程
-            OrderRefundApply apply = orderRefundApplyService.apply(orderId, RefundReason.MERCHANT_REJECTION, "商家拒单退款");
+            OrderRefundApply apply = orderRefundApplyService.apply(orderId, RefundReason.MERCHANT_REJECTION, "商家拒单退款", null);
             orderRefundApplyService.audit(apply.getId(), true, false);
         }
         return orderInfoRepo.save(orderInfo);
     }
 
-    /*
-    周几
-     */
-    public Boolean week(LocalDate localDate, String week) {
-        DayOfWeek dayOfWeek = localDate.getDayOfWeek();
-
-        System.out.println(dayOfWeek);
-        List<String> strings = new StringArrayConverter().convertToEntityAttribute(week);
-        if (strings.contains("EVERY")) {
-            return true;
-        }
-        return strings.contains(dayOfWeek);
-
-    }
-
-    /*
-    骑手接单
-     */
-    public void ridReceiveOrder(Long riderId, Long orderId, Boolean pass) {
-        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
-        if (OrderStatus.CANCELLED.equals(orderInfo.getStatus())) {
-            throw new BusinessException("订单已取消");
-        }
-        if (pass) {
-            orderInfo.setRiderId(riderId);
-            orderInfo.setRiderStatus(RiderStatus.RECEIVED);
-            orderInfoRepo.save(orderInfo);
-        }
-    }
-
-    /*
-    分配骑手
-     */
 
     /*
     骑手点状态
@@ -256,12 +223,12 @@ public class OrderInfoService {
                 RiderStatus riderStatus = orderInfo.getRiderStatus();
                 switch (riderStatus) {
                     case RECEIVED:
+                        orderInfo.setRiderStatus(RiderStatus.ARRIVE);
+                        break;
+                    case ARRIVE:
                         orderInfo.setRiderStatus(RiderStatus.TAKE_MEAL);
                         break;
                     case TAKE_MEAL:
-                        orderInfo.setRiderStatus(RiderStatus.MEAL_DELIVERY);
-                        break;
-                    case MEAL_DELIVERY:
                         orderInfo.setRiderStatus(RiderStatus.CARRY_OUT);
                         orderInfo.setUserReceivedTime(LocalDateTime.now());
                         orderInfo.setStatus(OrderStatus.RATED);
@@ -326,7 +293,7 @@ public class OrderInfoService {
     /*
     用户取消订单
      */
-    public OrderInfo cancel(Long id, RefundReason reason) {
+    public OrderInfo cancel(Long id, RefundReason reason, String remark, String img) {
         OrderInfo orderInfo = orderInfoRepo.findById(id).orElseThrow(new BusinessException("无订单"));
 
         if (orderInfo.getStatus().equals(OrderStatus.UNPAID)) {
@@ -351,7 +318,7 @@ public class OrderInfoService {
                 throw new BusinessException("已完成无法取消");
             }
 
-            OrderRefundApply apply = orderRefundApplyService.apply(id, reason, null);
+            OrderRefundApply apply = orderRefundApplyService.apply(id, reason, remark, img);
             //商家未接单,直接退
             if (MerchantStatus.NOT_RECEIVED.equals(orderInfo.getMerchantStatus())) {
                 orderRefundApplyService.audit(apply.getId(), true, false);
@@ -377,24 +344,8 @@ public class OrderInfoService {
 
     }*/
 
-    /*
-    订单完成结算钱
-     */
-/*    public void orderCarryOut(Long orderId) {
-        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
-
-        //扣除金额
-        SysConfig sysConfig = sysConfigRepo.findByName("commission").orElseThrow(new BusinessException("无设置"));
-        //平台抽成
-        BigDecimal platform = orderInfo.getRealAmount().multiply(new BigDecimal(sysConfig.getValue()));
 
-        //商家应得 = 减去骑手应得,减去平台抽成
-        BigDecimal deserve = orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount()).subtract(platform);
-        merchantSettingsService.income(orderInfo.getMerchantId(), orderInfo.getUserId(), deserve, FinancialType.INCOME);
 
-        //骑手应得
-        riderService.income(orderInfo.getRiderId(), orderInfo.getUserId(), orderInfo.getDeliveryAmount(), FinancialType.INCOME);
-    }*/
 
     /*
     支付倒计时

+ 3 - 1
src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java

@@ -55,8 +55,9 @@ public class OrderRefundApplyService {
      * @param orderId 订单号
      * @param reason  退款缘由
      * @param remark  备注
+     * @param img     图片
      */
-    public OrderRefundApply apply(Long orderId, RefundReason reason, String remark) {
+    public OrderRefundApply apply(Long orderId, RefundReason reason, String remark, String img) {
         OrderInfo order = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无记录"));
 
         OrderRefundApply apply = orderRefundApplyRepo.findByOrderId(orderId);
@@ -89,6 +90,7 @@ public class OrderRefundApplyService {
                 .status(RefundStatus.PENDING)
                 .applyTime(LocalDateTime.now())
                 .reason(reason)
+                .img(img)
                 .remark(remark)
                 .orderId(orderId)
                 .enabled(true)

+ 14 - 29
src/main/java/com/izouma/dingdong/service/UserService.java

@@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.dto.MerchantDTO;
@@ -35,23 +36,21 @@ import static com.izouma.dingdong.enums.Identity.*;
 @Slf4j
 @AllArgsConstructor
 public class UserService {
-    private UserRepo userRepo;
-    private WxMaService wxMaService;
-    private WxMpService wxMpService;
-    private SmsService smsService;
+    private UserRepo       userRepo;
+    private WxMaService    wxMaService;
+    private WxMpService    wxMpService;
+    private SmsService     smsService;
     private StorageService storageService;
-    private JwtTokenUtil jwtTokenUtil;
+    private JwtTokenUtil   jwtTokenUtil;
 
 
     /*
     创建User
      */
     public User register(String phone, String password, Identity identity) {
-        //用于商家登录
-        User user = userRepo.findByPhone(phone);
+        User user = userRepo.findByPhoneAndIdentity(phone, identity);
         if (ObjectUtil.isNull(user)) {
             user = User.builder().username(phone)
-                    .password(new BCryptPasswordEncoder().encode(password))
                     .blacklist(false)
                     .enabled(true)
                     .phone(phone)
@@ -60,15 +59,16 @@ public class UserService {
                     .money(BigDecimal.ZERO)
                     .enabled(true)
                     .build();
-        } else {
-            user.setPassword(new BCryptPasswordEncoder().encode(password));
+            if (StrUtil.isNotBlank(password)) {
+                user.setPassword(new BCryptPasswordEncoder().encode(password));
+            }
+            userRepo.save(user);
         }
-
-        return userRepo.save(user);
+        return user;
     }
 
     public User merUser(MerchantDTO merchantDTO) {
-        User user = userRepo.findByPhone(merchantDTO.getPhone());
+        User user = userRepo.findByPhoneAndIdentity(merchantDTO.getPhone(), MERCHANT);
         if (ObjectUtil.isNotEmpty(user)) {
             throw new BusinessException("此手机号已注册");
         }
@@ -100,22 +100,7 @@ public class UserService {
                     .enabled(true)
                     .avatar(Constants.DEFAULT_AVATAR)
                     .build();
-
-        }
-        return user;
-    }
-
-    public User loginByPhoneAndIdentity(String phone, Identity identity) {
-        User user = userRepo.findByPhoneAndIdentity(phone, identity);
-        if (user == null) {
-            user = User.builder()
-                    .username(UUID.randomUUID().toString())
-                    .nickname(phone)
-                    .phone(phone)
-                    .identity(identity)
-                    .enabled(true)
-                    .avatar(Constants.DEFAULT_AVATAR)
-                    .build();
+            userRepo.save(user);
         }
         return user;
     }

+ 13 - 5
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -1,6 +1,5 @@
 package com.izouma.dingdong.service.merchant;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.converter.LongArrayConverter;
@@ -26,6 +25,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -46,6 +46,7 @@ public class GoodsService {
     private ShoppingCartService           shoppingCartService;
     private OrderGoodsSpecRepo            orderGoodsSpecRepo;
     private ShoppingCartRepo              shoppingCartRepo;
+    private SalesRepo                     salesRepo;
 
     /**
      * 添加修改商品
@@ -272,19 +273,25 @@ public class GoodsService {
         //用户3km以内的商品
         List<Goods> goodsList = new ArrayList<>();
         for (MerchantDTO d : dtos) {
-            goodsList.addAll(goodsRepo.findAllByMerchantIdAndStatus(d.getMid(),ApplyStatus.PASS));
+            goodsList.addAll(goodsRepo.findAllByMerchantIdAndStatus(d.getMid(), ApplyStatus.PASS));
         }
 
+        //过滤掉不是本日营业的商品
+        String dayOfWeek = LocalDateTime.now().getDayOfWeek().toString();
+        List<Goods> list = goodsList.stream()
+                .filter(g -> g.getWeek().contains(dayOfWeek))
+                .collect(Collectors.toList());
+
         List<Goods> all = new ArrayList<>();
         switch (type) {
             case PRAISE_FOOD://好评美食
-                all.addAll(goodsList.stream().filter(Goods::getPraise).collect(Collectors.toList()));
+                all.addAll(list.stream().filter(Goods::getPraise).collect(Collectors.toList()));
                 break;
             case POPULAR_FOOD://人气美食
-                all.addAll(goodsList.stream().filter(Goods::getPopularity).collect(Collectors.toList()));
+                all.addAll(list.stream().filter(Goods::getPopularity).collect(Collectors.toList()));
                 break;
             case SIGNBOARD_FOOD://招牌美食
-                all.addAll(goodsList.stream().filter(Goods::getSignboard)
+                all.addAll(list.stream().filter(Goods::getSignboard)
                         .sorted((a, b) -> b.getPriority().compareTo(a.getPriority())).collect(Collectors.toList()));
                 break;
         }
@@ -294,6 +301,7 @@ public class GoodsService {
             //从大到小
 //            int i = b.getPriority().compareTo(a.getPriority());
 //            if (i == 0) {
+
             MerchantDTO dtoA = dtos.stream()
                     .filter(d -> d.getMid().equals(a.getMerchantId()))
                     .findFirst()

+ 5 - 7
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -54,13 +54,11 @@ public class MerchantService {
     private UserRepo                   userRepo;
     private MerchantClassificationRepo merchantClassificationRepo;
     private VerifiedRepo               verifiedRepo;
-
-    private FullReductionRepo fullReductionRepo;
-    private CouponRepo        couponRepo;
-    private UserCouponRepo    userCouponRepo;
-    private CategoryRepo      categoryRepo;
-
-    private GoodsRepo goodsRepo;
+    private FullReductionRepo          fullReductionRepo;
+    private CouponRepo                 couponRepo;
+    private UserCouponRepo             userCouponRepo;
+    private CategoryRepo               categoryRepo;
+    private GoodsRepo                  goodsRepo;
 
     /*
     商户注册申请

+ 11 - 4
src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java

@@ -65,11 +65,14 @@ public class MerchantSettingsService {
      */
     public List<MerchantDTO> timeMerchant(Long timeTagId) {
         TimeTag timeTag = timeTagRepo.findById(timeTagId).orElseThrow(new BusinessException("无时间标签"));
+        String dayOfWeek = LocalDateTime.now().getDayOfWeek().toString();
+
         List<MerchantSettings> all = merchantSettingsRepo.findAll();
         List<MerchantSettings> collect = all.stream().filter(a ->
-                //商家开始时间早于结束前的一小时 或者 商家结束时间早于开始后的一小时
-                !a.getStartTime().isAfter(timeTag.getEndTime().minusHours(1)) || !a.getEndTime()
-                        .isAfter(timeTag.getStartTime().plusHours(1))
+                //商家开始时间早于结束前的一小时 或者 商家结束时间早于开始后的一小时 且商家本日营业
+                (!a.getStartTime().isAfter(timeTag.getEndTime().minusHours(1)) || !a.getEndTime()
+                        .isAfter(timeTag.getStartTime().plusHours(1))) && a.getIsOpening() && a.getWeek()
+                        .contains(dayOfWeek)
         ).collect(Collectors.toList());
 
         List<MerchantDTO> list = CollUtil.newArrayList();
@@ -241,10 +244,14 @@ public class MerchantSettingsService {
     public List<MerchantDTO> listSort(Double longitude, Double latitude, Integer sort) {
         //处于营业内
         LocalTime now = LocalTime.now();
+        String dayOfWeek = LocalDateTime.now().getDayOfWeek().toString();
         List<MerchantSettings> all = merchantSettingsRepo.findAll();
 
         List<MerchantSettings> collect = all.stream()
-                .filter(a -> a.getStartTime().isBefore(now) && a.getEndTime().isAfter(now) && a.getPriority() >= 2)
+                .filter(a -> a.getStartTime().isBefore(now) && a.getEndTime().isAfter(now) && a.getPriority() >= 2
+                        && a.getIsOpening() && a.getWeek()
+                        .contains(dayOfWeek)
+                )
                 .collect(Collectors.toList());
         Set<Merchant> merchantList = new HashSet<>();
 

+ 146 - 3
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -1,26 +1,44 @@
 package com.izouma.dingdong.service.rider;
 
+import cn.hutool.core.collection.CollUtil;
 import com.izouma.dingdong.domain.MoneyRecord;
+import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.User;
+import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.domain.user.Address;
+import com.izouma.dingdong.dto.RiderDistanceDTO;
 import com.izouma.dingdong.enums.FinancialType;
+import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
+import com.izouma.dingdong.enums.RiderStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.MoneyRecordRepo;
+import com.izouma.dingdong.repo.OrderInfoRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
+import com.izouma.dingdong.repo.user.AddressRepo;
+import com.izouma.dingdong.service.OrderRefundApplyService;
+import com.izouma.dingdong.service.merchant.SalesService;
+import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.*;
 
 @Service
 @AllArgsConstructor
 public class RiderService {
 
-    private RiderRepo riderRepo;
-    private UserRepo userRepo;
-    private MoneyRecordRepo moneyRecordRepo;
+    private RiderRepo               riderRepo;
+    private UserRepo                userRepo;
+    private MoneyRecordRepo         moneyRecordRepo;
+    private OrderInfoRepo           orderInfoRepo;
+    private OrderRefundApplyService orderRefundApplyService;
+    private SalesService            salesService;
+    private AddressRepo             addressRepo;
 
     /*
     骑手签到
@@ -53,4 +71,129 @@ public class RiderService {
                 .build());
 
     }
+
+
+    /*
+    骑手抢单形式接单
+    5分钟内手动抢单
+     */
+    public void riderReceiveOrder(Long riderId, Long orderId, Boolean pass) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+        if (pass) {
+            if (!OrderStatus.PAID.equals(orderInfo.getStatus())) {
+                throw new BusinessException("订单不可接单");
+            }
+            if (!MerchantStatus.RECEIVED.equals(orderInfo.getMerchantStatus())) {
+                throw new BusinessException("商家未接单");
+            }
+            if (!RiderStatus.NOT_RECEIVED.equals(orderInfo.getRiderStatus())) {
+                throw new BusinessException("已被其他骑手接单");
+            }
+            //设置订单状态
+            orderInfo.setRiderId(riderId);
+            orderInfo.setRiderStatus(RiderStatus.RECEIVED);
+            orderInfoRepo.save(orderInfo);
+        } else {
+            //已拒单不再显示给这个骑手
+            orderInfo.setNotDisplayRiderIds(riderId + ",");
+        }
+    }
+
+    /*
+    系统派单
+    5分钟后自动接单
+        有空闲骑手离商家最近的距离排序,骑手不可拒单
+        无空闲,离商家最近的骑手,骑手可接单可拒单 --> 无法判断都拒单
+        骑手都拒单,或超过5分钟,按距离强制接单
+        商家3km内无骑手,取消订单
+     */
+    public void dispatch(Long orderId, List<RiderDistanceDTO> dtos) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+        Map<Long, Double> map = new HashMap<>();
+        dtos.forEach(d -> {
+            Merchant merchant = orderInfo.getMerchant();
+            Double distance = MapUtils.distance(merchant.getLongitude(), merchant.getLatitude(), d.getLongitude(), d.getLatitude());
+            map.put(d.getRiderId(), distance);
+        });
+        //排序
+        List<Map.Entry<Long, Double>> list = new ArrayList<>(map.entrySet());
+        list.sort(Comparator.comparing(Map.Entry<Long, Double>::getValue));
+
+        for (Map.Entry<Long, Double> m : list) {
+            Rider rider = riderRepo.findById(m.getKey()).orElseThrow(new BusinessException("无骑手"));
+            //if (rider.getSignIn()) {
+            List<OrderInfo> infos = orderInfoRepo.findAllByRiderIdAndRiderStatusIsNot(m.getKey(), RiderStatus.CARRY_OUT);
+            //有空闲骑手,自动接单,不可拒单
+            if (CollUtil.isEmpty(infos)) {
+                orderInfo.setRiderId(m.getKey());
+                orderInfo.setRiderStatus(RiderStatus.RECEIVED);
+                break;
+            }
+            // }
+        }
+
+        //无空闲骑手 距离最近的接单
+        if (RiderStatus.NOT_RECEIVED.equals(orderInfo.getRiderStatus())) {
+            Long riderId = list.get(0).getKey();
+            orderInfo.setRiderId(riderId);
+            orderInfo.setRiderStatus(RiderStatus.RECEIVED);
+        }
+
+        orderInfoRepo.save(orderInfo);
+    }
+
+
+   /*
+   骑手改变状态
+   */
+
+    public void riderCarryOut(Long orderId, RiderStatus status, Double longitude, Double latitude) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+
+        if (OrderStatus.CANCELLED.equals(orderInfo.getStatus())) {
+            throw new BusinessException("订单已取消");
+        }
+
+        RiderStatus riderStatus = orderInfo.getRiderStatus();
+        switch (riderStatus) {
+            //已接单状态 待取餐
+            case ARRIVE:
+                //判断是否到达商家位置
+                Merchant merchant = orderInfo.getMerchant();
+                Double latitude1 = merchant.getLatitude();
+                Double longitude1 = merchant.getLongitude();
+                if (MapUtils.distance(longitude, latitude, longitude1, latitude1) > 5.0) {
+                    throw new BusinessException("未到店");
+                }
+                //待取餐
+                orderInfo.setRiderStatus(RiderStatus.ARRIVE);
+                break;
+            case TAKE_MEAL:
+                //已取餐 待送达
+                orderInfo.setRiderStatus(RiderStatus.TAKE_MEAL);
+                //商家状态已完成
+                orderInfo.setMerchantStatus(MerchantStatus.CARRY_OUT);
+                break;
+            case CARRY_OUT:
+                //确认是否到达用户地址位置
+                Address address = addressRepo.findById(orderInfo.getAddressId())
+                        .orElseThrow(new BusinessException("地址不存在"));
+                Double latitude2 = address.getLatitude();
+                Double longitude2 = address.getLongitude();
+                if (MapUtils.distance(longitude, latitude, longitude2, latitude2) > 5) {
+                    throw new BusinessException("未到用户地点");
+                }
+                //已送达
+                orderInfo.setRiderStatus(RiderStatus.CARRY_OUT);
+                orderInfo.setUserReceivedTime(LocalDateTime.now());
+                orderInfo.setStatus(OrderStatus.RATED);
+
+                //支付价钱
+                orderRefundApplyService.orderCarryOut(orderId);
+                //添加销量数据
+                salesService.addSale(orderInfo);
+                break;
+        }
+        orderInfoRepo.save(orderInfo);
+    }
 }

+ 2 - 2
src/main/java/com/izouma/dingdong/web/AuthenticationController.java

@@ -35,9 +35,9 @@ import java.util.Objects;
 @RequestMapping("/auth")
 public class AuthenticationController {
     private AuthenticationManager authenticationManager;
-    private JwtTokenUtil jwtTokenUtil;
+    private JwtTokenUtil          jwtTokenUtil;
     private JwtUserDetailsService userDetailsService;
-    private UserService userService;
+    private UserService           userService;
 
     private MerchantService merchantService;
 

+ 31 - 5
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -1,8 +1,12 @@
 package com.izouma.dingdong.web;
 
+import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.dto.UserOrderDTO;
+import com.izouma.dingdong.enums.Identity;
+import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.RefundReason;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.service.OrderInfoService;
@@ -18,9 +22,11 @@ import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.web.bind.annotation.*;
+
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -29,9 +35,9 @@ import java.util.Map;
 @AllArgsConstructor
 public class OrderInfoController extends BaseController {
     private OrderInfoService orderInfoService;
-    private OrderInfoRepo orderInfoRepo;
-    private UserRepo userRepo;
-    private MerchantService merchantService;
+    private OrderInfoRepo    orderInfoRepo;
+    private UserRepo         userRepo;
+    private MerchantService  merchantService;
 
 
     //@PreAuthorize("hasRole('ADMIN')")
@@ -130,11 +136,31 @@ public class OrderInfoController extends BaseController {
 
     @GetMapping("/cancelOrder")
     @ApiOperation("取消订单")
-    public OrderInfo cancel(Long id, RefundReason reason) {
-        return orderInfoService.cancel(id, reason);
+    public OrderInfo cancel(Long id, RefundReason reason, String remark, String img) {
+        //如果是骑手取消
+        if (Identity.RIDER.equals(SecurityUtils.getAuthenticatedUser().getIdentity())) {
+            if (StrUtil.isEmpty(img)) {
+                throw new BusinessException("无联系信息截图");
+            }
+        }
+
+        //订单id  理由  备注  图片
+        return orderInfoService.cancel(id, reason, remark, img);
     }
 
     //@GetMapping("/cancelCancelOrder")
 
+    @GetMapping("/missedOrder")
+    @ApiOperation("骑手端,五分钟内未接单的订单")
+    public List<OrderInfo> missedOrder() {
+        return orderInfoRepo.findAllByStatusAndOrderTimeAfterAndMerchantStatus(OrderStatus.PAID, LocalDateTime.now()
+                .plusMinutes(5), MerchantStatus.RECEIVED);
+    }
+
+    @GetMapping("/riderReceived")
+    @ApiOperation("骑手端,未接单的订单")
+    public List<OrderInfo> riderReceived() {
+        return orderInfoRepo.findAllByStatusAndMerchantStatus(OrderStatus.PAID, MerchantStatus.RECEIVED);
+    }
 }
 

+ 7 - 5
src/main/java/com/izouma/dingdong/web/OrderRefundApplyController.java

@@ -38,7 +38,8 @@ public class OrderRefundApplyController extends BaseController {
     @PostMapping("/save")
     public OrderRefundApply save(@RequestBody OrderRefundApply record) {
         if (record.getId() != null) {
-            OrderRefundApply orig = orderRefundApplyRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            OrderRefundApply orig = orderRefundApplyRepo.findById(record.getId())
+                    .orElseThrow(new BusinessException("无记录"));
             ObjUtils.merge(orig, record);
             return orderRefundApplyRepo.save(orig);
         }
@@ -72,8 +73,8 @@ public class OrderRefundApplyController extends BaseController {
 
     @GetMapping("/apply")
     @ApiOperation("申请退款")
-    public void apply(@RequestParam Long orderId, RefundReason reason, String remark) {
-        orderRefundApplyService.apply(orderId, reason, remark);
+    public void apply(@RequestParam Long orderId, RefundReason reason, String remark, String img) {
+        orderRefundApplyService.apply(orderId, reason, remark, img);
     }
 
     @ApiOperation("商家是否同意退款")
@@ -93,7 +94,8 @@ public class OrderRefundApplyController extends BaseController {
     @GetMapping("/merchant")
     @ApiOperation("商家退款订单")
     public List<OrderRefundApply> cancel() {
-        return orderRefundApplyRepo.findAllByMerchantId(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId()));
+        return orderRefundApplyRepo.findAllByMerchantId(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser()
+                .getId()));
     }
 
     @ApiOperation("平台是否同意退款")
@@ -104,7 +106,7 @@ public class OrderRefundApplyController extends BaseController {
 
     @ApiOperation("已打款")
     @GetMapping("/payment")
-    public void payment(@RequestParam Long id){
+    public void payment(@RequestParam Long id) {
         orderRefundApplyService.payment(id);
     }
 }

+ 0 - 6
src/main/java/com/izouma/dingdong/web/backstage/CategoryController.java

@@ -1,7 +1,6 @@
 package com.izouma.dingdong.web.backstage;
 
 import cn.hutool.core.util.ObjectUtil;
-import com.izouma.dingdong.dto.CategoryDTO;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.backstage.Category;
@@ -66,11 +65,6 @@ public class CategoryController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
-    @PostMapping("/saveCategory")
-    public CategoryDTO saveCategory(CategoryDTO dto) {
-        return null;
-    }
-
     @GetMapping("/tree")
     public List<Category> tree(Long id) {
         return categoryRepo.findAllByParent(id);

+ 1 - 1
src/main/java/com/izouma/dingdong/web/backstage/ComplaintController.java

@@ -70,7 +70,7 @@ public class ComplaintController extends BaseController {
     @GetMapping("/refund")
     public void refund(Long id, BigDecimal merchantLiability, BigDecimal riderLiability, String remark) {
         Complaint complaint = complaintRepo.findById(id).orElseThrow(new BusinessException("无记录"));
-        OrderRefundApply apply = orderRefundApplyService.apply(complaint.getOrderId(), RefundReason.USER_COMPLAINTS, remark);
+        OrderRefundApply apply = orderRefundApplyService.apply(complaint.getOrderId(), RefundReason.USER_COMPLAINTS, remark,null);
         orderRefundApplyService.audit(apply.getId(), false, false);
         orderRefundApplyService.platformAudit(apply.getId(), true, merchantLiability, riderLiability, true);
         complaint.setSolution(Solution.REFUND);

+ 1 - 0
src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java

@@ -120,6 +120,7 @@ public class GoodsController extends BaseController {
     }
 
     @GetMapping("/goods")
+    @ApiOperation("/客户端下的商家内的商品列表")
     public List<Goods> goods(Long merchantId) {
         return goodsRepo.findAllByMerchantIdAndStatus(merchantId, ApplyStatus.PASS);
     }

+ 0 - 1
src/main/java/com/izouma/dingdong/web/merchant/MerchantSettingsController.java

@@ -16,7 +16,6 @@ import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;

+ 8 - 0
src/main/java/com/izouma/dingdong/web/user/AddressController.java

@@ -1,5 +1,6 @@
 package com.izouma.dingdong.web.user;
 
+import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.user.Address;
 import com.izouma.dingdong.service.user.AddressService;
@@ -9,6 +10,7 @@ import com.izouma.dingdong.repo.user.AddressRepo;
 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;
@@ -64,5 +66,11 @@ public class AddressController extends BaseController {
         List<Address> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @GetMapping("/my")
+    @ApiOperation("用户地址列表")
+    public List<Address> my(){
+        return  addressRepo.findAllByUserIdAndEnabledTrue(SecurityUtils.getAuthenticatedUser().getId());
+    }
 }
 

+ 20 - 20
src/main/vue/src/router.js

@@ -98,7 +98,7 @@ const router = new Router({
                 {
                     path: '/salesEdit',
                     name: 'SalesEdit',
-                    component: () => import(/* webpackChunkName: "salesEdit" */ '@/views/SalesEdit.vue'),
+                    component: () => import(/* webpackChunkName: "salesEdit" */ '@/views/merchant/SalesEdit.vue'),
                     meta: {
                        title: '商品每日销售编辑',
                     },
@@ -106,7 +106,7 @@ const router = new Router({
                 {
                     path: '/salesList',
                     name: 'SalesList',
-                    component: () => import(/* webpackChunkName: "salesList" */ '@/views/SalesList.vue'),
+                    component: () => import(/* webpackChunkName: "salesList" */ '@/views/merchant/SalesList.vue'),
                     meta: {
                        title: '商品每日销售',
                     },
@@ -114,7 +114,7 @@ const router = new Router({
                 {
                     path: '/categoryEdit',
                     name: 'CategoryEdit',
-                    component: () => import(/* webpackChunkName: "categoryEdit" */ '@/views/CategoryEdit.vue'),
+                    component: () => import(/* webpackChunkName: "categoryEdit" */ '@/views/merchant/CategoryEdit.vue'),
                     meta: {
                        title: '类别编辑',
                     },
@@ -122,14 +122,14 @@ const router = new Router({
                 {
                     path: '/categoryList',
                     name: 'CategoryList',
-                    component: () => import(/* webpackChunkName: "categoryList" */ '@/views/CategoryList.vue'),
+                    component: () => import(/* webpackChunkName: "categoryList" */ '@/views/merchant/CategoryList.vue'),
                     meta: {
                        title: '类别',
                     },
                },
                 {
-                    path: '/cateEdit',
-                    name: 'cateEdit',
+                    path: '/tagEdit',
+                    name: 'TagEdit',
                     component: () => import(/* webpackChunkName: "tagEdit" */ '@/views/TagEdit.vue'),
                     meta: {
                        title: '标签编辑',
@@ -258,7 +258,7 @@ const router = new Router({
                 {
                     path: '/shoppingCartEdit',
                     name: 'ShoppingCartEdit',
-                    component: () => import(/* webpackChunkName: "shoppingCartEdit" */ '@/views/ShoppingCartEdit.vue'),
+                    component: () => import(/* webpackChunkName: "shoppingCartEdit" */ '@/views/user/ShoppingCartEdit.vue'),
                     meta: {
                        title: '购物车编辑',
                     },
@@ -266,7 +266,7 @@ const router = new Router({
                 {
                     path: '/shoppingCartList',
                     name: 'ShoppingCartList',
-                    component: () => import(/* webpackChunkName: "shoppingCartList" */ '@/views/ShoppingCartList.vue'),
+                    component: () => import(/* webpackChunkName: "shoppingCartList" */ '@/views/user/ShoppingCartList.vue'),
                     meta: {
                        title: '购物车',
                     },
@@ -274,7 +274,7 @@ const router = new Router({
                 {
                     path: '/merchantNatureEdit',
                     name: 'MerchantNatureEdit',
-                    component: () => import(/* webpackChunkName: "merchantNatureEdit" */ '@/views/MerchantNatureEdit.vue'),
+                    component: () => import(/* webpackChunkName: "merchantNatureEdit" */ '@/views/merchant/MerchantNatureEdit.vue'),
                     meta: {
                        title: '商家性质编辑',
                     },
@@ -282,7 +282,7 @@ const router = new Router({
                 {
                     path: '/merchantNatureList',
                     name: 'MerchantNatureList',
-                    component: () => import(/* webpackChunkName: "merchantNatureList" */ '@/views/MerchantNatureList.vue'),
+                    component: () => import(/* webpackChunkName: "merchantNatureList" */ '@/views/merchant/MerchantNatureList.vue'),
                     meta: {
                        title: '商家性质',
                     },
@@ -306,7 +306,7 @@ const router = new Router({
                 {
                     path: '/complaintEdit',
                     name: 'ComplaintEdit',
-                    component: () => import(/* webpackChunkName: "complaintEdit" */ '@/views/backstage/ComplaintEdit.vue'),
+                    component: () => import(/* webpackChunkName: "complaintEdit" */ '@/views/user/ComplaintEdit.vue'),
                     meta: {
                        title: '投诉编辑',
                     },
@@ -314,7 +314,7 @@ const router = new Router({
                 {
                     path: '/complaintList',
                     name: 'ComplaintList',
-                    component: () => import(/* webpackChunkName: "complaintList" */ '@/views/backstage/ComplaintList.vue'),
+                    component: () => import(/* webpackChunkName: "complaintList" */ '@/views/user/ComplaintList.vue'),
                     meta: {
                        title: '投诉',
                     },
@@ -322,7 +322,7 @@ const router = new Router({
                 {
                     path: '/voiceEdit',
                     name: 'VoiceEdit',
-                    component: () => import(/* webpackChunkName: "voiceEdit" */ '@/views/VoiceEdit.vue'),
+                    component: () => import(/* webpackChunkName: "voiceEdit" */ '@/views/merchant/VoiceEdit.vue'),
                     meta: {
                        title: '语音配置编辑',
                     },
@@ -330,7 +330,7 @@ const router = new Router({
                 {
                     path: '/voiceList',
                     name: 'VoiceList',
-                    component: () => import(/* webpackChunkName: "voiceList" */ '@/views/VoiceList.vue'),
+                    component: () => import(/* webpackChunkName: "voiceList" */ '@/views/merchant/VoiceList.vue'),
                     meta: {
                        title: '语音配置',
                     },
@@ -338,7 +338,7 @@ const router = new Router({
                 {
                     path: '/cooperateApplyEdit',
                     name: 'CooperateApplyEdit',
-                    component: () => import(/* webpackChunkName: "cooperateApplyEdit" */ '@/views/backstage/CooperateApplyEdit.vue'),
+                    component: () => import(/* webpackChunkName: "cooperateApplyEdit" */ '@/views/user/CooperateApplyEdit.vue'),
                     meta: {
                        title: '合作申请编辑',
                     },
@@ -346,7 +346,7 @@ const router = new Router({
                 {
                     path: '/cooperateApplyList',
                     name: 'CooperateApplyList',
-                    component: () => import(/* webpackChunkName: "cooperateApplyList" */ '@/views/backstage/CooperateApplyList.vue'),
+                    component: () => import(/* webpackChunkName: "cooperateApplyList" */ '@/views/user/CooperateApplyList.vue'),
                     meta: {
                        title: '合作申请',
                     },
@@ -402,7 +402,7 @@ const router = new Router({
                 {
                     path: '/priorityEdit',
                     name: 'PriorityEdit',
-                    component: () => import(/* webpackChunkName: "priorityEdit" */ '@/views/PriorityEdit.vue'),
+                    component: () => import(/* webpackChunkName: "priorityEdit" */ '@/views/merchant/PriorityEdit.vue'),
                     meta: {
                        title: '优先级编辑',
                     },
@@ -410,7 +410,7 @@ const router = new Router({
                 {
                     path: '/priorityList',
                     name: 'PriorityList',
-                    component: () => import(/* webpackChunkName: "priorityList" */ '@/views/PriorityList.vue'),
+                    component: () => import(/* webpackChunkName: "priorityList" */ '@/views/merchant/PriorityList.vue'),
                     meta: {
                        title: '优先级',
                     },
@@ -418,7 +418,7 @@ const router = new Router({
                 {
                     path: '/deliveryFeeEdit',
                     name: 'DeliveryFeeEdit',
-                    component: () => import(/* webpackChunkName: "deliveryFeeEdit" */ '@/views/DeliveryFeeEdit.vue'),
+                    component: () => import(/* webpackChunkName: "deliveryFeeEdit" */ '@/views/rider/DeliveryFeeEdit.vue'),
                     meta: {
                        title: '配送管理编辑',
                     },
@@ -426,7 +426,7 @@ const router = new Router({
                 {
                     path: '/deliveryFeeList',
                     name: 'DeliveryFeeList',
-                    component: () => import(/* webpackChunkName: "deliveryFeeList" */ '@/views/DeliveryFeeList.vue'),
+                    component: () => import(/* webpackChunkName: "deliveryFeeList" */ '@/views/rider/DeliveryFeeList.vue'),
                     meta: {
                        title: '配送管理',
                     },

+ 0 - 0
src/main/vue/src/views/CategoryEdit.vue → src/main/vue/src/views/merchant/CategoryEdit.vue


+ 0 - 0
src/main/vue/src/views/CategoryList.vue → src/main/vue/src/views/merchant/CategoryList.vue


+ 0 - 0
src/main/vue/src/views/MerchantNatureEdit.vue → src/main/vue/src/views/merchant/MerchantNatureEdit.vue


+ 0 - 0
src/main/vue/src/views/MerchantNatureList.vue → src/main/vue/src/views/merchant/MerchantNatureList.vue


+ 0 - 0
src/main/vue/src/views/PriorityEdit.vue → src/main/vue/src/views/merchant/PriorityEdit.vue


+ 0 - 0
src/main/vue/src/views/PriorityList.vue → src/main/vue/src/views/merchant/PriorityList.vue


+ 0 - 0
src/main/vue/src/views/SalesEdit.vue → src/main/vue/src/views/merchant/SalesEdit.vue


+ 0 - 0
src/main/vue/src/views/SalesList.vue → src/main/vue/src/views/merchant/SalesList.vue


+ 0 - 0
src/main/vue/src/views/VoiceEdit.vue → src/main/vue/src/views/merchant/VoiceEdit.vue


+ 0 - 0
src/main/vue/src/views/VoiceList.vue → src/main/vue/src/views/merchant/VoiceList.vue


+ 0 - 0
src/main/vue/src/views/DeliveryFeeEdit.vue → src/main/vue/src/views/rider/DeliveryFeeEdit.vue


+ 0 - 0
src/main/vue/src/views/DeliveryFeeList.vue → src/main/vue/src/views/rider/DeliveryFeeList.vue


+ 0 - 0
src/main/vue/src/views/backstage/ComplaintEdit.vue → src/main/vue/src/views/user/ComplaintEdit.vue


+ 0 - 0
src/main/vue/src/views/backstage/ComplaintList.vue → src/main/vue/src/views/user/ComplaintList.vue


+ 0 - 0
src/main/vue/src/views/backstage/CooperateApplyEdit.vue → src/main/vue/src/views/user/CooperateApplyEdit.vue


+ 0 - 0
src/main/vue/src/views/backstage/CooperateApplyList.vue → src/main/vue/src/views/user/CooperateApplyList.vue


+ 0 - 0
src/main/vue/src/views/ShoppingCartEdit.vue → src/main/vue/src/views/user/ShoppingCartEdit.vue


+ 0 - 0
src/main/vue/src/views/ShoppingCartList.vue → src/main/vue/src/views/user/ShoppingCartList.vue


+ 10 - 0
src/test/java/com/izouma/dingdong/repo/OrderInfoRepoTest.java

@@ -1,12 +1,16 @@
 package com.izouma.dingdong.repo;
 
 
+import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.OrderStatus;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.time.LocalDateTime;
+
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -19,4 +23,10 @@ public class OrderInfoRepoTest {
         System.out.println(orderInfoRepo.sumRealAmountByUserId(170L));
     }
 
+    @Test
+    public void testTime() {
+        System.out.println(orderInfoRepo.findAllByStatusAndOrderTimeAfterAndMerchantStatus(OrderStatus.PAID, LocalDateTime.now()
+                .plusMinutes(5), MerchantStatus.RECEIVED));
+    }
+
 }

+ 14 - 2
src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

@@ -1,9 +1,9 @@
 package com.izouma.dingdong.service;
 
+import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.PageQuery;
-import com.izouma.dingdong.repo.merchant.FullReductionRepo;
-import com.izouma.dingdong.repo.merchant.MerchantRepo;
+import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
 import com.izouma.dingdong.utils.MapUtils;
@@ -16,6 +16,7 @@ import org.springframework.boot.test.context.SpringBootTest;
 
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.time.LocalDateTime;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,6 +31,8 @@ public class MerchantServiceTest {
     private MerchantController merchantController;
     @Autowired
     private MerchantSettingsService merchantSettingsService;
+    @Autowired
+    private MerchantSettingsRepo merchantSettingsRepo;
 
     @Test
     public void testChange() {
@@ -157,4 +160,13 @@ public class MerchantServiceTest {
         //System.out.println(fullReductionRepo.findAllByMerchantId(189L));
         System.out.println(merchantSettingsService.getDTO(189L));
     }
+
+    @Test
+    public void testWeek(){
+        MerchantSettings settings = merchantSettingsRepo.findById(306L).orElse(null);
+      //  System.out.println(settings);
+        System.out.println(settings.getWeek().contains(LocalDateTime.now().getDayOfWeek().toString()));
+
+        //System.out.println(LocalDateTime.now().getDayOfWeek());
+    }
 }

+ 2 - 2
src/test/java/com/izouma/dingdong/service/OrderInfoServiceTest.java

@@ -14,8 +14,8 @@ public class OrderInfoServiceTest {
     private OrderInfoService orderInfoService;
 
     @Test
-    public void testCancel(){
-        System.out.println(orderInfoService.cancel(296L, RefundReason.ORDER_TIMEOUT));
+    public void testCancel() {
+        System.out.println(orderInfoService.cancel(296L, RefundReason.ORDER_TIMEOUT, null, null));
     }