parent
9a33ff2fb9
commit
bc206e17ef
@ -0,0 +1,149 @@
|
||||
package com.example.flower.service;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.example.flower.entity.*;
|
||||
import com.example.flower.mapper.*;
|
||||
import com.example.flower.service.impl.FlowerServiceImpl;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.example.flower.unit.UserCF;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Random;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
public class FlowerService implements FlowerServiceImpl {
|
||||
@Resource
|
||||
private FlowerMapper flowerMapper;
|
||||
@Resource
|
||||
private CartMapper cartMapper;
|
||||
@Resource
|
||||
private OrderMapper orderMapper;
|
||||
@Resource
|
||||
private UserMapper userMapper;
|
||||
@Resource
|
||||
private CommentMapper commentMapper;
|
||||
|
||||
@Override
|
||||
public PageInfo<Flower> flowerList(int page, int page_size) {
|
||||
PageHelper.startPage(page,page_size);
|
||||
return new PageInfo<>(flowerMapper.flowerList());
|
||||
}
|
||||
@Override
|
||||
public PageInfo<Flower> flowerListByQuery(int page,int page_size,String flower_name){
|
||||
PageHelper.startPage(page,page_size);
|
||||
return new PageInfo<>(flowerMapper.flowerListByQuery(flower_name));
|
||||
}
|
||||
@Override
|
||||
public void flowerAdd(Flower flower){
|
||||
flowerMapper.flowerAdd(flower);
|
||||
}
|
||||
@Override
|
||||
public int flowerDeletePer(int flower_id){
|
||||
return flowerMapper.flowerDeletePer(flower_id);
|
||||
}
|
||||
@Override
|
||||
public int flowerDeleteMul(int[] flower_ids){
|
||||
return flowerMapper.flowerDeleteMul(flower_ids);
|
||||
}
|
||||
@Override
|
||||
public Flower flowerInfo(int flower_id){
|
||||
return flowerMapper.flowerInfo(flower_id);
|
||||
}
|
||||
@Override
|
||||
public int flowerModify(Flower flower){
|
||||
return flowerMapper.flowerModify(flower);
|
||||
}
|
||||
//前台
|
||||
@Override
|
||||
public List<Flower> flowerRecommend(int class_id){
|
||||
return flowerMapper.flowerRecommend(class_id);
|
||||
}
|
||||
@Override
|
||||
public int flowerAddNum(int flower_id,int flower_sale){
|
||||
return flowerMapper.flowerAddNum(flower_id,flower_sale);
|
||||
}
|
||||
|
||||
//猜你喜欢
|
||||
@Override
|
||||
public List<Flower> recommend(int user_id) {
|
||||
// 用户的哪些行为可以认为他跟商品产生了关系?加入购物车、下单、评论
|
||||
// 1. 获取所有的购物车信息
|
||||
List<Cart> allCarts = cartMapper.findAllCart();
|
||||
// 2. 获取所有的订单信息
|
||||
List<RecommendUtil> allOrders = orderMapper.findAllFlowerOrder();
|
||||
// 3. 获取所有的评论信息
|
||||
List<Comment> allComments = commentMapper.findAllComment();
|
||||
// 4. 获取所有的用户信息
|
||||
List<User> allUsers = userMapper.userList();
|
||||
// 5. 获取所有的商品信息
|
||||
List<Flower> allFlower = flowerMapper.flowerList();
|
||||
|
||||
// 定义一个存储每个商品和每个用户关系的List
|
||||
List<RelateDTO> data = new ArrayList<>();
|
||||
// 定义一个存储最后返回给前端的商品List
|
||||
List<Flower> result;
|
||||
|
||||
// 开始计算每个商品和每个用户之间的关系数据
|
||||
for (Flower flower : allFlower) {
|
||||
Integer flowerId = flower.getFlower_id();
|
||||
for (User user : allUsers) {
|
||||
int userId = user.getUser_id();
|
||||
int index = 1;
|
||||
// 1. 判断该用户有没有给该商品加入购物车,加入购物车的权重给 2
|
||||
Optional<Cart> cartOptional = allCarts.stream().filter(x -> x.getFlower_id()==flowerId && x.getUser_id()==userId).findFirst();
|
||||
if (cartOptional.isPresent()) {
|
||||
index += 2;
|
||||
}
|
||||
// 2. 判断该用户有没有对该商品下过单(已完成的订单),订单的权重给 3
|
||||
Optional<RecommendUtil> ordersOptional = allOrders.stream().filter(x -> x.getFlower_id()==flowerId && x.getUser_id()==userId).findFirst();
|
||||
if (ordersOptional.isPresent()) {
|
||||
index += 3;
|
||||
}
|
||||
// 3. 判断该用户有没有对该商品评论过,评论的权重给 1
|
||||
Optional<Comment> commentOptional = allComments.stream().filter(x -> x.getFlower_id()==flowerId && x.getUser_id()==userId).findFirst();
|
||||
if (commentOptional.isPresent()) {
|
||||
index += 1;
|
||||
}
|
||||
if (index > 1) {
|
||||
RelateDTO relateDTO = new RelateDTO(userId, flowerId, index);
|
||||
data.add(relateDTO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 数据准备结束后,就把这些数据一起给这个推荐算法
|
||||
List<Integer> flowerIds = UserCF.recommend(user_id, data);
|
||||
// 把商品id转换成商品
|
||||
result = flowerIds.stream().map(flowerId -> allFlower.stream()
|
||||
.filter(x -> x.getFlower_id()==flowerId).findFirst().orElse(null))
|
||||
.limit(6).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtil.isEmpty(result)) {
|
||||
// 随机给它推荐10个
|
||||
return getRandomFlower(6);
|
||||
}
|
||||
if (result.size() < 6) {
|
||||
int num = 6 - result.size();
|
||||
List<Flower> list = getRandomFlower(num);
|
||||
result.addAll(list);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
private List<Flower> getRandomFlower(int num) {
|
||||
List<Flower> list = new ArrayList<>(num);
|
||||
List<Flower> flower = flowerMapper.flowerList();
|
||||
for (int i = 0; i < num; i++) {
|
||||
int index = new Random().nextInt(flower.size());
|
||||
list.add(flower.get(index));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue