已有 32 条评论

  1. Enterprise Architect
    画图

  2. ABBYY_Screenshot_Reader_11_Trial
    OCR识别

  3. 在线二维码识别:
    https://uutool.cn/qrcode-decode/

  4. excel->markd
    https://tableconvert.com/own

  5. 华为体检套餐:南京华为454套餐A(男性≤35岁)

  6. Aithusa Aithusa

    https://www.hackerrank.com/tests/fq3qhfkt1qd/login?b=eyJ1c2VybmFtZSI6ImFpdGhvc2FAb3V0bG9vay5jb20iLCJwYXNzd29yZCI6ImE0NTZjMTk2IiwiaGlkZSI6dHJ1ZSwiYWNjb21tb2RhdGlvbnMiOnsiYWRkaXRpb25hbF90aW1lX3BlcmNlbnQiOjUwfX0=

  7. Aithusa Aithusa

    https://bsurl.cn/J9VCgVqItxwv2

  8. Aithusa Aithusa

    https://bsurl.cn/v2/KTZuVavv

  9. Aithosa Aithosa

    16岁以下和70岁以上没法预定机票协议价,会转公布运价

    1. Aithosa Aithosa

      16-18算成人票,但是又不能享受协议价

      1. Aithosa Aithosa

        18岁就可以带儿童,16-18是成人票但是不能带儿童

        儿童本身是半价(公布运价/全价的半价,成人儿童同舱)

        1. Aithosa Aithosa

          乘机当天的年龄,不是购票的年龄

  10. Aithosa Aithosa

    日历推送:
    每个日历事件需要一个ID,后续需要通过这个Id进行删除操作
    对于预定:乘客每个人用的都是票号,预定人用的是操作单号,每个人独立发送即可
    对于改期:是先增加新的日历事件,再删除老的时间
    1.增加:这个方法和预定日历是一样的,改签预定人用的是改签操作单的Id
    2.删除:这也是个公用方法,和退票一样。由于预定和改期都可以生成事件,所以删的时候也要区分是改期删还是退票删。改期删除预定人用到的是原预订单的Id(由于火车只能改一次,所以就是预订单),退票删除用的是当次操作单(退票单)关联的票(取第一张,也和火车票一次只能退一张也有关),关联的预定或者改期单(票一定是从预定或者改期来的)。
    但是这里有个判断,如果原操作单所有票都退掉了,这时才删除预定人日历。
    删除乘客的日历相对来说较简单,如果是改期,用原票的Id删除事件,如果是退票,用当前票号删除事件

  11. Aithosa Aithosa

    预定时会选择是否是抢票以或者预售,
    目前仅支持一个火车班次预售,即火车班次+出发日期+坐席列表组合,生成这么多需求单,其中第一个为首选的需求单,有个字段标记true

  12. Aithosa Aithosa

    预售和抢票定时任务

    * 对每个预售或抢票订单: * 抢票单, 先看是否预售失败一次,是,则直接去抢票。 * 预售单,或没有没有预售购买失败的抢票单: * 查询余票,有余票,则去占位, 出票。无余票,则直接预订失败。 * 将结果刷新到车次需求表t_train_require_segment; * 如果预售失败,则检查需求单中是否还有其他车次待购买车次, 如果有则将信息刷新到预订单中, 同时将状态刷新为“待出票” * 如果没有其他待购买车次, 则将预订单状态设置为失败, 发起退款。 * 购买成功后, 按真实价格来比较一下用户的支付的票款,多了要退掉。

    查找操作但类型是预售以及抢票的,并且状态是等待处理、处理中、已创建
    之后以操作单维度逐个处理,
    过滤掉需求单在处理中的操作单;操作单非目标状态不处理,查询处理到处理前已经有其他任务处理了
    设置操作单状态(PROCESSING)

    如果是抢票且任一需求单尝试过预售了,直接发起抢票
    如果是预售 或 抢票没有尝试下单过,则开始预售过程

    1. Aithosa Aithosa

      data:image/jpeg;base64,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

    2. Aithosa Aithosa

      抢票:
      直接向网关发起抢票请求
      如果请求成功了,就回写订单的SupplierOrderId,把操作单状态设置为PROCESSING
      如果失败了,
      1.先设置需求车次状态(查找操作单),如果等待处理的需求单还有并且是抢票,就WAIT_PROCESS->PROCESS_FAILED, 所有车次都设置为失败了;否则获取处理中的需求单,PROCESSING->PROCESS_FAILED, 抢票预售PROCESSING->WAIT_PROCESS(需求单如果是抢票,就设置成WAIT_PROCESS,否则预售是PROCESS_FAILED)
      2.看是不是需要继续处理,如果是预售并且有已创建状态的需求单,就继续处理,如果是抢票并且需求单里有等待处理的,也是需要继续处理,否则不需要继续处理
      3.2不满足的话就是表示失败,通知出票失败(修改操作单状态,写入供应商返回的失败信息,释放TR);刷新客票状态;创建退款单,发起退款(支付中心)

      1. Aithosa Aithosa

        抢票开始了
        重点来了,看看你的票抢到了吗?

        §§ 重中之重之定时任务触发
        目前的定时任务触发是由任务调度中心统一触发的,触发时间点如下:
        0,1,2,3,4,5,10,20,30,40,50 0,1,2,30,31,32 * ?
        你看的懂吗?
        看下反向解析的结果吧,每小时的第0、1、2、30、31、32分的0、1、2、3、4、5、10、20、30、40、50秒的时候触发,因为开售时间都是整点或者半点,所以定时任务集中在整点和半点的前几分钟,这前几分钟的前几秒更为重要。

        不可避免的先后问题
        当需要抢的订单数大于1时,肯定就会存在顺序的问题,
        目前配置是30个线程同时开始抢票
        拿前5秒的定时任务来看下
        0秒的定时任务到达机器1,
        机器1捞到60个待抢票单,
        然后用30个线程开始抢票(每一个开始前会判断一下是不是被其他机器或线程处理了)
        1秒的定时任务到达机器2,
        机器2捞到60个待抢票单,(这些单可能会和上一个的存在重复)
        然后用30个线程开始抢票

        哪些场景可能会慢?
        一次捞出60个,虽然是第0秒触发的,但是你排在第60位,所以可能不如后面的定时任务触发的快
        第二个定时任务虽然也捞出来60个订单,但是会存在和第一个定时任务重复的订单,虽然有并发控制,但是这个定时任务可能实际只能处理30个订单,其他的都是重复的,存在浪费的可能
        就是上面提到的,目前使用任务调度中心存在一个问题就是一次只能调度一台机器,存在其余三台(生产环境目前是4台机器的集群)闲着的情况

      2. Aithosa Aithosa

        抢票不是一个需求单一个需求单分别抢的,而是把所有信息一次提供给高铁管家

      3. Aithosa Aithosa

        预售 或 抢票没有尝试下单过
        先检查余票,如果有余票的话先发起占位,
        否则发起抢票,同上
        如果是预售,并且没有CREATED的需求单了,就通知没有余票(出票失败流程)

        检查余票,需求单按车次分组,每个车次都检查下余票,
        如果所有坐席都没票,记录所有该车次需求单状态,PROCESS_FAILED(纯预售,抢票是改成WAIT_PROCESS)

        如果有余票,遍历该车次的需求单,检查对应座位有没有票,没有同上,只针对哪个需求单,有的话:
        1.先更新需求单信息,主要是保存TrainSecrets和票价
        2.更新客票和车次信息,用先匹配的需求单里的座位更新到订单里(航段、票价,座等)
        随后发起占位

        如果已经预售失败了, 直接抢票

        预售且没有其他需求车次(没有CREATED需求单),通知失败

        1. Aithosa Aithosa

          预售抢票定时任务,一个操作单会关联多个需求单,按车次分组(引用map,这样遍历的时候trainNoMap.values()可以遍历不同车次),每个车次校验余票(不考虑日期),遍历这个车次所有的需求单,检查每个坐席的余票,如果找到有满足的余票的坐席,就校验有余票成功,不看其他的了,之后更新这个需求单,用setTrainSecrets和票价,用需求单更新票(座等和票价)和TrainSegmentDo(车次信息)
          如果该需求单坐席无余票,就更新为WAIT_PROCESS(QP),PROCESS_FAILED(预售)
          如果该车次都无余票,更新多有该车次的需求单(这里没更新操作单或者订单)。
          之后发起占位,这个和非预售就大体相同了,

          如果最外层的检查余票失败,会看是不是预售,并且是否所有操作订单关联的需求单都没有已创建的了,是的话正式通知余票不足出票失败

  13. Aithosa Aithosa

    检查车次停售的预售单定时任务
    获取可售期内预售单,查到后调用车次校验接口,如果查不到代表车次停售了,发短信告诉乘客(仅仅发短信,不做其他操作)

    预售和抢票核验乘客定时任务"
    查找预售操作单,取出乘客信息,逐个发送到网关核验

  14. Aithosa Aithosa
    检查12306 票号的补偿服务说明:12306票号是在出票后查询, 查询失败并不影响出票流程, 但对账是强依赖票号,所以在每天对账前检查一下,对于没有票号的票,重新获取一下
  15. Aithosa Aithosa

    车站预售时间的变更分为两种,预售期的修改,车站预售时间的修改

    预售期(实际是可售期)的修改(从Apollo读取,搜索车次时会写入redis,检测到redis数据变更会通知订单),预售日期的配置修改,不分车站,全修改
    RequireSegmentDo,拆分为日期+时间,时间不变,但是日期根据预售期做调整,组合起来之后就是新的开售时间,其中日期是用实际车次的出发日期减去可售期-1,获得开售的日期,时间用原开售时间。
    2.车站预售时间变更
    日期不变,RequireSegmentDo里的开售时间直接换成车站新的开售时间即可。
  16. Aithosa Aithosa

    火车票标签:运行最短、曾经买过、最多预订
    曾经买过

    用户上一次购买该条线路的车次数据,记录为曾经买过标签。上一次的时间控制在3个月之内。超过3个月之后该标签失效
    最多预订

    获取一段时间内用户预订量最多的车次 按照车次的维度进行统计,一段时间是指当前时间的上个月。可预先跑好车次的数据,进行缓存

    规则举例:

    每月的1号统计上个月的预订订单车次的热门进行车次排序,记录出发车站,抵达,月份和车次,并且缓存打上标记,记录TOP7(注:并非所有车次每天都有。暂先记录TOP7)按照不同的出发车站进行统计,例如北京到上海,可能会有多个出发站,则会统计出来TOP7*N该车次失效的时间为下一次该线路的热门车次跑出来为止,如果该线路热门车次没有跑出来,继续沿用之前的缓存。保证一定有最多预订车次用户当月搜索在预售期内、某条线路的的车次,均按照该线路缓存车次,返回最多预订的标记。匹配规则按照TOP3降序

    用户搜索在预售期外的、某条线路的车次,则不返回该标记

    如果某条线路从未有过预订,那么用户搜索的时候,默认将优先出发时间在10-16点之间,再次按照列车类型G/D/T/其他,打上标记展示给客户

    key是出发+到达站,分组为map,之后选出每个对的前7个车次,然后把最终的数据保存到数据表里,这些当月数据都是true状态

    库存查询时会把表里所有状态为true的数据都查走

    1. Aithosa Aithosa

      最多预定,库存查到后会转为set,key是车次+出发+到达,每天查询一次
      匹配标签时,遍历车次,有满足的就都打上标签
      曾经预定的key也是这个

  17. Aithosa Aithosa

    火车票如何保证预售抢票拿到可用的车次密钥:余票校验

  18. Aithosa Aithosa

    火车票:
    搜索+余票校验

    下单:
    进入下单页面,选择乘客会触发乘客校验(网关),
    提交订单(订单)后会触发余票校验(库存),校验通过会提交占位(网关),占位是异步的,之后网关会通知订单占位的结果,并修改操作单,此时前端会轮询操作单状态,
    占位成功后会跳转支付,支付页会查询支付产品信息并展示
    用户支付后会发起提交支付请求到支付中心,支付中心会查询订单支付金额及信息(订单),然后向支付中心提交支付,
    支付中心之后会通知订单结果,订单收到结果之后会发起出票(网关),网关出票之后会通知订单结果,订单获取结果之后会发短信给用户

  19. Aithosa Aithosa

    火车票的车站下钻(下钻+按城市查询)
    火车票的标签
    抢票+预售

  20. Aithosa Aithosa

    火车票:
    发车前25分钟,不提供线上购票,这个在前端有判断,另外也是常规逻辑。

    紧急代购标签:
    取消限制,搜索到车次后,如果供应商能返回25分钟以内的车次,直接展示(过滤8分钟以内的,检票出票5分钟,缓冲3分钟),8-25分钟的车次座位会打标签,预定需要单独收费,不同意的话就只能去车站购票。

    1. Aithosa Aithosa

      供应商不返回的话可以靠主动被动缓存

      如果供应商能够返回25分钟内车次,则过滤8分钟以内的(检票和出票的时间5分钟,缓冲3分钟);8分钟可配置,后续可全面放开,依靠供应商

      如果无法返回25分钟内车次或者需要多个供应商组合,则进行组合查询,这个按后期的接入供应商策略再定
      内容:
      标题:紧急代购服务
      文案:距离发车前25分钟内,只能选择紧急代购服务或者您可自行前往车站购票。请确认能够按时赶到检票口,过期不退。是否成功以最终短信通知为准。{ 线上购票费用为 ¥X/人 }
      操作:前往车站购票 | 继续紧急代购服务
      规则:针对自付费的场景,选择露出括号中内容。

      接口对接:待后期与供应商接口进行对接

      参考携程

添加新评论