Cloud note technical documentation

Cloud note technical documentation

User

define entity

public class User implements Serializable {
    
    
    
    private String cn_user_id;
    private String cn_user_name;
    private String cn_user_password;
    private String cn_user_token;
    private String cn_user_nick;
	
    ...
}

Define operations on User-related data in the database

UserMapper.xml

Define the update password, find User by ID, find User by name, add User operation

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.cloudnote.dao.UserDao">
    <!--public User findByName(String name);-->

    <update id="updatePassword" parameterType="string" >
        update cn_user set cn_user_password=#{new_password} where cn_user_id=#{userId}
    </update>

    <select id="findById" parameterType="string" resultType="org.cloudnote.entity.User">
        select * from  cn_user where cn_user_id=#{userId} and cn_user_password=#{last_password}
    </select>
    <select id="findByName" parameterType="string"
            resultType="org.cloudnote.entity.User">
        select * from cn_user where cn_user_name=#{name}
    </select>
    <!-- public void save(User user);-->
    <insert id="save" parameterType="org.cloudnote.entity.User">
        insert  into cn_user
        (cn_user_id,
         cn_user_name,
         cn_user_password,
         cn_user_token,
         cn_user_nick)
         values
         (
         #{cn_user_id},
         #{cn_user_name},
        #{cn_user_password},
        #{cn_user_token},
         #{cn_user_nick}
         )
    </insert>
</mapper>

Create a Dao layer interface to connect the above operations

public interface UserDao {
    
    

    public User findByName(String name);

    public void save(User user);
    
    User findById(@Param("userId") String userId, @Param("last_password")String last_password);

    void updatePassword(@Param("userId") String userId, @Param("new_password")String new_password);
}

Implement specific functions in the Service layer

In the Service layer, the functions of changing password, logging in, and registering are implemented

Interface: UserService.java

public interface UserService {
    
    
    public NoteResult checkLogin(String name, String password);

    NoteResult changepassword(String last_password, String new_password,String userId);
    
    public NoteResult regist(String name, String password, String nick);
}

Implementation: UserServicelmpl.java

@Service("userService")
public class UserServiceImpl implements UserService {
    
    

    @Autowired
    private UserDao userDao;


    @Override
    public NoteResult changepassword(String last_password, String new_password,String userId) {
    
    
        NoteResult result = new NoteResult();
        String last_password_md5 = NoteUtil.md5(last_password);
        String new_password_md5 = NoteUtil.md5(new_password);

        User user = userDao.findById(userId,last_password_md5);
        if(user == null){
    
    
            result.setStatus(1);
            result.setMsg("原始密码错误");
            return result;
        }

        userDao.updatePassword(userId,new_password_md5);
        result.setStatus(0);
        result.setMsg("密码修改成功");
        return result;
    }


    @Override
    public NoteResult checkLogin(String name, String password) {
    
    
        NoteResult result = new NoteResult();
        //根据用户名获取用户
        User user = userDao.findByName(name);
        if(user == null){
    
    
            result.setStatus(1);
            result.setMsg("用户名不存在");
            return result;
        }
        //查验密码
        String md5_password = NoteUtil.md5(password);
        if(!user.getCn_user_password().equals(md5_password)){
    
    
            result.setStatus(2);
            result.setMsg("密码错误");
            return result;
        }
        //用户名密码正确
        result.setStatus(0);
        result.setMsg("用户名密码正确");
        result.setData(user.getCn_user_id());//返回userId
        return result;
    }

    @Override
    public NoteResult regist(String name, String password, String nick) {
    
    
        NoteResult result = new NoteResult();
        //数据检测
        User has_user = userDao.findByName(name);
        if(has_user != null){
    
    
            result.setStatus(1);
            result.setMsg("用户名被占用");
            return result;
        }
        //将参数封装成user对象保存
        User user = new User();
        user.setCn_user_name(name);
        user.setCn_user_nick(nick);
        String md5_password = NoteUtil.md5(password);
        user.setCn_user_password(md5_password);
        user.setCn_user_token(null);
        String userId = NoteUtil.createId();
        user.setCn_user_id(userId);
        userDao.save(user);
        result.setStatus(0);
        result.setMsg("注册成功");
        return result;
    }
}

Call the method at the Controller layer, and give the URL interface of the specific function

UserLoginController.java

The following URLs are defined:

/user/changepassword.do: change password

/user/login.do: login

/user/regist.do: Register

@Controller
@RequestMapping("/user")
public class UserLoginController {
    
    

    @Autowired
    private UserService userService;

    @RequestMapping("/changepassword.do")
    @ResponseBody
    public NoteResult changepassword(String last_password,String new_password,String userId){
    
    
        NoteResult noteResult = userService.changepassword(last_password, new_password,userId);
        System.out.println("noteResult = " + noteResult);
        return noteResult;
    }

    @RequestMapping("/login.do")
    @ResponseBody
    public NoteResult execute(String name,String password){
    
    
        NoteResult noteResult = userService.checkLogin(name, password);
        System.out.println("noteResult = " + noteResult);
        return noteResult;
    }

    @ResponseBody
    @RequestMapping("/regist.do")
    public NoteResult register(String name,String nick,String password){
    
    
        NoteResult noteResult = userService.regist(name, password,nick);
        return noteResult;
    }
}

NoteBook

define entity

public class NoteBook implements Serializable{
    
    
    
    private String cn_notebook_id;
    private String cn_user_id;
    private String cn_notebook_type_id;
    private String cn_notebook_name;
    private String cn_notebook_desc;
    private Timestamp cn_notebook_createtime;
	
    ...
}

Define operations on NoteBook-related data in the database

NoteBookMapper.xml

Defines the operation of adding Notebook, looking for Notebook by User_id

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.cloudnote.dao.BookDao">
    <insert id="save" parameterType="org.cloudnote.entity.NoteBook">
        insert into cn_notebook
        (cn_notebook_id,
        cn_user_id,
        cn_notebook_type_id,
        cn_notebook_name,
        cn_notebook_desc,
        cn_notebook_createtime)
        values
        (
        #{cn_notebook_id},
        #{cn_user_id},
        #{cn_notebook_type_id},
        #{cn_notebook_name},
        #{cn_notebook_desc},
        #{cn_notebook_createtime}
        )
    </insert>
     <select id="findByUserId" parameterType="string"
             resultType="org.cloudnote.entity.NoteBook">
         select  * from cn_notebook where cn_user_id=#{userId}
     </select>
</mapper>

Create a Dao layer interface to connect the above operations

public interface BookDao {
    
    
    public void save(NoteBook noteBook);
    public List<NoteBook> findByUserId(String userId);
}

Implement specific functions in the Service layer

In the Service layer, the functions of adding notebooks and loading notebooks are implemented

Interface: UserService.java

public interface BookService {
    
    
    public NoteResult addBook(String userId, String bookName);
    public NoteResult loadUserBooks(String userId);
}

Implementation: UserServicelmpl.java

@Service
public class BookServiceImpl implements BookService {
    
    

    @Autowired
    private BookDao bookDao;

    @Override
    public NoteResult addBook(String userId, String bookName) {
    
    
        NoteResult result = new NoteResult();
        //TODO 检测是否重名
        NoteBook book = new NoteBook();
        book.setCn_user_id(userId);
        book.setCn_notebook_name(bookName);
        String bookId = NoteUtil.createId();
        book.setCn_notebook_id(bookId);
        book.setCn_notebook_type_id("5");//normal
        book.setCn_notebook_desc("");
        Timestamp time = new Timestamp(System.currentTimeMillis());
        book.setCn_notebook_createtime(time);

        bookDao.save(book);//保存笔记本

        result.setStatus(0);
        result.setData(bookId);
        result.setMsg("创建笔记本成功");
        return result;
    }

    @Override
    public NoteResult loadUserBooks(String userId) {
    
    
        NoteResult result = new NoteResult();
        List<NoteBook> books = bookDao.findByUserId(userId);

        result.setStatus(0);
        result.setMsg("加载用户笔记本成功");
        result.setData(books);
        return result;
    }
}

Call the method at the Controller layer, and give the URL interface of the specific function

UserLoginController.java

The following URLs are defined:

/notebook/add.do: add a notebook

/notebook/loadbooks.do: load notebooks

@Controller
@RequestMapping("notebook")
public class BookController {
    
    

    @Autowired
    private BookService bookService;

    @RequestMapping("/add.do")
    @ResponseBody
    public NoteResult addBook(String userId,String bookName){
    
    
        NoteResult result = bookService.addBook(userId, bookName);
        return result;
    }

    @RequestMapping("loadbooks.do")
    @ResponseBody
    public NoteResult loadBooks(String userId){
    
    
        NoteResult result = bookService.loadUserBooks(userId);
        return result;
    }
}

Note

define entity

public class Note implements Serializable {
    
    
    
    private String cn_note_id;
    private String cn_notebook_id;
    private String cn_user_id;
    private String cn_note_status_id;
    private String cn_note_type_id;
    private String cn_note_title;
    private String cn_note_body;
    private Long cn_note_create_time;
    private Long cn_note_last_modify_time;
	
    ...
}

Define operations on Note-related data in the database

NoteMapper.xml

Defines update notes by Note_id, delete Note, update Note, find Note by id, find Note by Note_id, add Note operation

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.cloudnote.dao.NoteDao">
<!-- public int recycle(String id);-->

    <update id="updateByBookId" parameterType="map">
        update cn_note set cn_notebook_id=#{book_id} where cn_note_id=#{note_id}
    </update>


    <update id="recycle" parameterType="string">
        update cn_note
        set
        cn_note_status_id = '2'
        where cn_note_id=#{id}
    </update>

    <update id="update" parameterType="org.cloudnote.entity.Note">
        update cn_note
        set
          cn_note_title = #{cn_note_title},
           cn_note_body = #{cn_note_body},
         cn_note_last_modify_time = #{cn_note_last_modify_time}
         where
         cn_note_id = #{cn_note_id}
    </update>

     <select id="findByBookId" parameterType="string"
             resultType="org.cloudnote.entity.Note">
         select  * from cn_note
         where cn_notebook_id=#{bookId} and  cn_note_status_id='1'
     </select>
<!--Note findById(String id);-->
    <select id="findById" parameterType="string"
            resultType="org.cloudnote.entity.Note">
        select * from cn_note where cn_note_id = #{id}
    </select>
    <insert id="save" parameterType="org.cloudnote.entity.Note">
        insert into cn_note
        (cn_note_id,
         cn_notebook_id,
         cn_user_id,
         cn_note_status_id,
         cn_note_type_id,
         cn_note_title,
         cn_note_body,
         cn_note_create_time,
         cn_note_last_modify_time)
        values
        (#{cn_note_id},
         #{cn_notebook_id},
         #{cn_user_id},
         #{cn_note_status_id},
         #{cn_note_type_id},
         #{cn_note_title},
         #{cn_note_body},
         #{cn_note_create_time},
         #{cn_note_last_modify_time})
    </insert>
</mapper>

Create a Dao layer interface to connect the above operations

public interface NoteDao {
    
    

    public int recycle(String id);

    public int update(Note note);

    public List<Note> findByBookId(String bookId);

    Note findById(String id);

    void save(Note note);

    void updateByBookId(Map<String, Object> params);

}

Implement specific functions in the Service layer

In the Service layer, the functions of moving notes, searching notes, sharing notes, updating notes, loading notes, loading note content, and adding notes are realized

Interface: UserService.java

public interface NoteService {
    
    
    NoteResult moveNote(String noteId, String bookId);

    NoteResult loadShare(String shareId);

    NoteResult searchShare(String keyword);

    NoteResult shareNote(String noteId);

    NoteResult updateNote(String noteId, String noteTitle, String noteBody);

    NoteResult loadBookNotes(String bookId);

    NoteResult loadNoteDetail(String id);

    NoteResult addNote(String bookId, String noteTitle, String userId);
}

Implementation: UserServicelmpl.java

@Service
public class NoteServiceImpl implements NoteService {
    
    

    @Autowired
    private NoteDao noteDao;

    @Autowired
    private ShareDao shareDao;

    @Override
    public NoteResult moveNote(String noteId, String bookId) {
    
    
        NoteResult result = new NoteResult();
        Map<String,Object> params = new HashMap<>();
        params.put("note_id",noteId);
        params.put("book_id",bookId);
        noteDao.updateByBookId(params);

        result.setStatus(0);
        result.setMsg("转移笔记成功");
        return result;
    }

    @Override
    public NoteResult loadShare(String shareId) {
    
    
        NoteResult result = new NoteResult();
        Share share = shareDao.findById(shareId);
        if(share == null){
    
    
            result.setStatus(1);
            result.setMsg("查询失败");
            return result;
        }
        result.setStatus(0);
        result.setMsg("查询成功");
        result.setData(share);
        return result;
    }

    @Override
    public NoteResult searchShare(String keyword) {
    
    
        NoteResult result = new NoteResult();
        String title = "";
        if(!"".equals(keyword) && keyword != null){
    
    
            title = "%" + keyword + "%";
        }else {
    
    
            title = "%";
        }
        List<Share> list = shareDao.findLikeTitle(title);

        result.setStatus(0);
        result.setMsg("检索成功");
        result.setData(list);
        return result;
    }

    @Override
    public NoteResult shareNote(String noteId) {
    
    
        NoteResult result = new NoteResult();
        //检查笔记是否分享过
        Share has_share = shareDao.findByNoteId(noteId);
        if(has_share != null){
    
    
            result.setStatus(1);
            result.setMsg("该笔记分享过");
            return result;
        }
        //未分享过
        Note note = noteDao.findById(noteId);
        if(note == null){
    
    
            result.setStatus(2);
            result.setMsg("该笔记不存在");
            return result;
        }
        Share share = new Share();
        String shareId = NoteUtil.createId();
        share.setCn_share_id(shareId);
        share.setCn_share_title(note.getCn_note_title());
        share.setCn_share_body(note.getCn_note_body());
        share.setCn_note_id(note.getCn_note_id());
        //将share插入分享表
        shareDao.save(share);
        result.setStatus(0);
        result.setMsg("分享笔记成功");
        return result;
    }

    @Override
    public NoteResult updateNote(String noteId, String noteTitle, String noteBody) {
    
    
        NoteResult result = new NoteResult();
        Note note = new Note();
        note.setCn_note_id(noteId);
        note.setCn_note_title(noteTitle);
        note.setCn_note_body(noteBody);
        note.setCn_note_last_modify_time(System.currentTimeMillis());

        noteDao.update(note);
        result.setStatus(0);
        result.setMsg("保存笔记成功");
        return result;
    }

    @Override
    public NoteResult loadBookNotes(String bookId) {
    
    
        NoteResult result = new NoteResult();
        List<Note> list = noteDao.findByBookId(bookId);
        result.setData(list);
        result.setStatus(0);
        result.setMsg("加载笔记列表成功");
        return result;
    }

    @Override
    public NoteResult loadNoteDetail(String id) {
    
    
        NoteResult result = new NoteResult();
        Note note = noteDao.findById(id);
        if(note == null){
    
    
            result.setStatus(1);
            result.setMsg("找不到笔记信息");

        }
        result.setData(note);
        result.setMsg("查找笔记成功");
        result.setStatus(0);
        return result;
    }
    @Override
    public NoteResult addNote(String bookId, String noteTitle, String userId) {
    
    
        NoteResult result = new NoteResult();
        Note note = new Note();
        note.setCn_notebook_id(bookId);
        note.setCn_user_id(userId);
        note.setCn_note_title(noteTitle);
        note.setCn_note_body("空空如也");
        note.setCn_note_status_id("1");//添加笔记状态
        String noteid = NoteUtil.createId();
        note.setCn_note_id(noteid);
        noteDao.save(note);
        result.setStatus(0);
        result.setMsg("笔记添加成功");
        result.setData(noteid);
        return result;
    }
}

Call the method at the Controller layer, and give the URL interface of the specific function

UserLoginController.java

The following URLs are defined:

/note/move.do: move notes

/note/loadShare.do: load shared notes

/note//share.do: share notes

/note/update.do: update notes

/note/load.do: load note content

/note/loadnotes.do: load notes list

/note/add.do: add note

/note/search.do: Search notes

@Controller
@RequestMapping("/note")
public class NoteController {
    
    

    @Autowired
    private NoteService noteService;

    @ResponseBody
    @RequestMapping("/move.do")
    public NoteResult moveNoteCotroller(String noteId,String bookId){
    
    
        NoteResult result = noteService.moveNote(noteId,bookId);
        return result;
    }

    @ResponseBody
    @RequestMapping("loadShare.do")
    public NoteResult loadShareController(String shareId){
    
    
        NoteResult result = noteService.loadShare(shareId);
        return result;
    }

    @ResponseBody
    @RequestMapping("/search.do")
    public NoteResult searchShareCotroller(String keyword){
    
    
        NoteResult result = noteService.searchShare(keyword);
        return result;
    }

    @ResponseBody
    @RequestMapping("/share.do")
    public NoteResult shareNote(String noteId){
    
    
        NoteResult result = noteService.shareNote(noteId);
        return result;
    }

    @ResponseBody
    @RequestMapping("/update.do")
    public NoteResult updateNote(String noteId,String noteTitle,String noteBody){
    
    
        NoteResult result = noteService.updateNote(noteId,noteTitle,noteBody);
        return result;
    }

    @ResponseBody
    @RequestMapping("/load.do")
    public NoteResult loadNoteDetail(String id){
    
    
        NoteResult result = noteService.loadNoteDetail(id);
        return result;
    }

    @ResponseBody
    @RequestMapping("/loadnotes.do")
    public NoteResult loadNotes(String bookId){
    
    
        NoteResult result = noteService.loadBookNotes(bookId);
        return result;
    }
    @RequestMapping("/add.do")
    @ResponseBody
    public NoteResult addNote(String bookId,String noteTitle,String userId){
    
    
        NoteResult result = noteService.addNote(bookId,noteTitle,userId);


        return result;
    }
}

Share

define entity

public class Share implements Serializable {
    
    
    
    private String cn_share_id;
    private String cn_share_title;
    private String cn_share_body;
    private String cn_note_id;
	
    ...
}

Define operations on Share-related data in the database

ShareMapper.xml

Define query by ID, fuzzy search, add sharing operation

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.cloudnote.dao.ShareDao">
 <!--  public List<Share> findLikeTitle(String title);-->


    <select id="findById" parameterType="string" resultType="org.cloudnote.entity.Share">
        select * from  cn_share where cn_share_id=#{id}
    </select>


    <select id="findLikeTitle" parameterType="string"
            resultType="org.cloudnote.entity.Share">
        select * from cn_share where cn_share_title like #{title}
    </select>

    <insert id="save" parameterType="org.cloudnote.entity.Share">
        insert into cn_share (
        cn_share_id,
        cn_share_title,
        cn_share_body,
        cn_note_id
        )values (
        #{cn_share_id},
        #{cn_share_title},
        #{cn_share_body},
        #{cn_note_id}
        )
    </insert>

    <select id="findByNoteId" parameterType="string" resultType="org.cloudnote.entity.Share">
        select  cn_share_id,  cn_share_title, cn_share_body, cn_note_id from cn_share where cn_note_id=#{cn_note_id}
    </select>

</mapper>

Create a Dao layer interface to connect the above operations

public interface ShareDao {
    
    
    public Share findById(String id);

    public List<Share> findLikeTitle(String title);

    public Share findByNoteId(String noteId);

    public void save(Share share);
}

Share and other operations are implemented in Note

Functional flow

user function

register

front end

log_in.html

import regist.js

<script type="text/javascript" src="scripts/regist.js"></script>

Bind the registration event to the control

<input type="button" name="" id="regist_button" value='&nbsp注&nbsp册&nbsp' tabindex='9'/>
regist.js

Get the parameters in the corresponding control in log_in.html, check the format, and send the Ajax request after it is correct

$(function(){
    
    
    $("#regist_button").click(function(){
    
    
        //清除提示信息
        $("#warning_1").hide()
        $("#warning_2").hide()
        $("#warning_3").hide()
        $("#warning_4").hide()

        //1.获取请求参数
        var name = $("#regist_username").val().trim();
        var nick = $("#nickname").val().trim();
        var password = $("#regist_password").val().trim();
        var final_password = $("#final_password").val().trim();
        //console.log(name,nickname,password,final_password)
        //2.检查格式
        //两次密码一致 所有属性非空
        var ok = true
        if(name == ""){
    
    
            ok = false
            //console.log("111111111111")
            $("#warning_1 span").html("用户名为空");
            $("#warning_1").show()
        }
        if(nick == ""){
    
    
            ok = false
            $("#warning_4 span").html("昵称为空");
            $("#warning_4").show()
        }
        if(password == ""){
    
    
            ok = false
            $("#warning_2 span").html("密码为空");
            $("#warning_2").show()
        }else{
    
    
            if(password.length<6){
    
    
                ok = false
                $("#warning_2 span").html("密码需要六位以上");
                $("#warning_2").show()
            }
        }
        if(final_password != password){
    
    
            ok = false
            $("#warning_3 span").html("与密码不一致");
            $("#warning_3").show()
        }
        //3.发送请求
        if(ok){
    
    
            $.ajax({
    
    
                url: "http://localhost:80/user/regist.do",
                type: "post",
                data: {
    
    "name":name,"nick":nick,"password":password},
                dataType: "json",
                success: function(result){
    
    
                    console.log(result)
                    if(result.status == 0){
    
    //注册成功
                        alert(result.msg) //提示
                        $("#back").click() //切换到登录页
                    }else if(result.status == 1){
    
     //用户名已被占用
                        $("#warning_1 span").html(result.msg);
                        $("#warning_1").show()
                    }
                },
                error: function(){
    
    
                    alert("注册失败")
                }

            })
        }


    })
})

rear end

The Ajax request received by the backend is registered and processed. The processing content has been indicated in User and will not be described in detail.

    @ResponseBody
    @RequestMapping("/regist.do")
    public NoteResult register(String name,String nick,String password){
    
    
        NoteResult noteResult = userService.regist(name, password,nick);
        return noteResult;
    }

Log in

front end

log_in.html

import login.js

<script type="text/javascript" src="scripts/login.js"></script>

Bind the registration event to the control

<input type="button" name="" id="login" value='&nbsp登&nbsp录&nbsp' tabindex='3'/>
login.js

Get the parameters in the corresponding control in log_in.html, check the format, and send the Ajax request after it is correct

$(function () {
    
    
    $("#login").click(function(){
    
    
        //清除提示
        $("#count_span").html("");
        $("#password_span").html("");

        //获取请求参数
        var name = $("#count").val().trim();
        var password = $("#password").val().trim();
        //检查参数格式
        var ok = true;
        if(name == ""){
    
    
            ok = false;
            $("#count_span").html("用户名为空");
        }
        if(password == ""){
    
    
            ok = false;
            $("#password_span").html("密码为空");
        }
        //发送ajax请求
        if(ok){
    
    
            $.ajax({
    
    
                url: "http://localhost:80/user/login.do",
                type: "post",
                data: {
    
    "name":name,"password":password},
                dataType: "json",
                success:function(result){
    
    
                    console.log(result);
                    if(result.status == 0){
    
    //登陆成功
                        var userId = result.data;//获取用户id存入cookie
                        addCookie("userId",userId,0.5);
                        window.location.href = "edit.html";
                    }else if(result.status == 1){
    
    
                        $("#count_span").html(result.msg);

                    }else if(result.status == 2){
    
    
                        $("#password_span").html(result.msg);
                    }
                },
                error:function(XMLHttpRequest,textStatus,errorThrown){
    
    
                    //console.log(XMLHttpRequest.status);
                    //console.log(textStatus.readyState);
                    //console.log(errorThrown);
                    alert("登陆失败,请重试")
                }
            })
        }
    });
})

rear end

The Ajax request received by the backend is processed for login, and the processing content has been indicated in User, and will not be described in detail

    @RequestMapping("/login.do")
    @ResponseBody
    public NoteResult execute(String name,String password){
    
    
        NoteResult noteResult = userService.checkLogin(name, password);
        System.out.println("noteResult = " + noteResult);
        return noteResult;
    }

Notebook related functions

front end

edit.html

Import the note.js file

<script type="text/javascript" src="scripts/note.js"></script>

Bind the registration event to the control

<script type="text/javascript">
			var userId = getCookie("userId");
			if(userId == null){
    
    //用户未登录
				window.location.href = "log_in.html";
			}else {
    
    
				//其他操作
				$(function(){
    
    
					//实例化Ueditor编辑器
					var um = UM.getEditor('myEditor');
					$("#note_list").on("click","li",loadNoteDetail);
					//关闭对话框
					$("#can").on("click",".cancle,.close",closeWindow);
					//添加笔记弹窗
					$("#add_note").click(showAddNoteWindow)
					//确认添加笔记
					$("#can").on("click","#sure_addnote",sureAddNote);
					//保存笔记
					$("#save_note").click(sureUpdateNote)
					//显示笔记菜单
					showNoteMenu();
					//弹出笔记对话框
					$("#note_list").on("click",".btn_delete",showRecycleNoteWindow)
					//确认笔记放入回收站
					$("#can").on("click","#sure_recyclenote",sureRecycleNote)
					//分享笔记  .btn_share
					$("#note_list").on("click",".btn_share",sureShareNote)
					//搜索笔记
					$("#search_note").keydown(sureSearchShare)
  					//返回笔记列表
					$(".return_notelist").click(backNoteList)
					//预览分享笔记内容
					$("#search_list").on("click","li",viewShareNote)
					$("#logout").click(logOut);
					//移动笔记
					$("#note_list").on("click",".btn_move",showMoveNoteWindow);
					//确定移动笔记
					$("#can").on("click","#sure_movenote",function(){
    
    
						//请求参数
						var $noteLi = $("#note_list a.checked").parent();
						var noteId = $noteLi.data("noteId");
						var bookId = $("#moveSelect").val();
						console.log(noteId)
						console.log(bookId)
						//发送ajax
						$.ajax({
    
    
							url:base_url + '/note/move.do',
							type:'post',
							data:{
    
    'noteId':noteId,'bookId':bookId},
							dataType: 'json',
							success: function(result){
    
    
								closeWindow();
								$noteLi.remove();
								alert("移动笔记成功");
							},
							error: function(){
    
    
								alert("移动笔记失败");
							}
						})
					})
					})
			}
		</script>

note.js

Implementation of the above functions

function viewShareNote(){
    
    

    //将笔记设置为选中状态
    $("#search_list li a").removeClass("checked");
    $(this).find("a").addClass("checked");
    //获取shareId
    var shareId = $(this).data("shareId");
    //发送ajax请求
    $.ajax({
    
    
        url: base_url + "/note/loadShare.do",
        type: 'post',
        dataType: 'json',
        data: {
    
    "shareId":shareId},
        success:function(result){
    
    
            //console.log(result)
            //切换笔记详情页
            checkNoteDetailPage(5)
            var title = result.data.cn_share_title;
            var body = result.data.cn_share_body;
            $("#noput_note_title").html(title);
            $("#noput_note_body").html(body)
        },
        error:function(){
    
    
            alert("加载笔记信息失败")
        }
    })

}

function backNoteList(){
    
    
    showNoteList(2);
    checkNoteDetailPage(3)
}

//切换显示笔记详情页
function checkNoteDetailPage(index){
    
    
    //隐藏所有列表
    $(".col-sm-7:not('#save_button_div')").hide();
    //指定显示列表
    $("#pc_part_"+index).show();
}

//切换列表显示
function showNoteList(index){
    
    
    //隐藏所有列表
    $(".col-xs-3:not('#save_button_div')").hide();
    //指定显示列表
    $("#pc_part_"+index).show();
}

function sureSearchShare(event) {
    
    
    var code = event.keyCode;
    //console.log(code); // enter 13
    if(code == 13){
    
    
        //获取搜索的关键字
        var keyword = $("#search_note").val().trim();
        //发送 ajax  /note/search.do  >> List<Note>
        $.ajax({
    
    
            url: base_url + "/note/search.do",
            type: 'post',
            dataType: 'json',
            data: {
    
    'keyword':keyword},
            success: function(result){
    
    
                //console.log(result);
                //切换显示区
                showNoteList(6)
                //清空该区域
                $("#search_list").empty();
                //循环生成笔记列表
                var notes = result.data;
                for (var i=0;i<notes.length;i++){
    
    
                    var noteTitle = notes[i].cn_share_title;
                    var shareId = notes[i].cn_share_id
                    //拼一个li
                    var s_li = '<li class="online">'
                    s_li += '<a>'
                    s_li += '<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i>'+noteTitle
                    s_li += '</a>'
                    s_li += '</li>';
                    var $li = $(s_li);
                    //绑定shareId
                    $li.data("shareId",shareId);
                    //将li追加到ul中
                    $('#search_list').append($li)
                }
            },
            error: function(){
    
    
                alert("检索笔记失败")
            }
        })
    }
}


function sureShareNote(){
    
    
    var $li = $("#note_list a.checked").parent();
    var noteId = $li.data("noteId");
    //发送ajax请求
    $.ajax({
    
    
        url: base_url + "/note/share.do",
        type: 'post',
        data: {
    
    "noteId":noteId},
        dataType: "json",
        success: function(result){
    
    
            alert(result.msg);
        },
        error: function(){
    
    }
    })

}

function sureRecycleNote(){
    
    

    //获取笔记id
    var $li = $("#note_list a.checked").parent();
    var noteId = $li.data("noteId");
    $.ajax({
    
    
        url: base_url + "/recycle/recycle.do",
        type: "post",
        data: {
    
    "noteId":noteId},
        dataType: "json",
        success: function(result){
    
    
            //console.log(result);
            if(result.status == 0){
    
    
                $li.remove();
                alert(result.msg);
            }
        },
        error: function(){
    
    
            alert("将笔记本放入回收站失败")
        }
    });



}

function showNoteMenu(){
    
    
    $("#note_list").on("click",".btn_slide_down",function(){
    
    
        //alert("11111111111111111")
        //将所有的笔记菜单隐藏
        $("#note_list .note_menu").hide()
        //点击当前的按钮显示菜单
        var $li = $(this).parents("li")
        var $menu = $li.find(".note_menu");
        $menu.slideDown(1000)
    });
    //追加鼠标对笔记菜单的控制
    $("#note_list").on("mouseover",".note_menu",function(){
    
    
        $(this).show();//显示状态
    })
    $("#note_list").on("mouseout",".note_menu",function(){
    
    
        $(this).hide();//隐藏状态
    })
}

function sureUpdateNote(){
    
    
    //检查是否选中笔记
    var $li = $("#note_list li a.checked").parent();
    if($li.length == 0){
    
    
        alert("请选择要保存的笔记")
    }else {
    
    
        //获取请求参数
        var noteId = $li.data("noteId");
        var noteTitle = $("#input_note_title").val().trim();
        var noteBody = um.getContent();
        //发送ajax请求
        $.ajax({
    
    
            url: base_url + "/note/update.do",
            dataType: "json",
            data: {
    
    "noteId":noteId,"noteTitle":noteTitle,"noteBody":noteBody},
            type: "post",
            success: function(result){
    
    
                console.log(result)
                if(result.status == 0){
    
    
                    //更新笔记li的名称
                    var str  = '<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i>'+ noteTitle +
                        '<button type="button" class="btn btn-default btn-xs btn_position btn_slide_down">' +
                        '<i class="fa fa-chevron-down"></i></button>'
                    $li.find("a").html(str);
                    //提示成功
                    alert(result.msg);
                }
            },
            error:function(){
    
    
                alert("保存笔记失败");
            }
        })
    }
}

function sureAddNote(){
    
    

    //console.log("111111111111");
    var noteTitle = $("#input_note").val().trim();
    //笔记本id
    var $li = $("#book_list li a.checked").parent();
    var bookId = $li.data("bookId");
    //console.log(noteTitle,bookId);
    //发送ajax
    $.ajax({
    
    
        url: base_url + "/note/add.do",
        type: "post",
        data: {
    
    "bookId":bookId,"noteTitle":noteTitle,"userId":userId},
        dataType: "json",
        success: function(result){
    
    
            if(result.status == 0){
    
    
                closeWindow();
                createNoteLi(noteTitle,result.data);
                alert(result.msg);
            }
        },
        error:function(){
    
    
            alert("笔记添加失败")
        }
    })

}

function loadNoteDetail(){
    
    

    //将笔记设置为选中状态
    $("#note_list li a").removeClass("checked");
    $(this).find("a").addClass("checked");

    //获取请求参数
    var noteId = $(this).data("noteId");
    //发送ajax
    $.ajax({
    
    
        url: base_url + "/note/load.do",
        type: "post",
        data: {
    
    "id": noteId},
        dataType: "json",
        success:function(result){
    
    
            //console.log(result);
            if(result.status == 0){
    
    
                var noteTitle = result.data.cn_note_title;
                var noteBody = result.data.cn_note_body;
                //设置标题
                $("#input_note_title").val(noteTitle);
                //设置内容
                um.setContent(noteBody);
            }
        },
        error: function(){
    
    
            alert("显示笔记详情失败")

        }
    });

}
//添加笔记li
function createNoteLi(noteTitle,noteId){
    
    
    var s_li = '<li class="online">'
    s_li += '<a>'
    s_li += '<i class="fa fa-file-text-o" title="online" rel="tooltip-bottom"></i>'+noteTitle
    s_li += '<button type="button" class="btn btn-default btn-xs btn_position btn_slide_down"><i class="fa fa-chevron-down"></i></button>'
    s_li += '</a>'
    s_li += '<div class="note_menu" tabindex="-1">'
    s_li += '<dl>'
    s_li += '<dt><button type="button" class="btn btn-default btn-xs btn_move" title="移动至..."><i class="fa fa-random"></i></button></dt>'
    s_li += '<dt><button type="button" class="btn btn-default btn-xs btn_share" title="分享"><i class="fa fa-sitemap"></i></button></dt>'
    s_li += '<dt><button type="button" class="btn btn-default btn-xs btn_delete" title="删除"><i class="fa fa-times"></i></button></dt>'
    s_li += '</dl>'
    s_li += '</div>'
    s_li += '</li>';
    //将noteId绑定到li上
    var $li = $(s_li);
    $li.data("noteId",noteId);
    //将li追加到ul中
    $("#note_list").append($li);
}

function loadBookNotes(){
    
    
    //将点击的笔记本li设置为选中状态
    $("#book_list li a").removeClass("checked");
    $(this).find("a").addClass("checked");
    //获取请求参数 bookId
    var bookId = $(this).data("bookId");
    //console.log(bookId);
    //发送ajax请求
    $.ajax({
    
    
        url: base_url + "/note/loadnotes.do",
        type: "post",
        data: {
    
    "bookId":bookId},
        dataType: "json",
        success:function(result){
    
    
            //console.log(result);
            if(result.status == 0){
    
    
                var notes = result.data;//获取笔记数组
                //清除原有笔记列表
                $("#note_list").empty();
                for(var i=0;i<notes.length;i++){
    
    
                    var noteTitle = notes[i].cn_note_title;
                    var noteId = notes[i].cn_note_id;
                    //拼接成笔记li
                    createNoteLi(noteTitle,noteId)
                }
            }
        },
        error:function(){
    
    
            alert("添加笔记列表失败")

        }
    });
}

rear end

Perform corresponding processing according to the URL corresponding to the front end

    @RequestMapping("/add.do")
    @ResponseBody
    public NoteResult addBook(String userId,String bookName){
    
    
        NoteResult result = bookService.addBook(userId, bookName);
        return result;
    }

    @RequestMapping("loadbooks.do")
    @ResponseBody
    public NoteResult loadBooks(String userId){
    
    
        NoteResult result = bookService.loadUserBooks(userId);
        return result;
    }

Note related functions

front end

edit.html

Import the notebook.js file

		<script type="text/javascript" src="scripts/notebook.js"></script>

Bind the registration event to the control

<script type="text/javascript">
			var userId = getCookie("userId");
			if(userId == null){
    
    //用户未登录
				window.location.href = "log_in.html";
			}else {
    
    
				//其他操作
				$(function(){
    
    
					//实例化Ueditor编辑器
					var um = UM.getEditor('myEditor');
					//发送ajax 请求加载笔记本列表
					loadUserBooks();
					//点击笔记本添加笔记列表
					$("#book_list").on("click","li",loadBookNotes);
					//弹出添加笔记本对话框
					$("#add_notebook").click(showAddBookWindow);
					//关闭对话框
					$("#can").on("click",".cancle,.close",closeWindow);
					//确认添加笔记本
					$("#can").on("click","#sure_addbook",sureAddBook);})
			}</script>

notebook.js

Implementation of the above functions

function sureAddBook(){
    
    
    var bookName = $("#input_notebook").val().trim();
    //console.log(bookName);
    if(bookName == ""){
    
    
        alert("笔记本名称不能为空")
        return;
    }
    //发送ajax请求
    $.ajax({
    
    
        url: base_url + "/notebook/add.do",
        type: "post",
        data: {
    
    "userId":userId,"bookName":bookName},
        dataType: "json",
        success: function(result){
    
    
            //console.log(result);
            if(result.status == 0){
    
    
                closeWindow();
                //添加一个笔记本li
                var bookId = result.data;
                createBookLi(bookName,bookId)
                alert(result.msg);
            }
        },
        error:function(){
    
    
            alert("添加笔记本失败");
        }
    })
}

//追加一个笔记本li
function createBookLi(bookName,bookId){
    
    
    var s_li = '<li class="online">'
    s_li += '<a>'
    s_li += '<i class="fa fa-book" title="online" rel="tooltip-bottom">'
    s_li += '</i>' + bookName
    s_li += '</a>'
    s_li += '</li>';
    //将bookId绑定
    var $li = $(s_li);
    $li.data("bookId",bookId);
    //将bookId追加到ul
    $("#book_list").append($li);
}

function loadUserBooks(){
    
    
    $.ajax({
    
    
        url: base_url + "/notebook/loadbooks.do",
        type: "post",
        data: {
    
    "userId":userId},
        dataType: "json",
        success: function(result){
    
    
            var books = result.data;
            //console.log(result)
            for(var i=0;i<books.length;i++){
    
    
                bookName = books[i].cn_notebook_name;
                bookId = books[i].cn_notebook_id;
                //拼接一个li
                createBookLi(bookName,bookId)
            }
        },
        error: function(){
    
    
            alert("加载笔记列表失败");
        }
    });
}

rear end

Perform corresponding processing according to the URL corresponding to the front end

@ResponseBody
    @RequestMapping("/move.do")
    public NoteResult moveNoteCotroller(String noteId,String bookId){
    
    
        NoteResult result = noteService.moveNote(noteId,bookId);
        return result;
    }

    @ResponseBody
    @RequestMapping("loadShare.do")
    public NoteResult loadShareController(String shareId){
    
    
        NoteResult result = noteService.loadShare(shareId);
        return result;
    }

    @ResponseBody
    @RequestMapping("/search.do")
    public NoteResult searchShareCotroller(String keyword){
    
    
        NoteResult result = noteService.searchShare(keyword);
        return result;
    }

    @ResponseBody
    @RequestMapping("/share.do")
    public NoteResult shareNote(String noteId){
    
    
        NoteResult result = noteService.shareNote(noteId);
        return result;
    }

    @ResponseBody
    @RequestMapping("/update.do")
    public NoteResult updateNote(String noteId,String noteTitle,String noteBody){
    
    
        NoteResult result = noteService.updateNote(noteId,noteTitle,noteBody);
        return result;
    }

    @ResponseBody
    @RequestMapping("/load.do")
    public NoteResult loadNoteDetail(String id){
    
    
        NoteResult result = noteService.loadNoteDetail(id);
        return result;
    }

    @ResponseBody
    @RequestMapping("/loadnotes.do")
    public NoteResult loadNotes(String bookId){
    
    
        NoteResult result = noteService.loadBookNotes(bookId);
        return result;
    }
    @RequestMapping("/add.do")
    @ResponseBody
    public NoteResult addNote(String bookId,String noteTitle,String userId){
    
    
        NoteResult result = noteService.addNote(bookId,noteTitle,userId);


        return result;
    }

Guess you like

Origin blog.csdn.net/qq_51957239/article/details/131684242