大型百度云网站建设phpcms v9网站搬站之后掉出来的文章链接显示为以前网站域名

张小明 2026/1/8 20:36:21
大型百度云网站建设,phpcms v9网站搬站之后掉出来的文章链接显示为以前网站域名,市政工程中标查询网,小公司做网站的实力Day07签到功能实现#xff1a;1.思路分析#xff1a;首先假设使用数据库中的签到表#xff0c;当该项目的用户体量越来越大的时候#xff0c;该数据库关于签到表的记录就会占用很大的空间。举个例子#xff1a;假如一个用户1年签到100次#xff0c;而网站有100万用户1.思路分析首先假设使用数据库中的签到表当该项目的用户体量越来越大的时候该数据库关于签到表的记录就会占用很大的空间。举个例子假如一个用户1年签到100次而网站有100万用户就会产生1亿条记录。随着用户量增多、时间的推移这张表中的数据只会越来越多占用的空间也会越来越大。因次采用另一种数据结构去保存签到记录——位图。这种数据统计的方式非常节省空间因此经常用来做各种数据统计。Redis中就提供了BitMap这种结构以及一些相关的操作命令。2.接口实现public interface redisConstants { /** * 签到记录的key的前缀:sign:uid:110:202512 */ String SIGN_RECORD_KEY_PREFIX sign:uid:; }/*** ***思路分析要实现签到功能接口首先需要知道当前的用户信息也就是用户id由于该功能需要 ***使用redis因此还需要明确key才能写入签到因此需要明确key的格式在上述代码中已经规定了 ***key的格式。得到了用户id和key之后还需要得到当天是该月的第几天。得到第几天之后还需要计算偏移量 ***也就是当天对应在BitMap的位置最后根据上述信息即可完成签到功能。但是由于后续还需要 ***进行积分相关业务因此还需要推算出该月连续签到了几次因此将该月的签到信息的字符码01010011 ***0代表没签到1代表签到返回后还需要从该字符码的信息从最后遍历与1进行与运算当 ***运算结果为0时就可以结束最后将统计天数返回在根据天数判断应该添加多少积分通过mq发送消息 ***最后返回签到vo即可。统计连续签到的代码在下面。 ***/ public SignResultVO addSignRecords() { //1.签到 //获取用户信息 Long userId UserContext.getUser(); //获取日期 LocalDate now LocalDate.now(); //拼接key String key redisConstants.SIGN_RECORD_KEY_PREFIX userId now.format(DateUtils.SIGN_DATE_SUFFIX_FORMATTER); //计算offset int offset now.getDayOfMonth() - 1;//表示签到日期在当月中的位置 Boolean signResult redisTemplate.opsForValue().setBit(key, offset, true); if (BooleanUtils.isTrue(signResult)) throw new BizIllegalException(不允许重复签到); // 2.计算连续签到的天数 int signDays countSignDays(key , now.getDayOfMonth()); int rewardPoints 0; //TODO 3.计算签到得分 switch (signDays){ case 7: rewardPoints 10; break; case 14: rewardPoints 20; break; case 28: rewardPoints 40; break; } //TODO 4.保存积分明细记录 rabbitMqHelper.send(MqConstants.Exchange.LEARNING_EXCHANGE, MqConstants.Key.SIGN_IN, SignMessage.of(userId, rewardPoints 1)); //4.封装返回 SignResultVO vo new SignResultVO(); vo.setSignDays(signDays); vo.setRewardPoints(rewardPoints); return vo; }/** * 计算连续签到的天数 * param key Redis中存储签到记录的键 * param len 需要检查的位数长度 * return 连续签到的天数 */ private int countSignDays(String key, int len) { //获取本月从第一天开始到今天为止的所有签到记录 // 使用Redis的BITFIELD命令获取指定位域的值 ListLong result redisTemplate.opsForValue().bitField(key, BitFieldSubCommands.create().get( BitFieldSubCommands.BitFieldType.unsigned(len)).valueAt(0)); // 如果结果为空说明没有签到记录返回0 if (CollUtils.isEmpty(result)) return 0; // 获取签到记录的数值表示 int num result.get(0).intValue(); //定义一个计数器用于记录连续签到的天数 int count 0; //循环,与1做与运算得到最后一个bit判断是否为0为0终止为1继续 while ((num 1) 1){ //计数器加1 count; //把数字右移一位最后一位被舍弃 num 1; } return count; }新增积分功能实现1.思路分析由积分规则可知获取积分的行为多种多样而且每一种行为都有自己的独立业务。而这些行为产生的时候需要保存一条积分明细到数据库。我们显然不能要求其它业务的开发者在开发时帮我们新增一条积分记录这样会导致原有业务与积分业务耦合。因此必须采用异步方式将原有业务与积分业务解耦。因此采用mq去发送消息通过消息监听器去增加用户积分。今天实现的只问答签到完成视频或者考试得到的积分。2.接口实现1.监听器的代码如下实现了问答学习视频或考试签到等有关积分的监听器/** * 签名消息类用于存储用户签到相关的信息 * 使用Lombok注解自动生成getter、setter、toString等方法 */ Data NoArgsConstructor AllArgsConstructor(staticName of) public class SignMessage { /** * 用户ID用于标识唯一用户 */ private Long userId; /** * 积分数量表示用户签到获得的积分 */ private Integer points; }/** ***该代码只实现问答、视频或考试、签到等相关的积分监听器 ***其中关于积分的监听器除了需要知道用户ID还需要用户得到的积分数量 ***因为签到这里的积分是可变的而其余的积分是规定好的因此在这里 ***封装了一个message的类存储了用户id和积分在上述代码中。 **/ Component RequiredArgsConstructor public class LearningPointsListener { private final IPointsRecordService recordService; /** * 问答积分监听器 * param userId 用户id */ RabbitListener(bindings QueueBinding( value Queue(value qa.points.queue, durable true), exchange Exchange(value MqConstants.Exchange.LEARNING_EXCHANGE, type ExchangeTypes.TOPIC), key MqConstants.Key.WRITE_REPLY )) public void listenWriteReplyMessage(Long userId){ recordService.addPointsRecord(userId,5, PointsRecordType.QA); } /** * 签到积分监听器 * param message 监听的信息 */ RabbitListener(bindings QueueBinding( value Queue(value sign.points.queue, durable true), exchange Exchange(value MqConstants.Exchange.LEARNING_EXCHANGE, type ExchangeTypes.TOPIC), key MqConstants.Key.SIGN_IN )) public void listenSignInMessage(SignMessage message){ recordService.addPointsRecord(message.getUserId(),message.getPoints(), PointsRecordType.SIGN); } /** * 学习视频或者考试监听器 * param userId 用户id */ RabbitListener(bindings QueueBinding( value Queue(value video.points.queue, durable true), exchange Exchange(value MqConstants.Exchange.LEARNING_EXCHANGE, type ExchangeTypes.TOPIC), key MqConstants.Key.LEARN_SECTION )) public void listenLearningVideoMessage(Long userId){ recordService.addPointsRecord(userId,10, PointsRecordType.LEARNING); } }2.签到获得积分增加的代码如下在SignRecordServiceImpl中的addSignRecords方法添加如下代码int rewardPoints 0; switch (signDays){ case 7: rewardPoints 10; break; case 14: rewardPoints 20; break; case 28: rewardPoints 40; break; } //TODO 4.保存积分明细记录 rabbitMqHelper.send(MqConstants.Exchange.LEARNING_EXCHANGE, MqConstants.Key.SIGN_IN, SignMessage.of(userId, rewardPoints 1));3.问答获得积分增加代码如下在InteractionReplyServiceImpl中的saveReply方法中添加如下代码if(dto.getIsStudent()){ question.setStatus(QuestionStatus.UN_CHECK); //如果是学生回答了需要发送mq消息增加该学生的积分 mqHelper.send(MqConstants.Exchange.LEARNING_EXCHANGE, MqConstants.Key.WRITE_REPLY, userId); }4.学习完视频或者考试获得积分增加的代码如下在LearningRecordServiceImpl中的addLearningRecord方法中添加如下代码if (!finished){ //没有新学完的小节无需更新课表中的学习进度 return; } //有新学完的小节需要添加积分 mqHelper.send(MqConstants.Exchange.LEARNING_EXCHANGE, MqConstants.Key.LEARN_SECTION, userId); //3.有新学完的小节处理课表数据 handleLearningLessonsChanges(dto);查询签到记录功能实现/*** ***思路分析查询签到记录的功能其实跟前面实现查询连续签到的天数的思路差不多 ***首先拿到用户id和key以及现在的天数 在去redis中查到对应的字符码同时也需要计算偏移量 ***以及顶一个字符数组存储该月的开始到现在的签到记录也就是010100111这种最后将字符码 ***从后往前开始跟1进行yu运算在根据偏移量将该数据填充进字符数组也是从后往前开始填充最 ***后返回字符数组。注该功能我使用swagger去测试的时候发先Byte字符数组似乎不满足spring要求 ***我也不清楚怎么回事。 ***/ Override public Byte[] querySignRecords() { //获取当前用户id Long userId UserContext.getUser(); if (userId null) throw new BizIllegalException(当前用户未登录); //获取当前日期 LocalDate now LocalDate.now(); String key redisConstants.SIGN_RECORD_KEY_PREFIX userId now.format(DateUtils.SIGN_DATE_SUFFIX_FORMATTER); int currentDay now.getDayOfMonth(); ListLong result redisTemplate.opsForValue().bitField(key, BitFieldSubCommands.create().get( BitFieldSubCommands.BitFieldType.unsigned(currentDay)).valueAt(0)); if (CollUtils.isEmpty(result)) return new Byte[0]; Byte[] signDay new Byte[currentDay]; //表示当月的签到记录返回数组 int signDays result.get(0).intValue(); //当月签到记录的字节码01010011 int offset currentDay - 1;//计算偏移量对应的字节码位置为当天的天数减1 while (offset 0){ //判断当前字节码与1进行与运算是1还是0 signDay[offset] (signDays 1) 1 ? (byte)1 : (byte)0; //把数字右移一位最后一位被舍弃 signDays 1; offset--; } return signDay; }实现查询赛季列表功能该功能能简单就是返回一个积分赛季榜vo的list从数据查到po转化成vo即可。/** * 查询历史赛季列表的方法 * 该方法从数据库中获取所有赛季信息并将其转换为视图对象(VO)列表返回 * return 返回一个PointsBoardSeasonVO对象的列表包含赛季的基本信息 */ Override public ListPointsBoardSeasonVO queryHistorySeasonsList() { // 从数据库中查询所有赛季数据 ListPointsBoardSeason list baseMapper.selectList(null); // 创建用于存储视图对象的列表 ListPointsBoardSeasonVO vo new ArrayList(); // 遍历查询结果将实体对象转换为视图对象 for (PointsBoardSeason season : list) { // 创建视图对象 PointsBoardSeasonVO pointsBoardSeasonVO new PointsBoardSeasonVO(); // 设置视图对象的各个属性 pointsBoardSeasonVO.setId(season.getId()); pointsBoardSeasonVO.setName(season.getName()); pointsBoardSeasonVO.setBeginTime(season.getBeginTime()); pointsBoardSeasonVO.setEndTime(season.getEndTime()); // 将转换后的视图对象添加到列表中 vo.add(pointsBoardSeasonVO); } // 返回转换后的视图对象列表 return vo; }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

不会编码可以做网站优化吗wordpress小图标网站

1 容器化时代的测试困境随着云原生技术成为主流,容器化部署在提升敏捷性的同时,却给测试工作带来了前所未有的挑战:环境配置不一致、数据状态难以同步、资源争用导致性能波动……这些问题直接影响到测试结果的可靠性与交付效率。本文旨在针对…

张小明 2026/1/8 1:59:55 网站建设

做企业网站需要准备什么网站开发工具的功能

时序数据库性能飞跃:5个索引优化技巧让查询速度提升10倍 【免费下载链接】VictoriaMetrics VictoriaMetrics/VictoriaMetrics: 是一个开源的实时指标监控和存储系统,用于大规模数据实时分析和监控。它具有高吞吐量、低延迟、可扩展性等特点,可…

张小明 2026/1/8 19:26:54 网站建设

专业做化妆品的网站有哪些直播平台开发费用

macOS开源应用终极指南:10款免费工具提升工作效率 【免费下载链接】open-source-mac-os-apps serhii-londar/open-source-mac-os-apps: 是一个收集了众多开源 macOS 应用程序的仓库,这些应用程序涉及到各种领域,例如编程、生产力工具、游戏等…

张小明 2026/1/8 1:59:42 网站建设

宁波海曙网站开发合肥公司网站设计

第一章:电力巡检Agent路线规划概述 在现代智能电网运维体系中,电力巡检Agent作为自动化检测与故障预警的核心组件,其路径规划能力直接影响巡检效率与系统可靠性。通过引入智能算法与地理信息系统(GIS)数据,…

张小明 2026/1/8 19:26:57 网站建设

建设银行手机查询网站访问外国网站速度慢

6G 时代物联网绿色移动边缘计算探索 无线传感与传感器云架构概述 在当今的科技环境中,无线传感技术发展迅速。输入传感器接收的信号会通过转换器转换为数字输入,以便进行进一步处理。若有需要,数字数据会被相应地转换和存储。下面我们将详细探讨无线传感网络(WSNs)的应用…

张小明 2026/1/8 19:26:56 网站建设

广州青菜篮农业有限公司网站建设项目wordpress程序伪静态

某市文旅集团为破解 “黄金周景区拥堵、游客体验差、管理决策滞后” 等痛点,联合科创公司启动投资 2000 万的 “智慧文旅综合服务平台” 项目。架构师林悦带领 15 人技术团队,需在 6 个月内完成平台开发上线,支撑全市 53 个 A 级景区、218 家…

张小明 2026/1/7 23:46:45 网站建设