licailing 5 år sedan
förälder
incheckning
f0f27c55f5
24 ändrade filer med 381 tillägg och 168 borttagningar
  1. 2 5
      src/main/java/com/izouma/dingdong/domain/OrderInfo.java
  2. 7 0
      src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java
  3. 15 0
      src/main/java/com/izouma/dingdong/domain/PlatformFlow.java
  4. 2 0
      src/main/java/com/izouma/dingdong/domain/backstage/Voice.java
  5. 0 7
      src/main/java/com/izouma/dingdong/domain/merchant/MerchantClassification.java
  6. 0 35
      src/main/java/com/izouma/dingdong/domain/rider/MonetaryRecord.java
  7. 6 0
      src/main/java/com/izouma/dingdong/domain/user/UserCoupon.java
  8. 1 0
      src/main/java/com/izouma/dingdong/enums/FinancialType.java
  9. 9 0
      src/main/java/com/izouma/dingdong/enums/FlowType.java
  10. 13 6
      src/main/java/com/izouma/dingdong/enums/RefundReason.java
  11. 4 0
      src/main/java/com/izouma/dingdong/enums/RiderStatus.java
  12. 2 0
      src/main/java/com/izouma/dingdong/repo/merchant/MerchantClassificationRepo.java
  13. 3 0
      src/main/java/com/izouma/dingdong/repo/user/UserCouponRepo.java
  14. 62 19
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  15. 51 17
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  16. 1 0
      src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java
  17. 92 32
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  18. 2 2
      src/main/java/com/izouma/dingdong/service/merchant/SalesService.java
  19. 28 0
      src/main/java/com/izouma/dingdong/utils/MapUtils.java
  20. 3 7
      src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java
  21. 15 4
      src/main/java/com/izouma/dingdong/web/user/UserCouponController.java
  22. 5 2
      src/main/vue/src/views/merchant/MerchantList.vue
  23. 33 0
      src/test/java/com/izouma/dingdong/contorller/SysConfigControllerTest.java
  24. 25 32
      src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

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

@@ -1,10 +1,7 @@
 package com.izouma.dingdong.domain;
 package com.izouma.dingdong.domain;
 
 
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
-import com.izouma.dingdong.enums.MerchantStatus;
-import com.izouma.dingdong.enums.OrderStatus;
-import com.izouma.dingdong.enums.PayMethod;
-import com.izouma.dingdong.enums.RiderStatus;
+import com.izouma.dingdong.enums.*;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
@@ -144,7 +141,7 @@ public class OrderInfo extends BaseEntity {
     private MerchantSettings merchantSettings;*/
     private MerchantSettings merchantSettings;*/
 
 
     @ApiModelProperty(value = "取消订单原因", name = "reason")
     @ApiModelProperty(value = "取消订单原因", name = "reason")
-    private String reason;
+    private RefundReason reason;
 
 
     @ApiModelProperty(value = "预计到达时间")
     @ApiModelProperty(value = "预计到达时间")
     private LocalDateTime timeOfArrival;
     private LocalDateTime timeOfArrival;

+ 7 - 0
src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java

@@ -61,6 +61,9 @@ public class OrderRefundApply extends BaseEntity {
     @ExcelIgnore
     @ExcelIgnore
     private OrderInfo orderInfo;
     private OrderInfo orderInfo;
 
 
+    /**
+     * 上报
+     */
     @ApiModelProperty(value = "上报", name = "report")
     @ApiModelProperty(value = "上报", name = "report")
     private Boolean report;
     private Boolean report;
 
 
@@ -79,4 +82,8 @@ public class OrderRefundApply extends BaseEntity {
     //付款流水Id
     //付款流水Id
     //private Long feeId;
     //private Long feeId;
 
 
+
+    @ApiModelProperty(value = "商家是否同意")
+    private Boolean merchantAgree;
+
 }
 }

+ 15 - 0
src/main/java/com/izouma/dingdong/domain/PlatformFlow.java

@@ -0,0 +1,15 @@
+package com.izouma.dingdong.domain;
+
+import com.izouma.dingdong.enums.FlowType;
+
+import java.math.BigDecimal;
+
+public class PlatformFlow {
+    private Long userId;
+
+    private FlowType type;
+
+    private BigDecimal amount;
+
+    private String remark;
+}

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

@@ -31,8 +31,10 @@ public class Voice extends BaseEntity {
 
 
     private String url;
     private String url;
 
 
+    @ApiModelProperty(value = "英文")
     private String enUrl;
     private String enUrl;
 
 
+    @ApiModelProperty(value = "泰文")
     private String thUrl;
     private String thUrl;
 
 
 /*    @ApiModelProperty(value = "是否开启")
 /*    @ApiModelProperty(value = "是否开启")

+ 0 - 7
src/main/java/com/izouma/dingdong/domain/merchant/MerchantClassification.java

@@ -1,20 +1,13 @@
 package com.izouma.dingdong.domain.merchant;
 package com.izouma.dingdong.domain.merchant;
 
 
 
 
-import com.izouma.dingdong.converter.LongArrayConverter;
-import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 import lombok.*;
-
-
 import javax.persistence.*;
 import javax.persistence.*;
 import javax.validation.constraints.Size;
 import javax.validation.constraints.Size;
 import java.io.Serializable;
 import java.io.Serializable;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
 
 
 
 
 @Data
 @Data

+ 0 - 35
src/main/java/com/izouma/dingdong/domain/rider/MonetaryRecord.java

@@ -1,35 +0,0 @@
-package com.izouma.dingdong.domain.rider;
-
-import com.izouma.dingdong.domain.BaseEntity;
-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.time.LocalDateTime;
-
-@Data
-//@Entity
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@ApiModel(value = "货币流水", description = "货币流水")
-public class MonetaryRecord extends BaseEntity {
-    @ApiModelProperty(value = "用户ID", name = "userId")
-    private Long userId;
-
-    @ApiModelProperty(value = "工号", name = "jobNumber")
-    private String jobNumber;
-
-    @ApiModelProperty(value = "交易时间", name = "settleTime")
-    private LocalDateTime settleTime;
-
-    @ApiModelProperty(value = "交易类型", name = "transactionType")
-    private String transactionType;
-
-    @ApiModelProperty(value = "金额", name = "amount")
-    private BigDecimal amount;
-}

+ 6 - 0
src/main/java/com/izouma/dingdong/domain/user/UserCoupon.java

@@ -2,6 +2,7 @@ package com.izouma.dingdong.domain.user;
 
 
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.izouma.dingdong.domain.BaseEntity;
 import com.izouma.dingdong.domain.BaseEntity;
+import com.izouma.dingdong.domain.Coupon;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.User;
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
@@ -39,4 +40,9 @@ public class UserCoupon extends BaseEntity {
 
 
     //用于限制手机号
     //用于限制手机号
     private String phone;
     private String phone;
+
+    @ManyToOne(fetch = FetchType.LAZY)
+    @JoinColumn(name = "couponId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+    @JsonIgnore
+    private Coupon coupon;
 }
 }

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

@@ -4,6 +4,7 @@ public enum FinancialType {
     BUY("购买"),
     BUY("购买"),
     INCOME("收入"),
     INCOME("收入"),
     REFUND("退款"),
     REFUND("退款"),
+    COMPENSATE_RIDER("补偿骑手"),
     WITHDRAW("提现");
     WITHDRAW("提现");
 
 
     private final String description;
     private final String description;

+ 9 - 0
src/main/java/com/izouma/dingdong/enums/FlowType.java

@@ -0,0 +1,9 @@
+package com.izouma.dingdong.enums;
+
+public enum FlowType {
+    //用户下单
+
+    //提现
+
+    //用户退款
+}

+ 13 - 6
src/main/java/com/izouma/dingdong/enums/RefundReason.java

@@ -1,12 +1,19 @@
 package com.izouma.dingdong.enums;
 package com.izouma.dingdong.enums;
 
 
 public enum RefundReason {
 public enum RefundReason {
-
-    MERCHANT_REJECTED("商家拒单"),
-    WANT_TO_BUY("不想要了"),
-    NOT_CLEAN("不干净"),
-    TOO_SLOW("太慢"),
-    OTHER("其他");
+    PAYMENT_TIMEOUT("用户支付超时"),
+    ORDER_TIMEOUT("商家接单超时"),
+    MERCHANT_REJECTION("商家拒单"),
+    DELIVERY_TIME_IS_TOO_LONG("配送时间太长"),
+    ADDRESS_IS_INCORRECT("地址填写错误"),
+    MERCHANT_CANNOT_DELIVER("商家无法送达,联系我取消"),
+    MERCHANT_OUT_OF_STOCK("商家缺货/打烊,联系我取消"),
+    FORGOT_TO_USE_THE_RED_ENVELOPE("忘记使用红包"),
+    FORGET_ABOUT_STAPLE_FOOD("忘点主食"),
+    RIDER_CONTACT_ME_TO_CANCEL("骑手联系我取消"),
+    MORE_POINTS("点多了/点错了/漏点了"),
+    DO_NOT_WANT_SOMETHING_TEMPORARILY("临时有事不想要了"),
+    OTHER("其他原因");
     private final String description;
     private final String description;
 
 
     RefundReason(String description) {
     RefundReason(String description) {

+ 4 - 0
src/main/java/com/izouma/dingdong/enums/RiderStatus.java

@@ -1,6 +1,10 @@
 package com.izouma.dingdong.enums;
 package com.izouma.dingdong.enums;
 
 
 public enum RiderStatus {
 public enum RiderStatus {
+    /*
+    未接单
+     */
+    NOT_RECEIVED,
     /*
     /*
     接单
     接单
      */
      */

+ 2 - 0
src/main/java/com/izouma/dingdong/repo/merchant/MerchantClassificationRepo.java

@@ -15,4 +15,6 @@ public interface MerchantClassificationRepo extends JpaRepository<MerchantClassi
 
 
     //MerchantClassification findByUserIdAndName(Long merchantId, String Name);
     //MerchantClassification findByUserIdAndName(Long merchantId, String Name);
 
 
+    MerchantClassification findByMerchantIdAndType(Long merchantId, Integer type);
+
 }
 }

+ 3 - 0
src/main/java/com/izouma/dingdong/repo/user/UserCouponRepo.java

@@ -4,5 +4,8 @@ import com.izouma.dingdong.domain.user.UserCoupon;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 
+import java.util.List;
+
 public interface UserCouponRepo extends JpaRepository<UserCoupon, Long>, JpaSpecificationExecutor<UserCoupon> {
 public interface UserCouponRepo extends JpaRepository<UserCoupon, Long>, JpaSpecificationExecutor<UserCoupon> {
+    List<UserCoupon> findAllByUserIdAndIsUsedFalse(Long userId);
 }
 }

+ 62 - 19
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -2,7 +2,6 @@ package com.izouma.dingdong.service;
 
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
@@ -13,10 +12,7 @@ import com.izouma.dingdong.domain.user.Address;
 import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.dto.OrderDTO;
 import com.izouma.dingdong.dto.OrderDTO;
 import com.izouma.dingdong.dto.UserOrderDTO;
 import com.izouma.dingdong.dto.UserOrderDTO;
-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.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.*;
 import com.izouma.dingdong.repo.*;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
@@ -56,6 +52,8 @@ public class OrderInfoService {
     private MerchantRepo merchantRepo;
     private MerchantRepo merchantRepo;
     private UserCouponRepo userCouponRepo;
     private UserCouponRepo userCouponRepo;
     private MoneyRecordRepo moneyRecordRepo;
     private MoneyRecordRepo moneyRecordRepo;
+    private OrderRefundApplyService orderRefundApplyService;
+    private SysConfigRepo sysConfigRepo;
 
 
     /*
     /*
     用户下单
     用户下单
@@ -66,9 +64,6 @@ public class OrderInfoService {
 
 
         //商家
         //商家
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(cart.getMerchantId()).orElseThrow(new BusinessException("无商家"));
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(cart.getMerchantId()).orElseThrow(new BusinessException("无商家"));
-        //商家
-//        Merchant merchant = merchantRepo.findById(userOrderDTO.getMerchantId()).orElseThrow(new BusinessException("无商家"));
-//        MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(userOrderDTO.getMerchantId()).orElseThrow(new BusinessException("无商家"));
 
 
         LocalTime startTime = merchantSettings.getStartTime();
         LocalTime startTime = merchantSettings.getStartTime();
         LocalTime endTime = merchantSettings.getEndTime();
         LocalTime endTime = merchantSettings.getEndTime();
@@ -84,10 +79,10 @@ public class OrderInfoService {
         }
         }
 
 
         //如果未设置起送金额为0
         //如果未设置起送金额为0
-        if (ObjectUtil.isEmpty(merchantSettings.getStartingAmount())){
+        if (ObjectUtil.isEmpty(merchantSettings.getStartingAmount())) {
             merchantSettings.setStartingAmount(BigDecimal.ZERO);
             merchantSettings.setStartingAmount(BigDecimal.ZERO);
         }
         }
-        if (merchantSettings.getStartingAmount().compareTo(cart.getGoodsTotal()) > 0){
+        if (merchantSettings.getStartingAmount().compareTo(cart.getGoodsTotal()) > 0) {
             throw new BusinessException("未达到起送金额");
             throw new BusinessException("未达到起送金额");
         }
         }
 
 
@@ -100,7 +95,7 @@ public class OrderInfoService {
         orderInfo.setEnabled(true);
         orderInfo.setEnabled(true);
 
 
         //如果未设置预计到达为30分钟
         //如果未设置预计到达为30分钟
-        if (ObjectUtil.isEmpty(merchantSettings.getPreparationTime())){
+        if (ObjectUtil.isEmpty(merchantSettings.getPreparationTime())) {
             merchantSettings.setPreparationTime(30L);
             merchantSettings.setPreparationTime(30L);
         }
         }
         //预计送达时间
         //预计送达时间
@@ -214,11 +209,14 @@ public class OrderInfoService {
             orderInfo.setRiderId(151L);
             orderInfo.setRiderId(151L);
             orderInfo.setRiderStatus(RiderStatus.RECEIVED);
             orderInfo.setRiderStatus(RiderStatus.RECEIVED);
 
 
+
         } else {
         } else {
             orderInfo.setMerchantStatus(MerchantStatus.REJECTED);
             orderInfo.setMerchantStatus(MerchantStatus.REJECTED);
             orderInfo.setCancel(true);
             orderInfo.setCancel(true);
-            orderInfo.setReason("商家拒单");
+            orderInfo.setReason(RefundReason.MERCHANT_REJECTION);
             //退款流程
             //退款流程
+            OrderRefundApply apply = orderRefundApplyService.apply(orderId, RefundReason.MERCHANT_REJECTION, null);
+            orderRefundApplyService.audit(apply.getId(), true);
         }
         }
         return orderInfoRepo.save(orderInfo);
         return orderInfoRepo.save(orderInfo);
     }
     }
@@ -243,6 +241,9 @@ public class OrderInfoService {
      */
      */
     public void ridReceiveOrder(Long riderId, Long orderId, Boolean pass) {
     public void ridReceiveOrder(Long riderId, Long orderId, Boolean pass) {
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+        if (OrderStatus.CANCELLED.equals(orderInfo.getStatus())) {
+            throw new BusinessException("订单已取消");
+        }
         if (pass) {
         if (pass) {
             orderInfo.setRiderId(riderId);
             orderInfo.setRiderId(riderId);
             orderInfo.setRiderStatus(RiderStatus.RECEIVED);
             orderInfo.setRiderStatus(RiderStatus.RECEIVED);
@@ -264,6 +265,10 @@ public class OrderInfoService {
             //按商户Id找出用户
             //按商户Id找出用户
             User userMer = userRepo.findById(merchantRepo.findUserIdById(orderInfo.getMerchantId())).orElseThrow(new BusinessException("无用户"));
             User userMer = userRepo.findById(merchantRepo.findUserIdById(orderInfo.getMerchantId())).orElseThrow(new BusinessException("无用户"));
 
 
+            if (OrderStatus.CANCELLED.equals(orderInfo.getStatus())) {
+                throw new BusinessException("订单已取消");
+            }
+
             if (MerchantStatus.RECEIVED.equals(orderInfo.getMerchantStatus())) {
             if (MerchantStatus.RECEIVED.equals(orderInfo.getMerchantStatus())) {
                 RiderStatus riderStatus = orderInfo.getRiderStatus();
                 RiderStatus riderStatus = orderInfo.getRiderStatus();
                 switch (riderStatus) {
                 switch (riderStatus) {
@@ -280,12 +285,13 @@ public class OrderInfoService {
                         //添加销量数据
                         //添加销量数据
                         salesService.addSale(orderInfo);
                         salesService.addSale(orderInfo);
 
 
-                        //扣除金额
 
 
-                        //商家应得
-//                        Merchant merchant = merchantRepo.findById(orderInfo.getMerchantId()).orElseThrow(new BusinessException("商家不存在"));
-//                        merchant.setMoney(merchant.getMoney().add(orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount())));
-                        userMer.setMoney(userMer.getMoney().add(orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount())));
+                        //扣除金额
+                        SysConfig sysConfig = sysConfigRepo.findByName("commission").orElseThrow(new BusinessException("无设置"));
+                        //平台抽成
+                        BigDecimal platform = orderInfo.getRealAmount().multiply(new BigDecimal(sysConfig.getValue()));
+                        //商家应得 = 减去骑手应得,减去平台抽成
+                        userMer.setMoney(userMer.getMoney().add(orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount()).subtract(platform)));
                         userRepo.save(userMer);
                         userRepo.save(userMer);
 
 
                         //购买的user
                         //购买的user
@@ -324,7 +330,7 @@ public class OrderInfoService {
      */
      */
     public List<OrderInfo> my(Long userId) {
     public List<OrderInfo> my(Long userId) {
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
         User user = userRepo.findById(userId).orElseThrow(new BusinessException("无用户"));
-        if (user.getIdentity()==null){
+        if (user.getIdentity() == null) {
             throw new BusinessException("身份错误");
             throw new BusinessException("身份错误");
         }
         }
         switch (user.getIdentity()) {
         switch (user.getIdentity()) {
@@ -360,9 +366,46 @@ public class OrderInfoService {
     /*
     /*
     用户取消订单
     用户取消订单
      */
      */
-    public void cancel(Long id, String reason) {
+    public void cancel(Long id, RefundReason reason) {
         OrderInfo orderInfo = orderInfoRepo.findById(id).orElseThrow(new BusinessException("无订单"));
         OrderInfo orderInfo = orderInfoRepo.findById(id).orElseThrow(new BusinessException("无订单"));
+
+        if (orderInfo.getStatus().equals(OrderStatus.UNPAID)) {
+            //未支付,无退款
+            orderInfo.setCancel(true);
+            orderInfo.setReason(reason);
+            orderInfo.setStatus(OrderStatus.CANCELLED);
+            orderInfoRepo.save(orderInfo);
+            return;
+        }
+
+        if (orderInfo.getStatus().equals(OrderStatus.RATED) || orderInfo.getStatus().equals(OrderStatus.COMPLETED)) {
+            throw new BusinessException("订单已完成");
+        }
+
+        //用户已支付
+        if (OrderStatus.PAID.equals(orderInfo.getStatus())) {
+
+            OrderRefundApply apply = orderRefundApplyService.apply(id, reason, null);
+            //商家未接单,直接退
+            if (MerchantStatus.NOT_RECEIVED.equals(orderInfo.getMerchantStatus())) {
+                orderRefundApplyService.audit(apply.getId(), true);
+
+            } else {//商家已接单
+                //骑手未接单 直接退
+                if (RiderStatus.NOT_RECEIVED.equals(orderInfo.getRiderStatus())) {
+                    orderRefundApplyService.audit(apply.getId(), true);
+                } else {
+                    //已接单,已完成,不能退 只能投诉
+                    if (RiderStatus.CARRY_OUT.equals(orderInfo.getRiderStatus())) {
+                        throw new BusinessException("已完成无法取消");
+                    }
+                }
+
+            }
+        }
         orderInfo.setCancel(true);
         orderInfo.setCancel(true);
         orderInfo.setReason(reason);
         orderInfo.setReason(reason);
+        orderInfo.setStatus(OrderStatus.CANCELLED);
+        orderInfoRepo.save(orderInfo);
     }
     }
 }
 }

+ 51 - 17
src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java

@@ -2,13 +2,16 @@ package com.izouma.dingdong.service;
 
 
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.OrderRefundApply;
 import com.izouma.dingdong.domain.OrderRefundApply;
+import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.enums.RefundReason;
 import com.izouma.dingdong.enums.RefundReason;
 import com.izouma.dingdong.enums.RefundStatus;
 import com.izouma.dingdong.enums.RefundStatus;
+import com.izouma.dingdong.enums.RiderStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderInfoRepo;
 import com.izouma.dingdong.repo.OrderInfoRepo;
 import com.izouma.dingdong.repo.OrderRefundApplyRepo;
 import com.izouma.dingdong.repo.OrderRefundApplyRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.UserRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.utils.SnowflakeIdWorker;
 import com.izouma.dingdong.utils.SnowflakeIdWorker;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -16,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 
 
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.List;
 
 
@@ -33,6 +37,9 @@ public class OrderRefundApplyService {
     @Autowired
     @Autowired
     private UserRepo userRepo;
     private UserRepo userRepo;
 
 
+    @Autowired
+    private MerchantRepo merchantRepo;
+
     private OrderStatus status;
     private OrderStatus status;
 
 
     /**
     /**
@@ -42,7 +49,7 @@ public class OrderRefundApplyService {
      * @param reason  退款缘由
      * @param reason  退款缘由
      * @param remark  备注
      * @param remark  备注
      */
      */
-    public void apply(Long orderId, RefundReason reason, String remark) {
+    public OrderRefundApply apply(Long orderId, RefundReason reason, String remark) {
         OrderInfo order = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无记录"));
         OrderInfo order = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无记录"));
         //记录原来的订单状态
         //记录原来的订单状态
         status = order.getStatus();
         status = order.getStatus();
@@ -54,10 +61,14 @@ public class OrderRefundApplyService {
             case CANCELLED:
             case CANCELLED:
                 throw new BusinessException("订单已取消");
                 throw new BusinessException("订单已取消");
             case REFUNDED_PENDING:
             case REFUNDED_PENDING:
-                return;
+                throw new BusinessException("申请中");
         }
         }
 
 
-        orderRefundApplyRepo.save(OrderRefundApply.builder()
+        order.setStatus(OrderStatus.REFUNDED_PENDING);
+        order.setReason(reason);
+        orderInfoRepo.save(order);
+
+        return orderRefundApplyRepo.save(OrderRefundApply.builder()
                 .status(RefundStatus.PENDING)
                 .status(RefundStatus.PENDING)
                 .applyTime(LocalDateTime.now())
                 .applyTime(LocalDateTime.now())
                 .reason(reason)
                 .reason(reason)
@@ -65,43 +76,53 @@ public class OrderRefundApplyService {
                 .orderId(orderId)
                 .orderId(orderId)
                 .report(false)
                 .report(false)
                 .build());
                 .build());
-
-        order.setStatus(OrderStatus.REFUNDED_PENDING);
-        order.setReason(reason.toString());
-        orderInfoRepo.save(order);
     }
     }
 
 
     /**
     /**
-     * 审核退款 线下退
+     * 商家审核退款 线下退
      *
      *
-     * @param applyId 申请退款ID
-     * @param consent 是否通过
+     * @param applyId       申请退款ID
+     * @param merchantAgree 商家是否通过
      */
      */
-    public void audit(Long applyId, boolean consent) {
+    public void audit(Long applyId, Boolean merchantAgree) {
         OrderRefundApply apply = orderRefundApplyRepo.findById(applyId).orElseThrow(new BusinessException("无记录"));
         OrderRefundApply apply = orderRefundApplyRepo.findById(applyId).orElseThrow(new BusinessException("无记录"));
         if (apply.getStatus() != RefundStatus.PENDING) {
         if (apply.getStatus() != RefundStatus.PENDING) {
             return;
             return;
         }
         }
 
 
-
         userRepo.findById(apply.getOrderInfo().getUserId()).orElseThrow(new BusinessException("无用户"));
         userRepo.findById(apply.getOrderInfo().getUserId()).orElseThrow(new BusinessException("无用户"));
-        if (consent) {
+        if (merchantAgree) {
 
 
             String refundId = String.valueOf(new SnowflakeIdWorker(1, 1).nextId());
             String refundId = String.valueOf(new SnowflakeIdWorker(1, 1).nextId());
             apply.setStatus(RefundStatus.SUCCESS);
             apply.setStatus(RefundStatus.SUCCESS);
+            apply.setMerchantAgree(true);
+
+            //商家同意损失都由商家承担
+            apply.setMerchantLiability(BigDecimal.ONE);
+            apply.setRiderLiability(BigDecimal.ZERO);
+            apply.setPlatformLiability(BigDecimal.ZERO);
 
 
             if (StringUtils.isEmpty(apply.getRefundId())) {
             if (StringUtils.isEmpty(apply.getRefundId())) {
                 apply.setRefundId(refundId);
                 apply.setRefundId(refundId);
             }
             }
 
 
-        } else {
+            //退款,线下退款
+
+            //订单完成商家才得款
+//            RiderStatus.CARRY_OUT.equals(apply.getOrderInfo().getRiderStatus())
 
 
+            //骑手得应得的
 
 
-            apply.setStatus(RefundStatus.DENY);
-            apply.getOrderInfo().setStatus((status != null) ? status : OrderStatus.PAID);
+        } else {
+
+            apply.setStatus(RefundStatus.PENDING);
+            apply.setMerchantAgree(false);
+            apply.getOrderInfo().setStatus(OrderStatus.REFUNDED_PENDING);
+            //apply.getOrderInfo().setStatus((status != null) ? status : OrderStatus.PAID);
             //上报到后台
             //上报到后台
             apply.setReport(true);
             apply.setReport(true);
         }
         }
+
         apply.setAuditTime(LocalDateTime.now());
         apply.setAuditTime(LocalDateTime.now());
         orderInfoRepo.save(apply.getOrderInfo());
         orderInfoRepo.save(apply.getOrderInfo());
         orderRefundApplyRepo.save(apply);
         orderRefundApplyRepo.save(apply);
@@ -124,7 +145,20 @@ public class OrderRefundApplyService {
     /*
     /*
     商家的所有退款订单
     商家的所有退款订单
      */
      */
-    public List<OrderRefundApply> merchantRefund(Long id){
+    public List<OrderRefundApply> merchantRefund(Long id) {
         return orderRefundApplyRepo.findAllByMerchantId(id);
         return orderRefundApplyRepo.findAllByMerchantId(id);
     }
     }
+
+    //商家同意 商家不同意
+
+    //平台
+    public void platformAudit(Long applyId, Boolean agree, BigDecimal merchantLiability, BigDecimal riderLiability, BigDecimal platformLiability) {
+        OrderRefundApply apply = orderRefundApplyRepo.findById(applyId).orElseThrow(new BusinessException("无记录"));
+        if (agree) {
+
+        } else {
+
+        }
+
+    }
 }
 }

+ 1 - 0
src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java

@@ -104,6 +104,7 @@ public class WithdrawApplyService {
                             .time(LocalDateTime.now())
                             .time(LocalDateTime.now())
                             .type(FinancialType.WITHDRAW)
                             .type(FinancialType.WITHDRAW)
                             .remark(bankCard.getBankName())
                             .remark(bankCard.getBankName())
+                            .amount(withdrawals.getAmount())
                             .build()
                             .build()
             );
             );
 
 

+ 92 - 32
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -3,35 +3,39 @@ package com.izouma.dingdong.service.merchant;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.domain.Verified;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
+import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.enums.ApplyStatus;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.CouponRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.VerifiedRepo;
 import com.izouma.dingdong.repo.VerifiedRepo;
+import com.izouma.dingdong.repo.merchant.FullReductionRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
+import com.izouma.dingdong.repo.user.UserCouponRepo;
+import com.izouma.dingdong.utils.MapUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageImpl;
-import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
-import sun.security.krb5.internal.PAData;
 
 
 import java.math.BigDecimal;
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 import static com.izouma.dingdong.web.BaseController.*;
 import static com.izouma.dingdong.web.BaseController.*;
 
 
@@ -45,6 +49,10 @@ public class MerchantService {
     private MerchantClassificationRepo merchantClassificationRepo;
     private MerchantClassificationRepo merchantClassificationRepo;
     private VerifiedRepo verifiedRepo;
     private VerifiedRepo verifiedRepo;
 
 
+    private FullReductionRepo fullReductionRepo;
+    private CouponRepo couponRepo;
+    private UserCouponRepo userCouponRepo;
+
     /*
     /*
     商户注册申请
     商户注册申请
      */
      */
@@ -201,55 +209,107 @@ public class MerchantService {
     }
     }
 
 
     /**
     /**
-     * 显示所有商家信息
+     * 管理后台显示所有商家信息
+     * 按时间排序
      *
      *
-     * @param pageable 分页
+     * @param pageQuery 分页
      * @return 分页列表
      * @return 分页列表
      */
      */
-    public Page<MerchantDTO> showAll(Pageable pageable) {
-
-        //所有商家要按距离排序
+    public Page<MerchantDTO> backAll(PageQuery pageQuery) {
 
 
         List<MerchantDTO> merchantDTOS = CollUtil.newArrayList();
         List<MerchantDTO> merchantDTOS = CollUtil.newArrayList();
-        List<Merchant> merchants = merchantRepo.findAll();
+        Page<Merchant> merchants = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class), toPageRequest(pageQuery));
         for (Merchant merchant : merchants) {
         for (Merchant merchant : merchants) {
             MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchant.getId()).orElseThrow(new BusinessException("商户不存在"));
             MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchant.getId()).orElseThrow(new BusinessException("商户不存在"));
 
 
             merchantDTOS.add(new MerchantDTO(merchant, merchantSettings));
             merchantDTOS.add(new MerchantDTO(merchant, merchantSettings));
         }
         }
-        return new PageImpl<>(merchantDTOS, pageable, merchantDTOS.size());
+        return new PageImpl<>(merchantDTOS, toPageRequest(pageQuery), merchantDTOS.size());
     }
     }
 
 
-    public Page<MerchantDTO> showAll(PageQuery pageQuery, Double longitude, Double latitude) {
+    /**
+     * 用户端显示的所有商家
+     *
+     * @param pageQuery  分页
+     * @param longitude  经度
+     * @param latitude   纬度
+     * @param popularTag 热门标签
+     * @param userId     用户Id
+     * @return
+     */
+    public List<MerchantDTO> showAll(PageQuery pageQuery, Double longitude, Double latitude, String popularTag, Long userId) {
+
+        //Specification<Merchant> specification = toSpecification(pageQuery, Merchant.class);
 
 
-        //所有商家要按距离排序
 
 
-        Set<MerchantDTO> merchantDTOS = CollUtil.newHashSet();
         List<Merchant> merchants = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class));
         List<Merchant> merchants = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class));
 
 
-
+        //所有商家要按距离排序规则
+        Map<Merchant, Double> map = new HashMap<>();
+        //算距离
         for (Merchant m : merchants) {
         for (Merchant m : merchants) {
-            MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(m.getId()).orElseThrow(new BusinessException("商户不存在"));
-
-            double lat1 = m.getLatitude() * Math.PI / 180.0;
-            double lat2 = latitude * Math.PI / 180.0;
-
-            double a = lat1 - lat2;
-            double b = m.getLongitude() * Math.PI / 180.0 - longitude * Math.PI / 180.0;
-            double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
-                    + Math.cos(lat1)
-                    * Math.cos(lat2)
-                    * Math.pow(Math.sin(b / 2), 2)));
-            s = s * 6378.137 * 1000;
-            s = Math.round(s);
+            if (m.getLatitude() != null && m.getLongitude() != null) {
+                Double distance = MapUtils.distance(m.getLongitude(), m.getLatitude(), longitude, latitude);
+                map.put(m, distance);
+            }
+        }
 
 
+        //排序
+        List<Map.Entry<Merchant, Double>> list = new ArrayList<>(map.entrySet());
+        list.sort(Comparator.comparing(Map.Entry<Merchant, Double>::getValue));
+        List<Merchant> mers = new ArrayList<>();
+        for (Map.Entry<Merchant, Double> m : list) {
+            mers.add(m.getKey());
+        }
 
 
-            merchantDTOS.add(new MerchantDTO(m, merchantSettings));
+        if (popularTag == null) {
+            popularTag = pageQuery.getSearch();
         }
         }
 
 
-        List<MerchantDTO> dtos = new ArrayList<>(merchantDTOS);
+        //转DTO
+        List<MerchantDTO> merchantDTOS = CollUtil.newArrayList();
+        for (Merchant m : mers) {
+            MerchantSettings settings = merchantSettingsRepo.findByMerchantId(m.getId()).orElseThrow(new BusinessException("商户不存在"));
+            if (StrUtil.isNotBlank(popularTag)) {
+                switch (popularTag) {
+                    case "首单立减":
+                        if ((settings.getFirstOrder() != null ? settings.getFirstOrder().compareTo(BigDecimal.ZERO) : 0) > 0) {
+                            merchantDTOS.add(new MerchantDTO(m, settings));
+                        }
+                        break;
+                    case "满减优惠":
+                        if (CollUtil.isNotEmpty(fullReductionRepo.findAllByMerchantId(m.getId()))) {
+                            merchantDTOS.add(new MerchantDTO(m, settings));
+                        }
+                        break;
+                    case "折扣商家":
+                        if (StrUtil.isNotEmpty(merchantClassificationRepo.findByMerchantIdAndType(m.getId(), 2).getGoodsIds())) {
+                            merchantDTOS.add(new MerchantDTO(m, settings));
+                        }
+                        break;
+                    case "下单返红包":
+                        if (CollUtil.isNotEmpty(couponRepo.findAllByMerchantIdAndEnabledTrue(m.getId()))) {
+                            merchantDTOS.add(new MerchantDTO(m, settings));
+                        }
+                        break;
+                    case "可用红包":
+                        List<UserCoupon> coupons = userCouponRepo.findAllByUserIdAndIsUsedFalse(userId);
+                        List<UserCoupon> collect = coupons.stream().filter(c ->
+                                !c.getCoupon().getEndDate().isBefore(LocalDate.now()) && (c.getCoupon().getMerchantId() == null || c.getCoupon().getMerchantId().equals(m.getId()))
+                        ).collect(Collectors.toList());
+                        if (CollUtil.isNotEmpty(collect)) {
+                            merchantDTOS.add(new MerchantDTO(m, settings));
+                        }
+                        break;
+                    default:
+                        merchantDTOS.add(new MerchantDTO(m, settings));
+                        break;
+                }
+            }
+        }
 
 
-        return new PageImpl<>(dtos, toPageRequest(pageQuery), merchantDTOS.size());
+//        new PageImpl<>(merchantDTOS, toPageRequest(pageQuery), merchantDTOS.size())
+        return merchantDTOS;
     }
     }
 
 
 
 

+ 2 - 2
src/main/java/com/izouma/dingdong/service/merchant/SalesService.java

@@ -177,8 +177,8 @@ public class SalesService {
     插入到商家自定义分类
     插入到商家自定义分类
      */
      */
     private void into(Sales sales) {
     private void into(Sales sales) {
-        //查找好评热销
-        MerchantClassification merchantClass = merchantClassificationRepo.findByMerchantIdAndName(sales.getId(), Constants.CLASSIFICATION_NAME);
+        //查找好评热销 -> 1
+        MerchantClassification merchantClass = merchantClassificationRepo.findByMerchantIdAndType(sales.getId(), 1);
         if (!merchantClass.getIsOpen()) {
         if (!merchantClass.getIsOpen()) {
             return;
             return;
         }
         }

+ 28 - 0
src/main/java/com/izouma/dingdong/utils/MapUtils.java

@@ -0,0 +1,28 @@
+package com.izouma.dingdong.utils;
+
+public class MapUtils {
+    //地球半径
+    private static final Double EARTH_RADIUS = 6378.137;
+
+    /**
+     * 计算距离
+     *
+     * @param longitude1 商家经度
+     * @param latitude1  商家纬度
+     * @param longitude2 当前经度
+     * @param latitude2  当前纬度
+     * @return 距离
+     */
+    public static Double distance(Double longitude1, Double latitude1, Double longitude2, Double latitude2) {
+        double radLat1 = latitude1 * Math.PI / 180.0;
+        double radLat2 = latitude2 * Math.PI / 180.0;
+        double a = radLat1 - radLat2;
+        double b = longitude1 * Math.PI / 180.0 - longitude2 * Math.PI / 180.0;
+
+        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
+                Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
+        s = s * EARTH_RADIUS;
+        s = Math.round(s * 1000);
+        return s;
+    }
+}

+ 3 - 7
src/main/java/com/izouma/dingdong/web/merchant/MerchantController.java

@@ -67,11 +67,11 @@ public class MerchantController extends BaseController {
         ExcelUtils.export(response, data);
         ExcelUtils.export(response, data);
     }
     }
 
 
-/*    @GetMapping("/showAll")
+    @GetMapping("/backAll")
     @ApiOperation("商家所有信息")
     @ApiOperation("商家所有信息")
     public Page<MerchantDTO> showAll(PageQuery pageQuery) {
     public Page<MerchantDTO> showAll(PageQuery pageQuery) {
-        return merchantService.showAll(pageQuery);
-    }*/
+        return merchantService.backAll(pageQuery);
+    }
 
 
     @GetMapping("/my")
     @GetMapping("/my")
     public MerchantDTO my() {
     public MerchantDTO my() {
@@ -109,10 +109,6 @@ public class MerchantController extends BaseController {
     public Page<MerchantDTO> showAll(PageQuery pageQuery, BigDecimal longitude, BigDecimal latitude) {
     public Page<MerchantDTO> showAll(PageQuery pageQuery, BigDecimal longitude, BigDecimal latitude) {
 
 
 
 
-
-
-
-
 /*        return merchantService.showAll(pageQuery);*/
 /*        return merchantService.showAll(pageQuery);*/
         return null;
         return null;
     }
     }

+ 15 - 4
src/main/java/com/izouma/dingdong/web/user/UserCouponController.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.web.user;
 package com.izouma.dingdong.web.user;
 
 
 import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.converter.StringArrayConverter;
+import com.izouma.dingdong.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.service.user.UserCouponService;
 import com.izouma.dingdong.service.user.UserCouponService;
@@ -13,12 +14,13 @@ import com.izouma.dingdong.utils.excel.ExcelUtils;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.io.IOException;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 @RestController
 @RestController
 @RequestMapping("/userCoupon")
 @RequestMapping("/userCoupon")
@@ -68,7 +70,7 @@ public class UserCouponController extends BaseController {
         //转换
         //转换
         StringArrayConverter converter = new StringArrayConverter();
         StringArrayConverter converter = new StringArrayConverter();
         List<String> strings = converter.convertToEntityAttribute(couponId);
         List<String> strings = converter.convertToEntityAttribute(couponId);
-        strings.forEach(id->{
+        strings.forEach(id -> {
             UserCoupon build = UserCoupon.builder()
             UserCoupon build = UserCoupon.builder()
                     .couponId(Long.parseLong(id))
                     .couponId(Long.parseLong(id))
                     .isUsed(false)
                     .isUsed(false)
@@ -78,9 +80,18 @@ public class UserCouponController extends BaseController {
         });
         });
     }
     }
 
 
+    @ApiOperation("未过期的")
     @GetMapping("/my")
     @GetMapping("/my")
-    public Page<UserCoupon> my(PageQuery pageQuery){
-        return null;
+    public List<UserCoupon> my() {
+        List<UserCoupon> coupons = userCouponRepo.findAllByUserIdAndIsUsedFalse(SecurityUtils.getAuthenticatedUser().getId());
+        return coupons.stream().filter(c -> !LocalDate.now().isAfter(c.getCoupon().getEndDate())).collect(Collectors.toList());
+    }
+
+    @ApiOperation("已过期的")
+    @GetMapping("/myHis")
+    public List<UserCoupon> myHis() {
+        List<UserCoupon> coupons = userCouponRepo.findAllByUserIdAndIsUsedFalse(SecurityUtils.getAuthenticatedUser().getId());
+        return coupons.stream().filter(c -> LocalDate.now().isAfter(c.getCoupon().getEndDate())).collect(Collectors.toList());
     }
     }
 }
 }
 
 

+ 5 - 2
src/main/vue/src/views/merchant/MerchantList.vue

@@ -232,7 +232,7 @@
             return {
             return {
                 multipleMode: false,
                 multipleMode: false,
                 search: "",
                 search: "",
-                url: "/merchant/showAll",
+                url: "/merchant/backAll",
                 downloading: false,
                 downloading: false,
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                 statusOptions: [{"label": "待处理", "value": "PENDING"}, {
                     "label": "成功", "value": "PASS"
                     "label": "成功", "value": "PASS"
@@ -350,7 +350,10 @@
             },
             },
             beforeGetData() {
             beforeGetData() {
 
 
-                let data = {sort: 'createdAt,desc', query: {}};
+                let data = {
+                    sort: 'createdAt,desc',
+                    query: {}
+                };
                 if (this.search) {
                 if (this.search) {
                     data.search = this.search;
                     data.search = this.search;
                 }
                 }

+ 33 - 0
src/test/java/com/izouma/dingdong/contorller/SysConfigControllerTest.java

@@ -0,0 +1,33 @@
+package com.izouma.dingdong.contorller;
+
+import com.izouma.dingdong.domain.SysConfig;
+import com.izouma.dingdong.repo.SysConfigRepo;
+import com.izouma.dingdong.web.SysConfigController;
+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;
+
+@SpringBootTest
+@RunWith(SpringRunner.class)
+public class SysConfigControllerTest {
+    @Autowired
+    private SysConfigController configController;
+
+    @Autowired
+    private SysConfigRepo repo;
+
+    @Test
+    public void testSave(){
+        SysConfig build = SysConfig.builder()
+                .name("commission")
+                .desc("平台佣金")
+                .type(SysConfig.ValueType.NUMBER)
+                .value("0.12")
+                .build();
+
+       repo.save(build);
+    }
+
+}

+ 25 - 32
src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

@@ -7,6 +7,7 @@ import com.izouma.dingdong.repo.backstage.CategoryRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
+import com.izouma.dingdong.utils.MapUtils;
 import com.izouma.dingdong.web.merchant.MerchantController;
 import com.izouma.dingdong.web.merchant.MerchantController;
 import org.junit.Test;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runner.RunWith;
@@ -54,7 +55,7 @@ public class MerchantServiceTest {
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.put("startTime", "2020-05-14 13:49:11,2020-5-30 23:59:59");
         map.put("startTime", "2020-05-14 13:49:11,2020-5-30 23:59:59");
         pageQuery.setQuery(map);
         pageQuery.setQuery(map);
-        System.out.println(merchantController.all(pageQuery));
+        //System.out.println(merchantController.all(pageQuery));
     }
     }
 
 
     @Test
     @Test
@@ -73,42 +74,20 @@ public class MerchantServiceTest {
 
 
     @Test
     @Test
     public void test() {
     public void test() {
-        //广告园
-        double lat3 = 118.735194;
-        double lon3 = 31.982256;
+        //广告园 经度longitude 纬度latitude
+        double lon3 = 118.734661;
+        double lat3 = 31.981746;
 
 
         //康润园
         //康润园
-        double lat4 = 118.754795;
-        double lon4 = 31.990671;
+        double lon4 = 118.754795;
+        double lat4 = 31.990671;
 
 
         //六合
         //六合
-        double lat5 = 118.83;
-        double lon5 = 32.36;
+        double lon5 = 118.738041;
+        double lat5 = 32.152372;
 
 
 
 
-/*        double mulLat1 = lat5 * Math.PI / 180.0;
-        double mulLat2 = lat3 * Math.PI / 180.0;
-
-        double a = mulLat1 - mulLat2;
-        double b = lon5 * Math.PI / 180.0 - lon3 * Math.PI / 180.0;
-        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
-                + Math.cos(mulLat1)
-                * Math.cos(mulLat2)
-                * Math.pow(Math.sin(b / 2), 2)));
-
-        System.out.println(s);
-
-        //6378.137地球半径
-        s = s * 6378.137 * 1000;
-
-        System.out.println(s);
-
-        //向上取整
-        s = Math.round(s);
-
-        System.out.println(s);*/
-
-        double radLat1 = lat3 * Math.PI / 180.0;
+/*        double radLat1 = lat3 * Math.PI / 180.0;
         double radLat2 = lat5 * Math.PI / 180.0;
         double radLat2 = lat5 * Math.PI / 180.0;
         double a = radLat1 - radLat2;
         double a = radLat1 - radLat2;
         double b = lon3 * Math.PI / 180.0 - lon5 * Math.PI / 180.0;
         double b = lon3 * Math.PI / 180.0 - lon5 * Math.PI / 180.0;
@@ -117,7 +96,21 @@ public class MerchantServiceTest {
                 Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
                 Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
         s = s * 6378.137;
         s = s * 6378.137;
         s = Math.round(s * 1000);
         s = Math.round(s * 1000);
-        System.out.println(s);
+        System.out.println(s);*/
 
 
+        System.out.println(MapUtils.distance(lon3, lat3, lon5, lat5));
+        System.out.println(MapUtils.distance(lon3, lat3, lon4, lat4));
+
+
+    }
+
+    @Test
+    public void testdis() {
+        PageQuery pageQuery = new PageQuery();
+        pageQuery.setPage(0);
+        pageQuery.setSize(50);
+        //pageQuery.setSearch("走马");
+        pageQuery.setSort("");
+        System.out.println(merchantService.showAll(pageQuery, 118.738275, 31.991961,"折扣商家",82L).size());
     }
     }
 }
 }