Browse Source

收藏夹支持用户标签

guozhaoshun 6 years ago
parent
commit
2bac5e7c74

+ 13 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/controller/CollectionController.java

@@ -2,11 +2,13 @@ package cn.rankin.apiweb.controller;
 
 import cn.rankin.apiweb.assist.resolver.NeedUser;
 import cn.rankin.apiweb.service.collection.CollectionService;
+import cn.rankin.apiweb.service.user.UserService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.app.vo.DeviceUserVo;
 import cn.rankin.data.api.app.vo.ItemVo;
 import cn.rankin.data.api.user.dto.CollectionDTO;
+import cn.rankin.data.api.user.entity.UserTag;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +20,9 @@ public class CollectionController {
     @Autowired
     private CollectionService collectionService;
 
+    @Autowired
+    private UserService userService;
+
     @RequestMapping(method = RequestMethod.POST)
     public APIResult<Boolean> put(@NeedUser DeviceUserVo user, @RequestBody CollectionDTO collectionDTO) {
         return collectionService.put(user.getUid(), user.getMerchantId(), collectionDTO.getPid());
@@ -37,6 +42,14 @@ public class CollectionController {
         if (StringUtils.isEmpty(tagId)) {
             return collectionService.getUserCollection(userId, merchantId, pageNo, pageSize);
         }else {
+            //tagId   可能为渠道标签ID,也可能为用户标签ID,先做判断再去获取数据
+            UserTag userTag = userService.findUserTagById(tagId);
+            if(null != userTag){
+                //用户标签,
+                return collectionService.getUserConllectionByUserTag(userId, merchantId, tagId, pageNo, pageSize);
+            }
+
+            //渠道标签
             return collectionService.getUserCollection(userId, merchantId, tagId, pageNo, pageSize);
         }
     }

+ 51 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/collection/CollectionService.java

@@ -1,7 +1,9 @@
 package cn.rankin.apiweb.service.collection;
 
 import cn.rankin.apiweb.code.ApiWebCode;
+import cn.rankin.apiweb.service.product.ProductClient;
 import cn.rankin.apiweb.service.product.ProductService;
+import cn.rankin.apiweb.service.user.UserService;
 import cn.rankin.common.utils.api.model.APIResult;
 import cn.rankin.common.utils.api.model.BaseCode;
 import cn.rankin.common.utils.api.page.Page;
@@ -11,6 +13,7 @@ import cn.rankin.data.api.app.vo.ItemVo;
 import cn.rankin.data.api.product.entity.MerchantProduct;
 import cn.rankin.data.api.user.dto.CollectionDTO;
 import cn.rankin.data.api.user.entity.Collection;
+import cn.rankin.data.api.user.entity.UserTagProductRelation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,8 +33,14 @@ public class CollectionService {
     private CollectionClient collectionClient;
 
     @Autowired
+    private ProductClient productClient;
+
+    @Autowired
     private ProductService productService;
 
+    @Autowired
+    private UserService userService;
+
     public Boolean isCollected(String userId, String productId) {
         APIResult<Collection> apiResult = collectionClient.getCollection(userId, productId);
         if (apiResult.getSuccess() && apiResult.getData() != null) {
@@ -115,4 +124,46 @@ public class CollectionService {
         return productService.findItemPageByIds(itemSearchDTO);
     }
 
+    public APIResult<Page<ItemVo>> getUserConllectionByUserTag(String userId, String merchantId, String userTagId,
+                                                               Integer pageNo, Integer pageSize) {
+        APIResult<List<Collection>> collectionApiResult = collectionClient.getUserCollections(userId, MAX_SIZE);
+        if (!collectionApiResult.getSuccess()) {
+            return APIResult.error(new BaseCode(collectionApiResult.getCode(), collectionApiResult.getMessage()));
+        }
+        List<Collection> collectionList = collectionApiResult.getData();
+        if (CollectionUtils.isEmpty(collectionList)) {
+            return APIResult.ok(new ArrayList<>());
+        }
+        List<String> productIdList = new ArrayList<>();
+        for (Collection collection : collectionList) {
+            String productId = collection.getPid();
+            productIdList.add(productId);
+        }
+
+        Page<UserTagProductRelation> resultPage = userService.findRelations(userTagId, productIdList, pageNo, pageSize);
+
+        if(resultPage == null){
+            return APIResult.ok(new ArrayList());
+        }
+
+        List<ItemVo> itemVos = new ArrayList<>();
+        List<UserTagProductRelation> userTagProductRelations = resultPage.getList();
+        userTagProductRelations.forEach(userTagProductRelation -> {
+            String pid = userTagProductRelation.getPid();
+            ItemVo itemVo = productClient.findItemByPid(merchantId, pid);
+            if(itemVo == null){
+                log.info("not found item by pid , pid={}",pid);
+            }else{
+                itemVos.add(itemVo);
+            }
+        });
+
+        Page<ItemVo> page = new Page<>();
+        page.setPageSize(pageSize);
+        page.setPageNo(pageNo);
+        page.setTotalSize((int)resultPage.getTotalSize());
+        page.setList(itemVos);
+
+        return APIResult.ok(page);
+    }
 }

+ 8 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/product/ProductClient.java

@@ -89,6 +89,9 @@ public interface ProductClient {
     @RequestMapping(value = "/item/pid", method = RequestMethod.POST)
     ItemVo findItemByPid(@RequestParam("merchantId") String merchantId, @RequestParam("pid") String pid);
 
+    @RequestMapping(value = "/app/tag/{tagId}", method = RequestMethod.GET)
+    Tag findTagById(@PathVariable("tagId") String tagId);
+
 
     @Component
     class ProductClientHystrix implements ProductClient {
@@ -197,5 +200,10 @@ public interface ProductClient {
             return null;
         }
 
+        @Override
+        public Tag findTagById(String tagId) {
+            return null;
+        }
+
     }
 }

+ 21 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserClient.java

@@ -54,6 +54,14 @@ public interface UserClient {
                                                      @RequestParam("pageNo") Integer pageNo,
                                                      @RequestParam("pageSize") Integer pageSize);
 
+    @RequestMapping(value = "/userTag/{tagId}", method = RequestMethod.GET)
+    UserTag findUserTagById(@PathVariable("tagId")  String tagId);
+
+    @RequestMapping(value = "/userTagProductRelation/page/pids", method = RequestMethod.POST)
+    Page<UserTagProductRelation> findRelations(@RequestParam("userTagId") String userTagId,
+                                               @RequestBody List<String> productIdList,
+                                               @RequestParam("pageNo")  Integer pageNo,
+                                               @RequestParam("pageSize")  Integer pageSize);
 
     @Component
     class UserServiceHystrix implements UserClient {
@@ -113,6 +121,19 @@ public interface UserClient {
             return null;
         }
 
+        @Override
+        public UserTag findUserTagById(String tagId) {
+            return null;
+        }
+
+        @Override
+        public Page<UserTagProductRelation> findRelations(String userTagId,
+                                                          List<String> productIdList,
+                                                          Integer pageNo,
+                                                          Integer pageSize) {
+            return null;
+        }
+
 
     }
 }

+ 15 - 5
rankin-api-web/src/main/java/cn/rankin/apiweb/service/user/UserService.java

@@ -143,7 +143,7 @@ public class UserService {
         APIResult<TerminalDeviceVo> apiResult = userClient.deviceBind(deviceDTO);
         if (!apiResult.getSuccess()) {
             log.error("bind user api error");
-            throw new RuntimeException(apiResult.getMessage());
+            return null;
         }
         return apiResult.getData();
     }
@@ -189,7 +189,7 @@ public class UserService {
         List<TerminalDeviceVo> deviceVoList = userClient.findByDeviceCode(deviceCode);
         if (CollectionUtils.isEmpty(deviceVoList)) {
             log.error("device code not bind any eid! deviceCode={}", deviceCode);
-            return APIResult.error(ApiWebCode.NOT_EXISTS);
+            return APIResult.error(ApiWebCode.INVALID_TOKEN);
         }
 
         TerminalDeviceVo deviceVo = null;
@@ -199,8 +199,12 @@ public class UserService {
             if(StringUtils.isBlank(dv.getMerchant())){
                 //如果设备渠道code为空,则设置为当前渠道code
                 dv.setMerchant(merchant);
-                //更新数据库
-                updateDeviceBind(dv);
+                try{
+                    //更新数据库
+                    updateDeviceBind(dv);
+                }catch(Exception e){
+                    return APIResult.error(ApiWebCode.DEVICE_BOUND_ERROR);
+                }
                 deviceVo = dv;
             }else if(StringUtils.isNotBlank(merchant) && merchant.equals(dv.getMerchant())) {
                 deviceVo = dv;
@@ -219,7 +223,7 @@ public class UserService {
             APIResult<TerminalUserVo> userAPIResult = userClient.findUserById(uid);
             if (!userAPIResult.getSuccess()) {
                 log.error("load user api error, {}", userAPIResult.getMessage());
-                return APIResult.error(ApiWebCode.NOT_EXISTS);
+                return APIResult.error(ApiWebCode.INVALID_TOKEN);
             }
             TerminalUserVo userVo = userAPIResult.getData();
             deviceUserVo = toDeviceUserVo(userVo, deviceVo);
@@ -344,5 +348,11 @@ public class UserService {
     }
 
 
+    public UserTag findUserTagById(String tagId) {
+        return userClient.findUserTagById(tagId);
+    }
 
+    public Page<UserTagProductRelation> findRelations(String userTagId, List<String> productIdList, Integer pageNo, Integer pageSize) {
+        return userClient.findRelations(userTagId, productIdList, pageNo, pageSize);
+    }
 }

+ 5 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/controller/app/AppTagController.java

@@ -51,4 +51,9 @@ public class AppTagController {
         });
         return APIResult.ok(tagList);
     }
+
+    @RequestMapping(value = "/tag/{tagId}", method = RequestMethod.GET)
+    public Tag getTag(@PathVariable("tagId") String tagId) {
+        return tagService.find(tagId);
+    }
 }

+ 0 - 41
rankin-product-service/src/main/java/cn/rankin/productservice/controller/app/ItemControllerV0.java

@@ -1,41 +0,0 @@
-package cn.rankin.productservice.controller.app;
-
-import cn.rankin.common.utils.api.model.APIResult;
-import cn.rankin.common.utils.api.page.Page;
-import cn.rankin.data.api.app.dto.ItemSearchDTO;
-import cn.rankin.data.api.app.vo.ItemVo;
-import cn.rankin.productservice.service.app.ItemService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * 已弃用,
- *
- * 以 cn.rankin.productservice.controller.ItemController 替代
- */
-@RestController
-@RequestMapping(value = "/v0/app/item")
-public class ItemControllerV0 {
-
-    @Autowired
-    private ItemService itemService;
-
-    @RequestMapping(value = "/ids", method = RequestMethod.POST)
-    public APIResult<List<ItemVo>> findByIds(@RequestBody List<String> productIdList, @RequestParam("merchantId") String merchantId) {
-        List<ItemVo> itemVoList = itemService.findByPids(merchantId, productIdList);
-        return APIResult.ok(itemVoList);
-    }
-
-    @RequestMapping(value = "/ids/page", method = RequestMethod.POST)
-    public APIResult<Page<ItemVo>> findPage(@RequestBody ItemSearchDTO itemSearchDTO) {
-        String merchantId = itemSearchDTO.getMerchantId();
-        String tagId = itemSearchDTO.getTagId();
-        List<String> productIdList = itemSearchDTO.getProductIdList();
-        Integer pageNo = itemSearchDTO.getPageNo();
-        Integer pageSize = itemSearchDTO.getPageSize();
-        return itemService.findPageByTagIdAndPids(merchantId, tagId, productIdList, pageNo, pageSize);
-    }
-
-}

+ 2 - 2
rankin-product-service/src/main/java/cn/rankin/productservice/controller/cms/MerchantProductController.java

@@ -87,12 +87,12 @@ public class MerchantProductController {
     }
 
     @RequestMapping(value = "/list2", method = RequestMethod.POST)
-    public APIResult<List<MerchantProduct>> getList(@RequestBody List<String> productIdList, @RequestParam("merchantId") String merchantId) {
+    public APIResult<List<MerchantProduct>> getList2(@RequestBody List<String> productIdList, @RequestParam("merchantId") String merchantId) {
         return merchantProductService.findByPidList_bak(productIdList, merchantId);
     }
 
     @RequestMapping(value = "/list", method = RequestMethod.POST)
-    public APIResult<List<MerchantProduct>> getList2(@RequestBody List<String> productIdList, @RequestParam("merchantId") String merchantId) {
+    public APIResult<List<MerchantProduct>> getList(@RequestBody List<String> productIdList, @RequestParam("merchantId") String merchantId) {
         List<MerchantProduct> merchantProductList = merchantProductService.findByPidList(productIdList, merchantId);
         return APIResult.ok(merchantProductList);
     }

+ 16 - 2
rankin-product-service/src/main/java/cn/rankin/productservice/controller/cms/TagController.java

@@ -5,13 +5,16 @@ import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.common.utils.dto.search.TagSearchDTO;
 import cn.rankin.common.utils.enums.BaseOrderEnum;
 import cn.rankin.data.api.product.dto.TagDTO;
+import cn.rankin.data.api.product.entity.MerchantProduct;
 import cn.rankin.data.api.product.entity.Tag;
 import cn.rankin.productservice.service.TagService;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.LinkedHashMap;
+import java.util.List;
 
 @Slf4j
 @RestController
@@ -23,7 +26,6 @@ public class TagController {
 
     @RequestMapping(value = "/{tagId}", method = RequestMethod.GET)
     public APIResult<Tag> getTag(@PathVariable("tagId") String tagId) {
-
         return tagService.getTag(tagId);
     }
 
@@ -59,7 +61,19 @@ public class TagController {
 
     @RequestMapping(value = "/v2/{tagId}", method = RequestMethod.GET)
     public Tag getTagInfo(@PathVariable("tagId") String tagId) {
-        return tagService.getTagInfo(tagId);
+        if(StringUtils.isBlank(tagId)){
+            log.info("error! id is empty!");
+            return null;
+        }
+        Tag tag = tagService.find(tagId);
+        if(null == tag){
+            log.info("not found tag by id ,id={}",tagId);
+        }else{
+            String merchantId = tag.getMerchantId();
+            List<MerchantProduct> merchantProductList = tagService.getMerchantProductList(tagId, merchantId);
+            tag.setProductList(merchantProductList);
+        }
+        return tag;
     }
 
 }

+ 5 - 0
rankin-product-service/src/main/java/cn/rankin/productservice/service/TagService.java

@@ -210,4 +210,9 @@ public class TagService {
         tag.setProductList(merchantProductList);
         return tag;
     }
+
+    public Tag find(String tagId) {
+        Tag tag = tagRepository.find(tagId);
+        return tag;
+    }
 }

+ 7 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/controller/UserTagProductRelationController.java

@@ -29,4 +29,11 @@ public class UserTagProductRelationController {
     }
 
 
+    @RequestMapping(value = "/page/pids",method = RequestMethod.POST)
+    public Page<UserTagProductRelation> findPageByPidsUserTagId(@RequestParam("userTagId") String userTagId,
+                                                            @RequestBody List<String> pids,
+                                                            @RequestParam("pageNo") Integer pageNo,
+                                                            @RequestParam("pageSize") Integer pageSize) {
+        return userTagProductRelationService.findPageByPidsUserTagId(userTagId, pids,  pageNo, pageSize);
+    }
 }

+ 2 - 19
rankin-user-service/src/main/java/cn/rankin/userservice/repository/UserTagProductRelationRepository.java

@@ -20,23 +20,6 @@ public interface UserTagProductRelationRepository extends BasicJpaRepository<Use
     @Query(value = "update UserTagProductRelation r set r.status = 1 where r.tagId = :tagId")
     Integer deleteByTagId(@Param("tagId") String tagId);
 
-/*
-    @Modifying
-    @Query(value = "update UserTagProductRelation r set r.status = 1 where r.pid = :productId and r.tagId = :tagId")
-    Integer deleteByPidAndTagId(@Param("productId") String productId, @Param("tagId") String tagId);
-
-    List<UserTagProductRelation> findByTagIdIn(List<String> tagIds);
-
-    @Query(value = "select r from UserTagProductRelation r where r.pid in (?1) and r.tagId in (?2) and r.status = 0")
-    List<UserTagProductRelation> findByPidsAndTagIds(List<String> pids, List<String> tagIds);
-
-    @Query(value = "select r from UserTagProductRelation r where r.pid = ?1 and r.tagId = ?2 and r.status = ?3")
-    List<UserTagProductRelation> findByPidAndTagId(String pid, String tagId, BaseStatusEnum status);
-
-    List<UserTagProductRelation> findByPidAndTagId(String pid, String merchantId);
-
-    @Query(value = "select r from UserTagProductRelation r where r.tagId = ?1 and r.pid in (?2) and r.status = 0 order by r.sort limit ?3, ?4", nativeQuery = true)
-    List<UserTagProductRelation> findByTagIdAndPids(String tagId, List<String> productIdList, Long start, Integer size);
-*/
-
+    @Query(value = "select * from u_user_tag_product_relation r where r.tag_id = ?1 and r.pid in (?2) and r.status = 0 order by r.sort limit ?3, ?4  ", nativeQuery = true)
+    List<UserTagProductRelation> findByUserTagIdAndPids(String tagId, List<String> productIdList, Long start, Integer size);
 }

+ 14 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/service/UserTagProductRelationService.java

@@ -105,4 +105,18 @@ public class UserTagProductRelationService {
         page.setList(relationList);
         return page;
     }
+
+    public Page<UserTagProductRelation> findPageByPidsUserTagId(String userTagId, List<String> pids, Integer pageNo, Integer pageSize) {
+        Page<UserTagProductRelation> page = new Page();
+        page.setPageNo(pageNo);
+        page.setPageSize(pageSize);
+
+        List<UserTagProductRelation> relationList = relationRepository.findByUserTagIdAndPids(userTagId, pids, page.getStart(), pageSize);
+        if (CollectionUtils.isEmpty(relationList)) {
+            return page;
+        }
+        page.setList(relationList);
+        page.setTotalSize(relationList.size());
+        return page;
+    }
 }