Browse Source

0727-1931-c01

zory 1 week ago
parent
commit
0e51b8eb70

+ 75 - 0
app/command/ExpressOrder.php

@@ -0,0 +1,75 @@
+<?php
+
+namespace app\command;
+
+use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderExpress;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Webman\RedisQueue\Redis;
+use yzh52521\EasyHttp\Http;
+
+class ExpressOrder extends Command
+{
+
+    protected static string $defaultName = 'express:order';
+    protected static string $defaultDescription = '更新订单物流信息';
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        try {
+            $output->writeln("开始更新快递信息====>" . getDateFull());
+            $nextPage = 1;
+            while (is_numeric($nextPage)) {
+                $resp = (new SaasOrderExpress)->where(["status" => 0])->with(['orders'])->page($nextPage,10)->select();
+                if ($resp->isEmpty()) {
+                    $output->writeln("没有任务啦==".getDateFull());
+                    $nextPage = null;
+                    return true;
+                }
+                $orderMode = (new SaasOrder);
+                foreach ($resp as $item) {
+                    [$state,$expressData] = $this->getExpressData($item['express_sn'],$item['mobile']);
+                    if ($state && $item['orders']['is_error'] == 0) {
+                        if (in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) { // 核销订单
+                            $output->writeln("订单进入核销=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
+                            $orderMode->where("order_sn",$item['order_sn'])->update(['express_status' => 2]);
+                            (new SaasOrderExpress)->where("id",$item['id'])->update(['status' => 1,'last_at' => getDateFull(),'last_msg' => $expressData['theLastMessage'],'content' => json_encode($expressData['logisticsTraceDetailList'])]);
+                            Redis::send("order-done",['order' => $item['order_sn']]);
+                        } else {
+                            (new SaasOrderExpress)->where("id",$item['id'])->update(['last_msg' => $expressData['theLastMessage'],'last_at' => getDateFull(),'content' => json_encode($expressData['logisticsTraceDetailList'])]);
+                            $output->writeln("查询物流成功=={$item['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull());
+                        }
+                    } else {
+                        $output->writeln("查询快递信息失败=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
+                    }
+                }
+                $nextPage = $nextPage+1;
+                $output->writeln("进入下一页=={$nextPage}==".getDateFull());
+            }
+        } catch (\Throwable $throwable) {
+            echo getDateFull()."===更新快递信息报错\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+        }
+        return self::SUCCESS;
+    }
+
+    protected function getExpressData(string $expressNo = "",string $mobile = ""): array
+    {
+        $url = "https://kzexpress.market.alicloudapi.com/api-mall/api/express/query";
+        $param = [
+            "expressNo" => $expressNo,
+            "mobile"    => substr($mobile,-4)
+        ];
+        $resp = Http::withHeaders([
+            "Authorization" => "APPCODE ".sConf("wechat.kd_code")
+        ])->post($url,$param)->array();
+        if ($resp['code'] <> 200) {
+            return [0,''];
+        }
+        return [1,$resp['data']];
+    }
+
+}

+ 49 - 0
app/command/UserOff.php

@@ -0,0 +1,49 @@
+<?php
+
+namespace app\command;
+
+use app\model\system\SystemUser;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class UserOff extends Command
+{
+
+    protected static string $defaultName = 'user:off';
+    protected static string $defaultDescription = '更新客服状态-10分钟无回调自动下线';
+
+
+    protected function execute(InputInterface $input, OutputInterface $output): int
+    {
+        try {
+            $output->writeln("开始更新客服状态====>" . getDateFull());
+            $nextPage = 1;
+            while (is_numeric($nextPage)) {
+                $resp = (new SystemUser)->where(["type" => 3])->page($nextPage, 10)->select();
+                if ($resp->isEmpty()) {
+                    $output->writeln("没有任务啦==" . getDateFull());
+                    $nextPage = null;
+                    return true;
+                }
+                $endTime = time();
+                foreach ($resp as $item) {
+                    if (strtotime("+10 min",strtotime($item['last_active_at'])) < $endTime) {
+                        $output->writeln("客服下线=={$item['truename']}==".getDateFull());
+                        (new SystemUser)->where('id',$item['id'])->update(['is_line' => 0]);
+                    } else {
+                        $output->writeln("客服正常在线=={$item['truename']}==".getDateFull());
+                    }
+                }
+                $nextPage = $nextPage+1;
+                $output->writeln("进入下一页=={$nextPage}==".getDateFull());
+            }
+        } catch (\Throwable $throwable) {
+            echo getDateFull()."===更新客服状态\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+        }
+        return self::SUCCESS;
+    }
+
+}

+ 0 - 1
app/controller/admin/Goods.php

@@ -37,7 +37,6 @@ class Goods extends Base
     {
         try {
             $param = $request->all();
-            if (!empty($param['status'])) $param['status'] = intval($param['status']+1);
             $productType = $this->service->productType();
             $data = $this->service->setModel()->getList($param,['poi' => function($query){
                 $query->field("poi_id,poi_name,poi_address,nick_name");

+ 0 - 2
app/controller/api/Auth.php

@@ -46,8 +46,6 @@ class Auth extends Base
             if (empty($sessionKey)) return error("授权登录失败");
             if (!empty($param['code'])) {
                 $mobileStr = (new Crypt)->config($this->getDyConfig())->token()->getMobile($param['code']);
-                echo  "sdasd\n";
-                print_r($mobileStr);
             } else {
                 $data = $this->decrypt($param['encryptedData'],$sessionKey['session_key'],$param['iv']);
                 $mobileStr = $data['purePhoneNumber'];

+ 6 - 6
app/controller/api/Notify.php

@@ -95,6 +95,12 @@ class Notify extends Base
             if (empty($data)) return json(['err_no' => 0,'err_tips' => "success"]);
             $order = (new SaasOrder)->where("order_sn",$orderSn)->findOrEmpty();
             if ($order['status'] <> 4) return json(['err_no' => 0,'err_tips' => "success"]);
+            if (!empty($data['refund_item_detail']['item_order_detail']))
+            {
+                foreach ($data['refund_item_detail']['item_order_detail'] as $val) {
+                    (new SaasOrderItem)->where("item_order_id",$val['item_order_id'])->update(['status' => 2]);
+                }
+            }
             $itemNum = (new SaasOrderItem)->where(["order_sn" => $order['order_sn'],'status' => 2])->count();
             $trueNum = count($data['refund_item_detail']['item_order_detail']);
             if (($trueNum+$itemNum) <> $order['number']) { // 部分退款
@@ -102,12 +108,6 @@ class Notify extends Base
             } else { // 全部退款
                 $order->status = 3;
             }
-            if (!empty($data['refund_item_detail']['item_order_detail']))
-            {
-                foreach ($data['refund_item_detail']['item_order_detail'] as $val) {
-                    (new SaasOrderItem)->where("item_order_id",$val['item_order_id'])->update(['status' => 2]);
-                }
-            }
             $order->refund_at = getDateFull();
             $order->save();
             return json(['err_no' => 0,'err_tips' => "success"]);

+ 2 - 1
app/controller/api/Solution.php

@@ -112,7 +112,8 @@ class Solution extends Base
                         foreach ($msgData['item_order_info_list'] as $key=>$val) {
                             $itemData[$key] = [
                                 "order_sn"      => $msgData['order_id'],
-                                "item_order_id" => $val['item_order_id']
+                                "item_order_id" => $val['item_order_id'],
+                                "price"         => $val['price']
                             ];
                         }
                         if (!empty($itemData)) {

+ 42 - 0
app/controller/merchant/Express.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace app\controller\merchant;
+
+use app\extra\basic\Base;
+use app\middleware\AuthMiddleware;
+use app\service\saas\ExpressService;
+use DI\Attribute\Inject;
+use LinFly\Annotation\Attributes\Route\Controller;
+use LinFly\Annotation\Attributes\Route\GetMapping;
+use LinFly\Annotation\Attributes\Route\Middleware;
+use support\Request;
+use support\Response;
+
+/**
+ * 发货记录
+ */
+#[Controller("/api/merchant/express"),Middleware(AuthMiddleware::class)]
+class Express extends Base
+{
+
+    #[Inject]
+    protected ExpressService $service;
+
+    #[GetMapping('list')]
+    public function getDataList(Request $request): Response
+    {
+        try {
+            $param = $request->all();
+            if ($request->user['type'] == 2) {
+                $param['poi_id'] = $request->user['store_id'];
+            } else {
+                $param['uid'] = $request->user['id'];
+            }
+            $data = $this->service->setModel()->getList($param);
+            return successTrans(100010,pageFormat($data),200);
+        } catch (\Throwable $th) {
+            return error($th->getMessage());
+        }
+    }
+
+}

+ 6 - 2
app/controller/merchant/Order.php

@@ -9,6 +9,7 @@ use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderAddress;
 use app\model\saas\SaasOrderItem;
 use app\model\saas\SaasStore;
+use app\model\system\SystemImport;
 use app\service\saas\GoodsService;
 use app\service\saas\OrderService;
 use DI\Attribute\Inject;
@@ -54,7 +55,10 @@ class Order extends Base
             }],true,['end_time','refund_num'],["end_time" => function ($resp,$next) {
                 return timeDiff(strtotime("+30 minutes",strtotime($next['create_at'])),time());
             },'refund_num' => function($resp,$next){
-                return (new SaasOrderItem)->where(['order_sn' => $next['order_sn'],'status' => 2])->count();
+                if ($next['status'] == 6) {
+                    return (new SaasOrderItem)->where(['order_sn' => $next['order_sn'],'status' => 2])->count();
+                }
+                return 0;
             }]);
             return successTrans("success.data",pageFormat($data),200);
         } catch (\Throwable $throwable) {
@@ -70,7 +74,7 @@ class Order extends Base
                 "order.require" => trans("empty.require"),
             ],$request->method());
             if (!is_array($param)) return error($param);
-            $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi','user','address'])->findOrEmpty();
+            $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi','user','address','express'])->findOrEmpty();
             if ($order->isEmpty()) return errorTrans("empty.data");
             if ($order['poi_id'] <> $request->user['store_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
             $order['end_time'] = timeDiff(strtotime("+30 minutes",strtotime($order['create_at'])),time());

File diff suppressed because it is too large
+ 0 - 0
app/controller/merchant/Star.php


+ 29 - 1
app/controller/merchant/Tasks.php

@@ -3,8 +3,11 @@
 namespace app\controller\merchant;
 
 use app\extra\basic\Base;
+use app\extra\tools\CodeExtend;
+use app\extra\tools\UploadExtend;
 use app\middleware\AuthMiddleware;
 use app\model\system\SystemExport;
+use app\model\system\SystemImport;
 use LinFly\Annotation\Attributes\Route\Controller;
 use LinFly\Annotation\Attributes\Route\GetMapping;
 use LinFly\Annotation\Attributes\Route\Middleware;
@@ -44,7 +47,7 @@ class Tasks extends Base
             $logId = (new SystemExport)->insertGetId([
                 "uuid"      => $request->user['id'],
                 "name"      => $param['fileName'],
-                "params"    => json_encode($param),
+                "params"    => json_encode($param)
             ]);
             Redis::send("export-order",[
                 "logId"     => $logId,
@@ -56,4 +59,29 @@ class Tasks extends Base
         }
     }
 
+
+    #[PostMapping('import')]
+    public function importOrder(Request $request): Response
+    {
+        try {
+            $resp = UploadExtend::disk(UploadExtend::MODE_LOCAL)->uploadFile();
+            if (!isset($resp[0]['url'])) return error("上传文档失败");
+            $logId = (new SystemImport)->insertGetId([
+                "uuid"      => $request->user['id'],
+                "poi_id"    => $request->user['store_id'],
+                "path"      => $resp[0]['url'],
+                "title"     => $resp[0]['origin_name'],
+                "order_sn"  => CodeExtend::uniqidDate()
+            ]);
+            Redis::send("import-order",[
+                "logId"     => $logId,
+                "poi_id"    => $request->user['store_id'],
+                "path"      => $resp[0]['url'],
+            ]);
+            return success("导入成功,请耐心等待系统完成,",[],200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
 }

+ 1 - 1
app/extra/dyLife/data/OrderData.php

@@ -40,7 +40,7 @@ class OrderData extends BasicLife
         $param = [
             "account_id"        => $data['account_id'],
             "verify_token"      => $data['pay_sn'],
-            "encrypted_codes"   => [$data['encrypted_code']],
+            "encrypted_codes"   => $data['encrypted_code'],
             "order_id"          => $data['order_id'],
             "poi_id"            => $data['poi_id']
         ];

+ 5 - 0
app/model/saas/SaasOrder.php

@@ -77,4 +77,9 @@ class SaasOrder extends Model
         return $this->hasOne(SaasOrderAddress::class,"order_sn","out_order_no");
     }
 
+    public function express(): HasOne
+    {
+        return $this->hasOne(SaasOrderExpress::class,"order_sn","order_sn");
+    }
+
 }

+ 53 - 0
app/model/saas/SaasOrderExpress.php

@@ -0,0 +1,53 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+use think\model\relation\HasOne;
+
+
+/**
+ * @property integer $id (主键)
+ * @property mixed $order_sn 
+ * @property mixed $express_sn 
+ * @property integer $status 0运输中1已签收
+ * @property mixed $last_at 
+ * @property mixed $create_at
+ */
+class SaasOrderExpress extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "saas_order_express";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+    public function orders(): HasOne
+    {
+        return $this->hasOne(SaasOrder::class,"order_sn","order_sn");
+    }
+
+}

+ 47 - 0
app/model/system/SystemImport.php

@@ -0,0 +1,47 @@
+<?php
+
+namespace app\model\system;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property integer $uuid 
+ * @property mixed $poi_id 
+ * @property string $path 
+ * @property integer $status 0进行中1已完成
+ * @property mixed $create_at
+ */
+class SystemImport extends Model
+{
+    /**
+     * The connection name for the model.
+     *
+     * @var string|null
+     */
+    protected $connection = 'mysql';
+    
+    /**
+     * The table associated with the model.
+     *
+     * @var string
+     */
+    protected string $table = "system_import";
+    
+    /**
+     * The primary key associated with the table.
+     *
+     * @var string
+     */
+    protected string $primaryKey = "id";
+    
+    /**
+     * Indicates if the model should be timestamped.
+     *
+     * @var bool
+     */
+    public bool $timestamps = false;
+
+
+}

+ 2 - 1
app/queue/redis/fast/OrderDone.php

@@ -28,7 +28,8 @@ class OrderDone implements Consumer
         try {
             echo getDateFull()."==开始核销\n";
             echo "订单数据===".json_encode($data)."\n";
-            $order = (new SaasOrder)->where("out_order_no",$data["order"])->with(['poi'])->findOrEmpty();
+            $order = (new SaasOrder)->where("order_sn",$data["order"])->with(['poi'])->findOrEmpty();
+//            $order = (new SaasOrder)->where("out_order_no",$data["order"])->with(['poi'])->findOrEmpty();
             if ($order['status'] <> 1)
             {
                 echo getDateFull()."===订单状态不符合核销\n";

+ 52 - 44
app/queue/redis/slow/ExportOrder.php

@@ -44,53 +44,61 @@ class ExportOrder implements Consumer
 
     public function consume($data): bool
     {
-        if(empty($data['logId'])) return true;
-        $spreadsheet = new Spreadsheet();
-        $title = ['店铺名称','下单人昵称','订单编号','订单状态','发货状态', '收件人', '手机号码', '收货地址', '创建时间'];
-        $sheet = $spreadsheet->getActiveSheet();
-        $titCol = 'A';
-        foreach ($title as $key => $value) {
-            // 单元格内容写入
-            $sheet->setCellValue($titCol . '1', $value);
-            $titCol++;
-        }
-        $row = 2; // 从第二行开始
-        $searchKey = (new OrderService)->searchFilter($data['param']);
-        $orderData = (new SaasOrder)->where($searchKey)->with(['address','poi','user'])->select();
-        if ($orderData->isEmpty()) {
-            (new SystemExport)->where("id",$data['logId'])->update(['status' => 2]);
-            return true;
-        }
-        foreach ($orderData as $item) {
-            $dataCol = 'A';
-            $address = "-";
-            if (!empty($item['address'])) {
-                $address = $item['address']['city_text'].$item['address']['address'];
+        try {
+            if(empty($data['logId'])) return true;
+            $spreadsheet = new Spreadsheet();
+            $title = ['店铺名称','下单人昵称','订单编号','订单状态','发货状态', '收件人', '手机号码', '收货地址', '创建时间'];
+            $sheet = $spreadsheet->getActiveSheet();
+            $titCol = 'A';
+            foreach ($title as $key => $value) {
+                // 单元格内容写入
+                $sheet->setCellValue($titCol . '1', $value);
+                $titCol++;
+            }
+            $row = 2; // 从第二行开始
+            $searchKey = (new OrderService)->searchFilter($data['param']);
+            $orderData = (new SaasOrder)->where($searchKey)->with(['address','poi','user'])->select();
+            if ($orderData->isEmpty()) {
+                (new SystemExport)->where("id",$data['logId'])->update(['status' => 2]);
+                return true;
             }
-            $newData = [
-                "shop"      => $item['poi']['poi_name']??'-', // 店铺名称
-                "nickname"  => $item['user']['nickname']??'-', // 下单人昵称
-                "order"     => $item['order_sn']??'-', // 订单编号
-                "status"    => $this->status[$item['status']], // 订单状态
-                "express"   => $this->express[$item['express_status']], // 订单状态
-                "user"      => $item['address']['nickname']??'-',
-                "mobile"    => $item['address']['mobile']??'-',
-                "address"   => $address,
-                "create_at" => $item['create_at'],
-            ];
-            foreach ($newData as $value) {
-                $sheet->setCellValue($dataCol . $row, ' '.$value);
-                $dataCol++;
+            foreach ($orderData as $item) {
+                $dataCol = 'A';
+                $address = "-";
+                if (!empty($item['address'])) {
+                    $address = $item['address']['city_text'].$item['address']['address'];
+                }
+                $newData = [
+                    "shop"      => $item['poi']['poi_name']??'-', // 店铺名称
+                    "nickname"  => $item['user']['nickname']??'-', // 下单人昵称
+                    "order"     => $item['order_sn']??'-', // 订单编号
+                    "status"    => $this->status[$item['status']], // 订单状态
+                    "express"   => $this->express[$item['express_status']], // 订单状态
+                    "user"      => $item['address']['nickname']??'-',
+                    "mobile"    => $item['address']['mobile']??'-',
+                    "address"   => $address,
+                    "create_at" => $item['create_at'],
+                ];
+                foreach ($newData as $value) {
+                    $sheet->setCellValue($dataCol . $row, ' '.$value);
+                    $dataCol++;
+                }
+                $row++;
             }
-            $row++;
+            $write = new Xlsx($spreadsheet);
+            $pathName = public_path().DIRECTORY_SEPARATOR."download".DIRECTORY_SEPARATOR.$data['param']['fileName'];
+            echo $pathName."\n";
+            (new SystemExport)->where("id",$data['logId'])->update([
+                "down_url"  => "https://tran.jsshuita.cn/download/".$data['param']['fileName'],
+                "status"    => 1
+            ]);
+            $write->save($pathName);
+        } catch (\Throwable $throwable) {
+            echo getDateFull()."==导出订单报错===\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            echo $throwable->getMessage()."\n";
         }
-        $write = new Xlsx($spreadsheet);
-        $pathName = public_path().DIRECTORY_SEPARATOR."download".DIRECTORY_SEPARATOR.$data['param']['fileName'];
-        (new SystemExport)->where("id",$data['logId'])->update([
-            "down_url"  => "https://tran.jsshuita.cn/download/".$data['param']['fileName'],
-            "status"    => 1
-        ]);
-        $write->save($pathName);
         return true;
     }
 

+ 50 - 0
app/queue/redis/slow/ImportOrder.php

@@ -2,6 +2,10 @@
 
 namespace app\queue\redis\slow;
 
+use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderExpress;
+use app\model\system\SystemImport;
+use PhpOffice\PhpSpreadsheet\IOFactory;
 use Webman\RedisQueue\Consumer;
 
 class ImportOrder implements Consumer
@@ -22,6 +26,52 @@ class ImportOrder implements Consumer
 
     public function consume($data): bool
     {
+        try {
+            if(empty($data['logId'])) return true;
+            if(empty($data['poi_id'])) return true;
+            $path = public_path().$data['path'];
+            $spreadsheet = IOFactory::load($path);
+            $worksheet = $spreadsheet->getActiveSheet();
+            $sheetData = $worksheet->toArray(null, true, true, true);
+            // 5. 现在 $sheetData 就是一个二维数组,你可以遍历它处理每一行数据
+            $orderMode = (new SaasOrder);
+            $excelData= [];
+            $expressData = [];
+            foreach ($sheetData as $rowIndex => $row) {
+                if ($rowIndex > 0 && !empty($row['A'])) {
+                    $excelData[$rowIndex] = $row;
+                }
+            }
+            if (!empty($excelData)) {
+                foreach (array_values(array_filter($excelData)) as $key=>$val) {
+                    $order = $orderMode->where("order_sn",trim($val['A']))->findOrEmpty();
+                    if ($order->isEmpty()) {
+                        continue;
+                    }
+                    $order->express_status = 2;
+                    $order->save();
+                    $express = (new SaasOrderExpress)->where("express_sn",trim($val['C']))->findOrEmpty();
+                    if ($express->isEmpty()) {
+                        $expressData[$key] = [
+                            "order_sn"      => trim($val['A']),
+                            "express_sn"    => trim($val['C']),
+                            "mobile"        => trim($val['B']),
+                            "last_at"       => getDateFull()
+                        ];
+                    }
+                }
+            }
+            if (!empty($expressData)) {
+                (new SaasOrderExpress)->insertAll(array_values($expressData));
+            }
+            (new SystemImport)->where("id",$data['logId'])->update(['status' => 1,"last_at" => getDateFull()]);
+            return true;
+        } catch (\Throwable $throwable) {
+            echo getDateFull()."==导入订单报错===\n";
+            echo $throwable->getFile()."\n";
+            echo $throwable->getLine()."\n";
+            echo $throwable->getMessage()."\n";
+        }
         return true;
     }
 

+ 37 - 0
app/service/saas/ExpressService.php

@@ -0,0 +1,37 @@
+<?php
+
+namespace app\service\saas;
+
+use app\extra\basic\Service;
+use app\model\system\SystemImport;
+
+class ExpressService extends Service
+{
+    /**
+     *
+     * @return $this
+     */
+    public function setModel(): static
+    {
+        $this->mode = (new SystemImport);
+        return $this;
+    }
+
+
+    /**
+     *
+     * @param array $param
+     * @return array
+     */
+    public function searchFilter(array $param = []): array
+    {
+        $filter = [];
+        !empty($param['poi_id']) && $filter[] = ["poi_id", '=', $param['poi_id']];
+        !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
+        !empty($param['uid']) && $filter[] = ["uuid", '=', $param['uid']];
+        !empty($param['type']) && $filter[] = ["type", '=', $param['type']];
+        return $filter;
+    }
+
+
+}

BIN
public/download/订单列表_1785124583217.xlsx


BIN
public/uploads/storage/20260727/3c967cbc6c5b70667ca579e179d92750adcd5c0c.xlsx


BIN
public/uploads/storage/20260727/4b8abf5f3e0f9b990276c021b5ffcb2832a5d531.xlsx


Some files were not shown because too many files changed in this diff