Przeglądaj źródła

商户类的品类问题

licailing 5 lat temu
rodzic
commit
37f18d6016
20 zmienionych plików z 284 dodań i 79 usunięć
  1. 2 0
      src/main/java/com/izouma/dingdong/domain/MoneyRecord.java
  2. 4 1
      src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java
  3. 2 0
      src/main/java/com/izouma/dingdong/dto/MerchantDTO.java
  4. 2 1
      src/main/java/com/izouma/dingdong/enums/FinancialType.java
  5. 1 0
      src/main/java/com/izouma/dingdong/enums/RefundReason.java
  6. 5 0
      src/main/java/com/izouma/dingdong/repo/rider/RiderRepo.java
  7. 34 33
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  8. 42 15
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  9. 16 0
      src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java
  10. 38 0
      src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java
  11. 36 2
      src/main/java/com/izouma/dingdong/service/rider/RiderService.java
  12. 16 0
      src/main/java/com/izouma/dingdong/service/user/UserCouponService.java
  13. 17 4
      src/main/java/com/izouma/dingdong/web/OrderInfoController.java
  14. 9 2
      src/main/java/com/izouma/dingdong/web/OrderRefundApplyController.java
  15. 27 2
      src/main/java/com/izouma/dingdong/web/backstage/ComplaintController.java
  16. 1 11
      src/main/java/com/izouma/dingdong/web/user/UserCouponController.java
  17. 21 1
      src/main/vue/src/views/ComplaintEdit.vue
  18. 4 1
      src/main/vue/src/views/backstage/OrderRefundApplyList.vue
  19. 3 3
      src/main/vue/src/views/merchant/MerchantEdit.vue
  20. 4 3
      src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

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

@@ -25,6 +25,8 @@ public class MoneyRecord extends BaseEntity {
     @ApiModelProperty(value = "显示头像")
     private String avatar;
 
+    private Long fromUserId;
+
     @ApiModelProperty(value = "用户ID", name = "userId")
     private Long userId;
 

+ 4 - 1
src/main/java/com/izouma/dingdong/domain/OrderRefundApply.java

@@ -46,7 +46,8 @@ public class OrderRefundApply extends BaseEntity {
     @ApiModelProperty(value = "申请时间", name = "applyTime")
     private LocalDateTime applyTime;
 
-    @ApiModelProperty(value = "审核时间", name = "auditTime")
+    //商家审核时间
+    @ApiModelProperty(value = "商家审核时间", name = "auditTime")
     private LocalDateTime auditTime;
 
     @ApiModelProperty(value = "退款时间", name = "refundTime")
@@ -89,4 +90,6 @@ public class OrderRefundApply extends BaseEntity {
     @ApiModelProperty(value = "平台是否同意", name = "platformAgree")
     private Boolean platformAgree;
 
+    @ApiModelProperty(value = "审核时间", name = "platformAuditTime")
+    private LocalDateTime platformAuditTime;
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/dto/MerchantDTO.java

@@ -122,6 +122,8 @@ public class MerchantDTO implements Serializable {
     @ApiModelProperty(value = "经营品类", name = "category")
     private Set<Category> category;
 
+    private String categoryId;
+
 /*
     @ApiModelProperty(value = "标签", name = "tag")
     private Set<Tag> tag;*/

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

@@ -1,10 +1,11 @@
 package com.izouma.dingdong.enums;
 
 public enum FinancialType {
-    BUY("购买"),
+    USER_BUY("购买"),
     INCOME("收入"),
     REFUND("退款"),
     COMPENSATE_RIDER("补偿骑手"),
+    LOSE_MONEY("赔钱"),
     WITHDRAW("提现");
 
     private final String description;

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

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

+ 5 - 0
src/main/java/com/izouma/dingdong/repo/rider/RiderRepo.java

@@ -3,6 +3,7 @@ package com.izouma.dingdong.repo.rider;
 import com.izouma.dingdong.domain.rider.Rider;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Query;
 
 import java.util.Optional;
 
@@ -11,4 +12,8 @@ public interface RiderRepo extends JpaRepository<Rider, Long>, JpaSpecificationE
     Optional<Rider> findByUserId(Long userId);
 
     Optional<Rider> findByJobNumber(Long jobNumber);
+
+    //骑手Id找出用户Id
+    @Query("select t.userId from Rider t where t.id = ?1")
+    Long findUserIdById(Long id);
 }

+ 34 - 33
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.merchant.Merchant;
+import com.izouma.dingdong.domain.rider.Rider;
 import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -15,6 +16,7 @@ import com.izouma.dingdong.dto.UserOrderDTO;
 import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.*;
+import com.izouma.dingdong.repo.rider.RiderRepo;
 import com.izouma.dingdong.repo.user.ShoppingCartRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
@@ -23,7 +25,9 @@ import com.izouma.dingdong.repo.user.AddressRepo;
 import com.izouma.dingdong.repo.user.UserCouponRepo;
 import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.MerchantService;
+import com.izouma.dingdong.service.merchant.MerchantSettingsService;
 import com.izouma.dingdong.service.merchant.SalesService;
+import com.izouma.dingdong.service.rider.RiderService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -54,6 +58,9 @@ public class OrderInfoService {
     private MoneyRecordRepo moneyRecordRepo;
     private OrderRefundApplyService orderRefundApplyService;
     private SysConfigRepo sysConfigRepo;
+    private RiderRepo riderRepo;
+    private RiderService riderService;
+    private MerchantSettingsService merchantSettingsService;
 
     /*
     用户下单
@@ -216,7 +223,7 @@ public class OrderInfoService {
             orderInfo.setReason(RefundReason.MERCHANT_REJECTION);
             //退款流程
             OrderRefundApply apply = orderRefundApplyService.apply(orderId, RefundReason.MERCHANT_REJECTION, null);
-            orderRefundApplyService.audit(apply.getId(), true);
+            orderRefundApplyService.audit(apply.getId(), true, false);
         }
         return orderInfoRepo.save(orderInfo);
     }
@@ -282,7 +289,8 @@ public class OrderInfoService {
                         orderInfo.setUserReceivedTime(LocalDateTime.now());
                         orderInfo.setStatus(OrderStatus.RATED);
 
-
+                        //支付价钱
+                        this.orderCarryOut(orderId);
 
                         break;
                 }
@@ -311,7 +319,9 @@ public class OrderInfoService {
             case MERCHANT:
                 Long merchantId = merchantService.findMerchantId(userId);
                 return orderInfoRepo.findAllByMerchantId(merchantId);
-            // case RIDER:
+            case RIDER:
+                Rider rider = riderRepo.findByUserId(userId).orElseThrow(new BusinessException("无用户"));
+                return orderInfoRepo.findAllByRiderId(rider.getId());
         }
         return null;
     }
@@ -338,18 +348,19 @@ public class OrderInfoService {
     /*
     用户取消订单
      */
-    public void cancel(Long id, RefundReason reason) {
+    public OrderInfo cancel(Long id, RefundReason reason) {
         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;
+            return orderInfoRepo.save(orderInfo);
+
         }
 
+        //订单待评价/已完成
         if (orderInfo.getStatus().equals(OrderStatus.RATED) || orderInfo.getStatus().equals(OrderStatus.COMPLETED)) {
             throw new BusinessException("订单已完成");
         }
@@ -360,12 +371,12 @@ public class OrderInfoService {
             OrderRefundApply apply = orderRefundApplyService.apply(id, reason, null);
             //商家未接单,直接退
             if (MerchantStatus.NOT_RECEIVED.equals(orderInfo.getMerchantStatus())) {
-                orderRefundApplyService.audit(apply.getId(), true);
+                orderRefundApplyService.audit(apply.getId(), true, false);
 
             } else {//商家已接单
                 //骑手未接单 直接退
                 if (RiderStatus.NOT_RECEIVED.equals(orderInfo.getRiderStatus())) {
-                    orderRefundApplyService.audit(apply.getId(), true);
+                    orderRefundApplyService.audit(apply.getId(), true, false);
                 } else {
                     //已接单,已完成,不能退 只能投诉
                     if (RiderStatus.CARRY_OUT.equals(orderInfo.getRiderStatus())) {
@@ -378,14 +389,19 @@ public class OrderInfoService {
         orderInfo.setCancel(true);
         orderInfo.setReason(reason);
         orderInfo.setStatus(OrderStatus.CANCELLED);
-        orderInfoRepo.save(orderInfo);
+        return orderInfoRepo.save(orderInfo);
     }
 
-    public void orderCarryOut(Long orderId){
-        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+    /*
+    用户取消 取消订单
+     */
+//    public void
 
-        //按商户Id找出用户
-        User userMer = userRepo.findById(merchantRepo.findUserIdById(orderInfo.getMerchantId())).orElseThrow(new BusinessException("无用户"));
+    /*
+    订单完成结算钱
+     */
+    public void orderCarryOut(Long orderId) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
 
         //添加销量数据
         salesService.addSale(orderInfo);
@@ -394,27 +410,12 @@ public class OrderInfoService {
         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);
-
-        //购买的user
-        User user = userRepo.findById(orderInfo.getUserId()).orElseThrow(new BusinessException("无商户"));
-        //记录到对账单
-        moneyRecordRepo.save(
-                MoneyRecord.builder()
-                        .avatar(user.getAvatar())
-                        .name(user.getNickname() + "购买")
-                        .type(FinancialType.INCOME)
-                        .time(LocalDateTime.now())
-                        .amount(orderInfo.getRealAmount())
-                        .userId(merchantRepo.findUserIdById(orderInfo.getMerchantId()))
-                        .build()
-        );
-
-
 
+        //商家应得 = 减去骑手应得,减去平台抽成
+        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);
     }
 }

+ 42 - 15
src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java

@@ -4,15 +4,16 @@ import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.OrderRefundApply;
 import com.izouma.dingdong.domain.User;
-import com.izouma.dingdong.enums.OrderStatus;
-import com.izouma.dingdong.enums.RefundReason;
-import com.izouma.dingdong.enums.RefundStatus;
-import com.izouma.dingdong.enums.RiderStatus;
+import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.OrderInfoRepo;
 import com.izouma.dingdong.repo.OrderRefundApplyRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
+import com.izouma.dingdong.repo.rider.RiderRepo;
+import com.izouma.dingdong.service.merchant.MerchantService;
+import com.izouma.dingdong.service.merchant.MerchantSettingsService;
+import com.izouma.dingdong.service.rider.RiderService;
 import com.izouma.dingdong.utils.SnowflakeIdWorker;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
@@ -41,6 +42,15 @@ public class OrderRefundApplyService {
     @Autowired
     private MerchantRepo merchantRepo;
 
+    @Autowired
+    private MerchantSettingsService merchantSettingsService;
+
+    @Autowired
+    private RiderService riderService;
+
+    @Autowired
+    private RiderRepo riderRepo;
+
     private OrderStatus status;
 
     /**
@@ -85,13 +95,14 @@ public class OrderRefundApplyService {
      * @param applyId       申请退款ID
      * @param merchantAgree 商家是否通过
      */
-    public void audit(Long applyId, Boolean merchantAgree) {
+    public void audit(Long applyId, Boolean merchantAgree, Boolean payRider) {
         OrderRefundApply apply = orderRefundApplyRepo.findById(applyId).orElseThrow(new BusinessException("无记录"));
         if (apply.getStatus() != RefundStatus.PENDING) {
             return;
         }
 
-        userRepo.findById(apply.getOrderInfo().getUserId()).orElseThrow(new BusinessException("无用户"));
+        OrderInfo orderInfo = apply.getOrderInfo();
+        userRepo.findById(orderInfo.getUserId()).orElseThrow(new BusinessException("无用户"));
         if (merchantAgree) {
 
             String refundId = String.valueOf(new SnowflakeIdWorker(1, 1).nextId());
@@ -107,25 +118,34 @@ public class OrderRefundApplyService {
                 apply.setRefundId(refundId);
             }
 
-            //退款,线下退款
+            //退款,线下退款订单完成商家才得款
 
-            //订单完成商家才得款
-//            RiderStatus.CARRY_OUT.equals(apply.getOrderInfo().getRiderStatus())
 
             //骑手得应得的
+            if (payRider) {
+                //运费
+                BigDecimal deliveryAmount = orderInfo.getDeliveryAmount();
+                //骑手收入
+                Long merId = merchantRepo.findUserIdById(orderInfo.getMerchantId());
+                riderService.income(orderInfo.getRiderId(), merId, deliveryAmount, FinancialType.INCOME);
+                //商家支出
+                Long riderUserId = userRepo.findById(riderRepo.findUserIdById(orderInfo.getRiderId())).orElseThrow(new BusinessException("无用户")).getId();
+                merchantSettingsService.income(apply.getMerchantId(), riderUserId, deliveryAmount, FinancialType.LOSE_MONEY);
+            }
 
         } else {
 
             apply.setStatus(RefundStatus.PENDING);
             apply.setMerchantAgree(false);
-            apply.getOrderInfo().setStatus(OrderStatus.REFUNDED_PENDING);
+            //申请退款中
+            orderInfo.setStatus(OrderStatus.REFUNDED_PENDING);
             //apply.getOrderInfo().setStatus((status != null) ? status : OrderStatus.PAID);
             //上报到后台
             apply.setReport(true);
         }
 
         apply.setAuditTime(LocalDateTime.now());
-        orderInfoRepo.save(apply.getOrderInfo());
+        orderInfoRepo.save(orderInfo);
         orderRefundApplyRepo.save(apply);
 
 
@@ -153,7 +173,7 @@ public class OrderRefundApplyService {
     //商家同意 商家不同意
 
     //平台
-    public void platformAudit(Long applyId, Boolean agree, BigDecimal merchantLiability, BigDecimal riderLiability,Boolean isCarryOut) {
+    public void platformAudit(Long applyId, Boolean agree, BigDecimal merchantLiability, BigDecimal riderLiability) {
 
         OrderRefundApply apply = orderRefundApplyRepo.findById(applyId).orElseThrow(new BusinessException("无记录"));
         if (ObjectUtil.isNull(merchantLiability)) {
@@ -169,20 +189,27 @@ public class OrderRefundApplyService {
             apply.setMerchantLiability(merchantLiability);
 
             if (!merchantLiability.equals(BigDecimal.ZERO)) {
-                //按商户Id找出用户
-                User userMer = userRepo.findById(merchantRepo.findUserIdById(apply.getMerchantId())).orElseThrow(new BusinessException("无用户"));
                 //商家所赔金额
                 BigDecimal merAmount = apply.getOrderInfo().getRealAmount().multiply(merchantLiability);
-                userMer.setMoney(userMer.getMoney().subtract(merAmount));
+                merchantSettingsService.income(apply.getMerchantId(), apply.getOrderInfo().getUserId(), merAmount, FinancialType.REFUND);
             }
 
             if (!riderLiability.equals(BigDecimal.ZERO)) {
                 //骑手赔付金额
+                BigDecimal riderAmount = apply.getOrderInfo().getRealAmount().multiply(riderLiability);
+                riderService.income(apply.getOrderInfo().getRiderId(), apply.getOrderInfo().getUserId(), riderAmount, FinancialType.REFUND);
             }
 
+            apply.getOrderInfo().setStatus(OrderStatus.REFUNDED);
         } else {
             apply.setPlatformAgree(false);
+            //原状态
+            apply.getOrderInfo().setStatus(status);
         }
 
+        orderInfoRepo.save(apply.getOrderInfo());
+
+        apply.setPlatformAuditTime(LocalDateTime.now());
+        orderRefundApplyRepo.save(apply);
     }
 }

+ 16 - 0
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -5,8 +5,10 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.config.Constants;
+import com.izouma.dingdong.converter.LongArrayConverter;
 import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.Verified;
+import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -18,6 +20,7 @@ import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.CouponRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.VerifiedRepo;
+import com.izouma.dingdong.repo.backstage.CategoryRepo;
 import com.izouma.dingdong.repo.merchant.FullReductionRepo;
 import com.izouma.dingdong.repo.merchant.MerchantClassificationRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
@@ -52,6 +55,7 @@ public class MerchantService {
     private FullReductionRepo fullReductionRepo;
     private CouponRepo couponRepo;
     private UserCouponRepo userCouponRepo;
+    private CategoryRepo categoryRepo;
 
     /*
     商户注册申请
@@ -154,9 +158,21 @@ public class MerchantService {
      * @return 修改
      */
     public MerchantDTO change(MerchantDTO merchantDTO) {
+        if (merchantDTO.getCategoryId() != null) {
+            Set<Category> categories = new HashSet<>();
+            LongArrayConverter converter = new LongArrayConverter();
+            List<Long> longs = converter.convertToEntityAttribute(merchantDTO.getCategoryId());
+            longs.forEach(l -> {
+                Category category = categoryRepo.findById(l).orElseThrow(new BusinessException("无分类"));
+                categories.add(category);
+            });
+            merchantDTO.setCategory(categories);
+        }
+
         if (merchantDTO.getMid() == null) {
             return registerApply(merchantDTO);
         }
+
         Merchant merchant = merchantRepo.findById(merchantDTO.getMid()).orElseThrow(new BusinessException("商户不存在"));
         MerchantSettings merchantSettings = merchantSettingsRepo.findByMerchantId(merchantDTO.getMid()).orElseThrow(new BusinessException("商户不存在"));
 

+ 38 - 0
src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java

@@ -1,19 +1,26 @@
 package com.izouma.dingdong.service.merchant;
 
 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.backstage.TimeTag;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;
+import com.izouma.dingdong.enums.FinancialType;
 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.backstage.TimeTagRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -29,6 +36,9 @@ public class MerchantSettingsService {
 
     private MerchantRepo merchantRepo;
 
+    private UserRepo userRepo;
+
+    private MoneyRecordRepo moneyRecordRepo;
 
     /*
     显示所有订单
@@ -59,4 +69,32 @@ public class MerchantSettingsService {
     }
 
 
+    /*
+    商户叮咚币记录
+     */
+    public void income(Long merchantId, Long fromUserId, BigDecimal amount, FinancialType type) {
+        //按商户Id找出用户
+        User userMer = userRepo.findById(merchantRepo.findUserIdById(merchantId)).orElseThrow(new BusinessException("无用户"));
+        //商家应得 = 减去骑手应得,减去平台抽成
+        userMer.setMoney(userMer.getMoney().add(amount));
+        userRepo.save(userMer);
+
+        //购买的user
+        User user = userRepo.findById(fromUserId).orElseThrow(new BusinessException("无用户"));
+
+        //商家记录到对账单
+        moneyRecordRepo.save(
+                MoneyRecord.builder()
+                        .avatar(user.getAvatar())
+                        .name(user.getNickname())
+                        .type(type)
+                        .time(LocalDateTime.now())
+                        .amount(amount)
+                        .userId(userMer.getId())
+                        .fromUserId(fromUserId)
+                        .build()
+        );
+    }
+
+
 }

+ 36 - 2
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -1,21 +1,55 @@
 package com.izouma.dingdong.service.rider;
 
+import com.izouma.dingdong.domain.MoneyRecord;
+import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.enums.FinancialType;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.MoneyRecordRepo;
+import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
 @Service
 @AllArgsConstructor
 public class RiderService {
 
     private RiderRepo riderRepo;
-
+    private UserRepo userRepo;
+    private MoneyRecordRepo moneyRecordRepo;
 
     /*
     骑手签到
      */
-    public void sign(Long riderId){
+    public void sign(Long riderId) {
+
+    }
+
+    /*
+    骑手收入,且保存到记录表
+     */
+    public void income(Long riderId, Long fromUserId, BigDecimal amount, FinancialType type) {
+        //骑手应得
+        User riderUser = userRepo.findById(riderRepo.findUserIdById(riderId)).orElseThrow(new BusinessException("无用户"));
+        riderUser.setMoney(riderUser.getMoney().add(amount));
+        userRepo.save(riderUser);
+
+        //购买的user
+        User user = userRepo.findById(fromUserId).orElseThrow(new BusinessException("无用户"));
+
+        moneyRecordRepo.save(MoneyRecord.builder()
+                .amount(amount)
+                .avatar(user.getAvatar())
+                .name(user.getNickname())
+                .type(type)
+                .fromUserId(fromUserId)
+                .userId(riderUser.getId())
+                .time(LocalDateTime.now())
+                .build());
 
     }
 }

+ 16 - 0
src/main/java/com/izouma/dingdong/service/user/UserCouponService.java

@@ -1,14 +1,30 @@
 package com.izouma.dingdong.service.user;
 
+import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.user.UserCoupon;
 import com.izouma.dingdong.repo.user.UserCouponRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 @Service
 @AllArgsConstructor
 public class UserCouponService {
 
     private UserCouponRepo userCouponRepo;
 
+    public void issue(Long userId, String couponId) {
+        //转换
+        StringArrayConverter converter = new StringArrayConverter();
+        List<String> strings = converter.convertToEntityAttribute(couponId);
+        strings.forEach(id -> {
+            UserCoupon build = UserCoupon.builder()
+                    .couponId(Long.parseLong(id))
+                    .isUsed(false)
+                    .userId(userId)
+                    .build();
+            userCouponRepo.save(build);
+        });
+    }
 }

+ 17 - 4
src/main/java/com/izouma/dingdong/web/OrderInfoController.java

@@ -6,6 +6,7 @@ import com.izouma.dingdong.dto.OrderDTO;
 import com.izouma.dingdong.dto.UserOrderDTO;
 
 import com.izouma.dingdong.enums.MerchantStatus;
+import com.izouma.dingdong.enums.RefundReason;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.service.OrderInfoService;
 import com.izouma.dingdong.dto.PageQuery;
@@ -87,17 +88,19 @@ public class OrderInfoController extends BaseController {
         Map<String, Object> query = pageQuery.getQuery();
         Long id = SecurityUtils.getAuthenticatedUser().getId();
         User user = userRepo.findById(id).orElseThrow(new BusinessException("无用户"));
-        if (user.getIdentity()==null){
+        if (user.getIdentity() == null) {
             throw new BusinessException("身份错误");
         }
         switch (user.getIdentity()) {
             case USER:
-                query.put("userId",id);break;
+                query.put("userId", id);
+                break;
             case MERCHANT:
                 Long merchantId = merchantService.findMerchantId(id);
-                query.put("merchantId",merchantId);break;
+                query.put("merchantId", merchantId);
+                break;
         }
-        return orderInfoRepo.findAll(toSpecification(pageQuery,OrderInfo.class),toPageRequest(pageQuery));
+        return orderInfoRepo.findAll(toSpecification(pageQuery, OrderInfo.class), toPageRequest(pageQuery));
 
 /*        List<OrderInfo> collect = orderInfoService.my(SecurityUtils.getAuthenticatedUser().getId());
         return new PageImpl<>(collect, toPageRequest(pageQuery), pageQuery.getSize());*/
@@ -128,5 +131,15 @@ public class OrderInfoController extends BaseController {
     public BigDecimal allAmount(Long id) {
         return orderInfoRepo.sumRealAmountByUserId(id);
     }
+
+
+    @GetMapping("/cancelOrder")
+    @ApiOperation("取消订单")
+    public OrderInfo cancel(Long id, RefundReason reason) {
+        return orderInfoService.cancel(id, reason);
+    }
+
+    //@GetMapping("/cancelCancelOrder")
+
 }
 

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

@@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.List;
 
 @AllArgsConstructor
@@ -75,9 +76,11 @@ public class OrderRefundApplyController extends BaseController {
         orderRefundApplyService.apply(orderId, reason, remark);
     }
 
+    @ApiOperation("商家是否同意退款")
     @GetMapping("/audit")
     public void consent(@RequestParam Long id, @RequestParam Boolean consent) {
-        orderRefundApplyService.audit(id, consent);
+        //需要商家同意的订单,都为骑手已经接到货
+        orderRefundApplyService.audit(id, consent, true);
     }
 
     @GetMapping("/cancel")
@@ -93,6 +96,10 @@ public class OrderRefundApplyController extends BaseController {
         return orderRefundApplyRepo.findAllByMerchantId(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId()));
     }
 
-
+    @ApiOperation("平台是否同意退款")
+    @GetMapping("/platformAudit")
+    public void platformAudit(Long applyId, Boolean agree, BigDecimal merchantLiability, BigDecimal riderLiability) {
+        orderRefundApplyService.platformAudit(applyId, agree, merchantLiability, riderLiability);
+    }
 }
 

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

@@ -1,5 +1,10 @@
 package com.izouma.dingdong.web.backstage;
 
+import com.izouma.dingdong.domain.OrderRefundApply;
+import com.izouma.dingdong.enums.RefundReason;
+import com.izouma.dingdong.enums.Solution;
+import com.izouma.dingdong.service.OrderRefundApplyService;
+import com.izouma.dingdong.service.user.UserCouponService;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.backstage.Complaint;
 import com.izouma.dingdong.service.backstage.ComplaintService;
@@ -11,11 +16,11 @@ import com.izouma.dingdong.utils.excel.ExcelUtils;
 
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.math.BigDecimal;
 import java.util.List;
 
 @RestController
@@ -24,6 +29,8 @@ import java.util.List;
 public class ComplaintController extends BaseController {
     private ComplaintService complaintService;
     private ComplaintRepo complaintRepo;
+    private OrderRefundApplyService orderRefundApplyService;
+    private UserCouponService userCouponService;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -40,7 +47,7 @@ public class ComplaintController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @GetMapping("/all")
     public Page<Complaint> all(PageQuery pageQuery) {
-        return complaintRepo.findAll(toSpecification(pageQuery,Complaint.class), toPageRequest(pageQuery));
+        return complaintRepo.findAll(toSpecification(pageQuery, Complaint.class), toPageRequest(pageQuery));
     }
 
     @GetMapping("/get/{id}")
@@ -59,5 +66,23 @@ public class ComplaintController extends BaseController {
         List<Complaint> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @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);
+        orderRefundApplyService.audit(apply.getId(), false, true);
+        orderRefundApplyService.platformAudit(apply.getId(), true, merchantLiability, riderLiability);
+        complaint.setSolution(Solution.REFUND);
+        complaintRepo.save(complaint);
+    }
+
+    @GetMapping("/issue")
+    public void issue(Long id, Long userId, String couponId) {
+        Complaint complaint = complaintRepo.findById(id).orElseThrow(new BusinessException("无记录"));
+        userCouponService.issue(userId, couponId);
+        complaint.setSolution(Solution.ISSUE_COUPONS);
+        complaintRepo.save(complaint);
+    }
 }
 

+ 1 - 11
src/main/java/com/izouma/dingdong/web/user/UserCouponController.java

@@ -67,17 +67,7 @@ public class UserCouponController extends BaseController {
     @ApiOperation("后台发放优惠券")
     @PostMapping("/issue")
     public void issue(@RequestParam Long userId, String couponId) {
-        //转换
-        StringArrayConverter converter = new StringArrayConverter();
-        List<String> strings = converter.convertToEntityAttribute(couponId);
-        strings.forEach(id -> {
-            UserCoupon build = UserCoupon.builder()
-                    .couponId(Long.parseLong(id))
-                    .isUsed(false)
-                    .userId(userId)
-                    .build();
-            userCouponRepo.save(build);
-        });
+        userCouponService.issue(userId, couponId);
     }
 
     @ApiOperation("未过期的")

+ 21 - 1
src/main/vue/src/views/ComplaintEdit.vue

@@ -80,6 +80,23 @@
             </div>
         </el-dialog>
 
+
+        <el-dialog
+                title="退款"
+                center
+                :visible.sync="dislogForm"
+        >
+            <el-form>
+                <el-form-item label="商家责任">
+                    <el-input></el-input>
+                </el-form-item>
+                <el-form-item label="骑手责任">
+                    <el-input></el-input>
+                </el-form-item>
+            </el-form>
+
+        </el-dialog>
+
     </div>
 </template>
 <script>
@@ -109,6 +126,7 @@
                     "value": "REFUND"
                 }, {"label": "发放优惠券", "value": "ISSUE_COUPONS"}],
                 dislogTableCoupon: false,
+                dislogForm: false,
                 coupons: [],
             }
         },
@@ -159,7 +177,8 @@
                     message: this.selection
                 });*/
                 this.$http
-                    .post("/userCoupon/issue", {
+                    .post("/complaint/issue", {
+                            id: this.id,
                             userId: this.formData.id,
                             couponId: this.selection.toString(),
 
@@ -187,6 +206,7 @@
                         console.log(e);
                     });
             },
+
         }
     }
 </script>

+ 4 - 1
src/main/vue/src/views/backstage/OrderRefundApplyList.vue

@@ -205,7 +205,10 @@
                 return {
                     search: this.search,
                     query: {
-                        status: this.status
+                        status: this.status,
+                        //只需要上报的退款订单
+                        report: true,
+
                     },
                     sort: "applyTime,desc"
                 };

+ 3 - 3
src/main/vue/src/views/merchant/MerchantEdit.vue

@@ -47,7 +47,7 @@
 <!--                    <el-option value="加盟">加盟</el-option>-->
 <!--                </el-select>-->
             </el-form-item>
-            <el-form-item prop="week" label="周几" id="week">
+<!--            <el-form-item prop="week" label="周几" id="week">
                 <el-select v-model="formData.week" multiple
                            placeholder="请选择" value-key="value">
                     <el-option value="MONDAY">MONDAY</el-option>
@@ -58,7 +58,7 @@
                     <el-option value="SATURDAY">SATURDAY</el-option>
                     <el-option value="SUNDAY">SUNDAY</el-option>
                 </el-select>
-            </el-form-item>
+            </el-form-item>-->
             <el-form-item prop="startTime" label="营业时间">
                 <el-time-picker
                         v-model="formData.startTime"
@@ -184,7 +184,7 @@
                 let data = {...this.formData};
                 data.img = data.img.join(",");
                 data.qualification = data.qualification.join(",");
-                data.week = data.week.join(",")
+                /*data.week = data.week.join(",")*/
 
                 this.saving = true;
                 this.$http

+ 4 - 3
src/test/java/com/izouma/dingdong/service/MerchantServiceTest.java

@@ -61,9 +61,10 @@ public class MerchantServiceTest {
     @Test
     public void saveDTO() {
         MerchantDTO dto = new MerchantDTO();
-        dto.setMid(752L);
-        Category category = categoryRepo.findById(733L).orElse(null);
-        dto.setCategory(Collections.singleton(category));
+        dto.setMid(48L);
+        //Category category = categoryRepo.findById(733L).orElse(null);
+       //dto.setCategory(Collections.singleton(category));
+        dto.setCategoryId("733");
         System.out.println(merchantController.saveDTO(dto));
     }