asp.net core ORM框架 留言板 留言回复功能

可对于发表的留言进行多级回复,附图:

注:留言表设计可以根据情况调整 红色字体是必须的

留言表表设计
ST_IDNNVARCHAR2(200)Y系统编号
ST_Assign_IDNNVARCHAR2(100)Y指派工作ID
ST_STAFF_IDNNVARCHAR2(100)Y职员ID
DT_STARTNDATEY留言日期
ST_CONTENTNCLOBY内容
ST_CREATE_USERNNVARCHAR2(100)Y创建者
DT_CREATE_DATENDATEY创建时间
ST_MODIFY_USERNNVARCHAR2(100)Y修改者
DT_MODIFY_DATENDATEY修改时间
ST_COMPANY_IDNNVARCHAR2(20)Y公司ID
ST_ID_MNNVARCHAR2(100)关联留言ID
NO_TYPENNUMBER0留言1回复

新增

发表留言:

回复发表的留言:(回复哪条留言需要传对应留言的id到id_m)

查看

附上代码:

     /// <summary>
     /// 根据id查找数据留言
     /// </summary>
     /// <param name="data"></param>
     /// <returns></returns>
     /// <exception cref="NotImplementedException"></exception>
     public async Task<List<MessageReplyQuery>> GetDataById(MessageFrontModel data)
     {
         List<MessageReplyQuery> queryList = new List<MessageReplyQuery>();

         // 查询发表的集合
         var publish = await _sqlSugarClient.Queryable<MessageFrontModel>()
              .LeftJoin<StaffModel>((p,s)=>p.ST_STAFF_ID==s.ST_ID)
             .Where(p => p.NO_TYPE == 0 && p.ST_ID_M == null && p.ST_ASSIGN_ID == data.ST_ID && p.ST_COMPANY_ID == data.ST_COMPANY_ID)
             .OrderBy(p=>p.DT_CREATEDATE,OrderByType.Desc)
             .Select((p,s)=>new MessageFrontModel
             {
                 DT_CREATEDATE = p.DT_CREATEDATE,
                 ST_ASSIGN_ID = p.ST_ASSIGN_ID,
                 DT_MODIFYDATE = p.DT_MODIFYDATE,
                 DT_START=p.DT_START,
                 ST_COMPANY_ID = p.ST_COMPANY_ID,
                 ST_CREATEUSER=p.ST_CREATEUSER,
                 ST_STAFF_ID=s.ST_CODE!=null?s.ST_CODE+ " | "+s.ST_NAME:s.ST_CODE,
                 ST_AVATAR=s.ST_IMG,
                 ST_CONTENT=p.ST_CONTENT,
                 ST_ID=p.ST_ID,
                 NO_TYPE=p.NO_TYPE,
                 ST_ID_M=p.ST_ID_M,
                 ST_MODIFYUSER=p.ST_MODIFYUSER,
             })
             .ToListAsync();


         // 查询回复的集合
         var replyData = await _sqlSugarClient.Queryable<MessageFrontModel>()
              .LeftJoin<StaffModel>((p, s) => p.ST_STAFF_ID == s.ST_ID)
                        .OrderBy(p => p.DT_CREATEDATE, OrderByType.Asc)
                         .Select((p, s) => new MessageFrontModel
                         {
                             DT_CREATEDATE = p.DT_CREATEDATE,
                             ST_ASSIGN_ID = p.ST_ASSIGN_ID,
                             DT_MODIFYDATE = p.DT_MODIFYDATE,
                             DT_START = p.DT_START,
                             ST_COMPANY_ID = p.ST_COMPANY_ID,
                             ST_CREATEUSER = p.ST_CREATEUSER,
                             ST_STAFF_ID = s.ST_CODE != null ? s.ST_CODE + " | " + s.ST_NAME : s.ST_CODE,
                             ST_AVATAR = s.ST_IMG,
                             ST_CONTENT = p.ST_CONTENT,
                             ST_ID = p.ST_ID,
                             NO_TYPE = p.NO_TYPE,
                             ST_ID_M = p.ST_ID_M,
                             ST_MODIFYUSER = p.ST_MODIFYUSER,
                         })
             .ToListAsync();

         foreach (var item in publish)
         {
             MessageReplyQuery query = new MessageReplyQuery();
             query.id = item.ST_ID;
             query.assign_id = item.ST_ASSIGN_ID;
             query.staff_id = item.ST_STAFF_ID;
             query.start = item.DT_START;
             query.content = item.ST_CONTENT;
             query.id_m = item.ST_ID_M;
             query.type = 0;
             query.avatar = item.ST_AVATAR;
             query.create_date = item.DT_CREATEDATE;
             // 递归构建回复列表
             query.replyList = BuildReplyList(item.ST_ID, replyData, data.ST_COMPANY_ID);
             queryList.Add(query);
         }

         return queryList;
     }

     /// <summary>
     /// 回复-这个是回复多级回复的全部在最后
     /// </summary>
     /// <param name="parentId"></param>
     /// <param name="replyData"></param>
     /// <param name="companyId"></param>
     /// <returns></returns>
  
     private List<ReplyQuery> BuildReplyList(string parentId, List<MessageFrontModel> replyData, string companyId)
     {
         List<ReplyQuery> replyList = new List<ReplyQuery>();

  // 查询回复的集合
         var replies = replyData
             .Where(p => p.NO_TYPE == 1 && p.ST_ID_M == parentId && p.ST_COMPANY_ID == companyId)
            .OrderBy(p => p.DT_CREATEDATE)

             .ToList();

         foreach (var reply in replies)
         {
             ReplyQuery replyQuery = new ReplyQuery();
             replyQuery.id = reply.ST_ID;
             replyQuery.id_m = reply.ST_ID_M;
             replyQuery.content = reply.ST_CONTENT;
             replyQuery.start = reply.DT_START;
             replyQuery.assign_id = reply.ST_ASSIGN_ID;
             replyQuery.staff_id = reply.ST_STAFF_ID;
             replyQuery.create_date = reply.DT_CREATEDATE;

             replyQuery.type = 1; // 假设类型 1 代表回复
                                  // 将回复直接添加到最外层的回复列表中
             replyList.Add(replyQuery);

         }

        //第二级循环结束,再把后面的数据插入到第二级后面
         foreach (var reply in replies)
         {
             
             var thirdLevelReplies = BuildReplyList(reply.ST_ID, replyData, companyId);
             foreach (var thirdLevelReply in thirdLevelReplies)
             {
                 replyList.Add(thirdLevelReply);
             }
         }
         // 对整个 replyList 进行排序
         replyList = replyList.OrderBy(r => r.create_date).ToList();
         return replyList;
     }

如果想实现多级留言显示到对应回复的下方,则修改BuildReplyList这个方法可实现:

private List<ReplyQuery> BuildReplyList(string parentId, List<MessageFrontModel> replyData, string companyId)
{
    List<ReplyQuery> replyList = new List<ReplyQuery>();

    var replies = replyData
        .Where(p => p.NO_TYPE == 1 && p.ST_ID_M == parentId && p.ST_COMPANY_ID == companyId)
        .ToList();

    foreach (var reply in replies)
    {
        ReplyQuery replyQuery = new ReplyQuery();
        replyQuery.id = reply.ST_ID;
        replyQuery.id_m = reply.ST_ID_M;
        replyQuery.content = reply.ST_CONTENT;
        replyQuery.start = reply.DT_START;
        replyQuery.assign_id = reply.ST_ASSIGN_ID;
        replyQuery.staff_id = reply.ST_STAFF_ID;
        replyQuery.type = 1; // 假设类型 1 代表回复
                             // 将回复直接添加到最外层的回复列表中

        replyList.Add(replyQuery);



        // 处理第三级回复并添加到第二级回复列表中 回复对应的显示
        var thirdLevelReplies = BuildReplyList(reply.ST_ID, replyData, companyId);
        foreach (var thirdLevelReply in thirdLevelReplies)
        {
            replyList.Add(thirdLevelReply);
        }
        replyList.Add(replyQuery);



        // 递归构建下一级回复列表
        //这个是回复多级 如果只需要二级 这个可以不要,
        //replyQuery.replyList = BuildReplyList(reply.ST_ID, replyData, companyId);
        // replyList.Add(replyQuery);
    }

 
    return replyList;
}

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猫猫.net

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值