一、个人简介
💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长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数据库。系统功能全面覆盖口腔健康管理各环节,包括个人信息维护、会员分级管理、病例就诊信息记录与追踪、牙齿保健产品在线销售与管理、智能复查提醒、预约挂号服务、药品信息管理、互动留言板以及完善的系统管理功能。通过该系统,用户可便捷地进行线上预约、查询个人口腔健康档案、购买专业牙齿保健产品,医疗机构则能高效管理患者信息、优化诊疗流程、提升服务质量,实现口腔健康管理的数字化、智能化和便捷化,为用户提供全方位的牙齿健康解决方案。
三、牙齿健康商城系统-视频解说
四、牙齿健康商城系统-功能展示
前台产品详情
前台个人中心
前台充值
前台地址
前台下单
用户后台查看信息
后台预约挂号
后台管理员管理会员
五、牙齿健康商城系统-代码展示
```
// 核心功能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
致谢
💕💕文末获取源码联系计算机编程果茶熊