基于javaweb+mysql的springboot协同过滤算法新闻推荐管理系统(java+ssm+javascript+html+ajax+mysql)

基于javaweb+mysql的springboot协同过滤算法新闻推荐管理系统(java+ssm+javascript+html+ajax+mysql)

运行环境

Java≥8、MySQL≥5.7

开发工具

eclipse/idea/myeclipse/sts等均可配置运行

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

基于javaweb+mysql的SpringBoot协同过滤算法新闻推荐管理系统(java+ssm+javascript+html+ajax+mysql)

项目介绍

本项目新闻推荐管理系统;

前台:

登录、首页、全部新闻、系统特色、猜你喜欢、分类、评论

后台: (1)文件管理:文件列表。 (2)用户管理:用户管理。 (3)新闻管理:新闻管理。 (4)三联管理:联动管理。 (5)新闻审核:新闻的审核和管理。

技术栈

SSM+mysql+layui+CSS+JavaScript

使用说明

  1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.properties配置文件中的数据库配置改为自己的配置; 4. 运行项目,在浏览器中输入http://localhost:8080 访问
        news.setId(null);
        Long categoryId = news.getCategoryId();
        news.setCategoryName(newsCategoryService.getById(categoryId)==null?"":newsCategoryService.getById(categoryId).getName());
        news.setUserId(ToolsUtils.getLoginUserId(session));
        news.setUserName(ToolsUtils.getLoginUserName(session));
        news.setUpdateTime(LocalDateTime.now());
        boolean i = newsService.save(news);
        //往转发表插入数据
        Long channelNewsId = news.getChannelNewsId();
        SysNews channelNews = newsService.getById(channelNewsId);
        NewsForward newsForward=new NewsForward();
        newsForward.setNewsId(channelNewsId);
        newsForward.setNewsTitle(channelNews.getTitle());
        newsForward.setUserId(ToolsUtils.getLoginUserId(session));
        newsForward.setUserName(ToolsUtils.getLoginUserName(session));
        forwardService.save(newsForward);
        return ResultUtil.successData(news);
    }

    /**
     * 跳转列表页面
     * @return
     */
    @RequestMapping("/listPage")
    public String newsListPage() {
        return "news/list";
    }

    /**
     * 新闻列表查询
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param queryParam 查询参数
     * @param vagueParam 模糊参数
     * @return
     */
    @ApiOperation("获取新闻列表")
    @RequestMapping("/list/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean getList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,String vagueParam) {
        logger.debug("查询新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
        Long categoryId = queryParam.getCategoryId();
        queryWrapper.eq(categoryId!=null,"category_id",categoryId);
        String title = queryParam.getTitle();
        queryWrapper.like(!StringUtils.isEmpty(title),"title",title);
        if(!StringUtils.isEmpty(vagueParam)){
    public ResponseBean fileUploadOnly(SysFile sysFile, @RequestParam(value = "file",required = true) MultipartFile file){
        if(sysFile==null||file==null||file.isEmpty()){
            logger.debug("文件上传参数不对!");
            return new ResponseBean(false, CommonEnum.BAD_REQUEST);
        }
        String originalFilename = file.getOriginalFilename();
        String extendName = originalFilename.substring(originalFilename.lastIndexOf("."));
        long size = file.getSize();
        logger.debug("file.getResource:"+file.getResource());
        String saveFileName= UUID.randomUUID().toString().replaceAll("-","")+extendName;
        File saveFile=new File(baseFilePath+File.separator+saveFileName);
        if(!saveFile.getParentFile().exists()){
            saveFile.getParentFile().mkdirs();
        }
        try {
            //保存文件到最终路径
            file.transferTo(saveFile);
        } catch (IOException e) {
            logger.error(e.getMessage(),e);
        }
        sysFile.setFileName(originalFilename);
        sysFile.setFileType(file.getContentType());
        sysFile.setFileUrl(baseFilePath+File.separator+saveFileName);
        sysFile.setFileSize(size+"");
        sysFile.setSaveName(saveFileName);
        int insert = fileMapper.insert(sysFile);

        if(sysFile==null){
            return new ResponseBean(false,CommonEnum.BAD_REQUEST);
        }
        return  new ResponseBean(true,sysFile,CommonEnum.SUCCESS_OPTION);

    }

    /**
     * ueditor文件回显
     * @param request
     * @return
     */
    @RequestMapping("/jsp/upload")
    public ResponseEntity<byte[]> ueditorfileDown(HttpServletRequest request,String filePath){
        logger.debug("filePath:"+filePath);
        byte [] body = null;
        String rootPath = ClassUtils.getDefaultClassLoader().getResource("").getPath()+"static";
        String requestURL = request.getRequestURL().toString();
        if(requestURL.contains("127.0.0.1")||requestURL.contains("localhost")||requestURL.contains("192.168")){
            logger.debug("本地环境");
        }else{
            rootPath=configJsonPath;
        }
        String fileUrl=rootPath+ File.separator+filePath;
        try {
    @Autowired
    NewsCommentService commentService;

    @Autowired
    SysNewsService newsService;
    /**
     * 跳转列表页面
     * @return
     */
    @RequestMapping("/listPage")
    public String listPage() {
        return page_prefix+"list";
    }

    /**
     * 添加用户评论
     * @param comment
     * @param session
     * @return
     */
    @RequestMapping("/add")
    @ResponseBody
    public ResponseBean add(NewsComment comment, HttpSession session){
        //变量类型 变量名  =  类/对象  . 方法         方法入参
        SysUser loginUser = ToolsUtils.getLoginUser(session);
        //将loginUser的Id 设置为comment的userId
        comment.setUserId(loginUser.getId());
        comment.setUserName(loginUser.getName());
        comment.setField1(loginUser.getField1());
        Long newsId = comment.getNewsId();
        SysNews news = newsService.getById(newsId);
        comment.setNewsTitle(news==null?"已经被删除":news.getTitle());
        boolean save = commentService.save(comment);
        return save?ResultUtil.successData(comment):ResultUtil.error();
    }
    /**
     * 新闻评论列表查询
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param queryParam 查询参数
     * @param vagueParam 模糊参数
     * @return
        String categoryName=categoryService.getById(categoryId).getName();
        AtomicInteger ait=new AtomicInteger(0);
        Date date = new Date();
        Date date1 = DateUtils.addDay(date, 168311);
        logger.debug("当前时间戳:{}", System.currentTimeMillis());
        long timeMillis = DateUtils.getTimeMillis(date1);
        logger.debug("转换后的时间戳:{}", timeMillis);
        JSONObject contentObj = new JSONObject();
        String grapUrl=null;
        switch (categoryName){
            case "娱乐·音乐":
                grapUrl=yuleyiyueUrl;
                JSONObject firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMusic);
                defaultYuLeId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeId);
                contentObj.put("idTimeMills", defaultYuLeTimeMills);
                break;
            case "娱乐·明星":
                grapUrl=yulestarUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlStar);
                defaultYuLeStarId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeStarTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeStarId);
                contentObj.put("idTimeMills", defaultYuLeStarTimeMills);
                break;
            case "娱乐·电影":
                grapUrl=yulefilmUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMovie);
                defaultYuLeFilmId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeFilmTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeFilmId);
                contentObj.put("idTimeMills", defaultYuLeFilmTimeMills);
                break;
        }
        contentObj.put("currTimeMills", timeMillis);
        //解析URL
        String parseUrl = getContent(grapUrl, contentObj);
        logger.debug("第一次获取的grapUrl:{}",parseUrl);
        for(int i=0;i<1000;i++){
            Integer data = getPageData(session, categoryId, ait,number,parseUrl);
            logger.debug("当前抓取数据量:{}",data);
            if(data==-1){
                return ResultUtil.error();
            }
            if(data<number&&data!=999999){
                QueryWrapper<SysNews> queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("category_name", categoryName);
                queryWrapper.orderByDesc("id");
                grapUrl="";
                List<SysNews> checkList = newsService.list(queryWrapper);
                grapUrl=transferUrlParam(checkList,categoryName,contentObj,grapUrl);
                contentObj.put("currTimeMills", System.currentTimeMillis());
                //解析URL
        }
        QueryWrapper<SysDictValue> queryWrapper=new QueryWrapper();
        queryWrapper.eq("dict_code",dictValue.getDictCode())
                .eq("dict_value",dictValue.getDictValue())
                .ne("id",dictValue.getId());
        List<SysDictValue> checkList=dictValueService.list(queryWrapper);
        if(ToolsUtils.isNotEmpty(checkList)){
            return new ResponseBean(false,"9999","字典code-value已经存在!");
        }
        boolean i = dictValueService.updateById(dictValue);
        return new ResponseBean(true,dictValue, CommonEnum.SUCCESS_OPTION);
    }

    /**
     * 跳转列表页面
     * @return
     */
    @RequestMapping("/listPage")
    public String dictValueListPage() {
        return "dictValue/list";
    }

    /**
     * 分页列表查询
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param queryParam 查询参数
     * @return
     */
    @RequestMapping("/list/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean getList(@PathVariable Integer pageNum, @PathVariable Integer pageSize,
                                SysDictValue queryParam, HttpSession session) {
        IPage<SysDictValue> indexPage = new Page<>(pageNum, pageSize);
        Map<String, Object> objectMap = ToolsUtils.convertObjToMap(queryParam);
        QueryWrapper<SysDictValue> queryWrapper=new QueryWrapper<>();
        queryWrapper.allEq(objectMap,false);
        IPage<SysDictValue> page = dictValueService.page(indexPage,queryWrapper);
        logger.debug("获取的字典值列表:"+page);
        //获取分页信息
        Map<String, Object> pageInfo = new HashMap<String, Object>();
        pageInfo.put("pageSize", page.getSize());
        pageInfo.put("pageNum", page.getCurrent());
        pageInfo.put("pages", page.getPages());
        pageInfo.put("total", page.getTotal());
        Map<String, Object> resultMap = new HashMap<String, Object>();
        resultMap.put("dictValueList", page.getRecords());
        resultMap.put("pageInfo", pageInfo);
        return new ResponseBean<Map<String, Object>>(true, resultMap, CommonEnum.SUCCESS_REQUEST);
        return "home/news/detail";
    }

    /**
     * @RequestMapping+@ResponseBody=返回json格式数据,不跳页面
     * @param pageNum
     * @param pageSize
     * @param queryParam
     * @param session
     * @return
     */
    @ApiOperation("获取我的发布列表")
    @RequestMapping("/mypublish/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean mypublish(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,HttpSession session) {
        logger.debug("查询热门新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("user_id",ToolsUtils.getLoginUserId(session));
        IPage<SysNews> newsIPage = new Page<>(pageNum,pageSize);
        IPage<SysNews> listPage = newsService.page(newsIPage, queryWrapper);
        Map resultMap = ToolsUtils.wrapperResult(listPage, "mypublishList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取热门新闻列表")
    @RequestMapping("/hotlist/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean hotlist(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,String vagueParam) {
        logger.debug("查询热门新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        Date startTime=DateUtils.addMinute(new Date(),-10);
        Date endTime=new Date();
        List<SysNews> newsList = newsService.hotList(startTime, endTime);
        logger.debug("获取的热门新闻列表:"+newsList);
        IPage<SysNews> newsIPage = new Page<>(pageNum,pageSize);
        newsIPage.setRecords(newsList);
        Map resultMap = ToolsUtils.wrapperResult(newsIPage, "hotNewsList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取系统特色新闻列表")
    @RequestMapping("/featureList/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean featureList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,String vagueParam) {
        logger.debug("查询系统特色新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
//        获取新闻分类id
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("user_id",ToolsUtils.getLoginUserId(session));
        IPage<SysNews> newsIPage = new Page<>(pageNum,pageSize);
        IPage<SysNews> listPage = newsService.page(newsIPage, queryWrapper);
        Map resultMap = ToolsUtils.wrapperResult(listPage, "mypublishList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取热门新闻列表")
    @RequestMapping("/hotlist/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean hotlist(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,String vagueParam) {
        logger.debug("查询热门新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        Date startTime=DateUtils.addMinute(new Date(),-10);
        Date endTime=new Date();
        List<SysNews> newsList = newsService.hotList(startTime, endTime);
        logger.debug("获取的热门新闻列表:"+newsList);
        IPage<SysNews> newsIPage = new Page<>(pageNum,pageSize);
        newsIPage.setRecords(newsList);
        Map resultMap = ToolsUtils.wrapperResult(newsIPage, "hotNewsList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取系统特色新闻列表")
    @RequestMapping("/featureList/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean featureList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,String vagueParam) {
        logger.debug("查询系统特色新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
//        获取新闻分类id
        Long categoryId = queryParam.getCategoryId();
        if(categoryId==null){
            queryParam.setCategoryId(1L);
        }
        queryWrapper.allEq(ToolsUtils.convertObjToMap(queryParam),false);
        queryWrapper.orderByDesc("id");
        IPage<SysNews> indexPage = new Page<>(pageNum, pageSize);
        IPage<SysNews> newsIPage = newsService.page(indexPage, queryWrapper);
        logger.debug("获取的系统特色新闻列表:"+newsIPage);
        Map resultMap = ToolsUtils.wrapperResult(newsIPage, "featureList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取推荐新闻列表")
    @RequestMapping("/recommendList/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean recommendList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,HttpSession session) {
        logger.debug("查询推荐新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        if (!parseObject.getString("code").equals("0")) {
            logger.debug("爬取数据失败!");
            return -1;
        }
        String isEnd = parseObject.getJSONObject("data").getString("isEnd");
        if(isEnd.equals("true")){
            logger.debug("已经到末尾,不再抓取~");
            return -2;
        }
        JSONArray newsstreamArray = parseObject.getJSONObject("data").getJSONArray("newsstream");
        for (int i = 0; i < newsstreamArray.size(); i++) {
            JSONObject currObj = newsstreamArray.getJSONObject(i);
            SysNews sysNews = new SysNews();
            sysNews.setCategoryName(categoryName);
            sysNews.setCategoryId(categoryId);
            sysNews.setUserId(ToolsUtils.getLoginUserId(session));
            sysNews.setUserName(ToolsUtils.getLoginUserName(session));
            sysNews.setField9(currObj.toJSONString());
            String id = currObj.getString("id");
            logger.debug("id:{}", id);
            sysNews.setField2(id);//newsId--field2
            String title = currObj.getString("title");
            logger.debug("title:{}", title);
            QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
            queryWrapper.eq("title",title);
            List<SysNews> checkListExist = newsService.list(queryWrapper);
            if(ToolsUtils.isNotEmpty(checkListExist)){
                logger.debug("当前新闻{}已经存在,将跳过",title);
                continue;
            }
//
            sysNews.setTitle(title);
            sysNews.setTheme(title);

            String url = currObj.getString("url");
            logger.debug("url:{}", url);//详情页url
            String newsTime = currObj.getString("newsTime");
            logger.debug("newsTime:{}", newsTime);
            sysNews.setField3(newsTime);//新闻发布时间
            String source = currObj.getString("source");
            logger.debug("source:{}", source);
            String commentUrl = currObj.getString("commentUrl");
            logger.debug("commentUrl:{}", commentUrl);
            JSONObject thumbnails = currObj.getJSONObject("thumbnails");//处理图片
        IPage<SysNews> newsIPage = newsService.page(indexPage, queryWrapper);
        logger.debug("获取的系统特色新闻列表:"+newsIPage);
        Map resultMap = ToolsUtils.wrapperResult(newsIPage, "featureList");
        return ResultUtil.successData(resultMap);
    }

    @ApiOperation("获取推荐新闻列表")
    @RequestMapping("/recommendList/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean recommendList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                SysNews queryParam,HttpSession session) {
        logger.debug("查询推荐新闻列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<SysNews> queryWrapper=new QueryWrapper<>();
        queryWrapper.orderByDesc("id");
        IPage<SysNews> indexPage = new Page<>(pageNum, pageSize);
        SysUser loginUser = ToolsUtils.getLoginUser(session);
        if(loginUser!=null){
            List<Long> idList=getRecommendIdList(loginUser);
            queryWrapper.in(ToolsUtils.isNotEmpty(idList),"id",idList);
        }
        IPage<SysNews> newsIPage = newsService.page(indexPage, queryWrapper);
        logger.debug("获取的推荐新闻列表:"+newsIPage);
        Map resultMap = ToolsUtils.wrapperResult(newsIPage, "recommendList");
        return ResultUtil.successData(resultMap);
    }

    /**
     * 用户  物品-电影 新闻   评分(关系数,评分/评论数/转发数/点赞数)
     * @param loginUser
     * @return
     */
    private List<Long> getRecommendIdList(SysUser loginUser){
        List<SysNews> newsList = newsService.list();
        List<NewsForward> forwardList = forwardService.list();
        List<NewsFavor> favorList = favorService.list();
        List<NewsComment> commentList = commentService.list();
        List<SysUser> userList = userService.list();
        List<NewsNumber> newsNumberList=new ArrayList<>();
        for(SysNews news:newsList){
            for(SysUser user:userList){
            return  new ResponseBean(false,CommonEnum.BAD_REQUEST);
        }
        boolean delete = userService.removeById(id);
        logger.debug("删除结果:"+delete);
        return new ResponseBean<Map<String, Object>>(true, null, CommonEnum.SUCCESS_REQUEST);
    }
}

     * 获取登录用户信息
     * */
    public static SysUser getLoginUser(HttpSession session){
        Object user = session.getAttribute("user");

        return user==null?null:(SysUser) user;
    }

    /**
     * 获取登录用户ID
     * @param session
     * @return
     */
    public static Long getLoginUserId(HttpSession session){
        Object user = session.getAttribute("user");
        if(user==null){
           return  null;
        }else{
            SysUser loginUser= (SysUser) user;
            return loginUser.getId();
        }
    }

    /**
     * 获取登录用户名称
     * @param session
     * @return
     */
    public static String getLoginUserName(HttpSession session){
        Object user = session.getAttribute("user");
        if(user==null){
           return null;
        }else{
            SysUser loginUser= (SysUser) user;
            return loginUser.getName();
        }
    }

    //驼峰转下划线
    public static String camelToUnderline(String fieldName){
        StringBuffer stringBuffer=new StringBuffer();
        for(int i=0;i<fieldName.length();i++){
            char c = fieldName.charAt(i);
            //65-90是大写A到大写Z 97到122是小写a到小写z。
            if(i!=0&&i!=fieldName.length()-1&&c>=65&&c<=90){
                //说明是大写且非首末字母则需要转驼峰
                char lowerCase = Character.toLowerCase(c);
                stringBuffer.append("_").append(lowerCase);
    public ResponseBean reptileFile(HttpSession session, @RequestParam(name="number",defaultValue = "20",required = false) Integer number, Long categoryId) {
        String categoryName=categoryService.getById(categoryId).getName();
        AtomicInteger ait=new AtomicInteger(0);
        Date date = new Date();
        Date date1 = DateUtils.addDay(date, 168311);
        logger.debug("当前时间戳:{}", System.currentTimeMillis());
        long timeMillis = DateUtils.getTimeMillis(date1);
        logger.debug("转换后的时间戳:{}", timeMillis);
        JSONObject contentObj = new JSONObject();
        String grapUrl=null;
        switch (categoryName){
            case "娱乐·音乐":
                grapUrl=yuleyiyueUrl;
                JSONObject firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMusic);
                defaultYuLeId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeId);
                contentObj.put("idTimeMills", defaultYuLeTimeMills);
                break;
            case "娱乐·明星":
                grapUrl=yulestarUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlStar);
                defaultYuLeStarId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeStarTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeStarId);
                contentObj.put("idTimeMills", defaultYuLeStarTimeMills);
                break;
            case "娱乐·电影":
                grapUrl=yulefilmUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMovie);
                defaultYuLeFilmId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeFilmTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeFilmId);
                contentObj.put("idTimeMills", defaultYuLeFilmTimeMills);
                break;
        }
        contentObj.put("currTimeMills", timeMillis);
        //解析URL
        String parseUrl = getContent(grapUrl, contentObj);
        logger.debug("第一次获取的grapUrl:{}",parseUrl);
        for(int i=0;i<1000;i++){
            Integer data = getPageData(session, categoryId, ait,number,parseUrl);
            logger.debug("当前抓取数据量:{}",data);
            if(data==-1){
                return ResultUtil.error();
            }
            if(data<number&&data!=999999){
                QueryWrapper<SysNews> queryWrapper = new QueryWrapper<>();
                queryWrapper.eq("category_name", categoryName);

/**
 * <p>
 * 用户关注表 前端控制器
 * </p>
 *
 *
 */
@Controller
@RequestMapping({"/attention","/home/attention"})
public class UserAttentionController {

    private static  final Logger logger= LoggerFactory.getLogger(UserAttentionController.class);

    private static final String page_prefix="attention/";
    @Autowired
    UserAttentionService attentionService;

    @Autowired
    SysUserService userService;

    //前端页面进行关注或取关 action 1 关注;2 取关
    @RequestMapping("updateAttention")
    @ResponseBody
    public ResponseBean updateAttention(UserAttention attention,Long action, HttpSession session){
        SysUser loginUser = ToolsUtils.getLoginUser(session);
        Long toUserId = attention.getToUserId();
        SysUser toUser = userService.getById(toUserId);
        if (action==1){
            //进行关注
            attention.setFromUserId(loginUser.getId());
            attention.setFromUserName(loginUser.getName());
            attention.setToUserName(toUser.getName());
            attentionService.save(attention);
        }else if(action==2){
            QueryWrapper<UserAttention> wrapper=new QueryWrapper();
            wrapper.eq("from_user_id",loginUser.getId()).eq("to_user_id",toUserId);
            attentionService.remove(wrapper);
        }
        return  ResultUtil.success();
    }


		if (!ServletFileUpload.isMultipartContent(request)) {
			return new BaseState(false, AppInfo.NOT_MULTIPART_CONTENT);
		}

		ServletFileUpload upload = new ServletFileUpload(
				new DiskFileItemFactory());

        if ( isAjaxUpload ) {
            upload.setHeaderEncoding( "UTF-8" );
        }

		try {
			FileItemIterator iterator = upload.getItemIterator(request);

			while (iterator.hasNext()) {
				fileStream = iterator.next();

				if (!fileStream.isFormField())
					break;
				fileStream = null;
			}

			if (fileStream == null) {
				return new BaseState(false, AppInfo.NOTFOUND_UPLOAD_DATA);
			}

			String savePath = (String) conf.get("savePath");
			String originFileName = fileStream.getName();
			String suffix = FileType.getSuffixByFilename(originFileName);

			originFileName = originFileName.substring(0,
					originFileName.length() - suffix.length());
			savePath = savePath + suffix;

			long maxSize = ((Long) conf.get("maxSize")).longValue();

			if (!validType(suffix, (String[]) conf.get("allowFiles"))) {
				return new BaseState(false, AppInfo.NOT_ALLOW_FILE_TYPE);
			}

			savePath = PathFormat.parse(savePath, originFileName);
public class GrapNewsController {

    @Autowired
    SysNewsService newsService;

    @Autowired
    SysUserService userService;

    @Autowired
    NewsCategoryService categoryService;

    private static  final Logger logger= LoggerFactory.getLogger(GrapNewsController.class);

    //设置爬取网页
    private static  String baseUrlStar="https://ent.ifeng.com/star/";//娱乐·明星首页
    private static  String baseUrlMovie="https://ent.ifeng.com/movie/";//娱乐·电影首页
    private static  String baseUrlMusic="https://ent.ifeng.com/music/";//娱乐·音乐首页

    //爬取文件存放路径
    //
    @Value("${com.cgx.file.baseFilePath}")
    private String baseFilePath;

    private static String yuleyiyueUrl="https://shankapi.ifeng.com/shanklist/_/getColumnInfo/_/default/{id}/{idTimeMills}/20/4-20077-/getColumnInfoCallback?callback=getColumnInfoCallback&_={currTimeMills}";
    private static String yulestarUrl="https://shankapi.ifeng.com/shanklist/_/getColumnInfo/_/default/{id}/{idTimeMills}/20/4-20074-/getColumnInfoCallback?callback=getColumnInfoCallback&_={currTimeMills}";
    private static String yulefilmUrl="https://shankapi.ifeng.com/shanklist/_/getColumnInfo/_/default/{id}/{idTimeMills}/20/4-20075-/getColumnInfoCallback?callback=getColumnInfoCallback&_={currTimeMills}";

    private String defaultYuLeId="6760584714211311643";//娱乐音乐
    private String defaultYuLeTimeMills="1611846336000";//娱乐音乐

    private String defaultYuLeStarId="6776520715089744701";//娱乐明星
    private String defaultYuLeStarTimeMills="1615739836000";//娱乐明星

    private String defaultYuLeFilmId="6776324094754296302";//娱乐电影
    private String defaultYuLeFilmTimeMills="1615604038000";//娱乐电影

    //爬取凤凰新闻 爬取条数可不输入,默认20

    @RequestMapping("/grapYuLeNews")
    @ResponseBody
    public ResponseBean reptileFile(HttpSession session, @RequestParam(name="number",defaultValue = "20",required = false) Integer number, Long categoryId) {
        String categoryName=categoryService.getById(categoryId).getName();
        AtomicInteger ait=new AtomicInteger(0);
    private String defaultYuLeStarId="6776520715089744701";//娱乐明星
    private String defaultYuLeStarTimeMills="1615739836000";//娱乐明星

    private String defaultYuLeFilmId="6776324094754296302";//娱乐电影
    private String defaultYuLeFilmTimeMills="1615604038000";//娱乐电影

    //爬取凤凰新闻 爬取条数可不输入,默认20

    @RequestMapping("/grapYuLeNews")
    @ResponseBody
    public ResponseBean reptileFile(HttpSession session, @RequestParam(name="number",defaultValue = "20",required = false) Integer number, Long categoryId) {
        String categoryName=categoryService.getById(categoryId).getName();
        AtomicInteger ait=new AtomicInteger(0);
        Date date = new Date();
        Date date1 = DateUtils.addDay(date, 168311);
        logger.debug("当前时间戳:{}", System.currentTimeMillis());
        long timeMillis = DateUtils.getTimeMillis(date1);
        logger.debug("转换后的时间戳:{}", timeMillis);
        JSONObject contentObj = new JSONObject();
        String grapUrl=null;
        switch (categoryName){
            case "娱乐·音乐":
                grapUrl=yuleyiyueUrl;
                JSONObject firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMusic);
                defaultYuLeId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeId);
                contentObj.put("idTimeMills", defaultYuLeTimeMills);
                break;
            case "娱乐·明星":
                grapUrl=yulestarUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlStar);
                defaultYuLeStarId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeStarTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeStarId);
                contentObj.put("idTimeMills", defaultYuLeStarTimeMills);
                break;
            case "娱乐·电影":
                grapUrl=yulefilmUrl;
                firstIdAndTimeMills = getFirstIdAndTimeMills(baseUrlMovie);
                defaultYuLeFilmId = firstIdAndTimeMills.getString("id");//新闻ID
                defaultYuLeFilmTimeMills = firstIdAndTimeMills.getString("idTimeMills");//新闻发布时间
                contentObj.put("id", defaultYuLeFilmId);
                contentObj.put("idTimeMills", defaultYuLeFilmTimeMills);
                break;
        }
        contentObj.put("currTimeMills", timeMillis);
        //解析URL
        String parseUrl = getContent(grapUrl, contentObj);
        logger.debug("第一次获取的grapUrl:{}",parseUrl);
            return ResultUtil.error(CommonEnum.BAD_PARAM);
        }
        String name = category.getName();
        String code = category.getCode();
        QueryWrapper<NewsCategory> queryWrapper=new QueryWrapper<>();
        queryWrapper.like("code",code).like("name",name).ne("id",category.getId());
        List<NewsCategory> list = categoryService.list(queryWrapper);
        if(!ToolsUtils.isEmpty(list)){
            return ResultUtil.error("名称或编码已经存在!");
        }
        category.setUpdateTime(LocalDateTime.now());
        boolean i = categoryService.updateById(category);
        return ResultUtil.successData(category);
    }

    /**
     * 跳转列表页面
     * @return
     */
    @RequestMapping("/listPage")
    public String listPage() {
        return page_prefix+"list";
    }

    /**
     * 新闻分类列表查询
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param queryParam 查询参数
     * @param vagueParam 模糊参数
     * @return
     */
    @ApiOperation("获取新闻分类列表")
    @RequestMapping("/list/{pageNum}/{pageSize}")
    @ResponseBody
    public ResponseBean getList(@PathVariable Integer pageNum,@PathVariable Integer pageSize,
                                NewsCategory queryParam,String vagueParam) {
        logger.debug("查询新闻分类列表参数:"+queryParam+",pageNum:"+pageNum+",pageSize:"+pageSize);
        QueryWrapper<NewsCategory> queryWrapper=new QueryWrapper<>();
//        模糊查询
                user.setType(Integer.parseInt(type));
                userService.save(user);
            }
            return ResultUtil.success("导入成功!");

        } catch (IOException e) {
            logger.error(e.getMessage(),e);
        }
        return ResultUtil.error();
    }

    //用户添加
    @RequestMapping("add")
    @ResponseBody
    public ResponseBean addUser(SysUser user, MultipartFile file,Model model){
        logger.debug("addSysUser:"+user);
        if(user==null){
            return  ResultUtil.error(CommonEnum.BAD_PARAM);
        }
        String mobile = user.getMobile();
        if(StringUtils.isEmpty(mobile)||!RegexUtil.checkMobile(mobile)){
            logger.error("手机号为空!");
            return  ResultUtil.error("手机号不合法!");
        }
        if(StringUtils.isEmpty(user.getCode())){
            return ResultUtil.error("登录账号为空!");
        }
        QueryWrapper<SysUser> queryWrapper=new QueryWrapper();
        queryWrapper.eq("code",user.getCode()).or().eq("mobile",mobile);
        List<SysUser> pageUserList = userService.list(queryWrapper);
        if(ToolsUtils.isNotEmpty(pageUserList)){
            return ResultUtil.error("手机号或账号已存在!");
        }
        String password=StringUtils.isEmpty(user.getPassword())?"123456":user.getPassword();
        //对密码进行MD5盐值加密,数据库保存密码的密文
        //MD5Util.md5(password,md5Key  md5key就是盐值
        user.setPassword(MD5Util.md5(password,md5Key));
        boolean add = userService.save(user);
        logger.debug("用户添加结果:"+user);
        //保存文件并更新saveName到user.field1
        if (file!=null&&!file.isEmpty()) {
            SysFile sysFile=new SysFile();
            sysFile.setObjectId(user.getId());
            sysFile.setField5((userService.getById(sysFile.getObjectId())).getName());
            sysFile.setCategoryCode(ComCodeEnum.category_code_user);
            SysFile saveFile=fileService.saveOrUpdateFile(sysFile,file);
            if(saveFile!=null&&!StringUtils.isEmpty(saveFile.getSaveName())){
                user.setField1(saveFile.getSaveName());
            }
            userService.updateById(user);
        }

请添加图片描述

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值