Răsfoiți Sursa

:musical_note: 评论功能,商品和用户服务后端交互

nnkwrik 6 ani în urmă
părinte
comite
ddeeb510a3
29 a modificat fișierele cu 428 adăugiri și 103 ștergeri
  1. 0 4
      common/pom.xml
  2. 13 0
      common/src/main/java/io/github/nnkwrik/common/dto/Response.java
  3. 17 0
      common/src/main/java/io/github/nnkwrik/common/dto/SimpleUser.java
  4. 9 4
      goods-service/pom.xml
  5. 4 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/GoodsServiceApplication.java
  6. 34 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/client/UserClient.java
  7. 16 9
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsController.java
  8. 1 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/IndexController.java
  9. 18 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/GoodsMapper.java
  10. 7 2
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/OtherMapper.java
  11. 1 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/Goods.java
  12. 19 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/GoodsComment.java
  13. 15 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/UserPreference.java
  14. 4 2
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/GoodsDetailPageVo.java
  15. 25 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/inner/CommentVo.java
  16. 2 1
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/inner/GoodsDetailVo.java
  17. 5 0
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/GoodsService.java
  18. 90 6
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/GoodsServiceImpl.java
  19. 24 3
      goods-service/src/main/java/io/github/nnkwrik/goodsservice/util/PO2VO.java
  20. 4 0
      goods-service/src/main/resources/application.yml
  21. 4 4
      user-service/pom.xml
  22. 2 1
      user-service/src/main/java/io/github/nnkwrik/userservice/UserServiceApplication.java
  23. 0 64
      user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserController.java
  24. 49 0
      user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserServiceController.java
  25. 19 1
      user-service/src/main/java/io/github/nnkwrik/userservice/dao/UserMapper.java
  26. 2 0
      user-service/src/main/java/io/github/nnkwrik/userservice/model/User.java
  27. 8 0
      user-service/src/main/java/io/github/nnkwrik/userservice/service/UserService.java
  28. 27 0
      user-service/src/main/java/io/github/nnkwrik/userservice/service/impl/UserServiceImpl.java
  29. 9 0
      user-service/src/main/resources/application.yml

+ 0 - 4
common/pom.xml

@@ -45,10 +45,6 @@
             <artifactId>java-jwt</artifactId>
             <version>3.4.1</version>
         </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-amqp</artifactId>
-        </dependency>
 
         <dependency>
             <groupId>org.springframework.cloud</groupId>

+ 13 - 0
common/src/main/java/io/github/nnkwrik/common/dto/Response.java

@@ -9,13 +9,22 @@ import lombok.Data;
 @Data
 public class Response<T> {
 
+    //auth
     public static final int WRONG_JS_CODE = 3001;
     public static final int CHECK_USER_WITH_SESSION_FAIL = 3002;
 
+    //goods
+    public static final int OPEN_ID_IS_EMPTY = 4001;
+
+    //user
+    public static final int USER_IS_NOT_EXIST = 3001;
+
     private int errno;
     private String errmsg;
     private T data;
 
+    public Response() {
+    }
 
     public Response(T data) {
         this.data = data;
@@ -27,10 +36,14 @@ public class Response<T> {
     }
 
 
+    public static Response ok() {
+        return new Response();
+    }
     public static <T> Response ok(T data) {
         return new Response(data);
     }
 
+
     public static Response fail(int errno, String errmsg) {
         return new Response(errno, errmsg);
     }

+ 17 - 0
common/src/main/java/io/github/nnkwrik/common/dto/SimpleUser.java

@@ -0,0 +1,17 @@
+package io.github.nnkwrik.common.dto;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/23 18:07
+ */
+@Data
+public class SimpleUser {
+    private String openId;
+    private String nickName;
+    private String avatarUrl;
+    private Date registerTime;
+}

+ 9 - 4
goods-service/pom.xml

@@ -26,10 +26,15 @@
     </properties>
 
     <dependencies>
-        <!--<dependency>-->
-            <!--<groupId>org.springframework.cloud</groupId>-->
-            <!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
-        <!--</dependency>-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <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>

+ 4 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/GoodsServiceApplication.java

@@ -2,8 +2,12 @@ package io.github.nnkwrik.goodsservice;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 @SpringBootApplication(scanBasePackages = "io.github.nnkwrik")
+@EnableEurekaClient
+@EnableFeignClients
 public class GoodsServiceApplication {
 
     public static void main(String[] args) {

+ 34 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/client/UserClient.java

@@ -0,0 +1,34 @@
+package io.github.nnkwrik.goodsservice.client;
+
+import io.github.nnkwrik.common.dto.Response;
+import io.github.nnkwrik.common.dto.SimpleUser;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/23 18:06
+ */
+@FeignClient(name = "user-service")
+@RequestMapping("/user-service")
+public interface UserClient {
+
+    default Response<SimpleUser> getSimpleUser(String userId) {
+        Map<String, String> json = new HashMap<>();
+        json.put("openId", userId);
+        return getSimpleUser(json);
+    }
+
+    //json 只包含 openId = "..." 这一项。但由于是String,直接传输会变成text/plain。索性包装成map
+    @PostMapping("/simpleUser")
+    Response<SimpleUser> getSimpleUser(@RequestBody Map<String, String> openId);
+
+    @PostMapping("/simpleUserList")
+    Response<HashMap<String, SimpleUser>> getSimpleUserList(@RequestBody List<String> openIdList);
+}

+ 16 - 9
goods-service/src/main/java/io/github/nnkwrik/goodsservice/controller/GoodsController.java

@@ -1,21 +1,20 @@
 package io.github.nnkwrik.goodsservice.controller;
 
+import io.github.nnkwrik.common.dto.Response;
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.GoodsDetailPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.GoodsRelatedVo;
-import io.github.nnkwrik.common.dto.Response;
 import io.github.nnkwrik.goodsservice.model.vo.inner.CategoryVo;
+import io.github.nnkwrik.goodsservice.model.vo.inner.CommentVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GalleryVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GoodsDetailVo;
 import io.github.nnkwrik.goodsservice.service.GoodsService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
-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 org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author nnkwrik
@@ -57,14 +56,22 @@ public class GoodsController {
 
     }
 
-    @GetMapping("/goods/detail/{goodsId}")
-    public Response<GoodsDetailPageVo> getGoodsDetail(@PathVariable("goodsId") int goodsId) {
+    @PostMapping("/goods/detail/{goodsId}")
+    public Response<GoodsDetailPageVo> getGoodsDetail(@PathVariable("goodsId") int goodsId,
+                                                      @RequestBody Map<String, String> json) {
         //更新浏览次数
         GoodsDetailVo goodsDetail = goodsService.getGoodsDetail(goodsId);
+        if (goodsDetail == null) {
+            log.info("搜索goodsId = 【{}】的详情时出错", goodsId);
+            return Response.fail(Response.USER_IS_NOT_EXIST, "无法搜索到商品卖家的信息");
+        }
         List<GalleryVo> goodsGallery = goodsService.getGoodsGallery(goodsId);
-        //TODO comment
+        List<CommentVo> comment = goodsService.getGoodsComment(goodsId);
 
-        GoodsDetailPageVo vo = new GoodsDetailPageVo(goodsDetail, goodsGallery);
+        boolean userHasCollect = false;
+        if (json.get("openId") != null)
+            userHasCollect = goodsService.userHasCollect(json.get("openId"), goodsId);
+        GoodsDetailPageVo vo = new GoodsDetailPageVo(goodsDetail, goodsGallery, comment, userHasCollect);
         log.debug("浏览商品详情 : {}", vo);
 
         return Response.ok(vo);

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

@@ -1,8 +1,8 @@
 package io.github.nnkwrik.goodsservice.controller;
 
+import io.github.nnkwrik.common.dto.Response;
 import io.github.nnkwrik.goodsservice.model.vo.CatalogVo;
 import io.github.nnkwrik.goodsservice.model.vo.IndexVO;
-import io.github.nnkwrik.common.dto.Response;
 import io.github.nnkwrik.goodsservice.service.IndexService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;

+ 18 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/GoodsMapper.java

@@ -1,6 +1,7 @@
 package io.github.nnkwrik.goodsservice.dao;
 
 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 org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -118,4 +119,21 @@ public interface GoodsMapper {
     void addBrowseCount(@Param("goodsId") int id, @Param("add") int add);
 
 
+    @Select("select id, user_id, content, create_time\n" +
+            "from goods_comment\n" +
+            "where reply_comment_id = 0\n" +
+            "  and is_delete = false\n" +
+            "  and goods_id = #{goodsId}\n" +
+            "order by create_time asc")
+    List<GoodsComment> findBaseComment(@Param("goodsId") int goodsId);
+
+
+    @Select("select id, user_id, reply_user_id, content, create_time\n" +
+            "from goods_comment\n" +
+            "where reply_comment_id = #{reply_comment_id}\n" +
+            "  and is_delete = false\n" +
+            "order by create_time asc")
+    List<GoodsComment> findReplyComment(@Param("reply_comment_id") int commentId);
+
+
 }

+ 7 - 2
goods-service/src/main/java/io/github/nnkwrik/goodsservice/dao/OtherMapper.java

@@ -2,11 +2,9 @@ package io.github.nnkwrik.goodsservice.dao;
 
 import io.github.nnkwrik.goodsservice.model.po.Ad;
 import io.github.nnkwrik.goodsservice.model.po.Channel;
-import io.github.nnkwrik.goodsservice.model.po.SearchHistory;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
-import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 
@@ -27,4 +25,11 @@ public interface OtherMapper {
             "limit 5")
     List<Ad> findAd();
 
+    @Select("SELECT EXISTS(SELECT 1 FROM user_preference WHERE type = 1 and user_id = #{user_id} and goods_id = #{goods_id})")
+    Boolean userHasCollect(@Param("user_id") String userId, @Param("goods_id") int goodsId);
+
+
+    @Select("SELECT EXISTS(SELECT 1 FROM user_preference WHERE type = 2 and user_id = #{user_id} and goods_id = #{goods_id})")
+    Boolean userHasWant(@Param("user_id") String userId, @Param("goods_id") int goodsId);
+
 }

+ 1 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/Goods.java

@@ -12,7 +12,7 @@ import java.util.Date;
 public class Goods {
     private Integer id;
     private Integer categoryId;
-    private Integer sellerId;
+    private String sellerId;
     private String name;
     private Double price;
     private Double marketPrice;

+ 19 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/GoodsComment.java

@@ -0,0 +1,19 @@
+package io.github.nnkwrik.goodsservice.model.po;
+
+import lombok.Data;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/23 16:05
+ */
+@Data
+public class GoodsComment {
+    private Integer id;
+    private Integer goodsId;
+    private String userId;
+    private Integer replyCommentId;
+    private String replyUserId;
+    private String content;
+    private boolean isDelete;
+    private Data createTime;
+}

+ 15 - 0
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/po/UserPreference.java

@@ -0,0 +1,15 @@
+package io.github.nnkwrik.goodsservice.model.po;
+
+import lombok.Data;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/23 21:32
+ */
+@Data
+public class UserPreference {
+    private Integer id;
+    private String userId;
+    private Integer type;   //1:收藏,2:想要
+    private Data createTime;
+}

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

@@ -1,5 +1,7 @@
 package io.github.nnkwrik.goodsservice.model.vo;
 
+import io.github.nnkwrik.common.dto.SimpleUser;
+import io.github.nnkwrik.goodsservice.model.vo.inner.CommentVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GalleryVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GoodsDetailVo;
 import lombok.AllArgsConstructor;
@@ -18,6 +20,6 @@ import java.util.List;
 public class GoodsDetailPageVo {
     private GoodsDetailVo info;
     private List<GalleryVo> gallery;
-    //TODO comment
-    //TODO userHasCollect
+    private List<CommentVo> comment;
+    private Boolean userHasCollect;
 }

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

@@ -0,0 +1,25 @@
+package io.github.nnkwrik.goodsservice.model.vo.inner;
+
+import io.github.nnkwrik.common.dto.SimpleUser;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/23 16:09
+ */
+@Data
+public class CommentVo {
+    private Integer id;
+    private Integer goods_id;
+    private String user_id;
+    private Integer reply_comment_id;
+    private String reply_user_id;
+    private String content;
+    private boolean is_delete;
+    private String create_time;
+
+    SimpleUser simpleUser;
+    List<CommentVo> replyList;
+}

+ 2 - 1
goods-service/src/main/java/io/github/nnkwrik/goodsservice/model/vo/inner/GoodsDetailVo.java

@@ -1,5 +1,6 @@
 package io.github.nnkwrik.goodsservice.model.vo.inner;
 
+import io.github.nnkwrik.common.dto.SimpleUser;
 import lombok.Data;
 
 /**
@@ -14,5 +15,5 @@ public class GoodsDetailVo extends GoodsSimpleVo {
     private Integer want_count;
     private Integer browse_count;
     private String last_edit;
-    //TODO seller
+    private SimpleUser seller;
 }

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

@@ -2,6 +2,7 @@ package io.github.nnkwrik.goodsservice.service;
 
 import io.github.nnkwrik.goodsservice.model.vo.CategoryPageVo;
 import io.github.nnkwrik.goodsservice.model.vo.GoodsRelatedVo;
+import io.github.nnkwrik.goodsservice.model.vo.inner.CommentVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GalleryVo;
 import io.github.nnkwrik.goodsservice.model.vo.inner.GoodsDetailVo;
 
@@ -22,4 +23,8 @@ public interface GoodsService {
     List<GalleryVo> getGoodsGallery(int goodsId);
 
     GoodsRelatedVo getGoodsRelated(int goodsId);
+
+    List<CommentVo> getGoodsComment(int goodsId);
+
+    Boolean userHasCollect(String userId, int goodsId);
 }

+ 90 - 6
goods-service/src/main/java/io/github/nnkwrik/goodsservice/service/impl/GoodsServiceImpl.java

@@ -1,30 +1,35 @@
 package io.github.nnkwrik.goodsservice.service.impl;
 
 import com.github.pagehelper.PageHelper;
+import io.github.nnkwrik.common.dto.Response;
+import io.github.nnkwrik.common.dto.SimpleUser;
+import io.github.nnkwrik.goodsservice.client.UserClient;
 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.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.GoodsRelatedVo;
-import io.github.nnkwrik.goodsservice.model.vo.inner.CategoryVo;
-import io.github.nnkwrik.goodsservice.model.vo.inner.GalleryVo;
-import io.github.nnkwrik.goodsservice.model.vo.inner.GoodsDetailVo;
-import io.github.nnkwrik.goodsservice.model.vo.inner.GoodsSimpleVo;
+import io.github.nnkwrik.goodsservice.model.vo.inner.*;
 import io.github.nnkwrik.goodsservice.service.GoodsService;
 import io.github.nnkwrik.goodsservice.util.PO2VO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-import java.util.Optional;
+import javax.sound.midi.Soundbank;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @author nnkwrik
  * @date 18/11/17 21:15
  */
 @Service
+@Slf4j
 public class GoodsServiceImpl implements GoodsService {
 
     @Autowired
@@ -33,6 +38,12 @@ public class GoodsServiceImpl implements GoodsService {
     @Autowired
     private GoodsMapper goodsMapper;
 
+    @Autowired
+    private UserClient userClient;
+
+    @Autowired
+    private OtherMapper otherMapper;
+
 
     @Override
     public CategoryPageVo getGoodsAndBrotherCateById(int id, int page, int size) {
@@ -59,6 +70,14 @@ public class GoodsServiceImpl implements GoodsService {
     public GoodsDetailVo getGoodsDetail(int id) {
         Goods detailGoods = goodsMapper.findDetailGoodsByGoodsId(id);
         GoodsDetailVo goodsDetailVo = PO2VO.convert(PO2VO.goodsDetail, detailGoods);
+
+        Response<SimpleUser> response = userClient.getSimpleUser(detailGoods.getSellerId());
+        if (response.getErrno() == Response.USER_IS_NOT_EXIST) {
+            log.info("没有搜索到商品卖家的相关信息");
+            return null;
+        }
+        goodsDetailVo.setSeller(response.getData());
+
         return goodsDetailVo;
     }
 
@@ -88,5 +107,70 @@ public class GoodsServiceImpl implements GoodsService {
         return new GoodsRelatedVo(goodsSimpleVo);
     }
 
+    @Override
+    public Boolean userHasCollect(String userId, int goodsId) {
+        return otherMapper.userHasCollect(userId, goodsId);
+    }
+
+    @Override
+    public List<CommentVo> getGoodsComment(int goodsId) {
+        List<GoodsComment> baseComment = goodsMapper.findBaseComment(goodsId);
+        if (baseComment == null || baseComment.size() <= 0) return null;
+        Set<String> userIdSet = new HashSet<>();
+        List<CommentVo> voList = baseComment.stream()
+                .map(base -> {
+                    System.out.println(base);
+                    CommentVo baseVo = PO2VO.convert(PO2VO.comment, base);
+                    userIdSet.add(baseVo.getUser_id());
+                    return baseVo;
+                }).map(baseVo -> {
+                    //查找回复评论的评论
+                    List<GoodsComment> replyComment = goodsMapper.findReplyComment(baseVo.getId());
+                    List<CommentVo> replyCommentVo = PO2VO.convertList(PO2VO.comment, replyComment);
+                    replyCommentVo.stream()
+                            .forEach(reply -> userIdSet.add(reply.getUser_id()));
+                    baseVo.setReplyList(replyCommentVo);
+                    return baseVo;
+                })
+                .collect(Collectors.toList());
+
+        Map<String, SimpleUser> simpleUserMap
+                = getSimpleUserList(userIdSet.stream().collect(Collectors.toList()));
+
+        voList.stream().map(base -> setUser4Comment(simpleUserMap, base).getReplyList())
+                .flatMap(List::stream)
+                .forEach(reply -> setUser4Comment(simpleUserMap, reply));
+
+        return voList;
+    }
+
+
+    private Map<String, SimpleUser> getSimpleUserList(List<String> openIdList) {
+        log.info("从用户服务查询用户的简单信息");
+        Response<HashMap<String, SimpleUser>> response = userClient.getSimpleUserList(openIdList);
+        if (response.getErrno() == Response.USER_IS_NOT_EXIST) {
+            log.info("没有查到匹配openId的用户");
+            return new HashMap<>();
+        }
+        return response.getData();
+    }
+
+    private CommentVo setUser4Comment(Map<String, SimpleUser> simpleUserMap, CommentVo comment) {
+        SimpleUser userDTO = simpleUserMap.get(comment.getUser_id());
+        if (userDTO == null) {
+            comment.setSimpleUser(unknownUser());
+        } else {
+            comment.setSimpleUser(userDTO);
+        }
+        return comment;
+    }
+
+    private SimpleUser unknownUser() {
+        SimpleUser unknownUser = new SimpleUser();
+        unknownUser.setNickName("用户不存在");
+        unknownUser.setAvatarUrl("https://i.postimg.cc/RVbDV5fN/anonymous.png");
+        return unknownUser;
+    }
+
 
 }

+ 24 - 3
goods-service/src/main/java/io/github/nnkwrik/goodsservice/util/PO2VO.java

@@ -10,6 +10,8 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
+ * TODO 后期前后端全改成camel
+ *
  * @author nnkwrik
  * @date 18/11/15 18:00
  */
@@ -58,12 +60,14 @@ public class PO2VO {
                 vo.setWant_count(po.getWantCount());
                 vo.setBrowse_count(po.getBrowseCount());
                 //Date转String
-                SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-                vo.setLast_edit(formatter.format(po.getLastEdit()));
+                if (po.getLastEdit() != null) {
+                    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+                    vo.setLast_edit(formatter.format(po.getLastEdit()));
+                }
                 return vo;
             };
 
-    public static Function<GoodsGallery,GalleryVo > gallery =
+    public static Function<GoodsGallery, GalleryVo> gallery =
             po -> {
                 GalleryVo vo = new GalleryVo();
                 BeanUtils.copyProperties(po, vo);
@@ -71,6 +75,23 @@ public class PO2VO {
                 return vo;
             };
 
+    public static Function<GoodsComment, CommentVo> comment =
+            po -> {
+                CommentVo vo = new CommentVo();
+                BeanUtils.copyProperties(po, vo);
+                vo.setGoods_id(po.getGoodsId());
+                vo.setUser_id(po.getUserId());
+                vo.setReply_comment_id(po.getReplyCommentId());
+                vo.setReply_user_id(po.getReplyUserId());
+                vo.set_delete(po.isDelete());
+                if (po.getCreateTime() != null) {
+                    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+                    vo.setCreate_time(formatter.format(po.getCreateTime()));
+                }
+
+                return vo;
+            };
+
     public static <T, R> R convert(Function<T, R> converter, T po) {
         return converter.apply(po);
     }

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

@@ -1,3 +1,7 @@
+eureka:
+  client:
+    service-url:
+      defaultZone: http://localhost:8801/eureka/
 spring:
   application:
     name: goods-service

+ 4 - 4
user-service/pom.xml

@@ -26,10 +26,10 @@
     </properties>
 
     <dependencies>
-        <!--<dependency>-->
-            <!--<groupId>org.springframework.cloud</groupId>-->
-            <!--<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>-->
-        <!--</dependency>-->
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+        </dependency>
 
         <!--<dependency>-->
             <!--<groupId>org.springframework.cloud</groupId>-->

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

@@ -2,9 +2,10 @@ package io.github.nnkwrik.userservice;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 
 @SpringBootApplication
-//@EnableDiscoveryClient
+@EnableDiscoveryClient
 //@EnableFeignClients
 public class UserServiceApplication {
 

+ 0 - 64
user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserController.java

@@ -1,64 +0,0 @@
-//package io.github.nnkwrik.userservice.controller;
-//
-//import com.fasterxml.jackson.databind.ObjectMapper;
-//import io.github.nnkwrik.common.dto.AuthDTO;
-//import io.github.nnkwrik.userservice.client.AuthClient;
-//import io.github.nnkwrik.userservice.model.User;
-//import io.github.nnkwrik.userservice.service.UserService;
-//import io.github.nnkwrik.userservice.util.Response;
-//import org.slf4j.Logger;
-//import org.slf4j.LoggerFactory;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.web.bind.annotation.*;
-//
-//import java.io.IOException;
-//
-///**
-// * @author nnkwrik
-// * @date 18/11/10 21:51
-// */
-//@RestController
-//public class UserController {
-//
-//    private final Logger log = LoggerFactory.getLogger(this.getClass());
-//
-//    @Autowired
-//    private UserService userService;
-//
-//    @Autowired
-//    private AuthClient authClient;
-//
-//    @GetMapping("/test")
-//    public String test(){
-//        return authClient.test();
-//    }
-//
-//
-//    @PostMapping("/register")
-//    public Response register(@RequestBody AuthDTO authDTO) {
-//
-//        Response response = authClient.login(authDTO);
-//        if (!response.isSuccess()) {
-//            log.info("认证失败,原因 :{}", response.getMsg());
-//            return response;
-//        }
-//
-//        //rawData转User
-//        ObjectMapper mapper = new ObjectMapper();
-//        User user = null;
-//        try {
-//            user = mapper.readValue(authDTO.getRawData(), User.class);
-//        } catch (IOException e) {
-//            log.info("rawData转User失败 : rawData = {}", authDTO.getRawData());
-//            e.printStackTrace();
-//            return Response.fail("rawData转User失败 ");
-//        }
-//        userService.register(user);
-//
-//        log.info("新用户:用户名 = [{}],城市 = [{}]", user.getNickName(), user.getCity());
-//        return response;
-//    }
-//
-//
-//
-//}

+ 49 - 0
user-service/src/main/java/io/github/nnkwrik/userservice/controller/UserServiceController.java

@@ -0,0 +1,49 @@
+package io.github.nnkwrik.userservice.controller;
+
+
+import io.github.nnkwrik.common.dto.Response;
+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.web.bind.annotation.*;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author nnkwrik
+ * @date 18/11/10 21:51
+ */
+@RestController
+@Slf4j
+@RequestMapping("/user-service")
+public class UserServiceController {
+
+
+    @Autowired
+    private UserService userService;
+
+
+    @PostMapping("/simpleUser")
+    public Response<SimpleUser> getSimpleUser(@RequestBody Map<String, String> openId) {
+        SimpleUser dto = userService.getSimpleUser(openId.get("openId"));
+        log.info("【商品服务】通过openId : [{}] 查询用户基本信息,查询结果:{}", openId.get("openId"), dto);
+        if (dto == null)
+            return Response.fail(Response.USER_IS_NOT_EXIST, "不存在的用户");
+        return Response.ok(dto);
+    }
+
+    @PostMapping("/simpleUserList")
+    public Response<HashMap<String, SimpleUser>> getSimpleUserList(@RequestBody List<String> openIdList) {
+
+        Map<String, SimpleUser> dtoMap = userService.getSimpleUserList(openIdList);
+        log.info("【商品服务】通过openId : [{}] 查询用户基本信息,查询结果:{}", openIdList, dtoMap);
+        if (dtoMap == null)
+            return Response.fail(Response.USER_IS_NOT_EXIST, "不存在的用户");
+        return Response.ok(dtoMap);
+    }
+
+
+}

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

@@ -3,6 +3,8 @@ package io.github.nnkwrik.userservice.dao;
 import io.github.nnkwrik.userservice.model.User;
 import org.apache.ibatis.annotations.*;
 
+import java.util.List;
+
 /**
  * @author nnkwrik
  * @date 18/11/11 16:57
@@ -10,9 +12,25 @@ import org.apache.ibatis.annotations.*;
 @Mapper
 public interface UserMapper {
 
-    @Insert("insert into user (openId,nickName,avatarUrl,gender,language,city,province,country) " +
+    @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);
+
+
+    @Select("select open_id, nick_name, avatar_url, register_time\n" +
+            "from user\n" +
+            "where open_id = #{openId}")
+    User getSimpleUser(@Param("openId") String openId);
+
+    @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"+
+            "</script>")
+    List<User> getSimpleUserList(@Param("openIdList") List<String> openIdList);
 }

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

@@ -4,6 +4,7 @@ import lombok.Data;
 import org.apache.ibatis.annotations.Param;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * @author nnkwrik
@@ -20,6 +21,7 @@ public class User {
     private String city;
     private String province;
     private String country;
+    private Date registerTime;
     //address
     //phone
 }

+ 8 - 0
user-service/src/main/java/io/github/nnkwrik/userservice/service/UserService.java

@@ -1,7 +1,11 @@
 package io.github.nnkwrik.userservice.service;
 
+import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.userservice.model.User;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author nnkwrik
  * @date 18/11/10 22:15
@@ -9,4 +13,8 @@ import io.github.nnkwrik.userservice.model.User;
 public interface UserService {
 
     void register(User user);
+
+    SimpleUser getSimpleUser(String openId);
+
+    Map<String, SimpleUser> getSimpleUserList(List<String> openIdList);
 }

+ 27 - 0
user-service/src/main/java/io/github/nnkwrik/userservice/service/impl/UserServiceImpl.java

@@ -1,11 +1,17 @@
 package io.github.nnkwrik.userservice.service.impl;
 
+import io.github.nnkwrik.common.dto.SimpleUser;
 import io.github.nnkwrik.userservice.dao.UserMapper;
 import io.github.nnkwrik.userservice.model.User;
 import io.github.nnkwrik.userservice.service.UserService;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * @author nnkwrik
  * @date 18/11/11 16:55
@@ -21,4 +27,25 @@ public class UserServiceImpl implements UserService {
     public void register(User user) {
         userMapper.register(user);
     }
+
+    @Override
+    public SimpleUser getSimpleUser(String openId) {
+        User user = userMapper.getSimpleUser(openId);
+        if (user == null) return null;
+        SimpleUser simpleUser = new SimpleUser();
+        BeanUtils.copyProperties(user, simpleUser);
+        return simpleUser;
+    }
+
+    @Override
+    public Map<String, SimpleUser> getSimpleUserList(List<String> openIdList) {
+        List<User> userList = userMapper.getSimpleUserList(openIdList);
+        Map<String, SimpleUser> dtoMap = new HashMap<>();
+        userList.stream().forEach(user -> {
+            SimpleUser simpleUser = new SimpleUser();
+            BeanUtils.copyProperties(user, simpleUser);
+            dtoMap.put(user.getOpenId(), simpleUser);
+        });
+        return dtoMap;
+    }
 }

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

@@ -26,6 +26,15 @@ spring:
           destination: register
           group: registerGroup
 
+mybatis:
+  configuration:
+    map-underscore-to-camel-case: true
+
+logging:
+  level:
+    org.springframework.web: info
+    io.github.nnkwrik.userservice: debug
+
 
 server:
   port: 8802