123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- <?php
- namespace App\Modules\Subscribe\Services;
- use DB;
- use App\Modules\User\Services\UserService;
- use App\Modules\Subscribe\Models\ChapterOrder;
- class ChapterOrderService
- {
- //判断是否订购
- public function checkIsOrdered($uid, $bid, $cid)
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- return $chapter_model->where('uid', $uid)
- ->where('bid', $bid)
- ->where('cid', $cid)
- ->count();
- }
- //判断本书是否订购过
- public static function checkBookIsOrdered($uid, $bid){
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- return $chapter_model->where('uid', $uid)
- ->where('bid', $bid)
- ->count();
- }
- /**
- * 根据uid章节订购信息
- * @return
- */
- public function getByUid($uid, $page_size)
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- return $chapter_model->where('uid', $uid)->orderBy('created_at', 'desc')->paginate($page_size);
- }
- /**
- * 根据用户id获取用户的订购记录
- * @param $uid 用户id
- * @param string $startTime 开始时间
- * @param string $endTime 结束时间
- * @param bool $isAll 获取所有
- * @return mixed
- */
- public static function getRecordByUid($uid, $startTime = "", $endTime = "", $isAll = false)
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- $chapter = $chapter_model->where('uid', $uid)->orderBy('updated_at', 'desc');
- if ($startTime) {
- $chapter->where('updated_at', '>=', $startTime);
- }
- if ($endTime) {
- $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
- }
- if ($isAll) {
- return $chapter->get();
- } else {
- return $chapter->paginate();
- }
- }
- /**
- * 获取章节消费总额
- * @param $uid
- * @return mixed
- */
- public static function getChapterTotalConsume($uid)
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- return $chapter_model->where('uid', $uid)->sum('fee');
- }
- /**
- * 获取章节消费总额
- * @param $uid
- * @return mixed
- */
- public static function getChapterTotalConsumeByUserIdAndTime($uid, $startTime = "", $endTime = "")
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- $chapter = $chapter_model->where('uid', $uid);
- if ($startTime) {
- $chapter->where('updated_at', '>=', $startTime);
- }
- if ($endTime) {
- $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
- }
- return $chapter->sum('fee');
- }
- /**
- * 获取章节消费总额(确切时间段)
- * @param $uid
- * @return mixed
- */
- public static function getChapterTotalConsumeByUserIdAndAccTime($uid, $startTime = "", $endTime = "")
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- $chapter = $chapter_model->where('uid', $uid);
- if ($startTime) {
- $chapter->where('updated_at', '>=', $startTime);
- }
- if ($endTime) {
- $chapter->where('updated_at', '<=', $endTime . ' 23:59:59');
- }
- return $chapter->sum('fee');
- }
- /**
- * 获取订购章节数
- * @param $uid
- * @return mixed
- */
- public static function getUserRecordCount($uid)
- {
- $chapter_model = new ChapterOrder();
- $chapter_model->setCurrentTable($uid);
- return $chapter_model->where('uid', $uid)->count();
- }
- /**
- * 根据uid章节订购信息
- * @return
- */
- public static function addOrderAndDecrUserBalance($data, $uid)
- {
- $chapterOrder = new ChapterOrder();
- $chapterOrder->setCurrentTable($uid);
- $chapterOrder->uid = $uid;
- $chapterOrder->bid = $data['bid'];
- $chapterOrder->cid = $data['cid'];
- $chapterOrder->fee = $data['fee'];
- $chapterOrder->chapter_name = $data['chapter_name'];
- $chapterOrder->book_name = $data['book_name'];
- $chapterOrder->send_order_id = $data['send_order_id'];
- $chapterOrder->distribution_channel_id = $data['distribution_channel_id'];
- $user = UserService::getById($uid);
- DB::beginTransaction();
- $res = $result1 = $result2 = null;
- try {
- if ($user->charge_balance >= $data['fee']) {
- $chapterOrder->charge_balance = $data['fee'];
- $chapterOrder->reward_balance = 0;
- $res = $chapterOrder->save();
- $result1 = $user->decrement('balance', $data['fee']);
- $result2 = $user->decrement('charge_balance', $data['fee']);
- } elseif ($user->charge_balance > 0) {
- $chapterOrder->charge_balance = $user->charge_balance;
- $chapterOrder->reward_balance = $data['fee'] - $user->charge_balance;
- $reward = $data['fee'] - $user->charge_balance;
- $res = $chapterOrder->save();
- $result1 = $user->decrement('balance', $data['fee']);
- $result2 = $user->decrement('charge_balance', $user->charge_balance);
- $result3 = $user->decrement('reward_balance', $reward);
- } else {
- $chapterOrder->charge_balance = 0;
- $chapterOrder->reward_balance = $data['fee'];
- $res = $chapterOrder->save();
- $result1 = $user->decrement('balance', $data['fee']);
- $result2 = $user->decrement('reward_balance', $data['fee']);
- }
- if ($user->is_new == 1) {
- $user->is_new = 0;
- $user->save();
- }
- } catch (\Exception $e) {
- //\Log::info($e);
- }
- if ($res && $result1 && $result2) {
- DB::commit();
- return true;
- }
- DB::rollback();
- return false;
- }
- /**
- * @param $send_order_id
- * @param $start_time
- * @param $end_time
- * @return array ['total'=>133,'charge_balance'=>45,'reward_balance'=>$reward_balance]
- */
- public static function getSendorderTotal($send_order_id, $start_time, $end_time)
- {
- $chapter_model = new ChapterOrder();
- $charge_balance = 0;
- $reward_balance = 0;
- $fee = 0;
- /*
- for ($i = 0;$i<512;$i++){
- $chapter_model->setCurrentTable($i);
- $charge_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('charge_balance');
- $reward_balance += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('reward_balance');
- $fee += $chapter_model->where('send_order_id',$send_order_id)->whereBetween('created_at',[$start_time,$end_time])->sum('fee');
- }*/
- $chapter_model = null;
- return ['total' => $fee, 'charge_balance' => $charge_balance, 'reward_balance' => $reward_balance];
- }
- }
|