Browse Source

fix recommend

huodongdong 7 years ago
parent
commit
1c36c05943

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

@@ -1,9 +1,36 @@
 package cn.rankin.apiweb.controller;
 
+import cn.rankin.apiweb.assist.resolver.NeedUser;
+import cn.rankin.apiweb.service.collection.CollectionService;
+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 org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping(value = "/user/collection")
 public class CollectionController {
+
+    @Autowired
+    private CollectionService collectionService;
+
+    @RequestMapping(method = RequestMethod.POST)
+    public APIResult<Boolean> put(@NeedUser DeviceUserVo user, @RequestParam("pid") String productId) {
+        return null;
+    }
+
+    @RequestMapping(method = RequestMethod.DELETE)
+    public APIResult<Boolean> delete(@NeedUser DeviceUserVo user, @RequestParam("pid") String productId) {
+        return null;
+    }
+
+    @RequestMapping(method = RequestMethod.GET)
+    public APIResult<Page> getPage(@NeedUser DeviceUserVo user, @RequestParam("tagId") String tagId, @RequestParam("pageNo") Integer pageNo,
+                                   @RequestParam("pageSize") Integer pageSize) {
+        return null;
+    }
 }

+ 53 - 0
rankin-api-web/src/main/java/cn/rankin/apiweb/service/collection/CollectionClient.java

@@ -0,0 +1,53 @@
+package cn.rankin.apiweb.service.collection;
+
+import cn.rankin.apiweb.code.ApiWebCode;
+import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.api.page.Page;
+import cn.rankin.data.api.user.dto.CollectionDTO;
+import cn.rankin.data.api.user.entity.Collection;
+import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@FeignClient(name = "${service.user.name}", fallback = CollectionClient.CollectionServiceHystrix.class)
+public interface CollectionClient {
+
+    @RequestMapping(value = "/user/collection", method = RequestMethod.POST)
+    APIResult<Boolean> put(@RequestBody CollectionDTO collectionDTO);
+
+    @RequestMapping(value = "/user/collection", method = RequestMethod.GET)
+    APIResult<List<Collection>> getUserCollection(@RequestParam("userId") String userId, @RequestParam("size") Integer size);
+
+    @RequestMapping(value = "/user/collection", method = RequestMethod.DELETE)
+    APIResult<Boolean> delete(@RequestParam("userId") String userId, @RequestParam("pid") String productId);
+
+    @RequestMapping(value = "/user/collection/page", method = RequestMethod.GET)
+    APIResult<Page<Collection>> getPage(@RequestParam("userId") String userId, @RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize);
+
+    @Component
+    class CollectionServiceHystrix implements CollectionClient {
+
+        @Override
+        public APIResult put(CollectionDTO collectionDTO) {
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+        @Override
+        public APIResult getUserCollection(String userId, Integer size) {
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+        @Override
+        public APIResult delete(String userId, String productId) {
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+        @Override
+        public APIResult getPage(String userId, Integer pageNo, Integer pageSize) {
+            return APIResult.error(ApiWebCode.SERVER_ERROR);
+        }
+
+    }
+}

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

@@ -0,0 +1,21 @@
+package cn.rankin.apiweb.service.collection;
+
+import cn.rankin.apiweb.code.ApiWebCode;
+import cn.rankin.common.utils.api.model.APIResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+@Service
+@Slf4j
+public class CollectionService {
+
+    @Autowired
+    private CollectionClient collectionClient;
+
+    public APIResult<Boolean> put(String userId, String productId) {
+        return null;
+    }
+
+}

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/app/vo/RecommendVo.java

@@ -18,4 +18,6 @@ public class RecommendVo implements Serializable{
     private String subTitle;
 
     private String breadCrumb;
+
+    private String coverUrl;
 }

+ 2 - 0
rankin-data-api/src/main/java/cn/rankin/data/api/product/vo/RecommendVo.java

@@ -27,4 +27,6 @@ public class RecommendVo implements Serializable {
     private ProductTypeEnum type;
 
     private String name;
+
+    private String code;
 }

+ 38 - 5
rankin-user-service/src/main/java/cn/rankin/userservice/controller/CollectionController.java

@@ -1,18 +1,51 @@
 package cn.rankin.userservice.controller;
 
 import cn.rankin.common.utils.api.model.APIResult;
+import cn.rankin.common.utils.api.page.Page;
 import cn.rankin.data.api.user.dto.CollectionDTO;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RestController;
+import cn.rankin.data.api.user.entity.Collection;
+import cn.rankin.userservice.code.UserServiceAPICode;
+import cn.rankin.userservice.service.CollectionService;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
 
 @RestController
 @RequestMapping(value = "/user/collection")
 public class CollectionController {
 
+    protected static final int MAX_SIZE = 1000;
+
+    @Autowired
+    private CollectionService collectionService;
+
     @RequestMapping(method = RequestMethod.PUT)
     public APIResult<Boolean> put(@RequestBody CollectionDTO collectionDTO) {
-        return null;
+        return collectionService.put(collectionDTO);
+    }
+
+    @RequestMapping(method = RequestMethod.GET)
+    public APIResult<List<Collection>> getCollections(@RequestParam("userId") String userId, @RequestParam(value = "size", required = false) Integer size) {
+        if (StringUtils.isEmpty(userId)) {
+            return APIResult.error(UserServiceAPICode.PARAMETER_ERROR);
+        }
+
+        if (size == 0 || size == null) {
+            size = MAX_SIZE;
+        }
+
+        return collectionService.gets(userId, size);
+    }
+
+    @RequestMapping(value = "/page", method = RequestMethod.GET)
+    public APIResult<Page<Collection>> getPage(@RequestParam("userId") String userId, @RequestParam("pageNo") Integer pageNo, @RequestParam("pageSize") Integer pageSize) {
+        return collectionService.getPage(userId, pageNo, pageSize);
+    }
+
+    @RequestMapping(method = RequestMethod.DELETE)
+    public APIResult<Boolean> delete(@RequestParam("userId") String userId, @RequestParam("pid") String productId) {
+        return collectionService.delete(userId, productId);
     }
 }

+ 6 - 0
rankin-user-service/src/main/java/cn/rankin/userservice/repository/CollectionRepository.java

@@ -2,8 +2,14 @@ package cn.rankin.userservice.repository;
 
 import cn.rankin.common.utils.jpa.BasicJpaRepository;
 import cn.rankin.data.api.user.entity.Collection;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
 
 public interface CollectionRepository extends BasicJpaRepository<Collection, String> {
 
     Collection findByPidAndUserId(String productId, String userId);
+
+    @Modifying
+    @Query("update Collection c set c.status = 1 where c.pid = ?1 and c.userId = ?2")
+    Integer deleteByPidAndUserId(String productId, String userId);
 }

+ 24 - 6
rankin-user-service/src/main/java/cn/rankin/userservice/service/CollectionService.java

@@ -35,19 +35,37 @@ public class CollectionService {
         }
 
         Collection newCollection = convert(collectionDTO);
-
-        return null;
+        collectionRepository.save(newCollection);
+        return APIResult.ok(true);
     }
 
-    public APIResult<Page<Collection>> getPage(String userId, Integer start, Integer size) {
-        return null;
+    public APIResult<Page<Collection>> getPage(String userId, Integer pageNo, Integer pageSize) {
+        Collection sample = new Collection();
+        sample.setUserId(userId);
+
+        Long total = collectionRepository.count(sample);
+        Page page = new Page(total, pageNo, pageSize);
+        if (total == 0) {
+            return APIResult.ok(page);
+        }
+
+        List<Collection> list = collectionRepository.find(sample, page.getStart(), pageSize);
+        page.setList(list);
+        return APIResult.ok(page);
     }
 
     public APIResult<List<Collection>> gets(String userId, Integer size) {
-        return null;
+        Collection sample = new Collection();
+        sample.setUserId(userId);
+        List<Collection> list = collectionRepository.find(sample, 0L, size);
+        return APIResult.ok(list);
     }
 
     public APIResult<Boolean> delete(String userId, String productId) {
-        return null;
+        Integer count = collectionRepository.deleteByPidAndUserId(productId, userId);
+        if (count > 0) {
+            return APIResult.ok(true);
+        }
+        return APIResult.error(UserServiceAPICode.NOT_EXISTS);
     }
 }