Zory 6 일 전
부모
커밋
82a98bad85

+ 27 - 0
app/controller/admin/Order.php

@@ -6,12 +6,14 @@ use app\extra\basic\Base;
 use app\extra\service\saas\OrderLogService;
 use app\extra\service\saas\OrderService;
 use app\middleware\AuthMiddleware;
+use app\model\system\SystemExport;
 use DI\Attribute\Inject;
 use LinFly\Annotation\Route\Controller;
 use LinFly\Annotation\Route\Route;
 use support\Request;
 use support\Response;
 use Webman\Annotation\Middleware;
+use Webman\RedisQueue\Redis;
 
 
 #[Controller(prefix: "/api/order"),Middleware(AuthMiddleware::class)]
@@ -50,4 +52,29 @@ class Order extends Base
         }
     }
 
+
+    /**
+     * 订单导出
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "export",methods: "get")]
+    public function exportOrder(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $logId = (new SystemExport)->insertGetId([
+                "uuid"  => $request->user['id'],
+                "name"  => $param['fileName'],
+            ]);
+            Redis::send("export-order",[
+                "logId"     => $logId,
+                "param"     => $param,
+            ]);
+            return successTrans("success.data",[],200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
 }

+ 36 - 0
app/controller/admin/Tasks.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace app\controller\admin;
+
+use app\extra\basic\Base;
+use app\middleware\AuthMiddleware;
+use app\model\system\SystemExport;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+use Webman\Annotation\Middleware;
+
+
+#[Controller(prefix: "/api/tasks"),Middleware(AuthMiddleware::class)]
+class Tasks extends Base
+{
+
+
+    #[Route(path: "list",methods: "get")]
+    public function getTaskList(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $mode = (new SystemExport);
+            if ($request->user['is_super'] == 0) {
+                $mode = $mode->where("uuid",$request->user['id']);
+            }
+            $list = $mode->order("create_at","desc")->select()->toArray();
+            return successTrans("success.data",$list,200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+}

+ 28 - 0
app/controller/merchant/Order.php

@@ -10,12 +10,14 @@ use app\middleware\AuthMiddleware;
 use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderLife;
 use app\model\saas\SaasOrderLog;
+use app\model\system\SystemExport;
 use DI\Attribute\Inject;
 use LinFly\Annotation\Route\Controller;
 use LinFly\Annotation\Route\Route;
 use support\Request;
 use support\Response;
 use Webman\Annotation\Middleware;
+use Webman\RedisQueue\Redis;
 
 
 #[Controller(prefix: "/api/merchant/order"),Middleware(AuthMiddleware::class)]
@@ -263,4 +265,30 @@ class Order extends Base
         }
     }
 
+
+    /**
+     * 订单导出
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "export",methods: "get")]
+    public function exportOrder(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $param['agent'] = $request->user['agent_id'];
+            $logId = (new SystemExport)->insertGetId([
+                "uuid"  => $request->user['id'],
+                "name"  => $param['fileName'],
+            ]);
+            Redis::send("export-order",[
+                "logId"     => $logId,
+                "param"     => $param,
+            ]);
+            return successTrans("success.data",[],200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
 }

+ 89 - 0
app/controller/notify/SfExpress.php

@@ -0,0 +1,89 @@
+<?php
+
+namespace app\controller\notify;
+
+use app\extra\basic\Base;
+use app\model\saas\SaasOrder;
+use app\model\saas\SaasOrderExpress;
+use app\model\saas\SaasOrderLog;
+use LinFly\Annotation\Route\Controller;
+use LinFly\Annotation\Route\Route;
+use support\Request;
+use support\Response;
+
+
+#[Controller(prefix: "/sf")]
+class SfExpress extends Base
+{
+
+    protected array $opCode = [
+        50 => "已揽件",
+        30 => "运输中",
+        31 => "运输中",
+        44 => "运输中",
+        80 => "已签收"
+    ];
+
+
+    /**
+     *
+     * @param Request $request
+     * @param $id
+     * @return Response
+     */
+    #[Route(path: "hook/{id}",methods: ['get','post'])]
+    public function getHook(Request $request,$id): Response
+    {
+        try {
+            if ($request->method() == "GET") {
+                $data = $request->get();
+            } else {
+                $data = $request->post();
+            }
+            if (!empty($data['orderState'])){
+                foreach ($data['orderState'] as $val) {
+                    $order = (new SaasOrder)->where("express_id",$val['waybillNo'])->findOrEmpty();
+                    if ($order->isEmpty()) return json(['code' => 0,"success" => true,"msg" => ""]);
+                    if ($val['empCode'] == 500963) {
+                        (new SaasOrderExpress)->insertGetId(['order_id' => $order['order_sn'],'express_id' => $val['waybillNo'],'content' => "顺丰快递",'title' => "系统已接收"]);
+                        (new SaasOrderLog)->insertGetId(['order_id' => $order['order_sn'],'remark' => "顺丰快递",'title' => "系统已接收"]);
+                    }
+
+                }
+            }
+            if (!empty($data['Body']['WaybillRoute'])){
+                foreach ($data['Body']['WaybillRoute'] as $val) {
+                    $order = (new SaasOrder)->where("express_id",$val['mailno'])->with(['store' => function($query){
+                        $query->field('store_id,store_name,appid,secret,express_time,order_end');
+                    }])->findOrEmpty();
+                    if ($order->isEmpty()) return json(['code' => 0,"success" => true,"msg" => ""]);
+                    if ($order['status'] >= 2) return json(['code' => 0,"success" => true,"msg" => ""]);
+                    (new SaasOrderExpress)->insertGetId(['order_id' => $order['order_sn'],'express_id' => $val['mailno'],'content' => $val['remark'],'title' => $this->opCode[$val['opCode']]??'']);
+                    (new SaasOrderLog)->insertGetId(['order_id' => $order['order_sn'],'remark' => $val['remark'],'title' => $this->opCode[$val['opCode']]??'' ]);
+                    if ($val['opCode'] == 50 && $order['store']['order_end'] == "2") { // 已揽收,发起核销
+                        // $val['acceptAddress'] 发货地址
+                        $this->orderDone($order->toArray(),1);
+                        $order->status = 2;
+                        $order->save();
+                    }
+                    if ($val['opCode'] == 80 && $order['store']['order_end'] == "3") { // 已签收
+                        // $val['acceptAddress'] 发货地址
+                        $this->orderDone($order->toArray(),2);
+                        $order->status = 2;
+                        $order->save();
+                    }
+                }
+            }
+            return json(['code' => 0,"success" => true,"msg" => ""]);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    protected function orderDone(array $data = [],int $type = 1)
+    {
+
+    }
+
+}

+ 28 - 0
app/controller/store/Order.php

@@ -6,12 +6,14 @@ use app\extra\basic\Base;
 use app\extra\service\saas\OrderLogService;
 use app\extra\service\saas\OrderService;
 use app\middleware\AuthMiddleware;
+use app\model\system\SystemExport;
 use DI\Attribute\Inject;
 use LinFly\Annotation\Route\Controller;
 use LinFly\Annotation\Route\Route;
 use support\Request;
 use support\Response;
 use Webman\Annotation\Middleware;
+use Webman\RedisQueue\Redis;
 
 
 #[Controller(prefix: "/api/store/order"),Middleware(AuthMiddleware::class)]
@@ -52,4 +54,30 @@ class Order extends Base
     }
 
 
+    /**
+     * 订单导出
+     * @param Request $request
+     * @return Response
+     */
+    #[Route(path: "export",methods: "get")]
+    public function exportOrder(Request $request): Response
+    {
+        try {
+            $param = $request->get();
+            $param['store'] = $request->user['store_id'];
+            $logId = (new SystemExport)->insertGetId([
+                "uuid"  => $request->user['id'],
+                "name"  => $param['fileName'],
+            ]);
+            Redis::send("export-order",[
+                "logId"     => $logId,
+                "param"     => $param,
+            ]);
+            return successTrans("success.data",[],200);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
 }

+ 2 - 1
app/extra/service/saas/GoodsService.php

@@ -33,7 +33,8 @@ class GoodsService extends Service
         !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
         !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
         !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
-        !empty($param['name']) && $filter[] = ["product_name", 'like', "%{$param['name']}%"];
+        !empty($param['title']) && $filter[] = ["product_name", 'like', "%{$param['title']}%"];
+        !empty($param['out_id']) && $filter[] = ["out_id", 'like', "%{$param['out_id']}%"];
         return $filter;
     }
 

+ 21 - 0
app/extra/service/saas/OrderService.php

@@ -29,6 +29,24 @@ class OrderService extends Service
         ]);
     }
 
+
+    /**
+     * @param array $param
+     */
+    public function getListAll(array $param = [])
+    {
+        $this->mode = new SaasOrder();
+        return $this->searchVal($param,$this->searchFilter($param))->with(['goods' => function($query){
+            $query->field("out_id,product_name,product_img,product_price");
+        },"store" => function($query){
+            $query->field("store_id,store_name,service_at_start,service_at_end");
+        },"agent" => function ($query) {
+            $query->field("agent_id,name");
+        },"parent" => function ($query) {
+            $query->field("order_id,status,pay_amount,order_amount,count");
+        }])->select()->toArray();
+    }
+
     public function getDataListMini(array $param = [])
     {
         $this->mode = new SaasOrder();
@@ -45,12 +63,15 @@ class OrderService extends Service
     {
         $filter = [];
         !empty($param['agent']) && $filter[] = ["agent_id", '=', $param['agent']];
+        !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
         !empty($param['open_id']) && $filter[] = ["open_id", '=', $param['open_id']];
         !empty($param['statusLt']) && $filter[] = ["status", '=', ($param['statusLt']-1)];
         !empty($param['status']) && $filter[] = ["status", '=', $param['status']];
         !empty($param['ex_status']) && $filter[] = ["express_status", '=', ($param['ex_status']-1)];
         !empty($param['orderid']) && $filter[] = ["order_id", 'like', "%{$param['orderid']}%"];
         !empty($param['ordersn']) && $filter[] = ["order_sn", 'like', "%{$param['ordersn']}%"];
+        !empty($param['product']) && $filter[] = ["product_id", 'like', "%{$param['product']}%"];
+        !empty($param['name']) && $filter[] = ["product_name", 'like', "%{$param['name']}%"];
         return $filter;
     }
 

+ 2 - 1
app/extra/service/saas/ShopService.php

@@ -34,7 +34,8 @@ class ShopService extends Service
         !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
         !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
         !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
-        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        !empty($param['name']) && $filter[] = ["poi_name", 'like', "%{$param['name']}%"];
+        !empty($param['poi']) && $filter[] = ["poi_id", 'like', "%{$param['poi']}%"];
         return $filter;
     }
 

+ 2 - 1
app/extra/service/saas/StoreService.php

@@ -32,7 +32,8 @@ class StoreService extends Service
         !empty($param['store']) && $filter[] = ["store_id", '=', $param['store']];
         !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
         !empty($param['type']) && $filter[] = ["store_type", '=', $param['type']];
-        !empty($param['name']) && $filter[] = ["name", 'like', "%{$param['name']}%"];
+        !empty($param['name']) && $filter[] = ["store_name", 'like', "%{$param['name']}%"];
+        !empty($param['account']) && $filter[] = ["store_id", 'like', "%{$param['account']}%"];
         return $filter;
     }
 

+ 2 - 0
app/extra/service/system/UserService.php

@@ -34,6 +34,8 @@ class UserService extends Service
         !empty($param['status']) && $filter[] = ["status", '=', ($param['status']-1)];
         !empty($param['mobile']) && $filter[] = ["mobile", 'like', "%{$param['mobile']}%"];
         !empty($param['username']) && $filter[] = ["username", 'like', "%{$param['username']}%"];
+        !empty($param['name']) && $filter[] = ["username", 'like', "%{$param['name']}%"];
+        !empty($param['type']) && $filter[] = ["type", '=', $param['type']];
         return $filter;
     }
 

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

@@ -0,0 +1,47 @@
+<?php
+
+namespace app\model\saas;
+
+use app\extra\basic\Model;
+
+
+/**
+ * @property integer $id (主键)
+ * @property string $order_id 
+ * @property string $express_id 顺丰订单id
+ * @property string $content 
+ * @property string $title 
+ * @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;
+
+
+}

+ 72 - 0
app/queue/redis/ExportOrder.php

@@ -0,0 +1,72 @@
+<?php
+
+namespace app\queue\redis;
+
+use app\extra\service\saas\OrderService;
+use app\model\system\SystemExport;
+use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
+use PhpOffice\PhpSpreadsheet\Spreadsheet;
+use Webman\RedisQueue\Consumer;
+
+class ExportOrder implements Consumer
+{
+
+    public $queue = "export-order";
+
+    public $connection = "default";
+
+
+    /**
+     * @param $data
+     * @return bool
+     */
+    public function consume($data): bool
+    {
+        echo getDateFull()."===导出订单\n";
+        $order = (new OrderService)->getListAll($data['param']);
+        if (empty($order))
+        {
+            (new SystemExport)->where("id",$data['logId'])->save(['status' => 2]);
+            return true;
+        }
+        $title = ["订单编号","所属门店","订单类型","商品ID","商品名称","规格","订单金额","收件人","收件电话","收件地址","券码"];
+        $titCol = 'A';
+        $spreadsheet = new Spreadsheet();
+        $sheet = $spreadsheet->getActiveSheet();
+        foreach($title as $k=>$v){
+            $sheet->setCellValue($titCol."1",$v);
+            $titCol ++;
+        }
+        $row = 2;
+        foreach ($order as $item){
+            $dataCol = "A";
+            $newData = [
+                "order_id"      => (string) $item['order_id'], // 余额
+                "store"         => $item['store']['store_name']??'-',
+                "type"          => $item['service_type']==1?'预约':'快递',
+                "out_id"        => $item['product_id']??'-',
+                "product_name"  => $item['product_name']??'-',
+                "sku"           => $item['sku']??'-',
+                "order_amount"  => "¥".$item['parent']['order_amount']??'-',
+                "username"      => $item['username']??'-',
+                "mobile"        => $item['mobile']??'-',
+                "address"       => $item['region'].$item['address'],
+                "certificate"   => $item['certificate_id']??'-'
+            ];
+            foreach ($newData as $value) {
+                $sheet->setCellValue($dataCol . $row, ' '.$value);
+                $dataCol++;
+            }
+            $row++;
+        }
+        $write = new Xlsx($spreadsheet);
+        $pathName = public_path().DIRECTORY_SEPARATOR."logs".DIRECTORY_SEPARATOR.$data['param']['fileName'];
+        (new SystemExport)->where("id",$data['logId'])->update([
+            "down_url"  => "https://file.jsshuita.com.cn/logs/".$data['param']['fileName'],
+            "status"    => 1
+        ]);
+        $write->save($pathName);
+        return true;
+    }
+
+}