欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java評(píng)論、回復(fù)功能設(shè)計(jì)與實(shí)現(xiàn)方法

 更新時(shí)間:2022年06月20日 10:22:28   作者:PoemOfficer  
很多項(xiàng)目或者系統(tǒng)都有評(píng)論或者回復(fù)的需求,但評(píng)論回復(fù)的實(shí)現(xiàn)往往都比較復(fù)雜,也不好實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于java評(píng)論、回復(fù)功能設(shè)計(jì)與實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下

最近實(shí)現(xiàn)了評(píng)論和回復(fù)、點(diǎn)贊、@的功能。在這里分享一下我的設(shè)計(jì)思路(先分享評(píng)論和回復(fù)功能)。希望各位讀者給出一些不一樣的建議后期改進(jìn)。

效果展示

總共是兩層回復(fù) (回復(fù)評(píng)論、回復(fù)評(píng)論下的回復(fù))

數(shù)據(jù)庫(kù)設(shè)計(jì)

評(píng)論表(TFW_Comments)和回復(fù)內(nèi)容表(TFW_UserResponse)以及評(píng)論回復(fù)關(guān)系表(TFW_MsgRelation)

數(shù)據(jù)庫(kù)設(shè)計(jì)思路:

注:各位讀者自動(dòng)忽略評(píng)論表的服務(wù)機(jī)構(gòu)ID字段,這個(gè)字段相當(dāng)于這條評(píng)論是在哪個(gè)帖子(文章下面)

1、根據(jù)文章ID或者是帖子ID查詢?cè)u(píng)論表獲取評(píng)論(本文的服務(wù)機(jī)構(gòu)ID)。第一層(評(píng)論)

2、根據(jù)評(píng)論ID并且回復(fù)類型等于1的去關(guān)系表獲取第二層的回復(fù)(commentsId)。第二層(評(píng)論下的回復(fù))

3、根據(jù)評(píng)論ID、回復(fù)類型等于2、回復(fù)ID去關(guān)系表獲取第三層回復(fù)。第三層(評(píng)論下回復(fù)中的回復(fù))注:回復(fù)ID是它的上級(jí)

實(shí)現(xiàn)類源碼

@Override
    public Map<String, Object> findComments(JSONObject jsonObject) {
        data.clear();
        String userId = jsonObject.getString("userId");
 
        String role = this.role(jsonObject);
        if (role.equals("-1")){
            //沒(méi)有權(quán)限
            data.put("error","-1");
            data.put("msg","當(dāng)前用戶沒(méi)有權(quán)限");
            return data;
        }
 
        List<Map<String, Object>> info = commentsDao.findComment(jsonObject.getString("fWJLID"),null);
        //查詢點(diǎn)贊次數(shù)
        int countTag = 0;
        MsgRelationTag msgRelationTag = new MsgRelationTag();
 
        for (Map item : info){
            item.put("inputShow",false);
            int commentsId = (int) item.get("commentsId");
            //查詢點(diǎn)贊次數(shù)
             countTag = msgRelationDao.findCountTagByTagId(commentsId,1);
            item.put("countTag",countTag);
            //設(shè)置點(diǎn)贊狀態(tài)
            msgRelationTag.setTagId(commentsId);
            msgRelationTag.setTagType(1);
            msgRelationTag.setTagUserId(Integer.parseInt(userId));
            MsgRelationTag msgTag = msgRelationDao.findMsgTag(msgRelationTag);
            if (msgTag != null) {
                item.put("tagStatus",msgTag.getStatus());
            }else {
                item.put("tagStatus","");
            }
            //如果有@id
            if (item.get("atId") != null){
                String content = item.get("content").toString();
                StringBuffer tmrAtId = findUserName(item.get("atId").toString());
                item.put("content",content+'@'+tmrAtId);
            }
            //二級(jí)回復(fù)數(shù)據(jù)
            List<Map<String, Object>> twoReply = new ArrayList<>();
            //所有數(shù)據(jù)
            List<Map<String, Object>> userResponse = userResponseDao.findUserResponse(commentsId, null, "","",null);
            for (Map userResponseInfo :userResponse){
                int userResponseIds = Integer.parseInt(userResponseInfo.get("userResponseId").toString());
                //查詢點(diǎn)贊次數(shù)
                countTag = msgRelationDao.findCountTagByTagId(userResponseIds,2);
                //設(shè)置點(diǎn)贊狀態(tài)
                msgRelationTag.setTagId(userResponseIds);
                msgRelationTag.setTagType(2);
                msgTag = msgRelationDao.findMsgTag(msgRelationTag);
                if (msgTag != null) {userResponseInfo.put("tagStatus",msgTag.getStatus());}else {userResponseInfo.put("tagStatus","");}
                userResponseInfo.put("countTag",countTag);
                userResponseInfo.put("inputShow",false);
                Integer responseType = (Integer) userResponseInfo.get("responseType");
                for (Map stairReplyInfo : userResponse){
                    Integer  userResponseId = (Integer) stairReplyInfo.get("userResponseId");
                    int msgRelationId = Integer.parseInt(stairReplyInfo.get("msgRelationId").toString());
                    //接受者id*/
                    twoReply = userResponseDao.findUserResponse(msgRelationId, userResponseId,"1","",null); //二級(jí)回復(fù)數(shù)據(jù)
                    for (Map twoReplyItem : twoReply){
                        int twoReplyId = Integer.parseInt(twoReplyItem.get("userResponseId").toString());
                        twoReplyItem.put("inputShow",false);
                        //查詢點(diǎn)贊次數(shù)
                        countTag = msgRelationDao.findCountTagByTagId(twoReplyId,2);
                        twoReplyItem.put("countTag",countTag);
                        //設(shè)置點(diǎn)贊狀態(tài)
                        msgRelationTag.setTagId(twoReplyId);
                        msgTag = msgRelationDao.findMsgTag(msgRelationTag);
                        if (msgTag != null) {twoReplyItem.put("tagStatus",msgTag.getStatus());}else {twoReplyItem.put("tagStatus","");}
                        String userRepContent = twoReplyItem.get("userRepContent").toString();
                        if (twoReplyItem.get("tmrAtId") != null){
                            StringBuffer tmrAtId = findUserName(twoReplyItem.get("tmrAtId").toString());
                            twoReplyItem.put("userRepContent",userRepContent+'@'+tmrAtId);
                        }
 
                    }
                    stairReplyInfo.put("twoReply",twoReply);
                }
            }
            item.put("stairReply",userResponse);
        }
        data.put("data",info);
        data.put("error",0);
        data.put("msg","查詢成功");
        return data;
    }

其它的代碼可以忽略。主要語(yǔ)句有:

獲取帖子下的評(píng)論

 List<Map<String, Object>> info = commentsDao.findComment(jsonObject.getString("fWJLID"),null);

上圖根據(jù)FWJLID獲取評(píng)論。(此處可以當(dāng)成帖子的ID,獲取帖子下的評(píng)論)一級(jí)展示

對(duì)應(yīng)SQL語(yǔ)句(OPT是我的用戶表)

select tc.content ,tc.commentsId,convert(varchar(19),tc.startTime,120) as startTime,tc.recipientId ,tc.operatorId,zo.NAME as operatorName,tc.atId,zo.HeadImgUrl as operatorHeadImgUrl
         from TFW_Comments tc
         left join zd_opt zo on zo.AID = tc.operatorId where tc.FWJLID = 5101

查詢結(jié)果:

 獲取評(píng)論下的回復(fù)

List<Map<String, Object>> userResponse = userResponseDao.findUserResponse(commentsId, null, "","",null);

上圖根據(jù)commentsid獲取評(píng)論下的回復(fù)。(根據(jù)評(píng)論ID獲取回復(fù))二級(jí)展示

對(duì)應(yīng)sql語(yǔ)句

select
 	 tur.userResponseId,tur.operatorId,tur.recipientId,convert(varchar(19),tur.startTime,120) as startTime,tur.userRepContent,tmr.atId as tmrAtId,
 	 tmr.msgRelationId ,tmr.responseType,tmr.replyId,
        zo.NAME as operatorName,
        zo1.NAME as recipientName,
        zo.HeadImgUrl as operatorHeadImgUrl,
        zo1.HeadImgUrl as recipientHeadImgUrl
        from TFW_MsgRelation tmr
        left join TFW_UserResponse tur on tur.userResponseId = tmr.userResponseId
        left join zd_opt zo on zo.AID = tur.operatorId
        left join zd_opt zo1 on zo1.AID = tur.recipientId where tmr.commentsId = 47

查詢結(jié)果

 獲取二級(jí)回復(fù)

 twoReply = userResponseDao.findUserResponse(msgRelationId, userResponseId,"1","",null); //二級(jí)回復(fù)數(shù)據(jù)

上圖是根據(jù)評(píng)論ID(msgRelationId)和回復(fù)ID(userResponseId)去獲取二級(jí)回復(fù)?;貜?fù)ID也就是父類。就是回復(fù)那一條回復(fù)的ID。 第三層展示

對(duì)應(yīng)sql

select
 	 tur.userResponseId,tur.operatorId,tur.recipientId,convert(varchar(19),tur.startTime,120) as startTime,tur.userRepContent,tmr.atId as tmrAtId,
 	 tmr.msgRelationId ,tmr.responseType,tmr.replyId,
        zo.NAME as operatorName,
        zo1.NAME as recipientName,
        zo.HeadImgUrl as operatorHeadImgUrl,
        zo1.HeadImgUrl as recipientHeadImgUrl
        from TFW_MsgRelation tmr
        left join TFW_UserResponse tur on tur.userResponseId = tmr.userResponseId
        left join zd_opt zo on zo.AID = tur.operatorId
        left join zd_opt zo1 on zo1.AID = tur.recipientId where tmr.commentsId = 136 and tmr.replyId = 155

查詢結(jié)果

返回頁(yè)面展示和返回體展示

總結(jié)

到此這篇關(guān)于java評(píng)論、回復(fù)功能設(shè)計(jì)與實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān)java評(píng)論回復(fù)功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一次詭異的full gc查找問(wèn)題全過(guò)程

    一次詭異的full gc查找問(wèn)題全過(guò)程

    這篇文章主要給大家分享介紹了一次詭異的full gc查找問(wèn)題全部過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧啊
    2018-11-11
  • JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處詳解

    這篇文章主要給大家介紹了關(guān)于JAVA并發(fā)中VOLATILE關(guān)鍵字的神奇之處的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 詳解Java的readBytes是怎么實(shí)現(xiàn)的

    詳解Java的readBytes是怎么實(shí)現(xiàn)的

    眾所周知,Java是一門跨平臺(tái)語(yǔ)言,針對(duì)不同的操作系統(tǒng)有不同的實(shí)現(xiàn),下面小編就來(lái)從一個(gè)非常簡(jiǎn)單的api調(diào)用帶大家來(lái)看看Java具體是怎么做的吧
    2023-07-07
  • Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)功能

    Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)功能

    這篇文章主要介紹了Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 什么是Spring Boot

    什么是Spring Boot

    Spring是一個(gè)非常受歡迎的Java框架,它用于構(gòu)建web和企業(yè)應(yīng)用。本文介紹將各種Spring的配置方式,幫助您了解配置Spring應(yīng)用的復(fù)雜性
    2017-08-08
  • java ZXing生成二維碼及條碼實(shí)例分享

    java ZXing生成二維碼及條碼實(shí)例分享

    本文分享了java ZXing生成二維碼及條碼的實(shí)例代碼,具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • Java多線程ThreadPoolExecutor詳解

    Java多線程ThreadPoolExecutor詳解

    這篇文章主要介紹了Java多線程ThreadPoolExecutor詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Java?Io?File文件操作基礎(chǔ)教程

    Java?Io?File文件操作基礎(chǔ)教程

    這篇文章主要介紹了Java?Io?File文件操作,在這里需要注意File只能訪問(wèn)文件以及文件系統(tǒng)的元數(shù)據(jù)。如果你想讀寫文件內(nèi)容,需要使用FileInputStream、FileOutputStream或者RandomAccessFile,需要的朋友可以參考下
    2022-05-05
  • Intellij無(wú)法創(chuàng)建java文件解決方案

    Intellij無(wú)法創(chuàng)建java文件解決方案

    這篇文章主要介紹了Intellij無(wú)法創(chuàng)建java文件解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 論Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性

    論Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性

    這篇文章主要論述Java Web應(yīng)用中調(diào)優(yōu)線程池的重要性,通過(guò)了解應(yīng)用的需求,組合最大線程數(shù)和平均響應(yīng)時(shí)間,得出一個(gè)合適的線程池配置
    2016-04-04

最新評(píng)論