0
点赞
收藏
分享

微信扫一扫

【探花交友】今日佳人


目录

​​5、今日佳人​​

​​5.1、表结构设计​​

​​5.2、服务提供者​​

​​5.3、代码实现​​

5、今日佳人

在用户登录成功后,就会进入首页,首页中有今日佳人、推荐好友、探花、搜附近等功能。

今日佳人,会推荐缘分值最大的用户,进行展现出来。缘分值的计算是由用户的行为进行打分,如:点击、点赞、评论、学历、婚姻状态等信息组合而成的。

实现:我们先不考虑推荐的逻辑,假设现在已经有推荐的结果,我们只需要从结果中查询到缘分值最高的用户就可以了。至于推荐的逻辑以及实现,我们将后面的课程中讲解。

流程:

【探花交友】今日佳人_mongodb

5.1、表结构设计


#表结构 recommend_user {  "userId":1001,  #推荐的用户id  "toUserId":1002, #用户id  "score":90,  #推荐得分  "date":"2019/1/1" #日期 }


在MongoDB中只存储用户的id数据,其他的数据需要通过接口查询。

5.2、服务提供者

5.2.0、导入依赖

找到tanhua-domain模块的​​pom.xml​​打开mongo的依赖

【探花交友】今日佳人_java_02

5.2.1、实体类


@AllArgsConstructor @NoArgsConstructor @Data @Document(collection = "recommend_user") public class RecommendUser implements java.io.Serializable {    private ObjectId id; //主键id    private Long userId; //推荐的用户id    private Long toUserId; //用户id    private Double score =0d; //推荐得分    private String date; //日期 }


5.2.2、RecommendUserApi接口


public interface RecommendUserApi {    RecommendUser queryWithMaxScore(Long toUserId); }


5.2.3、RecommendUserApiImpl


@DubboService public class RecommendUserApiImpl  implements RecommendUserApi {    @Autowired    private MongoTemplate mongoTemplate;    //查询今日佳人    public RecommendUser queryWithMaxScore(Long toUserId) {        //根据toUserId查询,根据评分score排序,获取第一条        //构建Criteria        Criteria criteria = Criteria.where("toUserId").is(toUserId);        //构建Query对象        Query query = Query.query(criteria).with(Sort.by(Sort.Order.desc("score")))               .limit(1);        //调用mongoTemplate查询        return mongoTemplate.findOne(query,RecommendUser.class);   } }


5.2.4、application配置


server: port: 18082 spring: application:   name: tanhua-dubbo-mongo cloud:   nacos:     discovery:       server-addr: 192.168.136.160:8848 data:   mongodb:     uri: mongodb://192.168.136.160:27017/tanhua         dubbo: protocol:   name: dubbo   port: 20881 registry:   address: spring-cloud://localhost scan:   base-packages: com.tanhua.dubbo.api  #dubbo中包扫描


5.2.5 启动类


package com.tanhua.dubbo; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class DubboMongoApplication {    public static void main(String[] args) {        SpringApplication.run(DubboMongoApplication.class,args);   } }


5.3、代码实现

5.3.1、接口说明

地址:​​http://192.168.136.160:3000/project/19/interface/api/100​​

 

【探花交友】今日佳人_交友_03

【探花交友】今日佳人_数据库_04

5.3.2、TanhuaController


@RestController @RequestMapping("/tanhua") public class TanhuaController {    @Autowired    private TanhuaService tanhuaService;    //今日佳人    @GetMapping("/todayBest")    public ResponseEntity todayBest() {        TodayBest vo = tanhuaService.todayBest();        return ResponseEntity.ok(vo);   } }


5.3.3、TanhuaService


@Service public class TanhuaService {    @DubboReference    private RecommendUserApi recommendUserApi;    @DubboReference    private UserInfoApi userInfoApi;    @DubboReference    private QuestionApi questionApi;    @Autowired    private HuanXinTemplate template;    //查询今日佳人数据    public TodayBest todayBest() {        //1、获取用户id        Long userId = UserHolder.getUserId();        //2、调用API查询        RecommendUser recommendUser = recommendUserApi.queryWithMaxScore(userId);        if(recommendUser == null) {            recommendUser = new RecommendUser();            recommendUser.setUserId(1l);            recommendUser.setScore(99d);       }        //3、将RecommendUser转化为TodayBest对象        UserInfo userInfo = userInfoApi.findById(recommendUser.getUserId());        TodayBest vo = TodayBest.init(userInfo, recommendUser);        //4、返回        return vo;   } }


5.3.4、vo对象


package com.tanhua.domain.vo; import com.tanhua.domain.db.UserInfo; import com.tanhua.domain.mongo.RecommendUser; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.beans.BeanUtils; /** * 今日佳人 */ @Data @NoArgsConstructor @AllArgsConstructor public class TodayBest {    private Long id; //用户id    private String avatar;    private String nickname;    private String gender; //性别 man woman    private Integer age;    private String[] tags;    private Long fateValue; //缘分值    /**     * 在vo对象中,补充一个工具方法,封装转化过程     */    public static TodayBest init(UserInfo userInfo, RecommendUser recommendUser) {        TodayBest vo = new TodayBest();        BeanUtils.copyProperties(userInfo,vo);        if(userInfo.getTags() != null) {            vo.setTags(userInfo.getTags().split(","));       }        vo.setFateValue(recommendUser.getScore().longValue());        return vo;   } }


5.3.5、解决MongoDB启动bug

在项目中,添加了mongo的依赖的话,springboot就会自动去连接本地的mongo,由于他连接不上会导致出错。

解决有2种方案:

  • 排除掉mongo的依赖
  • springboot中添加排除自动配置的注解

package com.tanhua.server;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;

@SpringBootApplication(exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class
}) //排除mongo的自动配置
public class TanhuaServerApplication {

public static void main(String[] args) {
SpringApplication.run(TanhuaServerApplication.class,args);
}
}

举报

相关推荐

0 条评论