一、个人简介
- 💖💖作者:计算机编程果茶熊
- 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长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
💕💕文末获取源码联系计算机编程果茶熊