一个月开发校友信息管理系统!uni-app+MySQL让毕设逆袭全场!

52 阅读6分钟

一、个人简介

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

二、系统介绍

  • 后端开发语言:Java+Python(两个版本都支持)
  • 后端框架:Spring Boot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
  • 前端:uni-app+微信小程序+安卓
  • 数据库:MySQL
  • 系统架构:C/S + B/S
  • 开发工具:IDEA(Java的)或者PyCharm(Python的)+微信小程序开发工具
  • 校友信息管理系统是一款基于Java/Python双版本支持的综合性管理平台,采用Spring Boot(Spring+SpringMVC+Mybatis)或Django框架作为后端支撑,结合uni-app、微信小程序及安卓作为前端展示,以MySQL作为数据库存储,构建了完整的C/S与B/S混合架构。系统功能全面,包括系统首页、账号管理、大学生管理、校友会管理与加入、校友名录管理、活动信息发布与报名、校友捐赠管理、见面会组团及加入、留言反馈处理以及交流论坛等核心模块,为高校提供了一站式校友关系维护解决方案。通过IDEA或PyCharm作为开发工具,配合微信小程序开发环境,实现了多端适配与数据同步,使校友资源得到有效整合与利用。系统特别注重用户体验与数据安全,为校友之间的互动交流、资源共享和信息获取提供了便捷渠道,同时为学校管理者提供了直观的校友数据分析与管理功能,有效促进了校友与母校之间的紧密联系,为高校校友工作的信息化、规范化和现代化提供了有力支持。

三、基于微信小程序的校友信息管理系统-视频解说

一个月开发校友信息管理系统!uni-app+MySQL让毕设逆袭全场!

四、基于微信小程序的校友信息管理系统-功能展示

首页 发布校友会 个人中心 公告信息 好友申请 申请加入校友会 提交申请 校友物资捐赠 与其他用户对话 与其他用户对话 物资捐赠管理

五、基于微信小程序的校友信息管理系统-代码展示

// 核心功能1:校友名录管理 - 后端处理函数
@Service
public class AlumniDirectoryServiceImpl implements AlumniDirectoryService {
    
    @Autowired
    private AlumniMapper alumniMapper;
    
    @Autowired
    private DepartmentMapper departmentMapper;
    
    @Override
    public PageResult<AlumniDTO> searchAlumni(AlumniSearchRequest request) {
        // 构建查询条件
        AlumniExample example = new AlumniExample();
        AlumniExample.Criteria criteria = example.createCriteria();
        
        // 添加过滤条件
        if (StringUtils.isNotBlank(request.getName())) {
            criteria.andNameLike("%" + request.getName() + "%");
        }
        
        if (request.getGraduationYear() != null) {
            criteria.andGraduationYearEqualTo(request.getGraduationYear());
        }
        
        if (request.getDepartmentId() != null) {
            criteria.andDepartmentIdEqualTo(request.getDepartmentId());
        }
        
        // 处理行业筛选
        if (StringUtils.isNotBlank(request.getIndustry())) {
            criteria.andIndustryEqualTo(request.getIndustry());
        }
        
        // 处理地区筛选
        if (StringUtils.isNotBlank(request.getLocation())) {
            criteria.andLocationLike("%" + request.getLocation() + "%");
        }
        
        // 设置排序规则
        if (StringUtils.isNotBlank(request.getSortField())) {
            example.setOrderByClause(request.getSortField() + " " + 
                    (request.isAsc() ? "ASC" : "DESC"));
        } else {
            example.setOrderByClause("graduation_year DESC");
        }
        
        // 分页查询
        PageHelper.startPage(request.getPageNum(), request.getPageSize());
        List<Alumni> alumniList = alumniMapper.selectByExample(example);
        
        // 转换为DTO对象
        List<AlumniDTO> alumniDTOList = alumniList.stream().map(alumni -> {
            AlumniDTO dto = new AlumniDTO();
            BeanUtils.copyProperties(alumni, dto);
            
            // 获取院系信息
            Department department = departmentMapper.selectByPrimaryKey(alumni.getDepartmentId());
            if (department != null) {
                dto.setDepartmentName(department.getName());
            }
            
            return dto;
        }).collect(Collectors.toList());
        
        // 获取总记录数
        PageInfo<Alumni> pageInfo = new PageInfo<>(alumniList);
        
        return new PageResult<>(alumniDTOList, pageInfo.getTotal(), 
                request.getPageNum(), request.getPageSize());
    }
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void importAlumniData(MultipartFile file) throws IOException {
        List<AlumniImportDTO> importList = ExcelUtil.parseExcel(file.getInputStream(), 
                AlumniImportDTO.class);
        
        for (AlumniImportDTO importDTO : importList) {
            // 数据验证
            if (StringUtils.isBlank(importDTO.getName()) || 
                    importDTO.getGraduationYear() == null) {
                continue;
            }
            
            // 查找或创建院系
            Integer departmentId = null;
            if (StringUtils.isNotBlank(importDTO.getDepartmentName())) {
                Department department = departmentMapper.selectByName(importDTO.getDepartmentName());
                if (department == null) {
                    department = new Department();
                    department.setName(importDTO.getDepartmentName());
                    departmentMapper.insert(department);
                }
                departmentId = department.getId();
            }
            
            // 检查是否已存在该校友
            AlumniExample example = new AlumniExample();
            example.createCriteria()
                   .andNameEqualTo(importDTO.getName())
                   .andStudentIdEqualTo(importDTO.getStudentId());
            List<Alumni> existingAlumni = alumniMapper.selectByExample(example);
            
            if (!existingAlumni.isEmpty()) {
                // 更新已有校友信息
                Alumni alumni = existingAlumni.get(0);
                alumni.setDepartmentId(departmentId);
                alumni.setGraduationYear(importDTO.getGraduationYear());
                alumni.setPhone(importDTO.getPhone());
                alumni.setEmail(importDTO.getEmail());
                alumni.setCompany(importDTO.getCompany());
                alumni.setPosition(importDTO.getPosition());
                alumni.setIndustry(importDTO.getIndustry());
                alumni.setLocation(importDTO.getLocation());
                alumni.setUpdateTime(new Date());
                alumniMapper.updateByPrimaryKeySelective(alumni);
            } else {
                // 创建新校友记录
                Alumni alumni = new Alumni();
                alumni.setName(importDTO.getName());
                alumni.setStudentId(importDTO.getStudentId());
                alumni.setDepartmentId(departmentId);
                alumni.setGraduationYear(importDTO.getGraduationYear());
                alumni.setPhone(importDTO.getPhone());
                alumni.setEmail(importDTO.getEmail());
                alumni.setCompany(importDTO.getCompany());
                alumni.setPosition(importDTO.getPosition());
                alumni.setIndustry(importDTO.getIndustry());
                alumni.setLocation(importDTO.getLocation());
                alumni.setCreateTime(new Date());
                alumni.setUpdateTime(new Date());
                alumniMapper.insert(alumni);
            }
        }
    }
}

// 核心功能2:活动信息管理 - 后端处理函数
@Service
public class ActivityServiceImpl implements ActivityService {

    @Autowired
    private ActivityMapper activityMapper;
    
    @Autowired
    private ActivityRegistrationMapper registrationMapper;
    
    @Autowired
    private AlumniMapper alumniMapper;
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public ActivityDTO createActivity(ActivityCreateRequest request) {
        // 数据验证
        if (StringUtils.isBlank(request.getTitle()) || 
                request.getStartTime() == null || 
                request.getEndTime() == null) {
            throw new BusinessException("活动标题和时间不能为空");
        }
        
        // 检查时间有效性
        if (request.getStartTime().after(request.getEndTime())) {
            throw new BusinessException("活动开始时间不能晚于结束时间");
        }
        
        if (request.getRegistrationDeadline() != null && 
                request.getRegistrationDeadline().after(request.getStartTime())) {
            throw new BusinessException("报名截止时间不能晚于活动开始时间");
        }
        
        // 创建活动对象
        Activity activity = new Activity();
        activity.setTitle(request.getTitle());
        activity.setDescription(request.getDescription());
        activity.setLocation(request.getLocation());
        activity.setStartTime(request.getStartTime());
        activity.setEndTime(request.getEndTime());
        activity.setRegistrationDeadline(request.getRegistrationDeadline());
        activity.setMaxParticipants(request.getMaxParticipants());
        activity.setOrganizer(request.getOrganizer());
        activity.setContactPerson(request.getContactPerson());
        activity.setContactPhone(request.getContactPhone());
        activity.setStatus(ActivityStatus.PLANNING.getCode());
        activity.setType(request.getType());
        activity.setTags(String.join(",", request.getTags()));
        activity.setCoverImage(request.getCoverImage());
        activity.setCreateUserId(request.getCreateUserId());
        activity.setCreateTime(new Date());
        activity.setUpdateTime(new Date());
        
        // 保存活动信息
        activityMapper.insert(activity);
        
        // 处理活动附件
        if (CollectionUtils.isNotEmpty(request.getAttachments())) {
            for (ActivityAttachment attachment : request.getAttachments()) {
                attachment.setActivityId(activity.getId());
                activityAttachmentMapper.insert(attachment);
            }
        }
        
        // 如果设置了目标校友群体,保存目标群体信息
        if (CollectionUtils.isNotEmpty(request.getTargetGroups())) {
            for (ActivityTargetGroup targetGroup : request.getTargetGroups()) {
                targetGroup.setActivityId(activity.getId());
                targetGroupMapper.insert(targetGroup);
            }
        }
        
        // 发送活动创建通知
        if (Boolean.TRUE.equals(request.getSendNotification())) {
            // 根据目标群体查找校友
            List<Alumni> targetAlumni = new ArrayList<>();
            
            if (CollectionUtils.isNotEmpty(request.getTargetGroups())) {
                AlumniExample example = new AlumniExample();
                AlumniExample.Criteria criteria = example.createCriteria();
                
                for (ActivityTargetGroup targetGroup : request.getTargetGroups()) {
                    if (targetGroup.getType().equals(TargetGroupType.DEPARTMENT.getCode())) {
                        criteria.andDepartmentIdEqualTo(targetGroup.getTargetId());
                    } else if (targetGroup.getType().equals(TargetGroupType.GRADUATION_YEAR.getCode())) {
                        criteria.andGraduationYearEqualTo(targetGroup.getTargetId());
                    }
                }
                
                targetAlumni = alumniMapper.selectByExample(example);
            }
            
            // 发送通知
            for (Alumni alumni : targetAlumni) {
                notificationService.sendActivityNotification(
                    alumni.getId(), 
                    activity.getId(), 
                    "新活动通知:" + activity.getTitle(),
                    "您可能感兴趣的活动即将开始,点击查看详情"
                );
            }
        }
        
        // 转换为DTO返回
        ActivityDTO activityDTO = new ActivityDTO();
        BeanUtils.copyProperties(activity, activityDTO);
        activityDTO.setStatusName(ActivityStatus.getNameByCode(activity.getStatus()));
        activityDTO.setTags(Arrays.asList(activity.getTags().split(",")));
        
        return activityDTO;
    }
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public RegistrationResult registerActivity(ActivityRegistrationRequest request) {
        // 验证活动是否存在
        Activity activity = activityMapper.selectByPrimaryKey(request.getActivityId());
        if (activity == null) {
            throw new BusinessException("活动不存在");
        }
        
        // 验证活动状态
        if (!ActivityStatus.PUBLISHED.getCode().equals(activity.getStatus())) {
            throw new BusinessException("活动未发布,无法报名");
        }
        
        // 检查报名截止时间
        if (activity.getRegistrationDeadline() != null && 
                new Date().after(activity.getRegistrationDeadline())) {
            throw new BusinessException("活动报名已截止");
        }
        
        // 检查活动是否已满
        if (activity.getMaxParticipants() != null) {
            int currentParticipants = registrationMapper.countByActivityId(request.getActivityId());
            if (currentParticipants >= activity.getMaxParticipants()) {
                throw new BusinessException("活动名额已满");
            }
        }
        
        // 检查是否已报名
        ActivityRegistrationExample example = new ActivityRegistrationExample();
        example.createCriteria()
               .andActivityIdEqualTo(request.getActivityId())
               .andAlumniIdEqualTo(request.getAlumniId());
        List<ActivityRegistration> existingRegistrations = registrationMapper.selectByExample(example);
        
        if (!existingRegistrations.isEmpty()) {
            throw new BusinessException("您已报名此活动");
        }
        
        // 创建报名记录
        ActivityRegistration registration = new ActivityRegistration();
        registration.setActivityId(request.getActivityId());
        registration.setAlumniId(request.getAlumniId());
        registration.setRegistrationTime(new Date());
        registration.setStatus(RegistrationStatus.REGISTERED.getCode());
        registration.setAdditionalInfo(request.getAdditionalInfo());
        registration.setAccompanyCount(request.getAccompanyCount());
        registration.setCreateTime(new Date());
        
        registrationMapper.insert(registration);
        
        // 更新活动报名人数
        activity.setRegisteredCount(activity.getRegisteredCount() + 1);
        activityMapper.updateByPrimaryKeySelective(activity);
        
        // 发送报名成功通知
        Alumni alumni = alumniMapper.selectByPrimaryKey(request.getAlumniId());
        String notificationContent = "您已成功报名参加「" + activity.getTitle() + "」活动," +
                "活动将于" + DateUtil.formatDateTime(activity.getStartTime()) + "开始," +
                "地点:" + activity.getLocation();
        
        notificationService.sendPersonalNotification(
            request.getAlumniId(),
            "活动报名成功",
            notificationContent
        );
        
        // 返回报名结果
        RegistrationResult result = new RegistrationResult();
        result.setRegistrationId(registration.getId());
        result.setActivityTitle(activity.getTitle());
        result.setActivityTime(DateUtil.formatDateTime(activity.getStartTime()));
        result.setActivityLocation(activity.getLocation());
        result.setRegistrationTime(DateUtil.formatDateTime(registration.getRegistrationTime()));
        result.setQrCodeUrl(generateQrCode(registration.getId()));
        
        return result;
    }
}

// 核心功能3:校友捐赠管理 - 后端处理函数
@Service
public class DonationServiceImpl implements DonationService {

    @Autowired
    private DonationMapper donationMapper;
    
    @Autowired
    private DonationProjectMapper projectMapper;
    
    @Autowired
    private AlumniMapper alumniMapper;
    
    @Autowired
    private PaymentService paymentService;
    
    @Override
    @Transactional(rollbackFor = Exception.class)
    public DonationResult createDonation(DonationCreateRequest request) {
        // 数据验证
        if (request.getAlumniId() == null || request.getAmount() == null || 
                request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
            throw new BusinessException("捐赠人和金额信息不正确");
        }
        
        // 验证项目是否存在
        DonationProject project = null;
        if (request.getProjectId() != null) {
            project = projectMapper.selectByPrimaryKey(request.getProjectId());
            if (project == null) {
                throw new BusinessException("捐赠项目不存在");
            }
            
            // 检查项目状态
            if (!ProjectStatus.ACTIVE.getCode().equals(project.getStatus())) {
                throw new BusinessException("该捐赠项目已结束或暂停");
            }
        }
        
        // 验证校友信息
        Alumni alumni = alumniMapper.selectByPrimaryKey(request.getAlumniId());
        if (alumni == null) {
            throw new BusinessException("校友信息不存在");
        }
        
        // 生成捐赠编号
        String donationNo = generateDonationNo();
        
        // 创建捐赠记录
        Donation donation = new Donation();
        donation.setDonationNo(donationNo);
        donation.setAlumniId(request.getAlumniId());
        donation.setProjectId(request.getProjectId());
        donation.setAmount(request.getAmount());
        donation.setDonationType(request.getDonationType());
        donation.setDonationPurpose(request.getDonationPurpose());
        donation.setPaymentMethod(request.getPaymentMethod());
        donation.setDonationDate(new Date());
        donation.setStatus(DonationStatus.PENDING.getCode());
        donation.setIsAnonymous(request.getIsAnonymous());
        donation.setRemark(request.getRemark());
        donation.setCreateTime(new Date());
        donation.setUpdateTime(new Date());
        
        donationMapper.insert(donation);
        
        if (DonationType.MATERIAL.getCode().equals(request.getDonationType()) && 
                CollectionUtils.isNotEmpty(request.getMaterialItems())) {
            for (DonationMaterialItem item : request.getMaterialItems()) {
                item.setDonationId(donation.getId());
                materialItemMapper.insert(item);
            }
        }
        
        PaymentResult paymentResult = null;
        if (PaymentMethod.ONLINE.getCode().equals(request.getPaymentMethod())) {
            PaymentRequest paymentRequest = new PaymentRequest();
            paymentRequest.setOrderNo(donationNo);
            paymentRequest.setAmount(request.getAmount());
            paymentRequest.setSubject("校友捐赠-" + (project != null ? project.getName() : "一般捐赠"));
            paymentRequest.setBody("感谢您对母校的支持");
            paymentRequest.setPayChannel(request.getPayChannel());
            paymentRequest.setNotifyUrl("/api/donation/payment/notify");
            
            try {
                paymentResult = paymentService.createPayment(paymentRequest);
            } catch (Exception e) {
                log.error("创建支付订单失败", e);
                throw new BusinessException("支付系统异常,请稍后再试");
            }
        }
        
        if (project != null && !DonationStatus.PENDING.getCode().equals(donation.getStatus())) {
            project.setRaisedAmount(project.getRaisedAmount().add(request.getAmount()));
            project.setDonorCount(project.getDonorCount() + 1);
            project.setUpdateTime(new Date());
            projectMapper.updateByPrimaryKeySelective(project);
        }
        
        if (!Boolean.TRUE.equals(request.getIsAnonymous())) {
            String notificationTitle = "感谢您的捐赠";
            String notificationContent = "尊敬的" + alumni.getName() + "校友,感谢您对母校的支持与厚爱。" +
                    "您捐赠的" + donation.getAmount() + "元" + 
                    (project != null ? "已用于" + project.getName() + "项目。" : "将用于学校发展。") +
                    "您的善举将帮助更多学子成长,促进学校的发展与进步。";
            
            notificationService.sendPersonalNotification(
                alumni.getId(),
                notificationTitle,
                notificationContent
            );
        }
       
        DonationResult result = new DonationResult();
        result.setDonationId(donation.getId());
        result.setDonationNo(donation.getDonationNo());
        result.setAmount(donation.getAmount());
        result.setStatus(donation.getStatus());
        result.setStatusName(DonationStatus.getNameByCode(donation.getStatus()));
        result.setCertificateUrl(certificateUrl);
        
        if (paymentResult != null) {
            result.setPaymentOrderNo(paymentResult.getOrderNo());
            result.setPaymentUrl(paymentResult.getPaymentUrl());
            result.setQrCodeUrl(paymentResult.getQrCodeUrl());
        }
        
        return result;
    }

}

六、基于微信小程序的校友信息管理系统-文档展示

在这里插入图片描述

七、END

在这里插入图片描述

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