Withdraw_rule.php 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: fr*d
  5. * Date: 2018/9/25
  6. * Time: 18:09
  7. * 业务逻辑:
  8. * 时间起始点:用户自上次成功提现起首次资金变化成功发后时间点(>=上次提现时间后的首笔成功资金发生时间(含充值、彩金、活动))
  9. * 时间结束点:当前审核时间
  10. * 彩金、充值活动发生或审核通过时:加入对应的目标流水差额(父订单金额*(要求倍数-1))到提现规则表中的目标流水字段里
  11. * 提现前:计算 目标流水=所有充值成功金额*倍数+目标流水差额的值;下注流水=动态查询;
  12. * donate_start:上次提现时间
  13. * curr_start=getFirstTimeFromMoneyRecharge($idd,$donate_start);
  14. * 提现(审核通过)后:目标流水清零;
  15. */
  16. namespace App\Models;
  17. use Illuminate\Support\Facades\DB;
  18. class Withdraw_rule extends BaseModel
  19. {
  20. protected $table = 'withdraw_rule';
  21. /**
  22. * 增加用户流水增量记录
  23. * @param string $idd 用户账户UUID
  24. * @param mixed $startTime unuse
  25. * @param mixed $endTime unuse
  26. * @param $bettingMoney unuse
  27. * @param $needBettingMoney 差额流水金额
  28. * @return mixed 成功返回记录编号,失败返回错误码
  29. */
  30. protected function setRule($idd, $startTime, $endTime, $bettingMoney, $needBettingMoney)
  31. {
  32. $data = [
  33. 'account_identity' => $idd,
  34. 'start_time' => is_int ($startTime) ? $startTime : strtotime ($startTime) ?? time (),
  35. 'end_time' => is_int ($endTime) ? $endTime : strtotime ($endTime) ?? time (),
  36. 'bettingMoney' => $bettingMoney,
  37. 'updated_at' => date ('Y-m-d H:i:s'),
  38. 'needBettingMoney' => $needBettingMoney,
  39. 'donate_start' => date ('Y-m-d H:i:s'),
  40. ];
  41. return self::insertGetId ($data);
  42. }
  43. /**
  44. * 更新用户增量流水
  45. * @param string $idd 用户账户UUID
  46. * @param $money 父订单金额
  47. * @param int $rate 增量倍数
  48. * @return int
  49. */
  50. protected function updateRule($idd, $money, $rate)
  51. {
  52. $withdrawRule = new self();
  53. $with = $withdrawRule->where ('account_identity', $idd)->first ();
  54. $time = date ('Y-m-d H:i:s');
  55. $ret = 1;
  56. $need = (float)$money * ($rate - 1);//目标流水差额
  57. if (!$with) {
  58. self::setRule ($idd, $time, $time, 0, $need);
  59. } else {
  60. $with->increment ('needBettingMoney', $need);//目标流水差额
  61. $with->updated_at = date ('Y-m-d H:i:s');
  62. $ret = $with->update ();
  63. }
  64. return $ret;
  65. }
  66. /**
  67. * 提现时验证用户的流水记录
  68. * @param string $idd 用户账户编号uuid
  69. * @return null 没有记录返回NULL,成功返回用户当前有效下注总流水和目标总流水
  70. */
  71. protected function check($idd)
  72. {
  73. $where = ['account_identity' => $idd];
  74. $data = self::where ($where)->first (['bettingMoney', 'needBettingMoney', 'donate_start']);
  75. if (!$data) return null;
  76. $time = $data->donate_start;
  77. $bet = (new MoneyBuy())->getBetMoney ($time, $idd);//常规投注
  78. $sixBet = (new SixMoneyBuy())::getBetMoney ($time, $idd);//六合投注
  79. $data->bettingMoney = $bet + $sixBet;//总投注流水
  80. $recharge = Money_recharge::where ('account_identity', $idd)
  81. ->where ('complete_time', '>=', $time) //首笔金额发生时间
  82. ->where ('status', 1) //订单状态为成功
  83. //->whereIn ('trade_type', [11, 14])
  84. ->sum (DB::Raw ('money * rate'));//资金表中的流水倍数和
  85. $data->needBettingMoney += $recharge;//差额流水+资金表中流水要求=总目标流水
  86. return $data;
  87. }
  88. protected function rmRule($idd)
  89. {
  90. return self::where ('account_identity', $idd)->delete ();
  91. }
  92. protected function getRule($id)
  93. {
  94. return self::where ('id', $id)->first ();
  95. }
  96. /**
  97. * 提现成功后清零下注记录和流水差额记录并更新上次提现时间
  98. * @param $idd
  99. * @return int
  100. */
  101. protected function withDraw($idd)
  102. {
  103. $data = self::where ('account_identity', $idd)->first ();
  104. $ret = 1;
  105. if ($data) {
  106. $data->donate_start = date ('Y-m-d H:i:s');
  107. $data->bettingMoney = 0;
  108. $data->needBettingMoney = 0;
  109. $ret = $data->update ();
  110. }
  111. return $ret;
  112. }
  113. }