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

我和群众站一队 2024-11-08 21:16:02

冲刺日记七:

这个作业属于哪个课程https://bbs.csdn.net/forums/2401_CS_SE_FZU
这个作业要求在哪里https://bbs.csdn.net/topics/619397949
这个作业的目标CodeArt团队实战总结
其他参考文献CSDN,博客园

目录

  • 冲刺日记七:
  • 一、项目进展
  • 二、存在的问题/遇到的困难及接下来的安排
  • 三、站立式会议照片
  • 四、今日完成度相关照片
  • 五、心得体会

一、项目进展

222200315张俊腾
进展一:修改了RescueService.java,首先检查用户是否已接取过该求助,如果未接取,再根据求助类型进行额外的检查。

 // 首先检查用户是否已经接取过该求助
      boolean alreadyAcceptedByUser = rescueInfoRepository.existsByHelpIdAndUid(helpRequest.getId(), userId);
      if (alreadyAcceptedByUser) {
          return new Response<>(400, "您已接取过该求助", null);
      }
      
      // 根据求助类型进行额外的检查,如果是1对多就无需额外检查
      if (type == 1) { // 一对一
          // 检查该求助是否已被其他用户接取
          boolean alreadyAccepted = rescueInfoRepository.existsByHelpId(helpRequest.getId());
          if (alreadyAccepted) {
              return new Response<>(400, "该求助已被其他用户接取", null);
          }
      }

222200309孙阳
进展一:完成“新增用户奖牌功能”

public boolean Add_medal(Long user_id,Byte medal_id){

        User user = userRepository.findById(user_id).orElse(null);

        if (user != null) {
            // 创建并保存消息
            UserMedal medal = new UserMedal();
            medal.setUid(user_id);
            medal.setMedalType(medal_id);
            medal.setCreatedAt(LocalDateTime.now());
            medal.setUpdatedAt(LocalDateTime.now());
            medalRepository.save(medal);  // 将消息存入数据库,并返回保存后的实体

            return true;
        } else {
            return false;
        }
    }

222200304卢君豪
进展一:““获取附近求助信息”service的实现

        public Response<List<HelpRequestInfo>> getNearbyHelpRequest(String location) {
            if (!location.matches("^([0-8]?\\d(\\.\\d+)?|90(\\.0+)?),(1[0-7]?\\d(\\.\\d+)?|0?\\d{1,2}(\\.\\d+)?|180(\\.0+)?)$")) {
                return new Response<>(401, "位置无效", null);
            }
            List<HelpRequest> helpRequestList = helpRequestRepository.findByStatusAndAuditStatus(1, 1);
            List<HelpRequestInfo> helpRequestInfoList = new ArrayList<>();
            for (HelpRequest helpRequest : helpRequestList) {
                if (calculateDistance(location, helpRequest.getLocation()) < 1.0) {
                    helpRequestInfoList.add(new HelpRequestInfo(helpRequest.getId(), helpRequest.getUid(), helpRequest.getLocation(), helpRequest.getType(), helpRequest.getPhoneNumber(), helpRequest.getDetailedAddress(), helpRequest.getRoadCondition(), helpRequest.getWeatherCondition(), helpRequest.getUtilitiesInfo(), helpRequest.getAssistanceType(), helpRequest.getSuppliesNeeded(), helpRequest.getAssistanceType(), helpRequest.getIntroduction()));
                }
            }
            return new Response<>(200, "success", helpRequestInfoList);
        }

        private double calculateDistance(String coordA, String coordB) {
            double EARTH_RADIUS = 6371.0;

            String[] latLonA = coordA.split(",");
            String[] latLonB = coordB.split(",");

            double lat1 = Double.parseDouble(latLonA[0]);
            double lon1 = Double.parseDouble(latLonA[1]);
            double lat2 = Double.parseDouble(latLonB[0]);
            double lon2 = Double.parseDouble(latLonB[1]);

            double lat1Rad = Math.toRadians(lat1);
            double lon1Rad = Math.toRadians(lon1);
            double lat2Rad = Math.toRadians(lat2);
            double lon2Rad = Math.toRadians(lon2);

            double deltaLat = lat2Rad - lat1Rad;
            double deltaLon = lon2Rad - lon1Rad;

            double a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) + Math.cos(lat1Rad) * Math.cos(lat2Rad) * Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
            double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

            return EARTH_RADIUS * c;
        }

222200310李怡涵
进展一:实现了获取附近实况的接口,在获取的过程中删除过期实况

 public Response<List<UserLiveList>> getNearbyLive(String location){
        List<LiveInfo> getAllLiveInfo =  liveInfoRepository.findAll();
        List<UserLiveList> liveList = new ArrayList<>();
        for (LiveInfo item : getAllLiveInfo){
            //实况已经过期
            if (!item.getExpiryAt().isAfter(LocalDateTime.now())){
                liveInfoRepository.softDeleteLiveInfoById(item.getId());
            }
            else if (calculateDistance(location, item.getLocation()) <= 1){
                UserLiveList userLiveList = new UserLiveList(item.getId(),item.getUid(),item.getLocation(),item.getWeatherCondition(),
                item.getRoadCondition(),item.getUtilitiesInfo(),item.getLevel(),item.getIntroduction(),item.getExpiryAt());
                liveList.add(userLiveList);
            }
        }
        return new Response<>(200, "success", liveList);
    }

进展二:距离计算的代码

    private static final double EARTH_RADIUS = 6371;

    // 将度数转换为弧度
    private static double toRadians(double degree) {
        return degree * Math.PI / 180.0;
    }

    // 计算两个经纬度之间的距离
    private static double calculateDistance(String coord1, String coord2) {
        // 将坐标字符串按逗号分割
        String[] parts1 = coord1.split(",");
        String[] parts2 = coord2.split(",");

        // 获取经度和纬度(注意:东经和北纬默认是正数)
        double lat1 = Double.parseDouble(parts1[0]);
        double lon1 = Double.parseDouble(parts1[1]);
        double lat2 = Double.parseDouble(parts2[0]);
        double lon2 = Double.parseDouble(parts2[1]);

        // 将经纬度从度数转换为弧度
        lat1 = toRadians(lat1);
        lon1 = toRadians(lon1);
        lat2 = toRadians(lat2);
        lon2 = toRadians(lon2);

        // Haversine公式
        double dlat = lat2 - lat1;
        double dlon = lon2 - lon1;

        double a = Math.sin(dlat / 2) * Math.sin(dlat / 2)
                + Math.cos(lat1) * Math.cos(lat2)
                * Math.sin(dlon / 2) * Math.sin(dlon / 2);

        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        // 计算距离
        return EARTH_RADIUS * c;
    }

222200311李梓玄
进展一:完成上传实况的后端对接
进展二:加入上传实况和发布求助的加载动画
进展三:学习使用地图控件覆盖物

222200328夏振
进展一: - 新增管理员审核实况信息接口
222200401丁昌彪
进展一:实名信息从网络获取,设置增加更换手机号和个人信息
222200312杨年申
进展一:完成UserController.modifyUserInfo及其Request搭建

            @PutMapping("/modify_info")
            public ResultResponse<UserInfo> modifyUserInfo(
                    @ModelAttribute ModifyInfoRequest modifyInfoRequest,
                    @RequestHeader("Authorization") String token
            ) {
                return userService.ModifyUserInfo(modifyInfoRequest,token);
            }
               public class ModifyInfoRequest {
                private String phone_number;

                // Getter 和 Setter
                public String getPhone_number() {
                    return phone_number;
                }
                public void setPhone_number(String phone_number) {
                    this.phone_number = phone_number;
                }
            }

进展二:完善modifyUserInfo的Service

            public Response<UserDetail> ModifyUserInfo(ModifyInfoRequest modifyInfoRequest, 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);
            }

            long userId = Long.parseLong(claims.getSubject());

            //验证电话号码
            String phoneNumber = modifyInfoRequest.getPhone_number();
            if (phoneNumber.length() != 11) {
                return new Response<>(400, "无效的手机号", null);
            }

            //更新实名状态
            Optional<User> optionalUser = userRepository.findById(userId);
            if (optionalUser.isPresent()) {
                User user = optionalUser.get();
                user.setPhoneNumber(modifyInfoRequest.getPhone_number());
                userRepository.save(user);
                UserDetail userDetail = new UserDetail(
                        user.getId(),
                        user.getUsername(),
                        user.getRole(),
                        user.getPhoneNumber(),
                        user.getIsRealNameAuthentication()
                );
                return new Response<>(200, "success", userDetail);
            }
            else
            {
                return new Response<>(500, "用户不存在", null);
            }
        }            

222200230梁蕴潆
进展一:编写冲刺日记
进展二:上传了剩下部分捐赠部分插件的代码

    <div class="donation-form">
      <h3>进行捐赠</h3>
      <form @submit.prevent="submitDonation">
        <label for="donorName">捐赠者姓名:</label>
        <input type="text" id="donorName" v-model="donorName" required>

        <label for="donationDetails">捐赠内容:</label>
        <input type="text" id="donationDetails" v-model="donationDetails" required>

        <label for="contactInfo">联系方式:</label>
        <input type="text" id="contactInfo" v-model="contactInfo" required>

        <button type="submit">提交捐赠</button>
      </form>
    </div>
  </div>
</template>

<script>
export default {
  name: 'DonationComponent',
  data() {
    return {
      donations: [], // 存储捐赠信息的数组
      donorName: '', // 捐赠者姓名
      donationDetails: '', // 捐赠内容
      contactInfo: '', // 联系方式
    };
  },
  methods: {
    submitDonation() {
      // 创建一个新的捐赠对象
      const newDonation = {
        id: Date.now(), // 使用时间戳作为唯一ID
        donorName: this.donorName,
        donationDetails: this.donationDetails,
        donationDate: new Date().toISOString().split('T')[0], // 获取捐赠日期
        contactInfo: this.contactInfo,
      };
      // 将新的捐赠信息添加到数组中
      this.donations.push(newDonation);
      // 清空表单
      this.donorName = '';
      this.donationDetails = '';
      this.contactInfo = '';
    },
  },
};
</script>

<style scoped>
.donation-info-container {
  max-width: 800px;
  margin: 0 auto;
  padding: 20px;
  border: 1px solid #ccc;
  border-radius: 8px;
}

.donation-list {
  margin-bottom: 20px;
}

.donation-item {
  border-bottom: 1px solid #eee;
  padding: 10px 0;
}

.donation-form {
  background-color: #f9f9f9;
  padding: 20px;
  border-radius: 8px;
}

.donation-form h3 {
  margin-bottom: 15px;
}

.donation-form label {
  display: block;
  margin-bottom: 5px;
}

.donation-form input {
  width: 100%;
  padding: 8px;
  margin-bottom: 10px;
  border: 1px solid #ddd;
  border-radius: 4px;
}

.donation-form button {
  padding: 10px 20px;
  background-color: #007bff;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  transition: background-color 0.3s;
}

.donation-form button:hover {
  background-color: #0056b3;
}
</style>

二、存在的问题/遇到的困难及接下来的安排

成员存在的问题/遇到的困难接下来的安排
222200315张俊腾- 遇到的问题: - 在优化acceptHelpRequest方法时,如何有效地减少数据库查询次数.- 解答:- 通过调整检查顺序,首先检查用户是否已接取过该求助,避免不必要的类型检查和查询。继续完善RescueService.java中的业务逻辑,确保接取求助功能在各种场景下都能稳定运行。
222200309孙阳打算测试“新增用户奖牌功能,”开始编写“自动添加用户奖牌”的接口代码
222200304卢君豪问题、困难1,不知道怎么用经纬度计算距离 - 解答,经查询资料所得,可以用哈弗辛公式计算设计“完成/取消求助”的controller
222200310李怡涵遇到的困难- 如何通过两地的经纬度字符串来计算两地的距离- 解决- 分割字符串,并引入Haversine 公式进行计算修复已知的Bug,进行更完善的测试
222200311李梓玄对接获取实况信息和获取求助信息的接
222200328夏振暂不是很熟APIFOX,第一次没跑通,删了body就跑通了接下来还是把我剩下没完成的功能设计实现,并总结今天完成的内容
222200401丁昌彪完成更换手机号,完成求助记录的状态修改
222200312杨年申- 问题、困难1- 在修改用户信息时,可能需要处理多个字段的更新,确保逻辑清晰。- 解答- 在 Service 层中,将修改逻辑分解为多个步骤,每一步处理一个具体的字段更新,增强代码的可读性和维护性。- 问题、困难2 - 在修改用户信息过程中可能会发生异常,例如数据库保存失败。- 解答- 使用全局异常处理器捕获并处理可能出现的异常,返回友好的错误信息。安排实现一个接口deleteUserInfo
222200230梁蕴潆有些无法理解Vue如何追踪依赖和响应数据变化总结今日的工作,初步实现下一项任务。

三、站立式会议照片

img

四、今日完成度相关照片

成员相关图片
222200315张俊腾

img

222200309孙阳

img

222200304卢君豪

img

222200310李怡涵

img

222200311李梓玄

img

222200328夏振

img

222200401丁昌彪

img

img

222200312杨年申

img

222200230梁蕴潆

img

五、心得体会

成员心得体会
222200315张俊腾做项目时既要确保系统既满足业务需求,又要保持数据的完整性和一致性。
222200309孙阳代码编写要专心,否则只会永远debug
222200304卢君豪非常好的学习,使我“获取附近求助信息”
222200310李怡涵修复已知的Bug,进行更完善的测试
222200311李梓玄地图控件太太太难看懂了,感觉需要攻坚克难一下
222200328夏振感谢项目使我获得提升,谢谢
222200401丁昌彪开发速度太慢,得抓紧时间了。
222200312杨年申良好的代码结构:将修改逻辑拆分成多个步骤,不仅提升了代码的可读性,也便于将来进行维护和扩展。合理的代码结构可以提高团队协作效率。
222200230梁蕴潆参与项目让我获得提升,学到很多新知识。
...全文
129 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

113

社区成员

发帖
与我相关
我的任务
社区描述
202401_CS_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_TeacherL
  • 助教_林日臻
  • 防震水泥
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧