大学导师力荐:SpringBoot+Android校园互助平台成2026年最优毕设项目

53 阅读5分钟

一、个人简介

  • 💖💖作者:计算机编程果茶熊
  • 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
  • 💛💛想说的话:感谢大家的关注与支持!
  • 💜💜
  • 网站实战项目
  • 安卓/小程序实战项目
  • 大数据实战项目
  • 计算机毕业设计选题
  • 💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

  • 后端开发语言:Java+Python(两个版本都支持)
  • 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
  • 前端:uni-app+微信小程序+安卓
  • 数据库:MySQL
  • 系统架构:C/S + B/S
  • 开发工具:IDEA(Java的)或者PyCharm(Python的)+微信小程序开发工具

SpringBoot+Android校园互助平台是一款专为高校学生设计的综合性服务应用系统,采用SpringBoot作为后端核心框架,结合Android原生开发、uni-app跨平台技术以及微信小程序,构建了完整的C/S+B/S混合架构。该系统以MySQL数据库为数据存储基础,通过Java后端服务为用户提供全方位的校园互助服务。平台核心功能涵盖跑腿服务、物品代购、信息发布、订单管理等多个方面,用户可以通过系统发布跑腿需求、寻找接单人员、管理配送流程以及处理收货确认等操作。系统还集成了完善的论坛交流模块,支持分类讨论、举报管理等社区功能,为校园师生提供了便捷的信息交流平台。平台采用统一的用户管理体系,支持充值、订单跟踪、个人信息管理等个性化服务,通过物品分类管理和智能推荐算法,提高了服务匹配效率。整个系统界面友好、操作简便,充分考虑了大学生群体的使用习惯和实际需求,为构建和谐便民的校园生活环境提供了有力的技术支撑。

三、视频解说

大学导师力荐:SpringBoot+Android校园互助平台成2026年最优毕设项目

四、部分功能展示

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

五、部分代码展示


import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.stereotype.Service;
import org.springframework.beans.factory.annotation.Autowired;
import javax.annotation.PostConstruct;
@Service
public class ErrandTaskService {
    private SparkSession spark;
    @Autowired
    private ErrandTaskMapper errandTaskMapper;
    @PostConstruct
    public void initSpark() {
        spark = SparkSession.builder()
            .appName("CampusErrandAnalysis")
            .master("local[*]")
            .getOrCreate();
    }
    public Result publishErrandTask(ErrandTaskDTO taskDTO) {
        ErrandTask task = new ErrandTask();
        task.setUserId(taskDTO.getUserId());
        task.setTaskTitle(taskDTO.getTaskTitle());
        task.setTaskDescription(taskDTO.getTaskDescription());
        task.setTaskType(taskDTO.getTaskType());
        task.setPickupLocation(taskDTO.getPickupLocation());
        task.setDeliveryLocation(taskDTO.getDeliveryLocation());
        task.setTaskFee(taskDTO.getTaskFee());
        task.setExpectedTime(taskDTO.getExpectedTime());
        task.setTaskStatus("PENDING");
        task.setCreateTime(new Date());
        task.setUpdateTime(new Date());
        if (taskDTO.getTaskFee() == null || taskDTO.getTaskFee().compareTo(BigDecimal.ZERO) <= 0) {
            return Result.error("跑腿费用必须大于0");
        }
        if (StringUtils.isEmpty(taskDTO.getPickupLocation()) || StringUtils.isEmpty(taskDTO.getDeliveryLocation())) {
            return Result.error("取货地址和送达地址不能为空");
        }
        int result = errandTaskMapper.insertErrandTask(task);
        if (result > 0) {
            Dataset<Row> taskData = spark.read()
                .format("jdbc")
                .option("url", "jdbc:mysql://localhost:3306/campus_help")
                .option("dbtable", "errand_task")
                .option("user", "root")
                .option("password", "password")
                .load();
            taskData.filter("task_type = '" + taskDTO.getTaskType() + "'")
                .groupBy("pickup_location")
                .count()
                .show();
            return Result.success("跑腿任务发布成功", task);
        }
        return Result.error("跑腿任务发布失败");
    }
    public Result acceptErrandTask(Long taskId, Long accepterId) {
        ErrandTask task = errandTaskMapper.selectByTaskId(taskId);
        if (task == null) {
            return Result.error("跑腿任务不存在");
        }
        if (!"PENDING".equals(task.getTaskStatus())) {
            return Result.error("该任务已被接单或已完成");
        }
        if (task.getUserId().equals(accepterId)) {
            return Result.error("不能接受自己发布的任务");
        }
        User accepter = userMapper.selectByUserId(accepterId);
        if (accepter == null || accepter.getAccountStatus() != 1) {
            return Result.error("接单人账户状态异常");
        }
        task.setAccepterId(accepterId);
        task.setTaskStatus("ACCEPTED");
        task.setAcceptTime(new Date());
        task.setUpdateTime(new Date());
        int updateResult = errandTaskMapper.updateErrandTask(task);
        if (updateResult > 0) {
            AcceptRecord record = new AcceptRecord();
            record.setTaskId(taskId);
            record.setAccepterId(accepterId);
            record.setAcceptTime(new Date());
            acceptRecordMapper.insertAcceptRecord(record);
            return Result.success("接单成功");
        }
        return Result.error("接单失败");
    }
}
@Service
public class OrderManagementService {
    private SparkSession spark;
    @Autowired
    private OrderMapper orderMapper;
    @Autowired
    private PaymentService paymentService;
    @PostConstruct
    public void initSpark() {
        spark = SparkSession.builder()
            .appName("OrderDataAnalysis")
            .master("local[*]")
            .getOrCreate();
    }
    public Result createOrder(OrderCreateDTO orderDTO) {
        Order order = new Order();
        order.setUserId(orderDTO.getUserId());
        order.setTaskId(orderDTO.getTaskId());
        order.setOrderType(orderDTO.getOrderType());
        order.setTotalAmount(orderDTO.getTotalAmount());
        order.setOrderStatus("CREATED");
        order.setCreateTime(new Date());
        order.setUpdateTime(new Date());
        String orderNo = generateOrderNumber();
        order.setOrderNo(orderNo);
        if (orderDTO.getTotalAmount() == null || orderDTO.getTotalAmount().compareTo(BigDecimal.ZERO) <= 0) {
            return Result.error("订单金额必须大于0");
        }
        ErrandTask task = errandTaskMapper.selectByTaskId(orderDTO.getTaskId());
        if (task == null || !"ACCEPTED".equals(task.getTaskStatus())) {
            return Result.error("关联的跑腿任务状态异常");
        }
        User user = userMapper.selectByUserId(orderDTO.getUserId());
        if (user == null || user.getBalance().compareTo(orderDTO.getTotalAmount()) < 0) {
            return Result.error("用户余额不足");
        }
        int insertResult = orderMapper.insertOrder(order);
        if (insertResult > 0) {
            Dataset<Row> orderData = spark.read()
                .format("jdbc")
                .option("url", "jdbc:mysql://localhost:3306/campus_help")
                .option("dbtable", "order_info")
                .option("user", "root")
                .option("password", "password")
                .load();
            orderData.filter("order_status = 'CREATED'")
                .groupBy("order_type")
                .agg(functions.sum("total_amount").alias("total_revenue"))
                .show();
            return Result.success("订单创建成功", order);
        }
        return Result.error("订单创建失败");
    }
    public Result processPayment(Long orderId, String paymentMethod) {
        Order order = orderMapper.selectByOrderId(orderId);
        if (order == null) {
            return Result.error("订单不存在");
        }
        if (!"CREATED".equals(order.getOrderStatus())) {
            return Result.error("订单状态异常,无法支付");
        }
        User user = userMapper.selectByUserId(order.getUserId());
        if (user.getBalance().compareTo(order.getTotalAmount()) < 0) {
            return Result.error("余额不足,请先充值");
        }
        PaymentRecord payment = new PaymentRecord();
        payment.setOrderId(orderId);
        payment.setUserId(order.getUserId());
        payment.setPaymentAmount(order.getTotalAmount());
        payment.setPaymentMethod(paymentMethod);
        payment.setPaymentStatus("SUCCESS");
        payment.setPaymentTime(new Date());
        user.setBalance(user.getBalance().subtract(order.getTotalAmount()));
        userMapper.updateUser(user);
        order.setOrderStatus("PAID");
        order.setPaymentTime(new Date());
        order.setUpdateTime(new Date());
        orderMapper.updateOrder(order);
        paymentRecordMapper.insertPaymentRecord(payment);
        ErrandTask task = errandTaskMapper.selectByTaskId(order.getTaskId());
        task.setTaskStatus("IN_PROGRESS");
        task.setUpdateTime(new Date());
        errandTaskMapper.updateErrandTask(task);
        return Result.success("支付成功");
    }
    public Result updateOrderStatus(Long orderId, String newStatus) {
        Order order = orderMapper.selectByOrderId(orderId);
        if (order == null) {
            return Result.error("订单不存在");
        }
        String currentStatus = order.getOrderStatus();
        if (!isValidStatusTransition(currentStatus, newStatus)) {
            return Result.error("订单状态流转异常");
        }
        order.setOrderStatus(newStatus);
        order.setUpdateTime(new Date());
        if ("COMPLETED".equals(newStatus)) {
            order.setCompleteTime(new Date());
            ErrandTask task = errandTaskMapper.selectByTaskId(order.getTaskId());
            task.setTaskStatus("COMPLETED");
            task.setCompleteTime(new Date());
            errandTaskMapper.updateErrandTask(task);
            User accepter = userMapper.selectByUserId(task.getAccepterId());
            BigDecimal commission = order.getTotalAmount().multiply(new BigDecimal("0.95"));
            accepter.setBalance(accepter.getBalance().add(commission));
            userMapper.updateUser(accepter);
        }
        int updateResult = orderMapper.updateOrder(order);
        return updateResult > 0 ? Result.success("订单状态更新成功") : Result.error("订单状态更新失败");
    }
}
@Service
public class UserManagementService {
    private SparkSession spark;
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private TokenService tokenService;
    @PostConstruct
    public void initSpark() {
        spark = SparkSession.builder()
            .appName("UserBehaviorAnalysis")
            .master("local[*]")
            .getOrCreate();
    }
    public Result registerUser(UserRegisterDTO registerDTO) {
        if (StringUtils.isEmpty(registerDTO.getUsername()) || registerDTO.getUsername().length() < 3) {
            return Result.error("用户名长度不能少于3位");
        }
        if (StringUtils.isEmpty(registerDTO.getPassword()) || registerDTO.getPassword().length() < 6) {
            return Result.error("密码长度不能少于6位");
        }
        if (!isValidEmail(registerDTO.getEmail())) {
            return Result.error("邮箱格式不正确");
        }
        if (!isValidPhone(registerDTO.getPhone())) {
            return Result.error("手机号格式不正确");
        }
        User existUser = userMapper.selectByUsername(registerDTO.getUsername());
        if (existUser != null) {
            return Result.error("用户名已存在");
        }
        existUser = userMapper.selectByEmail(registerDTO.getEmail());
        if (existUser != null) {
            return Result.error("邮箱已被注册");
        }
        existUser = userMapper.selectByPhone(registerDTO.getPhone());
        if (existUser != null) {
            return Result.error("手机号已被注册");
        }
        User newUser = new User();
        newUser.setUsername(registerDTO.getUsername());
        newUser.setPassword(passwordEncoder.encode(registerDTO.getPassword()));
        newUser.setEmail(registerDTO.getEmail());
        newUser.setPhone(registerDTO.getPhone());
        newUser.setNickname(registerDTO.getNickname());
        newUser.setGender(registerDTO.getGender());
        newUser.setAccountStatus(1);
        newUser.setBalance(new BigDecimal("0.00"));
        newUser.setCreateTime(new Date());
        newUser.setUpdateTime(new Date());
        int insertResult = userMapper.insertUser(newUser);
        if (insertResult > 0) {
            Dataset<Row> userData = spark.read()
                .format("jdbc")
                .option("url", "jdbc:mysql://localhost:3306/campus_help")
                .option("dbtable", "user_info")
                .option("user", "root")
                .option("password", "password")
                .load();
            userData.groupBy("gender")
                .count()
                .show();
            return Result.success("注册成功", newUser);
        }
        return Result.error("注册失败");
    }
    public Result loginUser(UserLoginDTO loginDTO) {
        if (StringUtils.isEmpty(loginDTO.getUsername()) || StringUtils.isEmpty(loginDTO.getPassword())) {
            return Result.error("用户名和密码不能为空");
        }
        User user = userMapper.selectByUsername(loginDTO.getUsername());
        if (user == null) {
            user = userMapper.selectByEmail(loginDTO.getUsername());
        }
        if (user == null) {
            user = userMapper.selectByPhone(loginDTO.getUsername());
        }
        if (user == null) {
            return Result.error("用户不存在");
        }
        if (user.getAccountStatus() != 1) {
            return Result.error("账户已被禁用");
        }
        if (!passwordEncoder.matches(loginDTO.getPassword(), user.getPassword())) {
            return Result.error("密码错误");
        }
        String token = tokenService.generateToken(user.getUserId());
        user.setLastLoginTime(new Date());
        user.setLoginCount(user.getLoginCount() + 1);
        userMapper.updateUser(user);
        LoginRecord loginRecord = new LoginRecord();
        loginRecord.setUserId(user.getUserId());
        loginRecord.setLoginTime(new Date());
        loginRecord.setLoginIp(getClientIP());
        loginRecordMapper.insertLoginRecord(loginRecord);
        Map<String, Object> result = new HashMap<>();
        result.put("token", token);
        result.put("userInfo", user);
        return Result.success("登录成功", result);
    }
    public Result updateUserProfile(Long userId, UserUpdateDTO updateDTO) {
        User user = userMapper.selectByUserId(userId);
        if (user == null) {
            return Result.error("用户不存在");
        }
        if (StringUtils.isNotEmpty(updateDTO.getNickname())) {
            user.setNickname(updateDTO.getNickname());
        }
        if (StringUtils.isNotEmpty(updateDTO.getAvatar())) {
            user.setAvatar(updateDTO.getAvatar());
        }
        if (updateDTO.getGender() != null) {
            user.setGender(updateDTO.getGender());
        }
        if (StringUtils.isNotEmpty(updateDTO.getSchool())) {
            user.setSchool(updateDTO.getSchool());
        }
        if (StringUtils.isNotEmpty(updateDTO.getMajor())) {
            user.setMajor(updateDTO.getMajor());
        }
        if (StringUtils.isNotEmpty(updateDTO.getStudentId())) {
            User existUser = userMapper.selectByStudentId(updateDTO.getStudentId());
            if (existUser != null && !existUser.getUserId().equals(userId)) {
                return Result.error("学号已被其他用户绑定");
            }
            user.setStudentId(updateDTO.getStudentId());
        }
        user.setUpdateTime(new Date());
        int updateResult = userMapper.updateUser(user);
        return updateResult > 0 ? Result.success("用户信息更新成功", user) : Result.error("用户信息更新失败");
    }
}

六、部分文档展示

在这里插入图片描述

七、END

💕💕文末获取源码联系计算机编程果茶熊