kphcdr 1 year ago
parent
commit
ba869c751d

+ 54 - 0
app/Exports/AdminOrderExport.php

@@ -0,0 +1,54 @@
+<?php
+
+namespace App\Exports;
+
+use App\Base\Utils;
+use App\Models\Order\Order;
+use App\Models\Order\OrderGoods;
+use App\Models\User\User;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Arr;
+use Maatwebsite\Excel\Concerns\FromCollection;
+
+class AdminOrderExport implements FromCollection
+{
+    public $params;
+
+    /**
+     * @param $params
+     */
+    public function __construct($params)
+    {
+        $this->params = $params;
+    }
+
+    public function collection()
+    {
+        $data = Order::when($this->params['id'], function (Builder $query) {
+            $query->where("id", $this->params['id']);
+        })->when($this->params['userinfo'], function (Builder $query) {
+            //根据userinfo获取用户信息
+            if ($user = User::where("email", $this->params['userinfo'])->orWhere("phone", $this->params['userinfo'])->orWhere("id", $this->params['userinfo'])->first()) {
+                $query->where("user_id", $user->id);
+            } else {
+                $query->where("id", 0);
+            }
+        })->orderByDesc("id")->get()->map(function (Order $model) {
+            $goodsInfo = "";
+            foreach ($model->goods as $g) {
+                $goodsInfo .= sprintf("%s %s x %s (%s) \n", $g->goods->name, $g->sn, $g->count, implode("-", Arr::pluck($g->custom ?? [], "value")));
+            }
+            return [
+                "id" => $model->id,
+                "goods" => $goodsInfo,
+                "user_id" => Utils::idNo4($model->user_id),
+                "name" => $model->user->name,
+                "phone" => $model->user->phone,
+                "email" => $model->user->email,
+                "created_at" => $model->created_at->format("Y-m-d H:i:s"),
+            ];
+        });
+        $data->prepend(["编号", "商品信息", "用户ID", "用户昵称", "用户手机", "用户邮箱", "询价时间"]);
+        return $data;
+    }
+}

+ 45 - 0
app/Exports/AdminUserExport.php

@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Exports;
+
+use App\Base\Utils;
+use App\Models\User\User;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Arr;
+use Maatwebsite\Excel\Concerns\FromCollection;
+
+class AdminUserExport implements FromCollection
+{
+    public $params;
+
+    /**
+     * @param $params
+     */
+    public function __construct($params)
+    {
+        $this->params = $params;
+    }
+
+    public function collection()
+    {
+        $data = \App\Models\User\User::query()->with(["group", "company"])->when($this->params['status'], function (Builder $query) {
+            return $query->where("status", $this->params['status']);
+        })->when($this->params['userinfo'], function (Builder $query) {
+            return $query->where(function (Builder $query) {
+                return $query->where("phone", $this->params['userinfo'])->orWhere("email", $this->params['userinfo'])->orWhere("id", $this->params['userinfo']);
+            });
+        })->orderByDesc("id")->get()->map(function (User $u) {
+            return [
+                "id" => Utils::idNo4($u->id),
+                "phone" => $u->phone,
+                "email" => $u->email,
+                "company" => optional($u->company)->name,
+                "status" => $u->status == User::STATUS_OK ? "正常" : "禁用",
+                "group_name" => optional($u->group)->name ?? "",
+                "created_at" => $u->created_at->format("Y-m-d"),
+            ];
+        });
+        $data->prepend(["用户ID", "用户手机号", "用户邮箱", "企业用户", "用户状态", "当前身份", "注册时间"]);
+        return $data;
+    }
+}

+ 1 - 1
app/Models/Order/OrderGoods.php

@@ -30,7 +30,7 @@ use App\Models\Goods\Goods;
  * @method static \Illuminate\Database\Eloquent\Builder|OrderGoods whereSkuId($value)
  * @property-read \App\Models\Order\Order|null $order
  * @property-read Goods|null                   $goods
- * @property string                            $custom
+ * @property array                             $custom
  * @method static \Illuminate\Database\Eloquent\Builder|OrderGoods whereCustom($value)
  */
 class OrderGoods extends BaseModel

+ 17 - 0
app/Modules/Admin/Controllers/Admin/OrderController.php

@@ -3,8 +3,11 @@
 namespace App\Modules\Admin\Controllers\Admin;
 
 use App\Base\BaseController;
+use App\Exports\AdminOrderExport;
+use App\Exports\AdminUserExport;
 use App\Modules\Admin\Services\OrderService;
 use Faker\Provider\Image;
+use Maatwebsite\Excel\Facades\Excel;
 
 class OrderController extends BaseController
 {
@@ -18,4 +21,18 @@ class OrderController extends BaseController
         $paginate = app(OrderService::class)->paginate($params);
         return $this->ok($paginate);
     }
+
+    public function export()
+    {
+        $params = $this->valid([
+            "userinfo" => "",
+            "id" => "",
+        ]);
+        $name = sprintf('后台订单导出%s.xls', date("YmdHis"));
+        Excel::store(new AdminOrderExport($params), $name, "public");
+
+        return $this->ok([
+            "url" => config("app.url") . "/storage/" . $name,
+        ]);
+    }
 }

+ 16 - 0
app/Modules/Admin/Controllers/Admin/UserController.php

@@ -3,7 +3,9 @@
 namespace App\Modules\Admin\Controllers\Admin;
 
 use App\Base\BaseController;
+use App\Exports\AdminUserExport;
 use App\Modules\Admin\Services\UserService;
+use Maatwebsite\Excel\Facades\Excel;
 
 class UserController extends BaseController
 {
@@ -14,6 +16,20 @@ class UserController extends BaseController
         $this->service = $authService;
     }
 
+    public function export()
+    {
+        $params = $this->valid([
+            "userinfo" => "",
+            "status" => "",
+        ]);
+        $name = sprintf('后台用户列表%s.xls', date("YmdHis"));
+        Excel::store(new AdminUserExport($params), $name, "public");
+
+        return $this->ok([
+            "url" => config("app.url") . "/storage/" . $name,
+        ]);
+    }
+
     public function paginate()
     {
         $data = $this->valid([

+ 2 - 0
routes/admin.php

@@ -11,6 +11,7 @@ Route::middleware([\App\Http\Middleware\AdminAuthMiddleware::class])->group(func
     Route::get("/admin/user/paginate", [\App\Modules\Admin\Controllers\Admin\UserController::class, "paginate"]);
     Route::post("/admin/user/changeStatus", [\App\Modules\Admin\Controllers\Admin\UserController::class, "changeStatus"]);
     Route::post("/admin/user/saveSetting", [\App\Modules\Admin\Controllers\Admin\UserController::class, "saveSetting"]);
+    Route::get("/admin/user/export", [\App\Modules\Admin\Controllers\Admin\UserController::class, "export"]);
 
     Route::get("/admin/banner/paginate", [\App\Modules\Admin\Controllers\Admin\BannerController::class, "paginate"]);
     Route::post("/admin/banner/store", [\App\Modules\Admin\Controllers\Admin\BannerController::class, "store"]);
@@ -42,5 +43,6 @@ Route::middleware([\App\Http\Middleware\AdminAuthMiddleware::class])->group(func
     Route::post("/admin/category/del", [\App\Modules\Admin\Controllers\Admin\CategoryController::class, "del"]);
 
     Route::get("/admin/order/paginate", [\App\Modules\Admin\Controllers\Admin\OrderController::class, "paginate"]);
+    Route::get("/admin/order/export", [\App\Modules\Admin\Controllers\Admin\OrderController::class, "export"]);
 
 });