|
@@ -0,0 +1,206 @@
|
|
|
+<?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();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|