基于SpringBoot的牙齿健康商城|计算机毕业设计

28 阅读5分钟

一、个人简介

💖💖作者:计算机编程果茶熊

💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!

💛💛想说的话:感谢大家的关注与支持!

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

二、系统介绍

开发语言:Java+Python

数据库:MySQL

系统架构:B/S

后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django

前端:Vue+HTML+CSS+JavaScript+jQuery

牙齿健康商城系统是一款基于B/S架构的综合性口腔健康管理平台,采用Java/Python双版本开发支持,后端分别基于Spring Boot(Spring+SpringMVC+Mybatis)和Django框架构建,前端使用Vue+ElementUI+HTML技术栈,数据存储依托MySQL数据库。系统功能全面覆盖口腔健康管理各环节,包括个人信息维护、会员分级管理、病例就诊信息记录与追踪、牙齿保健产品在线销售与管理、智能复查提醒、预约挂号服务、药品信息管理、互动留言板以及完善的系统管理功能。通过该系统,用户可便捷地进行线上预约、查询个人口腔健康档案、购买专业牙齿保健产品,医疗机构则能高效管理患者信息、优化诊疗流程、提升服务质量,实现口腔健康管理的数字化、智能化和便捷化,为用户提供全方位的牙齿健康解决方案。

三、牙齿健康商城系统-视频解说

基于SpringBoot的牙齿健康商城|计算机毕业设计

四、牙齿健康商城系统-功能展示

前台产品详情

前台个人中心

前台充值

前台地址

前台下单

用户后台查看信息

后台预约挂号

后台管理员管理会员

五、牙齿健康商城系统-代码展示

```
// 核心功能1: 预约挂号管理
@Service
public class AppointmentServiceImpl implements AppointmentService {
    
    @Autowired
    private AppointmentMapper appointmentMapper;
    
    @Autowired
    private DoctorMapper doctorMapper;
    
    @Autowired
    private PatientMapper patientMapper;
    
    @Override
    public ResponseResult createAppointment(AppointmentDTO appointmentDTO) {
        // 验证医生是否存在且可预约
        Doctor doctor = doctorMapper.selectById(appointmentDTO.getDoctorId());
        if (doctor == null) {
            return ResponseResult.error("医生不存在");
        }
        
        // 验证患者信息
        Patient patient = patientMapper.selectById(appointmentDTO.getPatientId());
        if (patient == null) {
            return ResponseResult.error("患者信息不存在");
        }
        
        // 检查预约时间段是否可用
        List<Appointment> existingAppointments = appointmentMapper.findByDoctorIdAndDate(
                appointmentDTO.getDoctorId(), 
                appointmentDTO.getAppointmentDate(),
                appointmentDTO.getTimeSlot());
        
        if (!existingAppointments.isEmpty()) {
            return ResponseResult.error("该时间段已被预约");
        }
        
        // 检查患者是否有同一天的预约
        List<Appointment> patientAppointments = appointmentMapper.findByPatientIdAndDate(
                appointmentDTO.getPatientId(), 
                appointmentDTO.getAppointmentDate());
        
        if (patientAppointments.size() >= 2) {
            return ResponseResult.error("同一天最多预约2次");
        }
        
        // 创建预约记录
        Appointment appointment = new Appointment();
        BeanUtils.copyProperties(appointmentDTO, appointment);
        appointment.setStatus(AppointmentStatus.PENDING.getCode());
        appointment.setCreateTime(new Date());
        appointment.setAppointmentNumber(generateAppointmentNumber());
        
        // 保存预约信息
        appointmentMapper.insert(appointment);
        
        // 发送预约成功通知
        sendAppointmentNotification(appointment, patient, doctor);
        
        return ResponseResult.success("预约成功", appointment);
    }
    
    // 生成预约编号
    private String generateAppointmentNumber() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return "APT" + sdf.format(new Date()) + RandomUtil.randomNumbers(4);
    }
}

// 核心功能2: 牙齿保健产品管理
@Service
public class DentalProductServiceImpl implements DentalProductService {

    @Autowired
    private DentalProductMapper productMapper;
    
    @Autowired
    private ProductCategoryMapper categoryMapper;
    
    @Autowired
    private ProductInventoryMapper inventoryMapper;
    
    @Override
    @Transactional
    public ResponseResult purchaseProduct(ProductPurchaseDTO purchaseDTO) {
        // 查询产品信息
        DentalProduct product = productMapper.selectById(purchaseDTO.getProductId());
        if (product == null) {
            return ResponseResult.error("产品不存在");
        }
        
        // 检查产品状态
        if (product.getStatus() != ProductStatus.ON_SALE.getCode()) {
            return ResponseResult.error("产品已下架或不可购买");
        }
        
        // 检查库存
        ProductInventory inventory = inventoryMapper.selectByProductId(purchaseDTO.getProductId());
        if (inventory == null || inventory.getAvailableQuantity() < purchaseDTO.getQuantity()) {
            return ResponseResult.error("产品库存不足");
        }
        
        // 计算订单金额
        BigDecimal totalAmount = product.getPrice().multiply(new BigDecimal(purchaseDTO.getQuantity()));
        
        // 检查会员折扣
        if (purchaseDTO.getMemberId() != null) {
            Member member = memberMapper.selectById(purchaseDTO.getMemberId());
            if (member != null && member.getStatus() == MemberStatus.ACTIVE.getCode()) {
                MemberLevel level = memberLevelMapper.selectById(member.getLevelId());
                if (level != null) {
                    BigDecimal discountRate = level.getDiscountRate();
                    totalAmount = totalAmount.multiply(discountRate).setScale(2, RoundingMode.HALF_UP);
                }
            }
        }
        
        // 创建订单
        ProductOrder order = new ProductOrder();
        order.setOrderNumber(generateOrderNumber());
        order.setUserId(purchaseDTO.getUserId());
        order.setProductId(purchaseDTO.getProductId());
        order.setQuantity(purchaseDTO.getQuantity());
        order.setTotalAmount(totalAmount);
        order.setStatus(OrderStatus.PENDING_PAYMENT.getCode());
        order.setCreateTime(new Date());
        order.setAddress(purchaseDTO.getAddress());
        order.setContactPhone(purchaseDTO.getContactPhone());
        
        // 保存订单
        orderMapper.insert(order);
        
        // 锁定库存
        inventory.setLockedQuantity(inventory.getLockedQuantity() + purchaseDTO.getQuantity());
        inventory.setAvailableQuantity(inventory.getAvailableQuantity() - purchaseDTO.getQuantity());
        inventoryMapper.updateById(inventory);
        
        // 返回订单信息
        return ResponseResult.success("下单成功,请尽快支付", order);
    }
    
    // 生成订单编号
    private String generateOrderNumber() {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
        return "ORD" + sdf.format(new Date()) + RandomUtil.randomNumbers(4);
    }
}

// 核心功能3: 复查提醒管理
@Service
public class RecallReminderServiceImpl implements RecallReminderService {

    @Autowired
    private RecallReminderMapper reminderMapper;
    
    @Autowired
    private PatientMapper patientMapper;
    
    @Autowired
    private MedicalRecordMapper recordMapper;
    
    @Autowired
    private SmsService smsService;
    
    @Autowired
    private EmailService emailService;
    
    @Override
    @Scheduled(cron = "0 0 8 * * ?")  // 每天早上8点执行
    public void processRecallReminders() {
        // 获取今日需要提醒的复查记录
        Date today = DateUtils.truncate(new Date(), Calendar.DATE);
        Date tomorrow = DateUtils.addDays(today, 1);
        Date nextWeek = DateUtils.addDays(today, 7);
        
        // 查询明天需要复查的记录
        List<RecallReminder> tomorrowReminders = reminderMapper.findByReminderDateBetween(tomorrow, DateUtils.addDays(tomorrow, 1));
        
        // 查询一周后需要复查的记录
        List<RecallReminder> weekReminders = reminderMapper.findByReminderDateBetween(nextWeek, DateUtils.addDays(nextWeek, 1));
        
        // 处理明天的提醒
        for (RecallReminder reminder : tomorrowReminders) {
            if (reminder.getStatus() != ReminderStatus.PENDING.getCode()) {
                continue;
            }
            
            Patient patient = patientMapper.selectById(reminder.getPatientId());
            if (patient == null) {
                continue;
            }
            
            MedicalRecord record = recordMapper.selectById(reminder.getMedicalRecordId());
            
            // 构建提醒内容
            String reminderContent = buildReminderContent(patient, reminder, record, true);
            
            // 发送短信提醒
            if (StringUtils.isNotBlank(patient.getPhone())) {
                boolean smsSent = smsService.sendReminderSms(patient.getPhone(), reminderContent);
                if (smsSent) {
                    reminder.setSmsNotified(true);
                    reminder.setSmsNotifyTime(new Date());
                }
            }
            
            // 发送邮件提醒
            if (StringUtils.isNotBlank(patient.getEmail())) {
                boolean emailSent = emailService.sendReminderEmail(
                    patient.getEmail(), 
                    "牙齿健康复查提醒", 
                    reminderContent
                );
                if (emailSent) {
                    reminder.setEmailNotified(true);
                    reminder.setEmailNotifyTime(new Date());
                }
            }
            
            // 更新提醒状态
            reminder.setStatus(ReminderStatus.NOTIFIED.getCode());
            reminder.setUpdateTime(new Date());
            reminderMapper.updateById(reminder);
        }
        
        // 处理一周后的提醒
        for (RecallReminder reminder : weekReminders) {
            if (reminder.getStatus() != ReminderStatus.PENDING.getCode()) {
                continue;
            }
            
            Patient patient = patientMapper.selectById(reminder.getPatientId());
            if (patient == null) {
                continue;
            }
            
            MedicalRecord record = recordMapper.selectById(reminder.getMedicalRecordId());
            
            // 构建提醒内容
            String reminderContent = buildReminderContent(patient, reminder, record, false);
            
            // 只发送邮件提醒
            if (StringUtils.isNotBlank(patient.getEmail())) {
                boolean emailSent = emailService.sendReminderEmail(
                    patient.getEmail(), 
                    "牙齿健康复查提前提醒", 
                    reminderContent
                );
                if (emailSent) {
                    reminder.setEarlyEmailNotified(true);
                    reminder.setEarlyEmailNotifyTime(new Date());
                    reminderMapper.updateById(reminder);
                }
            }
        }
    }
    
    // 构建提醒内容
    private String buildReminderContent(Patient patient, RecallReminder reminder, MedicalRecord record, boolean isTomorrow) {
        StringBuilder content = new StringBuilder();
        content.append("尊敬的").append(patient.getName()).append("患者,您好!\n");
        
        if (isTomorrow) {
            content.append("提醒您,您的牙齿复查时间为明天(");
            content.append(new SimpleDateFormat("yyyy年MM月dd日").format(reminder.getReminderDate()));
            content.append(")。");
        } else {
            content.append("提醒您,您的牙齿复查时间将在一周后(");
            content.append(new SimpleDateFormat("yyyy年MM月dd日").format(reminder.getReminderDate()));
            content.append(")。");
        }
        
        if (record != null) {
            content.append("\n您上次就诊的诊断为:").append(record.getDiagnosis());
            content.append("\n医生建议:").append(record.getTreatmentPlan());
        }
        
        content.append("\n请您按时前来复查,保持良好的口腔健康。");
        content.append("\n如需变更预约,请提前联系我们:").append(clinicContactPhone);
        
        return content.toString();
    }
}
```

六、牙齿健康商城系统-文档展示

部分文档

七、END

致谢

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