Zory 2 weken geleden
bovenliggende
commit
50e703b4db

+ 53 - 23
app/command/ExpressOrder.php

@@ -22,7 +22,7 @@ class ExpressOrder extends Command
             $output->writeln("开始更新快递信息====>" . getDateFull());
             $nextPage = 1;
             while (is_numeric($nextPage)) {
-                $resp = (new SaasOrderExpress)->where(["status" => 0])->with(['orders' => function ($query) {
+                $resp = (new SaasOrderExpress)->where('status',0)->where("create_at","<",date('Y-m-d')." 00:00:00")->with(['orders' => function ($query) {
                     $query->field("*")->with(['poi']);
                 }])->page($nextPage,10)->select();
                 if ($resp->isEmpty()) {
@@ -35,35 +35,65 @@ class ExpressOrder extends Command
                         echo getDateFull()."=={$item['order_sn']}==订单对应商家不存在===\n";
                         continue;
                     }
-                    $startTime = $item['orders']['poi']['order_start']??'09:00';
-                    $endTime = $item['orders']['poi']['order_end']??'22:30';
-                    $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00"));
-                    $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00"));
-                    echo "开始时间:{$startTimeStamp};结束时间:{$endTimeStamp}\n";
-                    if (time() > $startTimeStamp && time() < $endTimeStamp) {
-                        [$state,$expressData] = $this->getExpressData($item['express_sn'],$item['mobile']);
-                        if ($state && $item['orders']['is_error'] == 0) {
-                            $isDone = false;
-                            foreach ($expressData['logisticsTraceDetailList'] as $sk){
-                                if (in_array($sk['logisticsStatus'],['DELIVERING','AGENT_SIGN','SIGN'])) {
-                                    $isDone = true;
-                                }
+                    [$state,$expressData] = $this->getExpressData($item['express_sn'],$item['mobile']);
+                    if ($state) {
+                        $isDone = false;
+                        foreach ($expressData['logisticsTraceDetailList'] as $sk){
+                            if (in_array($sk['logisticsStatus'],['DELIVERING','AGENT_SIGN','SIGN'])) {
+                                $isDone = true;
                             }
-//                        if (in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) { // 核销订单
-                            if ($isDone) { // 核销订单
-                                $output->writeln("订单进入核销=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
-                                (new SaasOrderExpress)->where("id",$item['id'])->update(['status' => 1,'last_at' => getDateFull(),'last_msg' => $expressData['logisticsStatusDesc'],'content' => json_encode($expressData['logisticsTraceDetailList'])]);
-                                Redis::send("order-done",['order' => $item['order_sn']]);
+                        }
+                        $expressUpData = [
+                            'last_at'   => getDateFull(),
+                            'last_msg'  => $expressData['logisticsStatusDesc'],
+                            'content'   => json_encode($expressData['logisticsTraceDetailList'])
+                        ];
+                        if ($isDone) { // 核销订单
+                            $where = [];
+                            if (str_contains($item['order_sn'], 'AL')) {
+                                $where['out_order_no']  = $item['order_sn'];
                             } else {
-                                (new SaasOrderExpress)->where("id",$item['id'])->update(['last_msg' => $expressData['logisticsStatusDesc'],'last_at' => getDateFull(),'content' => json_encode($expressData['logisticsTraceDetailList'])]);
-                                $output->writeln("查询物流成功=={$item['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull());
+                                $where['order_sn']  = $item['order_sn'];
                             }
+                            (new SaasOrder)->where($where)->save(['is_done' => 1]);
+                            $expressUpData['status'] = 1;
+                            $output->writeln("订单可以核销=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
                         } else {
-                            $output->writeln("查询快递信息失败=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
+                            $output->writeln("查询物流成功=={$item['express_sn']}=={$item['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull());
                         }
+                        (new SaasOrderExpress)->where("id",$item['id'])->update($expressUpData);
                     } else {
-                        echo getDateFull()."==={$item['order_sn']}===不在核销时段==\n";
+                        $output->writeln("查询快递信息失败=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
                     }
+//                    $startTime = $item['orders']['poi']['order_start']??'09:00';
+//                    $endTime = $item['orders']['poi']['order_end']??'22:30';
+//                    $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00"));
+//                    $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00"));
+//                    echo "开始时间:{$startTimeStamp};结束时间:{$endTimeStamp}\n";
+//                    if (time() > $startTimeStamp && time() < $endTimeStamp) {
+//                        [$state,$expressData] = $this->getExpressData($item['express_sn'],$item['mobile']);
+//                        if ($state && $item['orders']['is_error'] == 0) {
+//                            $isDone = false;
+//                            foreach ($expressData['logisticsTraceDetailList'] as $sk){
+//                                if (in_array($sk['logisticsStatus'],['DELIVERING','AGENT_SIGN','SIGN'])) {
+//                                    $isDone = true;
+//                                }
+//                            }
+////                        if (in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) { // 核销订单
+//                            if ($isDone) { // 核销订单
+//                                $output->writeln("订单进入核销=={$item['order_sn']}=={$item['express_sn']}==".getDateFull());
+//                                (new SaasOrderExpress)->where("id",$item['id'])->update(['status' => 1,'last_at' => getDateFull(),'last_msg' => $expressData['logisticsStatusDesc'],'content' => json_encode($expressData['logisticsTraceDetailList'])]);
+//                                Redis::send("order-done",['order' => $item['order_sn']]);
+//                            } else {
+//                                (new SaasOrderExpress)->where("id",$item['id'])->update(['last_msg' => $expressData['logisticsStatusDesc'],'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());
+//                        }
+//                    } else {
+//                        echo getDateFull()."==={$item['order_sn']}===不在核销时段==\n";
+//                    }
                 }
                 $nextPage = $nextPage+1;
                 $output->writeln("进入下一页=={$nextPage}==".getDateFull());

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

@@ -35,7 +35,7 @@ class Notify extends Base
             if ($order['status'] <> 0) return json(['err_no' => 0,'err_tips' => "success"]);
             (new SaasOrderItem)->where("order_sn",$order['order_sn'])->update(['status' => 1]);
             // 查询订单详情 - 延迟30秒读取
-            Redis::send("sync-order-info",['order' => $order['order_sn']],30);
+            Redis::send("sync-order-info",['order' => $order['order_sn']],60);
 //            $orderData = (new OrderData)->config([
 //                "appid"     => sConf("wechat.appid"),
 //                "secret"    => sConf("wechat.secret"),

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

@@ -142,6 +142,7 @@ class Order extends Base
             $order = $this->model->where("out_order_no",$param['order'])->with(['product','poi','user'])->findOrEmpty();
             if ($order->isEmpty()) return errorTrans("empty.data");
             if ($order['status'] <> 7) return error("该订单状态不支持核销");
+            if ($order['is_done'] <> 1) return error("该订单状态不支持核销");
             if ($request->user['store_id'] <> $order['poi_id'] && $request->user['is_super'] == 0) return errorTrans("empty.data");
             $orderExpress = (new SaasOrderExpress)->where("order_sn",$order['out_order_no'])->findOrEmpty();
             if ($orderExpress->isEmpty()) return error("订单尚未发货");
@@ -150,7 +151,7 @@ class Order extends Base
             }
             [$state,$expressData] = (new LifeWeb)->getExpressData($orderExpress['express_sn'],$orderExpress['mobile']);
             if (!$state) return error("查询物流失败,请联系管理员");
-            if (!in_array($expressData['logisticsStatusDesc'],['派件中',"已签收"])) return error("当前物流状态不允许核销");
+            if (!in_array($expressData['logisticsStatusDesc'],['派件中',"已签收","已代收"])) return error("当前物流状态不允许核销");
             $startTime = $order['poi']['order_start']??'09:00';
             $endTime = $order['poi']['order_end']??'22:30';
             $startTimeStamp = strtotime(date("Y-m-d {$startTime}:00"));
@@ -183,7 +184,7 @@ class Order extends Base
     }
 
     /**
-     * 手动核销
+     * 手动核销 - 废弃
      * @param Request $request
      * @return Response
      */

+ 61 - 0
app/controller/notify/Test.php

@@ -13,6 +13,7 @@ use LinFly\Annotation\Attributes\Route\Controller;
 use LinFly\Annotation\Attributes\Route\GetMapping;
 use support\Request;
 use support\Response;
+use yzh52521\EasyHttp\Http;
 
 
 #[Controller("/test")]
@@ -178,4 +179,64 @@ class Test extends Base
         }
     }
 
+    #[GetMapping('mini/order')]
+    public function getTest(Request $request)
+    {
+        try {
+            $param = $this->_valid([
+                "order.require" => trans("empty.require")
+            ],$request->method());
+            if (!is_array($param)) return error($param);
+            $resp = (new SaasOrderExpress)->where('express_sn',$param['order'])->with(['orders' => function ($query) {
+                $query->field("*")->with(['poi']);
+            }])->findOrEmpty();
+            if ($resp->isEmpty()) return error("没有任务啦");
+            [$state,$expressData] = $this->getExpressData($resp['express_sn'],$resp['mobile']);
+            $isDone = false;
+            foreach ($expressData['logisticsTraceDetailList'] as $sk){
+                if (in_array($sk['logisticsStatus'],['DELIVERING','AGENT_SIGN','SIGN'])) {
+                    $isDone = true;
+                }
+            }
+            $expressUpData = [
+                'last_at'   => getDateFull(),
+                'last_msg'  => $expressData['logisticsStatusDesc'],
+                'content'   => json_encode($expressData['logisticsTraceDetailList'])
+            ];
+            if ($isDone) { // 核销订单
+                $where = [];
+                if (str_contains($resp['order_sn'], 'AL')) {
+                    $where['out_order_no']  = $resp['order_sn'];
+                } else {
+                    $where['order_sn'] = $resp['order_sn'];
+                }
+                (new SaasOrder)->where($where)->save(['is_done' => 1]);
+                $expressUpData['status'] = 1;
+                $msg = ("订单可以核销=={$resp['order_sn']}=={$resp['express_sn']}==".getDateFull())
+            } else {
+                $msg = ("查询物流成功=={$resp['express_sn']}=={$resp['order_sn']}=={$expressData['logisticsStatusDesc']}==".getDateFull());
+            }
+            (new SaasOrderExpress)->where("id",$resp['id'])->update($expressUpData);
+            return success('ok',['msg' => $msg]);
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
+
+    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']];
+    }
 }

+ 1 - 3
app/controller/service/Heart.php

@@ -23,9 +23,7 @@ class Heart extends Base
         try {
             $user = (new SystemUser)->where("id",$request->user['id'])->findOrEmpty();
             if ($user->isEmpty()) return errorTrans("empty.data");
-            if ($user['is_line'] == 0) {
-                $user->is_line = 1;
-            }
+            if ($user['is_line'] == 0) return errorTrans("empty.data");
             $user->last_active_at = getDateFull();
             $user->save();
             return success("ok");

+ 1 - 1
app/controller/v2/Chat.php

@@ -105,7 +105,7 @@ class Chat extends Base
             $serviceAvatar = sConf("service.logo");
             $star = (new SaasService)->where("poi_id",$param['poi'])->with(['quick'])->findOrEmpty();
             // 获取在线客服
-            $service = (new SystemUser)->where(['store_id' => $param['poi'],"type" => 3,"is_line" => 1])->order("last_msg_at","asc")->findOrEmpty();
+            $service = (new SystemUser)->where(['store_id' => $param['poi'],"type" => 3,"is_line" => 1])->order("last_active_at","asc")->findOrEmpty();
             if ($service->isEmpty()) { // 无客服在线
                 return success("ok",[
                     "avatar"    => $userAvatar,

+ 1 - 1
app/controller/v2/Goods.php

@@ -70,7 +70,7 @@ class Goods extends Base
     }
 
     #[GetMapping("check")]
-    public function checkGoodsUser (Request $request): Response
+    public function checkGoodsUser(Request $request): Response
     {
         try {
             $param = $this->_valid([

+ 1 - 1
app/controller/v2/Home.php

@@ -52,7 +52,7 @@ class Home extends Base
                 "size.default" => 10
             ],$request->method());
             if (!is_array($param)) return error($param);
-            $goods = (new SaasGoods)->where("poi_id",$param['store'])->where("status",1)->field("product_id,product_name,image_list,category,price,line_price,sale_stock,id,goods_id,is_new")->limit(10)->order('id','desc')->paginate([
+            $goods = (new SaasGoods)->where(["poi_id" => $param['store'],'status' => 1,'show_channel' => 1])->field("product_id,product_name,image_list,category,price,line_price,sale_stock,id,goods_id,is_new")->order('id','desc')->paginate([
                 "list_rows" => $param['size'],
                 "page"      => $param['page']
             ]);

+ 1 - 1
app/model/saas/SaasOrderExpress.php

@@ -47,7 +47,7 @@ class SaasOrderExpress extends Model
 
     public function orders(): HasOne
     {
-        return $this->hasOne(SaasOrder::class,"order_sn","order_sn");
+        return $this->hasOne(SaasOrder::class,"out_order_no","order_sn");
     }
 
 }

+ 1 - 1
app/queue/redis/slow/SyncOrder.php

@@ -33,7 +33,7 @@ class SyncOrder implements Consumer
             if ($order->isEmpty()) return true;
             $storeRate = (new SaasStore)->where("poi_id",$order["poi_id"])->value("life_rate");
             if (empty($storeRate)) $storeRate = 7.6;
-            $systemFee = ($storeRate - 6) / 100 * $order['price'];
+            $systemFee = ($storeRate - 6) / 100 * $order['pay_money'];
             [$state,$resp] = (new LifeWeb)->token()->getOrderData($order['order_sn']);
             if (!$state) {
                 echo getDateFull()."=={$order['order_sn']}==获取数据失败了==\n";