| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 | <?php/** * * @file:OrderService.php * @Date: 2023/5/23 * @Time: 13:40 */namespace Modules\Channel\Services\Order;use Illuminate\Support\Facades\DB;use Modules\Channel\Models\Order;use Modules\Channel\Models\UserHasMiniprograms;use Modules\Manage\Models\Miniprogram;use Modules\User\Models\User;class OrderService{    /**     *  订单列表查询     * name: getOrderList     * @param array $param     * date 2023/05/23 13:45     */    public static function getOrderList(array $param, $isAll = false)    {        $sql = self::getOrderQuerySql($param);        if ($isAll) {            $list = $sql->get();        } else {            $list = $sql->simplePaginate(getProp($param, 'limit', 15));        }        if (!$list->isEmpty()) {            $status = array_column(self::getOrderPayType(),null,'value');            $types = array_column(self::getOrderType(),null,'value');            foreach ($list as $val) {                $val->username = $val->user_id > 0 ? User::where('id', $val->user_id)->value('username') : "";                $val->company_name = "-";                $val->play_name = '-';                $company = Miniprogram::where('id', $val->miniprogram_id)->first();                if ($company) {                    $val->company_name = $company->company();                    $val->play_name = $company->play_name;                }                $val->promotion_title = $val->promotion_id > 0 ? DB::table('promotions')->where('id', $val->promotion_id)->value('name') : "";                $val->total_count = Order::where('uid', $val->uid)->where('id', "<=", $val->id)->count();                if ($val->user_id > 0) {                    $val->caompany_count = Order::where('uid', $val->uid)->where('puser_id', '>', 0)->where('puser_id', $val->puser_id)->where('id', "<=", $val->id)->count();                    $val->promotion_count = Order::where('uid', $val->uid)->where('puser_id', '>', 0)->where('puser_id', $val->puser_id)->where('user_id', ">", 0)->where('user_id', $val->user_id)->where('id', "<=", $val->id)->count();                } else {                    $val->caompany_count = Order::where('uid', $val->uid)->where('puser_id', '>', 0)->count();                    $val->promotion_count = Order::where('uid', $val->uid)->where('user_id', '>', 0)->count();                }                $val->tip_text =  $types[$val->order_type]['name']?? "-";                $val->status_txt = $status[$val->status]['name'] ?? "-";                $val->pay_name = '微信支付';            }        }        return $list;    }    public static function getOrderType()    {        return [            ["value" => "COIN","name" => "普通充值"],            ["value" => 'MONTH',"name" => '包月'],            ["value" => 'QUARTER' ,"name"=> '包季'],            ["value" => 'YEAR' ,"name"=> '包年'],            ["value" => "FIRST_COIN" ,"name" => "首充"]        ];    }    public static function getOrderPayType()    {        return [            ["value" => "PAID","name" => "已支付"],            ["value" =>'REFUND',"name" => '已退款'],            ["value" =>'UNPAID' ,"name"=> '未支付'],        ];    }    private static function getOrderQuerySql(array $param)    {        $sql = Order::query();        // 优化师查询        if (!empty(getProp($param, 'user_id'))) {            $sql->where('user_id', $param['user_id']);        }        // 公司查询        if (!empty(getProp($param, 'puser_id'))) {            $sql->where('puser_id', $param['puser_id']);        }        // 小程序        if (!empty(getProp($param, 'miniprogram_id'))) {            $sql->where('miniprogram_id', $param['miniprogram_id']);        }        // 推广id        if (!empty(getProp($param, 'promotion_id'))) {            $sql->where('promotion_id', $param['promotion_id']);        }        // 订单状态查询        if (!empty(getProp($param, 'status'))) {            $sql->where('status', $param['status']);        }        // 充值项类型        if (!empty(getProp($param, 'order_type'))) {            $sql->where('order_type', $param['order_type']);        }        // 用户        if (!empty(getProp($param, 'uid'))) {            $sql->where('uid', $param['uid']);        }        // 订单号查询        if (!empty(getProp($param, 'trade_no'))) {            $sql->where('trade_no', "like", "%" . $param['trade_no'] . "%");            // $sql->where('trade_no',  $param['trade_no']);        }        if (!empty(getProp($param, 'trade_no'))) {            // $sql->where('trade_no', "like", "%" . $param['trade_no'] . "%");            $sql->where('trade_no', $param['trade_no']);        }        // 支付时间        if (!empty(getProp($param, 'pay_end_at_start'))) {            $sql->where('pay_end_at', $param['pay_end_at_start']);        }        if (!empty(getProp($param, 'pay_end_at_end'))) {            $sql->where('pay_end_at', "<=", $param['pay_end_at_end']);        }        // 创建时间        if (!empty(getProp($param, 'created_at_start'))) {            $sql->where('created_at', $param['created_at_start']);        }        if (!empty(getProp($param, 'created_at_end'))) {            $sql->where('created_at', "<=", $param['created_at_end']);        }        return $sql;    }    /**     *  用户订单小程选择列表     * name: userUseProgramsList     * @param mixed $uid     * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection|\Illuminate\Support\Collection     * date 2023/05/23 17:51     */    public static function userUseProgramsList(mixed $uid)    {        $operateUser = User::find($uid);        $operateUserRoles = $operateUser->roles->pluck('identify');        if ($operateUserRoles->contains('company') || $operateUserRoles->contains('optimizer')) {            return UserHasMiniprograms::query()->join('miniprogram', 'miniprogram.id', '=', 'user_has_miniprograms.miniprogram_id')                ->where('uid', $uid)                ->groupBy("user_has_miniprograms.miniprogram_id")                ->select('user_has_miniprograms.miniprogram_id', 'miniprogram.name', 'miniprogram.play_name')                ->get();        } else {            return DB::table('miniprogram')->select("id as miniprogram_id", "name", "play_name")->get();        }    }    /**     *  推广列表选择项     * name: promotionsOptions     * @param mixed $uid     * @param mixed $title     * @return \Illuminate\Support\Collection     * date 2023/05/23 18:13     */    public static function promotionsOptions(mixed $uid, mixed $title)    {        $operateUser = User::find($uid);        $operateUserRoles = $operateUser->roles->pluck('identify');        $list = DB::table('promotions')->select('id as promotion_id ', 'name');        if ($operateUserRoles->contains('optimizer')) {            if ($title) {                $list->where('name', 'like', "%" . $title . "%");            }            return $list->where('uid', $uid)->get();        } else if ($operateUserRoles->contains('company')) {            $list  =  DB::table('promotions')->join('users','users.id',"promotions.uid")                ->where('users.pid',$uid)->orWhere("promotions.uid",$uid)->select("promotions.id as promotion_id ", 'promotions.name');            if ($title) {                $list->where('promotions.name', 'like', "%" . $title . "%");            }            return $list->get();        } else {            if ($title) {                $list->where('name', 'like', "%" . $title . "%");            }            return $list->get();        }    }}
 |