浏览代码

后端代码整理,加注释

nnkwrik 6 年之前
父节点
当前提交
807a16335d
共有 61 个文件被更改,包括 619 次插入487 次删除
  1. 1 1
      .gitignore
  2. 0 25
      auth-service/.gitignore
  3. 5 0
      auth-service/src/main/java/io/github/nnkwrik/authservice/mq/RegisterStreamSender.java
  4. 0 5
      common/pom.xml
  5. 2 0
      common/src/main/java/io/github/nnkwrik/common/mq/UserRegisterStream.java
  6. 4 2
      common/src/main/java/io/github/nnkwrik/common/token/RSAKeysReader.java
  7. 7 1
      common/src/main/java/io/github/nnkwrik/common/token/TokenSolver.java
  8. 5 2
      common/src/main/java/io/github/nnkwrik/common/token/injection/JWTResolver.java
  9. 1 0
      common/src/main/java/io/github/nnkwrik/common/token/injection/SolverConfig.java
  10. 2 1
      common/src/main/java/io/github/nnkwrik/common/util/BeanListUtils.java
  11. 2 0
      common/src/main/java/io/github/nnkwrik/common/util/JsonUtil.java
  12. 20 0
      common/src/main/java/io/github/nnkwrik/common/util/ListUtil.java
  13. 1 1
      dev/ngrok/start.sh
  14. 3 3
      eureka/src/main/java/io/github/nnkwrik/eureka/EurekaApplication.java
  15. 0 14
      goods-service/pom.xml
  16. 7 5
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/cache/BrowseCache.java
  17. 7 3
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/cache/SearchCache.java
  18. 21 38
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsController.java
  19. 14 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsServiceController.java
  20. 7 61
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/IndexController.java
  21. 110 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/PostController.java
  22. 3 2
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/SearchController.java
  23. 0 93
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/TestController.java
  24. 37 10
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/UserController.java
  25. 22 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/GoodsMapper.java
  26. 28 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/IndexMapper.java
  27. 0 42
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/OtherMapper.java
  28. 22 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/PostMapper.java
  29. 11 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/SearchMapper.java
  30. 5 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/UserMapper.java
  31. 8 2
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CatalogPageVo.java
  32. 8 2
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CategoryPageVo.java
  33. 8 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CommentVo.java
  34. 9 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/GoodsDetailPageVo.java
  35. 8 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/IndexPageVo.java
  36. 6 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/SearchPageVo.java
  37. 7 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/UserPageVo.java
  38. 1 4
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/GoodsService.java
  39. 0 8
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/IndexService.java
  40. 22 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/PostService.java
  41. 27 44
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/GoodsServiceImpl.java
  42. 13 22
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/IndexServiceImpl.java
  43. 71 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/PostServiceImpl.java
  44. 1 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/SearchServiceImpl.java
  45. 10 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/UserServiceImpl.java
  46. 0 6
      inner-api/pom.xml
  47. 2 0
      inner-api/src/main/java/fangxianyu/innerApi/goods/GoodsClient.java
  48. 1 1
      inner-api/src/main/java/fangxianyu/innerApi/goods/GoodsClientHandler.java
  49. 2 0
      inner-api/src/main/java/fangxianyu/innerApi/im/ImClient.java
  50. 1 1
      inner-api/src/main/java/fangxianyu/innerApi/user/UserClient.java
  51. 0 0
      inner-api/src/main/resources/application.properties
  52. 0 22
      user-service/pom.xml
  53. 0 1
      user-service/src/main/java/io/github/nnkwrik/userservice/UserServiceApplication.java
  54. 0 22
      user-service/src/main/java/io/github/nnkwrik/userservice/client/AuthClient.java
  55. 16 1
      user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserServiceController.java
  56. 9 9
      user-service/src/main/java/io/github/nnkwrik/userservice/dao/UserMapper.java
  57. 0 2
      user-service/src/main/java/io/github/nnkwrik/userservice/model/User.java
  58. 6 1
      user-service/src/main/java/io/github/nnkwrik/userservice/mq/RegisterStreamReceiver.java
  59. 0 4
      user-service/src/main/resources/application.yml
  60. 2 0
      zuul/src/main/java/com/nnkwrik/zuul/ZuulApplication.java
  61. 34 23
      zuul/src/main/resources/application.yml

+ 1 - 1
.gitignore

@@ -13,7 +13,7 @@
 # other
 dev/mysql/data/*
 dev/mysql/log/*
-dev/redis/log/*
+dev/redis/data/*
 auth-service/src/main/resources/application-secret.yml
 **/*.key
 **/*.pub

+ 0 - 25
auth-service/.gitignore

@@ -1,25 +0,0 @@
-/target/
-!.mvn/wrapper/maven-wrapper.jar
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/build/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/

+ 5 - 0
auth-service/src/main/java/io/github/nnkwrik/authservice/mq/RegisterStreamSender.java

@@ -19,6 +19,11 @@ public class RegisterStreamSender {
     @Autowired
     private UserRegisterStream streamClient;
 
+    /**
+     * 通过消息队列注册用户
+     *
+     * @param userDate
+     */
     public void send(String userDate) {
         log.info("向【用户服务】发起【用户注册】的消息,消息内容:{}", userDate);
         streamClient.output().send(MessageBuilder.withPayload(userDate).build());

+ 0 - 5
common/pom.xml

@@ -22,11 +22,6 @@
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
-
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 2 - 0
common/src/main/java/io/github/nnkwrik/common/mq/UserRegisterStream.java

@@ -6,6 +6,8 @@ import org.springframework.messaging.MessageChannel;
 import org.springframework.messaging.SubscribableChannel;
 
 /**
+ * 注册用户的消息队列
+ *
  * @author nnkwrik
  * @date 18/11/19 16:19
  */

+ 4 - 2
common/src/main/java/io/github/nnkwrik/common/token/RSAKeysReader.java

@@ -16,6 +16,8 @@ import java.security.spec.X509EncodedKeySpec;
 import java.util.Base64;
 
 /**
+ * 读取RSA秘钥
+ *
  * @author nnkwrik
  * @date 18/11/18 21:38
  */
@@ -68,11 +70,11 @@ public class RSAKeysReader {
         return (RSAPublicKey) pub;
     }
 
-    private static String getData(String fileName){
+    private static String getData(String fileName) {
         String data = "";
         try {
             File file = new ClassPathResource(fileName).getFile();
-            log.info("试图读取秘钥文件, 文件路径 : [{}]",file.getPath());
+            log.info("试图读取秘钥文件, 文件路径 : [{}]", file.getPath());
             data = new String(Files.readAllBytes(file.toPath()));
         } catch (IOException e) {
             log.info("文件读取失败");

+ 7 - 1
common/src/main/java/io/github/nnkwrik/common/token/TokenSolver.java

@@ -12,7 +12,6 @@ import org.springframework.util.StringUtils;
 import java.lang.reflect.Field;
 import java.security.interfaces.RSAPrivateKey;
 import java.security.interfaces.RSAPublicKey;
-import java.util.Arrays;
 
 /**
  * @author nnkwrik
@@ -45,6 +44,13 @@ public class TokenSolver {
         }
     };
 
+    /**
+     * JWT Token转JWTUser
+     *
+     * @param token
+     * @return
+     * @throws Exception
+     */
     public JWTUser solve(String token) throws Exception {
         if (StringUtils.isEmpty(token)) return null;
         token = token.replace("Bearer ", "");

+ 5 - 2
common/src/main/java/io/github/nnkwrik/common/token/injection/JWTResolver.java

@@ -18,6 +18,8 @@ import org.springframework.web.method.support.ModelAndViewContainer;
 import java.util.concurrent.TimeUnit;
 
 /**
+ * 给Controller中的@JWT注解注入参数
+ *
  * @author nnkwrik
  * @date 18/11/24 9:43
  */
@@ -25,6 +27,7 @@ import java.util.concurrent.TimeUnit;
 @Component
 public class JWTResolver implements HandlerMethodArgumentResolver {
 
+    //缓存
     private static Cache<String, JWTUser> cache =
             CacheBuilder.newBuilder().maximumSize(10000).expireAfterWrite(3, TimeUnit.MINUTES).build();
 
@@ -54,12 +57,12 @@ public class JWTResolver implements HandlerMethodArgumentResolver {
                 cache.put(token, user);
             } catch (TokenExpiredException e) {
                 log.info("jwt已过期,过期时间:{}", e.getMessage());
-                if (parameter.getParameterAnnotation(JWT.class).checkExpired()){
+                if (parameter.getParameterAnnotation(JWT.class).checkExpired()) {
                     throw new JWTException(JWTException.TOKEN_IS_EXPIRED, "凭证已过期");
                 }
             } catch (Exception e) {
                 log.info("jwt解析失败");
-                if (parameter.getParameterAnnotation(JWT.class).required()){
+                if (parameter.getParameterAnnotation(JWT.class).required()) {
                     throw new JWTException(JWTException.TOKEN_IS_WRONG, "用户的Authorization头错误,无法获取jwt");
                 }
             }

+ 1 - 0
common/src/main/java/io/github/nnkwrik/common/token/injection/SolverConfig.java

@@ -16,6 +16,7 @@ public class SolverConfig implements WebMvcConfigurer {
 
     @Autowired
     private JWTResolver jwtResolver;
+
     @Override
     public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
         resolvers.add(jwtResolver);

+ 2 - 1
common/src/main/java/io/github/nnkwrik/common/util/BeanListUtils.java

@@ -14,12 +14,13 @@ public class BeanListUtils {
     /**
      * BeanUtils.copyProperties()的List增强版
      * 对List的每个元素进行拷贝,生成target类型的List
+     *
      * @param sourceList
      * @param targetClazz 要生成的target List<T>的Class对象
      * @param <T>
      * @return
      */
-    public static <T,R> List<R> copyListProperties(List<T> sourceList, Class<R> targetClazz) {
+    public static <T, R> List<R> copyListProperties(List<T> sourceList, Class<R> targetClazz) {
         List<R> result = new ArrayList<>();
         sourceList.stream().forEach(source -> {
             try {

+ 2 - 0
common/src/main/java/io/github/nnkwrik/common/util/JsonUtil.java

@@ -9,6 +9,8 @@ import java.io.IOException;
 import java.util.Map;
 
 /**
+ * Json工具类
+ *
  * @author nnkwrik
  * @date 18/11/19 16:54
  */

+ 20 - 0
common/src/main/java/io/github/nnkwrik/common/util/ListUtil.java

@@ -0,0 +1,20 @@
+package io.github.nnkwrik.common.util;
+
+import java.util.List;
+
+/**
+ * List工具类
+ *
+ * @author nnkwrik
+ * @date 18/12/17 11:29
+ */
+public class ListUtil {
+
+    public static <T> T getFirst(List<T> list) {
+        return list != null && !list.isEmpty() ? list.get(0) : null;
+    }
+
+    public static <T> T getLast(List<T> list) {
+        return list != null && !list.isEmpty() ? list.get(list.size() - 1) : null;
+    }
+}

+ 1 - 1
dev/ngrok/start.sh

@@ -1,3 +1,3 @@
 #!/usr/bin/env bash
 cur_dir=`pwd`
-${cur_dir}/ngrok http 8804
+${cur_dir}/ngrok http 8081

+ 3 - 3
eureka/src/main/java/io/github/nnkwrik/eureka/EurekaApplication.java

@@ -8,7 +8,7 @@ import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
 @EnableEurekaServer
 public class EurekaApplication {
 
-	public static void main(String[] args) {
-		SpringApplication.run(EurekaApplication.class, args);
-	}
+    public static void main(String[] args) {
+        SpringApplication.run(EurekaApplication.class, args);
+    }
 }

+ 0 - 14
goods-service/pom.xml

@@ -31,10 +31,6 @@
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-openfeign</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -42,10 +38,6 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.projectlombok</groupId>
@@ -82,12 +74,6 @@
             <version>0.0.1-SNAPSHOT</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.google.guava</groupId>
-            <artifactId>guava</artifactId>
-            <version>27.0-jre</version>
-        </dependency>
-
 
     </dependencies>
 

+ 7 - 5
goods-service/src/main/java/io/github/nnkwrik/goodsservice/cache/BrowseCache.java

@@ -14,7 +14,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 /**
- * 商品浏览量的缓存,过期(10天)/超出缓存大小/超过10个时更新数据库
+ * 商品浏览量的缓存,过期(1天)/超出缓存大小/超过5个时更新数据库
  *
  * @author nnkwrik
  * @date 18/11/20 12:03
@@ -27,7 +27,7 @@ public class BrowseCache {
     private GoodsMapper goodsMapper;
 
 
-    //过期(1天)/超出缓存队列大小(1000)/缓存超过10个时 会触发
+    //过期(1天)/超出缓存队列大小(1000)/缓存超过5个时 会触发
     private RemovalListener<Integer, AtomicInteger> listener =
             notification -> {
                 log.info("BrowseCache缓存刷入数据库,原因 :【{}】,数据 :【key={} , value={}】",
@@ -37,6 +37,8 @@ public class BrowseCache {
 
 
     /**
+     * 浏览量缓存
+     *
      * @key 商品id
      * @value 缓存的浏览量
      */
@@ -51,6 +53,7 @@ public class BrowseCache {
 
     /**
      * 在缓存中增加某商品的浏览次数
+     *
      * @param goodsId
      */
     public void add(Integer goodsId) {
@@ -59,7 +62,7 @@ public class BrowseCache {
         if (browseCount != null) {
             count = browseCount.incrementAndGet();
             if (count > 5) {
-                //手动移除缓存,让他触发removalListener,刷新数据库
+                //手动使缓存失效,让他触发removalListener
                 cache.invalidate(goodsId);
             }
         } else {
@@ -67,8 +70,7 @@ public class BrowseCache {
             cache.put(goodsId, new AtomicInteger(1));
         }
         log.debug("BrowseCache更新商品id【{}】的浏览次数为【{}】", goodsId, count);
-        //用cleanUp()检查过期的缓存,让他触发removalListener
-        //必须执行这个cache才会去检查是否过期, 否则尽管过期他也不会触发removalListener
+        //用cleanUp()手动检查过期的缓存,让他触发removalListener.否则尽管过期他也不会触发removalListener
         cache.cleanUp();
     }
 

+ 7 - 3
goods-service/src/main/java/io/github/nnkwrik/goodsservice/cache/SearchCache.java

@@ -13,7 +13,7 @@ import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
- * 热门关键字的缓存,超出缓存大小时会优先顶替掉最久没更新value的key
+ * 热门关键字的缓存
  *
  * @author nnkwrik
  * @date 18/11/20 15:23
@@ -22,17 +22,20 @@ import java.util.stream.Collectors;
 @Component
 public class SearchCache {
     /**
+     * 热门关键字的缓存
+     *
      * @key 搜索关键字
      * @value 搜索次数
      */
     private Cache<String, AtomicInteger> cache =
             CacheBuilder.newBuilder()
-                    .maximumSize(10000) //超出大小时,替换最久没更新value的key
+                    .maximumSize(10000) //超出大小时,会替换最久没被搜索的key
                     .expireAfterWrite(30, TimeUnit.DAYS)
                     .build();
 
     /**
      * 增加某个关键字在缓存中的次数
+     *
      * @param keyword
      */
     public void add(String keyword) {
@@ -41,7 +44,7 @@ public class SearchCache {
         if (browseCount != null) {
             count = browseCount.incrementAndGet();
         } else {
-            count =1;
+            count = 1;
             cache.put(keyword, new AtomicInteger(1));
         }
 
@@ -50,6 +53,7 @@ public class SearchCache {
 
     /**
      * 获取热门的关键字列表
+     *
      * @param num
      * @return
      */

+ 21 - 38
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsController.java

@@ -7,8 +7,8 @@ import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.common.token.injection.JWT;
 import io.github.nnkwrik.goodsservice.cache.BrowseCache;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
+import io.github.nnkwrik.goodsservice.model.po.GoodsComment;
 import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
-import io.github.nnkwrik.goodsservice.model.po.PostExample;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
 import io.github.nnkwrik.goodsservice.model.vo.GoodsDetailPageVo;
@@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.*;
 import java.util.List;
 
 /**
+ * 商品浏览相关api
+ *
  * @author nnkwrik
  * @date 18/11/14 18:42
  */
@@ -48,7 +50,7 @@ public class GoodsController {
      * @param categoryId
      * @return
      */
-    @GetMapping("/category/{categoryId}")
+    @GetMapping("/category/index/{categoryId}")
 
     public Response<CategoryPageVo> getCategoryPage(@PathVariable("categoryId") int categoryId,
                                                     @RequestParam(value = "page", defaultValue = "1") int page,
@@ -69,7 +71,7 @@ public class GoodsController {
      * @param size
      * @return
      */
-    @GetMapping("/list/{categoryId}")
+    @GetMapping("/category/{categoryId}")
     public Response<Goods> getGoodsByCategory(@PathVariable("categoryId") int categoryId,
                                               @RequestParam(value = "page", defaultValue = "1") int page,
                                               @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -133,51 +135,32 @@ public class GoodsController {
         return Response.ok(goodsList);
     }
 
-
     /**
-     * 发布商品
+     * 发表评论
      *
-     * @param post
+     * @param goodsId
+     * @param comment
      * @param user
      * @return
      */
-    @PostMapping("/post")
-    public Response postGoods(@RequestBody PostExample post,
-                              @JWT(required = true) JWTUser user) {
-
-        if (StringUtils.isEmpty(post.getName()) ||
-                StringUtils.isEmpty(post.getDesc()) ||
-                StringUtils.isEmpty(post.getRegion()) ||
-                post.getCategoryId() == null ||
-                post.getRegionId() == null ||
-                post.getPrice() == null ||
-                post.getImages() == null || post.getImages().size() < 1) {
-            String msg = "用户发布商品失败,信息不完整";
+    @PostMapping("/comment/post/{goodsId}")
+    public Response postComment(@PathVariable("goodsId") int goodsId,
+                                @RequestBody GoodsComment comment,
+                                @JWT(required = true) JWTUser user) {
+        if (StringUtils.isEmpty(user.getOpenId()) ||
+                StringUtils.isEmpty(comment.getReplyUserId()) ||
+                StringUtils.isEmpty(comment.getContent()) ||
+                comment.getReplyCommentId() == null) {
+            String msg = "用户发表评论失败,信息不完整";
             log.info(msg);
-            return Response.fail(Response.POST_INFO_INCOMPLETE, msg);
+            return Response.fail(Response.COMMENT_INFO_INCOMPLETE, msg);
         }
-        post.setSellerId(user.getOpenId());
-        goodsService.postGoods(post);
-        log.info("用户发布商品:用户昵称=【{}】,商品名=【{}】,{}张图片", user.getNickName(), post.getName(), post.getImages().size());
 
-        return Response.ok();
-    }
-
-    @DeleteMapping("/delete/{goodsId}")
-    public Response postGoods(@PathVariable int goodsId,
-                              @JWT(required = true) JWTUser user) {
-        try {
-            goodsService.deleteGoods(goodsId, user.getOpenId());
-        } catch (Exception e) {
-            if (e.getMessage().equals(Response.SELLER_AND_GOODS_IS_NOT_MATCH + "")) {
-                String msg = "删除商品失败.当前用户信息和卖家信息不匹配";
-                return Response.fail(Response.SELLER_AND_GOODS_IS_NOT_MATCH, msg);
-            }
-            e.printStackTrace();
+        goodsService.addComment(goodsId, user.getOpenId(), comment.getReplyCommentId(), comment.getReplyUserId(), comment.getContent());
 
-        }
-        log.info("用户删除商品: 用户id=【{}】,商品Id=【{}】", user.getOpenId(), goodsId);
+        log.info("用户添加评论:用户昵称=【{}】,回复评论id=【{}】,回复内容=【{}】", user.getNickName(), comment.getReplyCommentId(), comment.getContent());
         return Response.ok();
+
     }
 
 

+ 14 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsServiceController.java

@@ -7,6 +7,7 @@ import io.github.nnkwrik.goodsservice.model.po.Goods;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
@@ -28,6 +29,12 @@ public class GoodsServiceController {
     private GoodsServiceMapper goodsServiceMapper;
 
 
+    /**
+     * 获取简单商品信息
+     *
+     * @param goodsId
+     * @return
+     */
     @GetMapping("/simpleGoods/{goodsId}")
     Response<SimpleGoods> getSimpleGoods(@PathVariable("goodsId") Integer goodsId) {
         Goods goods = goodsServiceMapper.getSimpleGoods(goodsId);
@@ -44,6 +51,12 @@ public class GoodsServiceController {
     }
 
 
+    /**
+     * 获取简单商品信息列表
+     *
+     * @param goodsIdList
+     * @return
+     */
     @GetMapping("/simpleGoodsList")
     Response<Map<Integer, SimpleGoods>> getSimpleGoodsList(@RequestParam List<Integer> goodsIdList) {
         List<Goods> godosList = goodsServiceMapper.getSimpleGoodsList(goodsIdList);
@@ -54,7 +67,7 @@ public class GoodsServiceController {
             dtoMap.put(goods.getId(), simpleGoods);
         });
 
-        if (dtoMap == null) {
+        if (ObjectUtils.isEmpty(dtoMap)) {
             log.info("其他服务通过goodsId : [{}] 查询商品基本信息,没有查询到该商品", goodsIdList);
             return Response.fail(Response.GOODS_IN_NOT_EXIST, "不存在的商品");
         }

+ 7 - 61
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/IndexController.java

@@ -1,23 +1,23 @@
 package io.github.nnkwrik.goodsservice.controller;
 
-import io.github.nnkwrik.common.dto.JWTUser;
 import io.github.nnkwrik.common.dto.Response;
-import io.github.nnkwrik.common.token.injection.JWT;
 import io.github.nnkwrik.goodsservice.model.po.Category;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
-import io.github.nnkwrik.goodsservice.model.po.GoodsComment;
-import io.github.nnkwrik.goodsservice.model.po.Region;
 import io.github.nnkwrik.goodsservice.model.vo.CatalogPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.IndexPageVo;
 import io.github.nnkwrik.goodsservice.service.IndexService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import java.util.List;
 
 /**
+ * 首页和分类页api
+ *
  * @author nnkwrik
  * @date 18/11/17 19:49
  */
@@ -45,6 +45,7 @@ public class IndexController {
 
     /**
      * 首页展示更多推荐商品
+     *
      * @param page
      * @param size
      * @return
@@ -86,60 +87,5 @@ public class IndexController {
         return Response.ok(subCatalog);
     }
 
-    /**
-     * 发表评论
-     *
-     * @param goodsId
-     * @param comment
-     * @param user
-     * @return
-     */
-    @PostMapping("/comment/post/{goodsId}")
-    public Response postComment(@PathVariable("goodsId") int goodsId,
-                                @RequestBody GoodsComment comment,
-                                @JWT(required = true) JWTUser user) {
-        if (StringUtils.isEmpty(user.getOpenId()) ||
-                StringUtils.isEmpty(comment.getReplyUserId()) ||
-                StringUtils.isEmpty(comment.getContent()) ||
-                comment.getReplyCommentId() == null) {
-            String msg = "用户发表评论失败,信息不完整";
-            log.info(msg);
-            return Response.fail(Response.COMMENT_INFO_INCOMPLETE, msg);
-        }
-
-        indexService.addComment(goodsId, user.getOpenId(), comment.getReplyCommentId(), comment.getReplyUserId(), comment.getContent());
-
-        log.info("用户添加评论:用户昵称=【{}】,回复评论id=【{}】,回复内容=【{}】", user.getNickName(), comment.getReplyCommentId(), comment.getContent());
-        return Response.ok();
-
-    }
-
-    /**
-     * 获取发布商品时需要填选的发货地区
-     *
-     * @param regionId
-     * @return
-     */
-    @GetMapping("/region/list/{regionId}")
-    public Response getRegionList(@PathVariable("regionId") int regionId) {
-        List<Region> regionList = indexService.getRegionList(regionId);
-        log.info("通过地区id=【{}】,搜索地区子列表。搜索到{}个结果", regionId, regionList.size());
-        return Response.ok(regionList);
-
-    }
-
-    /**
-     * 获取发布商品时需要填选的分类
-     *
-     * @param cateId
-     * @return
-     */
-    @GetMapping("/category/post/{cateId}")
-    public Response getPostCateList(@PathVariable("cateId") int cateId) {
-        List<Category> cateList = indexService.getPostCateList(cateId);
-        log.info("通过分类id=【{}】,搜索分类子列表。搜索到{}个结果", cateId, cateList.size());
-        return Response.ok(cateList);
-    }
-
 
 }

+ 110 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/PostController.java

@@ -0,0 +1,110 @@
+package io.github.nnkwrik.goodsservice.controller;
+
+import io.github.nnkwrik.common.dto.JWTUser;
+import io.github.nnkwrik.common.dto.Response;
+import io.github.nnkwrik.common.token.injection.JWT;
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.PostExample;
+import io.github.nnkwrik.goodsservice.model.po.Region;
+import io.github.nnkwrik.goodsservice.service.PostService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 发布商品相关api
+ *
+ * @author nnkwrik
+ * @date 18/12/16 20:55
+ */
+@Slf4j
+@RestController
+@RequestMapping("/post")
+public class PostController {
+
+    @Autowired
+    private PostService postService;
+
+    /**
+     * 发布商品
+     *
+     * @param post
+     * @param user
+     * @return
+     */
+    @PostMapping("/post")
+    public Response postGoods(@RequestBody PostExample post,
+                              @JWT(required = true) JWTUser user) {
+
+        if (StringUtils.isEmpty(post.getName()) ||
+                StringUtils.isEmpty(post.getDesc()) ||
+                StringUtils.isEmpty(post.getRegion()) ||
+                post.getCategoryId() == null ||
+                post.getRegionId() == null ||
+                post.getPrice() == null ||
+                post.getImages() == null || post.getImages().size() < 1) {
+            String msg = "用户发布商品失败,信息不完整";
+            log.info(msg);
+            return Response.fail(Response.POST_INFO_INCOMPLETE, msg);
+        }
+        post.setSellerId(user.getOpenId());
+        postService.postGoods(post);
+        log.info("用户发布商品:用户昵称=【{}】,商品名=【{}】,{}张图片", user.getNickName(), post.getName(), post.getImages().size());
+
+        return Response.ok();
+    }
+
+    /**
+     * 删除已发布的商品
+     *
+     * @param goodsId
+     * @param user
+     * @return
+     */
+    @DeleteMapping("/delete/{goodsId}")
+    public Response deleteGoods(@PathVariable int goodsId,
+                                @JWT(required = true) JWTUser user) {
+        try {
+            postService.deleteGoods(goodsId, user.getOpenId());
+        } catch (Exception e) {
+            if (e.getMessage().equals(Response.SELLER_AND_GOODS_IS_NOT_MATCH + "")) {
+                String msg = "删除商品失败.当前用户信息和卖家信息不匹配";
+                return Response.fail(Response.SELLER_AND_GOODS_IS_NOT_MATCH, msg);
+            }
+            e.printStackTrace();
+
+        }
+        log.info("用户删除商品: 用户id=【{}】,商品Id=【{}】", user.getOpenId(), goodsId);
+        return Response.ok();
+    }
+
+    /**
+     * 获取发布商品时需要填选的发货地区
+     *
+     * @param regionId
+     * @return
+     */
+    @GetMapping("/region/{regionId}")
+    public Response getRegionList(@PathVariable("regionId") int regionId) {
+        List<Region> regionList = postService.getRegionList(regionId);
+        log.info("通过地区id=【{}】,搜索地区子列表。搜索到{}个结果", regionId, regionList.size());
+        return Response.ok(regionList);
+
+    }
+
+    /**
+     * 获取发布商品时需要填选的分类
+     *
+     * @param cateId
+     * @return
+     */
+    @GetMapping("/category/{cateId}")
+    public Response getPostCateList(@PathVariable("cateId") int cateId) {
+        List<Category> cateList = postService.getCateList(cateId);
+        log.info("通过分类id=【{}】,搜索分类子列表。搜索到{}个结果", cateId, cateList.size());
+        return Response.ok(cateList);
+    }
+}

+ 3 - 2
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/SearchController.java

@@ -16,8 +16,6 @@ import java.util.Arrays;
 import java.util.List;
 
 /**
- * search相关的借口依赖openId,
- *
  * @author nnkwrik
  * @date 18/11/18 21:17
  */
@@ -37,6 +35,7 @@ public class SearchController {
 
     /**
      * 搜索页,展示热门关键字和当前用户的搜索历史
+     *
      * @param jwtUser
      * @return
      */
@@ -58,6 +57,7 @@ public class SearchController {
 
     /**
      * 清空搜索历史
+     *
      * @param jwtUser
      * @return
      */
@@ -70,6 +70,7 @@ public class SearchController {
 
     /**
      * 获取搜索结果,并把关键字加入SearchCache
+     *
      * @param keyword 搜索的关键字,可以用空格分割多个关键字
      * @param page
      * @param size

+ 0 - 93
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/TestController.java

@@ -1,93 +0,0 @@
-package io.github.nnkwrik.goodsservice.controller;
-
-import fangxianyu.innerApi.user.UserClientHandler;
-import io.github.nnkwrik.common.dto.JWTUser;
-import io.github.nnkwrik.common.dto.Response;
-import io.github.nnkwrik.common.token.TokenSolver;
-import io.github.nnkwrik.common.token.injection.JWT;
-import io.github.nnkwrik.goodsservice.model.po.Goods;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-
-/**
- * @author nnkwrik
- * @date 18/11/23 22:24
- */
-@RestController
-public class TestController {
-
-    @Autowired
-    private UserClientHandler userClientHandler;
-
-    @GetMapping("/testFeign")
-    public Response testFeign() {
-
-        return Response.ok(userClientHandler.getSimpleUser("1"));
-    }
-
-    @GetMapping("/testFeign2")
-    public Response testFeign2() {
-        List<String> ids = new ArrayList<>();
-        ids.add("1");
-        ids.add("3");
-        return Response.ok(userClientHandler.getSimpleUserList(ids));
-    }
-
-    @GetMapping("/testFeign3")
-    public Response testFeign3() {
-        return Response.ok(userClientHandler.getSimpleUser("1"));
-    }
-
-
-    /**
-     * jwt解析失败时会抛错
-     *
-     * @param jwt
-     * @return
-     */
-    @GetMapping("/testInjection")
-    public JWTUser testInject(@JWT JWTUser jwt) {
-
-        System.out.println("============" + jwt);
-        return jwt;
-    }
-
-    /**
-     * jwt解析失败时不会抛错
-     *
-     * @param jwt 解析失败时是null
-     * @return
-     */
-    @GetMapping("/testInjection2")
-    public JWTUser testInject2(@JWT(required = false) JWTUser jwt) {
-
-        System.out.println("============" + jwt);
-        return jwt;
-    }
-
-    @Autowired
-    private TokenSolver tokenSolver;
-
-    @GetMapping("/testJWTSolver")
-    public Object testJWTSolver() throws Exception {
-//        String token = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJvcGVuSWQiOiIxIiwibmlja25hbWUiOiLmtYvor5XnlKjmiLciLCJhdmF0YXIiOiJodHRwczovL2F2YXRhcnMyLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzI5NjYyMTE0P3M9NDYwJnY9NCIsImV4cCI6MTU0MzExMDM1OX0.WnlQL2so0oHU7gUn-V0ij-uACizN7kQRBTwowZxwtvTMGw3_qE6ElJjzGUrRQDGZrad6eKxSf7m1v_ptz4UBoKbzickPGei-Qo9AkZZt0wL77HxislXkJltKHl3BgGbSdF2SkyARAPrlKyFy60aHEUw2dv6UbaDbJC_mUlBGwukyjOqCg5C4KNEgvnFiWYpHEQGKq3L12y1ba2VhtBDnrqAhKFjWvxiU5zM5ei5uDXaUhhUEvICJ1ariR9ZiLIbUcJ_CP63bVF3-yglTeCmZVmoddE0Cqq5d0nTDq3VozkIi74rFiK4oSK3wF8D_r9MeAzK1X-BUkkTkg-qV0_Vgjw";
-        String token = "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJvcGVuSWQiOiIxIiwibmlja25hbWUiOiLmtYvor5XnlKjmiLciLCJhdmF0YXIiOiJodHRwczovL2F2YXRhcnMyLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzI5NjYyMTE0P3M9NDYwJnY9NCIsImV4cCI6MTU0MzExMTg1MX0.Vf27ms7mRHOg8ptM0NTvgj5umfKae4Hk1lFuUmMjA4gdNLuhlqObp24JDsGfc4jo9yBKbwEdQ7DYOeKrFLybEArNXKZW2qf4XVUKIp2uLTlCw5n8BMSh13gPECjgfUInrMhEFPEB3IiJEhPDhQdiiRSYV4bQcCIS4d31OodqBTXDG0PC-FHc_7tgg3Xm7_ACLgI8JKOXmaSYPBrwGpQpu12-xXgR5DzjGR-TBICH8cY8SfkRexN6WriAYoGqJYFPKkkcnwKS4R6NzD_LGmHsCJ_XQjX5iWCtVz8SSL9tYS6E66NJDRFMWNkvDuwpuR9nefxv_zeqMJOcm6FVEYGZEw";
-        JWTUser solve = tokenSolver.solve(token);
-        System.out.println(solve);
-        return solve;
-    }
-
-    //testNOT_NULL_JSON
-    @GetMapping("/testJson")
-    public Object testNOT_NULL_JSON() {
-        Goods goods = new Goods();
-        goods.setId(1);
-        goods.setLastEdit(new Date());
-        return goods;
-    }
-}

+ 37 - 10
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/UserController.java

@@ -18,11 +18,14 @@ import java.util.LinkedHashMap;
 import java.util.List;
 
 /**
+ * 用户信息相关api
+ *
  * @author nnkwrik
  * @date 18/11/27 20:33
  */
 @RestController
 @Slf4j
+@RequestMapping("/goodsUser")
 public class UserController {
 
     @Autowired
@@ -62,7 +65,7 @@ public class UserController {
      * @param user
      * @return
      */
-    @GetMapping("/collect/list")
+    @GetMapping("/collect")
     public Response<List<Goods>> getCollectList(@JWT(required = true) JWTUser user,
                                                 @RequestParam(value = "page", defaultValue = "1") int page,
                                                 @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -77,7 +80,7 @@ public class UserController {
      * @param user
      * @return
      */
-    @GetMapping("goods/bought")
+    @GetMapping("/bought")
     public Response<List<Goods>> getUserBought(@JWT(required = true) JWTUser user,
                                                @RequestParam(value = "page", defaultValue = "1") int page,
                                                @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -92,7 +95,7 @@ public class UserController {
      * @param user
      * @return
      */
-    @GetMapping("goods/sold")
+    @GetMapping("/sold")
     public Response<List<Goods>> getUserSold(@JWT(required = true) JWTUser user,
                                              @RequestParam(value = "page", defaultValue = "1") int page,
                                              @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -107,7 +110,7 @@ public class UserController {
      * @param user
      * @return
      */
-    @GetMapping("goods/posted")
+    @GetMapping("/posted")
     public Response getUserPosted(@JWT(required = true) JWTUser user,
                                   @RequestParam(value = "page", defaultValue = "1") int page,
                                   @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -116,7 +119,15 @@ public class UserController {
         return Response.ok(vo);
     }
 
-    @GetMapping("goods/user/{userId}")
+    /**
+     * 用户主页
+     *
+     * @param userId
+     * @param page
+     * @param size
+     * @return
+     */
+    @GetMapping("/user/{userId}")
     public Response getUserPage(@PathVariable("userId") String userId,
                                 @RequestParam(value = "page", defaultValue = "1") int page,
                                 @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -134,7 +145,15 @@ public class UserController {
         return Response.ok(vo);
     }
 
-    @GetMapping("goods/user/more/{userId}")
+    /**
+     * 用户主页,获取更多
+     *
+     * @param userId
+     * @param page
+     * @param size
+     * @return
+     */
+    @GetMapping("/user/more/{userId}")
     public Response<LinkedHashMap<String, List<Goods>>> getUserPageMore(@PathVariable("userId") String userId,
                                                                         @RequestParam(value = "page", defaultValue = "1") int page,
                                                                         @RequestParam(value = "size", defaultValue = "10") int size) {
@@ -145,15 +164,23 @@ public class UserController {
         return Response.ok(userHistory);
     }
 
-    @PostMapping("/goods/want/{goodsId}/{sellerId}")
+    /**
+     * 标记为想要,创建chat
+     *
+     * @param user
+     * @param goodsId
+     * @param sellerId
+     * @return
+     */
+    @PostMapping("/want/{goodsId}/{sellerId}")
     public Response<Integer> want(@JWT(required = true) JWTUser user,
                                   @PathVariable("goodsId") int goodsId,
-                                  @PathVariable("sellerId") String sellerId){
+                                  @PathVariable("sellerId") String sellerId) {
 
-        userService.addWant(goodsId,user.getOpenId());
+        userService.addWant(goodsId, user.getOpenId());
         //创建对话
         Integer chatId = imClientHandler.createChat(goodsId, user.getOpenId(), sellerId);
-        log.info("用户id=[{}],将商品id=[{}]标记为想要.并创建对话,chatId=[{}]",user.getOpenId(),goodsId,chatId);
+        log.info("用户id=[{}],将商品id=[{}]标记为想要.并创建对话,chatId=[{}]", user.getOpenId(), goodsId, chatId);
 
         return Response.ok(chatId);
     }

+ 22 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/GoodsMapper.java

@@ -140,6 +140,14 @@ public interface GoodsMapper {
             "order by create_time asc")
     List<GoodsComment> findReplyComment(@Param("reply_comment_id") int commentId);
 
+    @Insert("insert into goods_comment (goods_id, user_id, reply_comment_id, reply_user_id, content)\n" +
+            "values (#{goods_id}, #{user_id}, #{reply_comment_id}, #{reply_user_id}, #{content})")
+    void addComment(@Param("goods_id") int goodsId,
+                    @Param("user_id") String userId,
+                    @Param("reply_comment_id") int replyCommentId,
+                    @Param("reply_user_id") String replyUserId,
+                    @Param("content") String content);
+
 
     @Insert("insert into goods (category_id,\n" +
             "                   seller_id,\n" +
@@ -175,6 +183,11 @@ public interface GoodsMapper {
             "</script>"})
     void addGalleryList(@Param("galleryList") List<GoodsGallery> galleryList);
 
+    /**
+     * 用户卖出的商品
+     * @param sellerId
+     * @return
+     */
     @Select("select COUNT(*)\n" +
             "from goods\n" +
             "where seller_id = #{seller_id}\n" +
@@ -182,9 +195,17 @@ public interface GoodsMapper {
             "  and is_delete = false")
     Integer getSellerHistory(@Param("seller_id") String sellerId);
 
+    /**
+     * 确认是用户发布的商品
+     * @param goodsId
+     * @param userId
+     * @return
+     */
     @Select("SELECT EXISTS(SELECT 1 FROM goods WHERE seller_id=#{seller_id} and id=#{goods_id})")
     Boolean validateSeller(@Param("goods_id") int goodsId, @Param("seller_id") String userId);
 
-    @Delete("delete from goods where id = ${goods_id}")
+    @Update("update goods set is_selling = false where id = #{goods_id}")
     void deleteGoods(@Param("goods_id") int goodsId);
+
+
 }

+ 28 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/IndexMapper.java

@@ -0,0 +1,28 @@
+package io.github.nnkwrik.goodsservice.dao;
+
+import io.github.nnkwrik.goodsservice.model.po.Ad;
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.Channel;
+import io.github.nnkwrik.goodsservice.model.po.Region;
+import org.apache.ibatis.annotations.*;
+
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/16 19:14
+ */
+@Mapper
+public interface IndexMapper {
+
+    @Select("select id,name,url,icon_url from channel order by sort_order asc")
+    List<Channel> findChannel();
+
+    @Select("select id, image_url, link\n" +
+            "from ad\n" +
+            "where enable = true\n" +
+            "order by sort_order asc, `create` desc\n" +
+            "limit 5")
+    List<Ad> findAd();
+
+}

+ 0 - 42
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/OtherMapper.java

@@ -1,42 +0,0 @@
-package io.github.nnkwrik.goodsservice.dao;
-
-import io.github.nnkwrik.goodsservice.model.po.Ad;
-import io.github.nnkwrik.goodsservice.model.po.Category;
-import io.github.nnkwrik.goodsservice.model.po.Channel;
-import io.github.nnkwrik.goodsservice.model.po.Region;
-import org.apache.ibatis.annotations.*;
-
-import java.util.List;
-
-/**
- * @author nnkwrik
- * @date 18/11/16 19:14
- */
-@Mapper
-public interface OtherMapper {
-
-    @Select("select id,name,url,icon_url from channel order by sort_order asc")
-    List<Channel> findChannel();
-
-    @Select("select id, image_url, link\n" +
-            "from ad\n" +
-            "where enable = true\n" +
-            "order by sort_order asc, `create` desc\n" +
-            "limit 5")
-    List<Ad> findAd();
-
-
-    @Insert("insert into goods_comment (goods_id, user_id, reply_comment_id, reply_user_id, content)\n" +
-            "values (#{goods_id}, #{user_id}, #{reply_comment_id}, #{reply_user_id}, #{content})")
-    void addComment(@Param("goods_id") int goodsId,
-                    @Param("user_id") String userId,
-                    @Param("reply_comment_id") int replyCommentId,
-                    @Param("reply_user_id") String replyUserId,
-                    @Param("content") String content);
-
-    @Select("select id,name from region where parent_id=#{parent_id}")
-    List<Region> getRegionByParentId(@Param("parent_id") int parentId);
-
-    @Select("select id,name from category where parent_id=#{parent_id}")
-    List<Category> getCateByParentId(@Param("parent_id") int parentId);
-}

+ 22 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/PostMapper.java

@@ -0,0 +1,22 @@
+package io.github.nnkwrik.goodsservice.dao;
+
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.Region;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/12/16 22:00
+ */
+@Mapper
+public interface PostMapper {
+    @Select("select id,name from region where parent_id=#{parent_id}")
+    List<Region> getRegionByParentId(@Param("parent_id") int parentId);
+
+    @Select("select id,name from category where parent_id=#{parent_id}")
+    List<Category> getCateByParentId(@Param("parent_id") int parentId);
+}

+ 11 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/SearchMapper.java

@@ -28,6 +28,11 @@ public interface SearchMapper {
     List<SearchHistory> findSearchHistory(@Param("user_id") String userId);
 
 
+    /**
+     * 通过关键字列表搜索商品
+     * @param keywords
+     * @return
+     */
     @Select("<script>\n" +
             "select id, `name`, primary_pic_url, price\n" +
             "from goods\n" +
@@ -50,6 +55,12 @@ public interface SearchMapper {
             "where id in (select id from (select id from search_history where user_id = #{user_id} order by search_time asc limit #{limit}) as tmp)")
     void deleteOldHistory(@Param("user_id") String userId, @Param("limit") int limit);
 
+    /**
+     * 之前是否搜索过该关键字
+     * @param userId
+     * @param keyword
+     * @return
+     */
     @Select("SELECT EXISTS(SELECT 1 FROM search_history WHERE user_id = #{user_id}\n" +
             "                                             and keyword = #{keyword})")
     Boolean isExistedHistory(@Param("user_id") String userId, @Param("keyword") String keyword);

+ 5 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/UserMapper.java

@@ -74,6 +74,11 @@ public interface UserMapper {
     List<Goods> getUserPosted(@Param("seller_id") String sellerId);
 
 
+    /**
+     * 搜索用户对商品的操作历史,需要分别搜索发布和卖出
+     * @param userId
+     * @return
+     */
     @Select("select goods.id,\n" +
             "       name,\n" +
             "       primary_pic_url,\n" +

+ 8 - 2
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CatalogPageVo.java

@@ -8,6 +8,8 @@ import lombok.NoArgsConstructor;
 import java.util.List;
 
 /**
+ * 分类页
+ *
  * @author nnkwrik
  * @date 18/11/15 16:18
  */
@@ -15,8 +17,12 @@ import java.util.List;
 @NoArgsConstructor
 @AllArgsConstructor
 public class CatalogPageVo {
-    private List<Category> allCategory;   //其他所有和这个同级的分类
-    private List<Category> subCategory;   //它的所有子分类
+
+    /*其他所有和这个同级的分类*/
+    private List<Category> allCategory;
+
+    /*这个分类的所有子分类*/
+    private List<Category> subCategory;
 }
 
 

+ 8 - 2
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CategoryPageVo.java

@@ -9,6 +9,8 @@ import lombok.NoArgsConstructor;
 import java.util.List;
 
 /**
+ * 通过分类查询商品时的页面
+ *
  * @author nnkwrik
  * @date 18/11/17 20:07
  */
@@ -16,8 +18,12 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 public class CategoryPageVo {
-    private List<Category> brotherCategory; //同一个父分类下的兄弟分类
-    private List<Goods> goodsList;    //当前分类的商品列表
+
+    /*同一个父分类下的兄弟分类*/
+    private List<Category> brotherCategory;
+
+    /*当前分类的商品列表*/
+    private List<Goods> goodsList;
 }
 
 

+ 8 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/CommentVo.java

@@ -7,12 +7,20 @@ import lombok.Data;
 import java.util.List;
 
 /**
+ * 商品评论
+ *
  * @author nnkwrik
  * @date 18/11/23 16:09
  */
 @Data
 public class CommentVo extends GoodsComment {
+
+    /*评论用户信息*/
     private SimpleUser simpleUser;
+
+    /*回复的用户昵称*/
     private String replyUserName;
+
+    /*回复该评论的评论列表*/
     private List<CommentVo> replyList;
 }

+ 9 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/GoodsDetailPageVo.java

@@ -10,6 +10,8 @@ import lombok.NoArgsConstructor;
 import java.util.List;
 
 /**
+ * 商品详情页
+ *
  * @author nnkwrik
  * @date 18/11/17 21:43
  */
@@ -17,12 +19,19 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 public class GoodsDetailPageVo {
+
+    /*商品详情*/
     private Goods info;
+    /*商品图片*/
     private List<GoodsGallery> gallery;
 
+    /*卖家信息*/
     private SimpleUser seller;
+    /*卖家出售过的商品数*/
     private Integer sellerHistory;
 
+    /*评论*/
     private List<CommentVo> comment;
+    /*用户是否收藏*/
     private Boolean userHasCollect;
 }

+ 8 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/IndexPageVo.java

@@ -10,6 +10,8 @@ import lombok.NoArgsConstructor;
 import java.util.List;
 
 /**
+ * 首页
+ *
  * @author nnkwrik
  * @date 18/11/14 20:57
  */
@@ -17,7 +19,13 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 public class IndexPageVo {
+
+    /*首页推荐商品*/
     private List<Goods> indexGoodsList;
+
+    /*广告banner*/
     private List<Ad> banner;
+
+    /*首页展示分类*/
     private List<Channel> channel;
 }

+ 6 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/SearchPageVo.java

@@ -7,6 +7,8 @@ import lombok.NoArgsConstructor;
 import java.util.List;
 
 /**
+ * 搜索主页
+ *
  * @author nnkwrik
  * @date 18/11/18 21:14
  */
@@ -14,6 +16,10 @@ import java.util.List;
 @NoArgsConstructor
 @AllArgsConstructor
 public class SearchPageVo {
+
+    /*搜索历史*/
     private List<String> historyKeywordList;
+
+    /*热门关键字*/
     private List<String> hotKeywordList;
 }

+ 7 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/UserPageVo.java

@@ -10,6 +10,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 
 /**
+ * 用户主页
  * @author nnkwrik
  * @date 18/12/02 15:12
  */
@@ -17,7 +18,13 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 public class UserPageVo {
+
+    /*用户基本信息*/
     private SimpleUser user;
+
+    /*用户历史*/
     private LinkedHashMap<String, List<Goods>> userHistory;
+
+    /*出售过几件商品*/
     private Integer soldCount;
 }

+ 1 - 4
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/GoodsService.java

@@ -1,9 +1,7 @@
 package io.github.nnkwrik.goodsservice.service;
 
-import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
 import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
-import io.github.nnkwrik.goodsservice.model.po.PostExample;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
 
@@ -29,7 +27,6 @@ public interface GoodsService {
 
     List<CommentVo> getGoodsComment(int goodsId);
 
-    void postGoods(PostExample post);
+    void addComment(int goodsId, String userId, int replyCommentId, String replyUserId, String content);
 
-    void deleteGoods(int goodsId, String userId) throws Exception;
 }

+ 0 - 8
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/IndexService.java

@@ -2,7 +2,6 @@ package io.github.nnkwrik.goodsservice.service;
 
 import io.github.nnkwrik.goodsservice.model.po.Category;
 import io.github.nnkwrik.goodsservice.model.po.Goods;
-import io.github.nnkwrik.goodsservice.model.po.Region;
 import io.github.nnkwrik.goodsservice.model.vo.CatalogPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.IndexPageVo;
 
@@ -22,11 +21,4 @@ public interface IndexService {
 
     List<Category> getSubCatalogById(int id);
 
-
-    void addComment(int goodsId, String userId, int replyCommentId, String replyUserId, String content);
-
-    List<Region> getRegionList(int regionId);
-
-    List<Category> getPostCateList(int cateId);
-
 }

+ 22 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/PostService.java

@@ -0,0 +1,22 @@
+package io.github.nnkwrik.goodsservice.service;
+
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.PostExample;
+import io.github.nnkwrik.goodsservice.model.po.Region;
+
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/12/16 21:35
+ */
+public interface PostService {
+
+    void postGoods(PostExample post);
+
+    void deleteGoods(int goodsId, String userId) throws Exception;
+
+    List<Region> getRegionList(int regionId);
+
+    List<Category> getCateList(int cateId);
+}

+ 27 - 44
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/GoodsServiceImpl.java

@@ -2,19 +2,20 @@ package io.github.nnkwrik.goodsservice.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import fangxianyu.innerApi.user.UserClientHandler;
-import io.github.nnkwrik.common.dto.Response;
 import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.common.util.BeanListUtils;
 import io.github.nnkwrik.goodsservice.dao.CategoryMapper;
 import io.github.nnkwrik.goodsservice.dao.GoodsMapper;
-import io.github.nnkwrik.goodsservice.model.po.*;
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.Goods;
+import io.github.nnkwrik.goodsservice.model.po.GoodsComment;
+import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.CommentVo;
 import io.github.nnkwrik.goodsservice.service.GoodsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 
@@ -71,6 +72,13 @@ public class GoodsServiceImpl implements GoodsService {
         return goodsMapper.findGalleryByGoodsId(goodsId);
     }
 
+    /**
+     * 获取与goodsId相关的商品
+     * @param goodsId
+     * @param page
+     * @param size
+     * @return
+     */
     @Override
     public List<Goods> getGoodsRelated(int goodsId, int page, int size) {
         //获取同一子分类下
@@ -86,65 +94,35 @@ public class GoodsServiceImpl implements GoodsService {
         return simpleGoods;
     }
 
-    @Override
-    @Transactional
-    public void postGoods(PostExample post) {
-        List<String> images = post.getImages();
-        List<GoodsGallery> galleryList = new ArrayList<>();
-        post.setPrimaryPicUrl(images.get(0)); //TODO 对PrimaryImage进行压缩
-
-        //insert并获取id
-        goodsMapper.addGoods(post);
-        int goodsId = post.getId();
-
-        images.stream()
-                .forEach(url -> {
-                    GoodsGallery gallery = new GoodsGallery();
-                    gallery.setGoodsId(goodsId);
-                    gallery.setImgUrl(url);
-                    galleryList.add(gallery);
-                });
-        goodsMapper.addGalleryList(galleryList);
-    }
-
-    @Override
-    public void deleteGoods(int goodsId, String userId) throws Exception {
-        if (goodsMapper.validateSeller(goodsId, userId)) {
-            goodsMapper.deleteGoods(goodsId);
-        } else {
-            throw new Exception(Response.SELLER_AND_GOODS_IS_NOT_MATCH + "");
-        }
-    }
-
+    /**
+     * 获取goodsId商品的评论(2级)
+     * @param goodsId
+     * @return
+     */
     @Override
     public List<CommentVo> getGoodsComment(int goodsId) {
         List<GoodsComment> baseCommentPo = goodsMapper.findBaseComment(goodsId);
         if (baseCommentPo == null || baseCommentPo.size() <= 0) return null;
 
-//        List<CommentVo> baseComment = createCommentVoList(baseCommentPo);
         List<CommentVo> baseComment = BeanListUtils.copyListProperties(baseCommentPo, CommentVo.class);
         Set<String> userIdSet = new HashSet<>();
 
-
+        //把回复评论的评论加入baseComment
         baseComment.stream()
-                .map(base -> {
-                    //待会通过用户服务查找评论的用户信息
+                .forEach(base -> {
                     userIdSet.add(base.getUserId());
                     //查找回复评论的评论
                     List<GoodsComment> replyListPo = goodsMapper.findReplyComment(base.getId());
                     List<CommentVo> replyList = BeanListUtils.copyListProperties(replyListPo, CommentVo.class);
+                    replyList.stream().forEach(reply -> userIdSet.add(reply.getUserId()));
                     base.setReplyList(replyList);
-                    return replyList;
-                })
-                .flatMap(reply -> reply.stream())
-                //待会通过用户服务查找回复评论的用户信息
-                .forEach(reply -> userIdSet.add(reply.getUserId()));
-
+                });
 
+        //去用户服务查找评论用户的信息
         Map<String, SimpleUser> simpleUserMap
                 = userClientHandler.getSimpleUserList(new ArrayList<>(userIdSet));
 
-        //加入评论中的用户信息
+        //把用户信息加到评论中
         baseComment.stream().map(base -> setUser4Comment(simpleUserMap, base).getReplyList())
                 .flatMap(List::stream)
                 .forEach(reply -> setUser4Comment(simpleUserMap, reply));
@@ -152,6 +130,11 @@ public class GoodsServiceImpl implements GoodsService {
         return baseComment;
     }
 
+    @Override
+    public void addComment(int goodsId, String userId, int replyCommentId, String replyUserId, String content) {
+        goodsMapper.addComment(goodsId, userId, replyCommentId, replyUserId, content);
+    }
+
 
     private CommentVo setUser4Comment(Map<String, SimpleUser> simpleUserMap, CommentVo comment) {
         SimpleUser userDTO = simpleUserMap.get(comment.getUserId());

+ 13 - 22
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/IndexServiceImpl.java

@@ -3,8 +3,11 @@ package io.github.nnkwrik.goodsservice.service.impl;
 import com.github.pagehelper.PageHelper;
 import io.github.nnkwrik.goodsservice.dao.CategoryMapper;
 import io.github.nnkwrik.goodsservice.dao.GoodsMapper;
-import io.github.nnkwrik.goodsservice.dao.OtherMapper;
-import io.github.nnkwrik.goodsservice.model.po.*;
+import io.github.nnkwrik.goodsservice.dao.IndexMapper;
+import io.github.nnkwrik.goodsservice.model.po.Ad;
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.Channel;
+import io.github.nnkwrik.goodsservice.model.po.Goods;
 import io.github.nnkwrik.goodsservice.model.vo.CatalogPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.IndexPageVo;
 import io.github.nnkwrik.goodsservice.service.IndexService;
@@ -22,20 +25,20 @@ public class IndexServiceImpl implements IndexService {
     @Autowired
     private CategoryMapper categoryMapper;
     @Autowired
-    private OtherMapper otherMapper;
+    private IndexMapper indexMapper;
     @Autowired
     private GoodsMapper goodsMapper;
 
     @Override
     public IndexPageVo getIndex(int page, int size) {
         //广告
-        List<Ad> adList = otherMapper.findAd();
+        List<Ad> adList = indexMapper.findAd();
 
         //分类
-        List<Channel> channelList = otherMapper.findChannel();
+        List<Channel> channelList = indexMapper.findChannel();
 
         //推荐商品
-        List<Goods> goodsList = getIndexMore(page,size);
+        List<Goods> goodsList = getIndexMore(page, size);
 
         return new IndexPageVo(goodsList, adList, channelList);
     }
@@ -48,32 +51,20 @@ public class IndexServiceImpl implements IndexService {
 
     @Override
     public CatalogPageVo getCatalogIndex() {
+        //所有主分类
         List<Category> allCategory = categoryMapper.findMainCategory();
         Category topCategory = allCategory.get(0);
+        //第一个主分类下的所有子分类
         List<Category> subCategory = categoryMapper.findSubCategory(topCategory.getId());
 
-        return new CatalogPageVo(allCategory,subCategory);
+        return new CatalogPageVo(allCategory, subCategory);
     }
 
     @Override
     public List<Category> getSubCatalogById(int id) {
+        //主分类=id下的所有子分类
         return categoryMapper.findSubCategory(id);
     }
 
-    @Override
-    public void addComment(int goodsId, String userId, int replyCommentId, String replyUserId, String content) {
-        otherMapper.addComment(goodsId, userId, replyCommentId, replyUserId, content);
-    }
-
-    @Override
-    public List<Region> getRegionList(int regionId) {
-        return otherMapper.getRegionByParentId(regionId);
-    }
-
-    @Override
-    public List<Category> getPostCateList(int cateId) {
-        return otherMapper.getCateByParentId(cateId);
-    }
-
 
 }

+ 71 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/PostServiceImpl.java

@@ -0,0 +1,71 @@
+package io.github.nnkwrik.goodsservice.service.impl;
+
+import io.github.nnkwrik.common.dto.Response;
+import io.github.nnkwrik.goodsservice.dao.GoodsMapper;
+import io.github.nnkwrik.goodsservice.dao.PostMapper;
+import io.github.nnkwrik.goodsservice.model.po.Category;
+import io.github.nnkwrik.goodsservice.model.po.GoodsGallery;
+import io.github.nnkwrik.goodsservice.model.po.PostExample;
+import io.github.nnkwrik.goodsservice.model.po.Region;
+import io.github.nnkwrik.goodsservice.service.PostService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/12/16 21:37
+ */
+@Service
+public class PostServiceImpl implements PostService {
+
+    @Autowired
+    private GoodsMapper goodsMapper;
+
+    @Autowired
+    private PostMapper postMapper;
+
+    @Override
+    @Transactional
+    public void postGoods(PostExample post) {
+        List<String> images = post.getImages();
+        List<GoodsGallery> galleryList = new ArrayList<>();
+        post.setPrimaryPicUrl(images.get(0)); //TODO 对PrimaryImage进行压缩
+
+        //添加到goods表并获取id
+        goodsMapper.addGoods(post);
+        int goodsId = post.getId();
+
+        //把照片添加到Gallery表
+        images.stream()
+                .forEach(url -> {
+                    GoodsGallery gallery = new GoodsGallery();
+                    gallery.setGoodsId(goodsId);
+                    gallery.setImgUrl(url);
+                    galleryList.add(gallery);
+                });
+        goodsMapper.addGalleryList(galleryList);
+    }
+
+    @Override
+    public void deleteGoods(int goodsId, String userId) throws Exception {
+        if (goodsMapper.validateSeller(goodsId, userId)) {
+            goodsMapper.deleteGoods(goodsId);
+        } else {
+            throw new Exception(Response.SELLER_AND_GOODS_IS_NOT_MATCH + "");
+        }
+    }
+
+    @Override
+    public List<Region> getRegionList(int regionId) {
+        return postMapper.getRegionByParentId(regionId);
+    }
+
+    @Override
+    public List<Category> getCateList(int cateId) {
+        return postMapper.getCateByParentId(cateId);
+    }
+}

+ 1 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/SearchServiceImpl.java

@@ -45,6 +45,7 @@ public class SearchServiceImpl implements SearchService {
     @Transactional
     public void updateUserHistory(String openId, String keyword) {
         if (searchMapper.isExistedHistory(openId, keyword)) {
+            //之前搜索过,更新搜索时间
             searchMapper.updateSearchTime(openId, keyword);
         } else {
             searchMapper.insertHistory(openId, keyword);

+ 10 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/UserServiceImpl.java

@@ -67,13 +67,21 @@ public class UserServiceImpl implements UserService {
         return userMapper.getUserPosted(userId);
     }
 
-
+    /**
+     * 用户历史
+     *
+     * @param userId
+     * @param page
+     * @param size
+     * @return key=日期 , value=对哪些商品进行了操作
+     */
     @Override
     public LinkedHashMap<String, List<Goods>> getUserHistoryList(String userId, int page, int size) {
         PageHelper.startPage(page, size);
         List<GoodsExample> userHistoryList = userMapper.getUserHistoryList(userId);
         if (userHistoryList.size() < 1) return null;
 
+        //把数据分割成 K=日期,V=商品List 的map
         LinkedHashMap<String, List<Goods>> result = new LinkedHashMap<>();
 
         LocalDate lastDay = getDay(userHistoryList.get(0).getTime());
@@ -83,6 +91,7 @@ public class UserServiceImpl implements UserService {
             if (lastDay.equals(getDay(goods.getTime()))) {
                 lastValue.add(goods);
             } else {
+                //不是同一天操作的商品.把之前的加入map,设置为新的key
                 String key = dateFormat(lastDay);
                 result.put(key, lastValue);
                 lastDay = getDay(goods.getTime());

+ 0 - 6
inner-api/pom.xml

@@ -20,12 +20,6 @@
 
     <dependencies>
 
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
-
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>

+ 2 - 0
inner-api/src/main/java/fangxianyu/innerApi/goods/GoodsClient.java

@@ -12,6 +12,8 @@ import java.util.List;
 import java.util.Map;
 
 /**
+ * goods-service的内部api
+ *
  * @author nnkwrik
  * @date 18/12/07 21:08
  */

+ 1 - 1
inner-api/src/main/java/fangxianyu/innerApi/goods/GoodsClientHandler.java

@@ -33,7 +33,7 @@ public class GoodsClientHandler {
 
     public Map<Integer, SimpleGoods> getSimpleGoodsList(List<Integer> goodsIdList) {
         log.info("从商品服务查询商品的简单信息");
-        if (goodsIdList == null || goodsIdList.size() < 1){
+        if (goodsIdList == null || goodsIdList.size() < 1) {
             log.info("商品idList为空,返回空的结果");
             return new HashMap<>();
         }

+ 2 - 0
inner-api/src/main/java/fangxianyu/innerApi/im/ImClient.java

@@ -7,6 +7,8 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 /**
+ * im-service的内部api
+ *
  * @author nnkwrik
  * @date 18/12/08 19:23
  */

+ 1 - 1
inner-api/src/main/java/fangxianyu/innerApi/user/UserClient.java

@@ -12,7 +12,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * 使用user-service的api
+ * user-service的内部api
  *
  * @author nnkwrik
  * @date 18/11/23 18:06

+ 0 - 0
inner-api/src/main/resources/application.properties


+ 0 - 22
user-service/pom.xml

@@ -31,10 +31,6 @@
             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
         </dependency>
 
-        <!--<dependency>-->
-            <!--<groupId>org.springframework.cloud</groupId>-->
-            <!--<artifactId>spring-cloud-starter-openfeign</artifactId>-->
-        <!--</dependency>-->
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -42,30 +38,12 @@
             <scope>test</scope>
         </dependency>
 
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-        </dependency>
-
-
-        <!--<dependency>-->
-            <!--<groupId>com.github.binarywang</groupId>-->
-            <!--<artifactId>weixin-java-miniapp</artifactId>-->
-            <!--<version>3.2.0</version>-->
-        <!--</dependency>-->
-
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <scope>provided</scope>
         </dependency>
 
-        <dependency>
-            <groupId>com.auth0</groupId>
-            <artifactId>java-jwt</artifactId>
-            <version>3.4.1</version>
-        </dependency>
-
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>

+ 0 - 1
user-service/src/main/java/io/github/nnkwrik/userservice/UserServiceApplication.java

@@ -6,7 +6,6 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 
 @SpringBootApplication
 @EnableDiscoveryClient
-//@EnableFeignClients
 public class UserServiceApplication {
 
     public static void main(String[] args) {

+ 0 - 22
user-service/src/main/java/io/github/nnkwrik/userservice/client/AuthClient.java

@@ -1,22 +0,0 @@
-//package io.github.nnkwrik.userservice.client;
-//
-//import io.github.nnkwrik.common.dto.AuthDTO;
-//import io.github.nnkwrik.userservice.util.Response;
-//import org.springframework.cloud.openfeign.FeignClient;
-//import org.springframework.web.bind.annotation.GetMapping;
-//import org.springframework.web.bind.annotation.PostMapping;
-//import org.springframework.web.bind.annotation.RequestBody;
-//
-///**
-// * @author nnkwrik
-// * @date 18/11/12 17:44
-// */
-//@FeignClient(name = "auth-service")
-//public interface AuthClient {
-//
-//    @GetMapping("/test")
-//    String test();
-//
-//    @PostMapping("/login")
-//    Response login(@RequestBody AuthDTO authDTO);
-//}

+ 16 - 1
user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserServiceController.java

@@ -6,12 +6,15 @@ import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.userservice.service.UserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 import java.util.Map;
 
 /**
+ * 对于内部服务的api
+ *
  * @author nnkwrik
  * @date 18/11/10 21:51
  */
@@ -25,6 +28,12 @@ public class UserServiceController {
     private UserService userService;
 
 
+    /**
+     * 查询用户基本信息
+     *
+     * @param openId
+     * @return
+     */
     @GetMapping("/simpleUser/{openId}")
     Response<SimpleUser> getSimpleUser(@PathVariable("openId") String openId) {
         SimpleUser dto = userService.getSimpleUser(openId);
@@ -34,12 +43,18 @@ public class UserServiceController {
         return Response.ok(dto);
     }
 
+    /**
+     * 查询用户基本信息列表
+     *
+     * @param openIdList
+     * @return
+     */
     @GetMapping("/simpleUserList")
     Response<Map<String, SimpleUser>> getSimpleUserList(@RequestParam List<String> openIdList) {
 
         Map<String, SimpleUser> dtoMap = userService.getSimpleUserList(openIdList);
         log.info("其他服务通过openId : [{}] 查询用户基本信息,查询结果:{}", openIdList, dtoMap);
-        if (dtoMap == null)
+        if (ObjectUtils.isEmpty(dtoMap))
             return Response.fail(Response.USER_IS_NOT_EXIST, "不存在的用户");
         return Response.ok(dtoMap);
     }

+ 9 - 9
user-service/src/main/java/io/github/nnkwrik/userservice/dao/UserMapper.java

@@ -1,7 +1,10 @@
 package io.github.nnkwrik.userservice.dao;
 
 import io.github.nnkwrik.userservice.model.User;
-import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 
@@ -12,20 +15,16 @@ import java.util.List;
 @Mapper
 public interface UserMapper {
 
-//    @Insert("insert into user (open_id,nick_name,avatar_url,gender,language,city,province,country) " +
-//            "values (#{openId},#{nickName},#{avatarUrl},#{gender}," +
-//            "#{language},#{city},#{province},#{country})")
-////    @SelectKey(resultType = Integer.class, before = false, keyProperty = "id", statement = "SELECT LAST_INSERT_ID()")
-//    void register(User user);
 
     /**
      * 注册用户:存在相同的openId时update,不存在则insert
+     *
      * @param user
      */
     @Insert("insert into user (open_id, nick_name, avatar_url, gender, language, city, province, country)\n" +
             "values (#{openId},#{nickName},#{avatarUrl},#{gender},#{language},#{city},#{province},#{country})\n" +
             "on duplicate key update nick_name = #{nickName} , " +
-            "                                  avatar_url = #{avatarUrl} , gender = #{gender} , language = #{language} ,"+
+            "                                  avatar_url = #{avatarUrl} , gender = #{gender} , language = #{language} ," +
             "                                  city = #{city} , province = #{province} , country = #{country}")
     void register(User user);
 
@@ -35,13 +34,14 @@ public interface UserMapper {
             "where open_id = #{openId}")
     User getSimpleUser(@Param("openId") String openId);
 
-    @Select("<script>\n"+
+
+    @Select("<script>\n" +
             "select open_id, nick_name, avatar_url, register_time\n" +
             "from user\n" +
             "where open_id in" +
             "    <foreach item='item' collection='openIdList' open='(' separator=',' close=')'>\n" +
             "    #{item}\n" +
-            "    </foreach>\n"+
+            "    </foreach>\n" +
             "</script>")
     List<User> getSimpleUserList(@Param("openIdList") List<String> openIdList);
 }

+ 0 - 2
user-service/src/main/java/io/github/nnkwrik/userservice/model/User.java

@@ -1,9 +1,7 @@
 package io.github.nnkwrik.userservice.model;
 
 import lombok.Data;
-import org.apache.ibatis.annotations.Param;
 
-import javax.validation.constraints.NotNull;
 import java.util.Date;
 
 /**

+ 6 - 1
user-service/src/main/java/io/github/nnkwrik/userservice/mq/RegisterStreamReceiver.java

@@ -22,8 +22,13 @@ public class RegisterStreamReceiver {
     @Autowired
     private UserService userService;
 
+    /**
+     * 通过消息队列注册用户
+     *
+     * @param userData
+     */
     @StreamListener(target = UserRegisterStream.INPUT)
-    public void receive(String userData){
+    public void receive(String userData) {
         if (userData == null) return;
         User user = JsonUtil.fromJson(userData, User.class);
 

+ 0 - 4
user-service/src/main/resources/application.yml

@@ -2,9 +2,6 @@ eureka:
   client:
     service-url:
       defaultZone: http://localhost:8801/eureka/
-#  instance:
-#    hostname: clientName
-
 
 spring:
   application:
@@ -35,6 +32,5 @@ logging:
     org.springframework.web: info
     io.github.nnkwrik.userservice: debug
 
-
 server:
   port: 8802

+ 2 - 0
zuul/src/main/java/com/nnkwrik/zuul/ZuulApplication.java

@@ -2,10 +2,12 @@ package com.nnkwrik.zuul;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
 
 @SpringBootApplication
 @EnableZuulProxy
+@EnableEurekaClient
 public class ZuulApplication {
     public static void main(String[] args) {
         SpringApplication.run(ZuulApplication.class, args);

+ 34 - 23
zuul/src/main/resources/application.yml

@@ -9,17 +9,24 @@ spring:
     name: api-gateway
 zuul:
   ribbon:
-    ReadTimeout: 60000
+    ReadTimeout: 60000  #超时时间
     ConnectTimeout: 60000
   routes:
+
     #auth-service
     auth:
       path: /auth/**
       serviceId: auth-service
       strip-prefix: false
-      #过滤hearder的黑名单,默认为 sensitiveHeaders:Cookie,Set-Cookie,Authorization
-      #手动把它设置为空,否则包含JWT信息的Authorization头无法传递到下游服务
+      sensitiveHeaders: #需要手动把它设置为空,否则包含JWT信息的Authorization头无法传递到下游服务
+
+    #chat
+    chat:
+      path: /chat/**
+      serviceId: im-service
+      strip-prefix: false
       sensitiveHeaders:
+
     #goods-service
     goods:
       path: /goods/**
@@ -41,32 +48,36 @@ zuul:
       serviceId: goods-service
       strip-prefix: false
       sensitiveHeaders:
-    collect:
-      path: /collect/**
-      serviceId: goods-service
-      strip-prefix: false
-      sensitiveHeaders:
-    comment:
-      path: /comment/**
+    post:
+      path: /post/**
       serviceId: goods-service
       strip-prefix: false
       sensitiveHeaders:
-    region:
-      path: /region/**
+    goodsUser:
+      path: /goodsUser/**
       serviceId: goods-service
       strip-prefix: false
       sensitiveHeaders:
-    category:
-      path: /category/**
-      serviceId: goods-service
-      strip-prefix: false
-      sensitiveHeaders:
-    #chat
-    chat:
-      path: /chat/**
-      serviceId: im-service
-      strip-prefix: false
-      sensitiveHeaders:
+#    collect:
+#      path: /collect/**
+#      serviceId: goods-service
+#      strip-prefix: false
+#      sensitiveHeaders:
+#    comment:
+#      path: /comment/**
+#      serviceId: goods-service
+#      strip-prefix: false
+#      sensitiveHeaders:
+#    region:
+#      path: /region/**
+#      serviceId: goods-service
+#      strip-prefix: false
+#      sensitiveHeaders:
+#    category:
+#      path: /category/**
+#      serviceId: goods-service
+#      strip-prefix: false
+#      sensitiveHeaders: