我和群众站一队-alpha冲刺第5日

「已注销」 「已注销」 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

冲刺日记五:

这个作业属于哪个课程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李梓玄
进展一:修复当拖拽地图时错误的重新定位、 优化上传实况界面

img

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

img

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梁蕴潆可能需要考虑实际的设计和需求进一步调整样式和内容。总结今日的工作,初步实现下一项任务。

三、站立式会议照片

img

四、今日完成度相关照片

成员相关图片
222200315张俊腾

在这里插入图片描述

222200309孙阳

img

222200304卢君豪

img

222200310李怡涵

img

222200311李梓玄

img

222200328夏振

img

222200401丁昌彪

img

222200312杨年申

img

222200230梁蕴潆

img

五、心得体会

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

相关推荐

【工业自动化】欧姆龙PLC产品线与编程软件应用:从选型架构到调试排错的全流程技术指南

内容概要:本文《欧姆龙PLC与编程软件完全手册》系统介绍了欧姆龙PLC的产品架构、软件体系、通信协议、选型策略及编程调试技巧。重点区分了两大技术平台:基于CX-Programmer的传统C系列(CP/CJ/CS)与基于Sysmac Studio的新一代Sysmac平台(NJ/NX/NY),强调二者在软件生态、寻址方式和通信架构上的根本差异。手册详细对比了各系列PLC的性能参数,并提供与西门子产品的功能对标,帮助用户快速定位。深入讲解了编程操作中的关键问题,如任务结构设计、间接寻址、FB封装陷阱、在线调试五件套等,特别指出“FB使能关闭时状态不初始化”等易出错点。最后汇总了选型路径与现场避坑清单,极具实战指导价值。; 适合人群:具备一定工业自动化基础,从事PLC编程、设备调试、系统集成的研发工程师和技术人员,尤其是从西门子平台转向欧姆龙或参与新项目选型的1-5年经验从业者。; 使用场景及目标:① 新项目选型时判断应选用C系列还是Sysmac平台;② 编程调试过程中掌握高效操作技巧与常见问题排查方法;③ 实现跨平台迁移、系统升级或接手他人项目时规避架构与逻辑陷阱;④ 提升对欧姆龙PLC任务机制、间接寻址、FB设计等高级功能的理解与应用能力。; 阅读建议:本手册理论结合实践,建议按“先架构后操作”的顺序阅读,重点章节需结合实际工程反复演练。特别是FB设计规范、任务切换处理、强制操作收尾流程等内容,应在仿真环境中验证后再应用于现场。注意版本匹配问题,操作前确认所用软件与控制器固件版本兼容。

莫问西东LJ

CISP-CSE注册云安全工程师备考资源包

CISP-CSE注册云安全工程师备考资源包

嫑甭歪孬

科技中介服务机构如何通过AI技术降低技术评估与匹配服务的操作门槛?.docx

科技中介服务机构如何通过AI技术降低技术评估与匹配服务的操作门槛?

BIZKEEN

国央企创新负责人如何借助平台实现创新资源的高效配置与项目落地?.docx

国央企创新负责人如何借助平台实现创新资源的高效配置与项目落地?

BIZKEEN

高校技术转移办公室人员如何高效筛选并推介科技成果?.docx

高校技术转移办公室人员如何高效筛选并推介科技成果?

BIZKEEN
评论
收藏 已收藏
分享
返回顶部