ChapterOrderService.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  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('id', '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('id', '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 getUserRecordCount($uid)
  96. {
  97. $chapter_model = new ChapterOrder();
  98. $chapter_model->setCurrentTable($uid);
  99. return $chapter_model->where('uid', $uid)->count();
  100. }
  101. /**
  102. * 根据uid章节订购信息
  103. * @return
  104. */
  105. public static function addOrderAndDecrUserBalance($data, $uid)
  106. {
  107. $chapterOrder = new ChapterOrder();
  108. $chapterOrder->setCurrentTable($uid);
  109. $chapterOrder->uid = $uid;
  110. $chapterOrder->bid = $data['bid'];
  111. $chapterOrder->cid = $data['cid'];
  112. $chapterOrder->fee = $data['fee'];
  113. $chapterOrder->chapter_name = $data['chapter_name'];
  114. $chapterOrder->book_name = $data['book_name'];
  115. $chapterOrder->send_order_id = $data['send_order_id'];
  116. $chapterOrder->distribution_channel_id = $data['distribution_channel_id'];
  117. $user = UserService::getById($uid);
  118. if($user->balance < $data['fee']) return false;
  119. DB::beginTransaction();
  120. $res = $result1 = $result2 = $result = null;
  121. try {
  122. if ($user->charge_balance >= $data['fee']) {
  123. $chapterOrder->charge_balance = $data['fee'];
  124. $chapterOrder->reward_balance = 0;
  125. $res = $chapterOrder->save();
  126. //$result1 = $user->decrement('balance', $data['fee']);
  127. //$result2 = $user->decrement('charge_balance', $data['fee']);
  128. $user->balance -= $data['fee'];
  129. $user->charge_balance -= $data['fee'];
  130. } elseif ($user->charge_balance > 0) {
  131. $chapterOrder->charge_balance = $user->charge_balance;
  132. $chapterOrder->reward_balance = $data['fee'] - $user->charge_balance;
  133. $reward = $data['fee'] - $user->charge_balance;
  134. $res = $chapterOrder->save();
  135. //$result1 = $user->decrement('balance', $data['fee']);
  136. //$result2 = $user->decrement('charge_balance', $user->charge_balance);
  137. //$result3 = $user->decrement('reward_balance', $reward);
  138. $user->balance -= $data['fee'];
  139. $user->charge_balance = 0;
  140. $user->reward_balance -= $reward;
  141. } else {
  142. $chapterOrder->charge_balance = 0;
  143. $chapterOrder->reward_balance = $data['fee'];
  144. $res = $chapterOrder->save();
  145. //$result1 = $user->decrement('balance', $data['fee']);
  146. //$result2 = $user->decrement('reward_balance', $data['fee']);
  147. $user->balance -= $data['fee'];
  148. $user->reward_balance -= $data['fee'];
  149. }
  150. if ($user->is_new == 1) {
  151. $user->is_new = 0;
  152. }
  153. $result = $user->save();
  154. } catch (\Exception $e) {
  155. //\Log::info($e);
  156. }
  157. if ($res && $result) {
  158. DB::commit();
  159. return true;
  160. }
  161. DB::rollback();
  162. return false;
  163. }
  164. /**
  165. * @param $send_order_id
  166. * @param $start_time
  167. * @param $end_time
  168. * @return array ['total'=>133,'charge_balance'=>45,'reward_balance'=>$reward_balance]
  169. */
  170. public static function getSendorderTotal($send_order_id, $start_time, $end_time)
  171. {
  172. $chapter_model = new ChapterOrder();
  173. $charge_balance = 0;
  174. $reward_balance = 0;
  175. $fee = 0;
  176. /*
  177. for ($i = 0;$i<512;$i++){
  178. $chapter_model->setCurrentTable($i);
  179. $charge_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('charge_balance');
  180. $reward_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('reward_balance');
  181. $fee += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('fee');
  182. }*/
  183. $chapter_model = null;
  184. return ['total' => $fee, 'charge_balance' => $charge_balance, 'reward_balance' => $reward_balance];
  185. }
  186. //三日内是否有订阅 crm上架需要
  187. public static function isHasChapterOrderInThreeDay(int $uid)
  188. {
  189. $chapterOrder = new ChapterOrder();
  190. $chapterOrder->setCurrentTable($uid);
  191. $info = $chapterOrder->where('uid',$uid)->where('created_at','>=',date('Y-m-d',time()-86400*3))->select('id')->first();
  192. if($info){
  193. return true;
  194. }
  195. return false;
  196. }
  197. public static function getRecentChapterOrderCount(int $uid)
  198. {
  199. $chapterOrder = new ChapterOrder();
  200. $chapterOrder->setCurrentTable($uid);
  201. $count = $chapterOrder->where('uid',$uid)->where('created_at','>=',date('Y-m-d',strtotime('-1 month')))->count();
  202. return $count;
  203. }
  204. }