【计算机毕业设计】基于SpringBoot+Vue协同过滤电影推荐系统的设计与实现

博主主页:一季春秋
博主简介:专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
主要内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、小程序、安卓app、大数据等设计与开发

精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟

SpringBoot+Vue项目持续更新中

http://t.csdn.cn/1mgm8
🍅文末获取联系🍅

目录

一、项目介绍 

二、项目主要技术 

三、功能结构设计

四、系统实现

五、实现代码


一、项目介绍 

电影推荐系统管理系统按照操作主体分为管理员和用户。管理员的功能包括付费电影管理、付费电影收藏管理、付费电影评价管理、电影购买管理、字典管理、电影论坛管理、电影资讯管理、免费电影管理、免费电影收藏管理、免费电影评论管理、用户管理、管理员管理。用户的功能等。该系统采用了Mysql数据库,Java语言,Spring Boot框架等技术进行编程实现。

二、项目主要技术 

开发语言:Java

使用框架:spring boot

前端技术:Vue 、css、element-ui、js

开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code

数据库:MySQL 5.7/8.0

数据库管理工具:phpstudy/Navicat

JDK版本:jdk1.8

Maven: apache-maven 3.8.1-bin

三、功能结构设计

图即为设计的管理员功能结构,管理员权限操作的功能包括管理公告,管理电影推荐系统信息,包括付费电影管理,培训管理,免费电影管理,薪资管理等,可以管理公告。 

四、系统实现

付费电影

免费电影 

个人中心 

付费电影管理

免费电影管理

基础数据管理

五、实现代码

个性推荐

 /**
    * 个性推荐
    */
    @IgnoreAuth
    @RequestMapping("/gexingtuijian")
    public R gexingtuijian(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("gexingtuijian方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));
        CommonUtil.checkMap(params);
        List<DianyingView> returnDianyingViewList = new ArrayList<>();

        //查询订单
        Map<String, Object> params1 = new HashMap<>(params);params1.put("sort","id");params1.put("yonghuId",request.getSession().getAttribute("userId"));
        params1.put("shangxiaTypes",1);
        params1.put("dianyingYesnoTypes",2);
        PageUtils pageUtils = dianyingOrderService.queryPage(params1);
        List<DianyingOrderView> orderViewsList =(List<DianyingOrderView>)pageUtils.getList();
        Map<Integer,Integer> typeMap=new HashMap<>();//购买的类型list
        for(DianyingOrderView orderView:orderViewsList){
            Integer dianyingTypes = orderView.getDianyingTypes();
            if(typeMap.containsKey(dianyingTypes)){
                typeMap.put(dianyingTypes,typeMap.get(dianyingTypes)+1);
            }else{
                typeMap.put(dianyingTypes,1);
            }
        }
        List<Integer> typeList = new ArrayList<>();//排序后的有序的类型 按最多到最少
        typeMap.entrySet().stream().sorted((o1, o2) -> o2.getValue() - o1.getValue()).forEach(e -> typeList.add(e.getKey()));//排序
        Integer limit = Integer.valueOf(String.valueOf(params.get("limit")));
        for(Integer type:typeList){
            Map<String, Object> params2 = new HashMap<>(params);params2.put("dianyingTypes",type);
            params2.put("shangxiaTypes",1);
            params2.put("dianyingYesnoTypes",2);
            PageUtils pageUtils1 = dianyingService.queryPage(params2);
            List<DianyingView> dianyingViewList =(List<DianyingView>)pageUtils1.getList();
            returnDianyingViewList.addAll(dianyingViewList);
            if(returnDianyingViewList.size()>= limit) break;//返回的推荐数量大于要的数量 跳出循环
        }
        params.put("shangxiaTypes",1);
        params.put("dianyingYesnoTypes",2);
        //正常查询出来商品,用于补全推荐缺少的数据
        PageUtils page = dianyingService.queryPage(params);
        if(returnDianyingViewList.size()<limit){//返回数量还是小于要求数量
            int toAddNum = limit - returnDianyingViewList.size();//要添加的数量
            List<DianyingView> dianyingViewList =(List<DianyingView>)page.getList();
            for(DianyingView dianyingView:dianyingViewList){
                Boolean addFlag = true;
                for(DianyingView returnDianyingView:returnDianyingViewList){
                    if(returnDianyingView.getId().intValue() ==dianyingView.getId().intValue()) addFlag=false;//返回的数据中已存在此商品
                }
                if(addFlag){
                    toAddNum=toAddNum-1;
                    returnDianyingViewList.add(dianyingView);
                    if(toAddNum==0) break;//够数量了
                }
            }
        }else {
            returnDianyingViewList = returnDianyingViewList.subList(0, limit);
        }

        for(DianyingView c:returnDianyingViewList)
            dictionaryService.dictionaryConvert(c, request);
        page.setList(returnDianyingViewList);
        return R.ok().put("data", page);
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一季春秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值