基于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
使用说明
- 使用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);
}