ChapterOrderService.php 7.8 KB

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