萌新小白萌新中软实习day11,评论+分类页面+标签页面

评论+分类页面+标签页面
CommentRepository接口

package com.zr.news.dao;

import com.zr.news.po.Comment;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface CommentRepository extends JpaRepository<Comment,Long> {

    List<Comment> findByNewsIdAndParentCommentNull(Long newId, Sort sort);

}


po.comment实体类

package com.zr.news.po;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Entity
@Table(name = "t_comment")
public class Comment {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String nickname;
    private String email;
    private String content;
    private String avatar;
    @Temporal(TemporalType.TIMESTAMP)
    private Date createTime;

    @ManyToOne
    private News news;

    @OneToMany(mappedBy = "parentComment")
    private List<Comment> replyComments = new ArrayList<>();

    @ManyToOne
    private Comment parentComment;

    private boolean adminComment;

    public Comment() {
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getAvatar() {
        return avatar;
    }

    public void setAvatar(String avatar) {
        this.avatar = avatar;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public News getNews() {
        return news;
    }

    public void setNews(News news) {
        this.news = news;
    }

    public List<Comment> getReplyComments() {
        return replyComments;
    }

    public void setReplyComments(List<Comment> replyComments) {
        this.replyComments = replyComments;
    }

    public Comment getParentComment() {
        return parentComment;
    }

    public void setParentComment(Comment parentComment) {
        this.parentComment = parentComment;
    }

    public boolean isAdminComment() {
        return adminComment;
    }

    public void setAdminComment(boolean adminComment) {
        this.adminComment = adminComment;
    }

    @Override
    public String toString() {
        return "Comment{" +
                "id=" + id +
                ", nickname='" + nickname + '\'' +
                ", email='" + email + '\'' +
                ", content='" + content + '\'' +
                ", avatar='" + avatar + '\'' +
                ", createTime=" + createTime +
                ", news=" + news +
                ", replyComments=" + replyComments +
                ", parentComment=" + parentComment +
                ", adminComment=" + adminComment +
                '}';
    }
}

Service.CommentService

package com.zr.news.service;

import com.zr.news.po.Comment;

import java.util.List;

public interface CommentService {



    List<Comment> listCommentByNewId(Long newId);

    Comment savaComment(Comment comment);

}

Impl.CommentServiceImpl

package com.zr.news.service.impl;

import com.zr.news.dao.CommentRepository;
import com.zr.news.po.Comment;
import com.zr.news.service.CommentService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class CommentServiceImpl implements CommentService {

    @Autowired
    private CommentRepository commentRepository;

    @Override
    public List<Comment> listCommentByNewId(Long newId) {
        Sort sort = Sort.by("creatTime");
        List<Comment> comments = commentRepository.findByNewsIdAndParentCommentNull(newId,sort);
        return eachComment(comments);
    }

    private List<Comment> eachComment(List<Comment> comments){
        List<Comment> commentView = new ArrayList<>();
        for (Comment comment:comments){
            Comment c = new Comment();
            BeanUtils.copyProperties(comment,c);
            commentView.add(c);
        }
        //合并评论的各层子代到第一级子代集合中
        combineChildren(commentView);
        return commentView;
    }

    private void combineChildren(List<Comment> comments){
        for (Comment comment:comments){
            List<Comment> replys1 = comment.getReplyComments();
            for (Comment reply1 : replys1){
                //循环迭代,找出子代,存放在临时tempReplys中
                recursively(reply1);
            }
            comment.setReplyComments(tempReplys);
            //清除临时存放区
            tempReplys = new ArrayList<>();
        }
    }

    private List<Comment> tempReplys = new ArrayList<>();

    private void recursively(Comment comment){
        tempReplys.add(comment);//顶节点添加到临时存放区
        if(comment.getReplyComments().size()>0){
            List<Comment> replys = comment.getReplyComments();
            for (Comment reply:replys){
                tempReplys.add(reply);
                if(reply.getReplyComments().size()>0){
                    recursively(reply);
                }
            }
        }
    }



    @Override
    public Comment savaComment(Comment comment) {
        Long parentCommentId = comment.getParentComment().getId();
        if(parentCommentId!=-1){
            comment.setParentComment(commentRepository.findById(parentCommentId).orElse(null));
        }
        else {
            comment.setParentComment(null);
        }
        comment.setCreateTime(new Date());
        return commentRepository.save(comment);
    }
}

admin.CommentController

package com.zr.news.web.admin;

import com.zr.news.po.Comment;
import com.zr.news.po.User;
import com.zr.news.service.CommentService;
import com.zr.news.service.NewService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;

import javax.servlet.http.HttpSession;

public class CommentController {

    @Autowired
    private CommentService commentService;

    @Autowired
    private NewService newService;

    private String avatar = "https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1596407128664&di=e01fe072dbbd6943aeef239ad751487b&imgtype=0&src=http%3A%2F%2Fb-ssl.duitang.com%2Fuploads%2Fitem%2F201901%2F13%2F20190113095948_cince.jpg";

    @GetMapping("/comments/{newId}")
    public String comments(@PathVariable Long newId, Model model){
        model.addAttribute("comments",commentService.listCommentByNewId(newId));
        return "new::commentList";
    }

    @PostMapping("/comments")
    public String post(Comment comment, HttpSession session){
        Long newId = comment.getNews().getId();
        comment.setNews(newService.getNew(newId));
        User user = (User) session.getAttribute("user");
        if(user!=null){
            comment.setAdminComment(true);
            comment.setAvatar(avatar);
        }else {
            comment.setAvatar(avatar);
        }
        commentService.savaComment(comment);
        System.out.println(commentService.savaComment(comment));
        return "index";


    }

}

小结
其实还没写完,先发了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 中软是一家国内知名的信息技术服务公司,而AIoT(人工智能物联网)业务线则是其重点发展的业务之一。新员工入职信息安全考试是中软对于新员工在AIoT业务线中处理信息安全的能力进行评估的一项考试。 首先,新员工入职信息安全考试旨在确保员工具备必要的信息安全意识和知识,以保护客户和公司的机密信息免受未授权访问、泄露、篡改、破坏等风险。考试内容通常包括信息安全的基本概念、安全策略和控制措施、网络安全、数据保护等方面的知识。 其次,通过该考试,中软能够评估新员工在信息安全方面的素养和技能水平,以便能够针对不同职位的需求进行合理的岗位分配和培训计划。对于顺利通过考试的新员工,中软还会为其提供相关的培训和指导,以进一步提升其信息安全意识和技术能力。 此外,中软将信息安全视为企业发展和运营的重要一环,通过严格的安全管理制度、技术措施和员工培训,确保信息的完整性、可用性和保密性。中软鼓励员工积极参与信息安全管理,提供漏洞发现和风险防范的建议,并重视员工的反馈和意见。 综上所述,AIoT业务线中新员工入职信息安全考试是中软对员工信息安全能力的一种评估方式,旨在保护客户和公司的信息安全。这也体现了中软对信息安全的重视,并为新员工提供进一步发展和成长的机会。 ### 回答2: 中软的AIoT业务线是指人工智能与物联网技术相结合的业务线。AIoT业务线致力于通过将物联网设备与人工智能技术相结合,提供智能化的解决方案和服务。 对于新员工入职,信息安全考试是必不可少的环节。信息安全对于企业来说至关重要,尤其是在涉及到客户的敏感信息和业务数据的处理时。 入职信息安全考试主要是通过测试员工对于信息安全的基本概念、操作规程和应急响应能力的掌握程度。考试内容涵盖了密码安全、文件保密、网络安全、防病毒防骗等方面的知识。 中软对于新员工的信息安全考试非常重视,旨在提高员工对企业信息的保护意识和技能。通过合格的入职信息安全考试,新员工可以更加深入地了解公司的信息安全政策和意识,并掌握正确的信息安全操作方式。 入职信息安全考试也是一个培养员工信息安全保护意识和能力的过程。通过这个考试,新员工将能够更好地保护公司和客户的信息安全,减少信息泄露和损失的风险。 为了保证信息安全,中软还会通过对考试结果的评估和反馈,为新员工提供相关的培训和知识更新,以不断提升员工的信息安全素质。 总之,AIoT业务线是中软公司重要的业务线之一,而入职信息安全考试是保护公司信息安全的一项重要措施。中软希望通过考试提高新员工的信息安全意识和操作能力,确保信息的安全性和完整性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值