ChapterOrderService.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. <?php
  2. namespace App\Modules\Subscribe\Services;
  3. use DB;
  4. use App\Modules\User\Services\UserService;
  5. use App\Modules\Subscribe\Models\ChapterOrder;
  6. class ChapterOrderService
  7. {
  8. //判断是否订购
  9. public function checkIsOrdered($uid, $bid, $cid)
  10. {
  11. $chapter_model = new ChapterOrder();
  12. $chapter_model->setCurrentTable($uid);
  13. return $chapter_model->where('uid', $uid)
  14. ->where('bid', $bid)
  15. ->where('cid', $cid)
  16. ->count();
  17. }
  18. //判断本书是否订购过
  19. public static function checkBookIsOrdered($uid, $bid){
  20. $chapter_model = new ChapterOrder();
  21. $chapter_model->setCurrentTable($uid);
  22. return $chapter_model->where('uid', $uid)
  23. ->where('bid', $bid)
  24. ->count();
  25. }
  26. /**
  27. * 根据uid章节订购信息
  28. * @return
  29. */
  30. public function getByUid($uid, $page_size)
  31. {
  32. $chapter_model = new ChapterOrder();
  33. $chapter_model->setCurrentTable($uid);
  34. return $chapter_model->where('uid', $uid)->orderBy('created_at', 'desc')->paginate($page_size);
  35. }
  36. /**
  37. * 根据用户id获取用户的订购记录
  38. * @param $uid 用户id
  39. * @param string $startTime 开始时间
  40. * @param string $endTime 结束时间
  41. * @param bool $isAll 获取所有
  42. * @return mixed
  43. */
  44. public static function getRecordByUid($uid, $startTime = "", $endTime = "", $isAll = false)
  45. {
  46. $chapter_model = new ChapterOrder();
  47. $chapter_model->setCurrentTable($uid);
  48. $chapter = $chapter_model->where('uid', $uid)->orderBy('updated_at', 'desc');
  49. if ($startTime) {
  50. $chapter->where('updated_at', '>=', $startTime);
  51. }
  52. if ($endTime) {
  53. $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
  54. }
  55. if ($isAll) {
  56. return $chapter->get();
  57. } else {
  58. return $chapter->paginate();
  59. }
  60. }
  61. /**
  62. * 获取章节消费总额
  63. * @param $uid
  64. * @return mixed
  65. */
  66. public static function getChapterTotalConsume($uid)
  67. {
  68. $chapter_model = new ChapterOrder();
  69. $chapter_model->setCurrentTable($uid);
  70. return $chapter_model->where('uid', $uid)->sum('fee');
  71. }
  72. /**
  73. * 获取章节消费总额
  74. * @param $uid
  75. * @return mixed
  76. */
  77. public static function getChapterTotalConsumeByUserIdAndTime($uid, $startTime = "", $endTime = "")
  78. {
  79. $chapter_model = new ChapterOrder();
  80. $chapter_model->setCurrentTable($uid);
  81. $chapter = $chapter_model->where('uid', $uid);
  82. if ($startTime) {
  83. $chapter->where('updated_at', '>=', $startTime);
  84. }
  85. if ($endTime) {
  86. $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
  87. }
  88. return $chapter->sum('fee');
  89. }
  90. /**
  91. * 获取章节消费总额(确切时间段)
  92. * @param $uid
  93. * @return mixed
  94. */
  95. public static function getChapterTotalConsumeByUserIdAndAccTime($uid, $startTime = "", $endTime = "")
  96. {
  97. $chapter_model = new ChapterOrder();
  98. $chapter_model->setCurrentTable($uid);
  99. $chapter = $chapter_model->where('uid', $uid);
  100. if ($startTime) {
  101. $chapter->where('updated_at', '>=', $startTime);
  102. }
  103. if ($endTime) {
  104. $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
  105. }
  106. return $chapter->sum('fee');
  107. }
  108. /**
  109. * 获取订购章节数
  110. * @param $uid
  111. * @return mixed
  112. */
  113. public static function getUserRecordCount($uid)
  114. {
  115. $chapter_model = new ChapterOrder();
  116. $chapter_model->setCurrentTable($uid);
  117. return $chapter_model->where('uid', $uid)->count();
  118. }
  119. /**
  120. * 根据uid章节订购信息
  121. * @return
  122. */
  123. public static function addOrderAndDecrUserBalance($data, $uid)
  124. {
  125. $chapterOrder = new ChapterOrder();
  126. $chapterOrder->setCurrentTable($uid);
  127. $chapterOrder->uid = $uid;
  128. $chapterOrder->bid = $data['bid'];
  129. $chapterOrder->cid = $data['cid'];
  130. $chapterOrder->fee = $data['fee'];
  131. $chapterOrder->chapter_name = $data['chapter_name'];
  132. $chapterOrder->book_name = $data['book_name'];
  133. $chapterOrder->send_order_id = $data['send_order_id'];
  134. $chapterOrder->distribution_channel_id = $data['distribution_channel_id'];
  135. $user = UserService::getById($uid);
  136. DB::beginTransaction();
  137. $res = $result1 = $result2 = null;
  138. try {
  139. if ($user->charge_balance >= $data['fee']) {
  140. $chapterOrder->charge_balance = $data['fee'];
  141. $chapterOrder->reward_balance = 0;
  142. $res = $chapterOrder->save();
  143. $result1 = $user->decrement('balance', $data['fee']);
  144. $result2 = $user->decrement('charge_balance', $data['fee']);
  145. } elseif ($user->charge_balance > 0) {
  146. $chapterOrder->charge_balance = $user->charge_balance;
  147. $chapterOrder->reward_balance = $data['fee'] - $user->charge_balance;
  148. $reward = $data['fee'] - $user->charge_balance;
  149. $res = $chapterOrder->save();
  150. $result1 = $user->decrement('balance', $data['fee']);
  151. $result2 = $user->decrement('charge_balance', $user->charge_balance);
  152. $result3 = $user->decrement('reward_balance', $reward);
  153. } else {
  154. $chapterOrder->charge_balance = 0;
  155. $chapterOrder->reward_balance = $data['fee'];
  156. $res = $chapterOrder->save();
  157. $result1 = $user->decrement('balance', $data['fee']);
  158. $result2 = $user->decrement('reward_balance', $data['fee']);
  159. }
  160. if ($user->is_new == 1) {
  161. $user->is_new = 0;
  162. $user->save();
  163. }
  164. } catch (\Exception $e) {
  165. //\Log::info($e);
  166. }
  167. if ($res && $result1 && $result2) {
  168. DB::commit();
  169. return true;
  170. }
  171. DB::rollback();
  172. return false;
  173. }
  174. /**
  175. * @param $send_order_id
  176. * @param $start_time
  177. * @param $end_time
  178. * @return array ['total'=>133,'charge_balance'=>45,'reward_balance'=>$reward_balance]
  179. */
  180. public static function getSendorderTotal($send_order_id, $start_time, $end_time)
  181. {
  182. $chapter_model = new ChapterOrder();
  183. $charge_balance = 0;
  184. $reward_balance = 0;
  185. $fee = 0;
  186. /*
  187. for ($i = 0;$i<512;$i++){
  188. $chapter_model->setCurrentTable($i);
  189. $charge_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('charge_balance');
  190. $reward_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('reward_balance');
  191. $fee += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('fee');
  192. }*/
  193. $chapter_model = null;
  194. return ['total' => $fee, 'charge_balance' => $charge_balance, 'reward_balance' => $reward_balance];
  195. }
  196. }