zory 3 hete
szülő
commit
7cab6fe56d

+ 1 - 1
app/controller/admin/Order.php

@@ -32,7 +32,7 @@ class Order extends Base
             $param = $request->all();
             $productType = $this->goodsService->productType();
             $data = $this->service->setModel()->getList($param,['product' => function($query) use($productType){
-                $query->field("product_id,product_name,product_type")->append(['types'])->withAttr(['types' => function($query,$resp) use($productType){
+                $query->field("product_id,product_name,product_type,is_new,price,line_price")->append(['types'])->withAttr(['types' => function($query,$resp) use($productType){
                     $productTypeArr = [];
                     foreach ($productType as $val) {
                         $productTypeArr[$val['key']] = $val['name'];

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

@@ -5,10 +5,13 @@ namespace app\controller\merchant;
 use app\extra\basic\Base;
 use app\extra\dyLife\data\BaseData;
 use app\extra\dyLife\data\OrderData;
+use app\extra\tools\LifeWeb;
 use app\middleware\AuthMiddleware;
 use app\model\saas\SaasOrder;
 use app\model\saas\SaasOrderAddress;
+use app\model\saas\SaasOrderExpress;
 use app\model\saas\SaasOrderItem;
+use app\model\saas\SaasOrderVerify;
 use app\model\saas\SaasStore;
 use app\model\saas\SaasUserOpen;
 use app\model\system\SystemImport;
@@ -120,6 +123,60 @@ class Order extends Base
         }
     }
 
+    /**
+     * 小程序手动核销
+     * @param Request $request
+     * @return Response
+     */
+    #[PostMapping('doneMini')]
+    public function doneOrderMini(Request $request): Response
+    {
+        try {
+            $param = $this->_valid([
+                "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'])->findOrEmpty();
+            if ($order->isEmpty()) return errorTrans("empty.data");
+            if ($order['status'] <> 7) 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['order_sn'])->findOrEmpty();
+            if ($orderExpress->isEmpty()) return error("订单尚未发货");
+            if (strtotime("+24 hour",strtotime($order['error_at'])) < time()) return error("新订单需24小时后方可核销");
+            [$state,$expressData] = (new LifeWeb)->getExpressData($orderExpress['express_sn'],$orderExpress['mobile']);
+            if (!$state) 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"));
+            $endTimeStamp = strtotime(date("Y-m-d {$endTime}:00"));
+            if (time() > $startTimeStamp && time() < $endTimeStamp) {
+                $data = (new OrderData)->config([
+                    "appid"     => sConf("wechat.mini_appid"),
+                    "secret"    => sConf("wechat.mini_secret")
+                ])->token()->verifyOrder($order->toArray());
+                if (empty($data['verify_results'])) return error($data['description']); // 核销失败
+                $order->status = 2;
+                $order->express_status = 3;
+                $order->done_at = getDateFull();
+                $order->save();
+                (new SaasOrderItem)->where(['order_sn'=>$order['order_sn'],'status'=>1])->update(['status'=>3]);
+                (new SaasOrderVerify)->insertGetId([
+                    "poi_id"            => $order['poi_id'],
+                    "order_sn"          => $order['order_sn'],
+                    "money"             => $order['price'],
+                    "certificate_id"    => $data['verify_results'][0]['certificate_id']??'0',
+                    "verify_id"         => $data['verify_results'][0]['verify_id']??'0',
+                ]);
+                return success("核销成功");
+            } else {
+                return error("当前时间段不支持核销");
+            }
+        } catch (\Throwable $throwable) {
+            return error($throwable->getMessage());
+        }
+    }
+
     /**
      * 手动核销
      * @param Request $request

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

@@ -151,10 +151,10 @@ class OrderData extends BasicLife
             "delivery_status"   => 2,
             "item_order_list"   => [
                 [
-                    "item_order_id" => "",
+                    "item_order_id" => $data['item_order_id'],
                 ]
             ],
-            "out_order_no"      => "",
+            "out_order_no"      => $data['out_order_no'],
             "use_all"           => true
         ];
         return $this->curlPostApi("api/apps/trade/v2/fulfillment/push_delivery/",$param);

+ 16 - 0
app/extra/tools/LifeWeb.php

@@ -88,6 +88,22 @@ class LifeWeb
         ]];
     }
 
+    public 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']];
+    }
+
 
     protected function getCookies()
     {