licailing 5 лет назад
Родитель
Сommit
675359a51d
25 измененных файлов с 265 добавлено и 144 удалено
  1. 6 0
      pom.xml
  2. 1 1
      src/main/java/com/izouma/dingdong/repo/AppraisalRepo.java
  3. 2 0
      src/main/java/com/izouma/dingdong/repo/backstage/BlackListRepo.java
  4. 4 0
      src/main/java/com/izouma/dingdong/repo/backstage/ComplaintRepo.java
  5. 59 10
      src/main/java/com/izouma/dingdong/service/AppraisalService.java
  6. 17 4
      src/main/java/com/izouma/dingdong/service/OrderInfoService.java
  7. 8 8
      src/main/java/com/izouma/dingdong/service/OrderRefundApplyService.java
  8. 6 0
      src/main/java/com/izouma/dingdong/service/SysConfigService.java
  9. 10 6
      src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java
  10. 37 19
      src/main/java/com/izouma/dingdong/service/backstage/BlackListService.java
  11. 23 0
      src/main/java/com/izouma/dingdong/service/backstage/ComplaintService.java
  12. 0 1
      src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java
  13. 21 6
      src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java
  14. 33 11
      src/main/java/com/izouma/dingdong/service/rider/RiderService.java
  15. 1 0
      src/main/java/com/izouma/dingdong/service/user/UserCouponService.java
  16. 7 0
      src/main/java/com/izouma/dingdong/web/AppraisalController.java
  17. 3 3
      src/main/java/com/izouma/dingdong/web/backstage/BlackListController.java
  18. 16 4
      src/main/java/com/izouma/dingdong/web/backstage/ComplaintController.java
  19. 0 1
      src/main/java/com/izouma/dingdong/web/backstage/CooperateApplyController.java
  20. 0 1
      src/main/java/com/izouma/dingdong/web/merchant/GoodsController.java
  21. 1 1
      src/main/vue/src/components/BlackButton.vue
  22. 1 0
      src/main/vue/src/views/merchant/MerchantEdit.vue
  23. 0 31
      src/main/vue/src/views/merchant/MerchantList.vue
  24. 4 37
      src/main/vue/src/views/user/UserEdit.vue
  25. 5 0
      src/test/java/com/izouma/dingdong/service/AppraisalServiceTest.java

+ 6 - 0
pom.xml

@@ -265,5 +265,11 @@
             <version>1.0.1</version>
         </dependency>
 
+        <!-- TPNS移动推送 -->
+<!--        <dependency>
+            <groupId>com.github.xingePush</groupId>
+            <artifactId>xinge</artifactId>
+            <version>1.2.2</version>
+        </dependency>-->
     </dependencies>
 </project>

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

@@ -28,5 +28,5 @@ public interface AppraisalRepo extends JpaRepository<Appraisal, Long>, JpaSpecif
     @Transactional
     void deleteAllByMerchantId(Long merchantId);
 
-
+    Integer countByRiderIdAndRiderLikeIs(Long riderId, Integer riderLike);
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/repo/backstage/BlackListRepo.java

@@ -13,4 +13,6 @@ public interface BlackListRepo extends JpaRepository<BlackList, Long>, JpaSpecif
     @Modifying
     @Transactional
     void deleteById(Long id);
+
+    BlackList findByOtherIdAndRemoveFalse(Long id);
 }

+ 4 - 0
src/main/java/com/izouma/dingdong/repo/backstage/ComplaintRepo.java

@@ -1,16 +1,20 @@
 package com.izouma.dingdong.repo.backstage;
 
 import com.izouma.dingdong.domain.backstage.Complaint;
+import com.izouma.dingdong.enums.ComplaintTarget;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface ComplaintRepo extends JpaRepository<Complaint, Long>, JpaSpecificationExecutor<Complaint> {
     @Query("update Complaint t set t.enabled = false where t.id = ?1")
     @Modifying
     @Transactional
     void deleteById(Long id);
+
+    List<Complaint> findAllByTarget(ComplaintTarget target);
 }

+ 59 - 10
src/main/java/com/izouma/dingdong/service/AppraisalService.java

@@ -4,30 +4,26 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.izouma.dingdong.converter.LongArrayConverter;
-import com.izouma.dingdong.domain.Appraisal;
-import com.izouma.dingdong.domain.OrderGoodsSpec;
-import com.izouma.dingdong.domain.OrderInfo;
-import com.izouma.dingdong.domain.User;
+import com.izouma.dingdong.domain.*;
 import com.izouma.dingdong.domain.merchant.Goods;
+import com.izouma.dingdong.domain.rider.Rider;
 import com.izouma.dingdong.dto.AppraisalMerDTO;
 import com.izouma.dingdong.dto.AppraisalRidDTO;
+import com.izouma.dingdong.dto.ShowAppRidDTO;
 import com.izouma.dingdong.enums.AppraisalSort;
 import com.izouma.dingdong.enums.OrderStatus;
 import com.izouma.dingdong.exception.BusinessException;
-import com.izouma.dingdong.repo.AppraisalRepo;
-import com.izouma.dingdong.repo.FastAppraisalRepo;
-import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
-import com.izouma.dingdong.repo.OrderInfoRepo;
+import com.izouma.dingdong.repo.*;
 
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
+import com.izouma.dingdong.repo.rider.RiderRepo;
 import com.izouma.dingdong.service.merchant.SalesService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
 import java.time.LocalDateTime;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -40,6 +36,7 @@ public class AppraisalService {
     private SalesService       salesService;
     private MerchantRepo       merchantRepo;
     private FastAppraisalRepo  fastAppraisalRepo;
+    private RiderRepo          riderRepo;
 
     /*
     客户评价
@@ -171,6 +168,9 @@ public class AppraisalService {
         return appraisals.stream().map(this::toRidDTO).collect(Collectors.toList());
     }
 
+    /*
+    转骑手评价dto
+     */
     public AppraisalRidDTO toRidDTO(Appraisal a) {
         AppraisalRidDTO ridDTO = AppraisalRidDTO
                 .builder()
@@ -196,4 +196,53 @@ public class AppraisalService {
         }
         return ridDTO;
     }
+
+    public ShowAppRidDTO showAppRid(Long riderId) {
+        //查处所有骑手评价
+        List<Appraisal> appraisals = appraisalRepo.findAllByRiderId(riderId);
+        //查找骑手信息
+        Rider rider = riderRepo.findById(riderId).orElseThrow(new BusinessException("无骑手"));
+        User user = rider.getUser();
+
+        Integer awesome = appraisalRepo.countByRiderIdAndRiderLikeIs(riderId, 1);
+        Integer bad = appraisalRepo.countByRiderIdAndRiderLikeIs(riderId, 2);
+        Integer general = appraisalRepo.countByRiderIdAndRiderLikeIs(riderId, 3);
+
+        LongArrayConverter converter = new LongArrayConverter();
+
+        Map<Long, Integer> map = new HashMap<>();
+
+        //取出所有快捷标签
+        appraisals.forEach(a -> {
+            if (ObjectUtil.isNotEmpty(a.getFastIds())) {
+                List<Long> longs = converter.convertToEntityAttribute(a.getFastIds());
+                longs.forEach(l ->
+                        map.merge(l, 1, Integer::sum)
+                );
+            }
+        });
+
+        List<Map.Entry<Long, Integer>> list = new ArrayList<>(map.entrySet());
+//        list.sort(Comparator.comparing(Map.Entry<Long, Integer>::getValue));
+        list.sort((a, b) -> b.getValue().compareTo(a.getValue()));
+
+        if (list.size() > 6) {
+            list = list.subList(0, 6);
+        }
+        //转换为内容
+        List<String> content = new ArrayList<>(map.size());
+        list.forEach(m ->
+                fastAppraisalRepo.findById(m.getKey()).ifPresent(f -> content.add(f.getContent() + " " + m.getValue()))
+        );
+
+        return ShowAppRidDTO.builder()
+                .awesome(awesome)
+                .bad(bad)
+                .general(general)
+                .avatar(user.getAvatar())
+                .nickname(user.getNickname())
+                .content(content)
+                .build();
+    }
+
 }

+ 17 - 4
src/main/java/com/izouma/dingdong/service/OrderInfoService.java

@@ -54,7 +54,7 @@ public class OrderInfoService {
     private OrderRefundApplyService orderRefundApplyService;
     private RiderRepo               riderRepo;
     private DeliveryFeeService      deliveryFeeService;
-    private SysConfigRepo           sysConfigRepo;
+    private SysConfigService        sysConfigService;
 
     /*
     用户下单
@@ -112,9 +112,7 @@ public class OrderInfoService {
         Double distance = MapUtils.distance(address.getLongitude(), address.getLatitude(), merchant.getLongitude(), merchant
                 .getLatitude());
         //获取范围
-        String range = sysConfigRepo.findByName("range").orElseThrow(new BusinessException("无配置")).getValue();
-
-        if (distance > new Double(range)) {
+        if (distance > sysConfigService.getRange()) {
             throw new BusinessException("超出配送距离");
         }
 
@@ -128,6 +126,13 @@ public class OrderInfoService {
                 .getLatitude());
         orderInfo.setDeliveryAmount(deliveryFee);
 
+        //货到付款不能使用优惠券
+        if (PayMethod.CASH_DELIVERY.equals(userOrderDTO.getPayMethod())) {
+            if (ObjectUtil.isNotNull(userOrderDTO.getUserCouponId())) {
+                throw new BusinessException("货到付款不能使用优惠券");
+            }
+        }
+
         // 使用优惠券(满减优惠券)
         if (ObjectUtil.isNotNull(userOrderDTO.getUserCouponId())) {
             //Coupon coupon = couponRepo.findById(userOrderDTO.getCouponId()).orElseThrow(new BusinessException("优惠券不存在"));
@@ -358,4 +363,12 @@ public class OrderInfoService {
     支付倒计时
      */
 
+    /*
+    货到付款取消订单
+     */
+    public void can(Long orderId) {
+        OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
+
+    }
+
 }

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

@@ -3,12 +3,10 @@ package com.izouma.dingdong.service;
 import cn.hutool.core.util.ObjectUtil;
 import com.izouma.dingdong.domain.OrderInfo;
 import com.izouma.dingdong.domain.OrderRefundApply;
-import com.izouma.dingdong.domain.SysConfig;
 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.SysConfigRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
@@ -40,8 +38,10 @@ public class OrderRefundApplyService {
     private MerchantSettingsService merchantSettingsService;
     @Autowired
     private RiderService            riderService;
+//    @Autowired
+//    private SysConfigRepo           sysConfigRepo;
     @Autowired
-    private SysConfigRepo           sysConfigRepo;
+    private SysConfigService        sysConfigService;
 
     private OrderStatus status;
 
@@ -143,7 +143,7 @@ public class OrderRefundApplyService {
                 Long riderUserId = orderInfo.getRiderId();
                 merchantSettingsService.income(apply.getMerchantId(), riderUserId, deliveryAmount, FinancialType.EXPENDITURE, apply
                         .getOrderId()
-                        .toString(),"客户退款");
+                        .toString(), "客户退款");
             }
 
         } else {
@@ -206,7 +206,7 @@ public class OrderRefundApplyService {
                 BigDecimal merAmount = orderInfo.getRealAmount().multiply(merchantLiability);
                 merchantSettingsService.income(apply.getMerchantId(), orderInfo.getUserId(), merAmount, FinancialType.EXPENDITURE, apply
                         .getOrderId()
-                        .toString(),"违约扣款");
+                        .toString(), "违约扣款");
             }
 
             if (!riderLiability.equals(BigDecimal.ZERO)) {
@@ -241,18 +241,18 @@ public class OrderRefundApplyService {
         OrderInfo orderInfo = orderInfoRepo.findById(orderId).orElseThrow(new BusinessException("无订单"));
 
         //扣除金额
-        SysConfig sysConfig = sysConfigRepo.findByName("commission").orElseThrow(new BusinessException("无设置"));
+        BigDecimal commission = sysConfigService.getBigDecimal("commission");
 
         //实付减运费
         BigDecimal subtractDelivery = orderInfo.getRealAmount().subtract(orderInfo.getDeliveryAmount());
         //平台抽成 (实付金额减运费)
-        BigDecimal platform = subtractDelivery.multiply(new BigDecimal(sysConfig.getValue()));
+        BigDecimal platform = subtractDelivery.multiply(commission);
 
         //商家应得 = 减去骑手应得,减去平台抽成
         BigDecimal deserve = subtractDelivery.subtract(platform);
         merchantSettingsService.income(orderInfo.getMerchantId(), orderInfo.getUserId(), deserve, FinancialType.INCOME, orderInfo
                 .getId()
-                .toString(),"用户消费");
+                .toString(), "用户消费");
 
         //骑手应得
         riderService.income(orderInfo.getRiderId(), orderInfo.getUserId(), orderInfo.getDeliveryAmount(), FinancialType.INCOME, orderInfo

+ 6 - 0
src/main/java/com/izouma/dingdong/service/SysConfigService.java

@@ -36,4 +36,10 @@ public class SysConfigService {
                 .orElseThrow(new BusinessException("配置不存在"));
         return str.equals("1");
     }
+
+    public Double getRange() {
+        String str = sysConfigRepo.findByName("range").map(SysConfig::getValue)
+                .orElseThrow(new BusinessException("配置不存在"));
+        return new Double(str);
+    }
 }

+ 10 - 6
src/main/java/com/izouma/dingdong/service/WithdrawApplyService.java

@@ -68,6 +68,9 @@ public class WithdrawApplyService {
                 .content(apply.getAmount() + "元," + "提现到:" + bankCard.userInfo())
                 .build()
         );
+        //先扣除金额
+        user.setMoney(user.getMoney().subtract(amount));
+        userRepo.save(user);
 
         return withdrawalsApplyRepo.save(apply);
 
@@ -85,16 +88,13 @@ public class WithdrawApplyService {
         }
         Email email;
 
+        //人工提现,设置余额
+        User user = userRepo.findById(withdrawals.getUserId()).orElseThrow(new BusinessException("无用户"));
+
         if (consent) {
             withdrawals.setConsent(true);
             withdrawals.setStatus(WithdrawStatus.SUCCESS);
 
-            //人工提现,设置余额
-            User user = userRepo.findById(withdrawals.getUserId()).orElseThrow(new BusinessException("无用户"));
-            user.setMoney(user.getMoney().subtract(withdrawals.getAmount()));
-            userRepo.save(user);
-
-
             //记录到对账单
             BankCard bankCard = withdrawals.getBankCard();
             moneyRecordRepo.save(
@@ -128,6 +128,10 @@ public class WithdrawApplyService {
                     .sendTime(LocalDate.now())
                     .content("提现失败")
                     .build();
+
+            //失败返还金额
+            user.setMoney(user.getMoney().add(withdrawals.getAmount()));
+            userRepo.save(user);
         }
         //报错邮件通知
         emailRepo.save(email);

+ 37 - 19
src/main/java/com/izouma/dingdong/service/backstage/BlackListService.java

@@ -4,6 +4,7 @@ import com.izouma.dingdong.domain.User;
 import com.izouma.dingdong.domain.backstage.BlackList;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.enums.Identity;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.backstage.BlackListRepo;
@@ -56,25 +57,6 @@ public class BlackListService {
                 build.setOtherId(userId);
                 break;
         }
-
-/*        if (Identity.MERCHANT.equals(user.getIdentity())) {
-            Merchant merchant = merchantRepo.findByUserId(userId).orElseThrow(new BusinessException("商家不存在"));
-            merchant.setBlacklist(true);
-            merchantRepo.save(merchant);
-            build.setOtherId(merchant.getId());
-
-        } else if (Identity.RIDER.equals(user.getIdentity())) {
-            Rider rider = riderRepo.findByUserId(userId).orElseThrow(new BusinessException("骑手不存在"));
-            rider.setBlacklist(true);
-            riderRepo.save(rider);
-            build.setOtherId(rider.getJobNumber());
-
-        } else {
-            user.setBlacklist(true);
-            userRepo.save(user);
-            build.setOtherId(userId);
-        }*/
-
         return blackListRepo.save(build);
 
     }
@@ -113,4 +95,40 @@ public class BlackListService {
         }
     }
 
+    public BlackList move1(Long id, String reason) {
+        //是否已存在黑名单且未移出
+        BlackList blackList = blackListRepo.findByOtherIdAndRemoveFalse(id);
+        if (blackList != null) {
+            throw new BusinessException("已在黑名单");
+        }
+        BlackList build = BlackList.builder()
+                .otherId(id)
+                .reason(reason)
+                .remove(false)
+                .moveTime(LocalDateTime.now())
+                .enabled(true)
+                .build();
+        userRepo.findById(id).ifPresent(u -> {
+            u.setBlacklist(true);
+            userRepo.save(u);
+            build.setUserId(id);
+            build.setIdentity(Identity.USER);
+        });
+
+        merchantRepo.findById(id).ifPresent(u -> {
+            u.setBlacklist(true);
+            merchantRepo.save(u);
+            build.setUserId(u.getUserId());
+            build.setIdentity(Identity.MERCHANT);
+        });
+
+        riderRepo.findById(id).ifPresent(u -> {
+            u.setBlacklist(true);
+            riderRepo.save(u);
+            build.setUserId(u.getUserId());
+            build.setIdentity(Identity.RIDER);
+        });
+        return blackListRepo.save(build);
+    }
+
 }

+ 23 - 0
src/main/java/com/izouma/dingdong/service/backstage/ComplaintService.java

@@ -1,13 +1,36 @@
 package com.izouma.dingdong.service.backstage;
 
+import com.izouma.dingdong.domain.backstage.Complaint;
+import com.izouma.dingdong.domain.rider.Rider;
+import com.izouma.dingdong.enums.ComplaintTarget;
+import com.izouma.dingdong.exception.BusinessException;
+import com.izouma.dingdong.repo.OrderInfoRepo;
 import com.izouma.dingdong.repo.backstage.ComplaintRepo;
+import com.izouma.dingdong.repo.rider.RiderRepo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.stream.Collectors;
+
 @Service
 @AllArgsConstructor
 public class ComplaintService {
 
     private ComplaintRepo complaintRepo;
+    private OrderInfoRepo orderInfoRepo;
+    private RiderRepo     riderRepo;
+
+    public List<Complaint> riderList(Long userId) {
+        Rider rider = riderRepo.findByUserId(userId).orElseThrow(new BusinessException("id错误"));
+        List<Complaint> complaints = complaintRepo.findAllByTarget(ComplaintTarget.RIDER);
+
+        return complaints.stream().filter(c ->
+                orderInfoRepo.findById(c.getOrderId())
+                        .orElseThrow(new BusinessException("无订单"))
+                        .getRiderId()
+                        .equals(rider.getId())
+        ).collect(Collectors.toList());
+    }
 
 }

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

@@ -7,7 +7,6 @@ import com.izouma.dingdong.converter.StringArrayConverter;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.backstage.Email;
 import com.izouma.dingdong.domain.merchant.*;
-import com.izouma.dingdong.domain.user.ShoppingCart;
 import com.izouma.dingdong.dto.AppraisalMerDTO;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.enums.ApplyStatus;

+ 21 - 6
src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java

@@ -24,6 +24,7 @@ import com.izouma.dingdong.repo.backstage.*;
 import com.izouma.dingdong.repo.merchant.*;
 import com.izouma.dingdong.repo.user.UserCouponRepo;
 import com.izouma.dingdong.service.backstage.CategoryService;
+import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -173,23 +174,37 @@ public class MerchantSettingsService {
 
         //优惠专区
         //主推荐位 2个
-        List<Promote> promote1 = promoteRepo.findAllByAction(1);
+        List<Promote> promote1 = promoteRepo.findAllByAction(1)
+                .stream().filter(p ->
+                        //距离小于3000米
+                        MapUtils.distance(p.getMerchant().getLongitude(), p.getMerchant()
+                                .getLatitude(), longitude, latitude) < 3000
+                ).collect(Collectors.toList());
         if (promote1.size() > 2) {
-            promote1.subList(0, 2);
+            promote1 = promote1.subList(0, 2);
         }
         //副推荐位 4个
-        List<Promote> promote2 = promoteRepo.findAllByAction(2);
+        List<Promote> promote2 = promoteRepo.findAllByAction(2)
+                .stream().filter(p ->
+                        //距离小于3000米
+                        MapUtils.distance(p.getMerchant().getLongitude(), p.getMerchant()
+                                .getLatitude(), longitude, latitude) < 3000
+                ).collect(Collectors.toList());
         if (promote2.size() > 4) {
-            promote2.subList(0, 4);
+            promote2 = promote2.subList(0, 4);
         }
 
         //新店推荐 最多8个
         LocalDate date = LocalDate.now().minusMonths(1);
         LocalTime time = LocalTime.parse("00:00:00");
         LocalDateTime dateTime = LocalDateTime.of(date, time);
-        List<Merchant> newMerchants = merchantRepo.findAllByEstablishTimeAfter(dateTime);
+        List<Merchant> newMerchants = merchantRepo.findAllByEstablishTimeAfter(dateTime)
+                .stream().filter(p ->
+                        //距离小于3000米
+                        MapUtils.distance(p.getLongitude(), p.getLatitude(), longitude, latitude) < 3000
+                ).collect(Collectors.toList());
         if (newMerchants.size() > 8) {
-            newMerchants.subList(0, 8);
+            newMerchants = newMerchants.subList(0, 8);
         }
 
 

+ 33 - 11
src/main/java/com/izouma/dingdong/service/rider/RiderService.java

@@ -13,12 +13,12 @@ import com.izouma.dingdong.enums.*;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.MoneyRecordRepo;
 import com.izouma.dingdong.repo.OrderInfoRepo;
-import com.izouma.dingdong.repo.SysConfigRepo;
 import com.izouma.dingdong.repo.UserRepo;
 import com.izouma.dingdong.repo.rider.RiderLocationRepo;
 import com.izouma.dingdong.repo.rider.RiderRepo;
 import com.izouma.dingdong.repo.rider.RiderSignRepo;
 import com.izouma.dingdong.service.OrderRefundApplyService;
+import com.izouma.dingdong.service.SysConfigService;
 import com.izouma.dingdong.utils.MapUtils;
 import lombok.AllArgsConstructor;
 import org.apache.commons.lang3.RandomStringUtils;
@@ -39,8 +39,8 @@ public class RiderService {
     private OrderInfoRepo           orderInfoRepo;
     private OrderRefundApplyService orderRefundApplyService;
     private RiderSignRepo           riderSignRepo;
-    private SysConfigRepo           sysConfigRepo;
     private RiderLocationRepo       riderLocationRepo;
+    private SysConfigService        sysConfigService;
 
 
     /*
@@ -96,8 +96,7 @@ public class RiderService {
     public void sign(Long riderId, String password, Double longitude, Double latitude) {
         Rider rider = riderRepo.findById(riderId).orElseThrow(new BusinessException("无骑手"));
         Double distance = MapUtils.distance(longitude, latitude, rider.getLongitude(), rider.getLatitude());
-        String range = sysConfigRepo.findByName("range").orElseThrow(new BusinessException("无配置")).getValue();
-        if (distance > new Double(range)) {
+        if (distance > sysConfigService.getRange()) {
             throw new BusinessException("不在工作区域");
         }
         User user = userRepo.findById(rider.getUserId()).orElseThrow(new BusinessException("无用户"));
@@ -170,6 +169,13 @@ public class RiderService {
                 throw new BusinessException("已被其他骑手接单");
             }
 
+            //如果是货到付款
+            if (PayMethod.CASH_DELIVERY.equals(orderInfo.getPayMethod())) {
+                if (!this.canCash(riderId)) {
+                    throw new BusinessException("不满足接货到付款订单");
+                }
+            }
+
             List<OrderInfo> infos = orderInfoRepo.findAllByRiderIdAndRiderStatusIsNot(riderId, RiderStatus.CARRY_OUT);
             if (infos.size() >= 5) {
                 throw new BusinessException("未完成订单已达上线");
@@ -199,7 +205,10 @@ public class RiderService {
         locationList.forEach(d -> {
             Merchant merchant = orderInfo.getMerchant();
             Double distance = MapUtils.distance(merchant.getLongitude(), merchant.getLatitude(), d.getLongitude(), d.getLatitude());
-            map.put(d.getRiderId(), distance);
+            //所有附近的骑手的距离
+            if (distance < sysConfigService.getRange()) {
+                map.put(d.getRiderId(), distance);
+            }
         });
 
         //无骑手,取消订单
@@ -215,19 +224,22 @@ public class RiderService {
         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()) {
+//            Rider rider = riderRepo.findById(m.getKey()).orElseThrow(new BusinessException("无骑手"));
+
             List<OrderInfo> infos = orderInfoRepo.findAllByRiderIdAndRiderStatusIsNot(m.getKey(), RiderStatus.CARRY_OUT);
-            //有空闲骑手,自动接单,不可拒单
-            if (CollUtil.isEmpty(infos)) {
-                //riderId = m.getKey();
+            //如果是货到付款
+            boolean t = true;
+            if (PayMethod.CASH_DELIVERY.equals(orderInfo.getPayMethod())) {
+                t = this.canCash(m.getKey());
+            }
+            //有空闲骑手且可以接货到付款,自动接单,不可拒单
+            if (CollUtil.isEmpty(infos) && t) {
                 orderInfo.setRiderId(m.getKey());
                 orderInfo.setRiderStatus(RiderStatus.RECEIVED);
                 orderInfoRepo.save(orderInfo);
                 return;
                 //break;
             }
-            //}
         }
 
         //无空闲骑手,未完成订单最少的接单
@@ -238,6 +250,7 @@ public class RiderService {
         int infos3 = orderInfoRepo.findAllByRiderIdAndRiderStatusIsNot(list.get(2)
                 .getKey(), RiderStatus.CARRY_OUT).size();
         Long riderId = null;
+
         if (infos1 < infos2 && infos1 < infos3) {
             riderId = list.get(0).getKey();
         } else if (infos2 < infos1 && infos2 < infos3) {
@@ -274,5 +287,14 @@ public class RiderService {
 
     }
 
+    /*
+    可不可以接货到付款订单
+     */
+    public Boolean canCash(Long riderId) {
+        Rider rider = riderRepo.findById(riderId).orElseThrow(new BusinessException("无骑手"));
+        BigDecimal account = sysConfigService.getBigDecimal("accountRequirements");
+        return account.compareTo(rider.getUser().getMoney()) <= 0;
+    }
+
 
 }

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

@@ -27,4 +27,5 @@ public class UserCouponService {
             userCouponRepo.save(build);
         });
     }
+
 }

+ 7 - 0
src/main/java/com/izouma/dingdong/web/AppraisalController.java

@@ -3,6 +3,7 @@ package com.izouma.dingdong.web;
 import com.izouma.dingdong.domain.Appraisal;
 import com.izouma.dingdong.dto.AppraisalMerDTO;
 import com.izouma.dingdong.dto.AppraisalRidDTO;
+import com.izouma.dingdong.dto.ShowAppRidDTO;
 import com.izouma.dingdong.enums.AppraisalSort;
 import com.izouma.dingdong.service.AppraisalService;
 import com.izouma.dingdong.dto.PageQuery;
@@ -110,5 +111,11 @@ public class AppraisalController extends BaseController {
         return appraisalService.showRider(riderId);
     }
 
+    @GetMapping("/showAppRid")
+    @ApiOperation("用户端打赏骑手的界面的骑手信息")
+    public ShowAppRidDTO showAppRid(@RequestParam Long riderId) {
+        return appraisalService.showAppRid(riderId);
+    }
+
 }
 

+ 3 - 3
src/main/java/com/izouma/dingdong/web/backstage/BlackListController.java

@@ -24,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 public class BlackListController extends BaseController {
     private BlackListService blackListService;
-    private BlackListRepo blackListRepo;
+    private BlackListRepo    blackListRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -63,8 +63,8 @@ public class BlackListController extends BaseController {
 
     @PostMapping("/move")
     @ApiOperation("移入黑名单")
-    public BlackList move(@RequestParam Long userId, @RequestParam String reason) {
-        return blackListService.move(userId, reason);
+    public BlackList move(@RequestParam Long id, @RequestParam String reason) {
+        return blackListService.move1(id, reason);
     }
 
     @GetMapping("/remove")

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

@@ -5,6 +5,7 @@ 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.utils.SecurityUtils;
 import com.izouma.dingdong.web.BaseController;
 import com.izouma.dingdong.domain.backstage.Complaint;
 import com.izouma.dingdong.service.backstage.ComplaintService;
@@ -14,6 +15,7 @@ import com.izouma.dingdong.repo.backstage.ComplaintRepo;
 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.web.bind.annotation.*;
@@ -27,10 +29,10 @@ import java.util.List;
 @RequestMapping("/complaint")
 @AllArgsConstructor
 public class ComplaintController extends BaseController {
-    private ComplaintService complaintService;
-    private ComplaintRepo complaintRepo;
+    private ComplaintService        complaintService;
+    private ComplaintRepo           complaintRepo;
     private OrderRefundApplyService orderRefundApplyService;
-    private UserCouponService userCouponService;
+    private UserCouponService       userCouponService;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -67,10 +69,11 @@ public class ComplaintController extends BaseController {
         ExcelUtils.export(response, data);
     }
 
+    @ApiOperation("退款处理")
     @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,null);
+        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);
@@ -78,6 +81,7 @@ public class ComplaintController extends BaseController {
         complaintRepo.save(complaint);
     }
 
+    @ApiOperation("发放优惠券")
     @GetMapping("/issue")
     public void issue(Long id, Long userId, String couponId) {
         Complaint complaint = complaintRepo.findById(id).orElseThrow(new BusinessException("无记录"));
@@ -86,5 +90,13 @@ public class ComplaintController extends BaseController {
         complaint.setResolve(true);
         complaintRepo.save(complaint);
     }
+
+    @GetMapping("/my")
+    @ApiOperation("骑手端我的投诉")
+    public List<Complaint> my() {
+        Long id = SecurityUtils.getAuthenticatedUser().getId();
+        return complaintService.riderList(id);
+    }
+
 }
 

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

@@ -12,7 +12,6 @@ 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;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;

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

@@ -12,7 +12,6 @@ import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
-import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.excel.ExcelUtils;
 
 import io.swagger.annotations.ApiOperation;

+ 1 - 1
src/main/vue/src/components/BlackButton.vue

@@ -27,7 +27,7 @@
                             })
                                 .then(() => {
                                     return this.$http.post('/blackList/move', {
-                                        userId: this.$route.query.id,
+                                        id: this.$route.query.id,
                                         reason: res.value
                                     });
                                 })

+ 1 - 0
src/main/vue/src/views/merchant/MerchantEdit.vue

@@ -130,6 +130,7 @@
 
 
             <el-form-item>
+                <black-button></black-button>
                 <el-button @click="onSave" :loading="saving"
                            type="primary">保存
                 </el-button>

+ 0 - 31
src/main/vue/src/views/merchant/MerchantList.vue

@@ -211,9 +211,6 @@
                               :preview-src-list="[verified.handheldIdNo]"/>
                 </div>
                 <!--                <div class="info-item">申请状态:{{formData.status}}</div>-->
-                <el-button @click="moveRow"
-                           type="danger" v-if="formData.mid && !formData.blacklist">移入黑名单
-                </el-button>
                 <el-button @click="editRow(formData)" type="primary" size="mini" plain>编辑</el-button>
                 <el-button @click="deleteRow(formData)" type="danger" size="mini" plain>删除</el-button>
             </div>
@@ -502,34 +499,6 @@
                         this.$message.error(e.error);
                     });*/
             },
-            moveRow() {
-                this.$prompt('请输入理由', '提示', {
-                    inputType: 'textarea'
-                })
-                    .then(res => {
-                        // console.log(res);
-                        if (res.value) {
-                            this.$alert('确定拉入黑名单?', '提示', {
-                                showCancelButton: true
-                            })
-                                .then(() => {
-                                    return this.$http.post('/blackList/move', {
-                                        userId: this.formData.userId,
-                                        reason: res.value
-                                    });
-                                })
-                                .then(res => {
-                                    this.$message.success('拉入黑名单成功');
-                                    this.$router.go(-1);
-                                })
-                                .catch(() => {
-                                    this.$message.error(res.error || '拉入黑名单失败');
-                                });
-                        }
-                    })
-                    .catch(() => {
-                    });
-            },
         }
     }
 </script>

+ 4 - 37
src/main/vue/src/views/user/UserEdit.vue

@@ -6,10 +6,10 @@
                 <crop-upload v-model="formData.avatar"></crop-upload>
             </el-form-item>
             <el-form-item prop="username" label="用户名">
-                <el-input v-model="formData.username"></el-input>
+                <el-input v-model="formData.username" readonly></el-input>
             </el-form-item>
             <el-form-item prop="nickname" label="昵称">
-                <el-input v-model="formData.nickname"></el-input>
+                <el-input v-model="formData.nickname" readonly></el-input>
             </el-form-item>
             <!-- <el-form-item v-if="formData.id" label="密码">
                  <el-button type="primary" plain @click="resetPassword">重置
@@ -19,7 +19,7 @@
                     <el-input v-model="formData.password"></el-input>
                 </el-form-item>-->
             <el-form-item prop="phone" label="手机">
-                <el-input v-model="formData.phone"></el-input>
+                <el-input v-model="formData.phone" readonly></el-input>
             </el-form-item>
             <!--            <el-form-item prop="authorities" label="角色">
                             <el-select v-model="formData.authorities" multiple
@@ -36,12 +36,7 @@
                 <!--             <el-button @click="del" :loading="$store.state.fetchingData"
                                       type="danger" v-if="formData.id">删除
                            </el-button>-->
-                <el-button @click="moveRow"
-                           type="danger" v-if="formData.id && !formData.blacklist">移入黑名单
-                </el-button>
-<!--                <el-button @click=""
-                           type="danger" v-if="formData.id && formData.blacklist">移出黑名单
-                </el-button>-->
+                <black-button></black-button>
                 <el-button @click="showCoupon" :loading="$store.state.fetchingData"
                            type="primary" v-if="formData.id">发送优惠券
                 </el-button>
@@ -206,34 +201,6 @@
                     .catch(() => {
                     });
             },
-            moveRow() {
-                this.$prompt('请输入理由', '提示', {
-                    inputType: 'textarea'
-                })
-                    .then(res => {
-                        // console.log(res);
-                        if (res.value) {
-                            this.$alert('确定拉入黑名单?', '提示', {
-                                showCancelButton: true
-                            })
-                                .then(() => {
-                                    return this.$http.post('/blackList/move', {
-                                        userId: this.formData.id,
-                                        reason: res.value
-                                    });
-                                })
-                                .then(res => {
-                                    this.$message.success('拉入黑名单成功');
-                                    this.$router.go(-1);
-                                })
-                                .catch(() => {
-                                    this.$message.error(res.error || '拉入黑名单失败');
-                                });
-                        }
-                    })
-                    .catch(() => {
-                    });
-            },
             resetPassword() {
                 this.$prompt('请输入新密码', '重置密码', {inputType: 'password'})
                     .then(res => {

+ 5 - 0
src/test/java/com/izouma/dingdong/service/AppraisalServiceTest.java

@@ -53,4 +53,9 @@ public class AppraisalServiceTest {
     public void testShow(){
         System.out.println(appraisalService.appraisalsSort(1252L, AppraisalSort.HAVE_PIC));
     }
+
+    @Test
+    public void testRiderShow(){
+        System.out.println(appraisalService.showAppRid(2006L));
+    }
 }