美文网首页
库存系统自动排车功能模块设计

库存系统自动排车功能模块设计

作者: 先生zeng | 来源:发表于2020-04-16 16:36 被阅读0次

    自动排车功能模块概述

    用户在租车业务中,在选定城市、门店、车型以及时间,下单成功后,订单部分会生成一个订单。此时该订单只下单了门店中有库存的车型,还需要去把该车型中有库存的车辆进行排车。

    自动排车就是主动去订单系统捞取未排车的订单,通过一系列业务规则的处理,按照排车优先级的顺序,选出满足一定时间段内无占车单的车辆,排给该订单。

    设计点:

    1. 捞取未排车的订单
      2.获取满足条件的,门店中有库存的车型的车辆数据,
      3.过滤条件
      车辆默认取短租运营车辆(包含已租赁与待租赁)
      过滤未完成调度工单和拦截工工单(加盟商订单跳过)chooseVehicleService.removeBlockVehicle(vehList);
      交叉占车单过滤
      限行过滤
      区分车辆二级状态
      待租赁的调用顺风车工单验证(加盟商订单没有顺风车订单) chooseVehicleService.passingJudge(vehMap, passingList);
      已租赁车辆按需求文档标记排序
      排序后取第一辆车作为可排车辆

    总体思路:

    优先排取车门店车辆,取车门店没车再排供车门店车辆,供车门店也没车就计算可供车门店,挨个查是否有可排车辆.

    设计考虑点:

    1、在获取门店车型中的车辆库存时,可能会与无车升级的产时冲突,因为是分布式系统,这里需要加一个分布式锁。(使用redis实现,setNex,超时时间设置为10秒,同时使用try-catch-finally,保证一定会释放锁)。

    2.分布式锁的选型。 zookeeper、数据库唯一索引实现、redis实现。

    1. 业务处理复杂,考虑避免OOM,内存泄漏。。

    2. 一些上下游系统调用以及处理日志记录,用于排查问题以及确认排车步骤是否合理。

    5.此功能与无车升级某些处理逻辑是一样的,无车升级为该车型无库存,此时可以换同一级别车型或者高级别的车型,是自动触发的,类似与“排车”,有些功能可以进行抽象后共用。

    优化点:

    按照顺序来,应该是一个个订单去遍历排车,但是这样处理因为业务过程复杂导致效率低下。

    可以进行分组处理,按照城市进行分组后,各个城市的租车订单并行处理,并行去循环遍历订单处理。

    补偿机制: 某些特殊条件的下,某些订单一直排不上车,此时可以进行后台手动排车。

    其他思考点:

    自动排车规则为半小时进行一次自动排车,此依据是业务规则还车后,需要至少半小时的还车整备时间,租车时一般是整点或者半小时的时间,因此按照业务设计为半小时一次。

    同时分布式锁的锁定时间设计,需要考虑业务处理时间过程,这个时间需要设置多少秒最合适,目前是10秒,这是根据经验设置的。

    待续。

    相关文章

      网友评论

          本文标题:库存系统自动排车功能模块设计

          本文链接:https://www.haomeiwen.com/subject/emfauhtx.html