尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

JAVA无人机共享租赁系统源码解析:从业务到落地

JAVA无人机共享租赁系统源码解析:从业务到落地 上个月我在梳理一套JAVA无人共享系统的源码挺典型的一个项目——无人机租赁加扫码租赁同时支持小程序、公众号、APP、H5四个端口。这类系统在共享经济赛道里不算新鲜但把无人机这个高客单价、高维护成本的品类塞进共享租赁框架里很多设计就跟共享单车、共享充电宝完全不一样了。拿到源码能跑通是一回事真正放到景区、商圈、产业园区去运营又会踩到一堆文档里不会写的问题。这篇文章我会从业务认知、技术选型、核心链路、多端适配、IoT对接、资金风控、源码落地七个维度拆解这套系统。无论你是准备拿源码二次开发的团队还是想自研一套类似系统做技术调研这篇都能给你一个完整的参考。1. 无人机共享租赁这个赛道到底在解决什么问题1.1 为什么是无人机为什么是租赁先说需求侧。无人机这个东西客单价高——大疆Mini系列便宜点三四千Mavic系列直接八千到两万行业级的测绘、巡检机型更不用提。但使用频次呢普通爱好者一年飞不了几次工作室接单才用测绘巡检更是一阵一阵的。买一台放在家里吃灰对绝大多数人来说根本不划算。这就是共享租赁的基本盘高客单价 低频使用 维护门槛。这三个特征凑在一起天然适合租赁而不是售卖。你花150到300块租一天体验一下最新款或者完成一次临时拍摄任务比买一台划算太多了。运营方单台设备的回本周期也能控制在合理范围内前提是系统能把设备利用率拉起来。1.2 共享租赁系统和普通电商系统的本质差异很多人拿到这套源码第一反应是这不就是个商城吗用户选商品、下单、支付、发货。如果你真把它当商城做后面会死得很惨。共享租赁系统和电商系统有三个本质区别第一电商是钱货分离的订单流租赁是时间片的分配流。电商生意每一单都对应一件物理商品订单结束商品就没了租赁不一样同一台无人机在时间轴上是分段出租的订单A归还之后订单B才能开始。系统核心不是订单管理而是设备在不同时间片上的状态管理。第二电商用户是买家租赁用户是临时使用人。你不仅要管用户付了多少钱还要管他什么时候用、用了多久、有没有按时还、还回来设备有没有损坏。用户的身份在租借期间要从买家变成使用者系统里对应的是实时的设备占用关系和责任认定。第三电商的售后是退货退款租赁的售后是设备巡检、充电、维修、保养。这套循环穿插在每一单之间如果系统里没有运维工单和检修记录设备很快就会因为电量不足、零件损坏等问题变成僵尸设备。1.3 典型业务场景与用户画像结合这套源码实际的字段设计和业务模块来看它覆盖的典型场景有三类景区/城市户外点游客扫码租无人机航拍租期按小时算有工作人员现场引导押金和保险一起收。这类场景对小程序和H5的需求最强因为游客不想为此专门装一个APP。产业园区/校园面向学生和创客团队租期按天算设备放在智能柜里远程开锁取机归还后自助检测。这类场景对公众号消息推送和APP端的管理功能需求较强。专业工作室/行业用户按项目周期租可能一次租3到5台涉及长时间占用、多设备同时租用、企业发票、信用免押金等高级功能。这类场景对系统后台的订单聚合、设备批量调度能力要求高。用户画像也分层个人爱好者追求流程简单扫了就租工作室追求稳定性希望设备状态透明、计费可预测运营方和运维人员追求管理效率需要远程看设备状态、处理异常订单、管理维护周期。一套系统要同时满足这三类人的需求复杂度就在这了。2. JAVA技术栈的选型逻辑与整体架构设计2.1 为什么是JAVA而不是Node.js或者Go很多做共享类项目的团队会纠结选什么后端语言。老实说共享租赁这种业务放到Node.js或者Go上也能跑但这套源码选JAVA背后有几个很实际的理由。第一生态成熟度。Spring Boot加Spring Cloud这套体系在支付对接、微信/支付宝开放平台SDK、第三方物流、IoT设备云接入这些场景下能找到的现成库和案例最丰富。共享租赁涉及到大量资金流转和第三方平台对接用JAVA踩坑成本最低。第二事务一致性能力。租赁业务里创建订单锁定设备扣减库存生成支付单是一个强一致操作任何一个环节失败都得回滚。Spring框架的声明式事务和分布式事务方案Seata、本地消息表都很成熟这一点在Go和Node.js生态里要么靠手写补偿要么方案不统一开发成本更高。第三招人和维护成本。做这种项目的大多是中小型团队JAVA开发者的供给量最大代码可读性和规范性强。真出了问题拉个JAVA工程师来看代码比让他现学一门小众语言快得多。2.2 微服务拆分不是越多越好这套源码在架构上的处理比较克制没有一股脑拆出十几个微服务。它把系统拆成了六个核心服务模块这里我结合实际项目经验帮你梳理一下每个模块的职责边界服务模块核心职责关键数据用户服务注册登录、实名认证、信用分、用户等级用户表、认证记录设备服务设备档案、智能柜管理、状态流转、维护记录设备表、状态日志订单服务租借订单、续租、归还、订单状态机订单表、状态迁移表支付服务押金冻结/扣款、租金结算、退款、对账支付流水、退款单计费服务计费规则、阶梯价格、时长计算、优惠券费率表、优惠券通知服务公众号模板消息、小程序订阅消息、短信、APP推送消息记录、模板配置这样的拆分逻辑很清楚按业务能力划分而不是按技术分层划分。每个模块都能独立部署和扩容比如景区大促的时候订单服务和支付服务压力大可以单独多拉几个实例设备服务流量平稳就不用跟着一起扩容。2.3 一个可以照抄的基础工程结构如果你准备拿这套源码二次开发我建议你保持住它的工程结构不要轻易合并服务。推荐的基础配置是这样的后端框架Spring Boot 2.7 Spring Cloud AlibabaORMMyBatis Plus能用MyBatis Plus就不用原生MyBatis代码量少一半缓存Redis存token、设备状态、验证码、分布式锁消息队列RabbitMQ处理订单超时关闭、支付回调通知、设备状态上报数据库MySQL 8.0按服务分库订单表按月分表文件存储OSS存用户头像、设备照片、充电记录接口文档SpringDoc/knife4j有一点要注意别把智能柜、无人机这些硬件数据直接塞到MySQL里做实时读写。硬件状态是在高频变化的建议走Redis或者时序数据库MySQL只存最终的归档结果。比如当前电量45%这种实时状态存Redis每小时落一次库做历史趋势分析就够了。这种结构的好处是前期用一个2核4G的服务器就能把整套跑起来后期按模块扩容也方便。我见过很多项目一上来就上Kubernetes几十个Pod运维成本比开发成本还高完全没必要。3. 扫码租赁核心链路从扫码到还机的状态机设计3.1 扫码开锁二维码里面到底存了什么共享租赁系统的第一入口就是扫码但二维码里存的不是简单的一个URL。如果只是一个网页链接任何人都可以伪造、重放而且一旦链接暴露在公开场合很容易被恶意用户反复访问。合理的做法是二维码存储一个加密的设备编码例如RENTAL_CODE:DEVICE_ID:TIMESTAMP:SIGNATURE的结构。服务端拿到扫码结果后先验签确认这个码是系统签发的再查设备当前状态。签名算法也不复杂用HMAC-SHA256密钥存在服务端配置文件里就行。再补充一个我在实际项目中看到很多团队忽略的点二维码要支持失效刷新机制。智能柜上的二维码如果长期不变存在被替换成诈骗码的风险。好的做法是屏幕上的动态二维码定期刷新静态贴纸二维码至少加一个周期性的巡检记录发现被覆盖就立刻回收处理。3.2 租借状态机的七种状态流转这套系统里最核心的、也是最容易被人忽略的就是设备状态机。我在核对源码的时候发现里面定义了一套相对完整的状态集合这里展开说一下状态含义触发条件后续动作INIT设备已录入未上线后台添加设备等待投放IDLE空闲可租设备入库且检测通过可被扫码锁定LOCKED已被扫码占用用户扫码成功占用设备创建预订单等待支付RENTING租借中支付成功且开锁成功开始计费OVERDUE逾期未还超过应还时间未归还触发逾期扣费推送提醒RETURNING归还/检测中用户提交归还设备放回柜中执行检测流程MAINTENANCE维护中检测异常或运营方触发进入维修工单FAULT故障设备上报故障或检测不通过冻结设备禁止出租这套状态机里最容易出错的是LOCKED到RENTING的边界。现实中经常出现的情况是用户扫码锁定设备但迟迟不支付或者支付成功后开锁指令没送达——如果不在源码里为锁定超时配置兜底清理任务这些设备会一直卡在LOCKED状态别人再也扫不了。所以Redis里要为每个LOCKED状态挂一个TTL比如5分钟超时自动释放回IDLE。这个细节直接决定了设备利用率必须实现。3.3 计费引擎按分钟、按小时、按天怎么设计无人机租赁的计费规则比共享单车复杂得多。共享单车按30分钟计费就完了无人机租赁至少要支持三种计费模式按分钟景区游客场景基础价可能是1元/分钟前10分钟起租。按小时工作室场景30元/小时超过1小时按小时递进。按天行业用户150-300元/天超过晚上8点归还按全天加收。在代码层面计费引擎不应该在订单服务里写死而是要抽成独立的计费规则配置。每个设备类型关联一组费率表支持阶梯计价、日封顶价、超时惩罚价、节假日浮动价。我比较推荐用规则表达式引擎比如Aviator或者Groovy脚本把前30分钟10元此后每分钟1元日封顶80元这种规则做成可配置的表达式运营人员改价格不用发版后台改完即时生效。计费的计算时机也要设计清楚。归还时计算一次订单费用超时事件触发时先追加逾期费用支付成功后跑一次对账确认用户实际支付金额与系统计算金额一致。计费模块千万别做实时累加扣费要事后结算、日终对账不然并发高的时候会出现莫名的金额偏差查到你怀疑人生。4. 多端复用小程序、公众号、APP、H5的架构选择4.1 四种端的定位差异这套源码同时支持四个端很多初看源码的人会以为四端是同一套代码改改样式其实不是。正确的理解是四端共用一套后端API但前端的定位、登录方式、支付方式、能力边界完全不同。端核心定位登录方式支付方式独有能力微信小程序C端用户主入口wx.login code2session微信支付扫码/蓝牙/订阅消息公众号消息触达老客运营OAuth2.0网页授权JSAPI支付模板消息/客服消息APP运维/管理/重度用户账号密码手机验证码微信/支付宝/余额蓝牙直连/离线定位/推送H5微信外移动端兜底手机号短信验证码H5支付跨平台分享从用户体量上看小程序是绝对的主力公众号负责把用户留下来租完一次之后通过消息推送召回APP主要是给运维人员和高频专业用户用的因为APP才能稳定地使用蓝牙、后台定位、系统级推送这些能力H5则是一个兜底入口用户通过朋友圈链接、网页广告进来不用跳转App也完成整个租赁闭环。后端API在设计的时候必须做到同一套接口服务四端不能是小程序一套、APP一套。统一的方式是所有端都走JWT Token认证登录成功后颁发一个有效期为7天的Token请求头带上Authorization: Bearer token后端统一鉴权。各端拿OpenID/UserID换取Token的入口可以不同但Token体系必须一致这样用户在任何一个端登录之后其他端都能无缝识别。4.2 小程序端的登录态和扫码组件小程序端的接入核心就两个登录态维护和扫码开锁。登录态这块小程序端不能用传统的wx.login拿code换openid之后直接当用户ID用因为openid只能标识这个微信用户在这个小程序里是谁跟你的业务用户体系还没有绑定关系。正确链路是小程序调用wx.login拿到code传给后端后端拿着code调用微信的code2session接口换取openid和session_key然后再查一下这个openid有没有绑定手机号。没绑定就先走手机号授权绑定流程绑定过就直接发Token跳转到首页。扫码这块小程序里调用wx.scanCode拿到扫码结果后传给后端后端验签-查设备-锁定设备-发起支付回流到状态机的LOCKED→RENTING流程。这里有一个比较隐蔽的坑我在实际项目里踩过小程序扫码结果是异步回调的用户扫码后不能立刻关闭页面不然开锁指令根本没发出去。正确做法是扫码成功后跳转到开锁中的等待页轮询后端开锁结果成功后再跳到使用页面这个体验细节直接影响用户对系统的信任度。4.3 公众号端的授权与消息推送公众号端在共享租赁系统里的角色是存量运营不是新用户获取。所以公众号H5页面的核心不是功能全而是把租借流程放在网页里跑通同时把消息触达做深。公众号网页授权分为静默授权和用户信息授权两种。静默授权能拿到openid用于识别用户用户信息授权能拿到头像昵称需要用户主动点击确认。在实际项目里不要让用户一进来就弹授权框那是自杀式体验。合理的方式是进页面先静默授权识别到openid之后如果关联了手机号就直接进系统没关联再引导主动授权。消息推送是公众号端最大的价值。用户下单后推送订单已确认、即将逾期时推送还机提醒、设备检测异常时推送故障通知。这些都是通过微信的模板消息接口实现的需要后端在通知服务里提前申请模板ID并做好参数映射。这套系统的通知服务模块里实现了模板消息异步发送队列实测下来一定要加消息队列缓冲——用户量过千之后同步发消息会阻塞主业务流程页面响应时间会飙升到好几秒。4.4 APP端的蓝牙与实时通信APP端在无人机租赁场景里的地位比较特殊。小程序端有微信的限制蓝牙能力虽然能用但体验不稳定H5端在WebView里调用蓝牙和定位都比较受限。所以APP端是运维人员和高频用户的主力端它承担了两个小程序端做不好的事情第一个是蓝牙开柜。很多智能柜安装在信号不好的地下车库、景区深处4G/5G网络不稳定导致远程开锁失败。APP端支持BLE蓝牙直连柜锁手机靠近之后通过蓝牙发送开锁指令完全不走公网这个能力在离线环境下是救命稻草。实现上APP端对接蓝牙锁的SDK后端下发一个一次性tokenAPP拿着token和柜锁做握手认证认证通过后柜锁开锁。第二个是实时设备状态监控。APP端可以通过长连接WebSocket或者MQTT over WebSocket订阅自己名下的订单和设备状态变化。比如运维人员在APP上看到某台无人机电量低于20%可以直接派单给现场工作人员换电。这个能力在纯H5端很难做到稳定因为移动端浏览器对WebSocket的长连接保活策略非常不友好一会儿就被系统自动杀掉。所以如果你要做重度的设备管理功能建议只在APP端做其他端只保留一个状态查询的降级方案。4.5 后端API如何统一多端请求多端共用一个后端最容易犯的错就是在Controller里写死某端特有的逻辑。我的建议是在网关层或者拦截器里识别请求来源通过请求头里的X-Client-Type字段区分MINIAPP、OFFICIAL_ACCOUNT、APP、H5四个来源然后用三种方式统一处理差异登录方式差异让不同的端各自实现一个AuthProvider接口传入不同的Code/验证码返回统一的Token。支付渠道差异封装一个PaymentStrategy接口小程序走微信小程序支付公众号走JSAPI支付APP走APP支付H5走H5支付但返回值统一成订单号支付参数。消息推送差异封装一个NotifyService后端其他服务只调notifyService.send(userId, scene, data)具体是发小程序订阅消息还是公众号模板消息由NotifyService内部根据用户的绑定渠道自动决策。这样统一之后业务层的代码就不需要关心当前是哪个端在调我整个系统维护起来才会顺畅。5. 无人机租赁特有的IoT对接与设备管理5.1 锁控、蓝牙、GPS的对接共享租赁系统不同于普通商城系统的地方就在于它要跟物理世界打交道。无人机租赁场景下至少要对接三类硬件智能柜锁控、无人机本身的状态、定位模块。先说智能柜锁控。无人机不能随便露天摆放必须放在带锁的柜子里。柜锁的对接方式有两种一种是柜子自带4G通信模组云端直接下发HTTP或MQTT指令开锁另一种是纯蓝牙锁需要用户手机靠近之后通过蓝牙开锁。两种方式在系统架构上要共存因为不同柜子的型号不一样运维团队不可能只买一种柜子。再说无人机本身的状态获取。目前市面上大部分消费级和行业级无人机没有开放的租借SDK你不能直接通过API读取电机转速飞行日志这些数据。实际操作中系统能拿到的是设备上的物联网盒子上报的数据——比如一个带有GPS和4G模组的外挂模块能上报设备是否在柜中、当前经纬度、运动状态静止/移动/飞行。这套源码里设备服务模块对接的就是这一类物联网盒子而不是无人机厂商的私有协议。这一点在立项初期就要想清楚不然会钻进集成大疆SDK的兔子洞出不来。5.2 设备状态上报与离线处理设备状态上报推荐走MQTT协议不要走HTTP轮询。原因很简单无人机的电量、位置、姿态数据是高频变化的HTTP轮询要么延迟高要么浪费带宽。在系统里部署一个EMQX这类MQTT Broker无人机上的物联网盒子通过MQTT上报状态后端通过订阅主题接收数据写入Redis缓存实时状态再做异步落库和历史分析。离线处理是最容易忽略的。设备一旦进了地下车库、隧道这些无信号区域上报会中断。如果系统不做离线补偿可能出现的情况是用户明明已经归还了无人机但系统里显示还在租借中超时扣费误伤用户。所以必须在设备服务里做离线数据补偿机制设备恢复连接后上报一条包含离线期间关键事件的数据包比如开机时间运动轨迹柜门开关后端根据这些数据回放设备状态修正订单的归还时间。这个机制在源码里是用一个独立的OfflineReplayTask实现的我建议你保留不要图省事删掉。5.3 电量与维护周期管理无人机是耗电大户一块电池飞30分钟就没了而且电池寿命是消耗品充放循环500次之后衰减明显。共享租赁系统必须把电量管理提升到和故障管理一样的优先级。我在源码里看到设备服务模块有一张device_battery_log表记录每次状态上报时的电量百分比。这里我建议你基于这张表做三个联动动作电量低于20%时设备自动从可租状态切换为待充电状态禁止新订单产生。电量低于10%时向运维人员APP推送充电工单附带设备编号和柜子位置运维人员还机时顺手换电池。电池充放循环次数达到阈值比如300次时生成电池更换建议单提醒运营方准备新电池避免电池在用户使用中突然关机引发客诉。维护周期同理无人机运行一定小时数后需要校准IMU、更换桨叶、检查云台。运维模块不应该只有坏了再修的响应式机制而应该建立按飞行时长触发保养的预防性机制。每次用户归还后系统根据本次飞行时长累计到设备总飞行时长达到保养阈值时自动将设备状态标记为MAINTENANCE强制进入保养流程。这样做能显著降低设备故障率一个很小的设计就能避免很多人为疏忽。6. 计费、押金、风控钱相关的事要格外小心6.1 押金流程冻结还是扣款共享租赁系统的资金流设计直接决定业务能不能长期运转。押金是这里面的第一道坎。很多刚接触租赁系统的开发者会想当然地调用微信支付冻结接口来收押金。但实际上微信支付的资金冻结能力只对特定行业开放普通租赁业务尤其是无人机这种高价值品类大概率过不了审核。支付宝那边情况类似虽然有一个预授权接口但同样有严格的行业准入限制。实际项目中常用的替代方案有两种余额充值逻辑冻结用户先充值一笔钱到平台余额下单时系统把押金金额对应的余额冻结起来。订单结束后如果设备无损余额解冻如果有损坏直接从冻结余额里扣。这种方式实现简单但需要做好用户余额的流水记录而且用户可能不愿意把一大笔钱充值到陌生平台。信用免押对接第三方信用分体系比如微信支付分、支付宝芝麻信用满足一定分数门槛的用户免押金。这是目前体验最好的方案但个人开发者和中小企业基本没有直连接口需要找服务商代理或等业务规模上来后再申请。这套源码里押金模块默认实现的是方案一即余额冻结逻辑。要注意的是押金冻结和解冻必须走独立的状态字段不能和租金混在一起。我在源代码里看到订单表里有deposit_status字段FREEZE、FROZEN、UNFREEZING、DEDUCTED这个设计是合理的建议在其他模块的订单表里也保持同样的字段语义不要混用。6.2 超时未还的自动扣费无人机租赁最常见的问题纠纷就是超时未还。用户说我多飞了20分钟系统说你超时了2小时两边口供对不上。所以超时扣费逻辑必须完全自动化防止客服人工处理时的扯皮。推荐的设计是订单到期前30分钟系统向用户推送即将到期提醒到期后10分钟宽限期宽限期结束后触发超时结算每30分钟计一次超时费。整个流程跑在RabbitMQ的延迟队列里代码逻辑非常清晰。这里有一个很多人会忽略的问题超时费上限必须设置上限封顶。不能让用户因为一次超时被扣出天价费用。我在设计计费规则的时候会把日封顶价应用在超时费上比如超时费最多累计到当天的租赁价上限超过上限后不再累加。这样既保护了用户也给了运营方回收设备的缓冲时间。6.3 设备损坏的责任判定无人机是精密设备摔机、撞树、进水都有可能。租赁系统必须有完整的设备状态记录链才能在纠纷时说得清这个用户到底有没有弄坏它。关键做法是双端留痕租出前系统引导用户按照预设点位拍照机身、云台、桨叶、电池上传后归档归还时再引导用户按同样点位拍照或者说柜内检测传感器自动判定。这两组照片都关联到订单上一旦后续发现异常系统可以直接对比照片判断损坏是否发生在租期内。更深一层可以在无人机上挂载冲击传感器或者利用物联网盒子的加速度计数据记录租借期间是否发生过剧烈撞击。有了这条数据链客服处理纠纷的时候就能硬气地拿出系统记录到你的设备在X月X日X时发生了异常冲击这样的事实依据而不是靠双方吵。资金这块整体思路总结下来就一句话押金要独立冻结超时费要自动结算且封顶损坏判定要有数据链。有了这三层保障共享无人机租赁业务才能在高客单价的品类上站稳脚跟。7. 源码落地与二次开发的高频踩坑点7.1 状态机边界LOCKED状态超时未释放前文提到过用户扫码锁定设备后如果中途放弃支付设备会一直卡在LOCKED状态。这套源码里虽然设计了一个RedisDelayedTask来做超时释放但我在代码审查中发现它只在单机部署时有效。一旦你部署了多个实例这个延迟任务的执行节点可能和用户扫码的节点不一致导致锁释放不成功。解决方法有两个一是把这种定时清理任务收敛到一个独立的调度服务里用XXL-Job或ElasticJob这类分布式调度框架保证同一时刻只有一个实例在执行清理二是用Redis的分布式锁加锁成功后才执行释放操作。二选一别两个都不做。7.2 多端登录态映射openid混淆这是多端系统最常见的线上事故来源。同一个用户在小程序里是openid_A在公众号里是openid_B在APP里是user_id_C如果后端没有可靠地绑定这些身份用户在公众号端登录后会看到一个空账户订单全丢了。解决方案是在数据库里建一张user_bind表把同一手机号下所有端的身份标识关联起来。主键用用户业务的UUID每个端存各自的openid/unionid登录时以手机号为准去关联。只要用户绑定过手机号他在哪个端登录都是同一个业务账户。这套源码里用户服务模块的UserBindService就是干这件事的但我看过很多人二次开发时图省事跳过了手机号绑定流程直接拿openid当用户ID后患无穷。7.3 支付回调的幂等处理支付回调是共享租赁系统里最容易出事故的环节。微信和支付宝的支付通知机制是多次通知直到你确认成功所以回调接口必须做幂等处理不然同一个支付成功事件到达两次订单金额会被重复计算。我比较推荐的实现方式是先查本地支付单表看这笔微信支付单号是否已经处理过如果已经处理过直接返回成功响应不再执行业务逻辑。在数据库中给payment_no字段加唯一索引作为兜底的并发防护。这套源码里有一个PaymentCallbackHandler处理这个逻辑但我发现它只做了幂等判断没有做消息队列削峰。高并发场景下支付回调直接写数据库会打爆连接池建议在回调入口先塞进MQ消费端再做幂等处理。7.4 智能柜开锁指令超时实际运营中开锁指令到达设备端并不保证百分之百成功。设备休眠了、网络漫游了、电池没电了都会导致指令超时。不能在超时后直接给用户退款了事那样用户会投诉我钱都付了柜子没开。正确做法是开锁指令下发后设置一个30秒的确认窗口。如果30秒内收到设备端开锁成功的ACK订单进入RENTING状态如果超时未确认先进入处理中状态同时自动触发重试指令重试两次仍然失败才进入退款流程。整个过程的每一步都要记录日志方便客服排查。这套源码里把重试逻辑放在了DeviceCommandGateway里用了Spring的Retryable注解这个设计可以直接保留。7.5 部署环境里的常见问题最后说几个部署时容易翻车的点都是我在实际环境里踩过的MySQL时区共享租赁的所有计费都跟时间相关。数据库连接串里必须带serverTimezoneAsia/ShanghaiJVM启动参数里加-Duser.timezoneAsia/Shanghai不然后端时间跟手机上差8个小时计费会乱套。Redis持久化策略别忘了配置RDB和AOF至少开一个。系统在运行过程中会把设备状态、Token、分布式锁都放在Redis里如果Redis一重启全丢所有在线用户的登录态都会失效设备状态也要全部重新上报。Nginx上传大小限制用户还机时拍的照片、视频都要上传到服务器。Nginx默认允许上传1MB不调大就会导致用户还机时传不了照片订单卡在归还中状态。配置项是client_max_body_size 50m实测50MB够用。HTTPS必须全站开启微信小程序、公众号的接口域名强制要求HTTPS而且不能用自签名证书。H5端的扫码和支付流程也需要HTTPS这个上线前就申请好证书别等到联调时手忙脚乱。这套系统的整体骨架是合理的JAVA技术栈的选型经得起推敲状态机的设计也照顾到了租赁业务里特殊的边界情况。如果你准备拿源码二次开发我的建议是按上面提到的问题逐项排查先把状态机边界和支付幂等搞定再动业务代码。用户体系、计费规则都可以后补但状态机和资金链路一旦设计错了后面改起来成本非常高。这套系统我从前端看到后端从单体架构看到多端适配整体是能打70分的剩下的30分需要你在真实运营环境里用数据和用户反馈去填满。
返回列表