No.1-南波兔 冲刺随笔Day 6

2023-11-22 22:52
文章标签 随笔 day no.1 冲刺 南波

本文主要是介绍No.1-南波兔 冲刺随笔Day 6,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  

目录

一、项目燃尽图

二、冲刺内容

三、相关代码

四、程序的最新运行效果展示

五、会议照片


这个作业属于哪个课程2023-计算机学院-软件工程
这个作业要求在哪里团队作业——站立式会议+alpha冲刺
这个作业的目标No.1-南波兔 冲刺随笔 Day6
团队名称No.1-南波兔
团队项目                小福出行
团队置顶集合随笔链接No.1-南波兔——Alpha 冲刺随笔置顶

项目燃尽图

二、冲刺内容

成员       任务存在的问题/遇到的困难从现在到明天站立式会议的安排心得体会
102101108徐悦昕优化功能,开发聊天页面后端,设计相关接口对于框架并不是很熟悉,刚开始开发的时候产生了许多bug继续完善相关内容还需要继续学习
102101206陈妍完善帖子页面的部分后端代码,优化功能继续完善帖子页面的相关后端代码在项目开发过程中,我们要注重良好的前后端交流。
102101310黃心怡整合代码代码不够规范继续完善相关内容代码规范很重要  
102101602杜雅婷完善页面,测试相关功能发现bug,进行处理继续完善相关内容加强沟通,和组员多交流代码中的问题
102101603李欣妍完善广场及编辑帖子页面完善广场及编辑帖子页面继续加油
102101604杨嘉鑫设计聊天前端页面,开发我的管理模块继续完善聊天前端页面,开发我的管理模块-我的拼车前端页面良好的代码质量和规范对项目的成功至关重要
102101605林盈盈编写接口,完善数据库设计交互继续完善相关内容和组员的沟通很重要
102101607郭紫莹 设计用户界面相关接口,实现部分功能调试继续学习,完善相关内容在前后端交互的过程中,数据的传输和处理是非常重要的。需要注意数据的格式、编码问题
102101622何卓穎确定找回密码方式,并开始编写继续完善完善登录注册及修改密码前端页面 项目的编写需要尽早开始,留足时间做测试、优化和修改

三、相关代码

消息界面与我的管理模块

前端:

<template><view class="chat-page"><scroll-view class="chat-list" scroll-y><view  v-for="(message, index) in messages" :key="index"><view class="messageLeft" v-show="message.huiFlag"> {{ message.msg }} </view><view class="messageRight" v-show="message.faFlag"> {{ message.msg }} </view></view></scroll-view><view class="text-input-wrapper"><input class="text-input" type="text" v-model="inputText" placeholder="请输入消息内容" /><view class="send-button" @click="sendMessage">发送</view></view></view>
</template><script>import mqtt from "mqtt";
import {MQTT_IP, MQTT_OPTIONS} from "@/common/mqtt";let client;
export default {data() {return {topic : "PCAR-CHAT",userId : "",messages: [{msg : "",huiFlag : false,faFlag : false}],inputText: ''};},onLoad() {this.userId = this.$route.query.id;if(client == null){this.connect();}this.init()},methods: {init(){this.$u.api.chatList({toUserId : this.userId,fromUserId : localStorage.getItem("tokenId")}).then(res =>{if(res){this.messages = [];for (const resKey of res) {let obj={};obj.msg = resKey.msg;if(resKey.toUserId == localStorage.getItem("tokenId")){obj.huiFlag = trueobj.faFlag = false}else {obj.huiFlag = falseobj.faFlag = true}this.messages.push(obj);}}})},connect() {MQTT_OPTIONS.clientId = "PCAR_CHAT_"+localStorage.getItem("tokenId")const that = this;client = mqtt.connect('ws://' + MQTT_IP, MQTT_OPTIONS);client.on('connect', function() {console.log('连接成功')client.subscribe(that.topic+"-"+that.userId,function (err){if (!err) {console.log(that.topic+"-"+that.userId+'订阅成功')}})}).on('reconnect', function(error) {console.log('正在重连...', that.topic)}).on('error', function(error) {console.log('连接失败...', error)}).on('end', function() {console.log('连接断开')}).on('message', function(topic, message) {// if(topic != (that.topic+"-"+that.userId)){that.init();console.log(topic+'接收推送信息:', message.toString())// }})},sendMessage() {if (this.inputText === '') {return; // 如果输入内容为空,则不发送}this.$u.api.addChat({toUserId : this.userId,fromUserId : localStorage.getItem("tokenId"),msg : this.inputText}).then(res =>{if(res){this.init();this.inputText = '';}})// this.messages.push({//   huiFlag : false,//   faFlag : true,//   fromUserId : localStorage.getItem("tokenId"),//   toUserId : this.userId,//   msg: this.inputText// });}}
};
</script><style>
.chat-page {margin-top: 10px;display: flex;flex-direction: column;height: 90vh;
}.chat-list {flex: 1;padding: 10px;
}.messageLeft {margin-bottom: 10px;padding: 10px;background-color: #e7e7e7;border-radius: 5px;
}
.messageRight{margin-bottom: 10px;margin-right: 10px;padding: 10px;background-color: #e7e7e7;border-radius: 5px;text-align: right
}.text-input-wrapper {display: flex;align-items: center;padding: 10px;background-color: #f5f5f5;
}.text-input {flex: 1;height: 40px;margin-right: 10px;padding: 5px 10px;background-color: #ffffff;border-radius: 4px;border: 1px solid #ccc;
}.send-button {width: 60px;height: 40px;line-height: 40px;text-align: center;background-color: #007aff;color: #ffffff;border-radius: 4px;
}
</style>

<template><view><view class="my-page"><image class="avatar" src="" /><text class="nickname">{{ nickname }} {{account}}</text><navigator url="/pages/posts/addPosts" hover-class="navigator-hover"><view class="module"><text class="module-title">发起拼车</text></view></navigator><navigator url="/pages/posts/myIndex" hover-class="navigator-hover"><view class="module"><text class="module-title">我的发帖</text></view></navigator><navigator url="/pages/msg/index" hover-class="navigator-hover"><view class="module"><text class="module-title">我的消息</text></view></navigator><navigator url="/pages/my/userInfo" hover-class="navigator-hover"><view class="module"><text class="module-title">我的资料</text></view></navigator><button class="logout-btn" @click="logout">退出登录</button></view><Foot/></view>
</template><script>
import Foot from "@/components/foot.vue";export default {components: {Foot},data() {return {account: localStorage.getItem("token"),nickname: ""}},onLoad() {this.$u.api.userInfo({id : localStorage.getItem("tokenId")}).then(res => {if(res){this.nickname = res.nickname;}});},methods: {logout() {localStorage.removeItem("token");localStorage.removeItem("tokenId");uni.redirectTo({url: '/pages/index/index'})}}
}
</script><style scoped>
.my-page {padding: 20px;font-size: 16px;
}.avatar {width: 100px;height: 100px;border-radius: 50%;
}.nickname {font-size: 20px;margin-top: 10px;
}.module {margin-top: 20px;border-bottom: 1px solid #ccc;padding-bottom: 20px;
}.module-title {font-size: 18px;font-weight: bold;margin-bottom: 10px;
}.logout-btn {width: 100%;height: 40px;background: #ff4d4f;border: none;border-radius: 5px;color: #fff;font-size: 16px;margin-top: 20px;
}
</style>

后端

package com.han.app.controller;import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.han.app.config.Result;
import com.han.app.controller.dto.ChatDto;
import com.han.app.controller.vo.ChatInfoVo;
import com.han.app.entity.ChatInfo;
import com.han.app.entity.Post;
import com.han.app.entity.User;
import com.han.app.mqtt.MqttPushClient;
import com.han.app.service.ChatInfoService;
import com.han.app.service.UserService;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.*;
import java.util.stream.Collectors;@RestController
@RequestMapping("/Chat")
@RequiredArgsConstructor
public class ChatController {private final MqttPushClient mqttPushClient;private final ChatInfoService chatInfoService;private final UserService userService;@PostMapping("/SendMsg")public Result sendMsg(@RequestBody ChatInfo dto){dto.setFromToUserId(dto.getFromUserId()+"-"+dto.getToUserId());if(dto.getFromUserId() > dto.getToUserId()){dto.setFromToUserId(dto.getToUserId()+"-"+dto.getFromUserId());}dto.setAddTime(new Date());chatInfoService.save(dto);System.out.println("给  PCAR-CHAT-"+dto.getToUserId()+"  发送 "+dto.getMsg());mqttPushClient.publish("PCAR-CHAT-"+dto.getToUserId(),dto.getMsg());return Result.ok("ok");}@PostMapping("/ChatList")public Result chatList(@RequestBody ChatDto dto){String key = dto.getFromUserId()+"-"+dto.getToUserId();if(dto.getFromUserId() > dto.getToUserId()){key = (dto.getToUserId()+"-"+dto.getFromUserId());}LambdaQueryWrapper<ChatInfo> lqw = new LambdaQueryWrapper<>();lqw.eq(ChatInfo::getFromToUserId,key).orderByDesc(ChatInfo::getAddTime).last(" limit 10");List<ChatInfo> list = chatInfoService.list(lqw);List<ChatInfo> collect = list.stream().sorted(Comparator.comparing(ChatInfo::getId)).collect(Collectors.toList());return Result.ok(collect);}@PostMapping("/DeleteChat")public Result deleteChat(@RequestBody ChatDto dto){String key = dto.getFromUserId()+"-"+dto.getToUserId();if(dto.getFromUserId() > dto.getToUserId()){key = (dto.getToUserId()+"-"+dto.getFromUserId());}LambdaQueryWrapper<ChatInfo> lqw = new LambdaQueryWrapper<>();lqw.eq(ChatInfo::getFromToUserId,key);chatInfoService.remove(lqw);return Result.ok("ok");}@PostMapping("/ChatUserList")public Result chatUserList(@RequestBody ChatDto dto){LambdaQueryWrapper<ChatInfo> lqw = new LambdaQueryWrapper<>();lqw.like(ChatInfo::getFromToUserId,dto.getFromUserId()).groupBy(ChatInfo::getFromToUserId).orderByAsc(ChatInfo::getAddTime);List<ChatInfo> list = chatInfoService.list(lqw);ArrayList<ChatInfoVo> resList = new ArrayList<>();if(CollUtil.isNotEmpty(list)){HashSet<Integer> set = new HashSet<>();for (ChatInfo chatInfo : list) {set.add(chatInfo.getFromUserId());set.add(chatInfo.getToUserId());}LambdaQueryWrapper<User> userLqw = new LambdaQueryWrapper<>();userLqw.in(User::getId,set);List<User> userList = userService.list(userLqw);Map<Integer, String> collect = userList.stream().collect(Collectors.toMap(User::getId, User::getAccount));for (ChatInfo chatInfo : list) {ChatInfoVo vo = new ChatInfoVo();vo.setMsg(chatInfo.getMsg());if(NumberUtil.equals(chatInfo.getFromUserId(),dto.getFromUserId()) ){vo.setUserName(collect.getOrDefault(chatInfo.getToUserId(),""));vo.setUserId(chatInfo.getToUserId());}else {vo.setUserName(collect.getOrDefault(chatInfo.getFromUserId(),""));vo.setUserId(chatInfo.getFromUserId());}resList.add(vo);}}return Result.ok(resList);}
}
package com.han.app.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.Date;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;/*** * @TableName chat_info*/
@TableName(value ="chat_info")
@Data
public class ChatInfo implements Serializable {/*** */@TableId(type = IdType.AUTO)private Integer id;/*** */@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date addTime;/*** */private Integer fromUserId;/*** */private Integer toUserId;/*** */private String msg;/*** */private String fromToUserId;@TableField(exist = false)private static final long serialVersionUID = 1L;
}

四、程序的最新运行效果展示

五、会议照片

这篇关于No.1-南波兔 冲刺随笔Day 6的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/413491

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

Linux基础入门 --9 DAY

文本处理工具之神vim         vi和vim简介 一、vi编辑器 vi是Unix及类Unix系统(如Linux)下最基本的文本编辑器,全称为“visual interface”,即视觉界面。尽管其名称中包含“visual”,但vi编辑器实际上工作在字符模式下,并不提供图形界面。vi编辑器以其强大的功能和灵活性著称,是Linux系统中不可或缺的工具之一。 vi编辑器具有三种主要的工作模

day-50 求出最长好子序列 I

思路 二维dp,dp[i][h]表示nums[i] 结尾,且有不超过 h 个下标满足条件的最长好子序列的长度(0<=h<=k),二维数组dp初始值全为1 解题过程 状态转换方程: 1.nums[i]==nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h]+1) 2.nums[i]!=nums[j],dp[i,h]=Math.max(dp[i,h],dp[j,h-1

[Day 73] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

AI在健康管理中的應用實例 1. 引言 隨著健康管理需求的提升,人工智能(AI)在該領域的應用越來越普遍。AI可以幫助醫療機構提升效率、精準診斷疾病、個性化治療方案,以及進行健康數據分析,從而改善病患的健康狀況。這篇文章將探討AI如何應用於健康管理,並通過具體代碼示例說明其技術實現。 2. AI在健康管理中的主要應用場景 個性化健康建議:通過分析用戶的健康數據,如飲食、運動、睡眠等,AI可

Vue day-03

目录 Vue常用特性 一.响应更新 1. 1 v-for更新监测 1.2 v-for就地更新 1.3 什么是虚拟DOM 1.4 diff算法更新虚拟DOM 总结:key值的作用和注意点: 二.过滤器 2.1 vue过滤器-定义使用 2.2 vue过滤器-传参和多过滤器 三. 计算属性(computed) 3.1 计算属性-定义使用 3.2 计算属性-缓存 3.3 计算属

用Python实现时间序列模型实战——Day 14: 向量自回归模型 (VAR) 与向量误差修正模型 (VECM)

一、学习内容 1. 向量自回归模型 (VAR) 的基本概念与应用 向量自回归模型 (VAR) 是多元时间序列分析中的一种模型,用于捕捉多个变量之间的相互依赖关系。与单变量自回归模型不同,VAR 模型将多个时间序列作为向量输入,同时对这些变量进行回归分析。 VAR 模型的一般形式为: 其中: ​ 是时间  的变量向量。 是常数向量。​ 是每个时间滞后的回归系数矩阵。​ 是误差项向量,假

2024国赛论文拿奖快对照这几点及评阅要点,勿踩雷区!(国赛最后冲刺,提高获奖概率)

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ 2024“高教社杯”全国大学生数学建模竞赛已过去第三个夜晚,小伙伴们都累了没有,如果感到思维滞涩,别忘了稍作休息,放松一下自己,准备迎接国赛非常重要的收尾阶段——论文。 国赛这几天的努力最后都

Linux基础入门 --8 DAY

文件权限管理 设置文件的所有者chown         格式: chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --reference=RFILE FILE...         示例:  chown admin(所有者):admin(所属组)f1.txt chown admin(所有者).admin(

[Day 72] 區塊鏈與人工智能的聯動應用:理論、技術與實踐

區塊鏈在跨境支付中的應用 跨境支付一直是全球經濟中極具挑戰的領域。傳統的跨境支付系統通常需要數天時間來處理交易,涉及的中間機構多且手續費昂貴。然而,區塊鏈技術的出現為解決這些問題提供了一條嶄新的途徑。本文將探討區塊鏈在跨境支付中的應用,並通過代碼示例展示如何使用區塊鏈技術來優化跨境支付流程。 1. 區塊鏈在跨境支付中的優勢 區塊鏈技術具有去中心化、透明、高效和安全等特性,使其在跨境支付領域具