package com.yaoyuan.jiscuss.controller; import com.yaoyuan.jiscuss.entity.Discussion; import com.yaoyuan.jiscuss.entity.Tag; import com.yaoyuan.jiscuss.entity.User; import com.yaoyuan.jiscuss.entity.UserInfo; import com.yaoyuan.jiscuss.entity.custom.DiscussionCustom; import com.yaoyuan.jiscuss.entity.custom.TagCustom; import com.yaoyuan.jiscuss.service.IDiscussionsService; import com.yaoyuan.jiscuss.service.ITagsService; import com.yaoyuan.jiscuss.service.IUsersService; import com.yaoyuan.jiscuss.util.DelTagsUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.view.RedirectView; import jakarta.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.Date; import java.util.HashSet; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; /** * @author yaoyuan2.chu * 首页页面系统控制器 */ @Controller public class UserSystemController extends BaseController { private static Logger logger = LoggerFactory.getLogger(UserSystemController.class); @Autowired private IUsersService usersService; @Autowired private IDiscussionsService discussionsService; @Autowired private ITagsService tagsService; /** * 首页index * @param tag * @param type * @param pageNum * @param request * @param map * @return */ @RequestMapping({"/", "/main", "/index"}) public String home(@RequestParam(defaultValue = "all") String tag, @RequestParam(defaultValue = "all") String type, @RequestParam(defaultValue = "1") Integer pageNum, HttpServletRequest request, ModelMap map) { logger.info(">>> index"); logger.info(">>> tag:" + tag); logger.info(">>> pageNum:" + pageNum); int pageSiz = 10; int pageNumNew = pageNum - 1; Discussion discussion = new Discussion(); //分页获取主题帖子-默认 Page allDiscussionsPage = discussionsService.queryAllDiscussionsList(discussion, pageNumNew, pageSiz, tag, type); List allDiscussions = allDiscussionsPage.getContent(); List newAllD = new ArrayList<>(); setTagAndUserList(newAllD, allDiscussions); logger.info("全部主题==>:{}", allDiscussions); Long total = allDiscussionsPage.getTotalElements(); //获取主题帖子的分页数据(以后尝试去缓存中取) List pageNumList = getPageNumList(allDiscussionsPage.getTotalPages()); //获取所有标签(以后尝试去缓存中取) List allTags = tagsService.getAllList(); logger.info("全部标签==>:{}", allTags); if (!tag.equals("all")) { //获取是否有子标签 List allChildTags = tagsService.findByParentId(tag); map.put("allChildTags", allChildTags); } map.put("data", "Jiscuss 用户"); map.put("allDiscussions", newAllD); map.put("allUser", usersService.getAllList()); map.put("pageDiscussions", pageNumList); map.put("allTags", allTags); map.put("tag", tag); map.put("type", type); if (type.equals("all")) { map.put("typeAll", "active"); } if (type.equals("hot")) { map.put("typeHot", "active"); } if (type.equals("new")) { map.put("typeNew", "active"); } map.put("pageSize", pageSiz); map.put("pageTotal", total); map.put("pageNum", pageNum); map.put("pageTotalPages", allDiscussionsPage.getTotalPages()); UserInfo user = getUserInfo(request); if (user != null) { map.put("username", user.getUsername()); map.put("data", "Jiscuss 用户:" + user.getUsername()); } return "index"; } /** * 组装DiscussionCustom * * @param newAllD * @param allDiscussions */ private void setTagAndUserList(List newAllD, List allDiscussions) { List discussionIdLsit = new ArrayList<>(); for (Discussion dd : allDiscussions) { discussionIdLsit.add(dd.getId()); } List TagCustomList = tagsService.findByDiscussionIdlistId(discussionIdLsit); Map> tagMap = new HashMap<>(); for (TagCustom tc : TagCustomList) { List tagCustomListTemp = new ArrayList<>(); if (tagMap.containsKey(tc.getDiscussionId())) { tagCustomListTemp = tagMap.get(tc.getDiscussionId()); tagCustomListTemp.add(tc); tagMap.put(tc.getDiscussionId(), tagCustomListTemp); } else { tagCustomListTemp.add(tc); tagMap.put(tc.getDiscussionId(), tagCustomListTemp); } } Set userIds = new HashSet<>(); for (Discussion dd : allDiscussions) { if (dd.getStartUserId() != null) { userIds.add(dd.getStartUserId()); } if (dd.getLastUserId() != null) { userIds.add(dd.getLastUserId()); } } Map userMap = usersService.findAllById(userIds).stream() .collect(Collectors.toMap(User::getId, u -> u)); for (Discussion dd : allDiscussions) { DiscussionCustom newdd = new DiscussionCustom(); BeanUtils.copyProperties(dd, newdd); String newCon = ""; String content = DelTagsUtil.getTextFromHtml(newdd.getContent()); if (null != content && content.length() > 30) { newCon = content.substring(0, 29); } else { newCon = content; } newdd.setContent(newCon); if (null != newdd.getStartUserId()) { User startUser = userMap.get(newdd.getStartUserId()); newdd.setAvatar(startUser != null && startUser.getAvatar() != null ? startUser.getAvatar() : ""); newdd.setRealname(startUser != null && startUser.getRealname() != null ? startUser.getRealname() : ""); newdd.setUsername(startUser != null && startUser.getUsername() != null ? startUser.getUsername() : ""); } if (null != newdd.getLastUserId()) { User lastUser = userMap.get(newdd.getLastUserId()); newdd.setAvatarLast(lastUser != null && lastUser.getAvatar() != null ? lastUser.getAvatar() : ""); newdd.setRealnameLast(lastUser != null && lastUser.getRealname() != null ? lastUser.getRealname() : ""); newdd.setUsernameLast(lastUser != null && lastUser.getUsername() != null ? lastUser.getUsername() : ""); } // 组装tag newdd.setTagList(tagMap.get(dd.getId())); newAllD.add(newdd); } } /** * 分页信息 * * @param size * @return */ private List getPageNumList(int size) { List pageNumList = new ArrayList(); for (int i = 0; i < size; i++) { pageNumList.add("" + (i + 1)); } return pageNumList; } /** * 登录页 * * @param error * @param logout * @param map * @return */ @GetMapping("/login") public String login(@RequestParam(value = "error", required = false) String error, @RequestParam(value = "logout", required = false) String logout, ModelMap map) { if (error != null) { map.put("msg", "您输入的用户名密码错误!"); return "login"; } if (logout != null) { map.put("msg", "退出成功!"); return "login"; } return "login"; } @GetMapping("/favicon.ico") public RedirectView favicon() { return new RedirectView("/static/assets/images/logo.png"); } /** * 注册提交 * @param username * @param email * @param password * @param map * @return */ @PostMapping("/registerDo") public String registerDo(@RequestParam String username, @RequestParam String email, @RequestParam String password, ModelMap map) { //验证用户名是否存在 if (null != usersService.getByUsername(username)) { map.put("msg", "用户已存在,请重试!"); return "register"; } else { User user = new User(); user.setEmail(email); user.setPassword(password); user.setUsername(username); user.setRealname(username); user.setJoinTime(new Date()); User userInsert = usersService.insert(user); map.put("msg", "注册成功,请登陆!"); return "login"; } } /** * 注册页面 * * @return */ @RequestMapping("/register") public String register() { return "register"; } //获取设置信息 //获取首页统计 }