| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 | <?phpnamespace 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];    }}
 |