Przeglądaj źródła

评价显示排序

licailing 5 lat temu
rodzic
commit
7949883d51

+ 4 - 1
src/main/java/com/izouma/dingdong/service/AppraisalService.java

@@ -22,6 +22,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import javax.transaction.Transactional;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
@@ -53,6 +54,8 @@ public class AppraisalService {
             appraisal.setMerchantId(order.getMerchantId());
             appraisal.setRiderId(order.getRiderId());
             appraisal.setLikes(0);
+            appraisal.setAppraiseTime(LocalDateTime.now());
+            appraisal.setEnabled(true);
 
             appraisal = appraisalRepo.save(appraisal);
             //更新销量数据
@@ -119,7 +122,7 @@ public class AppraisalService {
     public List<Appraisal> appraisalsSort(Long merchantId, AppraisalSort appraisalSort) {
         List<Appraisal> appraisals = appraisalRepo.findAllByMerchantId(merchantId);
         //默认时间排序
-        appraisals.sort(Comparator.comparing(Appraisal::getAppraiseTime));
+        appraisals.sort((a, b) -> b.getAppraiseTime().compareTo(a.getAppraiseTime()));
 
         List<Appraisal> good = appraisals.stream().filter(Appraisal::getGoodsLike).collect(Collectors.toList());
         List<Appraisal> bad = appraisals.stream().filter(a -> !a.getGoodsLike()).collect(Collectors.toList());

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

@@ -160,7 +160,7 @@ public class OrderInfoService {
                     goods.setTotalSales(goods.getTotalSales() + s.getNum());
                     goodsRepo.save(goods);
 
-                    //s.setOrderInfoId(save.getId());
+                    s.setOrderInfoId(save.getId());
                     orderGoodsSpecRepo.save(s);
                 }
         );

+ 25 - 11
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -9,6 +9,7 @@ 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.Goods;
 import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
@@ -21,19 +22,20 @@ 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;
-import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
+import com.izouma.dingdong.repo.merchant.*;
 import com.izouma.dingdong.repo.user.UserCouponRepo;
 import com.izouma.dingdong.utils.MapUtils;
 import com.izouma.dingdong.utils.ObjUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
 import org.springframework.data.jpa.domain.Specification;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Service;
 
+import javax.persistence.criteria.Predicate;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -57,6 +59,8 @@ public class MerchantService {
     private UserCouponRepo userCouponRepo;
     private CategoryRepo categoryRepo;
 
+    private GoodsRepo goodsRepo;
+
     /*
     商户注册申请
      */
@@ -256,16 +260,23 @@ public class MerchantService {
      * @param latitude   纬度
      * @param popularTag 热门标签
      * @param userId     用户Id
-     * @return
+     * @return 用户附近的上级列表
      */
     public List<MerchantDTO> showAll(PageQuery pageQuery, Double longitude, Double latitude, String popularTag, Long userId) {
 
-        //Specification<Merchant> specification = toSpecification(pageQuery, Merchant.class);
+//        Specification<Merchant> specification = toSpecification(pageQuery, Merchant.class);
 
+        List<Merchant> merchantList = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class));
 
-        List<Merchant> merchants = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class));
+        List<Goods> goods = goodsRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> criteriaQuery.where(
+                criteriaBuilder.like(root.get("name"), "%" + pageQuery.getSearch() + "%")).getRestriction()
+        ));
+        Set<Merchant> merchants = new HashSet<>(merchantList);
+        goods.forEach(g -> {
+            merchants.add(merchantRepo.findById(g.getMerchantId()).orElse(null));
+        });
 
-        //所有商家要按距离排序规则
+/*        //所有商家要按距离排序规则
         Map<Merchant, Double> map = new HashMap<>();
         //算距离
         for (Merchant m : merchants) {
@@ -281,7 +292,10 @@ public class MerchantService {
         List<Merchant> mers = new ArrayList<>();
         for (Map.Entry<Merchant, Double> m : list) {
             mers.add(m.getKey());
-        }
+        }*/
+
+        //排序
+        List<Merchant> mers = this.distanceSorting(merchants, longitude, latitude);
 
         if (popularTag == null) {
             popularTag = pageQuery.getSearch();
@@ -373,8 +387,8 @@ public class MerchantService {
     /*
     距离排序
      */
-    public List<Merchant> distanceSorting(Double longitude, Double latitude) {
-        List<Merchant> merchants = merchantRepo.findAll();
+    public List<Merchant> distanceSorting(Set<Merchant> merchants, Double longitude, Double latitude) {
+        //List<Merchant> merchants = merchantRepo.findAll();
 
         //所有商家要按距离排序规则
         Map<Merchant, Double> map = new HashMap<>();

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

@@ -106,6 +106,7 @@ public class MerchantSettingsService {
                         .amount(amount)
                         .userId(userMer.getId())
                         .fromUserId(fromUserId)
+                        .enabled(true)
                         .build()
         );
     }

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

@@ -1,13 +1,10 @@
 package com.izouma.dingdong.service.merchant;
 
-import com.izouma.dingdong.config.Constants;
 import com.izouma.dingdong.domain.Appraisal;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderInfo;
-import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.Sales;
-import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;

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

@@ -33,8 +33,8 @@ public class RiderService {
     骑手收入,且保存到记录表
      */
     public void income(Long riderId, Long fromUserId, BigDecimal amount, FinancialType type) {
-        //骑手应得
-        User riderUser = userRepo.findById(riderRepo.findUserIdById(riderId)).orElseThrow(new BusinessException("无用户"));
+        //骑手应得  riderRepo.findUserIdById(riderId)
+        User riderUser = userRepo.findById(riderId).orElseThrow(new BusinessException("无用户"));
         riderUser.setMoney(riderUser.getMoney().add(amount));
         userRepo.save(riderUser);
 
@@ -49,6 +49,7 @@ public class RiderService {
                 .fromUserId(fromUserId)
                 .userId(riderUser.getId())
                 .time(LocalDateTime.now())
+                .enabled(true)
                 .build());
 
     }

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

@@ -87,9 +87,9 @@ public class AppraisalController extends BaseController {
      */
     @GetMapping("/my")
     @ApiOperation("显示商户的所有评价")
-    public List<AppraisalMerDTO> my(@RequestParam AppraisalSort appraisalSort) {
+    public List<AppraisalMerDTO> my(@RequestParam Long merchantId,@RequestParam AppraisalSort appraisalSort) {
         //List<Appraisal> allByMerchantId = appraisalRepo.findAllByMerchantId(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId()));
-        List<Appraisal> appraisals = appraisalService.appraisalsSort(merchantService.findMerchantId(SecurityUtils.getAuthenticatedUser().getId()), appraisalSort);
+        List<Appraisal> appraisals = appraisalService.appraisalsSort(merchantId, appraisalSort);
         return appraisals.stream().map(appraisalService::toDTO).collect(Collectors.toList());
 
     }

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

@@ -89,7 +89,6 @@ public class GoodsSpecificationController extends BaseController {
     @ApiOperation("批量保存规格")
     public List<GoodsSpecification> saveAll(String spec) {
         List<GoodsSpecification> specifications = JSONObject.parseArray(spec, GoodsSpecification.class);
-
         return goodsSpecificationService.saveAll(specifications);
     }
 }

+ 16 - 1
src/test/java/com/izouma/dingdong/contorller/OrderInfoControllerTest.java

@@ -4,6 +4,8 @@ import com.izouma.dingdong.domain.backstage.Category;
 import com.izouma.dingdong.domain.backstage.MerchantNature;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.dto.MerchantDTO;
+import com.izouma.dingdong.dto.UserOrderDTO;
+import com.izouma.dingdong.enums.PayMethod;
 import com.izouma.dingdong.repo.backstage.MerchantNatureRepo;
 import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.service.OrderInfoService;
@@ -104,11 +106,24 @@ public class OrderInfoControllerTest {
 
     @Test
     public void testMy(){
-        System.out.println(orderInfoService.my(162L));
+        System.out.println(orderInfoService.my(83L));
     }
 
     @Test
     public void testBuy(){
+        UserOrderDTO dto = UserOrderDTO.builder()
+                .addressId(135L)
+                .payMethod(PayMethod.ALI_PAY)
+                .shoppingCartId(1511L)
+                .remark("多加点!")
+                .userCouponId(217L)
+                .build();
+
+        System.out.println(orderInfoService.userOrder(dto));
+    }
 
+    @Test
+    public void testMer(){
+        orderInfoService.merReceiveOrder(1352L,true);
     }
 }

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

@@ -1,6 +1,7 @@
 package com.izouma.dingdong.service;
 
 import com.izouma.dingdong.domain.Appraisal;
+import com.izouma.dingdong.enums.AppraisalSort;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.web.AppraisalController;
 import org.junit.Test;
@@ -27,11 +28,11 @@ public class AppraisalServiceTest {
 
 //        System.out.println(shoppingCartRepo.findById(322L).orElse(null));
         Appraisal appraisal = Appraisal.builder()
-                .goodsLike(true)
-                .orderInfoId(386L)
-                .goodsAppraise("东西很好,棒!!!")
-                .riderLike(5)
-                .riderAppraise("外卖员送的很快")
+                .goodsLike(false)
+                .orderInfoId(1352L)
+                .goodsAppraise("商品不好,很差")
+                .riderLike(1)
+                .riderAppraise("外卖送货慢!")
                 .build();
         System.out.println(appraisalService.userAppraisal(appraisal));
     }
@@ -46,4 +47,9 @@ public class AppraisalServiceTest {
     public void testReply() {
         appraisalController.merchantApply(418L,"谢谢@!!!");
     }
+
+    @Test
+    public void testShow(){
+        System.out.println(appraisalService.appraisalsSort(1252L, AppraisalSort.HAVE_PIC));
+    }
 }

+ 63 - 8
src/test/java/com/izouma/dingdong/service/GoodsServiceTest.java

@@ -1,5 +1,7 @@
 package com.izouma.dingdong.service;
 
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.GoodsSpecification;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
@@ -9,6 +11,7 @@ import com.izouma.dingdong.repo.merchant.GoodsRepo;
 import com.izouma.dingdong.repo.merchant.GoodsSpecificationRepo;
 import com.izouma.dingdong.service.merchant.GoodsService;
 import com.izouma.dingdong.service.merchant.GoodsSpecificationService;
+import com.izouma.dingdong.utils.ObjUtils;
 import com.izouma.dingdong.utils.SecurityUtils;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,27 +42,27 @@ public class GoodsServiceTest {
     private GoodsSpecificationService goodsSpecificationService;
 
     @Test
-    public void testApp(){
+    public void testApp() {
         System.out.println(appraisalService.goodsAppraisals(214L));
     }
 
     @Test
-    public void showGoods(){
+    public void showGoods() {
         HashMap<String, Object> map = new HashMap<>();
         Goods goods = goodsRepo.findById(214L).orElseThrow(new BusinessException("无记录"));
-        map.put("goods",goods);
+        map.put("goods", goods);
 
         List<AppraisalMerDTO> appraisals = appraisalService.goodsAppraisals(214L);
-        map.put("appraisal",appraisals);
+        map.put("appraisal", appraisals);
 
         List<GoodsSpecification> specifications = goodsSpecificationRepo.findAllByGoodsId(214L);
-        map.put("specification",specifications);
+        map.put("specification", specifications);
 
         System.out.println(map);
     }
 
     @Test
-    public void goodsSpec(){
+    public void goodsSpec() {
         GoodsSpecification spec1 = GoodsSpecification.builder()
                 .multiple(false)
                 .name("甜度")
@@ -87,7 +90,7 @@ public class GoodsServiceTest {
                 .goodsId(121L)
                 .build();
         spec4.setId(-4L);*/
-       GoodsSpecification spec5 = GoodsSpecification.builder()
+        GoodsSpecification spec5 = GoodsSpecification.builder()
                 .amount(BigDecimal.ONE)
                 .name("半糖")
                 .goodsId(1258L)
@@ -110,7 +113,6 @@ public class GoodsServiceTest {
         spec7.setId(-7L);*/
 
 
-
         List<GoodsSpecification> specifications = new ArrayList<>(3);
         specifications.add(spec1);
         specifications.add(spec2);
@@ -121,4 +123,57 @@ public class GoodsServiceTest {
 //        specifications.add(spec7);
         goodsSpecificationService.saveAll(specifications);
     }
+
+    @Test
+    public void t() {
+        List<GoodsSpecification> spec = new ArrayList<>();
+        GoodsSpecification spec5 = GoodsSpecification.builder()
+                .amount(BigDecimal.ZERO)
+                .name("少糖")
+                .goodsId(1258L)
+                .build();
+        //spec5.setId(1513L);
+        spec.add(spec5);
+        GoodsSpecification spec6 = GoodsSpecification.builder()
+                // .amount(BigDecimal.ZERO)
+                .name("糖量")
+                //.goodsId(1258L)
+                //.multiple(false)
+                // .parent(-4L)
+                .children(spec)
+                .build();
+        spec6.setId(1512L);
+
+        List<GoodsSpecification> spec1 = new ArrayList<>();
+        spec1.add(spec6);
+        String str = JSONObject.toJSONString(spec1);
+        System.out.println(str);
+        List<GoodsSpecification> specifications = JSONObject.parseArray(str, GoodsSpecification.class);
+        System.out.println(specifications);
+
+        specifications.forEach(s -> {
+            GoodsSpecification save;
+            if (s.getId() != null) {
+                GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId()).orElseThrow(new BusinessException("无记录"));
+                ObjUtils.merge(specification, s);
+                save = goodsSpecificationRepo.save(specification);
+            } else {
+                save = goodsSpecificationRepo.save(s);
+            }
+
+            if (CollUtil.isNotEmpty(s.getChildren())) {
+                s.getChildren().forEach(c -> {
+                    c.setParent(save.getId());
+                    if (c.getId() != null) {
+                        GoodsSpecification specification = goodsSpecificationRepo.findById(s.getId()).orElseThrow(new BusinessException("无记录"));
+                        ObjUtils.merge(specification, s);
+                        goodsSpecificationRepo.save(specification);
+                    } else {
+                        goodsSpecificationRepo.save(c);
+                    }
+                });
+            }
+        });
+
+    }
 }

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

@@ -108,9 +108,9 @@ public class MerchantServiceTest {
         PageQuery pageQuery = new PageQuery();
         pageQuery.setPage(0);
         pageQuery.setSize(50);
-        //pageQuery.setSearch("走马");
+        pageQuery.setSearch("走马");
         pageQuery.setSort("");
-        System.out.println(merchantService.showAll(pageQuery, 118.738275, 31.991961, "折扣商家", 82L).size());
+        System.out.println(merchantService.showAll(pageQuery, 118.738275, 31.991961, null, 82L).size());
     }
 
 /*    @Test