BookOrder.php 5.6 KB

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