113
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | https://bbs.csdn.net/forums/2401_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | https://bbs.csdn.net/topics/619397949 |
| 这个作业的目标 | CodeArt团队实战总结 |
| 其他参考文献 | CSDN,博客园 |
222200315张俊腾
进展一:完成了将Token验证从Service层迁移到拦截器层的工作。
public Response<Void> acceptHelpRequest(String helpRequestID, Long userId) {
// 查找求助信息
Optional<HelpRequest> optionalHelp = helpRequestRepository.findById(Long.parseLong(helpRequestID));
if (!optionalHelp.isPresent()) {
return new Response<>(404, "求助信息不存在", null);
}
HelpRequest helpRequest = optionalHelp.get();
// 检查求助类型
Integer type = helpRequest.getType(); // 1: 一对一, 2: 一对多
if (type == 1) { // 一对一
boolean alreadyAccepted = rescueInfoRepository.existsByHelpId(helpRequest.getId());
if (alreadyAccepted) {
return new Response<>(400, "该求助已被其他用户接取", null);
}
}
// 创建新的RescueInfo
RescueInfo rescueInfo = new RescueInfo();
rescueInfo.setUid(userId);
rescueInfo.setHelpId(helpRequest.getId());
rescueInfo.setStatus(0); // 0=进行中
rescueInfoRepository.save(rescueInfo);
return new Response<>(200, "success", null);
}
222200309孙阳
进展一:完成“获取用户消息接口”,新增了 MessageController,dto_Message,MessageRespository,MessageService文件
@Service
public class MessageService {
@Autowired
private MessageRepository messageRepository;
@Autowired
private UserRepository userRepository;
public Response<List<MessageDetail>> GetUserMessage(Long uid, String token) {
// 检查令牌
Claims claims;
try {
claims = JwtUtil.extractClaims(token);
} catch (MalformedJwtException e) {
return new Response<>(400, "无效的令牌格式", null);
} catch (ExpiredJwtException e) {
return new Response<>(401, "令牌已过期", null);
} catch (IllegalArgumentException e) {
return new Response<>(400, "令牌不能为空", null);
} catch (JwtException e) {
return new Response<>(401, "无效的令牌", null);
} catch (Exception e) {
return new Response<>(500, "服务器内部错误", null);
}
Optional<User> optUser=userRepository.findById(uid);
if(optUser.isEmpty()){
return new Response<>(401, "用户不存在", null);
}
else {
return new Response<>(200,"success", messageRepository.findByToUidOrderByCreatedAtDesc(uid).stream()
.map( message-> {
return new MessageDetail(
message.getId(),
message.getToUid(),
message.getTitle(),
message.getContent(),
message.getCreatedAt(),
message.getUpdatedAt(),
message.getDeletedAt()
);
})
.collect(Collectors.toList()));
}
}
}
222200304卢君豪
进展一:“发起求助”service的实现
public Response<Null> initiateHelpRequest(InitiateHelpRequest initiateHelpRequest, Long uid) {
if (!userRepository.existsById(uid)) {
return new Response<>(401, "用户不存在", null);
}
if (initiateHelpRequest.getLocation().isEmpty()) {
return new Response<>(401, "位置不能为空", null);
}
if (initiateHelpRequest.getType() != 1 && initiateHelpRequest.getType() != 2) {
return new Response<>(401, "类型无效", null);
}
if (initiateHelpRequest.getPhoneNumber().isEmpty()) {
return new Response<>(401, "联系方式不能为空", null);
}
if (initiateHelpRequest.getAssistanceType() < 1 || initiateHelpRequest.getAssistanceType() > 4) {
return new Response<>(401, "援助类型无效", null);
}
if (initiateHelpRequest.getIntroduction().isEmpty()) {
return new Response<>(401, "描述不能为空", null);
}
initiateHelpRequest.setUid(uid);
HelpRequest helpRequest = convertHelpRequest(initiateHelpRequest);
helpRequestRepository.save(helpRequest);
return new Response<>(200, "success", null);
}
private HelpRequest convertHelpRequest(InitiateHelpRequest initiateHelpRequest) {
HelpRequest helpRequest = new HelpRequest();
helpRequest.setUid(initiateHelpRequest.getUid());
helpRequest.setLocation(initiateHelpRequest.getLocation());
helpRequest.setType(initiateHelpRequest.getType());
helpRequest.setPhoneNumber(initiateHelpRequest.getPhoneNumber());
helpRequest.setDetailedAddress(initiateHelpRequest.getDetailedAddress());
helpRequest.setRoadCondition(initiateHelpRequest.getRoadCondition());
helpRequest.setWeatherCondition(initiateHelpRequest.getWeatherCondition());
helpRequest.setUtilitiesInfo(initiateHelpRequest.getUtilitiesInfo());
helpRequest.setAssistanceType(initiateHelpRequest.getAssistanceType());
helpRequest.setSuppliesNeeded(initiateHelpRequest.getSuppliesNeeded());
helpRequest.setIntroduction(initiateHelpRequest.getIntroduction());
return helpRequest;
}
进展二:token的修改
@PostMapping
public Response<Null> initiateHelpRequest(@ModelAttribute InitiateHelpRequest helpRequest) {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()) {
return new Response<>(403, "未认证的用户没有权限执行此操作", null);
}
Object principal = authentication.getPrincipal();
if (principal instanceof CustomUserDetails customUserDetails) {
Long uid = customUserDetails.getId();
return helpRequestService.initiateHelpRequest(helpRequest, uid);
}
return new Response<>(403, "当前用户没有权限执行此操作", null);
}
222200310李怡涵
进展一:token的更新
// 从SecurityContextHolder获取当前认证信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
// 检查当前用户是否已认证
if (authentication == null || !authentication.isAuthenticated()) {
return new Response<>(403, "未认证的用户没有权限执行此操作", null);
}
// 获取当前用户的UserDetails
Object principal = authentication.getPrincipal();
CustomUserDetails customUserDetails = (CustomUserDetails) principal;
进展二:entity新表的建立
package com.bafang.entity.entity_live;
import jakarta.persistence.*;
import org.hibernate.annotations.SQLRestriction;
import java.time.LocalDateTime;
@Entity
@Table(name = "user_live_info_vote")
@SQLRestriction("deleted_at IS NULL")
public class UserLiveInfoVote {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "uid", nullable = false)
private Long uid;
@Column(name = "live_info_id", nullable = false)
private Long liveInfoId;
@Column(name = "vote_type", nullable = false)
private Integer voteType;
@Column(name = "created_at")
private LocalDateTime createdAt;
@Column(name = "updated_at")
private LocalDateTime updatedAt;
@Column(name = "deleted_at")
private LocalDateTime deletedAt;
@PrePersist
protected void onCreate() {
setCreatedAt(LocalDateTime.now());
setUpdatedAt(LocalDateTime.now());
}
@PreUpdate
protected void onUpdate() {
setUpdatedAt(LocalDateTime.now());
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getUid() {
return uid;
}
public void setUid(Long uid) {
this.uid = uid;
}
public Long getLiveInfoId() {
return liveInfoId;
}
public void setLiveInfoId(Long liveInfoId) {
this.liveInfoId = liveInfoId;
}
public Integer getVoteType() {
return voteType;
}
public void setVoteType(Integer voteType) {
this.voteType = voteType;
}
public LocalDateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}
public LocalDateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
public LocalDateTime getDeletedAt() {
return deletedAt;
}
public void setDeletedAt(LocalDateTime deletedAt) {
this.deletedAt = deletedAt;
}
}
222200311李梓玄
进展一:修复当拖拽地图时错误的重新定位、 优化上传实况界面

进展二:实现发起求助界面

222200328夏振
进展一:修复拦截器未验证管理员权限bug
222200401丁昌彪
进展一:完成实名认证和获取求助记录功能
222200312杨年申
进展一:完成UserController.realNameAuthentication及其Request搭建
@GetMapping
public ResultResponse<UserDetail> getUserInfo(
@RequestParam("uid") Long uid,
@RequestHeader("Authorization") String token
) {
return userService.GetUserInfo(uid, token);
}
public class RealNameAuthenticationRequest {
private String id_number;
private String real_Name;
// Getter 和 Setter
public String getId_number() {
return id_number;
}
public void setId_number(String Id_number) {
this.id_number = Id_number;
}
public String getReal_Name() {
return real_Name;
}
public void setReal_Name(String Real_Name) {
this.real_Name = Real_Name;
}
}
进展二:完善realNameAuthentication的Service和Repository
public Response Authenticate(RealNameAuthenticationRequest authenticationRequest, String token) {
// 检查令牌是否过期
if (JwtUtil.isTokenExpired(token)) {
return new Response(401, "令牌已过期");
}
Claims claims;
try {
claims = JwtUtil.extractClaims(token);
} catch (Exception e) {
return new Response(401, "无效的令牌");
}
long userId;
try {
userId = Long.parseLong(claims.getSubject()); // 提取用户ID
} catch (NumberFormatException e) {
return new Response(400, "无效的userID");
}
// 验证身份证号
String idNumber = authenticationRequest.getId_number();
if (!isValidIdCard(idNumber)) {
return new Response(400, "无效的身份证号");
}
//更新用户实名
Optional<User> optionalUser = userRepository.findById(userId);
if (optionalUser.isPresent()) {
User User = optionalUser.get();
User.setRealName(authenticationRequest.getReal_Name());
User.setIdNumber(authenticationRequest.getId_number());
User.setIsRealNameAuthentication(true);
userRepository.save(User);
return new Response(200, "success");
}
else
{
return new Response(500, "更新用户信息失败");
}
}
@Query("SELECT u.role FROM User u WHERE u.id = :userId")
Integer findRoleById(Long userId);
222200230梁蕴潆
进展一:编写冲刺日记
进展二:更新了主页部分组件的代码
<template>
<div class="home-container">
<!-- 导航组件 -->
<Navigation />
<!-- 主内容区域 -->
<main>
<section class="welcome-area">
<h1>欢迎来到灾难互助平台</h1>
<p>我们在这里帮助受灾地区的人们重建家园。</p>
</section>
<section class="features">
<div class="feature-item">
<h2>求助信息</h2>
<p>查看最新的求助信息,并提供援助。</p>
<router-link to="/help" class="btn">查看更多</router-link>
</div>
<div class="feature-item">
<h2>捐赠信息</h2>
<p>了解捐赠详情,并参与捐赠。</p>
<router-link to="/donate" class="btn">查看更多</router-link>
</div>
<div class="feature-item">
<h2>志愿者注册</h2>
<p>加入我们的志愿者团队,为受灾地区提供帮助。</p>
<router-link to="/volunteer" class="btn">注册</router-link>
</div>
</section>
</main>
| 成员 | 存在的问题/遇到的困难 | 接下来的安排 |
|---|---|---|
| 222200315张俊腾 | 关于拦截器的概念和token的验证逻辑 | 完成接口的bug修复。 |
| 222200309孙阳 | 用户消息如何在后台自动更新 | 打算测试“获取用户消息接口,”开始编写“更新用户消息”的接口代码 |
| 222200304卢君豪 | 存在的问题/遇到的困难 - 问题、困难1,更新了token的使用,但还不是很懂 - 解答,先照着别人的代码写再说 | 设计“获取附近求助信息”的dto、controller |
| 222200310李怡涵 | 无 | 修复已知Bug,完成用户点赞/点踩接口 |
| 222200311李梓玄 | 无 | 继续上传实况信息、发起求助接口对接 - 重新审查 后端代码,做一个小总结 |
| 222200328夏振 | 搞不懂啊,现学jwt权限验证 | 接下来还是把我剩下没完成的功能设计实现,并总结今天完成的内容 |
| 222200401丁昌彪 | 问题:后端的json字段和文档的不同 解决办法:自己查看json字段信息,并提醒后端的伙伴更新文档 | 完成我的实况功能 |
| 222200312杨年申 | 问题、困难1- - 用户提交的实名认证信息(如姓名、身份证号码等)需要进行验证,确保格式和内容的正确性。- 解答 请求参数进行验证,确保各项信息符合预期格式,比如使用正则表达式验证身份证号码的格式。- 问题、困难2 - 在进行实名认证时,确保用户已登录并验证其身份。- 解答 - 在 Service 层中,添加权限检查逻辑,验证请求者是否有权限访问目标用户的信息。例如,可以通过 JWT 令牌来验证用户身份。 | 安排实现一个接口getUserAuthentication |
| 222200230梁蕴潆 | 可能需要考虑实际的设计和需求进一步调整样式和内容。 | 总结今日的工作,初步实现下一项任务。 |

| 成员 | 相关图片 |
|---|---|
| 222200315张俊腾 |
|
| 222200309孙阳 |
|
| 222200304卢君豪 |
|
| 222200310李怡涵 |
|
| 222200311李梓玄 |
|
| 222200328夏振 |
|
| 222200401丁昌彪 |
|
| 222200312杨年申 |
|
| 222200230梁蕴潆 |
|
| 成员 | 心得体会 |
|---|---|
| 222200315张俊腾 | - 在开发过程中,正确设置 Content-Type 对于API的正常运行至关重要,避免了许多不必要的错误。- 要检查url有没有拼写错误 |
| 222200309孙阳 | 代码编写要专心,否则只会永远debug |
| 222200304卢君豪 | 非常好的学习,使我对新token一知半解 |
| 222200310李怡涵 | 无 |
| 222200311李梓玄 | 还是写静态界面轻松 |
| 222200328夏振 | 感谢项目使我获得提升,谢谢 |
| 222200401丁昌彪 | 勤能补拙。编程还是得多实战。 |
| 222200312杨年申 | 身份验证的必要性:确保用户身份合法性不仅能保护用户隐私,也能防止恶意操作。使用安全的身份验证机制(如 JWT)来确认用户身份至关重要。 |
| 222200230梁蕴潆 | 参与项目让我获得提升,学到很多新知识。 |