织梦网站底端的怎么删除满足seo需求的网站

news/2025/9/26 14:17:52/文章来源:
织梦网站底端的怎么删除,满足seo需求的网站,怎么自己开发app软件,郑州新闻头条提示#xff1a;今日是2024年的6月30日#xff0c;未来的你看到这篇文章#xff0c;希望你依旧快乐 文章目录 前言 首先在这里前缀部分我就不做要求了,比如说登录信息什么的 数据库表格 这里实现点赞功能#xff0c;主要是围绕论坛项目完成的 user_info代表用户信息表 for… 提示今日是2024年的6月30日未来的你看到这篇文章希望你依旧快乐 文章目录 前言 首先在这里前缀部分我就不做要求了,比如说登录信息什么的 数据库表格 这里实现点赞功能主要是围绕论坛项目完成的 user_info代表用户信息表 forum_article代表着文章信息表 user_message代表着点赞或者评论点赞发送信息表 like_record代表着用户点赞表 user_info用户信息表 forum_article文章信息表 user_message点赞评论信息发送表 like_record点赞信息表 表格准备完毕 代码实现 Controller层 /*** 实现文章点赞功能。* 通过请求映射 /doLike该方法处理用户对文章的点赞操作。* 使用GlobalInterceptor注解表明该方法受全局拦截器影响会检查参数有效性及用户登录状态。** param session 用户会话对象用于获取会话中的用户信息。* param articleId 需要点赞的文章ID通过VerifyParam注解确保其为非空保证操作的有效性。* return 返回操作成功的响应对象。*/RequestMapping(/doLike)GlobalInterceptor(checkParams true, checkLogin true)public ResponseVO likeArticle(HttpSession session, VerifyParam(required true) String articleId) {// 从会话中获取用户信息SessionWebUserDto sessionWebUserDto getUserInfoFromSession(session);// 调用点赞服务记录用户的点赞行为likeRecordService.doLike(articleId, sessionWebUserDto.getUserId(), sessionWebUserDto.getNickName(), OperRecordOpTypeEnum.ARTICLE_LIKE);// 返回操作成功的响应return getSuccessResponseVO(null);} //枚举package com.easybbs.entity.enums;public enum OperRecordOpTypeEnum {ARTICLE_LIKE(0, 文章点赞),COMMENT_LIKE(1, 评论点赞);private Integer type;private String desc;OperRecordOpTypeEnum(Integer type, String desc) {this.type type;this.desc desc;}public Integer getType() {return type;}public String getDesc() {return desc;}} 至于这里的参数校验和登录校验我就不作详细解释了相信未来的你也一定可以看懂 Service接口层 //点赞void doLike(String objectId, String userId, String nickName, OperRecordOpTypeEnum opTypeEnum); Service接口实现层 /*** 用户点赞操作。* 实现对文章或评论的点赞功能并记录用户的点赞行为。* param objectId 点赞对象的ID可以是文章ID或评论ID。* param userId 点赞用户的ID。* param nickName 点赞用户的昵称。* param opTypeEnum 点赞操作的类型区分是文章点赞还是评论点赞。* throws BusinessException 如果文章不存在则抛出业务异常。*/OverrideTransactional(rollbackFor Exception.class)public void doLike(String objectId, String userId, String nickName, OperRecordOpTypeEnum opTypeEnum) {// 创建用户消息对象用于记录点赞行为。UserMessage userMessage new UserMessage();userMessage.setCreateTime(new Date());// 根据点赞类型执行不同的操作。switch (opTypeEnum){case ARTICLE_LIKE:// 根据文章ID查询文章信息如果文章不存在则抛出异常。ForumArticle forumArticle forumArticleMapper.selectByArticleId(objectId);if(forumArticle null){throw new BusinessException(文章不存在);}// 执行文章点赞逻辑。articleLike(objectId,forumArticle,userId,opTypeEnum);// 设置用户消息的相关信息如文章ID、文章标题等。userMessage.setArticleId(objectId);userMessage.setArticleTitle(forumArticle.getTitle());userMessage.setMessageType(MessageTypeEnum.ARTICLE_LIKE.getType());userMessage.setCommentId(Constants.ZERO);userMessage.setReceivedUserId(forumArticle.getUserId());break;case COMMENT_LIKE:// 评论点赞的逻辑实现。break;}// 设置用户消息的发送者信息。userMessage.setSendUserId(userId);userMessage.setSendNickName(nickName);userMessage.setStatus(MessageStatusEnum.NO_READ.getStatus());// 判断是否为给自己的点赞若是则不记录点赞消息。// 判断是否已经点赞if(!userId.equals(userMessage.getReceivedUserId())){// 根据文章ID、评论ID、发送者ID和消息类型查询是否已存在相同的点赞记录。UserMessage dbInfo userMessageMapper.selectByArticleIdAndCommentIdAndSendUserIdAndMessageType(userMessage.getArticleId(),userMessage.getCommentId(),userMessage.getSendUserId(),userMessage.getMessageType());// 如果不存在相同的点赞记录则插入新的点赞消息。if(dbInfo null ){userMessageMapper.insert(userMessage);}}}/*** 用户对文章进行点赞或取消点赞操作。** param objId 对象ID即文章的唯一标识。* param forumArticle 文章对象用于获取文章的作者信息。* param userId 用户ID执行点赞操作的用户。* param opTypeEnum 操作类型枚举表示点赞或取消点赞。* return 返回点赞记录如果用户之前点赞过则返回非空否则返回空。*/public LikeRecord articleLike(String objId, ForumArticle forumArticle, String userId, OperRecordOpTypeEnum opTypeEnum) {// 根据对象ID、用户ID和操作类型查询点赞记录判断用户是否已经点赞过。LikeRecord record this.likeRecordMapper.selectByObjectIdAndUserIdAndOpType(objId, userId, opTypeEnum.getType());if (record ! null) {// 如果用户之前点赞过则取消点赞。this.likeRecordMapper.deleteByObjectIdAndUserIdAndOpType(objId, userId, opTypeEnum.getType());// 更新文章的点赞数减少1。forumArticleMapper.updateArticleCount(UpdateArticleCountTypeEnum.GOOD_COUNT.getType(), -1, objId);} else {// 如果用户未点赞则创建新的点赞记录。LikeRecord likeRecord new LikeRecord();likeRecord.setObjectId(objId);likeRecord.setUserId(userId);likeRecord.setOpType(opTypeEnum.getType());likeRecord.setCreateTime(new Date());// 设置点赞记录的作者用户ID为文章的作者用户ID。likeRecord.setAuthorUserId(forumArticle.getUserId());// 插入新的点赞记录。this.likeRecordMapper.insert(likeRecord);// 更新文章的点赞数增加1。forumArticleMapper.updateArticleCount(UpdateArticleCountTypeEnum.GOOD_COUNT.getType(), 1, objId);}// 返回点赞记录无论是否新点赞或取消点赞。return record;} Mapper层 !-- 根据PrimaryKey获取对象--select idselectByArticleId resultMapbase_result_map select include refidbase_column_list /,content,markdown_content from forum_article where article_id#{articleId}/select!-- 根据PrimaryKey获取对象--select idselectByArticleIdAndCommentIdAndSendUserIdAndMessageType resultMapbase_result_map select include refidbase_column_list / from user_message where article_id#{articleId} and comment_id#{commentId} and send_user_id#{sendUserId} and message_type#{messageType}/select!-- 根据ObjectIdAndUserIdAndOpType删除--delete iddeleteByObjectIdAndUserIdAndOpTypedelete from like_record where object_id#{objectId} and user_id#{userId} and op_type#{opType}/delete!-- 根据PrimaryKey获取对象--select idselectByObjectIdAndUserIdAndOpType resultMapbase_result_map select include refidbase_column_list / from like_record where object_id#{objectId} and user_id#{userId} and op_type#{opType}/select 总结 当然上面只是一些代码的展示但其实主要的是思路那接下来我就说明一下我实现的思路 文章点赞功能首先文章点赞传到Controller层的时候肯定需要把文章id传送过去在Controller接受到文章id之后再从登录信息里面传递出来用户的id用户的名称是文章点赞还是评论点赞呢传递过去之后创建发送消息的对象根据点赞类型进行分开如果是文章点赞的话首先根据用户id文章id点赞类型去查找点赞的记录表如果说找到了的话取消点赞实际上也就是删除点赞信息删除一条点赞信息表里面的语句如果说没有点赞的话创建一个点赞对象点赞的人是这个用户名称是这个用户点赞的文章是文章id点赞的类型是文章点赞还需要额外设置点赞是给哪一个用户点赞肯定是根据文章信息找到发送文章的人然后插入新的点赞记录更改文章的点赞数如果说取消点赞也需要更改文章点赞类型 点赞完成之后去继续完善用户发送信息表比如说设置文章id文章标题文章点赞类型接收人用户id是谁发送人用户id是谁发送人名字是谁发送的是未读状态 接下来首先需要判断不是自己给自己点赞自己给自己点赞是肯定不会发送消息的如果说根据文章id评论的id发送者id点赞类型查找如果说没有查找到的话添加一条记录消息总不能每次点赞完成之后都发送一次消息吧发送的肯定是一次消息,大概逻辑就是这样

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

破解 Java 系统 AI 化难题:JBoltAI 框架自带 RAG、Function Calling 核心功能

破解 Java 系统 AI 化难题:JBoltAI 框架自带 RAG、Function Calling 核心功能在 AI 技术进入企业服务的当下,Java 作为承载企业核心业务的 “基石语言”,却面临着一场尴尬的 “适配断层”:多数 Java 系统仍停留在传…

CF1706E Qpwoeirut and Vertices

一个较为简单的题目,做起来比较舒服。 题目 有 \(N\) 个点 \(M\) 条边。 有 \(Q\) 个询问,每个询问有 \(L,R\)。 询问 \(L\le a \le b \le R\) 最少需要前几条边才能联通。 都是 \(1e5\) 级别。 做法 我们把第 \(i\)…

聚焦 Java AI 开发:JBoltAI 框架支持多模型适配,打造智能应用

聚焦 Java AI 开发:JBoltAI 框架支持多模型适配,打造智能应用在 AI 技术加速融入企业业务的当下,Java 技术团队却面临着一道 “两难困境”:想接入大模型提升系统智能度,却要为不同厂商的接口重复封装代码;想改造…

企业级 AI 应用开发首选!JBoltAI 框架适配 Java 技术栈,稳定可靠

企业级 AI 应用开发首选!JBoltAI 框架适配 Java 技术栈,稳定可靠一、Java 企业 AI 转型的 “现实困境” 与 JBoltAI 的破局价值Java 技术团队却面临着一道 “转型鸿沟”:想接入大模型能力,却因工程师自主封装接口的…

电器网站建设流程网站建设公司好发信息网

摘要(From AI): 这篇笔记全面介绍了 FreeRTOS 软件定时器的核心概念和使用方法,包括定时器的创建、管理、常用 API 和辅助函数,并通过示例代码演示了如何启动、重置和更改定时器的周期。它强调了软件定时器的灵活性、平台无关性以及与硬件定时器的对比 …

AIGS架构革命:JBoltAI如何重塑Java企业的AI服务生态

AIGS架构革命:JBoltAI如何重塑Java企业的AI服务生态AI数智化转型的十字路口2025年,人工智能产业迎来三维共振的关键节点。根据中国信通院发布的2025人工智能十大关键词,“基础超级模型”、“自主性更强的智能体” 和…

RAG技术赋能企业数智化转型:JBoltAI如何破解AI落地“最后一公里”难题

RAG技术赋能企业数智化转型:JBoltAI如何破解AI落地“最后一公里”难题01. 人工智能时代的产业变革与挑战2025年,人工智能不再是遥远的概念,而是推动产业变革的核心动力。然而,对于大量传统企业而言,AI转型之路并不…

Java 团队转型 AI 开发难?JBoltAI 框架帮你节省 4-6 个月研发成本

Java 团队转型 AI 开发难?JBoltAI 框架帮你节省 4-6 个月研发成本当隔壁公司的 Java 团队已经用 AI 自动生成报表、优化客户咨询响应时,你的团队是不是还在为 “怎么把大模型接入现有 Java 系统” 头疼?AI 浪潮下,…

Stylus For Chrome下载地址

Stylus For Chrome下载地址Stylus For Chrome 下载地址:https://github.com/openstyles/stylus/releases Stylus是一款开源的浏览器样式管理器插件,是用户界面编辑器和管理器。 其目标是保持和改进原作者的版本,同时…

IntelliJ IDEA 查找和替换使用指南 - 详解

IntelliJ IDEA 查找和替换使用指南 - 详解2025-09-26 14:10 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

做个网站需要哪些东西国外做gif的网站

文章目录一、在线安装1、替换网易yum源2、清理缓存3、下载rpm文件4、安装MySQL数据库二、本地安装1、上传MySQL安装包2、安装依赖的程序包3、卸载mariadb程序包4、安装MySQL程序包5、修改MySQL目录权限6、初始化MySQL三、启动MySQL1.1、在线安装方式启动MySQL1.2、本地安装方式…

Prometheus-01-框架架构与核心概念详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

麒麟 Linux|深入解析 Linux 文件系统架构:理念、结构与工作机制 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

别等碳超支才慌!EMS 像 “碳导航”,提前预警能耗 “堵点”,双碳路上不绕路

在 “双碳” 目标推进的当下,不少企业都面临着一个棘手问题:往往要等到月度、季度碳排放核算结果出来,才发现碳排放量超标,此时再紧急整改,不仅要承担罚款风险,还可能打乱生产节奏,陷入 “亡羊补牢” 的被动局面…

哈尔滨网站seo公司农业信息网站建设

正文ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute。0. ApiControllerAttribute 继承自 ControllerAttributeASP.NET Core MVC 已经有了ControllerAttribute,这个用来标注一个类型是否是Controller。…

绩效考核表 网站建设建设部网站城市规划资质标准

为什么有越来越多的用户选择使用小程序?跟“高大上”的APP相比,小程序不仅可以减少下载安装的复杂流程,还具备操作便捷、沉淀私域数据的优势。蚓链分销小程序具备裂变二维码、实时分佣、分销身份升级、层级分佣、商品个性化佣金设定等功能&am…

网站文件夹名中文网址和中文域名区别

参考:基于知识库和 LLM 的问答系统经验分享 - 知乎 (zhihu.com) 一、基于LLM的问答系统架构 比较常见的开源 LLM 的问答系统都会遵循下图这种结构去进行设计: 加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> 问句向量化 -> 在文本…

有没有便宜做网站的 我要做个深圳网站如何制作

当我们面对三维建模软件的选择时,许多初学者可能会感到迷茫。今天,我们将从不同角度深入探讨Maya和Blender这两款软件的差异,特别是对于游戏建模领域的用户来说,这将有助于您更好地理解两者之间的区别。 软件授权与开发背景&#…

OTA测试实战指南:测试流程、用例设计与自动化实现

作为国内早期开展OEM整车EE测试业务的团队,经纬恒润整车电气团队在OTA测试及网联测试业务持续发展,积累了丰富的测试经验及项目管理经验。9月18日,经纬恒润举办线上直播研讨会,结合业务团队的实践经验,分享OTA云端…

Halcon图像——相机图像采集模式

Halcon中图像采集模式 在Halcon中,图像的采集分为两种:同步模式、异步模式。 异步读取 图像并非直接从相机中读取,还是在采集卡中读取。这样的好处就是可以保证取图和读图两不误,但必须要严格规定图像的处理时间。…