同城校园外卖系统Java源码:便捷点餐与商家管理实现

以下是基于Java的同城校园外卖系统源码实现方案,聚焦便捷点餐流程商家管理功能的核心代码与架构设计,结合实际校园场景优化用户体验和商家运营效率。


一、便捷点餐功能实现

1. 核心流程设计
  • 用户端操作路径
    首页推荐 → 搜索/筛选商家 → 浏览菜单 → 加入购物车 → 提交订单 → 支付 → 订单跟踪
2. 关键代码实现
(1)商家与菜品快速检索
 
  

java

// 商家服务类(支持按校区、分类、销量筛选)
@Service
public class MerchantService {
@Autowired
private MerchantRepository merchantRepository;
// 按校区ID和分类筛选商家
public List searchMerchants(Long campusId, String category, Integer sortType) {
// sortType: 0-默认 1-销量降序 2-评分降序
return merchantRepository.findByCampusIdAndCategory(
campusId,
category,
sortType == 1 ? "sales DESC" : (sortType == 2 ? "rating DESC" : "id ASC")
);
}
}
(2)购物车与订单生成
 
  

java

// 购物车服务类
@Service
public class CartService {
@Autowired
private CartRepository cartRepository;
@Autowired
private OrderService orderService;
// 提交订单(合并购物车项)
public Order submitOrder(Long userId, Long addressId, String remark) {
List cartItems = cartRepository.findByUserId(userId);
if (cartItems.isEmpty()) throw new RuntimeException("购物车为空");
// 计算总价
BigDecimal totalPrice = cartItems.stream()
.map(item -> item.getDish().getPrice().multiply(new BigDecimal(item.getQuantity())))
.reduce(BigDecimal.ZERO, BigDecimal::add);
// 生成订单
Order order = new Order();
order.setUserId(userId);
order.setMerchantId(cartItems.get(0).getMerchantId()); // 假设购物车属于同一商家
order.setTotalPrice(totalPrice);
order.setStatus(OrderStatus.PENDING_PAYMENT);
order.setRemark(remark);
// 清空购物车
cartRepository.deleteByUserId(userId);
return orderService.createOrder(order);
}
}
(3)支付集成(微信支付示例)
 
  

java

// 支付服务类
@Service
public class PaymentService {
@Autowired
private WeChatPayClient weChatPayClient;
// 发起支付请求
public String createPayment(Long orderId, String openId) {
Order order = orderRepository.findById(orderId).orElseThrow();
return weChatPayClient.unifiedOrder(
orderId.toString(),
"校园外卖订单支付",
order.getTotalPrice().multiply(new BigDecimal(100)).intValue(), // 转换为分
openId,
"http://yourdomain.com/notify" // 支付结果回调地址
);
}
}

二、商家管理功能实现

1. 核心功能设计
  • 商家端操作路径
    店铺信息维护 → 菜单管理 → 订单处理 → 营业数据统计
2. 关键代码实现
(1)店铺信息管理
 
  

java

// 商家实体类(扩展字段)
public class Merchant {
private Long id;
private String name;
private String logoUrl;
private String description;
private BigDecimal minOrderAmount; // 起送价
private BigDecimal deliveryFee; // 配送费
private LocalTime openTime; // 营业开始时间
private LocalTime closeTime; // 营业结束时间
// Getter和Setter方法
}
// 商家服务类(更新店铺信息)
@Service
public class MerchantService {
@Autowired
private MerchantRepository merchantRepository;
public Merchant updateShopInfo(Long merchantId, MerchantUpdateDTO dto) {
Merchant merchant = merchantRepository.findById(merchantId).orElseThrow();
BeanUtils.copyProperties(dto, merchant, "id"); // 排除ID字段
return merchantRepository.save(merchant);
}
}
(2)菜单管理
 
  

java

// 菜品服务类
@Service
public class DishService {
@Autowired
private DishRepository dishRepository;
// 批量添加/更新菜品
@Transactional
public List batchSaveDishes(Long merchantId, List dishes) {
List savedDishes = new ArrayList<>();
for (DishDTO dto : dishes) {
Dish dish = new Dish();
dish.setMerchantId(merchantId);
dish.setName(dto.getName());
dish.setPrice(dto.getPrice());
dish.setDescription(dto.getDescription());
dish.setStock(dto.getStock());
savedDishes.add(dishRepository.save(dish));
}
return savedDishes;
}
}
(3)订单处理
 
  

java

// 订单状态枚举
public enum OrderStatus {
PENDING_PAYMENT, // 待支付
PAID, // 已支付
PREPARING, // 商家接单
DELIVERING, // 配送中
COMPLETED, // 已完成
CANCELLED // 已取消
}
// 商家订单处理服务
@Service
public class MerchantOrderService {
@Autowired
private OrderRepository orderRepository;
// 商家接单
public void acceptOrder(Long orderId) {
Order order = orderRepository.findById(orderId).orElseThrow();
if (order.getStatus() != OrderStatus.PAID) {
throw new RuntimeException("订单状态异常");
}
order.setStatus(OrderStatus.PREPARING);
orderRepository.save(order);
}
// 标记订单已完成
public void completeOrder(Long orderId) {
Order order = orderRepository.findById(orderId).orElseThrow();
if (order.getStatus() != OrderStatus.DELIVERING) {
throw new RuntimeException("订单状态异常");
}
order.setStatus(OrderStatus.COMPLETED);
orderRepository.save(order);
}
}

三、技术优化点

1. 性能优化
  • 缓存策略
    • 使用Redis缓存热门商家和菜品数据(TTL 10分钟)。
    • 示例:redisTemplate.opsForValue().set("hot_merchants:" + campusId, merchantList, 10, TimeUnit.MINUTES);
  • 数据库分页
    • 商家列表和订单列表分页查询,避免全量加载。
2. 用户体验优化
  • 防抖搜索
    • 前端输入框防抖(500ms),减少无效请求。
  • 实时订单状态推送
    • 使用WebSocket实现订单状态实时通知。
3. 商家运营优化
  • 数据看板
    • 提供日/周/月订单量、销售额、热销菜品等统计数据。
  • 库存预警
    • 菜品库存低于阈值时自动提醒商家补货。

四、系统架构图

 
  

用户端(微信小程序/H5)
├── 请求 → API网关(Spring Cloud Gateway)
├── 业务层 → 商家服务、订单服务、支付服务(Spring Boot微服务)
├── 数据层 → MySQL(主从分离)+ Redis(缓存)
└── 第三方服务 → 微信支付、高德地图
商家端(Web管理后台)
├── 请求 → API网关
└── 业务层 → 商家管理服务、菜品管理服务

五、扩展建议

  1. 智能推荐
    • 基于用户历史订单推荐相似菜品(协同过滤算法)。
  2. 社交裂变
    • 邀请好友得优惠券,提升用户活跃度。
  3. 骑手端集成
    • 骑手接单、配送路径规划(集成高德地图API)。

六、总结

  • 便捷点餐:通过快速检索、购物车合并、支付集成等优化用户体验。
  • 商家管理:提供店铺信息维护、菜单管理、订单处理等核心功能。
  • 技术架构:采用Spring Boot+MySQL+Redis+WebSocket实现高并发、低延迟。

此方案可满足校园外卖系统的核心需求,后续可根据实际场景扩展更多功能。

你可能感兴趣的:(同城校园外卖系统Java源码:便捷点餐与商家管理实现)