2018-03-14

  • 将本账期、本通道里面的支付全部设置为短款、撤销/退款记录为长款

  • 找出本账期所有的对账文件

  • 打开每一个文件, 遍历每一条记录

    1. 如果Ksher单号不是900(配置文件)开头的,跳过
    2. 对账单交易插入通道交易记录表
    3. 以单号和交易类型判断pay_flow_check记录
      • 记录存在:

        • 时间、币种、金额、单号相同:平账
        • (时间、币种、金额、单号)有不同:错账

        更新pay_flow_check的通道交易金额和通道手续费、通道币种、消费者支付币种、消费者支付金额

      • 记录不存在:
        插入到pay_flow_check表

        • 支付:长款
        • 退款/撤销:短款
  • 更新交易的结算金额、手续费、VAT等

  • 更新平账记录的结算状态为可结算,其余为不可结算

转移记录 *


  1. 从pay_flow表中将昨天/通道(成功的记录)中记录转移到pay_flow_check当中。
  2. 同步商户的费率(注意:隔天退款用支付时候的费率)
  3. 计算手续费、VAT、结算金额。
  4. 同步商户的结算币种

对账 *

  1. 将pay_flow_check中昨天/通道:(已对账、不可结算)&(支付全部设置为短款,撤销/退款记录为长款)
  2. 找出昨天/通道的所有的对账文件
  3. 删除通道交易记录表channel_record
  4. 打开每一个文件, 遍历每一条记录
    4-1. 如果Ksher单号不是900(配置文件)开头的,跳过
    4-2. 交易记录插入通道交易记录表channel_record
  5. 更新对账状态
    • 支付:
      channel_record LEFT JOIN pay_flow_check(支付时间、币种、金额、单号)
      1. 相同: 平账
      2. 不相同: 错账
    • 退款/撤销:
      channel_record LEFT JOIN pay_flow_check(退款时间,退款单号,金额)
      1. 相同: 平账
      2. 不相同: 错账
  6. 分(支付、退款、撤销) 对账单中有但是pay_flow_check中没有的记录:
    插入到pay_flow_check表中(不可结算,ksher交易金额为0,
    支付:长款 退款/撤销: 短款
  7. 将平账记录调整为可结算。

生成报表

  1. 获取指定国家/通道/(开始日期-结束日期)下的所有商户
  2. 排除测试商户
  3. 计算 开始日期-结束日期 跨越几个自然月
  4. 遍历自然月(如果跨月,每个商户会生成2张报表):
    • 获取本自然月里面的的交易开始日期和结束日期,记做month_begin_day, month_end_day
    • 遍历商户:
      1. 遍历 month_begin_day, month_end_day,生成data_list:
        • 获取所有的支付订单信息
        • 减去当日(退款/撤销)金额 == 支付金额的单子
      2. 遍历data_list写入到excel
      3. 计算每天的交易金额:
        • 单日支付、退款、撤销金额合计
        • 当日隔天退款合计
      4. 汇总本月本商户的当日金额和隔日金额,交易记录行数,结算金额写入excel。
      5. 根据开始日期和结束日期,生成excel
  5. 压缩excel打包

出款

  1. 寻找通道/账期的默认出款日期(默认月份记为A)
  2. 在work_for_bill中寻找是否有这个月的记录:
    • 没有的话,加入一条记录到work_for_bill
  3. 获取所有的交易商户
  4. 减去测试商户
  5. 获取账期的跨自然, span_month
  6. 遍历span_month
    • 获取自然月的交易开始日期begin_date和结束日期end_date
    • 获取begin_date和end_date之间的交易商户
    • 删除测试商户
    • 遍历商户:
      • 生成一个出款单号
      • 遍历交易日
        • 计算交易金额,手续费,VAT、wht(可结算的交易)
        • 插入到Pay_out_detail
      • 插入到汇总表 pay_out_sum
      • 更新pay_flow_check的pay_out_id
      • 如果本月交易金额 > 0:
        * 生成发票号 get_tax_no(begin_date, end_date, mch_id, pay_channel)
        * 更新发票号

生成发票

  1. 查找本通道、本商户的开始日期和结束日期是否有发票号
    • 如果有,返回
  2. 通过结束日期找到默认的结算日期
  3. 找到本月已经出发票的最大次数down_times
  4. 当前号 = down_times + 1
  5. 根据当前号获取佛历发票号
  6. 更新work_for_bill中的target_month和download_times

撤销出款

  1. 清空pay_out_detail中本账期的数据
  2. 将pay_out_sum中本账期的数据清除。
  3. 将pay_flow_check中的pay_out_id清空,并且置状态为可结算,结算时间设置为''
  4. work_for_bill中download_times减去发票的数量。

推荐阅读更多精彩内容