licailing 5 роки тому
батько
коміт
755f0f651e

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

@@ -3,10 +3,14 @@ package com.izouma.dingdong.repo.backstage;
 import com.izouma.dingdong.domain.backstage.Category;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+import java.util.Collection;
 import java.util.List;
 
 public interface CategoryRepo extends JpaRepository<Category, Long>, JpaSpecificationExecutor<Category> {
 
     List<Category> findAllByParent(Long parentId);
 
+    List<Category> findAllByParentIn(List<Long> parent);
+
 }

+ 22 - 1
src/main/java/com/izouma/dingdong/service/backstage/CategoryService.java

@@ -15,7 +15,9 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -85,5 +87,24 @@ public class CategoryService {
         return dtos;
     }
 
-
+    /*
+    找出分类下的所有子分类id
+     */
+    public List<Long> getChildren(Long id) {
+        List<Category> list = categoryRepo.findAllByParent(id);
+        List<Long> collect = null;
+        while (list.size() != 0) {
+            collect = list
+                    .stream()
+                    .map(Category::getId)
+                    .collect(Collectors.toList());
+            System.out.println(collect);
+            list = categoryRepo.findAllByParentIn(collect);
+        }
+        if (ObjectUtil.isNull(collect)) {
+            Category category = categoryRepo.findById(id).orElseThrow(new BusinessException("无分类"));
+            return Collections.singletonList(id);
+        }
+        return collect;
+    }
 }

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

@@ -451,16 +451,24 @@ public class MerchantSettingsService {
      */
     public List<MerchantDTO> recommended(Double longitude, Double latitude, Integer sort, String filter, String tag,
                                          String natureId, BigDecimal startAmount,
-                                         BigDecimal endAmount, Long userId) {
+                                         BigDecimal endAmount, Long categoryId, Long userId) {
         List<MerchantDTO> dtoList;
         dtoList = this.listSort(longitude, latitude, sort);
         if (filter != null) {
             dtoList = this.listFilter(dtoList, filter, userId);
         }
+        if (categoryId != null) {
+            List<Long> children = categoryService.getChildren(categoryId);
+            dtoList = dtoList.stream()
+                    .filter(d -> !Collections.disjoint(children, d.getCategory()
+                            .stream()
+                            .map(Category::getId)
+                            .collect(Collectors.toList())))
+                    .collect(Collectors.toList());
+        }
         return this.otherFilter(dtoList, tag, natureId, startAmount, endAmount);
     }
 
-
     public List<MerchantDTO> showAll(PageQuery pageQuery, Double longitude, Double latitude, Long popularTag, Long userId) {
         //匹配商家名称
         List<Merchant> merchantList = merchantRepo.findAll((root, criteriaQuery, criteriaBuilder) -> {

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

@@ -104,10 +104,10 @@ public class MerchantSettingsController extends BaseController {
     @ApiOperation("推荐商家下的商户列表")
     public List<MerchantDTO> showAll(Double longitude, Double latitude, Integer sort, String filter, String tag,
                                      String natureId, BigDecimal startAmount,
-                                     BigDecimal endAmount) {
+                                     BigDecimal endAmount,Long categoryId) {
         Long id = SecurityUtils.getAuthenticatedUser().getId();
         return merchantSettingsService.recommended(longitude, latitude, sort, filter, tag, natureId, startAmount,
-                endAmount, id);
+                endAmount,categoryId, id);
     }
 }
 

+ 2 - 2
src/main/resources/application.yaml

@@ -102,6 +102,6 @@ spring:
 
 ---
 IMConfig:
-  sdkAppId: 1400375593
-  secretKey: 7fe225c3b41cf2e7f0c79ebaf0e3b7ec60f6c7188e1561dcfddacb4767654417
+  sdkAppId: 1400421982
+  secretKey: 81b983f145a2b36f3547821bd1724f3bb1d465197faef69c72e8e99231edb470
 

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

@@ -1,12 +1,16 @@
 package com.izouma.dingdong.service;
 
+import com.izouma.dingdong.domain.backstage.Category;
+import com.izouma.dingdong.domain.merchant.Merchant;
 import com.izouma.dingdong.domain.merchant.MerchantComplaint;
 import com.izouma.dingdong.domain.merchant.MerchantSettings;
 import com.izouma.dingdong.dto.MerchantDTO;
 import com.izouma.dingdong.dto.PageQuery;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.merchant.MerchantComplaintRepo;
+import com.izouma.dingdong.repo.merchant.MerchantRepo;
 import com.izouma.dingdong.repo.merchant.MerchantSettingsRepo;
+import com.izouma.dingdong.service.backstage.CategoryService;
 import com.izouma.dingdong.service.merchant.MerchantComplaintService;
 import com.izouma.dingdong.service.merchant.MerchantService;
 import com.izouma.dingdong.service.merchant.MerchantSettingsService;
@@ -24,9 +28,9 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.time.LocalDateTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.LongStream;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
@@ -44,6 +48,10 @@ public class MerchantServiceTest {
     private MerchantComplaintService merchantComplaintService;
     @Autowired
     private MerchantComplaintRepo    merchantComplaintRepo;
+    @Autowired
+    private MerchantRepo             merchantRepo;
+    @Autowired
+    private CategoryService          categoryService;
 
     @Test
     public void testChange() {
@@ -178,7 +186,7 @@ public class MerchantServiceTest {
 
     @Test
     public void test5() {
-        System.out.println(merchantSettingsService.recommended(1.0, 1.0, null, null, null, null, null, null, 82L)
+        System.out.println(merchantSettingsService.recommended(118.757081, 31.993602, null, null, null, null, null, null, 0L, 82L)
                 .size());
     }
 
@@ -202,4 +210,16 @@ public class MerchantServiceTest {
         long endTime = System.currentTimeMillis(); //获取结束时间
         System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间
     }
+
+    @Test
+    public void test9() {
+        MerchantSettings settings = merchantSettingsRepo.findById(389L).orElseThrow(new BusinessException("无"));
+        Merchant merchant = merchantRepo.findById(settings.getMerchantId()).orElseThrow(new BusinessException("无"));
+        MerchantDTO dto = new MerchantDTO(merchant, settings);
+        List<Long> children = categoryService.getChildren(50L);
+        System.out.println(children);
+        Set<Long> collect = dto.getCategory().stream().map(Category::getId).collect(Collectors.toSet());
+        System.out.println(Collections.disjoint(collect,children));
+        System.out.println(dto.getCategory());
+    }
 }