个人网站备案 名称业务网站建设

张小明 2025/12/31 11:21:08
个人网站备案 名称,业务网站建设,北京软件开发招聘信息,建立免费网站的步骤接口 1.签到功能接口参数说明请求方式POST请求路径/sign-records请求参数无返回值{ signDays: 10, // 连续签到天数 points : 14 // 今日签到获取的积分 }SignRecordController.java/*** 新增签到记录* return SignResultVO*/PostMappingApiOper…接口1.签到功能接口参数说明请求方式POST请求路径/sign-records请求参数无返回值{ signDays: 10, // 连续签到天数 points : 14 // 今日签到获取的积分 }SignRecordController.java/** * 新增签到记录 * return SignResultVO */PostMappingApiOperation(新增签到记录)publicSignResultVOaddSignRecords(){returnsignRecordService.addSignRecords();}ISignRecordService.javaSignResultVOaddSignRecords();RedisConstants.javapublicinterfaceRedisConstants{/** * 签到记录的key前缀 完整格式为 sign:uid:用户id:年月 */StringSIGN_RECORD_KEY_PREFIXsign:uid:;}SignRecordServiceImpl.javaOverridepublicSignResultVOaddSignRecords(){// 1.签到LonguserUserContext.getUser();StringsignRecordKeyPrefixRedisConstants.SIGN_RECORD_KEY_PREFIX;StringnowLocalDate.now().format(DateUtils.SIGN_DATE_SUFFIX_FORMATTER);//key offsetStringkeysignRecordKeyPrefixusernow;intoffsetLocalDate.now().getDayOfMonth()-1;BooleanbstringRedisTemplate.opsForValue().setBit(key,offset,true);// 2计算签到得分//已经签到过了if(Boolean.TRUE.equals(b)){thrownewBizIllegalException(请勿重复签到);}// 3.统计连续签到天数(传递键与当天的日期)intcontinueSignDayscountSignDays(key,offset1);// 本月签到天数intcountedMonthDayscountMonthDays(key,offset1);intrewardPoints0;switch(countedMonthDays){case7:rewardPoints5;break;case14:rewardPoints10;break;case21:rewardPoints15;break;}log.info(用户{}签到成功连续签到{}天签到天数{},签到得分{},user,continueSignDays,countedMonthDays,rewardPoints);SignResultVOsignResultVOnewSignResultVO();//连续签到天数signResultVO.setSignDays(continueSignDays);//签到得分signResultVO.setRewardPoints(rewardPoints);returnsignResultVO;}/** * 计算签到的天数 * * param key 缓存中的key * param dayOfMonth 今天几号 * return */privateintcountMonthDays(Stringkey,intdayOfMonth){// 求本月第一天到今天签到的天数 bitFiled 得到的是十进制// bitField key get u天数 0ListLongbitFieldstringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if(CollUtils.isEmpty(bitField)){return0;}// 本月第一天到今天的签到天数 拿到的十进制LongnumbitField.get(0);// num转二进制 从后往前推共有多少个一intcounter0;while((num1)1){counter;numnum1;}returncounter;}/** * 统计连续签到天数 * * param key 缓存中的key * param dayOfMonth 今天记号 * return */privateintcountSignDays(Stringkey,intdayOfMonth){// 1.获取对应的十进制数ListLonglongsstringRedisTemplate.opsForValue().bitField(key,BitFieldSubCommands.create().get(BitFieldSubCommands.BitFieldType.unsigned(dayOfMonth)).valueAt(0));if(CollUtils.isEmpty(longs)){return0;}// 2.循环与运算intsignNumlongs.get(0).intValue();intcontinuousDays0;// 遇到未签到终止循环判断最后一位是否为1是否签到while((signNum1)!0){// 连续签到计数器1continuousDays;// 右移一位判断前一天signNumsignNum1;}// 5.返回结果returncontinuousDays;}2.查询本月签到记录参数说明请求方式GET请求路径/sign-records请求参数无返回值[ 0, // 第1天签到情况 1, // 第2天签到情况 1, // 第3天签到情况 // ... ]SignRecordController.java/** * 查询签到记录 * return List */GetMappingApiOperation(查询签到记录)publicListIntegerquerySignRecord(){returnISignRecordService.querySignRecord();}ISignRecordService.javaListIntegerquerySignRecord();SignRecordServiceImpl.javaOverridepublicListIntegerquerySignRecord(){// 1.用户id与日期LonguserUserContext.getUser();LocalDatetodayLocalDate.now();// 2.key与偏移量Stringnowtoday.format(DateUtils.SIGN_DATE_SUFFIX_FORMATTER);StringkeyRedisConstants.SIGN_RECORD_KEY_PREFIXusernow;intoffsettoday.getDayOfMonth()-1;// 3.创建集合ArrayListIntegerarrnewArrayList(40);for(inti0;ioffset;i){BooleanisSignstringRedisTemplate.opsForValue().getBit(key,i);if(Boolean.TRUE.equals(isSign)){arr.add(1);}else{arr.add(0);}}returnarr;}3.新增积分记录SignInMessage.java/** * 签到消息 * * author ax */DataAllArgsConstructorNoArgsConstructorpublicclassSignInMessage{privateLonguserId;privateIntegerpoints;}LearningPointsListener.javapackagecom.tianji.learning.mq;importcom.tianji.common.constants.MqConstants;importcom.tianji.learning.enums.PointsRecordType;importcom.tianji.learning.mq.message.SignInMessage;importcom.tianji.learning.service.IPointsRecordService;importlombok.RequiredArgsConstructor;importlombok.extern.slf4j.Slf4j;importorg.springframework.amqp.core.ExchangeTypes;importorg.springframework.amqp.rabbit.annotation.Exchange;importorg.springframework.amqp.rabbit.annotation.Queue;importorg.springframework.amqp.rabbit.annotation.QueueBinding;importorg.springframework.amqp.rabbit.annotation.RabbitListener;importorg.springframework.stereotype.Component;/** * 积分监听器 * * author ax */Slf4jComponentRequiredArgsConstructorpublicclassLearningPointsListener{privatefinalIPointsRecordServicepointsRecordService;/** * 监听-写回答积分 * * param userId */RabbitListener(bindingsQueueBinding(valueQueue(nameqa.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.WRITE_REPLY))publicvoidlistenWriteReplyMessage(LonguserId){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(userId,5,PointsRecordType.QA);}/** * 监听-签到积分 * * param message */RabbitListener(bindingsQueueBinding(valueQueue(namesign.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.SIGN_IN))publicvoidlistenWriteSignMessage(SignInMessagemessage){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(message.getUserId(),message.getPoints(),PointsRecordType.SIGN);}/** * 监听-被采纳笔记积分 * * param userId */RabbitListener(bindingsQueueBinding(valueQueue(namenotegathered.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.NOTE_GATHERED))publicvoidlistenWriteNoteMessage01(LonguserId){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(userId,2,PointsRecordType.NOTE);}/** * 监听-写笔记积分 * * param userId */RabbitListener(bindingsQueueBinding(valueQueue(namenote.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.WRITE_NOTE))publicvoidlistenWriteNoteMessage02(LonguserId){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(userId,3,PointsRecordType.NOTE);}/** * 监听-学习视频积分 * * param userId */RabbitListener(bindingsQueueBinding(valueQueue(namevideo.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.LEARN_SECTION))publicvoidlistenWriteVideoMessage(LonguserId){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(userId,10,PointsRecordType.LEARNING);}/** * 监听-评论积分 * * param userId */RabbitListener(bindingsQueueBinding(valueQueue(namecomment.points.queue,durabletrue),exchangeExchange(nameMqConstants.Exchange.LEARNING_EXCHANGE,typeExchangeTypes.TOPIC),keyMqConstants.Key.COMMENT))publicvoidlistenWriteCommentMessage(LonguserId){//用户id累加的积分积分类型pointsRecordService.addPointsRecord(userId,10,PointsRecordType.COMMENT);}// /* 写回答 */// String WRITE_REPLY reply.new;// /* 签到 */// String SIGN_IN sign.in;// /* 学习视频 */// String LEARN_SECTION section.learned;// /* 写笔记 */// String WRITE_NOTE note.new;// /* 笔记被采集 */// String NOTE_GATHERED note.gathered;// /* 评论 */// String COMMENT comment.new;// LEARNING(1, 课程学习, 50),// SIGN(2, 每日签到, 0),// QA(3, 课程问答, 20),// NOTE(4, 课程笔记, 20),// COMMENT(5, 课程评价, 0),}IPointsRecordService.javavoidaddPointsRecord(LonguserId,intpoint,PointsRecordTypepointsRecordType);PointsRecordServiceImpl.javaOverridepublicvoidaddPointsRecord(LonguserId,intpoint,PointsRecordTypetype){//判断该积分类型是否有上限 type.maxPoints是否大于0if(point0){return;}intmaxPointstype.getMaxPoints();if(maxPoints0){LocalDateTimenowLocalDateTime.now();LocalDateTimedayStartTimeDateUtils.getDayStartTime(now);LocalDateTimedayEndTimeDateUtils.getDayEndTime(now);//如果有上限 查询该用户 该积分类型 今日已得积分 points_record 条件userId typeQueryWrapperPointsRecordwrappernewQueryWrapper();wrapper.select(sum(points) as totalPoints);wrapper.eq(user_id,userId);wrapper.eq(type,type);wrapper.between(create_time,dayStartTime,dayEndTime);MapString,Objectmapthis.getMap(wrapper);//当前用户该积分类型 已得积分intcurrentPoints0;if(map!nullmap.containsKey(totalPoints)){BigDecimaltotalPoints(BigDecimal)map.get(totalPoints);currentPointstotalPoints.intValue();}//判断已得积分是否超过上限if(currentPointsmaxPoints){//说明已得积分 达到上限return;}// 此时的point标识能得得积分if(currentPointspointmaxPoints){pointmaxPoints-currentPoints;}}//保存积分PointsRecordrecordnewPointsRecord();record.setUserId(userId);record.setType(type);record.setPoints(point);this.save(record);}4.查询今日积分情况参数说明请求方式GET请求路径/points/today请求参数无返回值[ { type: 每日签到, // 积分类型描述 points : 1, // 今日签到获取的积分 maxPoints : 5, // 每日积分上限 }, { type: 回答问题, // 积分类型描述 points : 1, // 今日签到获取的积分 maxPoints : 5, // 每日积分上限 } ]PointsRecordController.javaApiOperation(查询今日积分)GetMapping(today)publicListPointsStatisticsVOgetPointsRecord(){returnpointsRecordService.queryMyPointsToday();}IPointsRecordService.javaListPointsStatisticsVOqueryMyPointsToday();PointsRecordServiceImpl.javaOverridepublicListPointsStatisticsVOqueryMyPointsToday(){// 1.获取用户idLonguserIdUserContext.getUser();// 2.获取当天得时间范围LocalDateTimenowLocalDateTime.now();LocalDateTimedayStartTimeDateUtils.getDayStartTime(now);LocalDateTimedayEndTimeDateUtils.getDayEndTime(now);// 3.借助类型去分组判断每个类型今日获取得积分在语句当中将积分和映射为userId从而便于映射实体QueryWrapperPointsRecordwrappernewQueryWrapper();wrapper.select(type,sum(points) as userId);wrapper.eq(user_id,userId);wrapper.between(create_time,dayStartTime,dayEndTime);wrapper.groupBy(type);ListPointsRecordlistthis.list(wrapper);if(CollUtils.isEmpty(list)){returnCollUtils.emptyList();}//封装vo返回ListPointsStatisticsVOvoListnewArrayList();for(PointsRecordrecord:list){PointsStatisticsVOvonewPointsStatisticsVO();//积分类型vo.setType(record.getType().getDesc());//积分类型得分数上限vo.setMaxPoints(record.getType().getMaxPoints());// if(record.getType().getMaxPoints()0){// vo.setMaxPoints(41);// }//今日已获得积分vo.setPoints(record.getUserId().intValue());voList.add(vo);}returnvoList;}查询赛季列表功能参数说明请求方式GET请求路径/boards/seasons/list请求参数无返回值[ { id: 110, // 赛季id name: 第一赛季, // 赛季名称 beginTime: 2023-05-01, // 赛季开始时间 endTime: 2023-05-31, // 赛季结束时间 } ]PointsBoardSeasonController.javaApiOperation(查询赛季列表)GetMapping(list)publicListPointsBoardSeasonqueryPointBoardSeasonList(){returnpointsBoardSeasonService.list();//要返回的结果字段与po字段一样 所以可以直接调用mp中的list方法}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网站建设泉州效率网络网络运营商包括

国内开发者在集成 OpenAI GPT-5.2 时,普遍会遭遇API 访问受限、海外支付门槛高、多模型适配复杂三大棘手问题,直接延误项目上线周期。本文基于 2025 年 12 月最新实测验证(GPT-5.2 正式发布后 1 个月),推出一套通过 AP…

张小明 2025/12/27 5:10:25 网站建设

遵义网上制作网站天津网站制作西安

10分钟智能播放器极速配置法:打造专属跨平台影音方案 【免费下载链接】ZyPlayer 跨平台桌面端视频资源播放器,免费高颜值. 项目地址: https://gitcode.com/gh_mirrors/zy/ZyPlayer 还在为复杂的播放器配置而烦恼吗?ZyPlayer作为一款跨平台桌面端视…

张小明 2025/12/27 0:19:44 网站建设

织梦网站后台进不去呼和浩特网络运营

论文AIGC率过高是当前很多学生和研究者在论文写作中遇到的普遍问题。别慌,只要掌握正确的方法,完全可以将AI生成痕迹有效降低,顺利通过AIGC检测。 一、AIGC检测原理是什么? 为什么自己写的论文AIGC检测会超标,一个一…

张小明 2025/12/27 0:19:43 网站建设

网站建设汇报 安全保障广告平面设计公司

GPT2-Chinese长文本生成:突破上下文限制的完整解决方案 【免费下载链接】GPT2-Chinese Chinese version of GPT2 training code, using BERT tokenizer. 项目地址: https://gitcode.com/gh_mirrors/gp/GPT2-Chinese 你是否遇到过GPT2模型生成中文文本时总是被…

张小明 2025/12/26 5:17:25 网站建设

晋城市住房和城乡建设局官方网站盘锦门户网站制作

Chrome浏览器本地Web服务器搭建:零配置快速部署指南 【免费下载链接】web-server-chrome An HTTP Web Server for Chrome (chrome.sockets API) 项目地址: https://gitcode.com/gh_mirrors/we/web-server-chrome 还在为复杂的本地服务器配置而烦恼吗&#xf…

张小明 2025/12/26 6:08:49 网站建设