ADD file via upload

main
pjhmizn49 1 year ago
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…
Cancel
Save