ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

旧物回收小程序开发,上门预约收运方案

旧物回收小程序开发,上门预约收运方案

旧物回收小程序开发,上门预约收运方案

旧物回收小程序和普通外卖、团购业务逻辑差异较大,核心诉求是用户线上提交回收预约,回收员接单上门称重结算。如果缺少预约时段管控、品类计价、称重核验、路线调度,很容易出现空跑、价格纠纷、订单混乱等问题。上门预约收运方案围绕预约提报、接单调度、上门核验、计价结算整条链路设计,适配小区、乡镇的废品回收业务。本文基于Java后端,讲解预约下单、回收员调度、称重结算整套实现思路。

后端技术栈采用SpringBoot + MyBatis-Plus + Redis + RabbitMQ,模块包含用户预约、回收员调度、品类计价、订单状态流、资金账单。支持用户选择回收品类、预约上门时间,回收员抢单或者平台派单,上门现场称重,按品类单价自动计算回收款,钱款直接发放给用户。

整体业务流程:用户登录小程序,选择旧物品类,填写预估重量、上门地址、预约时段,提交预约订单;订单进入调度池,平台根据地址匹配片区回收员;回收员接单后获取上门信息,按预约时间前往用户地址;现场称重录入实际重量,系统按品类单价核算金额;用户确认无误,订单完成,钱款自动入账用户余额;后台记录回收台账,统计品类回收量、回收员业绩。

下面是预约创建、称重计价核心Java示例代码:

@Service public class RecycleOrderService { @Autowired private RecycleOrderMapper recycleOrderMapper; private RecycleCategoryMapper categoryMapper; @Autowired private RedisTemplate<String,Object> redisTemplate; @Autowired private RabbitTemplate rabbitTemplate; /** * 用户提交上门回收预约单 */ @Transactional(rollbackFor = Exception.class) public ResultDTO<Long> createRecycleOrder(RecycleSubmitDTO submitDTO, Long userId){ // 校验品类是否启用 RecycleCategory category = categoryMapper.selectById(submitDTO.getCategoryId()); if(category == null || category.getStatus() != 1){ return ResultDTO.fail("该回收品类暂不支持预约"); } // 校验预约时段是否可预约 String timeKey = "recycle:timeSlot:" + submitDTO.getTimeSlotId(); Boolean slotEnable = (Boolean) redisTemplate.opsForValue().get(timeKey); if(slotEnable == null || !slotEnable){ return ResultDTO.fail("当前预约时段已满,请更换其他时间"); } RecycleOrder order = new RecycleOrder(); order.setOrderNo(UUID.randomUUID().toString().replace("-","")); order.setUserId(userId); order.setCategoryId(submitDTO.getCategoryId()); order.setAddress(submitDTO.getAddress()); order.setLon(submitDTO.getLon()); order.setLat(submitDTO.getLat()); order.setEstimateWeight(submitDTO.getEstimateWeight()); order.setTimeSlotId(submitDTO.getTimeSlotId()); order.setOrderStatus(0); order.setCreateTime(LocalDateTime.now()); recycleOrderMapper.insert(order); // 投递消息进入调度队列 rabbitTemplate.convertAndSend("recycle.dispatch.exchange","order.new",order); return ResultDTO.success(order.getId()); } /** * 回收员上门称重,核算回收金额 */ @Transactional(rollbackFor = Exception.class) public ResultDTO<BigDecimal> weighAndSettle(Long orderId, BigDecimal realWeight, Long recyclerId){ RecycleOrder order = recycleOrderMapper.selectById(orderId); if(order == null || !order.getOrderStatus().equals(1)){ return ResultDTO.fail("订单状态异常,无法称重"); } RecycleCategory category = categoryMapper.selectById(order.getCategoryId()); BigDecimal totalMoney = realWeight.multiply(category.getUnitPrice()); order.setRealWeight(realWeight); order.setTotalMoney(totalMoney); order.setRecyclerId(recyclerId); order.setOrderStatus(2); recycleOrderMapper.updateById(order); // 推送结算消息,资金入账用户余额 rabbitTemplate.convertAndSend("recycle.settle.exchange","recycle.money",order); return ResultDTO.success(totalMoney); } }

品类与计价配置设计,后台可以维护各类可回收物品,纸壳、塑料瓶、金属、旧家电、旧衣物等独立配置单价。单价支持片区差异化,不同小区、乡镇设置不同回收报价。预估重量只作为预约参考,最终结算以回收员现场录入的实际重量为准。品类可以开关控制,比如雨天暂停旧衣物回收、旺季调整废纸价格,修改后刷新缓存,小程序实时展示最新报价。

预约时段管控,为了避免回收员同一时间段订单扎堆,系统划分时段,例如上午9-11点、下午14-17点。每个时段可以设置最大预约名额,名额用完自动关闭该时段预约。用户下单时只能选择可选时段,同时支持用户填写备注,比如大件物品、需要搬运等信息,提前告知回收员。预约成功后小程序推送提醒,临近上门时间再次通知用户。

片区调度与接单模式,采用片区围栏划分服务范围,回收员绑定固定片区。订单生成后优先两种模式可选:平台自动派单或者回收员抢单。订单带有经纬度,调度时只推送给同片区在线回收员。如果长时间无人接单,后台自动预警,运营可以手动指派订单或者联系用户协商改期。回收员接单之后,在端内看到地址、联系方式、物品类型、用户备注。

订单状态流转设计,完整状态包含待接单、已接单、上门中、已称重待确认、已完成、已取消。用户可以在待接单阶段取消预约;回收员到达现场后,可以标记用户不在家、物品和描述不符,提交异常记录。异常订单流入后台,运营介入沟通,避免价格纠纷。每一次状态变更都保存操作日志,方便对账和售后。

资金结算流程,回收款是平台付给用户,和外卖资金流向相反。称重确认金额、用户确认之后,金额发放至用户小程序余额,用户可以申请提现。回收员按单或者按总回收重量赚取提成,提成规则后台配置,独立记账。所有资金流水分开记录:用户回款、回收员提成、平台服务费,财务可以导出明细台账。

回收员端能力简化,回收员小程序核心功能:查看待接单、导航上门、称重录入、上传现场照片、提交异常、查看业绩账单。上门时支持上传照片留证,遇到大件、拒收场景留存凭证,减少和用户的争执。回收员可以查看今日订单路线,规划收运顺序,减少绕路空跑。

缓存与并发优化,品类单价、时段配额、片区回收员信息存入Redis。时段名额使用Redis计数器,预约成功自增、取消预约自动释放名额,防止超约。抢单接口增加分布式锁,防止多名回收员同时抢到同一个预约订单。调度消息、资金结算使用MQ异步处理,不阻塞下单主流程。

异常场景处理,用户临时取消预约,自动释放时段名额;回收员上门后物品和描述差距很大,可以发起议价,用户同意后修改单价再结算;预约超时无人上门,系统自动提醒运营跟进;大件家电可以单独配置附加搬运费,在订单中单独记录。

和其他扩展模块联动,这套预约收运模块可以叠加积分、上门评价功能,用户完成回收订单后评价回收员服务。后台统计报表可以按天、按片区、按品类统计回收重量,用来对接下游打包厂、资源处理商。

旧物回收上门预约方案的重点,是用预约制控制回收员运力,区分预估重量和实际称重,把价格确认环节放到现场,解决回收行业价格不透明、上门空跑的痛点。该方案可以独立做成回收小程序,也可以嵌入本地生活平台作为附加服务。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进