BookOrder.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. <?php
  2. namespace App\Modules\Subscribe\Models;
  3. use Illuminate\Database\Eloquent\Model;
  4. use DB;
  5. use App\Modules\User\Services\UserService;
  6. class BookOrder extends Model
  7. {
  8. protected $connection = 'api_mysql';
  9. protected $table = 'book_orders';
  10. protected $fillable = ['distribution_channel_id', 'bid', 'book_name', 'uid', 'u', 'fee', 'send_order_id', 'charge_balance', 'reward_balance'];
  11. /**
  12. * 获取订购记录
  13. * @param $uid
  14. * @return mixed
  15. */
  16. public static function getRecord($uid, $page_size = 15)
  17. {
  18. return self::where('uid', $uid)->select('id', 'bid', 'book_name', 'u', 'distribution_channel_id', 'fee', 'uid', 'created_at')->orderBy('created_at', 'desc')->paginate($page_size);
  19. }
  20. /**
  21. * 根据用户id获取用户的订购记录
  22. * @param $uid 用户id
  23. * @param string $startTime 开始时间
  24. * @param string $endTime 结束时间
  25. * @param bool $isAll 获取所有
  26. * @return mixed
  27. */
  28. public static function getRecordByUid($uid, $startTime = "", $endTime = "", $isAll = false)
  29. {
  30. $search_object = self::where('uid', $uid)->orderBy('updated_at', 'desc');
  31. if ($startTime) {
  32. $search_object->where('updated_at', '>=', $startTime);
  33. }
  34. if ($endTime) {
  35. $search_object->where('updated_at', '<=', $endTime . ' 23:59:59');
  36. }
  37. if ($isAll) {
  38. return $search_object->get();
  39. } else {
  40. return $search_object->paginate();
  41. }
  42. }
  43. /**
  44. * 根据用户id获取用户的一段时间内的消费总额
  45. * @param $uid 用户id
  46. * @param string $startTime 开始时间
  47. * @param string $endTime 结束时间
  48. * @return mixed
  49. */
  50. public static function getBookTotalConsumeByUserIdAndTime($uid, $startTime = "", $endTime = "")
  51. {
  52. $search_object = self::where('uid', $uid);
  53. if ($startTime) {
  54. $search_object->where('updated_at', '>=', $startTime);
  55. }
  56. if ($endTime) {
  57. $search_object->where('updated_at', '<=', $endTime . ' 23:59:59');
  58. }
  59. return $search_object->sum('fee');
  60. }
  61. /**
  62. * 获取订购记录
  63. * @param $uid
  64. * @return mixed
  65. */
  66. public static function getRecordByuidBid($uid, $bid)
  67. {
  68. return self::where('uid', $uid)->where('bid', $bid)->select('bid', 'book_name', 'u', 'distribution_channel_id', 'fee', 'uid')->first();
  69. }
  70. static function save_book_order($data)
  71. {
  72. $insert_data = array();
  73. $insert_data['uid'] = $data['uid'];
  74. $insert_data['distribution_channel_id'] = $data['distribution_channel_id'];
  75. $insert_data['fee'] = $data['fee'];
  76. $insert_data['bid'] = $data['bid'];
  77. $insert_data['book_name'] = $data['book_name'];
  78. $insert_data['send_order_id'] = $data['send_order_id'];
  79. $insert_data['charge_balance'] = $data['charge_balance'];
  80. $insert_data['reward_balance'] = $data['reward_balance'];
  81. return self::firstOrCreate($insert_data);
  82. }
  83. public static function addOrderRecodeAndDecrUserBalance($data, $uid)
  84. {
  85. DB::beginTransaction();
  86. $res = $result1 = $result2 = null;
  87. try {
  88. $user = UserService::getById($uid);
  89. if ($user->charge_balance >= $data['fee']) {
  90. $data['charge_balance'] = $data['fee'];
  91. $data['reward_balance'] = 0;
  92. $res = BookOrder::create($data);
  93. $result1 = $user->decrement('balance', $data['fee']);
  94. $result2 = $user->decrement('charge_balance', $data['fee']);
  95. } elseif ($user->charge_balance > 0) {
  96. $data['charge_balance'] = $user->charge_balance;
  97. $data['reward_balance'] = $data['fee'] - $user->charge_balance;
  98. $res = BookOrder::create($data);
  99. $result1 = $user->decrement('balance', $data['fee']);
  100. $result2 = $user->decrement('charge_balance', $user->charge_balance);
  101. $result3 = $user->decrement('reward_balance', $data['reward_balance']);
  102. } else {
  103. $data['charge_balance'] = 0;
  104. $data['reward_balance'] = $data['fee'];
  105. $res = BookOrder::create($data);
  106. $result1 = $user->decrement('balance', $data['fee']);
  107. $result2 = $user->decrement('reward_balance', $data['fee']);
  108. }
  109. if ($user->is_new == 1) {
  110. $user->is_new = 0;
  111. $user->save();
  112. }
  113. } catch (\Exception $e) {
  114. \Log::info($e);
  115. }
  116. if ($res && $result2 && $result1) {
  117. DB::commit();
  118. return true;
  119. }
  120. DB::rollback();
  121. return false;
  122. }
  123. public static function getOrderInfos($id_begin, $id_end)
  124. {
  125. return self::select('uid', 'bid')->where('id', '>=', $id_begin)->where('id', '<', $id_end)->get();
  126. }
  127. public static function getOrderInfoCount()
  128. {
  129. return self::max('id');
  130. }
  131. }